Compare commits

..

1 Commits

Author SHA1 Message Date
lilleman 9e469df200 3d — the online sandbox, lossy conversion, and @atlaskit/adf-schema evaluation
CI / gate (push) Successful in 17s
CI / publish (push) Has been skipped
2026-09-05 16:38:41 +02:00
5 changed files with 21 additions and 51 deletions
+2 -2
View File
@@ -3,8 +3,8 @@
Lossless conversion between **Atlassian Document Format** (ADF), an extended markdown flavour, and Lossless conversion between **Atlassian Document Format** (ADF), an extended markdown flavour, and
an HTML dialect. an HTML dialect.
**Status: published — the markdown round-trip (`adfToMarkdown`, `markdownToAdf`); HTML at **Status: pre-release — the markdown round-trip (`adfToMarkdown`, `markdownToAdf`); HTML not
`0.3.0`.** yet.**
Plan: `todo.md`. Decisions: `AGENTS.md`. The flavour's grammar: Plan: `todo.md`. Decisions: `AGENTS.md`. The flavour's grammar:
[`spec/flavour.md`](spec/flavour.md). [`spec/flavour.md`](spec/flavour.md).
+3 -3
View File
@@ -1,19 +1,19 @@
{ {
"name": "@larvit/adf-codec", "name": "@larvit/adf-codec",
"version": "0.1.0", "version": "0.0.0",
"lockfileVersion": 3, "lockfileVersion": 3,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "@larvit/adf-codec", "name": "@larvit/adf-codec",
"version": "0.1.0", "version": "0.0.0",
"license": "MIT", "license": "MIT",
"devDependencies": { "devDependencies": {
"@types/node": "24.13.3", "@types/node": "24.13.3",
"typescript": "7.0.2" "typescript": "7.0.2"
}, },
"engines": { "engines": {
"node": ">=18" "node": ">=24"
} }
}, },
"node_modules/@types/node": { "node_modules/@types/node": {
+2 -1
View File
@@ -1,6 +1,7 @@
{ {
"name": "@larvit/adf-codec", "name": "@larvit/adf-codec",
"version": "0.1.0", "version": "0.0.0",
"private": true,
"description": "Lossless conversion between Atlassian Document Format, extended markdown and HTML", "description": "Lossless conversion between Atlassian Document Format, extended markdown and HTML",
"license": "MIT", "license": "MIT",
"repository": { "repository": {
-20
View File
@@ -532,23 +532,3 @@ Under **3 — `markdownToAdf` (`0.1.0`)**:
`instrumentisto/geckodriver`, currency over size — the leg's whole worth is a real `instrumentisto/geckodriver`, currency over size — the leg's whole worth is a real
SpiderMonkey, which decays the moment the pin stops moving, and the smaller image was four SpiderMonkey, which decays the moment the pin stops moving, and the smaller image was four
Firefox majors behind with a publisher that may go quiet while Renovate stays silent. Firefox majors behind with a publisher that may go quiet while Renovate stays silent.
## 5 — Ship `0.1.0`
- [ ] **5 — Ship `0.1.0`.** Only the maintainer's own acts are left (§15): make the Gitea repo
public (§6), create the `NPM_TOKEN` secret, confirm the Actions token may push tags — the
publish succeeds and the tag push then reddens the run, though the next push to `main`
retries the tag alone — and open the bump PR that sets `version` to `0.1.0` and drops
`private: true`, the guard against any earlier publish. The bump and the drop go in one
commit: dropping `private` alone publishes `0.0.0`, which also differs from npm's nothing. `0.1.0` is the
markdown round-trip: both markdown directions, the types, `isAdfDocument`, proved over the
checked-in corpus.
**Settled** (the maintainer, 2026-09-01): the round-trip proved over the checked-in corpus
is what `0.1.0` ships on, and the open-ended proof work follows it rather than gating it —
3k's spec suite and 4's generators and maintainer-supplied payloads are `0.2.0`, 4b's retry
`0.1.1`. A consumer using the library is worth more than a wider proof nobody has needed
yet, and §8's pre-1.0 rules cover what the wider proof then finds.
**Shipped** 2026-09-05: `@larvit/adf-codec@0.1.0` published and `v0.1.0` tagged on `8a847de`. Publishing needed a
bypass-2FA token — the account carrying no write-2FA requirement was not enough, npm demanded an
OTP until the token itself bypassed it.
+14 -25
View File
@@ -5,7 +5,7 @@ milestone. A done item shrinks to its title here; its full text moves to `todo-h
## Milestones ## Milestones
Shipping order: 3h, 3i, 3j, 5a, 5b, 5c, 5d, 5 → `0.1.0` (shipped 2026-09-05); 5e before 2027-01; 4b, 4c and 4d`0.1.1`; 4, 3k → `0.2.0`; Shipping order: 3h, 3i, 3j, 5a, 5b, 5c, 5d, 5 → `0.1.0`; 4b and 4c`0.1.1`; 4, 3k → `0.2.0`;
6, 7 → `0.3.0`; 9, 10, 11 → TBD. 6, 7 → `0.3.0`; 9, 10, 11 → TBD.
The numbering is the order the work was planned in, not the order it ships. The numbering is the order the work was planned in, not the order it ships.
@@ -112,30 +112,19 @@ The numbering is the order the work was planned in, not the order it ships.
cost, which 3i's slot parse doubles rather than changes in class, bounded by the 500-level cost, which 3i's slot parse doubles rather than changes in class, bounded by the 500-level
guard. §11's scanning rule is the whole argument; the pipeline persona feeds documents guard. §11's scanning rule is the whole argument; the pipeline persona feeds documents
nobody typed. nobody typed.
- [ ] **4dWhat the gate says while it runs (`0.1.1`).** `ci.sh` runs nine legs and announces - [ ] **5Ship `0.1.0`.** Only the maintainer's own acts are left (§15): make the Gitea repo
none of them, so five minutes of a Gitea run read as silence and a hang cannot be told from public (§6), create the `NPM_TOKEN` secret, confirm the Actions token may push tags — the
a slow pull — the maintainer hit exactly this on the `0.1.0` release. Three causes, each its publish succeeds and the tag push then reddens the run, though the next push to `main`
own fix. The legs need markers: `plainpages`' `ci.sh` prints a `step()` header per leg and retries the tag alone — and open the bump PR that sets `version` to `0.1.0` and drops
this one prints nothing, so name the leg and the image before each. The longest leg is the `private: true`, the guard against any earlier publish. The bump and the drop go in one
quietest: `test_output=$(… npm test 2>&1)` buffers the whole Node run to replay it after, commit: dropping `private` alone publishes `0.0.0`, which also differs from npm's nothing. `0.1.0` is the
because the zero-test guard greps the count — stream it and grep a copy (`tee`), rather than markdown round-trip: both markdown directions, the types, `isAdfDocument`, proved over the
trading the output for the guard. And two legs are silenced outright, `npm pack` and the checked-in corpus.
tarball install, whose `>/dev/null` predates the offline install that made them quick and **Settled** (the maintainer, 2026-09-01): the round-trip proved over the checked-in corpus
quiet. `publish.sh` owes the same: today it says nothing between reading `private` and the is what `0.1.0` ships on, and the open-ended proof work follows it rather than gating it —
registry answering, which is where its `npm ci` and rebuild sit — the seconds §9 accepts 3k's spec suite and 4's generators and maintainer-supplied payloads are `0.2.0`, 4b's retry
rather than promoting the gate's `dist`, and unmeasured until the log shows them. Per-leg `0.1.1`. A consumer using the library is worth more than a wider proof nobody has needed
timing is what turns "slow or hung" from a guess into a reading; the browser leg's own yet, and §8's pre-1.0 rules cover what the wider proof then finds.
5.47.9s against a 17s warm gate is the number that made it obviously cheap.
- [x] **5 — Ship `0.1.0`.**
- [ ] **5e — The publish token's deadline (before 2027-01).** `0.1.0` published only once the npm
token carried **Bypass 2FA**: the account requiring no 2FA on writes was not enough, and npm
answered `EOTP` until the token itself bypassed. npm retires bypass-2FA tokens for direct
publishing around January 2027, and its replacement — trusted publishing over OIDC —
supports GitHub Actions, GitLab CI, CircleCI and Buildkite, not Gitea or self-hosted
runners. So the release path has an expiry date and no drop-in successor yet. Revisit before
the deadline: whether npm has added Gitea or self-hosted OIDC, and otherwise whether the
release moves to a human-approved staged publish — which fits badly with publish-on-merge,
and is the trade to weigh rather than discover on a red release run.
- [x] **5a — Rename to `@larvit/adf-codec`.** - [x] **5a — Rename to `@larvit/adf-codec`.**
- [x] **5b — The consumer's error surface.** - [x] **5b — The consumer's error surface.**
- [x] **5b1 — The error's source position.** - [x] **5b1 — The error's source position.**