Development record
the 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
the 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
Found by the round-10 adversarial ruthless review of build/itd-183. NOT
introduced by this branch -- rawHeadingBoundRe carries the same blank-line
alternative on the round-9 parent and before it. Recorded rather than chased
under the ruling that round 10 closes only what the branch introduced.
The soft bound on a raw heading's text is \n[ \t]*\n, which a CRLF blank line
does not match: its bytes are \r\n\r\n, and the \r falls outside the class.
So an element that is never closed has no bound at all, its title is read over
the rest of the document, and the slug names something else:
<h2>Audit Notes<CR><LF>
<CR><LF>
<sentinel><CR><LF>
Verified admitted; the byte-identical document with LF line endings refuses.
This is the same class round 10 closed for YAML keys -- a carriage return is
whitespace to every reader of the file and is not in the scan's own class -- and
it stays open on the heading side. Remedy: \n[ \t\r]*\n, or a normalisation
of line endings before the heading scan. Seed material for the exclusion floor's
own intent.
Grounds
- pursued: we expect a carriage return in the blank-line class, and a refusal for an opener with no bound at all, to stop the title being read over the remainder in either line ending, because the soft bound is the sole bound an unclosed element has; a CRLF document whose excluded heading still travels, or an unbounded opener that still assembles, would show it wrong
Frontmatter
| id | iss-2608301421380392 |
|---|---|
| type | issue |
| lifecycle | resolved |
| severity | major |
.abcd/work/issues/resolved/iss-2608301421380392-the-raw-heading-soft-bound-does-not.md
open on GitHub ↗ · commit history ↗
mentions3
- itd-183The cold reading sees exactly what the assembler passes — positive inclusion, field projection, and a per-run manifest
- itd-194The reading include table admits only what the exclusion floor can read
- 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 examine