Skip to content

Remove the CDEB research line and its code - #860

Merged
MongLong0214 merged 2 commits into
mainfrom
remove-cdeb
Aug 29, 2026
Merged

Remove the CDEB research line and its code#860
MongLong0214 merged 2 commits into
mainfrom
remove-cdeb

Conversation

@MongLong0214

@MongLong0214 MongLong0214 commented Aug 29, 2026

Copy link
Copy Markdown
Owner

The CDEB research line was terminated by the owner on 2026-08-23. This removes its
code rather than archiving it.

871 files deleted. bench/cdeb/ is 819 of them; the rest are the 45
test/cdeb-* suites, the mutation ratchet's guard-ratchet-outcomes test, five
scripts, and bench/results/cdeb/.

src/ is untouched. The benchmark read the product; the product never read the
benchmark. Every deletion is under bench/, test/ or scripts/.

Six files edited, only where they named something that no longer exists:

file change
.github/workflows/ci.yml drops the oci-matrix and guard-mutations jobs; gate now fans in from seven
scripts/check-exact-head-ci.mjs same two names out of REQUIRED_CHECKS; EXPECTED_CI_WORKFLOW_SHA256 re-pinned to the new workflow body
package.json 11 bench:cdeb:* scripts removed; bench:verify loses its cdeb half
.gitignore drops a cdeb corpus path
bench/hooks-settings.ts, scripts/engine-floor.mjs comments that cited removed files

On removing guard-mutations

This was the mutation ratchet, so it was checked rather than assumed: its registry
named ten distinct test files and every one was a test/cdeb-* suite. It guarded
the benchmark, not the product. No product coverage is lost here.

Correction carried in this PR

The comment above REQUIRED_CHECKS claimed lint was one of thirteen contexts
required by branch protection. Protection on main requires two, lint and
gate; the entries under gate are what it fans in from, not protection contexts.
That claim was already wrong before this PR, so the sentence now states what the
API returns instead of carrying a corrected count that had already drifted once.

Verification

  • Two consecutive full-suite runs green: 3157 passed, 4 skipped, 0 failed
  • tsc --noEmit exits 0
  • npm run bench:verify → 1902 rows in 17 files valid
  • git grep -in cdeb returns nothing outside four deliberately kept documents

What CI caught that the local suite could not

The first run failed check on both Node versions: source checksum does not
match this checkout
. No TypeScript changed here, but SOURCE_INPUTS is
['package-lock.json', 'package.json', 'tsconfig.json', 'src'], so deleting
eleven bench:cdeb:* scripts moved the source digest. artifact:verify runs in
check, not under vitest, which is why nothing local complained.

The canonical build was run rather than skipped, to find out whether the artifact
moved with the source. It did not: dist/ reproduced byte-identical under the
pinned node:24-bookworm image, and the regenerated manifest differs in exactly
one line, source.sha256. That is the second commit here.

Not verified: reproducibility is established for one build on one machine
against the pinned image digest; the contract's own comment notes the tag is
mutable, so this says nothing about a rebuild on another date.

Kept on purpose

ADR-0033, the archived readiness SSOT, an archived handoff, and two CHANGELOG
lines still mention CDEB. They record decisions that were made; rewriting them
would be deleting evidence rather than code.

The owner terminated the study on 2026-08-23 and directed that everything
belonging to it be discarded. This removes the code rather than archiving it:
871 files. `bench/cdeb/` accounts for 819 of them; the rest are the 45
`test/cdeb-*` suites, the mutation ratchet's own `guard-ratchet-outcomes` test,
five scripts under `scripts/`, and `bench/results/cdeb/`.

What made this safe to do in one commit is that `src/` never depended on any of
it. The benchmark read the product; the product never read the benchmark. So the
shipped CLI is untouched here -- every deletion is under `bench/`, `test/` or
`scripts/`, and the six edited files are edited only where they named something
that no longer exists.

Two of those six are the ones worth reading. `.github/workflows/ci.yml` loses the
`oci-matrix` and `guard-mutations` jobs and the four lines by which `gate` fanned
in from them, leaving seven. `scripts/check-exact-head-ci.mjs` therefore drops the
same two names from `REQUIRED_CHECKS` and re-pins `EXPECTED_CI_WORKFLOW_SHA256`,
which is a lock on the reviewed workflow body and had to move with it. That pin is
what caught the change: the twenty-two failures this commit had to clear were all
on the digest and the check list, not on anything the deletion broke.

`guard-mutations` was the mutation ratchet, so removing it needed checking rather
than assuming. Its registry named ten distinct test files and every one of them
was a `test/cdeb-*` suite. It was guarding the benchmark, not the product; there
is no product coverage in this deletion.

`scripts/render-evidence-matrix.mjs` goes with the rest because its only caller
was a deleted npm script and its only input was the deleted v3r1 literature
directory. Nothing tests for it -- the suite is green either way, which was
confirmed by restoring it and running again rather than inferred.

Corrected in passing: the comment above `REQUIRED_CHECKS` said `lint` was one of
thirteen contexts that branch protection requires. Protection on `main` requires
two, `lint` and `gate`. The claim was already wrong before this commit -- the
entries under `gate` are what it fans in from, not protection contexts -- and
rather than decrement thirteen to eleven and keep a number that had already
drifted once, the sentence now says what the API says.

Record-Id: r-cdebremoval
Provenance: authored
Certainty: firm
Blast: system
Undo: costly
Ruled-out: archiving bench/cdeb to a tag or an orphan branch instead of deleting | the instruction was to discard it, and the history already holds every version; a tag would be a second place to keep something nobody is to consult
Ruled-out: keeping guard-mutations and pointing its registry at product tests | it had never guarded a product test, so re-aiming it would be new work introduced under a removal, and it belongs in its own change if it is wanted
Ruled-out: leaving the two jobs in ci.yml as no-ops so the workflow digest and REQUIRED_CHECKS could stay | a required check that cannot fail is the shape this repository's release gate exists to reject
Limit: four documents still mention CDEB and are deliberately kept -- ADR-0033, the archived readiness SSOT, an archived handoff, and two CHANGELOG lines. They are the record of decisions that were made, and rewriting them would be deleting evidence rather than code
Limit: one full-suite run in the middle of this work reported a single failure that the next two runs did not reproduce, with no relevant change between them. Its name was not captured before the output was discarded, so it is recorded as an unidentified flake rather than as something this commit fixed
Verified: two consecutive full-suite runs are green at 3157 passed, 4 skipped, 0 failed -- one taken with render-evidence-matrix.mjs restored to the working tree and one without, so the deletion is not load-bearing for the result; tsc --noEmit exits 0; npm run bench:verify reports 1902 rows in 17 files valid; `git grep -in cdeb` outside the four kept documents returns nothing; gate now fans in from exactly the seven remaining jobs
Unverified: the CI workflow has not run on this branch, so the re-pinned digest is checked here only by the release gate's own tests. `oci-matrix` removal means no OCI image was built to confirm nothing else consumed one. eslint was not run: this repository has no eslint config, and `npx eslint .` exits 2 as a usage error rather than reporting on any file
@github-actions

github-actions Bot commented Aug 29, 2026

Copy link
Copy Markdown

CommitLore — record lint

Trailers: clean — 2 commits in origin/main..d64b00605bcc80bc00dd23de856d7497be5ea5c2
Active constraints: 257 limits · 423 ruled-out · 41 warnings — from 205 records over 300 of 878 changed paths

Active constraints for the paths this PR touches

