Skip to content

v0.2.0

Choose a tag to compare

@github-actions github-actions released this 03 Jun 14:07
· 183 commits to main since this release
dccd24f

The data model moves
from "ship every snapshot in the tarball" to
"cache on first use, fetch from the hosted Worker, fall back to a
bundled subset." The npm version stops tracking spec data and starts
meaning code again.

Added

  • ECMA-402 reaches edition parity with ECMA-262. 402 publishes
    each annual edition as an esYYYY branch (not a tag); the catalog
    now exposes the full es2016es2025 range plus main, where it
    previously had only es2025-candidate + main. spec.diff,
    spec.history, and edition-pinned clause.get now work across the
    402 annual line.
  • ECMA-402 proposals are indexed. proposal.list / proposal.get
    now cover the ecma402/ proposal set (~32 proposals that were
    entirely missing), and proposal.list gains a spec filter
    ({ spec: "402" }). Every proposal row carries a spec tag.

Removed

  • Dropped the transient es2025-candidate 402 pin. It predated the
    final es2025 branch, which now supersedes it. clause.get,
    spec.diff, and the other edition-aware tools no longer accept
    edition: "es2025-candidate" — use es2025.

Changed

  • Snapshots are sourced through a cache → hosted Worker → bundled
    fallback chain
    (loadSnapshot). The stdio server caches each
    snapshot under ~/.cache/tc39-mcp/ on first network fetch and serves
    it from disk thereafter, revalidating against the Worker only after a
    ~4-hour freshness window (conditional If-None-Match).
  • latest on ECMA-402 now resolves to es2025 (the newest annual
    edition), matching 262's "latest = newest stable" semantics. Use
    main / draft / next for the working draft.
  • The npm tarball shrinks ~70%. It now bundles only the offline
    fallback — spec-262-es2025, spec-262-main, spec-402-es2025,
    spec-402-main, and the proposals + test262 indexes — instead of
    every parsed edition. All other editions are fetched from the Worker
    on demand.
  • cheerio and @tc39/ecma262-biblio move to devDependencies.
    They're only used by the parser at build time (npm run parse); the
    running server reads pre-parsed JSON and never imports them. A
    consumer install no longer pulls cheerio's ~20-package HTML-parsing
    tree (~2.4 MB). The published tarball also drops dist/docs and
    dist/refresh (build/CI-only code that runs from src/ via tsx,
    never at runtime).
  • Refresh decouples from the npm version. refresh.yml updates R2
    every ~4 hours (live freshness for networked users) and re-bakes the
    npm bundle at most monthly, ending the ~2000-PATCH-bumps-per-year
    flood. A new annual edition still publishes immediately via the
    normal code-release path.
  • @tc39/ecma262-biblio is pinned to an exact version (per its
    README's "pin a precise version" guidance), so the parse metadata
    layer is reproducible alongside the SHA-pinned spec HTML.
  • The 262 parser gained an HTML-discovery fallback: since the
    pinned biblio is a snapshot of main, it can lag the HTML being
    parsed (a newer main, or an older edition carrying clauses since
    dropped). Any <emu-clause> the biblio doesn't list is now still
    captured, with metadata synthesized from the element — so a stale or
    mismatched biblio can no longer silently drop a clause.

Fixed

  • Conditional revalidation returns 304 from the hosted Worker. The
    stdio loader sends If-None-Match when re-checking a live snapshot
    past its ~4-hour freshness window; the /r2/ proxy previously ignored
    it and re-sent the full body. It now returns a bodyless 304 on an
    etag match, so a revalidation costs a header round-trip instead of a
    tens-of-MB re-download.

Notes

  • stdio now makes HTTPS requests to source non-cached snapshots
    (by default the hosted Worker; override with TC39_MCP_BASE_URL to
    self-host or air-gap). Tool arguments and clause ids never leave the
    process — see docs/privacy.md.
  • v0.1.x installs are unaffected; this is a backward-compatible minor
    at the tool/protocol level.