Compare commits

..

3 Commits

Author SHA1 Message Date
lilleman 636fe19e59 3d — the online sandbox, lossy conversion, and @atlaskit/adf-schema evaluation
CI / gate (push) Successful in 18s
CI / publish (push) Has been skipped
2026-09-05 16:39:48 +02:00
lilleman 8a847dea0a Record the gate's silence as a 0.1.1 item
CI / gate (push) Successful in 1m17s
CI / publish (push) Successful in 10s
2026-09-04 12:24:50 +02:00
lilleman bcab476c87 Release 0.1.0
CI / gate (push) Successful in 5m18s
CI / publish (push) Failing after 5m10s
2026-09-04 12:07:41 +02:00
5 changed files with 51 additions and 21 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: pre-release — the markdown round-trip (`adfToMarkdown`, `markdownToAdf`); HTML not **Status: published — the markdown round-trip (`adfToMarkdown`, `markdownToAdf`); HTML at
yet.** `0.3.0`.**
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.0.0", "version": "0.1.0",
"lockfileVersion": 3, "lockfileVersion": 3,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "@larvit/adf-codec", "name": "@larvit/adf-codec",
"version": "0.0.0", "version": "0.1.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": ">=24" "node": ">=18"
} }
}, },
"node_modules/@types/node": { "node_modules/@types/node": {
+1 -2
View File
@@ -1,7 +1,6 @@
{ {
"name": "@larvit/adf-codec", "name": "@larvit/adf-codec",
"version": "0.0.0", "version": "0.1.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,3 +532,23 @@ 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.
+25 -14
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`; 4b and 4c`0.1.1`; 4, 3k → `0.2.0`; 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`;
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,19 +112,30 @@ 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.
- [ ] **5Ship `0.1.0`.** Only the maintainer's own acts are left (§15): make the Gitea repo - [ ] **4dWhat the gate says while it runs (`0.1.1`).** `ci.sh` runs nine legs and announces
public (§6), create the `NPM_TOKEN` secret, confirm the Actions token may push tags — the none of them, so five minutes of a Gitea run read as silence and a hang cannot be told from
publish succeeds and the tag push then reddens the run, though the next push to `main` a slow pull — the maintainer hit exactly this on the `0.1.0` release. Three causes, each its
retries the tag alone — and open the bump PR that sets `version` to `0.1.0` and drops own fix. The legs need markers: `plainpages`' `ci.sh` prints a `step()` header per leg and
`private: true`, the guard against any earlier publish. The bump and the drop go in one this one prints nothing, so name the leg and the image before each. The longest leg is the
commit: dropping `private` alone publishes `0.0.0`, which also differs from npm's nothing. `0.1.0` is the quietest: `test_output=$(… npm test 2>&1)` buffers the whole Node run to replay it after,
markdown round-trip: both markdown directions, the types, `isAdfDocument`, proved over the because the zero-test guard greps the count — stream it and grep a copy (`tee`), rather than
checked-in corpus. trading the output for the guard. And two legs are silenced outright, `npm pack` and the
**Settled** (the maintainer, 2026-09-01): the round-trip proved over the checked-in corpus tarball install, whose `>/dev/null` predates the offline install that made them quick and
is what `0.1.0` ships on, and the open-ended proof work follows it rather than gating it — quiet. `publish.sh` owes the same: today it says nothing between reading `private` and the
3k's spec suite and 4's generators and maintainer-supplied payloads are `0.2.0`, 4b's retry registry answering, which is where its `npm ci` and rebuild sit — the seconds §9 accepts
`0.1.1`. A consumer using the library is worth more than a wider proof nobody has needed rather than promoting the gate's `dist`, and unmeasured until the log shows them. Per-leg
yet, and §8's pre-1.0 rules cover what the wider proof then finds. timing is what turns "slow or hung" from a guess into a reading; the browser leg's own
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.**