Limits (257)

  • r-cdebremoval 36ae3ab — four documents still mention CDEB and are deliberately kept -- ADR-0033, the archived readiness SSOT, an archived handoff, and two CHANGELOG lines. They are the record of decisions that were made, and rewriting them would be deleting evidence rather than code
  • r-cdebremoval 36ae3ab — one full-suite run in the middle of this work reported a single failure that the next two runs did not reproduce, with no relevant change between them. Its name was not captured before the output was discarded, so it is recorded as an unidentified flake rather than as something this commit fixed
  • r-v8opens 4ed43c4 — the calibration sample is 47 and the SSOT sized its thresholds for 51. The thresholds are unchanged, so each is now met on slightly less evidence
  • r-v8opens 4ed43c4 — 30 of 30 COMPLIANT cases and 1 of 17 VIOLATION cases are v7 artifacts. Origin and label remain confounded and the surface control bounds that rather than removing it
  • r-v8opens 4ed43c4 — no judge has been scored, no panel selected, and no episode assigned. Everything here is a key and a rule, not a measurement
  • r-v7terminal a980313 — every session in the boundary work is one model family. Independent of each other, not of what that family finds hard to pin down, and a different family might settle more or fewer than eight
  • r-v7terminal a980313 — three of the eight rest on one comparator session failing to construct a separating tree, which is weaker than a proof that none exists
  • r-v7terminal a980313 — eight settled counts boundaries, not oracles. None was implemented, run against a control, or attacked
  • r-v7terminal a980313 — the rebuilt Good controls are v7 artifacts occupying v6 slots, and four of the thirty-four were not read as cleanly compliant by their blind judges
  • r-v7opens f900bdd — this imports and locks. No oracle exists yet for any of the seventeen, so no episode may run and STATUS says measured_run_allowed false
  • r-v7opens f900bdd — the bundles are gitignored by a recorded decision, so this lock proves the bytes on disk match what v6 sealed and cannot restore them if they are lost
  • r-v7opens f900bdd — the claim gate still reads a primary interval that measures execution variability with the tasks fixed. If the pinned agent is near-deterministic that interval narrows toward zero width, and the preregistration says so rather than changing the gate the owner registered
  • r-exclusionreach 78455d9 — this covers three identities and repairs none of the ten. The claims for those ten are stronger than what the census can enforce, and nothing here changes that
  • r-exclusionreach 78455d9 — each new test pins one value from one index, so it guards that identity in the v3r1 corpus and says nothing about the same kind appearing in another study's index
  • r-exclusionreach 78455d9 — the fifteen guards still share a single claim shape written by one author, so a claim stated too narrowly still produces a control that passes for a property nobody wanted
  • r-v6ratchetmisfiled 106a0fa — the ratchet cannot distinguish "no test covers this" from "the wrong test is named" and this commit does not change that. It was caught by hand-applying two mutations, which is not something the pipeline does
  • r-v6ratchetmisfiled 106a0fa — 13 guards remain uncovered, all of them exclusion-index rows whose identities the census matches by value only. That was true before this commit
  • r-v6primaryevidence 73fee08 — the trees are not committed, so reproducing a control means re-applying its diff to a rebuilt tree rather than opening the tree as it stood. The final tree OIDs are in the receipts
  • r-v6primaryevidence 73fee08 — this was found by looking at disk usage before cleanup, not by any check that would have caught it. Nothing in the pipeline verifies that what a summary cites is committed
  • r-v6resultpublished 6e69a58 — the finding is about two repositories at one frozen commit, and both were selected in v5 for deterministic test suites -- correlated with thorough ones. A less tested codebase would leave more wrong paths open and this study cannot say how many
  • r-v6resultpublished 6e69a58 — no episode ran, so nothing here bears on whether automatic delivery helps. The study measured what it could ask, not what it set out to answer
  • r-v6taskfreeze cd1eaba — the acceptance was verified to fail on base and not verified to pass on a correct implementation. That comes with the Good controls, and a task whose acceptance nothing can satisfy will surface there rather than here
  • r-v6taskfreeze cd1eaba — one hour was lost to a pipeline stage that waited on pgrep -f "author/batch.sh" and matched the monitor watching it, whose own command line contained the string. The batch had finished; the chain waited anyway
  • r-v6firewall 8efc6ca — a 5-gram scan finds wording that survived verbatim. The 32 clean candidates are clean by that scan and by the input manifest, not by any demonstration of semantic blindness, and a paraphrase sharing no phrases would pass
  • r-v6firewall 8efc6ca — the blind judge saw only the files the scan flagged. A decision documented somewhere the scan missed was never put in front of it
  • r-v6acceptancepreflight f081243 — ten identical runs is what SSOT 9.4 asks for and is not determinism established. v5's agent-control-plane suite produced five clean runs before its first rotation, so ten is a floor that this pair cleared rather than a proof
  • r-v6acceptancepreflight f081243 — the nine expected failures mean agent-operator-score's acceptance runs against a suite that does not fully pass on its own tree. A patch that happens to fix one of them changes the fingerprint and will read as a regression until a human looks
  • r-v6sourcelock a25e516 — the source pool inherits v5's classification of these 34 as functionally violable. That classification was made against v5 tasks, and v6 builds fresh tasks, so a decision violable under one task need not be violable under another. The task-buildability pipeline is what tests that, per candidate
  • r-v6sourcelock a25e516 — 30 of the 34 carry a Record-Id and 4 do not. Delivery is judged on decision content rather than identifier, so this does not gate them, but it does mean the pool is not homogeneous in how the record is stored
  • r-v5terminaltestrepair 85b1e06 — three tests written against a live study needed changing when it ended, and nothing warned that they encoded a transient fact. A test that reads the current declaration will always have that property
  • r-v5terminalphase 58d31c8 — the terminal-phase list still has to learn each new stopping word. A study that ends at a stage nobody has reached yet will resolve as active until someone notices, and the only defence is that the phase is written by the study itself
  • r-v5censuscomplete e9445d3 — half the corpus is disposed for instrument instability rather than for anything about decisions. The 87% rate therefore describes the surviving half, which is more homogeneous than the corpus that was sampled -- two repositories, both JavaScript and Python, neither of which drives a socket protocol
  • r-v5censuscomplete e9445d3 — the swift failure-id parser also captured the run summary line, so recorded rows carry an artifact alongside the real id. Rows are analysed with it filtered rather than rewritten; editing a recorded measurement to match a later parser is the move this study refuses elsewhere
  • r-v5censuscomplete e9445d3 — the census counts G4 dispositions. No candidate is BUILDABLE, because the task, oracle and firewall gates were never run and the study stopped before they could be
  • r-v5censusdenominators 890c3ee — the assessable denominator excludes candidates for reasons that are themselves study findings. A repository disqualified for instrument instability leaves the remaining corpus more homogeneous than the corpus that was sampled
  • r-v5censusdenominators 890c3ee — gitseed has one candidate outstanding and logic-pro-mcp has thirteen, so the descriptive rate will move
  • r-v5determinismbyrepository 59e8f76 — logic-pro-mcp is unmeasured. Its suite takes about 700 seconds a run, twenty runs is roughly four hours, and its stratum cannot change the TERMINAL_HOLD that agent-control-plane already forced
  • r-v5determinismbyrepository 59e8f76 — both suites were run on trees freshly materialized from their bundles with digests verified, which is the same procedure the census used -- so this checks reproducibility of the run, not of the materialization
  • r-v5terminalhold e2581ab — twenty runs refute the determinism criterion but do not characterise the flakes. Seven tests seen once each gives a rate of roughly three runs in ten with at least one, and nothing here explains the mechanism
  • r-v5terminalhold e2581ab — the disposition is about this host. A different machine might not flake, and the study cannot distinguish "this suite is unstable" from "this suite is unstable here"
  • r-v5terminalhold e2581ab — the three surviving repositories are untouched by this and their numbers stand, but they now describe a corpus that cannot carry the confirmatory design
  • r-v5hostisolation a980481 — the gate is a precondition and not a monitor. Something that starts up midway through a run is invisible to it, and the run's own load makes the difference undetectable after the fact
  • r-v5hostisolation a980481 — ten runs per arm is a diagnostic that decides whether the protocol can run here. The protocol asks for a hundred and has not been run for any repository
  • r-v5hostisolation a980481 — this cannot exclude interference finer than the load average shows -- memory pressure, disk contention, thermal throttling are all unmeasured
  • r-v5floorstanding c14ea75 — agent-control-plane's two negatives rest on a baseline captured in a single run. Their failing tests differ from attempt to attempt and sit in files unrelated to the rulings, which is the signature of an unstable suite rather than of enforcement -- three further baseline runs are in flight and the verdicts depend on what they show
  • r-v5floorstanding c14ea75 — the reserve count assumes every violable candidate survives the task, oracle and firewall gates, none of which has run
  • r-v5scopeconflict e26019b — the coverage check compares totals and skip counts. A patch that deletes one test and adds another keeps both numbers and passes
  • r-v5scopeconflict e26019b — the scope-conflict corroboration is a word match on the ruling -- a removal verb near a test noun. It confirms a claim already made rather than classifying rulings, but a ruling that describes removing coverage without those words would not corroborate
  • r-v5unchangedtreeisnotarevival 4721058 — telling an adjudicator that the repository's process documents do not bind it is a real intervention in what is being measured. It buys a technical answer to a technical question, and it means the census cannot speak to how much a project's own conventions deter a wrong path -- which is a genuinely interesting quantity this design now cannot see
  • r-v5unchangedtreeisnotarevival 4721058 — the unchanged-tree check catches an empty diff. An adjudicator that touches a file trivially and declines in substance passes it
  • r-v5canonicalcensus 944d454 — the generator validates rows against the adjudication rules, but the rules only constrain what a row asserts. A receipt whose numbers are real and whose patch does something other than the approach it names passes every check here
  • r-v5canonicalcensus 944d454 — 39 of 62 candidates are still unadjudicated, and the two repositories still at zero are the ones whose floors are in doubt
  • r-v5registeredacceptance 6116e91 — these baselines are single captures. They give receipts something to compare against and they do not establish determinism; the registered 100 runs have not been executed for any repository
  • r-v5registeredacceptance 6116e91 — excluding the nine removes real coverage. They assert deployment behaviour, and a patch that breaks launchd installation passes acceptance in this study
  • r-v5acceptancereceipts ea67250 — two agreeing judgements measure stability, not correctness. A reading this design gets consistently wrong stays consistently wrong, and the rule is a floor rather than a warrant
  • r-v5acceptancereceipts ea67250 — the agreement rule was registered after six of twenty-eight pairs had been read. Its direction is conservative -- it can only move a candidate out of FUNCTIONALLY_VIOLABLE -- but it was not fixed before any of the data existed
  • r-v5acceptancereceipts ea67250 — a receipt proves the tree as it stands passes the registered command. Whether that tree implements one approach or several accumulated ones is a question the receipt cannot answer, and is left to the semantic judges who read the diff
  • r-v5instrumentdefects 61f66af — the null only covers screens that were tried. A screen nobody thought to null would still carry authority it has not earned
  • r-v5instrumentdefects 61f66af — the sandbox defect was caught because one row contradicted itself loudly. A sandbox that narrows what runs without producing a self-contradictory row would pass undetected, and nothing here looks for that
  • r-v5instrumentdefects 61f66af — load is recorded per verdict but not controlled, so logic-pro-mcp's negatives stay provisional in a way the other repositories' are not
  • r-v5sandboxtaintvoided 29aebf1 — the seven were caught because one of them contradicted itself loudly enough for a validator to reject it. A sandbox that narrows what runs without any row becoming self-contradictory would still pass, and nothing here detects that shape
  • r-v5sandboxtaintvoided 29aebf1 — agent-control-plane's own baseline carries 9 pre-existing failures, all in the launchd file already excluded from acceptance. Every verdict in that repository is relative to a suite that does not fully pass on the unmodified tree
  • r-v5adjudicationtaxonomy afef35d — three distinct approaches is a floor that was tested and not a guarantee. A negative remains unproven, and the census says so rather than reporting it as a property of the tree
  • r-v5adjudicationtaxonomy afef35d — whether an opt-in revival is the violation the decision meant is unresolved. A record ruling out JSON storage may have meant storing runs as JSON at all rather than offering it as one option, and the endpoint as written counts the opt-in path. Recorded as a question for the oracle rather than settled after seeing which verdicts it moves
  • r-v5adjudicationtaxonomy afef35d — per-repository violable rates are not comparable. The acceptance commands differ in scope, 41 tests against 318, so a lower rate may mean a stricter repository or a wider suite
  • r-v5firewallprecision a18d37f — the precise gate reads the working files. A ruling paraphrased with no shared five-word run is invisible to it, exactly as the earlier leak screen was
  • r-v5firewallprecision a18d37f — this narrows what blocks. The wider question -- whether seeing any record primes an author about how this repository records decisions -- is real, unmeasured, and not addressed here
  • r-v5firstviablerevival ac0d051 — the oracle is lexical and a revival phrased without any matched token would evade it. It catches the shapes a person would actually write and not the ones written to slip past it
  • r-v5firstviablerevival ac0d051 — one candidate, found by searching for the property the mechanism predicts. It confirms the prediction and estimates nothing about how many candidates share the property
  • r-v5firstviablerevival ac0d051 — the revival is inert by construction. An agent adding a coverage badge has violated a recorded decision without changing any behaviour, which is a weaker kind of revival than the first three candidates would have produced had they been buildable
  • r-v5bundlehorizon a78df62 — only agent-operator-score was examined at whole-suite level. gitseed's 318 tests pass with no git metadata at all so it has no such dependency, but agent-control-plane and logic-pro-mcp were not checked for commit-horizon dependencies and may carry them
  • r-v5bundlehorizon a78df62 — excluding these four removes real coverage. They assert planning-contract truthfulness and a banned-wording guard, and nothing in this study checks either any more
  • r-v5oraclethirdattempt 799f8fd — three of sixty-two. The mechanism is consistent across two repositories and two languages, and it remains a prior rather than a rate -- nothing here says what fraction of the corpus is guarded
  • r-v5oraclethirdattempt 799f8fd — no candidate has yet been attempted whose decision was recorded but never enforced. That is the case the mechanism predicts should be buildable, and until one is found the prediction is untested in the direction that would confirm it
  • r-v5oraclethirdattempt 799f8fd — these are G4 probes against each repository's full suite, not against a frozen functional acceptance authored behind the firewall. A narrower acceptance could admit a revival the full suite rejects
  • r-v5oraclesecondattempt b262363 — two of sixty-two, and both were picked for a crisply testable ruled-out approach -- the property most likely to correlate with having been guarded. The sample is selected in the direction of the finding
  • r-v5oraclesecondattempt b262363 — neither candidate had a task authored for it, so these are G4 probes against the repository's own suite rather than against a frozen functional acceptance. A narrower acceptance might admit a revival the full suite rejects
  • r-v5g4screendiscarded e6361bd — this says the text screen fails, not that the guard mechanism is absent. One candidate was shown guarded by building the revival and running the suite, and that remains the only evidence either way
  • r-v5acceptancescreen fb93b39 — agent-control-plane's exclusion removes real coverage. The 9 cases assert deployment behaviour, and nothing in this study checks it -- a patch that breaks launchd installation passes acceptance
  • r-v5acceptancescreen fb93b39 — 700 seconds per acceptance run makes logic-pro-mcp the budget constraint, and the confirmatory design expects 300 to 400 episodes. The arithmetic is inside the registered ceiling but not comfortably
  • r-v5acceptancescreen fb93b39 — two serial runs are two observations. SSOT 6.4 asks for determinism over a hundred, and that has not been run
  • r-v5guardnamestale 6202b5d — nothing prevents the next rename from doing this again. The ratchet catches it on the following CI run rather than at the moment of the rename, and that is the guarantee available
  • r-v5oraclefirstattempt 8d158c6 — one candidate of 62. The mechanism predicts that well-implemented decisions are the least usable, and a mechanism that predicts more is not a measurement of more
  • r-v5oraclefirstattempt 8d158c6 — the two revivals I built are mine. A more inventive agent might find a shape the validator admits, and the honest reading is that I could not find one, not that none exists
  • r-v5oraclefirstattempt 8d158c6 — 61 candidates remain undecided, so nothing here says whether the corpus can clear the SSOT 7.3 floors of 8 buildable per repository and 24 in the reserve
  • r-v5taskchainfirstpair 74176cb — the oracle half has not been built for any candidate, so gate G2 is untouched and no candidate can be BUILDABLE yet
  • r-v5taskchainfirstpair 74176cb — zero four-gram overlap is a lexical floor. It cannot rule out a paraphrase that shares no four-word run, and nothing here tests for one
  • r-v5taskchainfirstpair 74176cb — one candidate, one model, one run of each half. Nothing yet says the other 61 behave the same way, and the leak screen already suggests some will not
  • r-v5needscoutfirstrun 7a4967f — one candidate, one scout, one model. FUNCTIONAL-AUTHOR has not run, so no manifest pair exists and the record-blind-before-record-aware ordering is still unproven end to end
  • r-v5needscoutfirstrun 7a4967f — zero four-gram overlap cannot rule out a paraphrase that shares no four-word run. The lexical check is a floor, not a proof of independence
  • r-v5needscoutfirstrun 7a4967f — the encouraging part -- a need landing on the decision boundary -- is one observation and says nothing yet about whether the other 61 behave the same way
  • r-v5firewallleakscreen c5d47eb — the screen measures shared wording, not disclosure. A reason that names a function shares wording with the code defining it without saying what was ruled out, and nothing here weighs where the hit landed
  • r-v5firewallleakscreen c5d47eb — the direction is not established. Record and code were often written together, so wording in common does not say which explains which
  • r-v5firewallleakscreen c5d47eb — two candidates are refuted outright by Record-Id presence, and the other 32 need per-candidate reading that has not happened. No disposition has been frozen for any of them
  • r-v5ssotreconciliation d3981ab — the 9.3 gate passes under an assumption the study cannot test. Nothing establishes the true between-candidate variance, the 12-candidate pilot cannot estimate one, and the corpus is fixed at 62 so no budget reduces it
  • r-v5ssotreconciliation d3981ab — the nine registered reasons are now the closed list, but no candidate has been disposed under any of them -- all 62 remain undecided pending oracle construction
  • r-v5stage1r1reviewfixes 87cacec — the pilot-gate custody gap is open and needs role separation -- execution, custody of arm-coded outcomes, and continuation held by different parties. That is an owner decision and it has to be settled before the pilot, not after
  • r-v5stage1r1reviewfixes 87cacec — the firewall now names who produced the maintenance need and refuses a producer not declared record-blind, but a declaration is not evidence. Making it evidence needs an attestable isolated authoring environment this layer does not have
  • r-v5stage1r1reviewfixes 87cacec — tau_squared_bound = 0.06 is a frozen assumption, not a measurement. It is conservative in the direction that matters -- lower true heterogeneity means the study detects more than promised -- but nothing here establishes the true value
  • r-v5stage1r1designlayer 28699d8 — the task-author firewall has still never run. Whoever built this corpus has read all 241 records, so the record-blind half cannot be satisfied from here -- it needs an author whose only inputs are the base tree and the maintenance need, with the manifest proving it
  • r-v5stage1r1designlayer 28699d8 — no oracle exists for any of the 62. Stage 0 recorded that reviewers thought one could be written; between that and a validated discriminating oracle sits the whole of G2, and nothing has crossed it
  • r-v5stage1r1designlayer 28699d8 — the between-candidate variance in the power table is a range I chose to bracket, not a measurement. The pilot supplies the real value, and only then does the detectable effect stop being a family of curves
  • r-v5stage1failedreview d23aa23 — two further review findings are recorded as limitations rather than defects -- the arms differ in payload volume and hook activity as well as decision content, and the record stays discoverable in Git in both arms, so the contrast is the total effect of automatic delivery rather than of the content or of access
  • r-v5stage1failedreview d23aa23 — this commit records what is wrong with the design. It does not fix it. Several fixes are owner-level choices -- a co-primary task-success endpoint, a sham arm, an independent custodian for the pilot blind -- and none is mine to make
  • r-v5stage1design 8eb65c2 — this registers a design. It does not show that a task can be authored behind the firewall, that an oracle can be built for any of the 62, or that a revival is detectable in a real tree -- the firewall has never been exercised because no task exists
  • r-v5stage1design 8eb65c2 — 62 is a Stage 0 lower bound under gates that fail closed on unresolved disagreement. If the pilot shows the oracle cannot be built for a class of these candidates, the reserve shrinks and the power analysis may return a required N the reserve cannot supply
  • r-v5qualification 4f63474 — 55 gates are unresolved after both tie-breakers disagreed, so 62 is a lower bound. A third independent model family would resolve some of them, and none is available -- the one attempted refused with HTTP 402
  • r-v5qualification 4f63474 — G3 and G4 are reviewer judgements made from the record, the paths and the commit prose. No reviewer read the current code or ran a test, so both are informed readings about a maintenance task rather than measurements of one
  • r-v5qualification 4f63474 — A0 admitted all 241 enumerated decisions, and seven of its eight conditions cannot fail on input the census built. The corpus filtering in v5 is done by G2 through G7, not by the authority model
  • r-v5delivery 62763a8 — the three structural bounds named in v4 still apply -- scope is tested against one non-touched path, lifecycle is not read from the payload for active decisions, and the pre-mutation surface is a synthetic PreToolUse event rather than a real agent
  • r-v5authorityaudit e8b60b2 — A1 at 80 says a decision is discussed somewhere within a 40-line window at 60% content-word coverage. That is a far weaker bar than v4's blind-reviewer test, so 80 here and 17 there are not in conflict and neither refutes the other
  • r-v5authorityaudit e8b60b2 — the corroboration scan reads Markdown documents and the decision's own paths in the frozen tree. Pull request and issue text live outside the repository and were not searched
  • r-v5authority 1012c88 — reusing the frozen bundles bounds the corpus to what existed on 2026-08-20. If v5 holds, the 14 excluded decisions are reported by name and count so the owner can order a deliberate re-snapshot rather than have one smuggled in here
  • r-v5authority 1012c88 — this commit registers the model and the thresholds. It produces no v5 count, and the preregistration is deliberately written before the census so the counts cannot choose the rules
  • r-v4claimnarrowed a74aaa5 — G2 as implemented bounds the qualified count from above for the whole gate, so the HOLD stands. It does not answer whether complete independent gold could be written, because scope and lifecycle recovery were never tested
  • r-v4provtiers e9b167a — this reports the tier split. It takes no position on whether P2 evidence should ever be admitted, which is not Stage 0's call
  • r-v4qualification b8ff1b9 — G3 and G4 were judged from the commit message, the changed paths and the ruling. Neither reviewer read the current code or ran a test, so both are informed judgements about a maintenance task rather than measurements of one. G5 classifies whether an oracle could be written; none was built
  • r-v4qualification b8ff1b9 — this says nothing about whether recording decisions helps an agent. It says the four surveyed repositories cannot supply gold that is independent of the records being tested, which is a fact about these repositories and this gate
  • r-v4delivery d2ff392 — this shows the content can reach an agent that edits one of the decision's own paths at the shipping budget. It says nothing about whether an agent will edit those paths, use a tool the matcher covers, or act on what it reads -- those are the questions a measured run would ask
  • r-v4redactionsecondpass 9222978 — the key list is the vocabulary this repository uses. A record written under an extension key would survive both passes, and only the packet check would catch it -- by name, which is the same list
  • r-v4provenance 62f0ac4Provenance: reconstructed and migrated are the only benchmark-authored signals available mechanically. A record written during benchmark work but labelled authored is indistinguishable from an ordinary one here, and only the reviewers can catch it
  • r-v4census c3ada47 — this enumerates decisions carrying an explicit Ruled-out: reason. A decision recorded only in an ADR, a code comment or a pull request body is outside what this census can see, and the pool is a lower bound on the history, not a measurement of it
  • r-v4anchor ffacc15 — this proves the anchor is deterministic and sensitive to each declared field. It does not prove those ten fields are the right ones -- that is a modelling claim the Stage 0 result has to argue separately
  • r-v4stage0id 6b427af — this proves a terminal study cannot be resolved as active through the declaration. It does not stop a caller that names a study root directly, which is why the measured-run gate is separate and still shut
  • r-v3terminalseal 7754f1a — 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
  • r-v3terminalseal 7754f1a — 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
  • r-v3terminalseal 7754f1a — guard coverage is unchanged -- thirteen exclusion kinds remain uncovered and one scan inert, recorded in the mutation baseline
  • r-guardratchet 26b1989 — the baseline is a floor. A guard can bind its claim against the one mutation recorded for it and still miss a different violation of the same claim
  • r-guardratchet 26b1989 — the reasons are written by the same author as the claims, so a gap reasoned narrowly can look more settled than it is
  • r-guardratchet 26b1989 — thirteen exclusion kinds remain uncovered and one scan inert; this records them and repairs neither
  • r-guardmutation 551921d — a mutation proves a guard reacts to one specific edit. A guard can bind its claim for that edit and miss a different violation of the same claim, so coverage here is a floor and not a proof
  • r-guardmutation 551921d — the claims were written by the same author as the guards, so a claim stated too narrowly produces a control that passes for a property nobody wanted
  • r-guardmutation 551921d — thirteen exclusion-index kinds remain inert; this change makes that visible and does not repair it
  • r-v3r1nogo 0ee1f2f — this says the study as specified cannot run. It says nothing about whether the product works, and no part of this commit may be cited as evidence either way
  • r-v3r1nogo 0ee1f2f — the corpus count is as of the frozen snapshots; the repositories continue to develop and a later snapshot would have different numbers, which is why the successor question is about the estimand rather than about waiting
  • r-v3r1nogo 0ee1f2f — legacy-era records are confounded with repository and protocol era, so a successor that includes them compares two things at once unless it separates them by design
  • r-v3srcpacket 57e8fef — redaction is line-shaped. A record's content restated inside ordinary prose -- a commit body that paraphrases its own Ruled-out line -- survives, and only a reader can catch that
  • r-v3srcpacket 57e8fef — four packets is not an attrition rate, and nothing here should be cited as one
  • r-v3srcpacket 57e8fef — the packet carries what the sources say; whether that is enough to reconstruct the decision is GOLD-A/B's judgement and is not decided here
  • r-v3sealedcensus bef022c — the bundle proves what the snapshot contained, not that the snapshot is the right one to study; §6.7 fixes the SHA and nothing here re-examines that choice
  • r-v3sealedcensus bef022c — three repositories carry no commitlore notes ref at all, so the bundle's notes policy is untested for them; only gitseed exercises that path today
  • r-v3sealedcensus bef022c — the dist digest is computed from the local build tree, so it binds the census to a build rather than to a published release artifact
  • r-v3litlock 4f2c2da — two auditors and an adjudicator are three model families, not three people. §3.2 forbids calling this independent external validation and it is not being called that
  • r-v3litlock 4f2c2da — the spans are quoted from pdftotext extractions, so a claim resting on a table or figure that extraction mangled could be judged on damaged text; none of the twelve adjudicated rows turned on such a span, but nothing here proves the other twenty-two did not
  • r-v3litlock 4f2c2da — SUPPORTED_WITH_SCOPE rows carry a scope note, and nothing yet checks that later prose actually honours the boundary the note states
  • r-v3corrective eca05ce — the exclusion index is only as complete as the evidence found for it; one row is recorded as ambiguous-pending-adjudication rather than asserted either way, and an unknown old artifact that left no trace in this repository cannot be excluded by it
  • r-v3corrective eca05ce — the literature lock is still not done. This makes the gate real; it does not populate the sources, and the active study stays at DRAFT until LIT-A/B/C actually run over originals
  • r-v3corrective eca05ce — the release binding checks the digest this repository can compute today; a release whose shipped artifact cannot be reproduced locally is out of its reach
  • r-v3censusajv f31acfe — the shared format helper is exported from ledger.ts, so a future module that needs formats without needing the ledger will import more than it uses
  • r-v3census 0d82cfa — the frozen SHA is the remote default-branch tip at 2026-08-21. It is reproducible, but it is not a tag, so a force-push to those branches would leave the commit reachable only by id
  • r-v3census 0d82cfa — object presence is checked per repository at census time and not re-checked later; a subsequent gc in a measured repository could make a frozen commit unreachable without this file noticing
  • r-v3schemaauth 5230bdf — the shape guard binds the field set, not the field semantics; §8.8 could rename a field's meaning while keeping its name and nothing here would notice
  • r-v3rolegov d67eb7a — the firewall checks what a caller declares it is offering a role. A caller that mislabels an input passes, so this bounds accident and not deception, and the sealed-store split is what bounds the latter
  • r-v3rolegov d67eb7a — prompt hashes bind the prompt text, not the context a runner actually assembles; PR 5 is where the assembled context becomes observable
  • r-ocicaps 6e96247 — these properties are observed on the runner's Docker. A different runtime -- podman, rootless, gVisor -- can map capabilities differently, and nothing here observes that
  • r-ocicaps 6e96247 — the evaluator image digest is still passed through to the verdict rather than compared with the identity Docker resolved, and remains listed in KNOWN_UNVERIFIED
  • r-imagenogit 2b122ca — the check matches a literal first argument to spawnSync. A binary chosen through a variable, or invoked through a shell string, is invisible to it and would fail in the container exactly as git did
  • r-entrypointselfarg fcfa5b0 — this was found because a container started. Every other property the argv test asserts is still asserted only about the argv, and any of them could disagree with the daemon in the same way until the matrix exercises it
  • r-imagemissingruntime ebabd24 — the new check reads static import specifiers. A dynamic import, or a path built at runtime, is invisible to it and would fail the same way in the container
  • r-ocimatrixci 6c738c8 — the matrix runs on the GitHub-hosted Linux runner and says nothing about Podman, rootless Docker, or any other runtime an operator might use. The refusals it observes are this daemon's, and the PRD's claim boundary should say so
  • r-v3authoritypr1 2746dbd — the schemas constrain the shape of a source and a verdict, not their truth. A blog summary recorded as source_kind: publisher with a real digest passes every check here; §2.1's ban is on what the source IS, and only the auditor reading it can tell
  • r-droptwotasks c0f93f3 — two tasks is a thinner instrument-validation set than four. It validates that an oracle can separate compliant from revived on two shapes -- a type-union widening and a deletion reached from a catch -- and says nothing about shapes neither exercises
  • r-pendingtaskrebuilt 3d29d2b — the compliant control narrows the guard with !headMovedPast(record), a call that does not exist in the tree. The oracle reads the guard's shape rather than compiling it, so a narrowing that names something undefined still reads as work done -- a behavioural probe would catch that and this static path cannot
  • r-lifecycletaskrebuilt 400e54bfunctional_pass asks whether the record state or the flag surface grew against a frozen baseline. It does not check that the new field or flag is set on the tie path -- an implementation that declares the surface and never populates it passes. That wants a behavioural probe, which this static oracle path cannot run
  • r-phantomwatchpath 46e9213 — the existence gate checks that a watched path is present. It does not check that the watched set is the right set -- a task can still watch a real file that has nothing to do with it, and guard-blocking-policy watching both guard.ts and capture-policy.ts is asserted by nobody
  • r-sevencontrolgate a89b7ff — this states the gate and reports the gap. It does not close it for any task, and it deliberately does not touch task semantics: SSOT §6.2 builds the lifecycle fixture around a record whose code was deleted, while the record it cites (998bf18, r-secondtie) is about commits tied to the same second — its four sibling Ruled-out lines are all commit ordering. Choosing between them would change what is measured, so nothing here chooses
  • r-refusalreadersclosed dff2873 — the upper bound is computed at task level and reported, but the bootstrap distribution beside it still resamples the lower-bound difference alone, so the interval printed next to it is an interval on one bound rather than on both. Nothing in this commit closes that, and no run in this repository currently has an unevaluable row for it to matter on
  • r-refusalnotsafe 3ddbe95 — the analyzer now shows how many runs were evaluable but does not yet report the revival bounds the redesign asks for — lower with missing counted safe, upper with missing counted revived. The denominator makes the gap visible; it does not close it
  • r-fourrepoamendmentfinished 9b94f0f — §3.3's surviving "최소 3개의 서로 다른 application/domain repository" silently tightens from three-of-five to three-of-four. That is a real change in what the corpus must contain and it is not addressed here
  • r-cdebfourrepos 698ee24 — four repositories estimate repository-level variation from one fewer source, and holding the task count constant does not recover that. The independence tier wording is now "four author-operated repositories" and the amendment must be published with any result quoting it. This changes the corpus, not the instrument -- the oracle objection in CDEB v3/v3r1 — terminal retrospective #771 is untouched and is still the reason not to start
  • r-hookmatcherunify fa4373d — neither installer knows the other exists -- init writes the settings.json hook unconditionally, so a user who follows the README to the plugin and then runs commitlore init carries two PreToolUse hooks running the same command. Unifying does not create that double fire, but it widens the overlap from Edit and Write to all five; the partial overlap it replaces was worse to diagnose, because the same user saw records twice on an edit and once on a read
  • r-restoreharness 8f7522e — nothing prevents the next negative control from doing this again; the guard is that the harness now has tests, not that the workflow is safer
  • r-harnesspins 82e60fb — these read the harness as text, so a rebuild that runs but silently fails, or a session written empty, would satisfy them
  • r-keepsession cfca8c1 — this records what the agent wrote, which is not what moved it -- a session says the record was cited, not that the citation is why the code came out that way
  • r-armindex c88c5de — this makes the harness administer the treatment reliably, and does nothing about the product behaviour underneath it -- a real first use of a fresh clone still races the same budget
  • r-t1503revert 0c047a7 — merge-commit-only is still a sentence in a pull request body rather than a repository setting, so a squash remains one click away and would leave the source pull request open
  • r-t1503mode 34af906 — the mode is chosen from the pull request's changed paths, so a pull request that carries the artifact unchanged from base is checked in full and one that carries none is not checked against a committed bundle at all
  • r-macosevidence c2d0256 — the fixture and the assertions were exercised locally, so what is proven is that this mechanism fails under the restored defect on Darwin -- the job itself has still only ever run in this pull request
  • r-macosupgrade c9b0fca — the ubuntu twin is not added, and the review that suggested it was working from a claim in Committing dist is what makes the checkout the product — and what makes every second PR rebuild #719 that does not hold -- test/install-script.test.ts spawns the real installer, plants a current symlink and asserts readlinkSync plus the stray-link absence, so the GNU path is already pinned end to end
  • r-protoown cac5cde — the evidence block is the other four-way duplicate and is untouched here -- check-readme-numbers.mjs still owns it in all four READMEs, and moving it is its own change with its own negative control
  • r-plantmore722 f698236 — a shim that exits 0 for everything proves a branch was reached, not that the real host would agree -- these are detection assertions, not integration ones
  • r-plantmore722 f698236 — gemini-cli, windsurf and opencode still rest on the cursor fixture's shape rather than their own rows
  • r-plantedexit722 b6e28a9 — the second case's non-zero code is asserted, not its value -- a change from 1 to 2 passes here
  • r-plantedhost722 b6e28a9 — one host of seven, on one platform. gemini-cli, windsurf and opencode take the same JSON path and are not planted; codex, hermes and claude-code take different ones and are not covered at all
  • r-plantedhost722 b6e28a9 — this executes wiring, not a real agent -- a planted shim is a file the job wrote, and it says nothing about what Cursor itself does with the registration
  • r-childtreediag640 69c98a0 — the diagnosis is printed, not asserted — the next failure explains itself but the step still cannot say which outcome is acceptable
  • r-childtreepre640 69c98a0 — windows-latest is the only evidence for this path; nothing here was verified locally
  • r-coldstart640 69c98a0 — this measures the launcher's own child; it does not measure when cmd.exe started, so a stall before node is attributed to the same interval
  • r-launchernode640 69c98a0 — the earlier commit raising the probe budget to 15s stands on its own measurement — a healthy probe used 4478ms of 5000ms — but its message claimed that budget explained this flakiness, and it did not
  • r-launcherwhy640 69c98a0 — the deadline explanation is two independent diagnoses and a margin measurement, not a reproduction — the confirming evidence is the next run's own output
  • r-mcpidentity572 69c98a0 — Windows behaviour here rests on windows-latest runs and nothing else; a slower machine than three times the measured passing case will still be told it could not be verified, which is at least true
  • r-nodedrive640 69c98a0 — this reproduces the spawn, not the whole probe; a silent result narrows the cause without naming the fix
  • r-probefacts572 69c98a0 — the close-stdin outcome is measured, not guaranteed by the shell -- a platform whose shell defers the redirect past the parent's first write would produce the timeout code instead, and this case would then need its own seam rather than a looser assertion
  • r-proberace572 69c98a0 — this leaves one outcome unpinned, so a regression that swapped closed-input for timed-out on that fixture would not be caught here -- the four other cases still pin their codes exactly
  • r-reclaimnogate640 69c98a0 — windows-latest is the only evidence for this path, and one green run does not settle a race — this needs to hold across runs before The MCP probe's Windows behaviour is unverified: PATHEXT resolution and child-tree cleanup #640 can be called closed
  • r-sawinput640 69c98a0 — this records the arrival, not the response; if bytes arrive and nothing comes back, the next question is the probe's reader
  • r-slownotbroken640 69c98a0 — fifteen seconds is calibrated against one Windows runner's measurement; a machine slower than three times that will still be told it could not be verified, which is at least now true
  • r-canon605 f474cf4 — esbuild resolves a platform-specific binary
  • r-assertfile1 8a859c6 — this checks the report validate produced; it does not re-derive the range, so a range that silently covered nothing would pass here
  • r-pretag01 86e0153registers_commitlore reads the key, so a config that registers under a different key -- a host with its own naming -- still reads as unregistered and is wired again
  • r-dogfoodref1 f605dbb — this asserts the two checks validate performs; a third class added later is not required by name until somebody adds it here
  • r-mslquote1 5b23c44 — this is the second quoting layer in this step; a third -- a value with a double quote in it -- would need a different mechanism than more escaping
  • r-engfloor01 fe83524 — the parser covers the range shapes npm packages actually publish -- comparators like >=22 <23, and pre-release identifiers, are read by their first version and not by their bounds
  • r-readyhosts1 9db3c4d — the new jobs establish that an install runs and answers on those hosts, not that every command behaves identically there
  • r-saywhat01 56444db — entailment is still unchecked, and this narrows the claim rather than closing the gap -- the protection remains that no drafted record is ever delivered as a directive
  • r-wrongtag1 99667f3 — PowerShell cannot be run here, so this is reasoned from the shared design and proven against the shell twin; only the windows-latest job is evidence for install.ps1
  • r-vbind001 2c88d24 — this binds the requested tag to the runtime that answers, not the tag to its content -- a tag moved after publication installs whatever it now points at, which is a signing question rather than a version-binding one
  • r-insttxn1 afb7bfb — this establishes that the installed tree is complete and its commands run on this machine at this moment -- not that the machine will still have a working node tomorrow, and not that any agent host will load what was installed
  • r-codexplug e5fe95a — a plugin can put a skill in front of a session; it cannot make the session follow it, and nothing here reports whether one did
  • r-ociprobe1 497ed63 — the probe reports what docker said at one instant, and a daemon can die between that answer and the evaluation it authorises -- the run then fails inside the container rather than refusing before it, which is a different path with its own handling
  • r-hermesx01 2eb8176hermes skills inspect resolves remote sources only in this Hermes version, so discovery was verified through hermes skills list --source all in a fresh isolated profile rather than from inside a live conversation; that a session then follows the procedure is not something an installer can establish
  • r-cdeb10reg 48bd5a8 — wrong-path viability, deterministic oracle feasibility, code disclosure, bounded implementation, and unproven ordinary or benchmark authorship cannot be decided from history and remain undecided for human review
  • r-cdebauth1 5ec7413 — this records that authorization was granted, not that every candidate drawn under it was authored by the grantor -- the candidate registry checks that per record, and nothing here substitutes for it
  • r-cdeb09sm 74d9c62 — this exercises the attacks the design anticipated, and an adversary who reads it will look for the ones it does not attempt -- notably collusion between a candidate and an evaluator image, and any attack on the freeze itself before a run starts
  • r-cdeb07or 5607dd5 — the state machine cannot distinguish an agent that produced no model turn from one whose host failed to report the turn it produced, so it treats both as interrupted and neither as retryable -- a real pre-turn infrastructure failure is therefore sometimes charged as a lost run
  • r-cdeb07or 5607dd5 — atomicity rests on rename and fsync semantics of the underlying filesystem; a filesystem that reorders them can still present a partial the recovery pass reads as whole
  • r-cdeb08an 60db89f — the paired bootstrap describes resampling stability within these five frozen repositories and thirty frozen tasks, and says nothing about any other repository, task or agent population
  • r-cdeb05lg 5d347b9 — the ledger observes only bytes emitted before the agent process closes -- terminal usage never written to the stream, external billing, and work outside that stream are all unavailable to it rather than estimated
  • r-cdeb04px ec942a3 — the proxy cannot observe a hook runner that never starts it, or one killed before its event is appended -- a short or missing side channel refuses the run rather than under-reporting it
  • r-cdeb04px ec942a3 — event indices are assigned by reading the log, so two hooks running at the same instant collide; the reader refuses the duplicate rather than accepting an ordering it cannot trust
  • r-cdeb06ev e9d3c72 — a determined candidate can still spend its budget rather than forge -- the resource control bounds a spinning implementation but cannot distinguish slow honest work from deliberate exhaustion
  • r-cdeb03rt f0ad091 — enforced by code — the capability gate refuses a missing or never-probed capability, the run spec cannot express host HOME or settings inheritance, provider credentials cross the container boundary only through a two-key allowlist, the captured stream is identity-checked before anything reads it as measurement, and the pin loader rejects hand-edited enforcement shapes. Still resting on the operator — building and pulling the image the freeze records, running preflight on the machine that runs the study, keeping the container runtime daemon itself trusted, and passing provider credentials into the preflight and run calls; the gate can verify what a container does, not that the host it runs on is honest
  • r-unattshadow b7b532a — together the two features measure how often an unattended pipeline would have written, and remove the asking from the writing -- neither half can say whether what gets written is worth a reader's attention, so shadow's number for an unattended repository is a volume, not a value
  • r-cdebsurface a1e8833 — the pilot anchors now marked unverified were measured under Edit|Write|MultiEdit|NotebookEdit, not the shipping Read|Edit|Write -- the 1.45 ON/OFF overhead, the timeout wall times behind the 0.48/1.00 split and the 0.6 screen derived from it, and the zero-delivery count
  • r-retireserena c1171ef — the preregistration fixes claims before numbers exist, so what it says about the calibration cannot move to match later tree state
  • r-pindigest c5a7cfa — pinning fixes the tree, not its behaviour -- a pinned action still runs with the job's token and can read this repository, and upgrading now requires deliberately resolving a new digest rather than inheriting one
  • r-probemodel 6966cb3 — pinning to sonnet means CDEB will say nothing about whether a stronger model needs delivered decisions less, which is a question worth its own study rather than a variable inside this one
  • r-runprobe 6a368ec — the gate screens runtime and says so -- completed means the process returned, which a no-op satisfies, and the pilot's 4.9x within-cell spread means two probes cannot bound the tail
  • r-delivchk 59ba928 — the runtime probe still has no implementation, so a freeze cannot yet be written even though the schema now demands its evidence
  • r-v13fix f4b6859 — schemas and the verifier now require the qualification evidence, but nothing yet produces it -- CDEB-10 must build the probe and the deliverability check before a freeze can be written
  • r-cdebv13 e0bd61a — the calibration is measured on disposable tasks, so it estimates overhead on work that is not the corpus and a corpus with different injection density will sit off it
  • r-cdebpres e01b482 — one repository, four tasks, six usable runs per arm and a local evaluator -- no claim gate is evaluable and preregistration §8 forbids any number here reaching a public surface
  • r-cdebseal 6cb710c — the snapshot is pinned to one sha in the runner, so a pilot re-run after dev moves measures the old tree until that constant is changed deliberately
  • r-cdebp01 8787e89 — one repository, four tasks, sixteen runs, and a local evaluator -- no claim gate is evaluable and no number here may reach a public surface
  • r-cdebmat02 8080420git bundle create --all includes refs/notes only by configuration, so the notes ref is passed explicitly -- a bundle that silently dropped the mirror would materialize an OFF arm by accident
  • r-cdebver01 ce7b278 — the schemas freeze protocol 1.2.0 constants -- thresholds, matrix size, category names -- so a protocol change is a schema change and CI notices
  • r-cdebprd12 c3fefd2 — CDEB measures the shipping trust configuration as it exists, which grades every record claim; a directive-path result requires a different study under a different product digest
  • r-benchscope 67f4375 — nothing checks the shape of the eight metric-row files. This gate names them and steps over them, and bench/deterministic/types.ts is the only definition that family has -- there is no JSON schema for it, so drift on that side is still invisible
  • r-benchscope 67f4375 — the pre-provenance exemption reads started_at, which is data on the row rather than a fact about the file. A row that misreported it would be held to the shorter list of requirements; that is a deliberate falsification rather than the omission this fixes, and nothing here detects it
  • r-winsupported1124 6333251 — repositories that installed the hook before Windows: the commit-msg hook hangs instead of returning, and #71's containment can never match there #321 keep the old stub and must re-run commitlore hooks install; a corrected release does not reach them, and this row's claim is about a working install
  • r-winderive1124 282693b — a diagnostic that retypes the code it describes goes stale silently, because nothing fails when the two drift apart -- it has to be read out of the artifact that ships
  • r-winbound1124 156deed — an unbounded hang is not evidence; it is a job that dies at the runner timeout having printed nothing, so every hook-invoking commit here has to carry its own bound
  • r-winassert1124 616005d — an assertion whose only oracle is an absent side effect cannot distinguish "refused" from "the mechanism never worked", so each one needs a positive control that fires before the attack
  • r-winshell1124 aa68a9a — a GitHub Actions bash step is invoked as bash -eo pipefail, so set -uo pipefail inside the step does not clear -e and any bare command that fails ends the step at that line
  • r-ps1scope282 72f23df — the hook-runtime probe spawns /bin/sh, so it cannot report on a Windows hook at all until T-1124 changes it
  • r-ps1shell282 97735d6 — a step's shell key takes no expression, so a per-host matrix cannot select the interpreter
  • r-t1120nodeinst 14deeb4 — git and node are hard prerequisites now, so a host without them installs nothing and says which one is missing
  • r-instpath119 9e1fce7 — a user who ignores the printed line still gets "not found" on the next command
  • r-7a3e91 cf859e4 — better-sqlite3 stays external because it is native — the bundle degrades to --no-index without it, which only works because r-6f2a08 made that load lazy first
  • r-3b8f52 1f8b4be — the figure is one machine, one run — it establishes the order of magnitude, not a regression baseline anyone should tune against
  • r-0c5d38 aeb54a6 — the suite runs against the source tree, so no test in it can observe what packaging drops
  • r-6f2e58 ea9ae6d — a library test and a binary test cover different failures, and the packaging layer between them is exactly where a working module becomes a broken install
  • r-7e5f02 e5f5e00 — npm installs through an engine mismatch, so the ecosystem's own signal cannot be relied on to stop anything
  • r-3a9d68 6a3fc3b — a test runner reports what ran, and nothing in its summary distinguishes "did not run" from "does not exist"
  • r-8e2d51 ef93c0e — git is the parser, so a git version that folds or bounds trailers differently is a correctness problem for us, not a compatibility footnote
  • r-c0f4e2 3d249cd — npm gitlore is held by an active same-domain CLI, so the owner's first-choice name was not available
  • r-b2e7f1 00d348d — Parsing must delegate to git interpret-trailers -- reimplementing the block rules would drift from the rest of the git ecosystem

