Skip to content

v0.6.0

Choose a tag to compare

@github-actions github-actions released this 03 Jul 13:20

[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
    and EdgeHostResolution.htmlAttributesMap expose the root data-czap-*
    attributes as a Record keyed by the full attribute name, built from the
    CAP_AXES registry 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 accept vec2/vec3/vec4 (emitted vec2f/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_resolution is a
    real vec2<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:graph now activate on
    plain elements, not only framework islands, via a scanner whose selectors derive
    from DIRECTIVE_ATTRIBUTE_REGISTRY (a new directive is scannable by construction).
    A bare data-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 @quantize CSS transform
    resolves boundary names from the same module-graph discovery as the manifest
    (previously only dirs.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 --consumer skips the internal
    structure pass entirely (previously ~437 info findings against a consumer's own
    app); czap audit --findings streams parseable NDJSON to stdout for tooling.
  • @czap/quantizer — shader outputs in the change stream. outputChanges
    surfaces glsl and wgsl output tables alongside css — previously only css
    reached the stream and shader outputs sidestepped it.
  • @czap/edge / @czap/astroSec-CH-Viewport-Width is now a Critical-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
    resolveInitialState picks the right initial state instead of a User-Agent estimate.
    @czap/astro's CLIENT_HINTS_HEADERS now derives from @czap/edge's single
    Accept-CH/Critical-CH source 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's WGSLCompileResult) now
    carry WGSLUniformValue (number | readonly number[]) end to end — manifest,
    edge KV cache, satellite payload, boundary event detail, WebGPU writer — to
    represent vectors. Pre-1.0 minor; a consumer that narrowed the type to number
    must widen it.

Internal

  • driveUniformFromSignal continuous-signal tracking on the SharedArrayBuffer
    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 → patch diagram, placed byte-identically in README,
    GLOSSARY.md, and AUTHORING-MODEL.md and pinned by a drift guard so the three copies
    can't diverge. DOCS.md gains a four-layer routing preamble (Use / Author / Extend /
    Engine-room). The demoted package table now lives in ARCHITECTURE.md, generated from
    the workspace and drift-gated.
  • Examples ladder. examples/README.md orders 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
    GraphPatch is refused; only a validated proposal mutates the graph) and
    examples/03-cast-aria (one @quantize block 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.