v0.5.0
[0.5.0] - 2026-06-30
A "make-it-loud" release: every fix turns a silent degradation into a loud
diagnostic through the existing channel, plus a packaging hardening and a
DAG-compaction feature — surfaced by dogfooding the framework on real apps, and
hardened by an adversarial review pass.
Added
@czap/core— receipt-DAG compaction.DAG.checkpoint(dag, { below })+
DAG.spliceCheckpointreclaim a long-lived receipt DAG's dominated prefix into
a content-addressed checkpoint attestation (drop-only; the spliced DAG equals a
fresh reload).Receipt.validateChaingainsChainValidationOptions { base, checkpoint }for cross-boundary validation (a compacted tail is verifiable only
against its checkpoint). See ADR-0026.@czap/web— SSE overflow policy.SSEConfig.overflow
(drop-newest | drop-oldest | coalesce-by-id, defaultcoalesce-by-id) + an
enrichedBackpressureHint(policy/droppedCount/coalescedCount) + a
stateChangesedge stream. See ADR-0005 (SSE addendum).create-liteshipnow scaffoldseffect(^4.0.0-beta.32), fixing an
unmet peer on a fresh project.
Fixed
client:gpuwarns once (canvas-default-size) when its host has no layout
at boot and the canvas falls back to the 300×150 default — previously a silent
tiny render.- Signal directives warn once when a boundary input is recognized but has no
live producer on that surface (signal-input-unserved-here) — previously a
silent freeze; theuniform-signal"likely a typo" mislabel is split into two
disjoint codes. @czap/genuirejects an unsupported registered handler prop (on*≠
onClick, or a non-stringonClick) at validation instead of silently dropping
it at render.@czap/webSSE no longer silently drop-newests under saturation (see
Added), and the heartbeat watchdog now reconnects on timeout.client:stream/client:llmnow run on the hardenedSSE.create
connection (unified reconnect/resumption + the heartbeat reconnect fix),
processing each message synchronously in the dispatch turn with clean teardown
(dispose / VT-swap single-boot);client:llmterminal frames close the live
connection.
Changed
effectpeer range capped to>=4.0.0-beta.32 <5across all@czap/*
packages (was an unbounded>=4.0.0-beta.0), pinned bypnpm.overrides.effect
and a drift guard.
Security
Receipt.validateChainDetailednow requires a verified checkpoint to
validate a compacted tail; abasewatermark alone is rejected
(checkpoint_invalid) — previously a truncated chain could validate with no
proof of compaction.
Internal
- Cell↔DOM boundary committed as a guarded law (ADR-0027). Audit consumer-mode
disallowed-edge coverage. Fixed two Effect-beta issues uncovered during review
(Scope.usefinalizing immediately; an overflow-buffer CPU spin). api-surface
snapshot regenerated for the new exports.
Breaking
@czap/genuirenderFromCatalognow returns a tagged
RenderFromCatalogResult({ ok }union) instead ofboolean. Callers using
if (renderFromCatalog(...))must switch to.ok.