Settle the four picks 3a, 3c and 3k were holding #28

Merged
lilleman merged 1 commits from settle-3 into main 2026-08-27 20:20:06 +02:00
Showing only changes of commit 5138154f66 - Show all commits
+28 -24
View File
@@ -185,13 +185,16 @@ detail is settled at its own milestone.
too — CommonMark destination spelling `emitLink` and `tryImageLine` share, and the six too — CommonMark destination spelling `emitLink` and `tryImageLine` share, and the six
concerns that file carries are one fewer for it. `AttributeKind` and `AttributeVocabulary` concerns that file carries are one fewer for it. `AttributeKind` and `AttributeVocabulary`
follow the walk into `adf/`, the vocabulary a string-typed attribute grammar needs and follow the walk into `adf/`, the vocabulary a string-typed attribute grammar needs and
HTML will want too, not a markdown spelling. Two questions land here. The node tables are HTML will want too, not a markdown spelling.
a second copy of `spec/flavour.md`'s prose with no drift guard, and a mistyped attribute **Settled** (the maintainer, 2026-08-27): `markdown/` parts here as well, into `emit/` and
name degrades into a false refusal no test catches — 3g builds the guard where a wrong `parse/` with the shared set at the root — the grammar module, emphasis matching,
entry starts refusing documents, if it is worth building. And whether `markdown/` parts destination spelling, the tables' markdown halves — and `parse/` arriving with 3b's first
again into its emit and parse halves now, while the move is still mechanical and the file, the rule `html/` already follows. And the node tables, a second copy of
shared set — the grammar module, emphasis matching, destination spelling, the tables' `spec/flavour.md`'s prose whose mistyped attribute name degrades into a false refusal no
markdown halves — is already known. test catches, get their guard: a test reads the spec's node sections, takes each
`name (type)` list and asserts it equals the table, leaving the spec the source a human
writes with no build step and no generated file. It is built at 3g, where a wrong entry
starts refusing documents.
- [ ] **3b — The leaf blocks.** The line walk that opens and closes a block, ahead of any inline - [ ] **3b — The leaf blocks.** The line walk that opens and closes a block, ahead of any inline
parsing: paragraph, ATX and setext heading, thematic break, fenced and indented code parsing: paragraph, ATX and setext heading, thematic break, fenced and indented code
block, the HTML block whose lines it swallows whether or not the construct then errors, block, the HTML block whose lines it swallows whether or not the construct then errors,
@@ -206,14 +209,15 @@ detail is settled at its own milestone.
rather than editing them. rather than editing them.
- [ ] **3c — The container blocks.** Blockquote, bullet and ordered list: the continuation a - [ ] **3c — The container blocks.** Blockquote, bullet and ordered list: the continuation a
marker's width sets, lazy continuation, and the tightness ADF does not record — `> ` marker's width sets, lazy continuation, and the tightness ADF does not record — `> `
repeated being two bytes a level, so this is the cheapest way to reach §11's 500. Two repeated being two bytes a level, so this is the cheapest way to reach §11's 500.
decisions land here, each holding a `corpus/unspellable/` document. Whether a claimed **Settled** (the maintainer, 2026-08-27): a claimed line ends lazy continuation, so a
line interrupts a paragraph is pinned for the plain case and unstated for the lazy one — a closing fence on the line after a blockquote's open paragraph closes its container instead
closing fence on the line after a blockquote's open paragraph is lazy continuation in of continuing the paragraph CommonMark would fold it into. Claiming at block level is
CommonMark, which would swallow the fence and leave the container unclosed, and 2e1's already absolute, and this binds input alone — 2e1's `closing-fence-line` orders the
`closing-fence-line` orders its blockquote away from that edge meanwhile. And 2b's emitter's blockquote away from the edge either way — so `spec/flavour.md`'s claiming
tight-versus-blank separation, which `nested-list-tight` waits on: how the parser reads a paragraph gains the case here. 2b's tight-versus-blank separation lands here too, the one
nested list after a block is the spelling the emitter owes, one answer for both. `nested-list-tight` waits on: how the parser reads a nested list after a block is the
spelling the emitter owes, one answer for both.
- [ ] **3d — Inline text.** The inline scanner over a block's content: backslash escapes, - [ ] **3d — Inline text.** The inline scanner over a block's content: backslash escapes,
entity references decoding to their characters, code spans and the literal they hold — entity references decoding to their characters, code spans and the literal they hold —
directive syntax and `~~` included — CommonMark's own hard breaks, a trailing backslash directive syntax and `~~` included — CommonMark's own hard breaks, a trailing backslash
@@ -260,15 +264,15 @@ detail is settled at its own milestone.
named error, a carry inside a mark spelling another, and the three carve-outs' escapes named error, a carry inside a mark spelling another, and the three carve-outs' escapes
reading as the literal text they hold. reading as the literal text they hold.
- [ ] **3k — The CommonMark spec suite.** Checked in at `corpus/commonmark-spec/`, pinned to - [ ] **3k — The CommonMark spec suite.** Checked in at `corpus/commonmark-spec/`, pinned to
the version it ships, `corpus/README.md` gaining the kind. What it asserts is the the version it ships, `corpus/README.md` gaining the kind.
question, and there are three answers. §2's canonical fixpoint alone — every example **Settled** (the maintainer, 2026-08-27): three checks an example must pass, the reference
either a named error, or emitting markdown that parses and emits to itself byte for byte — HTML each ships read as corpus data — which adds no format and no direction (§1). §2's
is self-consistency, which a parser returning the empty document and one dropping every canonical fixpoint: a named error, or markdown that parses and emits to itself byte for
emphasis both pass. Each example ships its own reference HTML, and reading that as corpus byte. That HTML's text, tags stripped and entities decoded, against the parsed document's
data adds no format and no direction (§1): the fixpoint plus that HTML's text with tags concatenated `text`. And a count of the dozen elements the CommonMark subset covers
stripped, against the parsed document's concatenated `text`, catches the first, and the against the marks and nodes they map to. The fixpoint alone is self-consistency a parser
fixpoint plus a count of the dozen elements the CommonMark subset covers catches both. The returning the empty document passes, and the text alone one dropping every emphasis; the
pick, and the exception list whichever it is, are the maintainer's. One outcome is no counts close both. The exception list stays the maintainer's. One outcome is no
exception and must not be filed as one: valid CommonMark parsing to a document exception and must not be filed as one: valid CommonMark parsing to a document
`adfToMarkdown` refuses is a §2 hole, which is what three of `corpus/unspellable/`'s four `adfToMarkdown` refuses is a §2 hole, which is what three of `corpus/unspellable/`'s four
hold until 3c, 3e and 3h land their answers. The parser's `ConvertErrorCode` additions hold until 3c, 3e and 3h land their answers. The parser's `ConvertErrorCode` additions