v0.1.0-next.90
v0.1.0-next.90
Released: 2026-07-21
Breaking Changes
A relative import (
.or/ .) that resolves above your project root — including from a claimed workspace-sibling package's own source — now hard-fails with. / Could not resolve, where it previously succeeded by accident. On a pnpm workspace, before this release, a dual-target tsconfig rebase kept a graceful fallback to the LIVE tree, so a walk-above-root import happened to resolve against your real filesystem.0906fb0f(#1692) replaced that with a wholesale mirror of the first-party workspace tree; an import that escapes even that wider mirror has nowhere staged left to land. The#1702stage-escape guard family (which closes an unrelated symlink-escape hole) then correctly classifies this same accidental live-tree reach as an offender, so it is rejected rather than quietly re-admitted. This behavior is intentional and stays — it is not a regression to be reverted; see the tracked decision issues (#1726/#1730/#1733) if you believe your project needs the old fallback restored.Migration: move the target inside the project, or expose it as a real package import — add a wildcard
exportsentry to the target package'spackage.json(e.g."./src/*": "./src/*") and import it by package specifier (e.g.@scope/) instead of a relative path.pkg/ src/ button. ts node_modulesis always included in the staged build tree, so a package-specifier import keeps resolving.Diagnostics: the build error now names every escaping import in one run (esbuild's own 10-message cap is uncapped for this diagnostic) and reports the REAL source path of each offending importer — never the ephemeral shadow-copy tempdir — even when the importer is itself a wholesale-mirrored workspace-sibling file (issue #1839). One caveat: esbuild never visits an unresolved module's own imports, so this report is per-run complete (every offender esbuild actually attempted), not migration complete — fixing the imports it names can surface further offenders on the next run. A lexical pre-scan that predicted every offender up front was deliberately not built: it would have to re-implement esbuild's own resolution algorithm to stay accurate, the unbounded-parity trap this project's build tooling avoids elsewhere.
Features
feat(zfb): feed sibling mirror roots into Tailwind @source content globs (b6aaee26)
feat(zfb): thread virtual-module claims into command-layer CSS discovery (d95170bc)
feat(zfb-build): skip fast path for unchanged sibling mirror files (1cec011d)
feat(zfb): add committed smoke script proving vendor-override contract on a clean tree (06df34f9)
feat(zfb): stage override binaries directly into vendor snapshot (ce25accb)
feat(zfb): align consumers on canonical URL encoding + global collision check (100e725f)
feat(zfb-render): canonical percent-encoding codec at paths() URL choke point (2b059dd1)
feat(zfb): wire dev-boot watcher-liveness probe with isolation + Ctrl+C cleanup (c6f1d152)
feat(zfb-watcher): add production watcher-liveness self-check primitive (4aed300f)
feat(zfb-build): specifier-aware stack-frame filtering in the reprojector (1042f8b9)
feat(zfb): enable the guard (b) stage-escape audit at build/dev call sites (6caf51a8)
feat(zfb-islands): wire guard (b) stage-escape audit into the esbuild layer (a1cab6fa)
feat(zfb-build): SSR work-mirror stage-escape audit (c79f1aed)
feat(zfb): Guard (a) — reject island/client-scoped workspace package-name imports (96358f5c)
feat(zfb-build): add guard (b) metafile stage-escape audit primitive (89730ed7)
feat(zfb-build): workspace tier for virtual-module import remap (466aee23)
feat(zfb, zfb-css): sibling .module.css class maps + CSS emission through the claim plan (ff042bfe)
feat(zfb-build): fixed-point stage import.meta.glob matched files (22d51d19)
feat(zfb-build): wholesale sibling mirror + root loose-file staging (0906fb0f)
feat(zfb-build): create work node_modules link under exclusions; invert resurrection guard (09f109fa)
feat(zfb-css): add workspace-aware CSS-modules hash root (0ced561e)
Bug Fixes
fix(zfb-content): validate MDX expressions before stringifying recovery (46981074)
fix(zfb-content): harden the no-pipeline emitter expression sink too (5a454279)
fix(zfb-content): recover leaked backslash-escape MDX expressions (038cd6a2)
fix(zfb): emit direct virtual-module CSS-module imports (cd89368c)
fix(zfb): serialize virtual-module test fixture path as a JSON string (a90b65b3)
fix(zfb-build): evict mirror_skip on downstream overwrite (78cb8f4d)
fix(zfb): document Unix-host + warm-CARGO_HOME prerequisites for verify-vendor-override.sh (b8eb2b7d)
fix(zfb): align runtime override resolution with build-time empty=unset contract (1823c85c)
fix(zfb-server): canonicalize IPv6 through IpAddr in the Exact-rule matcher (832be477)
fix(zfb-server): split origin matcher so IP literals need explicit rules (215a156d)
fix(zfb): canonicalize literal segments across the paths encoding boundary (f2064df4)
fix(zfb): align remaining non-canonical producers with the boundary (eb5a2357)
fix(zfb-render): resolve file-symlink alias relative imports via canonical dir (f21a3ed9)
fix(zfb-render): keep plugin attribution for missing alias siblings (79a704b4)
fix(zfb-render): canonical, non-widening alias disk-read containment (393cb8c1)
fix(zfb-watcher): bound Watcher::shutdown against a saturated outbound channel (7c72a8ee)
fix(zfb): apply watcher-liveness deep-review findings (99c55652)
fix(zfb): scope client/islands virtual-module remap to the workspace tier, cover the islands flow (8b659f9c)
fix(zfb): remap virtual-module sibling imports in the client-preprocess flow (e6e5e0b9)
fix(zfb-build): exclude sibling node_modules from the workspace remap tier (9bf92df4)
fix(zfb): codex-review findings on the sibling CSS command-layer test (c226e103)
fix(zfb-build): rewrite claimed sibling .module.css files in the work mirror (8fb230e0)
fix(zfb-build): stage claimed-region glob matches and their plain deps (0288e27e)
fix(zfb-build): preflight project-root loose files before materialising (c2a7b25b)
fix(zfb-css): tag sibling-relative hash input to avoid collision with project-relative (4a5cab53)
fix(zfb-islands): keep stage-audit metafiles out of the strict outdir read-back (267c399d)
fix(zfb): use .err().expect over .unwrap_err in guard-a test (fa6f83c9)
Other Changes
Validate the dev content-trace inner worker's shape, not just its wrapper (a915199c)
Add strict main-worker load contract for callable default.fetch (30874315)
Make Headers polyfill iteration live per WHATWG map-iterate semantics (1195146b)
Add URLSearchParams plus-space form-urlencoded handling (657b3560)
Fix Response constructor aliasing a caller-owned Headers instance (6a863eb3)
Fetch BodyInit content-type defaulting for the Response polyfill (c458baa7)
Ordered multi-value headers across the JS→Rust response bridge (f7a5d480)
refactor(zfb): extract watcher-liveness probe lifecycle into commands/watcher_liveness_probe.rs (5de9431d)
refactor(zfb): single derivation point for dev inner-bundle specifier + frame-filter cleanup (96e40622)
refactor(zfb): make dev content-trace wrapper a real ESM module (02b3f107)
test(zfb): prove watcher-liveness probe activity never causes an orchestrator tick (431d871f)
test(zfb): confirm decoy export-syntax e2e coverage for dev content-trace wrapper (faeaa9de)
test(zfb): orchestrator-boundary + e2e Scenario D confirm pass for sibling plain-module invalidation (5358b844)
test(zfb-islands): prove Guard (b) rejects a real-esbuild workspace-package escape (7beb0819)
test(zfb): drive Guard (a) through the real islands scanner (bba7496b)
test(zfb): extend the reroot-host cross-pipeline test with a virtual-module workspace-sibling proof (4a329433)
test(zfb-build, zfb): real-esbuild sibling-mirror regression matrix (63e56a3d)
docs(zfb): add the new Guard (b) env-gate test to the #[ignore] manifest (0678a7ff)
docs(zfb): add the islands-side #1682 twin, finalize both to "guarded by this epic" wording (6dc83794)
docs(zfb-islands): fix stale test-comment reference after dropping the env-gate integration test plan (c7975f13)
docs(claude): remove topic worktrees at wave-merge time (disk pressure rule) (4e953aca)
chore(zfb-build): expose SiblingMirrorPlan cross-crate for #1696 (5cd55193)
style: cargo fmt zfb-watcher lib.rs (fmt drift from the tiny-cleanups epic) (997d1732)
style: cargo fmt embedded_v8_smoke.rs (fmt drift from the response-polyfills epic) (5afdb886)
style(zfb-build): cargo fmt the epic's bundler.rs + sibling-mirror test (6ed4240a)
ci(health): cap the zfb-debug transfer artifact at 1-day retention (65cada61)