v0.4.1
[0.4.1] - 2026-06-29
A patch release: a consumer-audit scoping fix, two runtime DX/behavior fixes
surfaced by downstream dogfooding, and a dev-toolchain refresh.
Added
@czap/astro— directive-collision diagnostic. The client-directive scanner now warns
once when an element is claimed by more than one czap directive — e.g.client:gpuand
satelliteAttrs()on the same canvas, where the satellite silently wins and the GPU shader
never boots. Activation is unchanged; the warning names both directives and the fix (put each
on its own element), turning a silent directive fight into a loud, actionable signal.
Fixed
@czap/audit— consumer-audit scoping regression.czap audit --consumerno longer emits
falseunknown-internal-packageerrors (98 on a real 0.4.0 upgrade) for a discovered package
importing an internal@scope/*package that isn't in the discovery seed (transitive/pnpm-hoisted
deps like the new@czap/error/@czap/gauntlet). In consumer mode (profile.packageRootsset)
the structure pass keeps its dependency-graph output but suppresses that rule — it's the vendor's
own published wiring, which a consumer can't act on and LiteShip's own CI already audits. Source-
monorepo audits still flag it.@czap/audit— the "internalPackagePrefix cannot be derived" error (hit when the direct
runAuditPasses({ repoRoot })API runs in an unscoped consumer app) now points at
czap audit --consumeras the correct consumer entry point. (A silent no-op prefix is
deliberately NOT introduced: a clean audit must never mean "nothing was checked".)@czap/astro— WGSLu_timeis now advanced every frame. Hand-authored animated WGSL
shaders that declareu_timewere frozen: the WebGPU runtime only wrote the uniform buffer on
boundary crossings, never a clock. It now feeds the monotonic elapsed-seconds clock per-frame
(merged with the live signal snapshot so signal fields are preserved), at parity with the GLSL
path.u_resolution(avec2) is fed per-frame too — the WGSL uniform buffer now lays fields
out by WGSL alignment rules (so avec2lands on its required 8-byte offset) rather than a flat
scalar layout. (u_stateis already fed as the compiler'sstate_index.)
Changed
- Node floor + dev toolchain. Raised
engines.nodeto>=22.13.0(the minimum for
eslint 10) across all packages; CI continues on Node 22. Bumped eslint 9→10, prettier 3.9,
typescript-eslint 8.62, fast-check 4.8, jsdom 29.1, playwright 1.61, and related dev tooling,
and aligned the@remotion/*override to 4.0.484. Tailwind is held at 4.2.1 (4.3 regresses the
showcase example build) and Node 24 is deferred (its V8 breachesINV-COMPOSITOR-ZERO-ALLOCvia
Effect's Queue in the compositor's live-subscriber publish path) — both tracked for a later release.