local-review.yml (push) Invalid workflow file
Auto-version and Release / release (push) Successful in 10s
CI Pipeline / lint (push) Failing after 28s
CI Pipeline / go-surface (push) Failing after 18s
CI Pipeline / rust-surface (push) Successful in 4m9s
CI Pipeline / canary (push) Failing after 1m1s
CI Pipeline / best-practices (push) Successful in 7s
CI Pipeline / documentation (push) Successful in 6s
CI Pipeline / type-check (push) Failing after 33s
CI Pipeline / gitea-offline (push) Successful in 17s
CI Pipeline / unit-tests (push) Failing after 8m14s
deploy / deploy (push) Failing after 15m11s
CI Pipeline / required-checks (push) Failing after 0s
CI Pipeline / CI Pipeline / notify-event-bridge (push) Failing after 9s
Measured per-module state of the six-module evidence-provenance surface: claim_audit 17/17 SWITCHED; behavior/behaviour_ledger/evidence_probe/ verification_layer loader-integrated; audit_ledger is the one gap (0 loader refs) — with the drift-key pin (live ledger verifies under the DEPLOYED vintage rune-drift-integrity-2024) and the vintage reconciliation constraint recorded as frozen-contract input. Batteries green: 14/14 module families + 6/6 shims.
2.8 KiB
2.8 KiB
Phase G Slice 2 (T7.3) — Evidence-Provenance Surface Census (#2449)
Generated 2026-10-08 (contract BUILDER-2026-10-08T14:02:24Z-588ca6). The six-module surface, its Rust candidate, and the per-module switch state — measured, not asserted. This is the frozen-contract input.
The Rust candidate
src/rust/evidence_provenance/ — 24 pub extern symbols, CI-built on all
three rust steps (evidence_provenance/Cargo.toml in every list). The
cdylib carries the ep_* core (compute_hash, append_entry, verify_chain)
plus the per-module helper seams (ca_*, and the loader families).
Per-module switch state
| module | loader integration | parity evidence | state |
|---|---|---|---|
| claim_audit.py | ep_loader (ca_evidence_terms, ca_verify_gate, ca_report_aggregate) — 17/17 proven vs this module's Python vintage (docstring) | ep parity 17/17 | SWITCHED |
| behavior.py | 4 loader/ctypes refs | ep_loader import + parity battery | SWITCHED |
| behaviour_ledger.py | 11 loader/ctypes refs | dual-import (validation ledger) | SWITCHED |
| evidence_probe.py | 4 loader/ctypes refs | ep_loader delegation | SWITCHED |
| verification_layer.py | 3 loader/ctypes refs | ep_loader delegation | SWITCHED |
| audit_ledger.py | 0 — NO loader integration | drift-key vintage split (see below) | REMAINING GAP |
Test batteries observed green this session: claim_audit/audit_ledger/ behavior/evidence_probe/verification_layer families 14/14; test_evidence_provenance_shims.py 6/6.
The remaining work (batches after this census)
- audit_ledger switch — the only module with zero loader integration.
Pin the DRIFT KEY FIRST: the live promotion_ledger.jsonl (21 entries)
verifies valid under the DEPLOYED vintage key
rune-drift-integrity-2024; the src/rune default (rune-governed-adaptation-2024) fails it. The Rust seam must carry the deployed-vintage key as the verification key for existing entries (the frozen contract pins this). - Vintage reconciliation — src/rune/ is the hardened NEWER vintage (memory_env-pathed DB, defensive code); deployed + shared/ audit_ledger are OLDER. The switch must reconcile, not clobber (RECONCILE-DON'T-CLOBBER).
- Supersession ledger — per-module close records after shadow evidence.
- Shadow — run the ep parity battery + per-module canaries as the shadow evidence per the slice-1 pattern (see scripts/qm_shadow.py for the shape).
Grounding findings carried from the issue (verified this session)
- Only 3 of 6 modules are deployed (~/.config/opencode/scripts/): audit_ledger, behavior, claim_audit. Consumers confirmed: rune_tui.py (claim_audit, behavior), curator.py + canaries (audit_ledger), rune_operator.py:581 (evidence_probe).
- The divergent-vintage finding and the live-ledger drift-key finding are banked above and pin the contract.