Skip to content

Roadmap

DRAFT (no oracle yet; a plan without enforcement is draft material). The three standing decisions are recorded at the bottom.

The Rust estate compounds because kits were extracted from real suites and core is earned by exact consumer pins. The web estate inherits that loop: each phase exists to produce one deployed suite that pins kits and forces the next extraction.

DONE (2026-11-01). All items closed; exit criterion met:

  • CI green on GitHub (web + wasm jobs).
  • json-envelope#5 carries the canonical fixture (merge pending).
  • search-wasm artifact builds; @est/search-wasm registered, version-locked.
  • astro check in the apps’ build verb; smoke oracle in contract.
  • Deployed: https://web-estate-directory.pages.dev (Cloudflare Pages).
  • @est/errcode, @est/envelope, @est/search graduated to core: published suite, exact pins, audit-verified.

DONE (2026-11-01), exit criterion met:

  • @est/fetchkit shipped and fixture-pinned: backoff mirrored from retry-backoff (same defaults, cap, jitter bound), strict envelope decoding, wire codes in crate as_str form, loopback integration tests over real HTTP.
  • apps/directory-api: Cloudflare Worker serving envelope responses, running @est/search server-side over @est/directory-data; CORS allowlisted to the site origin.
  • Live round trip: the deployed directory’s search island queries the deployed API through @est/fetchkit (live-first, local index fallback); the result count renders a live api chip when the wire answered.
  • Exit: fetchkit pinned exactly by the deployed suite; core claim available at the next registry audit.

Cache semantics are deferred to @est/cachekit (SC-1: one concern).

DONE (2026-11-04): flags, i18n, crdt, otel shipped; fetchkit/flags/i18n/money graduated to core via the deployed ledger’s pins. Extraction wave 2 also shipped: @est/islands, @est/deploy-targets, @est/math (fixture-driven extractions from the starlight family; see the Extraction page). @est/ws stays deferred until an app defines a WS message contract.

Remaining: a flagsd-compatible deployment consuming @est/flags at scale (the flags-edge worker covers the ledger today). Span export shipped: the ledger emits W3C-traceparent correlations and OTLP-JSON spans to the directory-api POST /api/traces route (live, CORS-enabled).

STARTED (2026-11-01):

  • @est/flags shipped and fixture-pinned: mirrors flagsd’s evaluate route ({name, enabled}), fail-closed policy (defaults[name] ?? false when flagsd is unreachable), subject serialization (user, org). Transport inherits @est/fetchkit.fetchJsonWithMeta (flagsd predates envelopes; one retry implementation, no duplication).
  • @est/fetchkit grew the decode-agnostic raw-JSON path for pre-envelope services.
  • @est/i18n shipped and fixture-pinned: mirrors i18n-kit’s locale normalization (BCP 47 casing rules), catalog, plural suffixes (zero/one/other), translator fallback chain (exact locale -> primary language -> default when languages differ -> key), and {placeholder} interpolation (unmatched slot -> empty, unclosed brace stays literal). One catalog object serves every locale; apps embed it.

Pending, in order:

KitRust mirrorFixtures
@est/i18ni18n-kitshared message catalogs
@est/wsws-kit / ws-barbicanidentical message envelopes
@est/crdtcrdts-kit (wasm)ops and merge cases
@est/otelotelkitattribute and naming tables

Exit for the phase: a deployed suite consumes flags (the directory gains a feature-flagged surface pointed at a reachable flagsd instance) and one state kit has a consumer.

STARTED (2026-11-02):

  • @est/money shipped and fixture-pinned: exact BigInt decimals, the largest-remainder allocate (mirroring amount.rs op-for-op, including euclidean floors and stable ratio-order ties), the four rounding policies, and fx conversion (exact mantissa multiplication; missing rates are errors). Golden vectors come from the money crate’s own tests; crates/money-wasm runs the same fixture against the published decimal-money crate natively (cargo test 2/2).
  • apps/ledger shipped and deployed: https://web-estate-ledger.pages.dev: allocation island with the sum-preservation invariant rendered in the UI, flags fail-closed demo with decision-source chips, en/de locale switcher, and a fetchkit status round trip against the deployed directory-api.
  • ledger pins money + flags + i18n + envelope + errcode + fetchkit exactly: six kits, one deployed suite: the multi-kit core graduation target.

Shared web CI workflow (the rust-kit analog); SBOM and provenance for npm artifacts; TS semver gate; OmniWeb-template; CSS tokens generated from theme-kit; a11y-kit checklist on islands; starlight-kit consolidation of the per-site repos.

Monorepo until a kit gains an external consumer, an independent release cadence, or CI contention; then extract. The registry schema models both shapes (packages: today, repos: when split), so the audit does not change.

  1. Deploy target: Cloudflare Pages.
  2. npm posture: publish @est/* publicly at core graduation, mirroring the crates.io discipline.
  3. Phase 3 suite: ledger dashboard.