feat: itd-80 phase 4 — host-delegated fidelity verdict ingest to Audit Notes - #26
Merged
Merged
Conversation
…t Notes The intent-lifecycle audit closes the loop. The intent's ## Audit Notes is the single source of truth (no side receipt store): reconcile writes an OWED marker at the ship-move and emits a review request to .abcd/.work.local/; 'abcd intent review ingest --verdict-json <path>' schema- and semantic-gates the host reviewer's VSA-shaped verdict, then idempotently replaces the marker with per-criterion verdicts + a honoured/diverged/missing audit (each with cited file:line evidence) + pinned provenance (verifier/rubric/prompt/ attestation). Fail-closed: unsolicited verdict rejected; malformed or partial (not all criteria judged) verdict → DEAD_LETTER, raw payload retained, criteria INCONCLUSIVE, never partial. Ships the host-delegated markdown agent agents/intent-fidelity-reviewer.md. Two independent reviews: security-reviewer PASS (fuzzed the marker neutraliser, no forgery/replay/traversal/partial-write); ruthless-reviewer FIX-FIRST (a partial verdict was accepted and locked in) fixed test-first, plus provenance rendering, idempotent emit, and nits. Part of itd-80. Assisted-by: Claude:claude-opus-4-8
REPPL
added a commit
that referenced
this pull request
Jul 12, 2026
The acceptance test for itd-80's own slice: itd-80 driven drafts->planned-> shipped by the machinery it specifies, not by hand. Live cycle on the on-main pipeline (PRs #22/#24/#26): abcd intent plan itd-80 -> mints spc-2 (spc-1 reserved by itd-3 skipped), links, moves drafts->planned abcd spec close spc-2 -> reconcile ships itd-80 planned->shipped, parks OWED review rcp-1c213fa02f85 abcd intent review ingest -> machine fidelity audit written to ## Audit Notes; re-ingest is a verified no-op Rollup 6 MET / 1 MET_WITH_CONCERNS / 0 NOT_MET / 0 INCONCLUSIVE. The one concern (ac-3): the review request references the delivered diff as host-supplied rather than abcd-captured — a deliberate adr-25 transport-agnostic divergence. Adds the spc-2 native spec record (closed). record-lint green throughout (spec_lifecycle cross-check on the new spc-2<->itd-80 link passes). Assisted-by: Claude:claude-opus-4-8
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Phase 4 of the intent-lifecycle automation (itd-80), on top of #24 (merged). This closes the loop: a shipped intent now carries a host-delegated fidelity audit.
What's in this PR
## Audit Notesis the single source of truth — no side receipt store.Reconcile(onabcd spec close) writes anOWEDmarker at the ship-move and emits a review request to.abcd/.work.local/reviews/(ephemeral; the host runs the reviewer).abcd intent review ingest --verdict-json <path>schema- and semantic-gates the host reviewer's VSA-shaped verdict, then idempotently replaces the marker with per-criterion verdicts + a honoured/diverged/missing audit (each entry rendering its citedfile:lineevidence) + pinned provenance (verifier / rubric_hash / prompt_hash / input attestations).DEAD_LETTERwith the raw payload retained and all criteriaINCONCLUSIVE— never a partial apply. Re-ingest is a true no-op.agents/intent-fidelity-reviewer.md(Role 1).Reviews (both independent, not the implementer's self-review)
security-reviewer: PASS. Fuzzed the HTML-comment-marker neutraliser (491k execs) and traced forgery / replay / path-traversal / partial-write — all held. Three low-severity trusted-worktree notes, non-blocking.ruthless-reviewer: one FIX-FIRST — a partial verdict (judging a subset of criteria) was accepted and locked in by the idempotency short-circuit. Fixed test-first (len(seen)==k→ DEAD_LETTER, multi-criterion test). Also folded in: require + render the attestation chain (the SOTA plan's pinned provenance), idempotent emit, error-wrap + TOCTOU-note nits.Quality
make preflight+make record-lintgreen. No new dependencies. Verified end-to-end through the built binary (draft → plan → close → ingest → re-ingest no-op).Next
Phase 5 — dogfood: drive itd-80 itself through the pipeline so it ships with a machine-generated audit.
Assisted-by: Claude:claude-opus-4-8