From 3f8afcb9d74c67e90b171231b5f5a8a6d74ffc69 Mon Sep 17 00:00:00 2001 From: Lilleman auf Larv Date: Sat, 19 Sep 2026 13:18:33 +0200 Subject: [PATCH] Tick 18, moving its text to todo-history.md --- todo-history.md | 23 +++++++++++++++++++++++ todo.md | 17 +---------------- 2 files changed, 24 insertions(+), 16 deletions(-) diff --git a/todo-history.md b/todo-history.md index bc45a24..e8ea4a9 100644 --- a/todo-history.md +++ b/todo-history.md @@ -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` diff --git a/todo.md b/todo.md index 93188bb..98361fb 100644 --- a/todo.md +++ b/todo.md @@ -219,22 +219,7 @@ bundle size and the tagline. over four concerns in one loop — escape, code span, nested directive, bracket balance — which 4c left half-split and this item either passes or forces apart (the systems-architect and the maintainer, 2026-09-18). -- [ ] **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). +- [x] **18 — The subtree the directive spelling asks about (`0.2.0`).** ## The ADF inventory to cover