build(deps): bump @lumencast/runtime to 0.7.0#25
Conversation
Resolve @lumencast/runtime ^0.6.0 -> ^0.7.0 (lockfile 0.7.0, transitive @lumencast/protocol 0.6.0 -> 0.7.0). Solar's adapter surface (mount, MountOptions, SolarError/SolarStatus) maps onto unchanged runtime types, so no adapter code change was needed. Re-target the ADR 011 I7 keyframe-compositing patch-package patch to 0.7.0: the fix is still not upstreamed (display:contents dead box + translateX/Y -> framer x/y mapping both absent in published 0.7.0), so the patch stays necessary. Regenerated against the 0.7.0 files (5 file diffs, same edits); obsolete 0.6.0 patch removed. npm ci re-applies it. Refs #24 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@lumencast/runtime 0.7.0 (LSML 1.2, ADR 002 #F - Bastion T1/T2) gates every image src through gateSrc() before the DOM, deny-by-default: T2 admits only https: schemes, T1 requires the URL host in the bundle's assets.allowedHosts. A bundle with no allowlist has its <img> omitted. The render-vocab test served http://x/logo.svg with no allowlist, so under 0.7 no <img> rendered and waitFor() timed out. Declare assets.allowedHosts: ["cdn.example"] and serve https://cdn.example/...; width/height/src assertions preserved. Legitimate runtime hardening, not a Solar regression. Document the bump in CHANGELOG (Unreleased). Refs #24 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The prod dependency-audit CI job (npm audit --omit=dev --audit-level=high) fails on ws 8.0.0-8.20.1 (GHSA-58qx-3vcg-4xpx uninitialized memory disclosure + GHSA-96hv-2xvq-fx4p memory-exhaustion DoS), pulled transitively on the prod path via @lumencast/protocol/@lumencast/runtime (both pin ws ^8.18.0). The advisory was published after main's last green run, so it is environmental, not introduced by the runtime 0.7.0 bump (ws resolved identically under 0.6.0). Patched ws 8.21.0 is within the existing ^8.18.0 range; resolution-only bump (constraint -> ^8.21.0), no other deps drift. Prod audit now reports 0 vulnerabilities; lint/typecheck/test/build/npm ci all green. Refs #24 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
Update — CI now fully green (5/5). The This advisory was published after main's last green run (2026-06-13) and resolves identically under 0.6.0 — it is environmental, not introduced by the runtime 0.7.0 bump. Fixed with a resolution-only bump to the patched Remaining |
What
Bumps
@lumencast/runtime^0.6.0 → ^0.7.0 (lockfile resolves0.7.0; transitive@lumencast/protocol0.6.0 → 0.7.0). Solar is the sole renderer / thin adapter over the runtime (ADR 007).Breaking changes encountered & how adapted
Adapter API: no change. The runtime symbols Solar consumes (
mount,MountOptions,LumencastError,LumencastStatus,RenderNode,RenderBundle) are byte-identical 0.6 → 0.7.src/mount.tsandsrc/types/index.tsare untouched;tsc -bgreen without edits.patch-packageretarget. The committed ADR 011 I7 keyframe-compositing patch (display:contentsdead-box +translateX/Y→ framerx/ymapping) is still not upstreamed in 0.7.0 — verified against the published dist. The patch remains necessary; regenerated against the 0.7.0 files (5 file diffs, same edits) aspatches/@lumencast+runtime+0.7.0.patch; the obsolete 0.6.0 patch is removed.npm cire-applies cleanly.New deny-by-default asset host gate (behaviour change). 0.7.0 (LSML 1.2, ADR 002 #F — Bastion T1/T2) routes every image
srcthroughgateSrc()before the DOM: T2 admits onlyhttps:schemes, T1 requires the URL host in the bundle'sassets.allowedHosts. A bundle with no allowlist has its<img>omitted entirely.tests/unit/render.test.tsxservedhttp://x/logo.svgwith no allowlist → no<img>under 0.7 →waitFortimeout. Adapted the test bundle to declareassets.allowedHosts: ["cdn.example"]and servehttps://cdn.example/logo.svg; width/height/src assertions preserved. Legitimate runtime hardening, not a Solar regression.Verification (real, executed)
eslint --max-warnings 0tsc -b(strict)vitest runnpm run build(lib + host + html)npm ci(patch re-apply)Sensitive surface note (deps)
npm auditreports a highws@8.20.0advisory on the prod path — pre-existing, resolved identically onorigin/mainunder 0.6.0 (the^8.18.0constraint is unchanged across the bump). This bump introduces zero new audit findings. Flagging per the deps-surface rule; not fixed here (out of scope — awsfix would drift unrelated deps).Render-headless surface (pillar 3 quality-gate, for a future amendment)
State of the
bundle → PNGbuilding blocks in 0.7.0:BroadcastMode— exists (modes/broadcast.tsx, "pure scene render, no UI chrome"), but internal: not exported from the packageindex.d.ts. SignatureBroadcastMode(): JSX.Element, reads its data from React context.LumencastRuntimeProvider— exists (overlay/runtime-context.tsx), internal. Render is driven by aLumencastRuntimecontext value{ mode, store, bundle, status, sendInput }. This is the seam a headless renderer would feed: a bundle + a populatedstore+status→<BroadcastMode/>under the provider, renderable withrenderToStaticMarkup.compileBundle— does not exist in 0.7.0 (no LSML→bundle compiler in the runtime; bundle.ts notes a "forthcoming@lumencast/compiler"). A headless path consumes an already-compiledRenderBundle.status:"live"without a WS — no public injection point.mount()always opens a WS;statusderives from the transportConnectionStatus. Headlessbundle → PNGwould need either a new runtime entry that rendersBroadcastModefrom a static bundle+state (bypassing the WS) or these internals promoted to the public surface.Net for pillar 3: 0.7 neither facilitates nor blocks headless render — the pieces (
BroadcastMode, provider,RenderBundle) are present and clean but all internal, and there is no no-WS static-render entry. An amendment would need a runtime change (new public export or headless entry), i.e. a Lumencast-side ADR — not a Solar-side change.Refs #24
🤖 Generated with Claude Code