v0.6.0
[0.6.0] - 2026-07-01
"Make-it-loud, round 2": a second dogfooding pass that turns more silent
degradations into loud diagnostics through the existing channel, unifies the
Vite boundary-discovery seam, and adds vector WGSL uniforms so the WebGPU cast
reaches GLSL parity.
Added
@czap/edge— spreadable tier attributes.EdgeTier.tierDataAttributesMap
andEdgeHostResolution.htmlAttributesMapexpose the rootdata-czap-*
attributes as aRecordkeyed by the full attribute name, built from the
CAP_AXESregistry so a new axis appears automatically.tierDataAttributes
(the pre-serialized string) is now derived from the map, so the two forms
cannot drift. See ADR-0018.@czap/compiler/@czap/astro— vector WGSL uniforms. Authored@wgsl
values acceptvec2/vec3/vec4(emittedvec2f/vec3f/vec4f); the WebGPU
runtime derives its uniform-buffer byte layout from the bound struct declaration
(WGSL alignment, 16-byte stride, bounded 64-byte buffer).u_resolutionis a
realvec2<f32>, closing the GLSL/WGSL parity gap; an overflowing declaration
warns once (wgsl-uniform-buffer-full) instead of silently truncating.
See ADR-0029.@czap/astro— directives boot on plain elements.client:stream/
client:llm/client:gpu/client:wasm/client:graphnow activate on
plain elements, not only framework islands, via a scanner whose selectors derive
fromDIRECTIVE_ATTRIBUTE_REGISTRY(a new directive is scannable by construction).
A baredata-czap-boundary— also a satellite/worker payload — stays explicit and
warns once when found bare instead of silently doing nothing. See ADR-0028.
Fixed
@czap/vite— unified boundary discovery. The@quantizeCSS transform
resolves boundary names from the same module-graph discovery as the manifest
(previously onlydirs.boundary), and an unknown@quantize <name>is now a
hard error naming the boundary instead of a generic lightningcss "Unknown at
rule". A manifest-covered boundary with no precompiled outputs warns
(manifest-boundary-empty-outputs) instead of silently serving empty CSS.@czap/audit— consumer mode.czap audit --consumerskips the internal
structure pass entirely (previously ~437 info findings against a consumer's own
app);czap audit --findingsstreams parseable NDJSON to stdout for tooling.@czap/quantizer— shader outputs in the change stream.outputChanges
surfacesglslandwgsloutput tables alongsidecss— previously only css
reached the stream and shader outputs sidestepped it.@czap/edge/@czap/astro—Sec-CH-Viewport-Widthis now aCritical-CH
hint, single-sourced. The production middleware asks for it critically, so a cold
browser resends the viewport hint before the first render and server-side
resolveInitialStatepicks the right initial state instead of a User-Agent estimate.
@czap/astro'sCLIENT_HINTS_HEADERSnow derives from@czap/edge's single
Accept-CH/Critical-CHsource rather than a hand-kept copy that had silently
diverged (dev asked for viewport-width critically, production did not); a drift guard
pins that the two can never disagree again.
Changed
@czap/compiler/@czap/edge— WGSL binding value type widened.
CompiledWGSLOutput.bindingValues(and the compiler'sWGSLCompileResult) now
carryWGSLUniformValue(number | readonly number[]) end to end — manifest,
edge KV cache, satellite payload, boundary eventdetail, WebGPU writer — to
represent vectors. Pre-1.0 minor; a consumer that narrowed the type tonumber
must widen it.
Internal
driveUniformFromSignalcontinuous-signal tracking on theSharedArrayBuffer
worker (off-thread) path is now pinned by a non-vacuous gate. api-surface
snapshot regenerated for the new exports.
Docs / DX
- Front door. The README opens with an
## I want to…router and a single canonical
signal → boundary → graph → cast → patchdiagram, placed byte-identically in README,
GLOSSARY.md, andAUTHORING-MODEL.mdand pinned by a drift guard so the three copies
can't diverge.DOCS.mdgains a four-layer routing preamble (Use / Author / Extend /
Engine-room). The demoted package table now lives inARCHITECTURE.md, generated from
the workspace and drift-gated. - Examples ladder.
examples/README.mdorders the examples as a learning path
(author → cast-to-ARIA → cast-to-GPU → the AI-patch keystone → cast-to-video); the
showcase is banner-marked "not the starting point." - Two new keystone examples.
examples/05-ai-patch-refused(a model's invalid
GraphPatchis refused; only a validated proposal mutates the graph) and
examples/03-cast-aria(one@quantizeblock casts a boundary to CSS and ARIA). - New gates. A relative-link checker across root/docs/package READMEs and a front-door
aperture gate (≤3@czap/*package names above the first install line) — both caught
real drift on arrival.