diff --git a/evidence/local-20261009-effect-blink/eleven/20261009T214507Z-blink-checkpoint.json b/evidence/local-20261009-effect-blink/eleven/20261009T214507Z-blink-checkpoint.json new file mode 100644 index 0000000..c028343 --- /dev/null +++ b/evidence/local-20261009-effect-blink/eleven/20261009T214507Z-blink-checkpoint.json @@ -0,0 +1,23 @@ +{ + "path": "D:\\Documents\\Zab\\Solar\\.worktrees\\eleven-local-20261009-inspector-stroke", + "branch": "eleven/local-20261009-inspector-stroke", + "head": "421495ae759e7f69728507d557030eef640b66a3", + "ownedFiles": [ + "src/engine/vision-presenter.ts", + "src/engine/README.md", + "tests/unit/vision-session.test.ts", + "docs/development/code-map.md" + ], + "validation": [ + "230 tests in 33 files pass", + "TypeScript pass", + "Build and packaged native receiver checks pass", + "Source usage, discovery and documentation checks pass", + "Workspace layout guard pass" + ], + "remaining": [ + "No commit/push/merge; keep worktrees and shared dev active", + "Full architecture file-size check flags pre-existing node_modules-canonical-link dependency junction; it was preserved." + ], + "prismProof": "D:\\Documents\\Zab\\Prism\\.worktrees\\eleven-local-20261008-scene-sync\\evidence\\local-20261009-effect-blink\\eleven\\20261009T214507Z-blink-validation.json" +} \ No newline at end of file diff --git a/evidence/local-20261009-inspector-appearance/eleven/20261009T111756Z-agent-report.json b/evidence/local-20261009-inspector-appearance/eleven/20261009T111756Z-agent-report.json new file mode 100644 index 0000000..526eb9f --- /dev/null +++ b/evidence/local-20261009-inspector-appearance/eleven/20261009T111756Z-agent-report.json @@ -0,0 +1,18 @@ +{ + "createdAt": "2026-10-09T11:17:56.228Z", + "worktree": "D:/Documents/Zab/Solar/.worktrees/eleven-local-20261009-inspector-stroke", + "branch": "eleven/local-20261009-inspector-stroke", + "base": "421495ae759e7f69728507d557030eef640b66a3", + "ownedAppearanceFiles": [ + "public/vision/pkg/lumencast_vision_web.js", + "public/vision/pkg/lumencast_vision_web_bg.wasm", + "public/vision/vision-assets.json" + ], + "solarTag": "v3.0.0-local-15bdb393dc62695e", + "validation": [ + "Runtime package build and native receiver/asset pins passed", + "Installed active manifest matches tag", + "Prism main PID30268 uses this package; Preview ready" + ], + "state": "Packaging only this increment; inherited scene startup and scene library baseline preserved." +} \ No newline at end of file diff --git a/evidence/local-20261009-inspector-stroke/eleven/20261009T101500Z-stroke-report.json b/evidence/local-20261009-inspector-stroke/eleven/20261009T101500Z-stroke-report.json new file mode 100644 index 0000000..e5b213c --- /dev/null +++ b/evidence/local-20261009-inspector-stroke/eleven/20261009T101500Z-stroke-report.json @@ -0,0 +1,21 @@ +{ + "repository": "Solar", + "worktree": "D:/Documents/Zab/Solar/.worktrees/eleven-local-20261009-inspector-stroke", + "branch": "eleven/local-20261009-inspector-stroke", + "head": "421495ae759e7f69728507d557030eef640b66a3", + "ownedFiles": [ + "public/vision/pkg/lumencast_vision_web.js", + "public/vision/pkg/lumencast_vision_web_bg.wasm", + "public/vision/vision-assets.json" + ], + "validation": [ + "npm run build passed", + "four Vision artifact hashes verified", + "runtime layout verified", + "native LSDP receiver packaging verified" + ], + "inheritedChanges": "Session startup/local scene-library source baseline copied from forge-local-20261003-source-resolution; not Stroke edits.", + "runtime": "Prism relaunched from original scene-sync worktree .cache/jump-session, PID29112. Corrected Solar v3.0.0-local-969251fdf7872b8b active; installed asset hashes verified. Cockpit displays Editable scene and served StrokesEditor contains corrected controls.", + "remaining": "Full user-scene Stroke interaction remains to confirm in the relaunched cockpit. No push or merge.", + "workspaceGate": "Global guard blocks on three noncanonical evidence names in foreign Blue worktree eleven-local-20261008-electron-editor; no foreign files changed." +} diff --git a/evidence/local-20261010-image-blend/eleven/20261010T074400Z-checkpoint.json b/evidence/local-20261010-image-blend/eleven/20261010T074400Z-checkpoint.json new file mode 100644 index 0000000..4532e8c --- /dev/null +++ b/evidence/local-20261010-image-blend/eleven/20261010T074400Z-checkpoint.json @@ -0,0 +1,38 @@ +{ + "task": "Image blend audit and transparent output correction", + "worktree": "D:\\Documents\\Zab\\Prism\\.worktrees\\eleven-local-20261008-scene-sync", + "branch": "eleven/local-20261008-scene-sync", + "base": "9051f4b05076bd04e9c5014f2d54966991396798", + "operatorMutations": [], + "cause": "Image blend is correctly exported and handled by Vision, but native capture pixels are in separate Pulsar layers. The image cannot blend against pixels absent from its Solar band.", + "fixed": "Vision final sRGB attachment conversion now decodes the encoded premultiplied RGB, rather than decoding straight RGB and multiplying alpha. This preserves transparent image colors and opacity.", + "validation": { + "browserCases": 64, + "modes": 16, + "backgrounds": [ + "solid Solar", + "transparent" + ], + "imageAlpha": [ + 255, + 128 + ], + "nodeOpacity": 0.7, + "maxChannelError": 3, + "gpuTests": "23 passed serially; parallel driver stall stopped and retried serially", + "solarBuild": "PASS with package, native receiver and Vision pins verified", + "guard": "continue=true", + "dev": { + "tag": "v3.0.0-local-85795dd36f6bc0de", + "runner": 37424, + "previewActivationState": "ready", + "previewRenderReady": true, + "previewComposed": true + } + }, + "proof": "D:/Documents/Lumencast/lumencast-vision/.worktrees/eleven-local-20261009-inspector-stroke/evidence/local-20261010-image-blend/eleven/20261010T073938Z-image-blend-matrix.json", + "remaining": "Blend against native camera/window/screen pixels in another band is not implemented by this fix. It requires a compositor backdrop contract across Solar/Pulsar, not approximating the whole Solar band with a blend.", + "harnessNotes": "First two matrices used default ImageBitmap premultiplication and are not production-contract comparisons. 073424 uses production decode options and reproduces the transparent-output bug; 073938 is corrected.", + "delivery": "Shared dev restarted; no push or merge. Preserve existing dirty worktrees.", + "owner": "D:/Documents/Zab/Solar/.worktrees/eleven-local-20261009-inspector-stroke" +} \ No newline at end of file diff --git a/evidence/local-20261010-image-capture-blend/eleven/20261010T081455Z-checkpoint.json b/evidence/local-20261010-image-capture-blend/eleven/20261010T081455Z-checkpoint.json new file mode 100644 index 0000000..6118c63 --- /dev/null +++ b/evidence/local-20261010-image-capture-blend/eleven/20261010T081455Z-checkpoint.json @@ -0,0 +1,37 @@ +{ + "task": "Blend Solar images against native capture pixels", + "cause": "Vision could not see camera/window pixels composed later in Pulsar. Its isolated atlas band had no native backdrop.", + "implementation": "Stable isolated image bands in mixed root composition; runtime-only neutral Vision blend, native Pulsar W3C source contribution against scene prefix. Encoded premultiplied alpha-over committed on the wrapper scene item; shared CEF source untouched.", + "validation": { + "nativeGpu": { + "cases": 64, + "modes": 16, + "imageAlpha": [ + 255, + 128 + ], + "opacity": [ + 1, + 0.7 + ], + "maxChannelError": 2, + "proof": "D:/Documents/Zab/Pulsar/.worktrees/eleven-local-20261009-capture-effects/evidence/local-20261010-image-capture-blend/eleven/20261010T080200Z-pixel-matrix.json" + }, + "prism": "107 targeted tests; node/web TypeScript; code:check 0 drifts", + "solar": "231 tests across 33 files; code map current; lib/host/server builds and layout/native hash checks pass", + "dev": { + "tag": "v3.0.0-local-bca8052125ebef3a", + "previewRenderReady": true, + "multiplyFilterMode": 1, + "restoredFilterMode": 0, + "operatorMutation": "Only image blend changed temporarily to multiply, then restored to absent/normal; transforms/effects untouched" + } + }, + "limits": "GPU matrix uses isolated native fixtures. Live Editable scene verifies multiply across camera/window layers and restoration. Nested mixed capture groups are not covered by this root-composition change; no exhaustive temporal blink certification.", + "buildNote": "Foreign sponsor-motion harness uses this dist/native binary. Preserved it; rebuilt lib with emptyOutDir=false, host/server normally, verified retained native binary hash against configured source before packaging and rebuilt native manifest. No unrelated process stopped.", + "delivery": "Same shared dev snapshot and existing worktrees; no push/merge. Preserve inherited changes.", + "owner": "D:/Documents/Zab/Solar/.worktrees/eleven-local-20261009-inspector-stroke", + "branch": "eleven/local-20261009-inspector-stroke", + "head": "421495ae759e7f69728507d557030eef640b66a3", + "changedFiles": "M docs/development/code-map.md\n M public/vision/pkg/lumencast_vision_web.js\n M public/vision/pkg/lumencast_vision_web_bg.wasm\n M public/vision/vision-assets.json\n M scripts/README.md\n M src/engine/README.md\n M src/engine/vision-presenter.ts\n M src/host-entry.ts\n M src/scenes/README.md\n M src/scenes/canvas.ts\n M src/scenes/editable-bindings.ts\n M src/scenes/startup.ts\n M src/scenes/types.ts\n M src/server/README.md\n M src/server/index.ts\n M tests/unit/editable-bindings.test.ts\n M tests/unit/startup-cache.test.ts\n?? evidence/local-20261009-effect-blink/\n?? evidence/local-20261009-inspector-appearance/\n?? evidence/local-20261009-inspector-stroke/\n?? evidence/local-20261010-image-blend/\n?? evidence/local-20261010-live-typography/\n?? node_modules-canonical-link/\n?? src/scenes/local-library.ts\n?? src/server/scene-library.ts\n?? tests/unit/scene-library.test.ts\n?? tests/unit/vision-session.test.ts" +} \ No newline at end of file diff --git a/evidence/local-20261010-inspector-completeness/eleven/20261010T160231Z-agent-checkpoint.json b/evidence/local-20261010-inspector-completeness/eleven/20261010T160231Z-agent-checkpoint.json new file mode 100644 index 0000000..f84fe58 --- /dev/null +++ b/evidence/local-20261010-inspector-completeness/eleven/20261010T160231Z-agent-checkpoint.json @@ -0,0 +1,36 @@ +{ + "scope": "inspector audit and native rounding/mask corrections; inherited dirty work preserved", + "path": "D:/Documents/Zab/Solar/.worktrees/eleven-local-20261009-inspector-stroke", + "branch": "eleven/local-20261009-inspector-stroke", + "head": "421495ae759e7f69728507d557030eef640b66a3", + "remaining": "Overall canvas-like completeness is not achieved. See Prism audit report. No global commit/push/merge.", + "runtime": { + "solarTag": "v3.0.0-local-c4e88ffb155f4df0", + "visionWasmSha256": "fed9092baa6cbc7227944819bfc028983a72d988b7b19d695fab7b327c48a288", + "installedMatchesQualifiedVision": true + }, + "filesRevisited": [ + "public/vision/pkg/lumencast_vision_web.js", + "public/vision/pkg/lumencast_vision_web_bg.wasm", + "public/vision/vision-assets.json", + "dist/host/vision/pkg/lumencast_vision_web.js", + "dist/host/vision/pkg/lumencast_vision_web_bg.wasm", + "dist/host/vision/vision-assets.json" + ], + "preserve": "These files may contain inherited dirty changes. This is a responsibility manifest, not an isolated commit diff.", + "validation": { + "inspectorLsmlLayoutTests": 254, + "visionRetainedTests": 25, + "gpuInsetTest": "passed", + "nativePixelProbes": 8, + "typescript": "passed", + "lint": "passed", + "discovery": "zero blocking drifts", + "workspaceGuard": "verified", + "liveAndRecording": "not exercised" + }, + "commonVoiceCommits": [ + "cf26783b", + "ca1711bb" + ] +} \ No newline at end of file diff --git a/evidence/local-20261010-inspector-completeness/eleven/20261010T173909Z-checkpoint.json b/evidence/local-20261010-inspector-completeness/eleven/20261010T173909Z-checkpoint.json new file mode 100644 index 0000000..a636080 --- /dev/null +++ b/evidence/local-20261010-inspector-completeness/eleven/20261010T173909Z-checkpoint.json @@ -0,0 +1,29 @@ +{ + "identity": { + "path": "D:/Documents/Zab/Solar/.worktrees/eleven-local-20261009-inspector-stroke", + "top": "D:/Documents/Zab/Solar/.worktrees/eleven-local-20261009-inspector-stroke", + "commonDir": "D:/Documents/Zab/Solar/.git", + "branch": "eleven/local-20261009-inspector-stroke", + "head": "421495ae759e7f69728507d557030eef640b66a3", + "status": "M docs/development/code-map.md\n M public/vision/pkg/lumencast_vision_web.js\n M public/vision/pkg/lumencast_vision_web_bg.wasm\n M public/vision/vision-assets.json\n M scripts/README.md\n M src/engine/README.md\n M src/engine/vision-presenter.ts\n M src/host-entry.ts\n M src/scenes/README.md\n M src/scenes/canvas.ts\n M src/scenes/editable-bindings.ts\n M src/scenes/startup.ts\n M src/scenes/types.ts\n M src/server/README.md\n M src/server/index.ts\n M tests/unit/editable-bindings.test.ts\n M tests/unit/startup-cache.test.ts\n?? evidence/local-20261009-effect-blink/\n?? evidence/local-20261009-inspector-appearance/\n?? evidence/local-20261009-inspector-stroke/\n?? evidence/local-20261010-image-blend/\n?? evidence/local-20261010-image-capture-blend/\n?? evidence/local-20261010-inspector-completeness/\n?? evidence/local-20261010-live-typography/\n?? node_modules-canonical-link/\n?? src/scenes/local-library.ts\n?? src/server/scene-library.ts\n?? tests/unit/scene-library.test.ts\n?? tests/unit/vision-session.test.ts", + "worktrees": "worktree D:/Documents/Zab/Solar\nHEAD f5c303f4709d12caa8f2e0c4ae263aa53717591d\nbranch refs/heads/main\n\nworktree D:/Documents/Zab/Solar/.worktrees/eleven-local-20260919-feature-modules\nHEAD c8dda46e78062e275138082f3d2c3796032d02d3\nbranch refs/heads/eleven/local-20260919-feature-modules\n\nworktree D:/Documents/Zab/Solar/.worktrees/eleven-local-20260928-lumencast-runtime-adoption\nHEAD 9e583913aa59f3d8e8397f2f238bda46001aecd9\nbranch refs/heads/eleven/local-20260928-lumencast-runtime-adoption\n\nworktree D:/Documents/Zab/Solar/.worktrees/eleven-local-20260929-camera-routing\nHEAD 537b606f9ecf97b5e0ce0f5bd80e88350f0823d5\nbranch refs/heads/eleven/local-20260929-camera-routing\n\nworktree D:/Documents/Zab/Solar/.worktrees/eleven-local-20261006-solar-editable-cache\nHEAD 5deffc0b9d996fd97d9f791d508696d16d317403\nbranch refs/heads/eleven/local-20261006-solar-editable-cache\n\nworktree D:/Documents/Zab/Solar/.worktrees/eleven-local-20261006-solar-render-asset-batch\nHEAD 9109e4ca4200037732910d20688a82f18eba038c\nbranch refs/heads/eleven/local-20261006-solar-render-asset-batch\n\nworktree D:/Documents/Zab/Solar/.worktrees/eleven-local-20261006-solar-render-asset-sites\nHEAD ea85c44d3859fee4009687139ca82d139be5cb55\nbranch refs/heads/eleven/local-20261006-solar-render-asset-sites\n\nworktree D:/Documents/Zab/Solar/.worktrees/eleven-local-20261009-capability-audit\nHEAD 421495ae759e7f69728507d557030eef640b66a3\nbranch refs/heads/eleven/local-20261009-capability-audit\n\nworktree D:/Documents/Zab/Solar/.worktrees/eleven-local-20261009-inspector-stroke\nHEAD 421495ae759e7f69728507d557030eef640b66a3\nbranch refs/heads/eleven/local-20261009-inspector-stroke\n\nworktree D:/Documents/Zab/Solar/.worktrees/eleven-local-20261010-kumiki-motion\nHEAD 2f97657b756619f97e6d07620d62a0eee65c3181\nbranch refs/heads/eleven/local-20261010-kumiki-motion\n\nworktree D:/Documents/Zab/Solar/.worktrees/eleven-local-20261010-sound-design\nHEAD 13507b03424d15debd1ed441d0ff322521dbf98a\nbranch refs/heads/eleven/local-20261010-sound-design\n\nworktree D:/Documents/Zab/Solar/.worktrees/eleven-local-20261010-sponsor-motion\nHEAD 94608bc4d3c0afbd8f8d9faceca8cc97583a4033\nbranch refs/heads/eleven/local-20261010-sponsor-motion\n\nworktree D:/Documents/Zab/Solar/.worktrees/forge-local-20261003-source-resolution\nHEAD 421495ae759e7f69728507d557030eef640b66a3\nbranch refs/heads/forge/local-20261003-source-resolution" + }, + "validation": [ + "Host build: 63 modules", + "Bundle check passed, five Vision assets and one emitted copy each", + "Four asset pins passed", + "Held native LSDP binary preserved, native package check passed" + ], + "remaining": [ + "External scene instances and editor repeat authoring", + "Live text-file provider", + "Physical capture alpha/luminance/vector masks", + "Grid hug and resolved editor grid hit-test/reparent geometry", + "Fully ordered and repeated material effect stack parity", + "Exhaustive per-control/per-source visual matrix, including physical capture availability and video controls", + "Inherited historical capability-evolution drift outside owned entries", + "Voice ASR replacement still owned and being qualified by coordinated chat" + ], + "inheritedChangesPreserved": true, + "pushedOrMerged": false +} diff --git a/evidence/local-20261010-live-typography/eleven/20261010T064305Z-checkpoint.json b/evidence/local-20261010-live-typography/eleven/20261010T064305Z-checkpoint.json new file mode 100644 index 0000000..2a22ea7 --- /dev/null +++ b/evidence/local-20261010-live-typography/eleven/20261010T064305Z-checkpoint.json @@ -0,0 +1,20 @@ +{ + "worktree": "D:/Documents/Zab/Solar/.worktrees/eleven-local-20261009-inspector-stroke", + "branch": "eleven/local-20261009-inspector-stroke", + "head": "421495ae759e7f69728507d557030eef640b66a3", + "changedThisIncrement": [ + "public/vision/pkg/lumencast_vision_web.js", + "public/vision/pkg/lumencast_vision_web_bg.wasm", + "public/vision/vision-assets.json", + "src/engine/README.md" + ], + "runtime": "v3.0.0-local-2f6a7f901af8b4f4", + "validation": [ + "230 unit tests passed", + "Vision asset pins passed", + "runtime package and layout passed", + "documentation and code discovery passed" + ], + "crossRepositoryProof": "Prism/evidence/local-20261010-live-typography/eleven/20261010T064009Z-typography-focused-proof.json", + "state": "local dev installed; no commit/push/merge; inherited work preserved" +} \ No newline at end of file diff --git a/evidence/local-20261011-vision-merge/eleven/20261011T072513Z-session-manifest.json b/evidence/local-20261011-vision-merge/eleven/20261011T072513Z-session-manifest.json new file mode 100644 index 0000000..273df70 --- /dev/null +++ b/evidence/local-20261011-vision-merge/eleven/20261011T072513Z-session-manifest.json @@ -0,0 +1,14 @@ +{ + "session": "local-20261011-solar-vision-merge", + "userMandate": "Group, push, and merge all remaining Solar and Vision work from this collaboration.", + "repository": "ZabLaboratory/Solar", + "worktree": "D:/Documents/Zab/Solar/.worktrees/eleven-local-20261011-vision-merge", + "branch": "eleven/local-20261011-vision-merge", + "baseRef": "origin/main", + "baseRevision": "9c8f837", + "authorizedOperations": ["inspect", "test", "commit", "push", "open-pr", "merge-pr"], + "scope": ["Solar scene-library synchronization", "Vision startup and retained-engine integration", "bundled Vision runtime update", "related evidence"], + "exclusions": ["uncommitted historical evidence deletions", "node_modules links", "caches", "unrelated worktree changes"], + "mergeGates": ["targeted tests pass", "typecheck and build pass", "CI green", "signed commits", "post-merge verification"], + "humanApproval": "User explicitly authorized pushing and merging all Solar and Vision work in this request." +} diff --git a/evidence/local-20261011-vision-merge/eleven/20261011T074157Z-validation-report.md b/evidence/local-20261011-vision-merge/eleven/20261011T074157Z-validation-report.md new file mode 100644 index 0000000..f0f9805 --- /dev/null +++ b/evidence/local-20261011-vision-merge/eleven/20261011T074157Z-validation-report.md @@ -0,0 +1,18 @@ +# Solar consolidation validation + +- Repository/worktree: `ZabLaboratory/Solar`, `eleven/local-20261011-vision-merge` +- Base: `origin/main` at `9c8f837d5049a54a61ff83aba1fe9e9c49c35b48` +- Scope: pin the new signed Vision build, keep its upstream source provenance, and retain regression tests/documentation for mixed native composition. The scene-local-library and launch-sync implementation is already present in this refreshed `main`; it was not duplicated. +- Vision source commit: `64d0cfc7d7a539d1e4c7fcfcddafbf771bacd49e`. The matching generated JS/WASM files and SHA-256 pins are in `public/vision/`; Vision PR #7 merged as verified revision `e5b2720589e30820bd6b70b89cc78fec0ab6153a`. + +## Validation + +- `npm ci` — passed. npm reported 6 dependency audit findings (5 moderate, 1 high); dependencies were not changed. +- `npm run lint` — passed. +- `npm run typecheck` — passed. +- `npm test -- --reporter=dot` — 35 files, 261 tests passed. +- `npm run build` — passed. +- `npm run check:bundle` — passed: five Vision assets, one runtime copy each, host bundle and artifact hashes verified. +- `npm run check:architecture` — passed: all 50 source files reachable, code map current, documentation checks clean, file-size guard clean. + +Vision PR #7 merged after all cross-platform checks passed. Solar manifest pins the exact GitHub-integrated commit in `merged_revision`. \ No newline at end of file diff --git a/public/vision/pkg/lumencast_vision_web.js b/public/vision/pkg/lumencast_vision_web.js index d8e7674..4f9589a 100644 --- a/public/vision/pkg/lumencast_vision_web.js +++ b/public/vision/pkg/lumencast_vision_web.js @@ -1457,7 +1457,7 @@ function __wbg_get_imports() { const a = state0.a; state0.a = 0; try { - return __wasm_bindgen_func_elem_9957(a, state0.b, arg0, arg1); + return __wasm_bindgen_func_elem_9970(a, state0.b, arg0, arg1); } finally { state0.a = a; } @@ -2466,23 +2466,23 @@ function __wbg_get_imports() { getObject(arg0).writeTexture(getObject(arg1), getArrayU8FromWasm0(arg2, arg3), getObject(arg4), getObject(arg5)); }, arguments); }, __wbindgen_generic_0000000000000001: function(arg0, arg1) { - // Cast intrinsic for `Closure(Closure { owned: true, function: Function { arguments: [Externref], shim_idx: 2767, ret: Result(Unit), inner_ret: Some(Result(Unit)) }, mutable: true }) -> Externref`. - const ret = makeMutClosure(arg0, arg1, __wasm_bindgen_func_elem_9939); + // Cast intrinsic for `Closure(Closure { owned: true, function: Function { arguments: [Externref], shim_idx: 2769, ret: Result(Unit), inner_ret: Some(Result(Unit)) }, mutable: true }) -> Externref`. + const ret = makeMutClosure(arg0, arg1, __wasm_bindgen_func_elem_9952); return addHeapObject(ret); }, __wbindgen_generic_0000000000000002: function(arg0, arg1) { // Cast intrinsic for `Closure(Closure { owned: true, function: Function { arguments: [NamedExternref("GPUDevice")], shim_idx: 667, ret: Result(Unit), inner_ret: Some(Result(Unit)) }, mutable: true }) -> Externref`. - const ret = makeMutClosure(arg0, arg1, __wasm_bindgen_func_elem_3808); + const ret = makeMutClosure(arg0, arg1, __wasm_bindgen_func_elem_3817); return addHeapObject(ret); }, __wbindgen_generic_0000000000000003: function(arg0, arg1) { // Cast intrinsic for `Closure(Closure { owned: true, function: Function { arguments: [NamedExternref("any")], shim_idx: 667, ret: Result(Unit), inner_ret: Some(Result(Unit)) }, mutable: true }) -> Externref`. - const ret = makeMutClosure(arg0, arg1, __wasm_bindgen_func_elem_3808_24); + const ret = makeMutClosure(arg0, arg1, __wasm_bindgen_func_elem_3817_24); return addHeapObject(ret); }, __wbindgen_generic_0000000000000004: function(arg0, arg1) { // Cast intrinsic for `Closure(Closure { owned: true, function: Function { arguments: [NamedExternref("undefined")], shim_idx: 667, ret: Result(Unit), inner_ret: Some(Result(Unit)) }, mutable: true }) -> Externref`. - const ret = makeMutClosure(arg0, arg1, __wasm_bindgen_func_elem_3808_25); + const ret = makeMutClosure(arg0, arg1, __wasm_bindgen_func_elem_3817_25); return addHeapObject(ret); }, __wbindgen_generic_0000000000000005: function(arg0) { @@ -2544,14 +2544,14 @@ function __wbg_get_imports() { }; } -function __wasm_bindgen_func_elem_9957(arg0, arg1, arg2, arg3) { - wasm.__wasm_bindgen_func_elem_9957(arg0, arg1, addHeapObject(arg2), addHeapObject(arg3)); +function __wasm_bindgen_func_elem_9970(arg0, arg1, arg2, arg3) { + wasm.__wasm_bindgen_func_elem_9970(arg0, arg1, addHeapObject(arg2), addHeapObject(arg3)); } -function __wasm_bindgen_func_elem_9939(arg0, arg1, arg2) { +function __wasm_bindgen_func_elem_9952(arg0, arg1, arg2) { try { const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); - wasm.__wasm_bindgen_func_elem_9939(retptr, arg0, arg1, addHeapObject(arg2)); + wasm.__wasm_bindgen_func_elem_9952(retptr, arg0, arg1, addHeapObject(arg2)); var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true); var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true); if (r1) { @@ -2562,10 +2562,10 @@ function __wasm_bindgen_func_elem_9939(arg0, arg1, arg2) { } } -function __wasm_bindgen_func_elem_3808(arg0, arg1, arg2) { +function __wasm_bindgen_func_elem_3817(arg0, arg1, arg2) { try { const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); - wasm.__wasm_bindgen_func_elem_3808(retptr, arg0, arg1, addHeapObject(arg2)); + wasm.__wasm_bindgen_func_elem_3817(retptr, arg0, arg1, addHeapObject(arg2)); var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true); var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true); if (r1) { @@ -2576,10 +2576,10 @@ function __wasm_bindgen_func_elem_3808(arg0, arg1, arg2) { } } -function __wasm_bindgen_func_elem_3808_24(arg0, arg1, arg2) { +function __wasm_bindgen_func_elem_3817_24(arg0, arg1, arg2) { try { const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); - wasm.__wasm_bindgen_func_elem_3808_24(retptr, arg0, arg1, addHeapObject(arg2)); + wasm.__wasm_bindgen_func_elem_3817_24(retptr, arg0, arg1, addHeapObject(arg2)); var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true); var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true); if (r1) { @@ -2590,10 +2590,10 @@ function __wasm_bindgen_func_elem_3808_24(arg0, arg1, arg2) { } } -function __wasm_bindgen_func_elem_3808_25(arg0, arg1, arg2) { +function __wasm_bindgen_func_elem_3817_25(arg0, arg1, arg2) { try { const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); - wasm.__wasm_bindgen_func_elem_3808_25(retptr, arg0, arg1, addHeapObject(arg2)); + wasm.__wasm_bindgen_func_elem_3817_25(retptr, arg0, arg1, addHeapObject(arg2)); var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true); var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true); if (r1) { diff --git a/public/vision/pkg/lumencast_vision_web_bg.wasm b/public/vision/pkg/lumencast_vision_web_bg.wasm index 0456143..4366ef8 100644 Binary files a/public/vision/pkg/lumencast_vision_web_bg.wasm and b/public/vision/pkg/lumencast_vision_web_bg.wasm differ diff --git a/public/vision/vision-assets.json b/public/vision/vision-assets.json index 999eb54..5158d3e 100644 --- a/public/vision/vision-assets.json +++ b/public/vision/vision-assets.json @@ -1,8 +1,8 @@ { "schema": "solar.vision-assets.v1", "upstream": "Lumencast/lumencast-vision", - "base_revision": "61739735aa67eed69d6a4d8a86650717d46d8e98", - "source_state": "Retained vector trim and motion drawing reuse built at source_revision, contained in verified Vision merge bb6d57f. Solar owns path morph playback; no deployment claimed.", + "base_revision": "bb6d57f4bb941f79e0d11d31dc3b582dcf762662", + "source_state": "Retained image/text surface materials, live mutations, and image corner clipping built from the signed Vision consolidation commit, now merged in verified Vision revision e5b2720589e30820bd6b70b89cc78fec0ab6153a.", "files": { "ui/mainpresenter.mjs": { "bytes": 26045, @@ -13,20 +13,20 @@ "sha256": "d49ed45181a8aa714f675aaa24f5439e9547b274d6eba6cd2bb995c981765c5f" }, "pkg/lumencast_vision_web.js": { - "bytes": 148483, - "sha256": "b81fc4ac48aa72b23e85dbe8803b951059a5a9b55c8175146a65bb0ca9d395eb" + "sha256": "85092f02f89e8bfc4bb172c7dd693c5f4b2c5bcded4f1778ff2048edeb4e0430", + "bytes": 148483 }, "pkg/lumencast_vision_web_bg.wasm": { - "bytes": 10283300, - "sha256": "443c9d9f1b58fd123508b067cc1cd34f0101389e2023c6a8c18e790a3a3f03e5" + "sha256": "e535ae4e1c596c7ade8d5110498f94154634a20765f2ecf2e39c275572e64f3c", + "bytes": 10310965 } }, "source_provenance": { "repository": "Lumencast/lumencast-vision", - "engine_base": "61739735aa67eed69d6a4d8a86650717d46d8e98", - "engine_branch": "eleven/local-20261010-continuous-motion", - "engine_evidence": "evidence/local-20261010-continuous-motion/eleven/" + "engine_base": "bb6d57f4bb941f79e0d11d31dc3b582dcf762662", + "engine_branch": "eleven/local-20261011-vision-merge", + "engine_evidence": "evidence/local-20261011-vision-merge/eleven/" }, - "source_revision": "14658e3738399fd95b1498569de369a190988b17", - "merged_revision": "bb6d57f4bb941f79e0d11d31dc3b582dcf762662" + "source_revision": "64d0cfc7d7a539d1e4c7fcfcddafbf771bacd49e", + "merged_revision": "e5b2720589e30820bd6b70b89cc78fec0ab6153a" } diff --git a/src/scenes/README.md b/src/scenes/README.md index 1489a1c..1fd8386 100644 --- a/src/scenes/README.md +++ b/src/scenes/README.md @@ -125,3 +125,12 @@ Within the active `NativeSceneAssets`, owned font snapshots also survive structu rebuilds. Plain delivery arrays are copied on acquisition, so subsequent caller mutation cannot invalidate that verification. This active owner is released on scene change; no scene instance or inactive asset owner is retained. + +Mixed native compositions isolate root images above captures into their own +stable bands, even in normal blend mode. Other root objects with non-normal +blend are isolated too. Vision renders those nodes with normal blend and their +original opacity, geometry and effects; the source LSML remains intact. Pulsar +owns the final W3C blend against native captures and previous Solar bands. +Pure Solar scenes retain Vision's existing blend implementation. The isolated +source must never contain adjacent ordinary objects or a second application of +the same blend. `tests/unit/editable-bindings.test.ts` checks this projection. diff --git a/tests/unit/editable-bindings.test.ts b/tests/unit/editable-bindings.test.ts index 0085a88..2a4856e 100644 --- a/tests/unit/editable-bindings.test.ts +++ b/tests/unit/editable-bindings.test.ts @@ -152,3 +152,56 @@ it("omits empty trailing capture bands while retaining inner z-order gaps", asyn expect(bands[1]!.children[0]!.children).toEqual([]); expect(bands[2]!.position.y).toBe(2160); }); + +it("isolates mixed-scene blend objects between ordinary Solar bands", async () => { + const { prepareNativeComposition } = + await import("../../src/scenes/editable-bindings"); + const document = { + scene_id: "mixed", + scene_version: "base", + layout: { + kind: "frame", + children: [ + { kind: "shape", id: "bottom", blendMode: "multiply" }, + { kind: "x-zab.capture", id: "camera" }, + { kind: "text", id: "before" }, + { + kind: "image", + id: "image", + blendMode: "difference", + opacity: 0.7, + rotation: 30, + }, + { kind: "text", id: "after" }, + ], + }, + }; + prepareNativeComposition(document, { width: 1920, height: 1080 }); + const layout = document.layout as unknown as { + size: { h: number }; + children: Array<{ + children: Array<{ + children: Array<{ + id: string; + blendMode?: string; + opacity?: number; + rotation?: number; + }>; + }>; + }>; + }; + expect(layout.size.h).toBe(4320); + const bands = layout.children.map((b) => b.children[0]!.children); + expect(bands.map((b) => b.map((c) => c.id))).toEqual([ + ["bottom"], + ["before"], + ["image"], + ["after"], + ]); + expect(bands[0]![0]!.blendMode).toBe("multiply"); + expect(bands[2]![0]).toMatchObject({ + blendMode: "normal", + opacity: 0.7, + rotation: 30, + }); +});