Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Enforcement Map

For each invariant, where it is enforced. All 28 invariants are ENFORCED (code exists and tests fail if violated). INV-15 was upgraded from FUTURE to MOCK — the artifact now carries a version field and schema/artifact.schema.json defines the format.

Revocability and status (R1)

INVEnforcement pointStatus
INV-01: Append, not modifyelench-store::store_blob/tree/claim — idempotent, no update (MemoryStore + FjallStore)ENFORCED
INV-02: Prior status visibleelench-claim::compute_status — fold reads all recordsENFORCED
INV-03: Claim identity stableelench-claim::ClaimId — content address, immutableENFORCED
INV-04: Status computed, not storedelench-claim::compute_status — pure functionENFORCED
INV-28: Claim OID is content hashelench-claim::ClaimId::from_content — SHA-256 of canonical JSONENFORCED
INV-29: dependsOn acyclicelench-claim::validate_claim — DFS cycle detection over logENFORCED

Origin typing (R2, AGENTS.md)

INVEnforcement pointStatus
INV-05: origin.kind requiredelench-claim — type system, OriginKind non-optionalENFORCED
INV-06: No harness-observed from agentselench-claim::validate_claim — cross-checks signer.entity against origin.kindENFORCED
INV-07: Only harness emits verificationelench-claim::validate_claim — cross-checks signer.entity against kindENFORCED
INV-08: Predicate requires expressionelench-claim::validate_claim — calls elench-predicate::parseENFORCED
INV-09: Annotations never read by policyelench-gate::evaluate — filters on form=predicate, skips annotationsENFORCED
INV-11: Failure recorded only when status changedelench-claim::validate_claim — checks target status in logENFORCED
INV-12: No residue-acceptance from agentselench-claim::validate_claim — cross-checks signer.entity against kindENFORCED

Gate and release (R3, R4)

INVEnforcement pointStatus
INV-13: Gate without buildelench-gate::evaluate — takes &[Claim], no build callsENFORCED
INV-14: Artifact acceptability is live evaluationelench-gate::evaluate — called on demand, no cached verdictENFORCED
INV-15: Artifact carries (tree, policy), not verdictelench-gate::Artifact — version, tree, policy, digest, released_at; schema/artifact.schema.json; no verdict fieldENFORCED (MOCK)

Unevaluated (R5)

INVEnforcement pointStatus
INV-16: unevaluated first-classelench-claim::ClaimStatus::UnevaluatedENFORCED
INV-17: Bounded residue with acceptanceelench-gate::evaluate — condition 2, residue-acceptance recordsENFORCED

Substrate and projection (R6, ADR-0001, ADR-0002, ADR-0007)

INVEnforcement pointStatus
INV-18: elench owns content-addressed storeelench-store — no git dependency, owns storage; MemoryStore (default) + FjallStore (optional, ADR-0008)ENFORCED
INV-19: Git projection is read-onlyelench-projection::synthesize — takes &dyn StoreBackend, no writes; elench-projection::materialize — writes to filesystem, not to storeENFORCED
INV-20: Git synthesis deterministicelench-projection — proptest_inv_20_synthesis_deterministic + proptest_inv_20_synthesis_order_independentENFORCED
INV-21: Git projection no side effectselench-projection — scenario_inv19_projection_does_not_write_to_storeENFORCED
INV-25: Content addressing (SHA-256)elench-store::Oid::from_blob_data/from_tree_entries + deserialize_tree_bytes round-trip; elench-claim::ClaimId::from_content; FjallStore::read_tree round-trip (feature tier)ENFORCED
INV-26: Store is sole source of truthelench-store — all views derive from store; `–store memoryfjall ` selects backend at runtime
INV-27: Git projection is lossy, not authoritativeelench-projection — scenario_inv27_projection_is_lossyENFORCED

Supply-chain composability (R7, ADR-0003)

INVEnforcement pointStatus
INV-22: DSSE/in-toto shared formatelench-envelope::sign / verify; PREDICATE_TYPE_AGENT; Ed25519 signatures (A1)ENFORCED

Predicate language (ADR-0004)

INVEnforcement pointStatus
INV-23: Expressions executable/deterministic/sandboxableelench-predicate — 4 primitives (grep, test, run, exists), not Turing-completeENFORCED

Validator (ADR-0006)

INVEnforcement pointStatus
INV-24: AGENTS.md rules enforcedelench-claim::validate_claim — implemented, all rules enforcedENFORCED

Conflict detection

FunctionEnforcement pointStatus
elench_claim::detect_conflictsSame-anchor, different expression — crates/elench-claim/src/lib.rs; 8 unit tests + 4 CLI testsENFORCED