Answer the stability review: readers take an index, and the dead branch and field go
CI / gate (push) Successful in 5s

This commit is contained in:
2026-08-30 22:57:05 +02:00
parent 45beb0ea31
commit 60792bceac
10 changed files with 92 additions and 57 deletions
+5 -2
View File
@@ -138,6 +138,9 @@ live Atlassian APIs; property-generated ADF trees; the CommonMark spec suite aga
- Nothing recurses unbounded: the guards walk iteratively, and blocks, marks and JSON values — an
attribute's and a carried node's alike — are all held to 500 levels, so a deep document is a
`Result` rather than the stack overflow that waits near 2000.
- A reader takes the text and an index — a sticky regex, `indexOf` — never a fresh slice per
character, and a per-character walk hoists what does not vary with the character. The pipeline
persona feeds documents nobody typed, so an ordinary megabyte stays milliseconds.
- No casts: `as`, `as unknown as`, non-null `!`. A boundary owes a type guard validating the
fields it claims (`isAdfDocument`); past it everything is typed. Make invalid states
unrepresentable.
@@ -177,8 +180,8 @@ One-line commit messages and PR titles; short PR summaries. No AI-attribution ma
No wiki markup (§1), no network or filesystem I/O, no name→id resolution (§3), no ADF schema
validation or exported validator — a refusal that keeps the round-trip is not schema validation,
so the one a spelled node carrying the same mark type twice earns stays, no shipped CSS (§4), no
streaming APIs, no performance budget — real documents are kilobytes. A CLI is a later goal
(`todo.md`), not a non-goal.
streaming APIs, no performance budget past §11's linear scan — nothing here is tuned, and no
figure is promised. A CLI is a later goal (`todo.md`), not a non-goal.
## 15. The working loop