diff --git a/CHANGELOG.md b/CHANGELOG.md
index a3455ff..77515e4 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -7,7 +7,8 @@
- **Breaking:** a mark spelling skips a `date`, `emoji`, `inlineCard`, `mention`, `status` or
`mediaInline` Atlassian's schema withholds the mark from, where `losslessMarkdownToAdf` gave it
the marks around it: `**!adf:mention[@A]{id=…}**` reads as a plain mention. A link around only
- such nodes, or a directive mark around nodes none of which takes it, is `unsupported-node-shape`.
+ such nodes, or a directive mark around nodes none of which takes it, is `unsupported-node-shape`,
+ markdown `adfToLosslessMarkdown` wrote before included.
`adfToLosslessMarkdown` writes a node holding such a mark as `!adf:carry{json="…"}`. See
`MIGRATION.md`.
diff --git a/MIGRATION.md b/MIGRATION.md
index ada8887..5d44d2e 100644
--- a/MIGRATION.md
+++ b/MIGRATION.md
@@ -9,9 +9,10 @@ A mark spelling skips a node Atlassian's schema withholds the mark from:
| a `date`, `emoji`, `inlineCard`, `mention`, `status` or `mediaInline` inside a mark's spelling (`**!adf:mention[@A]{id=x}**`) | the node holds the mark | the node holds only marks its type takes; text beside it keeps the mark |
| a link or directive mark around such nodes alone (`[!adf:status[Done]{color=green}](/u)`) | the nodes hold the mark | `unsupported-node-shape`; write the mark around text beside them |
-`0.2.0` wrote the first row's spelling for a node holding such a mark, which `0.3.0` writes as
-`!adf:carry{json="…"}`. Markdown stored from such a document reads back without the mark: to keep
-it, read the markdown with `0.2.0` and write it with `0.3.0`, installed side by side.
+`0.2.0` wrote these spellings for a node holding such a mark, which `0.3.0` writes as
+`!adf:carry{json="…"}`. Markdown stored from such a document reads back without the mark, or, where
+the mark wrapped such nodes alone, is refused: to keep it, read the markdown with `0.2.0` and write
+it with `0.3.0`, installed side by side.
## From `0.1.0` to `0.2.0`
diff --git a/docs/decisions.md b/docs/decisions.md
index 0d849a6..81990ad 100644
--- a/docs/decisions.md
+++ b/docs/decisions.md
@@ -178,7 +178,7 @@ silent drop of content:
`Title
… ` is an `expand` titled by its summary, a
`nestedExpand` inside another; an empty one is refused, since `expand` requires content. A `style`
-attribute is not read at `0.3.0`: the `textColor` and `backgroundColor` it could reach cost more
+attribute is not read at `0.4.0`: the `textColor` and `backgroundColor` it could reach cost more
than they buy.
The three markdown readers share one parser, so they take the same set.
diff --git a/todo.md b/todo.md
index c2505d2..db490b8 100644
--- a/todo.md
+++ b/todo.md
@@ -25,50 +25,57 @@
| ID | Release | Exempt | Item | R | S | C | A | G | Goals | Score |
|---|---|---|---|---|---|---|---|---|---|---|
-| 99 | 0.2.1 | defect | **Write a linked external image standing inline or in a table cell in the spelling a reader panel picks, in `adfToPortableMarkdown`.** | 3 | 3 | 5 | 6 | 7 | 7 | 12.9 |
-| 100 | 0.2.1 | decision | **Put the reading of an image's title as its caption back to a reader panel, now that a writer panel reads a title as hover text.** | 3 | 3 | 3 | 4 | 5 | 4, 6 | 10.9 |
-| 60 | 0.2.1 | decision | **Collect the questions `parse/` asks `emit/` into one named module.** | 3 | 4 | 4 | 2 | 6 | 2 | 10.7 |
-| 59 | 0.2.1 | decision | **Group the directive grammar into `src/markdown/directive/`, move `Read` to `result.ts`, and move `Flavour` and `flavourClaims` to `markdown/flavour.ts`.** | 3 | 5 | 3 | 2 | 6 | 2 | 10.4 |
-| 62 | 0.2.1 | decision | **Move the portable flavour's reading out of `parse/` and its writing out of `emit/` into `markdown/portable/`, so `emit/` no longer imports `portable/`.** | 4 | 5 | 5 | 2 | 6 | 2 | 9.4 |
-| 96 | 0.2.1 | defect | **Read and write a text holding many unclosed backtick runs, or many `