Seal the CDEB v3 line as terminal and make the absence of an active study explicit - #823
Merged
Conversation
…tudy explicit Both studies are over. `cdeb-fresh-v3` was invalidated for advancing its ledger past its artifacts; `cdeb-fresh-v3r1` ended NO-GO because two of four fixed strata cannot reach the per-repository floors. No measured data exists, selection is empty and the seed is null. Nothing here resumes either one. Four things were still saying otherwise. The first transition row of v3r1 carries `input_digest` of sixty-four `a` and `output_digest` of sixty-four `b`. I wrote those while probing whether the literature gate would open, and they were never artifact digests. The row stays byte-identical: editing a ledger to correct a ledger produces the artifact an auditor cannot tell from the original mistake. A deviation records what the values are, that no measured data depends on them, and that this particular digest is not usable as audit proof. The append path is bound for future studies instead -- a caller can no longer hand over an arbitrary sixty-four-character string and have it accepted as evidence, because the digest is computed from the artifacts themselves over a canonical, order-independent serialisation. `evidence-matrix.md` was zero bytes beside a JSON holding thirty-four adjudicated claims. It is generated from that JSON now, and a check refuses a tree where the two disagree, so the human-readable copy cannot quietly drift from the machine-readable one. `census.ts` and `source-packet.ts` defaulted their study root to the string `cdeb-fresh-v3r1`. A terminated study was the fallback for anything that forgot to say which study it meant. `ACTIVE-STUDY.json` states `active_study_id: null` and both callers resolve through it and fail closed. Nothing infers an active study from a directory listing or the newest folder name. The PRD front matter said `implementation-ready`. The design body is untouched, because a reader must still be able to see exactly which rules the terminated study ran under, but the header now says the line is terminal and that a successor needs a new study id and a new preregistration. Record-Id: r-v3terminalseal Provenance: authored Certainty: firm Blast: system Undo: easy Ruled-out: correcting the placeholder digests in place | the correction is indistinguishable from the mistake it repairs, and the row is historical evidence rather than a working value Ruled-out: recomputing digests for the historical rows from today's artifacts | the artifacts have changed since, so the result would be a number that never bound anything, wearing the authority of one that did Ruled-out: hand-maintaining evidence-matrix.md beside the JSON | two copies of the same claims disagree eventually and the disagreement is silent Ruled-out: leaving cdeb-fresh-v3r1 as the default study root | a terminated study as a fallback is how a measured run gets attempted against a study that ended Limit: the placeholder row remains in the ledger and always will. This makes it legible, not absent, and a reader who takes digests on faith rather than reading the deviation is still misled Limit: the canonical digest binds the artifact list it is given. A transition that names too few artifacts is bound to a partial set, and nothing here decides what the right set is for a future study Limit: guard coverage is unchanged -- thirteen exclusion kinds remain uncovered and one scan inert, recorded in the mutation baseline Verified: both typechecks clean; guard-mutation ratchet exits 0 at 13 bound, 1 inert, 1 unavailable, 13 uncovered; the evidence-matrix generator's --check exits 0 against the committed Markdown. Full suite 3507 passed, 13 skipped, with 3 timeouts in cdeb-smoke and mcp-capture under full parallel load; both files pass 55/55 when run alone, so they are load-related and not caused by this change CommitLore-Version: 2.0.0
CommitLore — record lintTrailers: clean — 2 commits in Active constraints for the paths this PR touchesLimits (153)
Ruled out (189)
Truncated: 46 lines omitted — the comment hit GitHub's 65000 character limit. Trailer violations fail this check. Active constraints are informational — they are what the repository already decided, not a verdict on this PR. |
…h them
Adding `bench:cdeb:evidence-matrix` and chaining it into `bench:cdeb:verify` changed
`package.json`, which the canonical artifact checksum covers. CI refused:
ERROR: canonical artifact verification failed:
- source checksum does not match this checkout
The canonical build was re-run in the pinned image and the manifest regenerated. `dist`
is byte-identical -- the scripts do not reach the bundle -- so only the manifest moved.
The rule this repository already knows is that a source change and its manifest belong to
the same commit. A script entry is source even though it produces no output, because the
checksum is over the checkout and not over what the checkout builds.
Record-Id: r-v3manifestsync
Provenance: authored
Certainty: firm
Blast: local
Undo: easy
Ruled-out: keeping the generator out of package.json to avoid touching the manifest | the check has to run somewhere the repository actually invokes, and hiding it from the script list would leave the drift guard unwired
Limit: this proves the manifest matches this checkout. It does not prove the pinned image produced the committed dist on any other machine, which is what the pinned digest is for
Verified: npm run build:canonical exits 0 with dist unchanged, artifact:manifest rewrote installer/canonical-artifact.json, and artifact:verify reports the artifact verified at 88f3da87. Both typechecks clean after restoring node_modules, which the canonical build's bind mount replaces
CommitLore-Version: 2.0.0
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.
Terminal hardening and governance cleanup. This does not resume anything.
cdeb-fresh-v3andcdeb-fresh-v3r1stay INVALIDATED, no measured data exists, and no successor is designed here.Four things in the repository still read as work-in-progress.
The placeholder transition digest
v3r1's first ledger row carries
input_digestof 64×aandoutput_digestof 64×b. I wrote those while probing whether the literature gate would open; they were never artifact digests.The row stays byte-identical. Editing a ledger to correct a ledger produces exactly the artifact an auditor cannot distinguish from the original mistake. A deviation records what the values are, that no measured data depends on them, and that this digest is not usable as audit proof.
The future append path is bound instead: a caller can no longer hand over an arbitrary 64-hex string and have it accepted as evidence. Digests are computed from the artifacts over a canonical, order-independent serialisation.
evidence-matrix.md was 0 bytes
Beside a JSON holding 34 adjudicated claims. It is generated from that JSON now (28,809 bytes), and
--checkrefuses a tree where the two disagree — so the human-readable copy cannot drift from the machine-readable one.A terminated study was the default fallback
census.tsandsource-packet.tsdefaulted to the stringcdeb-fresh-v3r1. A terminated study was what anything got if it forgot to say which study it meant.ACTIVE-STUDY.jsonnow statesactive_study_id: null, both callers resolve through it and fail closed, and nothing infers an active study from a directory listing or the newest folder name.PRD front matter said implementation-ready
The design body is untouched — a reader must still see exactly which rules the terminated study ran under.
Verification
The three timeouts are in
cdeb-smokeandmcp-captureunder full parallel load. Both files pass 55/55 run alone, so they are load-related and not caused by this change — reported rather than hidden.Deliberately not done
No successor study. No task, gold, oracle, pilot, freeze, seed, trajectory or result row. No Record-Id backfill. No historical artifact rewritten or deleted. Guard gaps unchanged and still visible.