36d - todo.md's settled text and §11 and §15's dated rules move to docs/decisions.md
CI / gate (push) Successful in 42s
CI / publish (push) Has been cancelled

This commit is contained in:
2026-09-28 18:55:09 +02:00
parent 2a3c90d63b
commit 2701e165c4
5 changed files with 73 additions and 85 deletions
+12 -46
View File
@@ -7,15 +7,10 @@
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 §11 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.
`docs/decisions.md` §Plain markdown is a flavour of the grammar, 10's rows are read by
`markdownToAdf`'s parser and written by `adfToMarkdown`'s writer, and the lift goes. 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
@@ -30,37 +25,13 @@
(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.
- **10f — Give task nodes read from plain markdown position ids.** Per `docs/decisions.md` §Plain
task ids come from position, README §Plain markdown's `localId` bullet saying so. The id spelling
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 `<div
align="center">text</div>` keeps `text` and loses the box and the alignment ADF cannot hold.
- `<details><summary>Title</summary>…</details>` is an `expand`, the summary its `title`; one
inside another is a `nestedExpand`, as 10 already spells for the lossy pair. An empty
`<details>` is still refused — `expand` requires content, so there is nothing to build.
- A comment stays an error result. Neither schema holds a comment node: across 84 and 98
definitions the only "comment" in either file is `annotationType: "inlineComment"` on the
`annotation` mark, which carries an `id` and no text, the words living behind an Atlassian API.
`placeholder` is the editor's own visible hint, and `extension` demands an `extensionKey` naming
a vendor app. Nothing can hold the words, so nothing accepts them.
- `<script>` and `<style>` drop whole, their text with them. Neither holds anything a reader of
the document ever saw, so nothing is lost; unwrapping them would put `alert(1)` on the page as
prose. A `style` attribute is a separate question — `textColor` and `backgroundColor` are the
marks it could reach — and is not read at `0.2.0`, the work outweighing what it buys.
So the set sorts every element three ways, and that is what `docs/decisions.md` §Foreign HTML is
refused by name becomes in place of "error result naming the element": a container around document
content unwraps, content ADF cannot hold is an error result naming it, and what is not document
content at all drops whole. A comment sorts into the second rather than the third because a person
wrote those words on purpose. 10's "Rejected in the survey" line names raw HTML and comments and
does not contradict this: it rejects them as spellings the lossy pair writes and reads back, where
`plainMarkdownToAdf` reads through `markdownToAdf`'s parser and so inherits whatever this set
accepts.
The set sorts per `docs/decisions.md` §Foreign HTML sorts three ways.
- **7 — Ship HTML: `adfToHtml`, `htmlToAdf`, and `markdownToHtml` / `htmlToMarkdown` composed
through ADF.** CommonMark spec suite runs against `markdownToHtml` from here. The README's
tagline and `package.json`'s `description` regain HTML (5g).
@@ -93,17 +64,14 @@
- **5g — Reweight the README for the reader.** It opens with the pre-launch rationale — Atlassian's
REST APIs, `pf-editor-service/convert` being decommissioned, a link to JRACLOUD-77436 — where a
shipped package should answer what it is, what it does and for whom first, then the shortest
runnable example.
**Settled** (the maintainer, 2026-09-13): the background goes entirely, no endpoint, ticket or
runnable example. The background goes entirely, no endpoint, ticket or
"why" note left. The top follows the package-README order: an npm version badge and the Gitea
Actions badge, a tagline that is also `package.json`'s `description`, a feature list and a
one-line table of contents, then install and the shortest runnable example; a table of everything
exported sits near the bottom. The HTML directions were to stay an aside until a later release
shipped them; 7 now ships in this one and reads ahead of this item, so the README documents HTML
as it documents markdown, the tagline and `description` naming both (the maintainer, 2026-09-13,
revised 2026-09-18). They name the lossy pair too, and the flavours it writes and reads by name —
GitHub Flavored Markdown's alerts and task lists, Obsidian Flavored Markdown's callouts — so a
search for either finds the package (the maintainer, 2026-09-26).
exported sits near the bottom. The README documents HTML as it documents markdown, the tagline and
`description` naming both, the lossy pair, and the flavours it writes and reads by name — GitHub
Flavored Markdown's alerts and task lists, Obsidian Flavored Markdown's callouts — so a search for
either finds the package.
## 0.3.0
@@ -116,9 +84,7 @@
planned without a date. So the release path has an expiry date and no drop-in successor yet.
Revisit: whether npm has added Gitea or self-hosted OIDC, and otherwise whether the release moves
to the staged publish — which fits badly with publish-on-merge, and is the trade to weigh rather
than discover on a red release run.
**Settled** (the maintainer, 2026-09-13, placed in `0.3.0` 2026-09-27): clear of `0.2.0`, knowing
the cutoff may land before `0.2.0` ships.
than discover on a red release run. It stays out of `0.2.0` knowing the cutoff may land first.
- **8 — Ship a CLI, shaped around the personas.**
- **9 — Ship an online sandbox: a web page with two textboxes converting between ADF and markdown on
the library's browser build.**