Development record
The reading include table admits only what the exclusion floor can read
Typed links: builds_on itd-183 (the assembler, the include table and the exclusion floor); refines itd-183 (the floor refuses what it cannot resolve and the manifest asserts per item) and itd-199 (a preset opts source and tests in, never the table by default); related adr-56 (an exclusion control asserts only what it can prove).
Press Release
abcd ships with an assembler whose manifest says exactly what was examined. The cold-reading include table and the exclusion floor now describe one set, item by item: a markdown document the floor cannot resolve is refused at admission and named, never passed through unscanned, and a source or test file, which the floor does not parse, is admitted only when a committed preset entry opts it in, travels whole, and is marked
unscannedin the manifest. The manifest's exclusion assertion is made per item and only for the items the floor parsed, so a scan that ran and a scan that never ran no longer produce the same artefact. The widening position stops receiving the shipped intents, which neither design document lists in its object.The floor previously recognised a construct by the shape of the container it sat in. A record-shaped document inside a Go fixture was not markdown, so it was not scanned, so it travelled intact while the manifest asserted its headings had been refused. Nine rounds of adding patterns closed nine spellings of that mistake. This closes the tenth by refusing what cannot be resolved and disclosing what was not examined, instead of enumerating what may walk down the silent path.
Why This Matters
An exclusion floor is a control, and a manifest is its attestation. When the
two disagree, the manifest is the side that is wrong, and a reader holding the
bundle and the manifest has no way to know it. That is the defect the itd-183
audit found live on this repository's own corpus, not in a crafted document:
the assembler admitted internal/core/site/fixture_test.go at item itm-0736
carrying three literal ## Audit Notes sections with their acceptance
rollups, while the same run's manifest asserted Audit Notes was refused
(iss-2608301450065320).
Ten records stand against the floor. They collapse into one mechanism and three consequences of it. The mechanism is container-shape gating: the scan is switched off for a whole region or file because the container does not match an expected shape, and the manifest goes on asserting exclusion anyway. The file extension is one container (iss-2608301450065320). A fenced region wrongly extended over the frontmatter is another, and it switches off the very refusal that exists to catch keys the field reader cannot see (iss-2608301350533102, the set's only critical). A frontmatter block that never opens because line 0 is not a delimiter is a third (iss-2608301237456350).
The rest are the same error at smaller grain. A key that is nested rather than line-anchored is invisible to patterns anchored to the line (iss-2608301237450573, iss-2608301251398360, which states outright that the two want one fix and not two). A character the file's other readers treat as whitespace, but the scan's character class does not, mis-parses a heading opener and admits the heading under it (iss-2608301350534164, iss-2608301421380392).
Three of those are verified leaking on this round and on its parent. A fourth
is live on the corpus at HEAD. The records are unanimous about what that
means: a spelling arms race needs a design, not more patterns
(iss-2608301251398360), and fixing them one at a time is how this floor has spent nine rounds.
The maintainer ruled on 2026-09-02, checked against the design framework and the readings companion, which both name code, tests, documentation and configuration as the shipped tree a reading may see: source and tests reach a reading only where a committed preset entry names them, an item so named travels whole and marked unscanned, and the floor refuses markdown it cannot resolve and marks what it does not parse, so the manifest asserts the exclusion only for the items it parsed (brief invariant 16). The strict alternative, removing the test kind from the table, was declined because it contradicts both documents; widening the floor to scan every type stays declined (ruled 2026-08-30). The same interview settled iss-2609012259587904 from the documents: the framework's widening object and the companion's section 5.2 both list the widening object without the shipped intents, so the shipped intent projection row's positions exclude widening, and that change lands here with the include-table work.
Mechanism
We expect refusal-at-admission for markdown, and an unscanned mark for what
the floor does not parse, to close this class where nine rounds of added
patterns did not, because every leak in the set shares one shape rather than
ten: the floor declined to examine something, and nothing downstream knew the
examination had not run. Enumerating what may pass leaves the silent-admission
path in place and re-opens on the next unenumerated spelling. Refusing a
markdown document the floor cannot resolve removes the path for the material
the floor claims to cover, and marking every unparsed item makes the
manifest's claim a fact about each item rather than a claim about the run.
This is falsifiable in two moves. Find a leak in a document the floor parsed and the manifest marked as parsed: such a leak would show the defect was in the floor's patterns after all, and that refusal bought nothing. Or find an item the floor did not parse arriving in a bundle without the mark: that would show the manifest still asserting more than the examination behind it.
Scope Conditions
- The corpus is this repository's committed record. A reading assembled over an external or mixed corpus is a different population and is not claimed here.
- The floor's parseable set is markdown whose frontmatter and headings it can resolve. Every other admitted kind is disclosed as unscanned rather than examined; widening the parseable set is a separate change, and this intent's claim does not survive it unexamined.
- The committed detection and widening entries name the
sourceandtestkinds, on the object-set ruling of 2026-09-02, and every such item arrives whole and markedunscanned; the entailment entry names neither. An entry that names either kind by commit accepts the unscanned items it selects, disclosed by the mark. - No reading runs before this intent ships; every criterion below is judged against the assembler's output and its manifest.
What's In Scope
- The
sourceandtestkinds stay in the include table, so the object stays as the design documents state it, which for the detection and widening positions closes with the shipped tree: The committed detection and widening entries name both kinds, on the object-set ruling of 2026-09-02, and the entailment entry names neither. An entry that names one gets each item whole, and the manifest marks each such itemunscanned. - The floor refuses a markdown document it cannot resolve, naming the document
and the shape, and never admits one unscanned: a fence delimiter inside the
frontmatter block; a delimited block that does not open at line 0 but would
to a reader of the bundle, because only blank lines, whitespace or an HTML
comment precede it; a compact mapping nested in a block sequence and an
explicit key in a flow mapping, which the line-anchored key reader cannot
see; an attribute whose value opens on the line after its equals sign,
which declines the markup mask; and a raw heading opener that reaches the
end of the document with no bound, which is how a CRLF document's blank line
was read over. Each extends the answer
unresolvableFrontmatterShapealready gives for one class to the whole set. - The manifest's exclusion assertion is made per item, only for the items the floor parsed: an item carries a closed mark saying whether the key and heading signals were examined over it, and the assertion rests on that mark rather than on the run.
- The narrowing the include table performs is stated in the table itself: each row declares whether the floor parses what it admits, the rendered charter carries the declaration, and admission and examination are one declaration rather than a row on one side and an extension test on the other (iss-2608301450065320 names this as the undeclared scope decision underneath the whole class).
- The shipped intent projection row's positions exclude widening, the exclusion floor asserts it at that position, and the widening definition's admitted sources are regenerated (iss-2609012259587904, resolved by this intent).
- The include table admits the brief's meta, product, constraints, surfaces,
internals and delivery chapters as brief sections, one row per chapter, at
every position that reads the brief, because the design documents name
"brief current text" as a reading's object and the table admits two chapters
of it today. The rows are named individually because rule 1 forbids naming
brief/whole: The directory contains the glossary, which keeps its own row. The evidence chapter stays excluded as verdict material, on the ground the Audit Notes exclusion rests on, with that ground stated in the table's rule text, and the manifest asserts the exclusion (iss-2609021153264023, resolved by this intent on the corrections ruling of 2026-09-02).
What's Out of Scope
Four findings in the evidence set are inherited by this intent and fixed by none of it. They are recorded here so a later reader does not mistake their survival for an oversight:
- The quadratic title render on an unbounded heading opener, and the test whose name over-claims the linearity it does not cover (iss-2608301421382564). A cost finding about the scan's algorithm, not about what it excludes; the refusal of an unbounded opener removes that shape's admission and claims nothing about the scan's cost, and the test's name and its coverage stay with the issue.
- The two hand-written definitions of what opens a tag (iss-2608301251394412). Tech debt under the one-canonical-primitive rule; the record asks only that this intent inherit it.
- The doc comment describing fence behaviour the code does not have (iss-2608301237450573, second half).
- The escaped-key refusal whose message asserts two things that need not be true (iss-2608301421381157). The refusal is correct; only its stated reason is wrong.
Widening the floor's parseable set is also out of scope. This intent makes
admission and comprehension agree by disclosing at admission; moving
comprehension instead is the alternative the itd-183 audit named and the
maintainer did not choose (ruled 2026-08-30, confirmed 2026-09-02). Removing
the test kind from the table is out of scope for the opposite reason: it was
declined because it contradicts both design documents. The presets themselves
are not recalibrated here; that is the preset-windows intent's work, and
which committed entries name the two tree kinds is that intent's to record:
The detection and widening entries name both, the entailment entry neither.
Acceptance Criteria
- Given a markdown document the include table admits whose frontmatter or headings the exclusion floor cannot resolve, when the assembler runs, then the document is refused, the refusal names the document and the shape, and no part of it reaches the bundle.
- Given a document whose frontmatter the floor cannot resolve, including a fence delimiter inside the frontmatter block, a delimited block preceded only by blank lines, whitespace or an HTML comment, a compact mapping nested in a block sequence, and an explicit key in a flow mapping, when the floor scans it, then the document is refused rather than admitted, and the same holds for an attribute whose value opens on the line after its equals sign and for a raw heading opener that reaches the end of the document with no bound, once a CRLF blank line counts as one.
- Given a committed preset entry that opts the
sourceortestkind in, when the assembler runs, then each such item travels whole and its manifest entry is markedunscanned, and no item the floor parsed carries that mark. - Given a bundle and its manifest, when the manifest asserts a construct was excluded, then the assertion is made per item and only for the items marked as parsed, so it rests on a scan that ran rather than on one that may have declined, and a manifest whose item carries no mark is refused by the decoder.
- Given this repository's corpus at HEAD and the committed presets,
when the assembler runs under the committed entry at any assembling
position, then the Go fixture carrying three
## Audit Notessections is absent from the bundle, and when an entry opts tests in, then the item recorded atitm-0736arrives markedunscanned, so the leak does not reproduce as a leak. - Given the include table, when it is inspected or rendered into the charter, then each row states whether the floor parses what it admits, and a reader can see which documents the floor is claimed to cover without reading the floor.
- Given the widening position, when the assembler runs, then no shipped intent reaches the bundle, the manifest asserts the exclusion at that position, and the entailment and detection positions still receive the shipped intents projected as before.
- Given the include table, when the assembler runs at any position that reads the brief, then a document under each of the brief's meta, product, constraints, surfaces, internals and delivery chapters is admitted as a brief section, a document under the evidence chapter is refused, and the manifest asserts that exclusion with the verdict-material ground stated in the table's rule text.
Open Questions
None. The two questions the draft carried are answered by the ruling. The
narrowing costs the committed entries nothing they do not disclose: The
detection and widening entries name source and tests, on the object-set ruling
of the same day, and every such item arrives marked unscanned, while the
entailment entry names neither; the fixture leak at itm-0736 is absent from
every committed entry, whose paths do not reach internal/core/site, and
disclosed as unscanned wherever an entry opts that path's tests in. A refusal
is per document for markdown the floor cannot resolve, which keeps a reading
possible over the rest of the corpus and names the one document that stopped
it; an opted-in non-markdown item is never refused, because refusing it would
contradict the object the design documents state, and is marked unscanned
instead.
Audit Notes
Fidelity review — receipt rcp-11891aee84a6 (verifier intent-auditor claude-opus-5[1m]).
Provenance: intent-auditor@claude-opus-5[1m] · rubric_hash sha256:44f19418b0b8d56d7b17cbecbd5acd5d2cbed5abc4347428680ce46647f381d5 · prompt_hash sha256:542ed2cd51ff938717a3f47b2b332e8d47910beec0ca7ecdfd238ae7edf5ced5 Input attestations: diff:c0baaff4~1..c1be0000@sha256:0913f8672a2568fe0f7970a3f03189bc2df67f3d953cf2c18c349009f18bdf89;
Acceptance rollup: MET 6 · MET_WITH_CONCERNS 2 · NOT_MET 0 · INCONCLUSIVE 0
Per-criterion verdicts:
- ac-1 — MET: verifyRedaction raises each unresolvable shape as a refusal naming the path and the shape and collect returns nil on the error, so the assembly stops and no item of the document reaches the bundle; the test asserts both the naming and the empty result evidence: internal/core/reading/project.go:359 — "if line, shape, ok := displacedFrontmatter(lines); ok {" evidence: internal/core/reading/assemble.go:874 — "doc, err = redactExcluded(rel, doc, exclusions)" evidence: internal/core/reading/project_test.go:341 — "if len(res.Bundle.Items) != 0 || len(res.Manifest.Items) != 0 {"
- ac-2 — MET: all six shapes plus the CRLF blank-line bound are implemented and each has a unit test that I watched pass, and six refusal plants run the same shapes through the eval at every assembling position
evidence: internal/core/reading/project.go:1031 — "return i + 1, "a fence delimiter inside the frontmatter block", true"
evidence: internal/core/reading/project.go:1134 — "a frontmatter block displaced from line 0 by %d line(s)"
evidence: internal/core/reading/project.go:1037 — "return i + 1, "a mapping nested in a block sequence", true"
evidence: internal/core/reading/project.go:1039 — "return i + 1, "an explicit key in a flow mapping", true"
evidence: internal/core/reading/project.go:835 — "shape = "an attribute value that opens on the line after its equals sign""
evidence: internal/core/reading/project.go:200 — "rawHeadingBoundRe = regexp.MustCompile(
(?is)</([a-z] [a-z0-9-]*)\s*>|<h[1-6] (?:\s[^>]*)?/?>|\n[ \t\r]*\n)" evidence: internal/core/reading/project_test.go:288 — "func TestAnUnboundedRawHeadingRefusesAndACRLFBlankLineBounds(t *testing.T) {" - ac-3 — MET: collect calls redactExcluded only for a ScanParsed row and passes an unscanned row's document through untouched, stamping the row's Scan onto each candidate; the two tests assert byte identity plus the unscanned mark, and that no .md item is marked unscanned evidence: internal/core/reading/assemble.go:873 — "if row.Scan == ScanParsed {" evidence: internal/core/reading/size_test.go:637 — "func TestOptedInSourceAndTestsTravelWholeMarkedUnscanned(t *testing.T) {" evidence: internal/core/reading/size_test.go:690 — "func TestNoParsedItemCarriesTheUnscannedMark(t *testing.T) {"
- ac-4 — MET_WITH_CONCERNS: DecodeManifest refuses an item whose scan mark is absent or outside the closed vocabulary, and each item now carries the mark; the concern is that the emitted exclusions array is unchanged in shape and carries no per-item scoping of its own, so the per-item narrowing lives in include.go's doc comment and in the eval oracle rather than on the artefact's face
evidence: internal/core/reading/manifest.go:263 — "if it.Scan == "" {"
evidence: internal/core/reading/manifest.go:141 — "Scan Scan
json:"scan"" evidence: internal/core/reading/include.go:469 — "asserted for the items the manifest marksparsedand for no other" evidence: internal/core/reading/include.go:545 — "Positions []Positionjson:"-"" evidence: evals/coldreading_oracle_test.go:800 — "func checkFieldAbsence(a assembled) []violation {" - ac-5 — MET_WITH_CONCERNS: both halves are demonstrated over a detached clone of this repository's HEAD and the eval lane passes, but three caveats are owed: the assembler could not run over this corpus at the intent's own commit at all, the proving test landed one commit later, and the item is identified by path rather than by the run-scoped key itm-0736 the criterion names evidence: evals/coldreading_test.go:768 — "func TestTheFixtureLeakIsAbsentUnderEveryCommittedPreset(t *testing.T) {" evidence: evals/coldreading_test.go:811 — "if it.Scan != "unscanned" {" evidence: internal/core/reading/scope_test.go:1058 — "func TestOnlyTheTreePositionsNameSourceOrTest(t *testing.T) {" evidence: .abcd/development/brief/glossary/core/construal.md:11 — "the attribution comment repaired below the frontmatter in 255543c1; assemble refused every position before it"
- ac-6 — MET: Row gains Scan, every row declares one, Render emits a Floor column between Kind and Admitting rule, and the regenerated charter carries it, so a reader sees the claimed coverage without opening the floor evidence: internal/core/reading/include.go:230 — "Scan Scan" evidence: internal/core/reading/include.go:580 — "| Positions | Source | Matches | Suffixes | Fields | Store | Bucket | Kind | Floor | Admitting rule |" evidence: .abcd/development/readings/README.md:120 — "| Positions | Source | Matches | Suffixes | Fields | Store | Bucket | Kind | Floor | Admitting rule |" evidence: internal/core/reading/include_test.go:429 — "func TestParsedRowsAdmitOnlyMarkdown(t *testing.T) {"
- ac-7 — MET: the shipped intent row's Positions drop widening, a widening-scoped exclusion row asserts the withdrawal into the manifest, the widening definition loses its shipped line, and both the unit test and the eval assert the family is absent at widening and present at entailment and detection evidence: internal/core/reading/include.go:363 — "Positions: []Position{PositionEntailment, PositionComparative, PositionDetection}," evidence: internal/core/reading/include.go:527 — "Rule: "the widening object as the design documents state it"," evidence: evals/coldreading_test.go:657 — "func TestWideningNeverSeesTheShippedIntents(t *testing.T) {" evidence: internal/core/reading/include_test.go:195 — "func TestWideningExcludesDraftsAndPlannedEntailmentIncludesThem(t *testing.T) {"
- ac-8 — MET: all six brief chapters are admitted as brief sections at every position the brief rows admit, the meta row reaches 00-meta.md alone, and the evidence chapter's exclusion row now states the verdict-material ground in the table's own rule text evidence: internal/core/reading/include.go:296 — "Source: ".abcd/development/brief/04-surfaces"," evidence: internal/core/reading/include.go:337 — "Match: []string{"00-meta.md"}," evidence: internal/core/reading/include.go:487 — "Rule: "verdict material: a prior verdict is revision history, the ground the Audit Notes exclusion rests on"," evidence: internal/core/reading/include_test.go:492 — "func TestBriefChaptersAreAdmittedAsBriefSections(t *testing.T) {" evidence: internal/core/reading/include_test.go:549 — "func TestTheEvidenceChapterIsExcludedAsVerdictMaterial(t *testing.T) {"
Gap audit:
- honoured:
- a markdown document the floor cannot resolve is refused at admission and named, never passed through unscanned evidence: internal/core/reading/project.go:364 — "if line, shape, ok := unresolvableFrontmatterShape(lines, fenced); ok {" evidence: internal/core/reading/project_test.go:320 — "func TestAnUnresolvableDocumentIsRefusedByName(t *testing.T) {"
- admission and examination are one declaration: the extension test is gone and the floor runs over the row's Scan evidence: internal/core/reading/project.go:50 — "There is no file-extension test here any more, and its absence is the point." evidence: internal/core/reading/assemble.go:873 — "if row.Scan == ScanParsed {"
- a source or test file is admitted only where a committed preset entry opts it in, travels whole, and is marked unscanned in the manifest evidence: internal/core/reading/include.go:419 — "Scan: ScanUnscanned," evidence: .abcd/config/reading-presets.json:92 — ""kinds": ["brief-section", "glossary-term", "discipline", "spec", "intent-projection", "doc", "config", "source", "test"]," evidence: internal/core/reading/size_test.go:637 — "func TestOptedInSourceAndTestsTravelWholeMarkedUnscanned(t *testing.T) {"
- a scan that ran and a scan that never ran no longer produce byte-identical attestations: every manifest item carries a closed scan mark and the decoder refuses one without it
evidence: internal/core/reading/manifest.go:141 — "Scan Scan
json:"scan"" evidence: internal/core/reading/manifest.go:268 — "if !knownScans[it.Scan] {" - the widening position stops receiving the shipped intents, which neither design document lists in its object, and the floor asserts the withdrawal there evidence: internal/core/reading/include.go:524 — "Detail: ".abcd/development/intents/shipped"," evidence: agents/cold-reading-widening.md:8 — "prompt_version moved PATCH and the shipped line removed from the admitted-sources list"
- the include table admits the brief's six chapters as brief sections and keeps the evidence chapter out as verdict material, with the ground stated in the table's rule text evidence: internal/core/reading/include.go:330 — "this one contains the glossary — which keeps its own row above." evidence: internal/core/reading/include.go:487 — "Rule: "verdict material: a prior verdict is revision history, the ground the Audit Notes exclusion rests on","
- the narrowing the include table performs is stated in the table itself and carried into the rendered charter and the plugin page
evidence: .abcd/development/readings/README.md:134 — "|
test|unscanned| Admitted where a committed preset entry names this kind, and never examined" evidence: commands/reading.md:120 — "every manifest item carries ascanmark sayingparsedorunscanned." - the size report counts what was not examined and the CLI names it above zero
evidence: internal/core/reading/assemble.go:116 — "Unscanned int
json:"unscanned"" evidence: internal/surface/cli/reading.go:391 — "unscanned: %d item(s) travel whole, not examined by the exclusion floor"
- diverged:
- the spec's assertion that none of the six shapes appears in a committed record the include table admits, checked over the record at the named tree evidence: .abcd/development/specs/closed/spc-2609021003136831-the-reading-include-table-admits-only.md:211 — "None of the six shapes appears in a committed record the include table admits" evidence: .abcd/development/brief/glossary/core/construal.md:11 — "21 glossary records carried the displaced-block shape; assemble refused this corpus at every position until 255543c1 moved the attribution comment below the frontmatter (iss-2609021457186209)"
- ac-5's second half, proved in the intent's own change evidence: evals/coldreading_test.go:768 — "TestTheFixtureLeakIsAbsentUnderEveryCommittedPreset landed in c1be0000, one commit after c0baaff4, because the committed entries carried no paths until the preset-windows intent"
- the eval's carriers move +2 and the spec names no move of materialClasses evidence: evals/coldreading_oracle_test.go:244 — "{"carriers", len(carriers), 17}," evidence: evals/coldreading_oracle_test.go:245 — "{"materialClasses", len(materialClasses), 10},"
- only the widening definition's prompt_version moves PATCH evidence: agents/cold-reading-detection.md:7 — "prompt_version 0.1.1 to 0.1.2; all four definitions gained the four brief-chapter sources and all four moved PATCH" evidence: internal/core/reading/definitions_test.go:252 — "TestDefinitionHoldsItsFiveParts holds every definition's admitted sources against the table, so the four moved together"
- each refusal plant's Names name the path, the shape's wording and the excluded thing it hides evidence: evals/coldreading_fixture_test.go:378 — "the plants' Names carry the path and the shape wording only; the hidden key moved to Why, because naming it would mean resolving it"
- the manifest's exclusion assertion is made per item
evidence: internal/core/reading/include.go:545 — "Positions []Position
json:"-"" evidence: internal/core/reading/include.go:467 — "What each entry asserts, and over WHICH items, is fixed here rather than left to a reader"
- missing:
- the measurement adr-56 assigns to itd-194: how much corpus the narrowing costs, taken before a reading runs evidence: .abcd/development/decisions/adrs/0056-an-exclusion-control-asserts-only-what.md:101 — "The corpus a reading sees gets smaller, by an amount nobody has measured." evidence: .abcd/development/intents/shipped/itd-194-the-reading-include-table-admits-only.md:249 — "None. The two questions the draft carried are answered by the ruling."
Scope-condition dispositions:
- cond-2609021003132586 — narrowed: the corpus was this repository's committed record, but the record had to move for the claim to hold: 21 glossary records carried the displaced-block shape and the assembler refused every assembling position over the corpus as it stood at the intent's own commit narrowing: holds over this repository's committed record as repaired by 255543c1, not over the corpus as it stood when the intent's own commit landed evidence: .abcd/development/brief/glossary/core/construal.md:11 — "the mattpocock/skills attribution comment moved below the frontmatter block in 255543c1" evidence: internal/core/reading/project.go:1134 — "a frontmatter block displaced from line 0 by %d line(s)"
- cond-2609021003134464 — survived: every parsed row admits markdown and nothing else, every other admitted kind declares ScanUnscanned and is disclosed by the mark, and the parseable set was not widened evidence: internal/core/reading/include_test.go:429 — "func TestParsedRowsAdmitOnlyMarkdown(t *testing.T) {" evidence: internal/core/reading/include.go:450 — "Scan: ScanUnscanned,"
- cond-2609021003130127 — survived: the committed detection and widening entries name source and test, the entailment entry names neither, and the test asserts every such item in each entry's manifest carries the unscanned mark evidence: .abcd/config/reading-presets.json:28 — ""kinds": ["brief-section", "glossary-term", "discipline", "spec", "doc", "config", "source", "test"]," evidence: .abcd/config/reading-presets.json:60 — ""kinds": ["brief-section", "glossary-term", "discipline", "spec", "intent-projection"]," evidence: internal/core/reading/scope_test.go:1058 — "func TestOnlyTheTreePositionsNameSourceOrTest(t *testing.T) {"
- cond-2609021003139989 — survived: no reading ran in the delivered range: the readings family holds only its charter, and every criterion above was judged against the assembler's output and its manifest evidence: .abcd/development/readings/README.md:120 — "the readings family carries the rendered include table and no reading record"
Grounds
- pursued: we expect refusing markdown the floor cannot resolve, and marking every item the floor did not parse as unscanned in the manifest, to close the container-shape class that nine rounds of added patterns did not, because every leak shared one shape, a scan that declined with nothing downstream told; a leak in a document the manifest marks as parsed, or an unparsed item arriving without the mark, would show it wrong
Frontmatter
| id | itd-194 |
|---|---|
| type | intent |
| lifecycle | shipped |
| kind | standalone |
| severity | major |
.abcd/development/intents/shipped/itd-194-the-reading-include-table-admits-only.md
open on GitHub ↗ · commit history ↗
References1
- itd-183The cold reading sees exactly what the assembler passes — positive inclusion, field projection, and a per-run manifestbuilds on
Referenced by2
- adr-56An exclusion control asserts only what it can proverelated
- spc-2609021003136831The include table declares what the floor parses, the floor refuses the markdown it cannot resolve, and the manifest marks every item it did not examineimplemented by
mentions31
- adr-2609021016286571The invocation is a position and a target state, and the committed preset for the position supplies the rest
- dcn-26090200000000022026-09-02 — Source and tests are opt-in to a reading, never admitted by default, and an opted-in item travels whole and marked unscanned (maintainer, at the Iteration 2 planning interview, checked against the design framework v4 section 7.2 and the readings companion v4 section 4.5, which both name code, tests, documentation and configuration as the shipped tree a reading may see). The `source` and `test` kinds stay in the include table so the object stays as the documents state it; no committed cold preset names either; a preset or a scope that opts one in gets it whole, and the manifest marks each such item as unscanned so the exclusion floor's assertion is made only for items it parsed (invariant 16). The detection definition's Object is unchanged. itd-194 is planned on this ruling: the floor refuses markdown it cannot resolve and marks what it does not parse; the strict alternative, removing the test kind from the table, was declined because it contradicts both documents, and the alternative of widening the floor to scan every type stays declined (2026-08-30). Cost of the narrowing under the committed cold presets: none, since none admits source or tests; the live fixture leak at itm-0736 is absent from every committed preset and disclosed as unscanned wherever a preset opts tests in.
- dcn-26090200000000042026-09-02 — The widening position does not receive the shipped intents (maintainer, from the documents: the framework's W12 object and the companion's section 5.2 both list the widening object without them). The shipped-intent projection row's positions exclude widening; iss-2609012259587904 is settled and its code change lands with itd-194's include-table work.
- dcn-26090200000000132026-09-02 — The readings open Iteration 2 and the build follows them, as the framework's section 13 states (maintainer, correcting the marker entry of the same day). Four intents complete Iteration 1's instrument and land before any reading runs: the two-operand invocation, itd-194, the preset windows and the comparative channel, together with the eval gate and the ledger hygiene. The opening widening reading and detection pass then run over Iteration 1's shipped state and claim record with the construal as it stands, marker included (framework section 12: a construal is readable while marked), and their outputs are dispositioned. The six remaining intents (admission and surprise verbs, reframe record, principles as a read object, condition disposition, reading-occasioned origin, scribe verbs) are the framework's own section 13 build list, planned in advance because the documents commit to them, and built at Step 5 after the dispositions, with the first admissions, surprises, reframes and condition dispositions hand-authored in the target format until each verb lands (framework 13, "schema before commands"; companion 5.6). The marker's lift is not a precondition of the widening run; it lifts when the maintainer judges the ledger the construal describes to be real. The sentence "the widening reading does not run before then" in the earlier marker entry is superseded by this one.
- dcn-26090200000000172026-09-02 — Corrections after the final compliance review (maintainer's rule: the documents govern). (1) Phase A of the implementation is the two-operand invocation, itd-194, the preset windows, the comparative channel and the reading-occasioned origin, the last because the framework's section 6.3 has the origin key written only by commands and no promotion of an accepted reading item may precede its writer; Phase B is the condition disposition, the admission and surprise verbs, the reframe record, the scribe verbs and the principles read object, built at Step 5 after the readings, with the first entries hand-authored where the framework permits. (2) Between the phases the maintainer runs all four readings in the cycle's order, not only the two that open it: the widening reading opens (Step 2), the entailment reading runs on the claim record (Step 3), the comparative reading characterises the widening run's candidates (Step 4) and the detection pass reads the shipped state against the claim record (Step 6), as the framework's section 14 places them; admission follows characterisation. (3) The opening target is the commit at which Phase A is complete, and "Iteration 1's shipped state" is read at that commit: the object set names the ledger's records and delivered paths, and a tension the detection pass surfaces between a Phase A change and a superseded claim in a shipped instrument intent is dispositioned like any other, with the supersession named as the purpose. (4) A run that returns no items is committed at every position as a run with an empty item set, never refused, per the framework's section 13; refusal is for a malformed payload. (5) "Brief current text" is the whole brief bar the evidence chapter, which the include table excludes as verdict material (the same ground as the Audit Notes exclusion), and bar the glossary, which is its own row; the product, constraints, meta, surfaces, internals and delivery chapters are admitted as brief sections at every position that reads the brief, and the preset windows are re-measured at landing. (6) The supply-regime check as this tree stands: the reserved-name refusals are the framework's structural signatures and refuse, enforced; the four prose detectors flag, observed; their withdrawal is the 2026-09-01 ruling carried by an unmerged change, and whichever state the opening target carries is what the case report describes, "enforced" for the reserved-name check only. The entry of this day that described the detectors as already withdrawn is corrected by this one. (7) The blindness core's fourth condition takes the companion's sentence, "items are returned in the order they arise in the object"; the four definitions move together with a patch version.
- dcn-26090200000000202026-09-02 — The entailment reading is handed the OBJECT SET's drafts and planned intents, and none by default (maintainer, at the Phase A review). The framework's section 13 fixes the object set as "Iteration 1's shipped state and claim record" — the fifteen workstream intents, which the record extends by the ten Iteration 2 intents — and the readings companion's section 6.2 makes drafts and planned intents ADMISSIBLE at that position: admissible is a permission, the object set is the scope, and the assembly was handing every draft and planned intent in the repository (147 projected intents on the Phase A tree) because a record row is admitted whole when the object set names none of its records. The drafts and planned rows therefore narrow by the entry's record list exactly as the shipped row does, so a draft or planned intent travels only when the committed entry names it; the companion's admissibility becomes a switch on the entailment entry — `admit_drafts_and_planned`, yes or no for drafts and planned intents beyond the object set, default no, refused at load on any other position because those two rows are admitted at entailment alone. The committed entailment entry names the ten Iteration 2 intents (itd-194, itd-2609021003095168, itd-2609020625400169, itd-2609020625400194, itd-2609020625400445, itd-2609020625402518, itd-2609020625402599, itd-2609020625405170, itd-2609020625405251, itd-2609020625407419) beside the fifteen, and declares no switch; several of the ten are shipped by the time Phase A completes and travel through the shipped row, which is the same object set either way. Issues, ADRs and every other warm family stay excluded by construction and gain no switch. Divergence register entry 1 is corrected accordingly: it recorded the ten as reaching the position through the companion's admission, which is the reading this ruling replaces.
- iss-2608301237450573pre-existing on the itd-183 branch: a compact nested mapping in a block sequence leaks an excluded key, and rawHTMLHeading's fence comment overclaims
- iss-2608301237456350confining the frontmatter block to line 0 silently admits a delimited block carrying an excluded key that the manifest still asserts was excluded
- iss-2608301251394412opensTag restates htmlTagRe's rule in hand-written code giving one file two definitions of what opens a tag
- iss-2608301251398360a flow-context explicit key leaks an excluded field and wants the same fix as the compact block-sequence mapping
- iss-2608301350533102fenceMask spans the frontmatter so a fence delimiter inside a block scalar switches off the excluded key scan for the rest of the block
- iss-2608301350534164a newline between an attribute name's equals and its opening quote declines the markup mask on both readings so a value carrying a greater-than truncates the heading opener
- iss-2608301421380392the raw heading soft bound does not match a CRLF blank line so an unclosed heading in a CRLF file reads its title over the rest of the document and travels
- iss-2608301421381157the escaped key refusal returns through an error message asserting the block is unclosed and the key excluded when neither need be true
- iss-2608301421382564a raw heading opener with no hard bound renders its title over the whole remainder so the scan is quadratic in a shape the linearity test does not cover
- iss-2608301450065320the assembler's key and heading signals are scoped to markdown so a record-shaped document inside a Go fixture carries its Audit Notes into the bundle while the manifest asserts refusal
- iss-2609012259587904The assembler passes the shipped intents at the widening position, which the readings companion's widening object does not list
- iss-2609021153264023The assembler admits only the brief's product and constraints chapters where the design documents name the brief's current text as a reading's object
- iss-2609021457186209spc-2609021003136831 section 'The six refusals' states that none of the six shapes appears in a committed record the include table admits, so the refusals refuse nothing on this corpus today. That measurement is wrong. Shape 2, the displaced frontmatter block, is carried by 21 committed glossary records under .abcd/development/brief/glossary/ (core/*.md, interview/*.md and _template.md), each opening with the attribution comment 'Adapted from mattpocock/skills (MIT). See README Acknowledgements.' as an HTML comment on line 0 and its frontmatter delimiter on line 1. The refusal is correct on the merits: frontmatter.Fields requires the delimiter at line 0, so those records' frontmatter keys are invisible to the assembler's redactor while every manifest asserts the key exclusions over them, which is the brief invariant 16 violation iss-2608301237456350 names. The consequence is that once itd-194 ships, reading assemble refuses at every assembling position over this repository's own corpus, and the ac-5 eval TestTheFixtureLeakIsAbsentUnderEveryCommittedPreset, which assembles a clone of HEAD, cannot pass. The two spec requirements are not simultaneously satisfiable while those records stand. Measured remedy, verified on a scratch copy: moving the attribution comment to the line after the frontmatter block's closing delimiter in those 21 files makes the whole corpus assemble with no refusal and leaves record-lint with no new finding. Whether to repair the records, narrow shape 2's HTML-comment clause, or do something else is a corpus decision this spec does not authorise, so it is captured rather than taken.
- itd-198An assembly reports what it would cost before a reading is commissioned
- itd-199A reading is about something narrower than everything, and its scope is a committed, adjustable choice
- itd-2609020625400445A committed preset declares the window it was calibrated for, and the record holds every preset to its declaration
- spc-2609020626039834The comparative channel: one widening run's candidates, two fields each, characterised before anyone admits one
- spc-2609020626040342The admission and surprise verbs: one act, two records, and the ruled order held as a refusal
- spc-2609020626042168The reading-occasioned origin: promote stamps the run and the item it graduated, and the stamp primitive refuses the kind without them
- spc-2609020626042471The knowledge record becomes a read object: A principle carries typed claims, projects its statement, and inherits only what held
- spc-2609020626045177The scribe verb: an allow-list assembler, an authoring-refusing ingest, and a per-run context stamp the transcript store can check
- spc-2609020626046252A second writer into the disposition surface: `abcd intent condition` dispositions one scope condition from a reading item or a delivered intent
- spc-2609020626048705The reframe record: `capture reframe` writes one `rfm-N` keyed on the committed fingerprints of the three frame surfaces before and after, joined to the reading item, disposition or surprise that occasioned it
- spc-2609020626048722One committed entry per position, in three parts: the object set, the kinds within it and the window it measures at, held by an eval that re-measures every entry on every committed change
- spc-2609021004075744The invocation is a position and a target state: the scope operand and the override stamp leave, and the committed preset for the position is applied by the assembler