Development record
The include table declares what the floor parses, the floor refuses the markdown it cannot resolve, and the manifest marks every item it did not examine
Summary
spc-2609021003136831 delivers
itd-194.
The include table in internal/core/reading/include.go gains, on every row,
a declaration of whether the exclusion floor parses what the row admits, and
the rendered charter carries it as a column. The floor's key and heading scan
runs over exactly the rows declared parsed, which are the markdown rows, in
place of the extension test redactExcluded performs today, so admission and
examination are one declaration. Over a parsed document the floor refuses the
six shapes it cannot resolve, naming the document and the shape, and never
admits one unscanned. Over an unparsed row, which today is source, test
and config, an item travels whole and its manifest entry carries the mark
"scan": "unscanned"; every parsed item carries "scan": "parsed", and the
manifest's key and heading exclusions are asserted for the parsed items and
for no other. The source and test kinds stay in the table, so the object
stays as the design framework and the readings companion state it: The
committed detection and widening entries name both, on the object-set ruling
of 2026-09-02, with every such item marked unscanned, and the entailment
entry names neither. The shipped intent projection row
withdraws from the widening position and the floor asserts that exclusion
there, which resolves iss-2609012259587904 on the maintainer's ruling of
2026-09-02. The table also admits the brief's meta, product, constraints,
surfaces, internals and delivery chapters as brief sections, one row each, at
every position the brief rows admit, and keeps the evidence chapter excluded
as verdict material with that ground stated in the exclusion row, which
resolves iss-2609021153264023 on the corrections ruling of the same day.
The narrowing costs the committed entries nothing they do not disclose. Under
the object-set entries the preset-windows spec fixes, the seven delivered
paths hand each of the detection and widening positions forty-nine source and
eighty-six test items, every one marked unscanned, and hand the entailment
position nothing, so no source or test item reaches a reader unmarked.
Measured in a clean clone of the design branch's head (the presets
recalibrated in the clone as the preset-windows spec records; the clone's own
commit is not on any branch, and the figures are re-measured at landing),
every item a detection entry
that opts the lint package's tree in by path hands arrives marked (21 source,
35 test and 21 configuration items at that measurement, every one of them
marked), as do the configuration files the default kinds admit under the
object set's paths. The live 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.
Scope
In: The Scan vocabulary and the row declaration in include.go; the mark
on ManifestItem and its refusal in DecodeManifest; the row-driven scan and
the per-item mark in collect and Assemble; the six refusals in
project.go; the unscanned count on the size report and its rendering; the
shipped row's positions, the widening exclusion row and the regenerated
widening definition; the four brief-chapter rows and the reworded evidence
exclusion; the regenerated charter; the read-block eval's refusal
plants, its carrier, its oracle mark check and the pinned counts; the plugin
page and the readings charter prose.
Out: Widening the floor's parseable set; removing the test kind from the
table; recalibrating the committed presets, which the preset-windows spec
owns; the four inherited findings the intent lists; the comparative channel's
row and every later spec's move of the same constants.
Approach
The vocabulary: one word for the declaration and the mark
include.go declares type Scan string with two members, ScanParsed
("parsed") and ScanUnscanned ("unscanned"), and Scans() lists them
in that order. The same word is used in two places, so the table's promise and
the manifest's fact cannot be spelled differently: Row gains Scan Scan,
the declaration of whether the floor parses what the row admits, and
ManifestItem gains Scan Scan with the JSON key scan, the fact of whether
it did.
Every markdown row (the six brief rows, the glossary row, the disciplines,
shipped, drafts, planned and specs rows, and the root .md row) declares
ScanParsed. The _test.go, .go and config rows declare ScanUnscanned.
TestEveryRowNamesAKnownKindAndPosition in include_test.go extends to
refuse a row whose Scan is neither member, and a new
TestParsedRowsAdmitOnlyMarkdown holds the declaration to the parser: a row
declared parsed matches .md and nothing else, and a row declared unscanned
matches no .md. That test is the point at which the include table's
admission and the floor's examination are proven to describe one set,
whichever of them moves later, which is the third clause of brief invariant
16.
The floor runs over the declaration, not over the extension
redactExcluded in project.go loses its first statement, the
path.Ext(rel) test that scoped the scan to markdown. collect in
assemble.go decides instead: for a row declared ScanParsed it calls
redactExcluded as today; for a row declared ScanUnscanned it passes the
document through untouched. candidate gains scan Scan, set from the row,
and Assemble copies it onto each ManifestItem. refuseOwnArtefact still
runs over every admitted file whatever its row, because the artefact tag is a
byte signature and needs no parse.
The rule text of the three unscanned rows is rewritten to state the
narrowing: "admitted where a committed preset entry names this kind, and
never examined: an item admitted here travels whole and marked unscanned in
the manifest, because the exclusion floor's key and heading signals are
record shapes only a markdown file carries". Render() gains a Floor
column between Kind and Admitting rule, rendering the row's Scan, so the
charter states the narrowing per row and AssemblerVersion() digests it.
TestRenderCoversKindAndSuffix in size_test.go extends to the new column,
and the charter between the markers in .abcd/development/readings/README.md
is regenerated in the same change, which
TestReadingsCharterCarriesTheRenderedIncludeTable requires. The charter's
prose paragraph that says a source or configuration file "travels whole with
no section scan run over them" is rewritten to say it travels whole and
marked, and to name the mark.
The manifest marks each item, and asserts per item
ManifestItem in manifest.go gains Scan Scan with the tag json:"scan",
deliberately not omitempty, on the same argument Kind carries: an item
without a mark is a defect, and a shape that can omit the field cannot tell
that defect from a well-formed item. DecodeManifest refuses an item whose
scan is absent or outside Scans(), naming the ordinal and the key, beside
the kind check it already makes. SchemaVersion moves by one, because the
manifest item's field set changes; the bundle is restamped with it under the
shared constant, and the constant's comment gains one sentence saying so.
This spec names the class of bump and no number: The merging change sets it
from the merged base, and the comparative channel moves it again when it
lands.
The exclusion assertion becomes per item by construction. Manifest.Exclusions
stays the floor's declaration, unchanged in shape, and its doc comment gains
the sentence that fixes its meaning: a row with a frontmatter key or
heading signal is asserted for the items marked parsed and for no other;
a row with a directory, file or unreachable path signal is asserted for
every item, because assertExclusions enforces those by path and a path
needs no parse. The read-block oracle reads the mark the same way, below.
The size report counts what was not examined
SizeReport in assemble.go gains Unscanned int with the JSON key
unscanned, the count of items marked unscanned, filled by sizeReport
from the candidates. renderSizeReport in internal/surface/cli/reading.go
prints one line after the per-kind rows when the count is non-zero:
unscanned: N item(s) travel whole, not examined by the exclusion floor; under
a zero count the line is absent, so a cold run says nothing it does not need
to. commands/reading.md adds size.unscanned to the fields the host reports
and says what the mark means, and its assembled-input section states that a
manifest item carries scan. The report rides on the result and not on either
artefact, so this field moves neither version.
The six refusals
Each shape below is a markdown document the floor cannot resolve, and each is
answered the way unresolvableFrontmatterShape already answers a YAML tag or
an anchor: a refusal naming the document, the line and the shape, raised from
verifyRedaction so the whole assembly stops and the operator is told which
document stopped it. No shape is redacted by guess, and none is admitted.
- A fence delimiter inside the frontmatter block
(iss-2608301350533102).
verifyRedactionlocates the block withfirstBlockRangebefore any mask is computed, andfenceMaskis computed over the body from the line after the block's close. A fence delimiter on any line inside the block is reported byunresolvableFrontmatterShapeas "a fence delimiter inside the frontmatter block". The mask can no longer be toggled from inside the block, and the key scan is never switched off by it. - A delimited block displaced from line 0 (iss-2608301237456350). A new
displacedFrontmatter(lines)reports a line opening with three dashes that is preceded only by blank or whitespace-only lines, a byte-order mark or an HTML comment, as "a frontmatter block displaced from line 0 by N line(s)". A delimiter after real prose is a thematic break to every reader and opens nothing, so the false-refusal class the line-0 rule closed stays closed; what is refused is exactly the document this binary reads as prose and the reader of the bundle reads as frontmatter. - A compact mapping nested in a block sequence
(iss-2608301237450573, first half).
unresolvableFrontmatterShapegainsnestedMappingRe, a block-sequence entry whose item opens a mapping (- key:at any indent, bare or quoted), reported as "a mapping nested in a block sequence". A sequence of scalars, which committed records carry, is not that shape and is untouched. - An explicit key in a flow mapping (iss-2608301251398360).
unresolvableFrontmatterShapegainsflowExplicitKeyRe, a?following{or,in a flow context, reported as "an explicit key in a flow mapping". Shapes 3 and 4 are refused whatever the key is named, which is the one fix the two records ask for: The floor stops recognising a nested key by its spelling and refuses the nesting. - An attribute value opening on the line after its equals sign
(iss-2608301350534164).
maskMarkupDatagains a second return naming the shape when the blank skip after=reaches a newline before the opening quote, andverifyRedactionrefuses it as "an attribute value that opens on the line after its equals sign". The markup mask never declines silently again on that shape; the HTML-whitespace skip the record proposes is not taken, because a resolved mask on that shape is comprehension the ruling declined. - A raw heading opener with no bound (iss-2608301421380392). The
blank-line alternative of
rawHeadingBoundRebecomes\n[ \t\r]*\n, so a CRLF blank line bounds an element as an LF one does; andrawHeadingTitleEndsreports an opener that reaches the end of the document with no hard or soft bound, whichverifyRedactionrefuses as "a raw heading element that is never closed". The title is never read over the remainder, which is the shape that admitted the heading. The quadratic cost of that read and the linearity test's name stay with iss-2608301421382564, as the intent's out-of-scope list says; the refusal removes the shape's admission and claims nothing about the scan's cost.
None of the six shapes appears in a committed record the include table
admits, checked over the record at the tree named above, so the refusals
refuse nothing on this corpus today. The escaped-key refusal's message,
opensTag's second definition and rawHTMLHeading's doc comment are
untouched, as the intent inherits them.
The widening row
The shipped intents row's Positions becomes
[]Position{PositionEntailment, PositionComparative, PositionDetection},
and Exclusions gains
{Rule: "the widening object as the design documents state it", Signal: "directory", Detail: ".abcd/development/intents/shipped", Positions: []Position{PositionWidening}}
beside the drafts and planned rows, so the manifest asserts the exclusion at
that position and assertExclusions enforces it. The row's rule text cites
the 2026-09-02 ruling and iss-2609012259587904. The comparative position stays
on the row here because the comparative channel withdraws every other row from
that position when it lands, and this spec does not pre-empt it.
agents/cold-reading-widening.md loses the shipped line from its "Repository
sources the assembler admits at this position" list, which
TestDefinitionHoldsItsFiveParts in definitions_test.go holds against
admittedSources; its prompt_version moves PATCH and agents/CHANGELOG.md
gains the line. TestWideningExcludesDraftsAndPlannedEntailmentIncludesThem
in include_test.go gains a shipped path, refused at widening and admitted at
entailment and detection, and TestExclusionFloorNamesEveryRecordedExclusion
gains the row. AssemblerVersionCore moves MINOR: Table, Exclusions, the
rendering and the manifest shape all move, and the digest moves with the
rendering by construction.
The brief rows
The design documents name "brief current text" as a reading's object, and
the table admits two chapters of it today. On the corrections ruling of
2026-09-02, brief current text is the whole brief bar the evidence chapter
and bar the glossary, which is its own row. Table therefore gains four rows
of kind KindBriefSection, at the positions the product and constraints rows
carry, one per chapter: .abcd/development/brief/04-surfaces,
.abcd/development/brief/05-internals and
.abcd/development/brief/06-delivery with the .md match, and the meta
chapter, which is the one file 00-meta.md at the brief's root, by a row
whose source is the brief directory and whose Match is that exact basename,
so the row reaches that file and nothing beside it. The six chapters are
named individually because assembler rule 1 forbids naming brief/ whole:
The directory contains the glossary, which is a record family with its own
row. Each row declares ScanParsed, and each rule text says which chapter it
admits and that the chapter is brief current text.
The evidence chapter stays excluded, and the ground moves into the table.
The Exclusions row for .abcd/development/brief/03-evidence keeps its
directory signal and its every-position scope, and its rule text becomes
"verdict material: A prior verdict is revision history, the ground the Audit
Notes exclusion rests on", so the charter states why the one chapter the
brief rows do not reach is left out. The manifest asserts the exclusion as it
asserts every directory row, and assertExclusions enforces it by path. The
oracle's admittedRecordPaths gains the four chapter paths, and its
evidence-chapter entry keeps its place with the ground reworded. This
resolves
iss-2609021153264023;
the preset-windows spec re-measures every entry the rows enlarge at landing.
The read-block eval and the oracle
The oracle stays transcribed and imports nothing from the assembler; every
edit below is by hand, and the pinned counts in requireOracleTables in
evals/coldreading_oracle_test.go move deliberately, each stated as the delta
this spec makes, since the merging change sets each literal from the merged
base.
refusalsinevals/coldreading_fixture_test.go+6. Six plants are added, one per shape, each a markdown file under an admitted row of the baseline fixture carrying arefusedPrefixtoken, itsNamesnaming the path, the shape's wording and the excluded thing it hides, and itsFalsifiernaming the check that refuses it.TestTheAssemblerRefusesAnUnredactableShapeinevals/coldreading_test.goruns them as it runs the two today, at every assembling position, and reads back what escaped when one does not refuse.carriers+2:UNSCANNED, a_test.gofixture under the baseline root carrying record-shaped text with a literal## Audit Notessection, in the shape ofinternal/core/site/fixture_test.go. It is assembled under a fixture preset whose detection entry optstestin, committed in the fixture so the dirty gate admits it, and is required to arrive whole and to carry"scan": "unscanned"in the manifest. AndCHAPTER, the carrier token planted in a markdown file under each of the fixture's04-surfaces,05-internalsand06-deliverychapters and in the fixture's00-meta.md, each required to arrive asbrief-sectionat every position the brief rows admit.checkScanMarksis a new oracle assertion: every manifest item carries ascan; an item whose path ends in.mdisparsedand any other isunscanned, transcribed from the table's declaration rather than read from it.checkFieldAbsencereads the manifest's marks and holds the excluded key and heading rows against the items markedparsedalone, so the carrier above does not report as a leak and an unparsed item that lost its mark does. That is the oracle making the assertion per item, as the manifest does.excludedFamilies+1:.abcd/development/intents/shippedat the widening position; the evidence-chapter entry keeps its place with its source reworded to the verdict-material ground.admittedRecordPaths+4, gaining the four chapter paths, its shipped row gainingPositionsentailment, comparative and detection.TestPriorRunExhaustNeverReachesis untouched. A newTestWideningNeverSeesTheShippedIntentsasserts family absence at widening over the fixture's shipped intent and its presence at the other two.coverageinevals/coldreading_coverage_test.go+12. The row "intents/shipped is admitted at every position" is reworded to entailment and detection, and the row "the brief's evidence chapter is deliberation and never travels" is reworded to "the brief's evidence chapter is verdict material and never travels", its falsifier unchanged. Twelve rows are added: one per refusal plant, caught by refusal; "the widening reading does not see the shipped intents", falsifier "widen the shipped row's Positions to allPositions and delete the widening-scoped shipped row from Exclusions", caught by family absence; "an item from an unscanned row carries the mark and a parsed item does not", falsifier "stampScanParsedon every candidate", caught by the scan-mark check; and one row per brief chapter admitted here, "brief/00-meta.md is admitted as a brief section at every position the brief rows admit" and its three siblings, falsifier "delete the row", caught by the carrier floor, classCHAPTER.declaredGapsandsentinelClassesare unchanged: No sentinel class is added, because a refusal plant and a carrier are not sentinels.TestEverySentinelIsPlantedandTestEveryAssemblerRuleHasAFalsifiercarry the counts above.
Landing order
The Iteration 2 set lands in two phases around the maintainer's readings, on the corrections ruling of 2026-09-02. Phase A, before any reading runs: The two-operand invocation (spc-2609021004075744), itd-194 (spc-2609021003136831), the preset windows (spc-2609020626048722), the comparative channel (spc-2609020626039834) and the reading-occasioned origin (spc-2609020626042168), in that order. The maintainer then runs the four readings in the cycle's order, widening, entailment, comparative and detection, and dispositions their outputs. Phase B, built at Step 5 after those dispositions: The condition disposition (spc-2609020626046252), the admission and surprise verbs (spc-2609020626040342), the reframe record (spc-2609020626048705), the scribe verbs (spc-2609020626045177) and the principles read object (spc-2609020626042471), in that order. No spec names a target version number: Each names the class of bump it makes, and the merging change sets each constant from the merged base and updates every pinned count in the same diff.
This spec lands second in Phase A, after the two-operand invocation and
before the preset windows, because the preset-windows eval measures every
committed entry against a table whose widening row set, whose brief rows and
whose manifest shape this spec fixes, and because the comparative channel
moves SchemaVersion and AssemblerVersionCore again and withdraws the
shipped row and the brief rows from the comparative position; both are
cleaner as a later move over this one than as a merge against it. This spec
names the class of each bump and no number: SchemaVersion by one,
AssemblerVersionCore MINOR, the widening agent's prompt_version PATCH.
How the Acceptance Criteria are satisfied
- ac-1 (an unresolvable markdown document is refused, naming document and
shape).
verifyRedactionraises each refusal fromunresolvableFrontmatterShape,displacedFrontmatter,maskMarkupData's shape return andrawHeadingTitleEnds, andcollectstops the assembly on the error, so no item of the document reaches the bundle.TestAnUnresolvableDocumentIsRefusedByNameinproject_test.goasserts the message names the path and the shape and thatAssemblereturns no result. - ac-2 (the six shapes). One unit test per shape in
project_test.go:TestAFenceInsideTheFrontmatterRefuses,TestADisplacedFrontmatterBlockRefuses(blank line, whitespace, HTML comment; a delimiter after prose does not),TestANestedMappingInASequenceRefuses(a sequence of scalars does not),TestAFlowExplicitKeyRefuses,TestAnAttributeValueOnTheNextLineRefuses,TestAnUnboundedRawHeadingRefusesAndACRLFBlankLineBounds; and the six refusal plants in the eval, run at every assembling position. - ac-3 (opted-in items travel whole and marked; no parsed item marked).
collectpasses an unscanned row's document through and stamps the candidate;Assemblecopies the mark.TestOptedInSourceAndTestsTravelWholeMarkedUnscannedinsize_test.goassembles a fixture under an entry that optstestin and one that optssourcein and compares each item's text to the file's bytes and its mark tounscanned;TestNoParsedItemCarriesTheUnscannedMarkasserts every.mditem isparsed.TestKindSplitDoesNotMoveAdmissionandTestTestKindIsReachableAtEveryPositionstay green, because the rows still admit. - ac-4 (the assertion is per item; a markless item is refused). The
Exclusionsdoc comment fixes the meaning;DecodeManifestrefuses.TestDecodeManifestRefusesAnItemWithoutAScanMarkandTestDecodeManifestRefusesAnUnknownScanMarkinsize_test.go, beside the kind refusal; the oracle'scheckScanMarksand the per-itemcheckFieldAbsencein the eval. - ac-5 (the fixture leak is absent under every committed entry and marked
when tests are opted in).
TestOnlyTheTreePositionsNameSourceOrTestinscope_test.goloads the committed file, asserts the detection and widening entries namesourceandtest, the entailment entry names neither, and no entry's path reachesinternal/core/site, then assembles the detection and widening entries by dry run and asserts everysourceandtestitem in each manifest carries theunscannedmark;TestTheFixtureLeakIsAbsentUnderEveryCommittedPresetinevals/coldreading_test.goclonesHEADdetached, assembles the committed entry at each of the three assembling positions, asserts no manifest item namesinternal/core/site/fixture_test.go, then commits in the clone a detection entry that optstestin underinternal/core/site, assembles at detection, and asserts the item is present and markedunscanned. - ac-6 (the table states the narrowing).
Row.Scan, theFloorcolumn inRender(), the rewritten rule text and the regenerated charter.TestParsedRowsAdmitOnlyMarkdown,TestRenderCoversKindAndSuffixextended,TestReadingsCharterCarriesTheRenderedIncludeTable. - ac-7 (widening receives no shipped intent; the manifest asserts it;
entailment and detection still do). The row's positions, the exclusion
row and the regenerated definition.
TestWideningExcludesDraftsAndPlannedEntailmentIncludesThemextended,TestExclusionFloorNamesEveryRecordedExclusion,TestDefinitionHoldsItsFiveParts, andTestWideningNeverSeesTheShippedIntentsin the eval. - ac-8 (the six brief chapters are admitted as brief sections; the
evidence chapter is excluded as verdict material). The four new rows and
the reworded exclusion row.
TestBriefChaptersAreAdmittedAsBriefSectionsininclude_test.goasserts a file under each of the six chapters is admitted asbrief-sectionat every position the product row admits, and that the meta row reaches00-meta.mdand no other file;TestTheEvidenceChapterIsExcludedAsVerdictMaterialasserts a file under03-evidenceis refused at every position and that the exclusion row's rule names verdict material; theCHAPTERcarrier and the four coverage rows in the eval;TestReadingsCharterCarriesTheRenderedIncludeTableover the regenerated charter.
Tests
Watched fail before, pass after; each refusal proved by a mutation that
removes it. internal/core/reading: the six shape tests and
TestAnUnresolvableDocumentIsRefusedByName in project_test.go;
TestParsedRowsAdmitOnlyMarkdown, TestEveryRowNamesAKnownKindAndPosition
(extended), TestWideningExcludesDraftsAndPlannedEntailmentIncludesThem
(extended), TestExclusionFloorNamesEveryRecordedExclusion (extended),
TestBriefChaptersAreAdmittedAsBriefSections,
TestTheEvidenceChapterIsExcludedAsVerdictMaterial and
TestATableChangeMovesTheStampedVersion (existing) in include_test.go;
TestOptedInSourceAndTestsTravelWholeMarkedUnscanned,
TestNoParsedItemCarriesTheUnscannedMark,
TestDecodeManifestRefusesAnItemWithoutAScanMark,
TestDecodeManifestRefusesAnUnknownScanMark,
TestSizeReportCountsUnscannedItems, TestRenderCoversKindAndSuffix
(extended) and TestBundleGainsNoFieldFromTheReport (the manifest item
allow-set gains scan; the bundle's does not move) in size_test.go;
TestOnlyTheTreePositionsNameSourceOrTest in scope_test.go;
TestDefinitionHoldsItsFiveParts in definitions_test.go.
internal/surface/cli: TestRenderSizeReportNamesUnscannedItems (present
above zero, absent at zero). evals: the eight refusal plants under
TestTheAssemblerRefusesAnUnredactableShape, the UNSCANNED and CHAPTER
carriers,
checkScanMarks, TestWideningNeverSeesTheShippedIntents,
TestTheFixtureLeakIsAbsentUnderEveryCommittedPreset, and the pinned counts
under requireOracleTables and TestEveryAssemblerRuleHasAFalsifier. Both
eval lanes are run explicitly and once under TMPDIR=/tmp.
Out of scope
- Widening the floor's parseable set, declined 2026-08-30 and confirmed
2026-09-02; and removing the
testkind from the table, declined because it contradicts both design documents. - Recalibrating the committed presets; the preset-windows spec owns the file and records which entries name the two tree kinds.
- The four inherited findings: the unbounded opener's cost and the linearity
test's name (iss-2608301421382564),
opensTag's second definition (iss-2608301251394412),rawHTMLHeading's doc comment (iss-2608301237450573, second half) and the escaped-key refusal's message (iss-2608301421381157). - Withdrawing the shipped row from the comparative position, and the
comparative channel's own rows, plants and moves of
SchemaVersionandAssemblerVersionCore. - A reading over the assembled output. No reading runs before this intent ships, per the intent's last scope condition, and every criterion is judged against the assembler's output and its manifest.
Frontmatter
| id | spc-2609021003136831 |
|---|---|
| type | spec |
| lifecycle | closed |
.abcd/development/specs/closed/spc-2609021003136831-the-reading-include-table-admits-only.md
open on GitHub ↗ · commit history ↗
References1
- itd-194The reading include table admits only what the exclusion floor can readimplements
mentions22
- 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-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-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