32 - §8's depth sentences say what the guard does, and item 32 moves to history
CI / gate (push) Successful in 37s
CI / publish (push) Successful in 5s

This commit was merged in pull request #121.
This commit is contained in:
2026-09-23 22:52:26 +02:00
parent 6715c97599
commit d3a2129967
3 changed files with 20 additions and 21 deletions
+7 -13
View File
@@ -158,20 +158,14 @@ converts no raw HTML, so at `0.2.0` the mapped elements stop erroring and the co
no ADF node carries. A refusal found before its path is known — the block walk's, a directive
reader's — is a `ConvertFault`, the code and message alone; the node walk attaches the path as it
descends, so a document reports its first error in document order. `not-an-adf-document` carries
the document's own path throughout: eight of the guard's nine branches read the document's own
shape, and threading a path to the ninth — a malformed node anywhere in the tree — wants the
the document's own path throughout: seven of the guard's eight branches read the document's own
shape, and threading a path to the eighth — a malformed node anywhere in the tree — wants the
manual stack §11's no-recursion rule forces, whose empty half no input reaches. The message names
the violation instead. Depth is not one of the nine: `adfDocumentFault` returns the code with the
message, so an attribute value past 500 levels is `unsupported-nesting-depth` from the emitter as
it already is from the parser, both directions refusing the same value. An attribute, a node's or
a mark's, is counted from the value itself, never from the `attrs` object holding it; a spelling
nesting the value deeper — the block directive's marks attribute, three levels in, or the carry —
refuses in its own format, as that format's parser does. `isAdfDocument` is true for a depth fault:
a deep document is a document, as the 2000-level blocks and the 600-deep marks the guard already
waves through are, and depth is the walks' answer rather than the shape's. A non-finite number
stays parted where depth is joined: the parse says `unsupported-node-shape` because the markdown is
at fault, the emit `not-an-adf-document` because the input is, and unlike depth nothing round-trips
inconsistently between them.
the violation instead. An attribute value past 500 levels is `unsupported-nesting-depth` in both
directions, the guard included. An attribute is counted from its value; a spelling that nests it
deeper — the block directive's `marks`, the carry — refuses in its own format, as its parser does.
A non-finite number takes two codes: `unsupported-node-shape` parsing, `not-an-adf-document`
emitting — no document holds one, so no round-trip crosses them.
`position` is the parse side's alone: an emitter reads no source, so an emit error carries `path`
and nothing more. It is `{ line, offset }` at the start of the line the block holding the refusal