Tick 18, moving its text to todo-history.md
CI / gate (push) Successful in 1m26s
CI / publish (push) Has been skipped

This commit is contained in:
2026-09-19 13:18:33 +02:00
parent 4ab1ed5132
commit 3f8afcb9d7
2 changed files with 24 additions and 16 deletions
+23
View File
@@ -820,6 +820,29 @@ The done `todo.md` items in full, as they were written. `todo.md` keeps a one-li
dropping the outer link silently as `closeLink`'s `applyMark` does today, with a
normalization fixture per shape (the stability-reviewer, 2026-09-16; the maintainer,
2026-09-17).
- [x] **18 — The subtree the directive spelling asks about (`0.2.0`).** The parser asks
`commonMarkSpelling` at every directive-spelled block and the answer emits the whole subtree
below, so a node at depth d is spelled d times: three nested rule-first directive lists cost
18 asks over 10 nodes, and 250 levels parse in 1.2 s at 16.4 kB, 4.9 s at 261 kB with a
kilobyte of content per level. The depth guard bounds the levels at about 250, never the
content, so this is the pipeline persona's hang on an input nobody typed (§11). Keeping each
child's emitted result for its parent's ask is not a straight handover: the same node object
is asked at different depths — 4, 3 and 2 for the innermost list of three — because the
parser counts a list and its item as two levels where the emitter's readable list counts one
(4b), and `headroom` is that guard's slack. The parts that survive the measurement: the paths
agree, `text` and `spelling` carry no depth, `headroom` is affine in it, and the parser asks
first at the deepest of them, so a kept result rebases by the difference. Either rebase and
record that argument in `AGENTS.md`, or give both directions one list accounting so a node
has one depth and nothing needs rebasing — which reopens 4b. A single post-build walk was
rejected: it reports the outer offender where the build reports the inner one (the
maintainer, 2026-09-18).
**Measured** (2026-09-19): the parse keeps each node's readable spelling (AGENTS.md §11), and
250 nested directive lists fall from 1.22 s to 0.07 s at 16.1 kB and from 5.20 s to 0.19 s at
261 kB; a panel between every pair of lists 1.00 s to 0.07 s, an opaque carry in every item
1.08 s to 0.04 s. The two depth-boundary tests are what pin the rebase — dropping it reddens
both — so no figure enters the gate (§14), as 4c settled for a behaviour-preserving cost fix.
The one list accounting was not taken: 4b settled that accounting the day this was filed, and
reopening it is an ask rather than a chunk.
## 5 — Ship `0.1.0`