# Todo ## 0.2.0 - **36 — Move every decision into `docs/decisions.md`, indexed from `AGENTS.md`.** Each entry states the decision, its date, who made it, the README goal it serves and the premise it is valid while; one no goal serves is proposed as a goal and asked. Sources: `AGENTS.md`'s body, the settled text in this file's items, and `todo-history.md`, deleted with the bare `(28)` citations into it once nothing cites it. Split by `AGENTS.md` section where one chunk is too big. - **36d — Move the settled text in `todo.md`'s items and §15's dated rules, and point §15's "the rule that closes it, landing here" at `docs/decisions.md`.** `AGENTS.md`'s sections are renumbered once only working rules remain, their citations with them. - **36e — Move `todo-history.md`'s decisions, re-point its citations and delete it.** - **35 — Read and write plain markdown as a flavour of the markdown grammar.** Per Goal 2 and `docs/decisions.md` §Plain markdown is a flavour of the grammar, `plainMarkdownToAdf` is `markdownToAdf`'s parser and `adfToPlainMarkdown` `adfToMarkdown`'s writer, each with the plain flavour set; 10's rows are read and written there, and the lift goes (the maintainer, 2026-09-27). The exports, their refusals and 10's rows stay as they are. - **35a — Read the plain flavour in the parser and delete the lift.** 10's rows are read while parsing, and `plain-lift.ts` is deleted, its tests reading through `plainMarkdownToAdf`. `> [!faq]- Why?` with the body on the next `>` line reads to an expand titled `Why?` whose body keeps the next lines' link targets and marks, and `> [!tip] Title` then `> body` to a panel whose paragraphs are `Title` and `body`: the rest of the marker's line is the title (an expand) or the first body paragraph (a panel). A CommonMark backslash keeps a marker literal — `\==x==`, `> \[!NOTE]`, `- \[x]`. - **35b — Spell the plain flavour in the writer.** Panels, expands, task lists and highlights are written by the writer, which escapes text that would read back as one, so `plainMarkdownToAdf(adfToPlainMarkdown(doc))` keeps a literal `==x==`, a quote opening `[!NOTE]` and a list whose items all open `[x] ` as text. A highlighted `=` (today `=====`) and `a==b` (today `==a==b==`, highlighting `a` alone) come back highlighted whole, or lose the highlight where no spelling holds them; 10c's byte-for-byte property misses both, since the wrong document re-spells to the same bytes. The reduction keeps only degrading what the flavour cannot spell. - **10f — Give task nodes read from plain markdown position ids.** `plainMarkdownToAdf` gives each `taskList`, `taskItem` and `blockTaskItem` a deterministic `localId` from its position in document order, so a site that rejects a missing `localId` takes the document and the same markdown reads to the same ids every run; README §Plain markdown's `localId` bullet says so (the maintainer, 2026-09-26). The id spelling — unique within the document, no host API — is part of the chunk. - **6 — Specify the HTML dialect.** Element-by-element mapping, the `data-*` fidelity scheme, the opaque-carry form, and the documented foreign-element set `htmlToAdf` accepts — the set `markdownToAdf` shares (`spec/flavour.md` §Raw HTML in input; 29). **Settled** (the maintainer, 2026-09-20), the four answers that shape the set: - A container ADF has no node for unwraps to its children, its own attributes dropped, so `