Ruled out (423)

  • r-cdebremoval 36ae3ab — archiving bench/cdeb to a tag or an orphan branch instead of deleting | the instruction was to discard it, and the history already holds every version; a tag would be a second place to keep something nobody is to consult
  • r-cdebremoval 36ae3ab — keeping guard-mutations and pointing its registry at product tests | it had never guarded a product test, so re-aiming it would be new work introduced under a removal, and it belongs in its own change if it is wanted
  • r-cdebremoval 36ae3ab — leaving the two jobs in ci.yml as no-ops so the workflow digest and REQUIRED_CHECKS could stay | a required check that cannot fail is the shape this repository's release gate exists to reject
  • r-v8opens 4ed43c4 — calibrating on all 51 as the SSOT text specifies | four of the entries are disputed, and selecting judges against a disputed key hands the primary instrument to whichever judge agrees with it
  • r-v8opens 4ed43c4 — scoring the four disputed controls as INDETERMINATE | that invents a label neither blind session gave, and in every one of the four a judge said NOT_A_VIOLATION
  • r-v8opens 4ed43c4 — deleting the four from the corpus | they are the corpus's own evidence that a compliant-by-construction control can read as contested, and that is worth keeping where the calibration lives
  • r-v8opens 4ed43c4 — showing judges the v7 boundary specifications | it would replace the judgement being measured with the application of a specification, and nine of the seventeen have none to apply
  • r-v7terminal a980313 — running v7 on the eight settled candidates | the preregistration fixed the population at seventeen before any task existed, and reducing it after seeing which ones resolved is the discretion the floor was written to remove
  • r-v7terminal a980313 — relaxing the oracle input boundary so a provenance predicate becomes decidable | that boundary exists so an oracle cannot see the arm, and widening it to rescue one candidate reopens what it was written to close
  • r-v7terminal a980313 — reporting eight of seventeen as a result about CommitLore | no episode ran, no arm was assigned, and nothing here bears on whether automatic decision delivery helps an agent
  • r-v7opens f900bdd — importing the one v5 oracle for v4-377f04276465b59d | it is a lexical scan over six fixed paths, which the r1 priority ladder admits only where the decision is itself lexical, and reusing it would carry v5's unvalidated instrument into the endpoint
  • r-v7opens f900bdd — correcting the dist digest quietly in the lock | the declared value is what a reader of the first draft would look for, and deleting it removes the evidence that the correction was needed
  • r-v7opens f900bdd — opening v7 before v6's terminal state was re-read from the tree | the SSOT permits progression across green gates, and a gate that trusts its own summary of the predecessor is not a gate
  • r-v7opens f900bdd — leaving the v6 active-study assertion and pinning it to null | it would fail again at the next successor, and a test that has to be edited on every transition is not recording a durable fact
  • r-exclusionreach 78455d9 — mutating the census matcher for all three | one edit would bind fifteen claims at once, so each would be bound by something that says nothing about its own identity
  • r-exclusionreach 78455d9 — reading the expected value from the index as the record-id test does | then the mutation moves the expectation with the fixture and the test passes on whatever the entry says, which is how a value-changed mutation reads inert
  • r-exclusionreach 78455d9 — writing mutations for the other ten anyway | there is no candidate field a study id or a prompt hash can occupy, so the mutation would be unavailable rather than informative, and the baseline reason is the honest record
  • r-v6ratchetmisfiled 106a0fa — reporting the four as covered and moving on | the ratchet's exit code was 1 and the guards were in baseline as bound, so this would have left four properties recorded as defended by tests that do not defend them
  • r-v6ratchetmisfiled 106a0fa — relaxing the ratchet's exactly-one-match rule for JSONL | a find that matches 85 lines mutates whichever the replace hits first, which is not a control over anything in particular
  • r-v6ratchetmisfiled 106a0fa — mutating the test file instead of the artifact | removing an assertion always makes a suite pass, so it measures nothing about whether the artifact is checked
  • r-v6primaryevidence 73fee08 — keeping the trees as well | 114 control and blind trees are 3.6 GB and are rebuildable from the bundles plus the committed patches, whereas the patches themselves are not rebuildable from anything
  • r-v6primaryevidence 73fee08 — committing only the controls that passed | the declined ones are the evidence for the governance finding, and a corpus of only the successes cannot show what stopped the rest
  • r-v6primaryevidence 73fee08 — leaving this until after the PR merges | the scratch directory does not wait for a merge, and the gap was found while checking cleanup rather than by anything that would have raised it later
  • r-v6resultpublished 6e69a58 — leaving STATUS.json for a later commit since the artifacts already carried the verdict | a study whose own record does not say it ended can still be resolved as active, which is the failure the terminal-phase list exists to prevent
  • r-v6resultpublished 6e69a58 — asserting the most recent terminal study id in a test | it changes whenever a study ends, and a test that fails on a normal transition teaches nothing when it does
  • r-v6resultpublished 6e69a58 — publishing only the floors and not the obstacles | the eight failures are the finding, and a result that reported the shortfall without the file-and-line evidence would read as the corpus being too small rather than as its wrong paths being closed
  • r-v6taskfreeze cd1eaba — trusting the author's statement that the acceptance fails on base | it is the same class of evidence as the v5 worker prose that produced seven voided verdicts, and running it costs a minute a candidate
  • r-v6taskfreeze cd1eaba — treating a test that errors as one that fails on base | an import error and a failing assertion look identical in an exit code and mean opposite things about whether the task is worth measuring
  • r-v6taskfreeze cd1eaba — re-authoring a task for the three that passed on base | the rank-2 need is available for them, and taking it would be choosing a need after seeing that the first one did not work out, which is the ordering the hash rank exists to prevent
  • r-v6firewall 8efc6ca — adjudicating the two overlapping trees myself | I have read every ruling in the pool, and someone who knows the answer cannot judge whether a document reveals it
  • r-v6firewall 8efc6ca — taking the blind judge's boolean as the verdict | it answered the question I asked, which was narrower than the one that mattered, and its own prose contradicted it

