Review: the ratchet counts an IIFE, and no missing config or stray warning passes it
CI / gate (push) Successful in 30s
CI / publish (push) Has been skipped

This commit is contained in:
2026-09-20 18:20:10 +02:00
parent 6efbac4598
commit b969bb36d6
4 changed files with 18 additions and 12 deletions
+1 -1
View File
@@ -3,6 +3,6 @@
"categories": { "correctness": "off" }, "categories": { "correctness": "off" },
"ignorePatterns": ["src/**/*.test.ts", "src/property-harness.ts"], "ignorePatterns": ["src/**/*.test.ts", "src/property-harness.ts"],
"rules": { "rules": {
"eslint/max-lines-per-function": ["error", { "max": 52 }] "eslint/max-lines-per-function": ["error", { "IIFEs": true, "max": 52, "skipBlankLines": false, "skipComments": false }]
} }
} }
+8 -5
View File
@@ -79,7 +79,8 @@ dependency — CommonJS-only, some fifty packages with React among them, and a r
Renovate to automerge — re-pinned by hand when a payload or a report shows the need. Renovate to automerge — re-pinned by hand when a payload or a report shows the need.
`devDependencies`: few, each earning its keep; they never reach a consumer. `fast-check` earns its `devDependencies`: few, each earning its keep; they never reach a consumer. `fast-check` earns its
place shrinking a failing generated document to the nodes that break it, `oxlint` measuring §10's place shrinking a failing generated document to the nodes that break it, `oxlint` measuring §10's
size ratchet — TypeScript 7 is a native compiler and exposes no parser to write that check against. size ratchet — TypeScript 7 is a native compiler publishing no in-process parser, only the
`unstable/` AST surface an out-of-process handshake reaches.
## 6. The package contract ## 6. The package contract
@@ -257,10 +258,12 @@ compared against `undefined` — have a half no valid document reaches.
The size ratchet is the other such number, `.oxlintrc.json`'s single rule over the files The size ratchet is the other such number, `.oxlintrc.json`'s single rule over the files
`tsconfig.build.json` builds: no function past 52 lines, today's worst (`parseInline`), moving only `tsconfig.build.json` builds: no function past 52 lines, today's worst (`parseInline`), moving only
downward. It guards against drift and never drives a refactor, so no cyclomatic rule and no second downward. It stops where the package does, because one ceiling covering the tests and the harness
lint rule join it — neither measure picked out what nine readers found hard (the comprehension too would have to be their worst — 64 — which loosens the guard over the shipped code. It guards
panel, 2026-09-20), and `eslint/complexity` charges a point for each `?.` and `??` the branch floor against drift and never drives a refactor, so no cyclomatic rule and no second lint rule join it:
above already exempts. neither measure picked out what nine readers found hard (the comprehension panel, 2026-09-20). The
leg passes `--deny-warnings` and an explicit `-c`, since oxlint exits 0 on a warning and, finding
no config, falls back to 96 default rules — either way green with the ceiling gone.
The corpus, all checked in: hand-built fixtures per node and combination; real ADF Atlassian's The corpus, all checked in: hand-built fixtures per node and combination; real ADF Atlassian's
editor wrote; the CommonMark spec suite against `markdownToAdf` and `markdownToHtml`. editor wrote; the CommonMark spec suite against `markdownToAdf` and `markdownToHtml`.
+1 -1
View File
@@ -23,7 +23,7 @@
}, },
"scripts": { "scripts": {
"build": "tsc -p tsconfig.build.json", "build": "tsc -p tsconfig.build.json",
"size-ratchet": "oxlint src", "size-ratchet": "oxlint --deny-warnings -c .oxlintrc.json src",
"test": "node --test --experimental-test-coverage --test-coverage-exclude=\"src/**/*.test.ts\" --test-coverage-exclude=src/property-harness.ts --test-coverage-branches=98 --test-coverage-functions=100 --test-coverage-lines=100 \"src/**/*.test.ts\"", "test": "node --test --experimental-test-coverage --test-coverage-exclude=\"src/**/*.test.ts\" --test-coverage-exclude=src/property-harness.ts --test-coverage-branches=98 --test-coverage-functions=100 --test-coverage-lines=100 \"src/**/*.test.ts\"",
"typecheck": "tsc --noEmit && tsc --noEmit -p tsconfig.build.json" "typecheck": "tsc --noEmit && tsc --noEmit -p tsconfig.build.json"
}, },
+8 -5
View File
@@ -868,11 +868,14 @@ The done `todo.md` items in full, as they were written. `todo.md` keeps a one-li
ranks no better: `emitList` and `blockNode` are both 26 lines, one the panel's unanimous top ranks no better: `emitList` and `blockNode` are both 26 lines, one the panel's unanimous top
four and the other the clearest map of the format in the repo. So the ceiling guards against four and the other the clearest map of the format in the repo. So the ceiling guards against
drift and never drives a refactor — 19 to 27 are where the hard work actually is. drift and never drives a refactor — 19 to 27 are where the hard work actually is.
**Done** (2026-09-20): `.oxlintrc.json` carries the one rule, every category and plugin off, **Done** (2026-09-20): `.oxlintrc.json` carries the one rule, `correctness` off so nothing
over the 40 files `tsconfig.build.json` builds — the tests and `property-harness.ts` out, as else runs, over the 40 files `tsconfig.build.json` builds — the tests and
they are out of the coverage floors, the harness's own 59-line function with them. The `property-harness.ts` out, five functions over the ceiling with them, the worst 64. The
ceiling is 52, `parseInline`'s length and the repo's worst; at 51 the gate reddens on it. ceiling is 52, `parseInline`'s length and the built set's worst; at 51 the gate reddens on
`npm run size-ratchet` is the leg, beside the typecheck at 0.8s, and the lockfile carries it. The leg runs `oxlint --deny-warnings -c .oxlintrc.json src` beside the typecheck at 0.8s,
the two flags because oxlint exits 0 on a warning and, discovering no config, falls back to
96 default rules; `IIFEs`, `skipBlankLines` and `skipComments` are spelled so a changed
default cannot move what 52 counts (the stability-reviewer, 2026-09-20). The lockfile carries
every platform binding, so `npm ci` resolves the musl one inside the image. every platform binding, so `npm ci` resolves the musl one inside the image.
- [x] **18 — The subtree the directive spelling asks about (`0.2.0`).** The parser asks - [x] **18 — The subtree the directive spelling asks about (`0.2.0`).** The parser asks
`commonMarkSpelling` at every directive-spelled block and the answer emits the whole subtree `commonMarkSpelling` at every directive-spelled block and the answer emits the whole subtree