diff --git a/todo.md b/todo.md
index ef3633e..2c7e9d4 100644
--- a/todo.md
+++ b/todo.md
@@ -24,6 +24,7 @@
| 133 | 0.3.0 | 131 | decision | **Write mentions, emoji, dates, statuses and inline cards as semantic HTML in `adfToHtml` and read them back in `htmlToAdf`, in place of the carry element.** | 2 | 2 | 2 | 4 | 4 | 6 by 3 | 3.0 |
| 132 | 0.3.0 | 131 | | **Write tables as `
` in `adfToHtml` and read them back in `htmlToAdf`, in place of the carry element.** | 2 | 2 | 2 | 4 | 5 | 6 by 4 | 2.4 |
| 73 | 0.3.0 | 33, 91, 95, 109, 115, 131, 132, 133, 140, 145, 146 | | **Announce the package where someone needing an ADF converter already reads: JRACLOUD-77436, the Atlassian developer community and Stack Overflow's ADF-to-markdown questions.** | 1 | 2 | 2 | 3 | 2 | 3 by 8 | 16.9 |
+| 72 | 0.3.0 | 33, 91, 95, 109, 115, 131, 132, 133, 140, 145, 146 | decision | **Re-create `gitea.larvit.se/larvit/adf-codec` as a read-only pull mirror of GitHub, its issues and Actions off and its description pointing at GitHub.** | 1 | 2 | 1 | 2 | 1 | 3 by 1 | 2.5 |
| 128 | 0.4.0 | | | **Pin the portable flavour's block reading and writing with tests: callout titles past one line, a link beside other marks in a title, the nesting limit of callouts and task lists, refusals inside tasks and their paths, and empty or non-paragraph tasks.** | 2 | 1 | 1 | 2 | 3 | code health by 3 | 19.6 |
| 75 | 0.4.0 | | | **Make the generated-markdown property write block carries as `adf:` fences, canonical and hostile.** | 1 | 1 | 1 | 1 | 2 | code health by 2 | 17.4 |
| 45 | 0.4.0 | | defect | **Replace `isAdfDocument` with a reader returning `Result`.** | 2 | 1 | 3 | 4 | 3 | 1 by 2 | 13.1 |
@@ -41,11 +42,10 @@
| 134 | 0.4.0 | 131 | | **Write panels, expands, task lists and decision lists as semantic HTML in `adfToHtml` and read them back in `htmlToAdf`, in place of the carry element.** | 2 | 2 | 2 | 4 | 5 | 6 by 3 | 1.8 |
| 46 | 0.4.0 | 134, 135, 136 | | **Publish the bundle size in the README, failing the release pipeline when it drifts.** | 2 | 2 | 1 | 3 | 4 | 3 by 3 | 3.2 |
| 51 | 0.4.0 | | | **Match a reference label to its definition under Unicode case folding.** | 2 | 1 | 2 | 3 | 4 | 4 by 2 | 2.1 |
-| 77 | 0.4.0 | | decision | **Read the input once into a plain copy, so an accessor property or a throwing Proxy yields `not-an-adf-document` and every call returns a result.** | 3 | 1 | 3 | 5 | 4 | | 0.0 |
-| 107 | 0.4.0 | | decision | **Spell the block carry's JSON so its length stays linear in the node's JSON.** | 3 | 1 | 3 | 5 | 5 | | 0.0 |
-| 72 | 0.4.0 | 45, 46, 51, 68, 75, 77, 80, 81, 107, 112, 134, 135, 136 | decision | **Re-create `gitea.larvit.se/larvit/adf-codec` as a read-only pull mirror of GitHub, its issues and Actions off and its description pointing at GitHub.** | 1 | 2 | 1 | 2 | 1 | 3 by 1 | 2.5 |
| 148 | 0.4.0 | | | **Ship conversion between ADF and Jira wiki markup both ways, under a README goal for wiki markup.** | 3 | 2 | 2 | 5 | 7 | 3 by 5 | 0.9 |
| 149 | 0.4.0 | 131 | | **Read any HTML into ADF, in a call or option a developer panel picks, under a README goal for foreign HTML.** | 3 | 2 | 2 | 5 | 7 | 3 by 5 | 0.9 |
+| 77 | 0.4.0 | | decision | **Read the input once into a plain copy, so an accessor property or a throwing Proxy yields `not-an-adf-document` and every call returns a result.** | 3 | 1 | 3 | 5 | 4 | | 0.0 |
+| 107 | 0.4.0 | | decision | **Spell the block carry's JSON so its length stays linear in the node's JSON.** | 3 | 1 | 3 | 5 | 5 | | 0.0 |
| 42 | 0.5.0 | | defect | **Trim a text leaf's trailing blanks in linear time.** | 1 | 1 | 2 | 2 | 2 | 9 by 3 | 26.2 |
| 31 | 0.5.0 | | | **Make the branch-coverage figure repeat across runs of an unchanged tree.** | 2 | 1 | 1 | 2 | 3 | code health by 3 | 19.6 |
| 57 | 0.5.0 | | | **Make each `ci.sh` leg build what it reads, so one leg run alone tests the current tree.** | 2 | 1 | 1 | 2 | 3 | code health by 3 | 19.6 |
@@ -165,14 +165,29 @@ writer panel picks.
### 73. Announce the package where someone needing an ADF converter already reads: JRACLOUD-77436, the Atlassian developer community and Stack Overflow's ADF-to-markdown questions.
Blocked by every other `0.3.0` item (the maintainer, 2026-10-14): the posts announce the finished
-release. Each post links the GitHub repository, the README's comparison table and a README that opens with what the package is. Before
-posting, set `converter-comparison/run.sh`'s pins to each package's latest version,
-`@larvit/adf-codec@0.3.0` included, and `--before` to today. Run it, then bring the README table,
-its versions and its date in step with the output. Venues found 2026-10-28, each a thread a reply answers today: on the developer community, topics
-96176, 99408, 82496, 100699, 101278, 86214, 96638 and 41858; on GitHub,
-`atlassian/atlassian-mcp-server` issues 60 and 161. We draft each post for the place it goes. The
-maintainer posts them once `0.3.0` is published (`docs/decisions.md` §Posts announcing a release
-wait for its publish). Found while planning discoverability, 2026-10-04.
+release. Item 145 rebuilds the README's comparison table; before posting, set
+`converter-comparison/run.sh`'s pins to each package's latest version, `@larvit/adf-codec@0.3.0`
+included, and `--before` to today, run it, and bring the table's versions and date in step.
+
+Venues found 2026-10-28, each a thread a reply answers today: on the developer community, topics
+96176, 99408, 82496, 100699, 101278, 86214 and 96638; on GitHub, `atlassian/atlassian-mcp-server`
+issues 60 and 161. Finding Stack Overflow's ADF-to-markdown questions is part of this item.
+
+We draft each post for the place it goes. Each opens with the asker's problem and how the package
+solves it, then links the GitHub repository, the README's comparison table and the README's
+opening. The maintainer posts them once `0.3.0` is published (`docs/decisions.md` §Posts
+announcing a release wait for its publish). Found while planning discoverability, 2026-10-04.
+
+### 72. Re-create `gitea.larvit.se/larvit/adf-codec` as a read-only pull mirror of GitHub, its issues and Actions off and its description pointing at GitHub.
+
+Blocked by every other `0.3.0` item but 73 (the maintainer, 2026-10-05; moved to `0.3.0` 2026-10-28,
+since the copy, not marked a mirror, reads as the package's origin). The maintainer does this. Gitea
+cannot convert an existing repository to a mirror, so the copy is deleted and re-created. That drops
+the copy's commit hashes from before the 2026-10-04 history rewrite, and its Actions secrets. The
+Gitea copy holds no issues or releases to move. Actions stay off on the mirror: Gitea runs
+`.github/workflows/` when `.gitea/workflows/` is absent, and the mirrored `publish` job would
+otherwise run there. When this lands, the `docs/decisions.md` entry "GitHub is canonical" loses its
+interim sentence.
### 128. Pin the portable flavour's block reading and writing with tests: callout titles past one line, a link beside other marks in a title, the nesting limit of callouts and task lists, refusals inside tasks and their paths, and empty or non-paragraph tasks.
@@ -273,6 +288,9 @@ exports, where markdown's markers are noise, and with a mention as `@Display Nam
account id. Add the goal to the README's `## Goals` in the same change. Split into items before
starting. The maintainer, 2026-10-28: ship what exists first, so this waits for 0.4.0.
+Once it ships, answer developer-community topic 41858, which asks for ADF as plain text (the
+maintainer, 2026-10-28).
+
### 141. Write `strike` as HTML in `adfToHtml` and read it back in `htmlToAdf`, in place of the carry element.
GFM spells `strike`, and no other HTML item writes it: `adfToHtml` writes only the marks CommonMark
@@ -312,6 +330,23 @@ as data per §Standards ship as data: lowercasing and then uppercasing would als
gains its row. Its `pending` exceptions go, and the README's guarantees drop the case-folding
exception and count one fewer.
+### 148. Ship conversion between ADF and Jira wiki markup both ways, under a README goal for wiki markup.
+
+Jira's REST API v2 and its changelogs carry wiki markup, and Atlassian's
+`WikiMarkupTransformer` is the only converter; community threads report its round-trip losing
+expands, layouts and some marks. Add the goal to the README's `## Goals` in the same change. Split
+into items before starting. The maintainer, 2026-10-28: ship what exists first, so this waits for
+0.4.0.
+
+### 149. Read any HTML into ADF, in a call or option a developer panel picks, under a README goal for foreign HTML.
+
+`htmlToAdf` (item 131) reads only what `adfToHtml` writes. The most asked need on the Atlassian
+developer community is HTML from emails, CMSs and editors into ADF. The maintainer, 2026-10-28:
+reading foreign HTML is a separate goal, added to the README in this change. Before building, a
+panel of the developer personas picks the API among those the goals allow: a parameter on
+`htmlToAdf` or a separate call; Goal 8's "nothing to configure" and Goal 6.1's naming bear on the
+choice. Split into items once the API is picked.
+
### 77. Read the input once into a plain copy, so an accessor property or a throwing Proxy yields `not-an-adf-document` and every call returns a result.
Lands with item 45, in one chunk: item 45's reader returns the copy. The maintainer's call,
@@ -338,33 +373,6 @@ the inline carry's compact JSON would fit. docs/decisions.md §The code list cal
spelling recovers from a gap in the flavour. Respelling the carry changes the format (§The formats
are API). Found by the README-goals audit of item 83, 2026-10-11.
-### 72. Re-create `gitea.larvit.se/larvit/adf-codec` as a read-only pull mirror of GitHub, its issues and Actions off and its description pointing at GitHub.
-
-Blocked by every other `0.4.0` item (the maintainer, 2026-10-05). The maintainer does this. Gitea
-cannot convert an existing repository to a mirror, so the copy is deleted and re-created. That drops
-the copy's commit hashes from before the 2026-10-04 history rewrite, and its Actions secrets. The
-Gitea copy holds no issues or releases to move. Actions stay off on the mirror: Gitea runs
-`.github/workflows/` when `.gitea/workflows/` is absent, and the mirrored `publish` job would
-otherwise run there. When this lands, the `docs/decisions.md` entry "GitHub is canonical" loses its
-interim sentence.
-
-### 148. Ship conversion between ADF and Jira wiki markup both ways, under a README goal for wiki markup.
-
-Jira's REST API v2 and its changelogs carry wiki markup, and Atlassian's
-`WikiMarkupTransformer` is the only converter; community threads report its round-trip losing
-expands, layouts and some marks. Add the goal to the README's `## Goals` in the same change. Split
-into items before starting. The maintainer, 2026-10-28: ship what exists first, so this waits for
-0.4.0.
-
-### 149. Read any HTML into ADF, in a call or option a developer panel picks, under a README goal for foreign HTML.
-
-`htmlToAdf` (item 131) reads only what `adfToHtml` writes. The most asked need on the Atlassian
-developer community is HTML from emails, CMSs and editors into ADF. The maintainer, 2026-10-28:
-reading foreign HTML is a separate goal, added to the README in this change. Before building, a
-panel of the developer personas picks the API among those the goals allow: a parameter on
-`htmlToAdf` or a separate call; Goal 8's "nothing to configure" and Goal 6.1's naming bear on the
-choice. Split into items once the API is picked.
-
### 42. Trim a text leaf's trailing blanks in linear time.
`portable/inline-reduction.ts`'s `leafEdges` finds the trail with an unanchored `/[ \t]*$/`,