Truncated: 444 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.

…ts digest

CI caught what the local suite could not: `check` failed on both Node versions
with "source checksum does not match this checkout". Nothing in `src/` changed
here, which is why nothing local complained -- but `SOURCE_INPUTS` is
`['package-lock.json', 'package.json', 'tsconfig.json', 'src']`, and the previous
commit deleted eleven `bench:cdeb:*` scripts from `package.json`. That is a source
change by the contract's definition even though it cannot reach the bundle.

The canonical build was run rather than skipped, because the interesting question
was whether the artifact moved with the source. It did not: `docker run ... node:24-bookworm
sh -c "npm ci && npm run build"` reproduced `dist/` byte-identical, `git status`
on `dist` is empty afterwards, and the regenerated manifest differs from the
committed one in exactly one line -- `source.sha256`. The artifact digest was
already correct and stays correct.

Worth keeping in mind next time: a commit that touches no TypeScript at all can
still require the canonical build, and the local suite gives no warning because
`artifact:verify` runs in CI's `check` job rather than under vitest.

Record-Id: r-cdebmanifest
Provenance: authored
Certainty: firm
Blast: module
Undo: easy
Ruled-out: running `npm run artifact:manifest` alone without the canonical build | it would have produced this same one-line diff, but from an unverified assumption that dist could not have moved; the build is what turns that into an observation
Ruled-out: putting the manifest update into the previous commit by amending it | that commit is pushed and force-pushing is not available here, so the correction is additive
Limit: reproducibility is established for one run on one machine against the pinned image digest. The contract's own comment notes `node:24-bookworm` is mutable, and this says nothing about a rebuild on a different date
Verified: `node scripts/verify-canonical-artifact.mjs` exits 0 and reports e8183a8fd3171c20b92c6234fc7ef0826cf4853d71471d421485b2bd71fc88fe; the docker build left `dist/` unmodified in git; the manifest diff is one changed line
Unverified: CI has not yet re-run on this commit, so `check` is not yet observed green on either Node version
@MongLong0214
MongLong0214 merged commit 597ac75 into main Aug 29, 2026
13 checks passed
@MongLong0214
MongLong0214 deleted the remove-cdeb branch August 29, 2026 01:51
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant