CLI Reference
All commands accept an optional --store memory|fjall <path> flag
before the command name to select the storage backend. Default is
--store memory (in-memory, no persistence).
emit
Create, sign, and store a claim.
elench [--store ...] emit <claim.json>
The JSON file must contain a Claim with fields matching
schema/claim.schema.json. The claim’s id is computed from content
(INV-28); the provided id is ignored. The claim is signed in a DSSE
envelope (INV-22) and stored in the content-addressed store.
verify
Verify a DSSE envelope and validate the enclosed claim.
elench verify <envelope.json>
Extracts the claim and signer from the envelope, verifies the Ed25519 signature, and runs the emission-rule validator (ADR-0006).
status
Compute a claim’s status by folding the log.
elench status <claim_id> [<claims.json>]
Status is unevaluated, passed, or falsified — computed from the
log, never stored (INV-04). If no claims file is given, the status is
computed from an empty log (live evaluation, INV-14).
gate
Evaluate the release gate for a tree.
elench gate <tree_oid> [<claims.json>]
The gate is a predicate over claims (R3). It checks four conditions
(see docs/release-policy.md): no falsified premise, bounded residue,
origin floor, builder agreement. The verdict is computed live, not
cached (INV-14).
blast
Compute the blast radius from a claim.
elench blast <claim_id> [<claims.json>]
The blast radius is the transitive dependsOn closure — all claims
that depend on the given claim, directly or indirectly. If the given
claim is falsified, every claim in its blast radius is also
falsified.
git
Materialize the git projection.
elench [--store ...] git <claims.json> # oneline (default)
elench [--store ...] git oneline <claims.json> # git log --oneline
elench [--store ...] git full <claims.json> # full git log
elench [--store ...] git init <output_path> <claims.json> # real .git/
The projection synthesizes git-compatible objects (blobs, trees, commits) from the claim log (ADR-0002). Synthesis is deterministic (BC4, INV-20): two parties with the same claim log produce byte-identical objects.
git init writes real zlib-compressed git objects to
<output_path>/.git/objects/. After materialization, git log,
git blame, and git checkout work in the output directory.
store
Store a blob or tree in the content-addressed store.
elench [--store ...] store blob <file>
elench [--store ...] store tree <file1> <file2> ...
Blobs are SHA-256 content-addressed (INV-25). Trees are canonical
(mode space name null oid) and SHA-256 content-addressed. With
--store fjall <path>, objects persist across processes.
log
Log statistics: count, status distribution, conflicts.
elench log <claims.json>
Reports total count, kind distribution (assertion, verification,
falsification, supersession, residue-acceptance), status distribution
(unevaluated, passed, falsified), noise ratio, and dependsOn
density.
review
Review unevaluated claims for a tree.
elench review <tree_oid> <claims.json>
Lists all unevaluated claims anchored to the given tree, showing
form, language, source, and producer. The human must name each gap
before elench accept issues a residue-acceptance.
accept
Accept named unevaluated gaps (residue-acceptance).
elench accept <tree_oid> <claims.json> --claim <id> [<id>...]
Only humans may emit residue-acceptance records (INV-12). Each named claim must be unevaluated; the acceptance covers the excess residue above the policy’s allowance (R5).
conflicts
List active predicate conflicts for a tree.
elench conflicts <tree_oid> <claims.json>
Two predicates are a conflict if and only if they anchor to the same code location (same path+range, or same symbol) but assert different expressions. Two predicates about different files are not a conflict. Last-writer-wins by timestamp; the older claim is flagged for resolution.
compact
Compact the claim log (manual, destructive).
elench compact <claims.json> [--before <timestamp>]
Retires all claims before the cut-off timestamp, freezing their statuses. The compaction record carries the frozen status snapshot forward. Active claims continue to be revocable (R1 preserved for active claims, deliberately violated for retired ones).
reconcile
Detect anchors that no longer resolve.
elench reconcile <tree_oid> <claims.json>
For each claim anchored to the given tree, resolves the anchor using the multi strategy (path-range, symbol, content-digest). Claims that fail to resolve or are degraded are reported as drifted. The reconciliation pass is read-only — it does not auto-fix.
artifact
Create or verify a release artifact (INV-15).
elench artifact create <tree_oid> <policy_name> <sha256_digest>
elench artifact verify <artifact.json> <claims.json>
The artifact carries (version, tree, policy, digest, released_at) —
NOT a verdict (INV-15). Consumers re-evaluate the gate at consumption
time (R4). See schema/artifact.schema.json for the format.
build
Run a build, capture exit code + digest, emit provenance.
elench build <tree_oid> [--artifact <path>] -- <command...>
Runs the build command, captures the exit code, and computes a
SHA-256 digest. With --artifact <path>, the digest is SHA-256 of
that file (the real build output). Without it, the digest falls back
to SHA-256 of stdout. Emits a build provenance claim with
origin.kind = harness-observed (INV-22).