Hold the shipped source to ECMAScript alone, and run the suite on Deno and Bun #39

Merged
lilleman merged 6 commits from runs-anywhere into main 2026-09-01 17:18:07 +02:00
3 changed files with 11 additions and 10 deletions
Showing only changes of commit f8c50d5e81 - Show all commits
+8 -7
View File
@@ -62,11 +62,11 @@ they never reach a consumer.
- Runs on any ES2022 engine, not only Node — a browser as readily as a server. The shipped source - Runs on any ES2022 engine, not only Node — a browser as readily as a server. The shipped source
is ECMAScript and nothing else: no host import, no host global, no DOM. `tsconfig.build.json` is is ECMAScript and nothing else: no host import, no host global, no DOM. `tsconfig.build.json` is
that gate, typechecking the shipped files alone with `types: []` and `lib: ES2022`, so `node:fs`, that gate, typechecking the shipped files alone, so `node:fs`, `process` and an ES2024 method are
`process` and an ES2024 method are compile errors here rather than a consumer's crash there. The compile errors here rather than a consumer's crash there. The standard is the line, never an
standard is the line, never an engine list: one implementing it in part — Hermes is the live engine list: one implementing it in part — Hermes is the live doubt, on §10's property escapes
doubt, on the Unicode property escapes and the lookbehind the markdown grammar spells — is out of and on lookbehind — is out of scope rather than a bug. Node's test runner, the corpus reads and
scope rather than a bug. Node's test runner, the corpus reads and the build are the repo's own, the build are the repo's own,
never the library's, and `engines.node` states the floor the shipped JavaScript needs — `>=18` never the library's, and `engines.node` states the floor the shipped JavaScript needs — `>=18`
never the higher one those repo-only tools want. never the higher one those repo-only tools want.
- ESM only — no CommonJS build, no dual-package hazard. - ESM only — no CommonJS build, no dual-package hazard.
@@ -113,8 +113,9 @@ descends, so a document reports its first error in document order.
differs from npm → publish and tag `vX.Y.Z`. No bump, no deploy; the bump is each shipping PR's differs from npm → publish and tag `vX.Y.Z`. No bump, no deploy; the bump is each shipping PR's
deliberate semver judgment. deliberate semver judgment.
- Renovate watches devDependencies, Docker pins and action tags; automerges everything on green CI. - Renovate watches devDependencies, Docker pins and action tags; automerges everything on green CI.
- Docker images pin the full patch version (`node:24.19.0-alpine3.24`, never `node:24`); actions - Docker images pin the full patch version (`node:24.19.0-alpine3.24`, never `node:24`), as
pin semver tags. specific as the publisher tags: `oven/bun:1.4.0-alpine` pins Bun's patch and leaves the base
floating because Bun publishes nothing narrower. Actions pin semver tags.
## 10. Tests first, in Docker ## 10. Tests first, in Docker
+2 -2
View File
@@ -64,5 +64,5 @@ Personas, never named consumers (AGENTS.md §7):
## The package ## The package
ESM only, no runtime dependencies, public npmjs. Built JavaScript with `.d.ts` beside it. ESM only, no runtime dependencies, public npmjs. Built JavaScript with `.d.ts` beside it.
Pure ECMAScript at an ES2022 baseline, reaching for no host API, so a browser runs it as readily Pure ECMAScript at an ES2022 baseline, reaching for no host API; the test suite runs under Node,
as a server; the test suite runs under Node, Deno and Bun. Contract: `AGENTS.md` §56. Deno and Bun. Contract: `AGENTS.md` §56.
+1 -1
View File
@@ -148,7 +148,7 @@ numbering is the order the work was planned in, not the order it ships.
other half. Headless Firefox is that page, settling both at once: the browser proof, and the other half. Headless Firefox is that page, settling both at once: the browser proof, and the
only SpiderMonkey there is, `ci.sh`'s three legs being two V8s and a JavaScriptCore that is only SpiderMonkey there is, `ci.sh`'s three legs being two V8s and a JavaScriptCore that is
not Safari's. `engines.node` gets its one-line proof here not Safari's. `engines.node` gets its one-line proof here
too — `import('./dist/index.js')` under a pinned `node:18` image, which cannot run the too — `import('./dist/index.js')` under a pinned Node 18 image, which cannot run the
suite that type stripping wants 22+ for, but proves exactly what the field claims. suite that type stripping wants 22+ for, but proves exactly what the field claims.
**Settled** (the maintainer, 2026-09-01): the round-trip 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 — is what `0.1.0` ships on, and the open-ended proof work follows it rather than gating it —