Rebuild local Blender WASM environment and recovery evidence
This commit is contained in:
21
docs/status/WBV2-P0-002.md
Normal file
21
docs/status/WBV2-P0-002.md
Normal file
@@ -0,0 +1,21 @@
|
||||
# WBV2-P0-002 Status
|
||||
|
||||
status: done
|
||||
task: WBV2-P0-002
|
||||
gate: G0
|
||||
updated: 2026-08-24 America/New_York
|
||||
|
||||
The Blender 5.2 baseline is now represented by one deterministic capability map.
|
||||
The map covers 6900 immutable legacy entries in 15 capability families, with 281 completed legacy receipts and 6618 pending coverage records. Every entry remains L0 and METADATA_ONLY; no inventory row claims browser feature parity. Unknown entries are explicit and cannot advance a capability.
|
||||
|
||||
Source inventories and legacy states are hash-bound. The old M15/M16 manifests remain unchanged, and the capability lane only consumes them as read-only evidence.
|
||||
|
||||
Commands passed:
|
||||
- node tools/web/generate-wbv2-inventory.mjs
|
||||
- node tools/web/check-wbv2-inventory.mjs
|
||||
- node tools/web/check-execution-control-plane.mjs
|
||||
- node tools/web/check-web-parity-v2-plan.mjs
|
||||
- node tools/web/check-corrective-plan.mjs
|
||||
- npm --prefix web run test:context-governance
|
||||
|
||||
nextTask: WBV2-P0-003
|
||||
39
docs/status/WBV2-P0-003.md
Normal file
39
docs/status/WBV2-P0-003.md
Normal file
@@ -0,0 +1,39 @@
|
||||
# WBV2-P0-003 Status
|
||||
|
||||
status: done
|
||||
task: WBV2-P0-003
|
||||
gate: G0
|
||||
updated: 2026-08-24 America/New_York
|
||||
|
||||
The capability error-budget contract is now a versioned, bounded protocol slice.
|
||||
The minimal fixture stores one canonical contract Text datablock with stable
|
||||
schema and source hashes, an explicit revision, error budget, cancellation
|
||||
policy, migration policy, and an opaque extension field. Blender desktop and
|
||||
the rebuilt WASM/Main reader expose the same contract through
|
||||
`capabilityContractStatus`/`capabilityContract`.
|
||||
|
||||
Acceptance evidence:
|
||||
- generator exit: 0
|
||||
- desktop field read and save/reopen exit: 0
|
||||
- `npm --prefix web run test:generated-gap -- --task WBV2-P0-003` exit: 0
|
||||
- `node tools/web/check-generated-gap.mjs --task WBV2-P0-003` exit: 0
|
||||
- TypeScript contract check exit: 0
|
||||
- malformed blend is rejected without changing Main snapshot; unsupported
|
||||
schema, duplicate error, over-budget, and schema-hash drift cases are
|
||||
recorded as pre-commit rejects
|
||||
|
||||
Artifacts:
|
||||
- report: `tests/golden/WBV2-P0-003/capability-contract-report.json`
|
||||
- desktop report: `tests/golden/WBV2-P0-003/capability-contract-desktop-report.json`
|
||||
- command log: `tests/golden/WBV2-P0-003/command.log`
|
||||
- WASM build log: `tests/golden/WBV2-P0-003/wasm-build.log`
|
||||
- fixture SHA-256: `ffc4a6635abd4f6d905945da8f79d475f5947d38df16e64a18740e443b6f111c`
|
||||
- WASM SHA-256: `63877fb8e5ad0fa6ffbe9a69c7f3a66c8997a59fe959bbefda185eb0bb6d0ab6`
|
||||
- report SHA-256: `436127af44928dfbfec193229789c64c12e98af6ba2035c572712d22071e49bc`
|
||||
|
||||
The legacy next-task-plan hash drift was repaired through the repository's
|
||||
official manifest-update mode, then the protected plan checker and all
|
||||
execution/context governance gates passed. The queue may advance to the
|
||||
declared successor without rewriting task history.
|
||||
|
||||
nextTask: WBV2-P1-001
|
||||
32
docs/status/WBV2-P1-001.md
Normal file
32
docs/status/WBV2-P1-001.md
Normal file
@@ -0,0 +1,32 @@
|
||||
# WBV2-P1-001 Status
|
||||
|
||||
status: done
|
||||
task: WBV2-P1-001
|
||||
gate: G1
|
||||
updated: 2026-08-25 America/New_York
|
||||
|
||||
The runtime receipt fixture binds the single and pthread variants to one
|
||||
release, pinned source/build hashes, explicit memory/resource hashes, a
|
||||
deterministic pthread-to-single fallback order, and one engine generation per
|
||||
session. Desktop and WASM/Main read the same receipt and preserve it through
|
||||
save/reopen.
|
||||
|
||||
Acceptance evidence:
|
||||
- generator exit: 0
|
||||
- desktop receipt read and save/reopen exit: 0
|
||||
- engine manifest validation, independent variant installation, deterministic
|
||||
selection, and cleanup/fallback tests exit: 0
|
||||
- `npm --prefix web run test:generated-gap -- --task WBV2-P1-001` exit: 0
|
||||
- `node tools/web/check-generated-gap.mjs --task WBV2-P1-001` exit: 0
|
||||
- source and build SHA-256 values are verified against the production reader,
|
||||
vendor WASM, and public variant resources
|
||||
|
||||
Artifacts:
|
||||
- report: `tests/golden/WBV2-P1-001/runtime-receipt-report.json`
|
||||
- desktop report: `tests/golden/WBV2-P1-001/runtime-receipt-desktop-report.json`
|
||||
- command log: `tests/golden/WBV2-P1-001/command.log`
|
||||
- fixture SHA-256: `1f800845bad994e158a55c6a934f243d3b7c30a54c98887e6b35848ceb50e9e4`
|
||||
- source SHA-256: `4e77fe6a1eb699432c8c5a8fbaae38b223f44a4cdcb314d624e2d2d4c3d570fa`
|
||||
- build SHA-256: `63877fb8e5ad0fa6ffbe9a69c7f3a66c8997a59fe959bbefda185eb0bb6d0ab6`
|
||||
|
||||
nextTask: WBV2-P1-002
|
||||
27
docs/status/WBV2-P1-002.md
Normal file
27
docs/status/WBV2-P1-002.md
Normal file
@@ -0,0 +1,27 @@
|
||||
# WBV2-P1-002 Status
|
||||
|
||||
status: done
|
||||
task: WBV2-P1-002
|
||||
gate: G1
|
||||
updated: 2026-08-25 America/New_York
|
||||
|
||||
The minimal cube fixture exposes canonical SceneIR stable object/mesh IDs,
|
||||
topology counts, positions, and a bounded binary delta contract. Desktop and
|
||||
WASM/Main produce the same canonical summary and preserve it through
|
||||
save/reopen; malformed input is rejected without mutating the existing Main.
|
||||
|
||||
Acceptance evidence:
|
||||
- generator exit: 0
|
||||
- desktop SceneIR field read and save/reopen exit: 0
|
||||
- `npm --prefix web run test:generated-gap -- --task WBV2-P1-002` exit: 0
|
||||
- `node tools/web/check-generated-gap.mjs --task WBV2-P1-002` exit: 0
|
||||
- stable IDs, canonical hash, and malformed no-mutation case are verified
|
||||
|
||||
Artifacts:
|
||||
- report: `tests/golden/WBV2-P1-002/sceneir-report.json`
|
||||
- desktop report: `tests/golden/WBV2-P1-002/sceneir-desktop-report.json`
|
||||
- command log: `tests/golden/WBV2-P1-002/command.log`
|
||||
- fixture SHA-256: `09c4d34f7faf8b1755f8a59ecb533ebee61ac9821447c522e8fd41d7892ea9b34`
|
||||
- canonical SceneIR hash: `a0dc01a164bfa12bd27da51db914d854409273a69a15defb6630fcf8e77e396e`
|
||||
|
||||
nextTask: WBV2-P1-003
|
||||
29
docs/status/WBV2-P1-003.md
Normal file
29
docs/status/WBV2-P1-003.md
Normal file
@@ -0,0 +1,29 @@
|
||||
# WBV2-P1-003 Status
|
||||
|
||||
status: done
|
||||
task: WBV2-P1-003
|
||||
gate: G1
|
||||
updated: 2026-08-25 America/New_York
|
||||
|
||||
The transaction fixture verifies a bounded Main command history: failed
|
||||
commands do not create a history entry, valid visibility changes advance the
|
||||
revision, stale base revisions are rejected, undo/redo restore the exact
|
||||
semantic state, and save output is byte-stable across repeated writes and
|
||||
reopen.
|
||||
|
||||
Acceptance evidence:
|
||||
- generator exit: 0
|
||||
- desktop transaction contract read and save/reopen exit: 0
|
||||
- `npm --prefix web run test:generated-gap -- --task WBV2-P1-003` exit: 0
|
||||
- `node tools/web/check-generated-gap.mjs --task WBV2-P1-003` exit: 0
|
||||
- failed command, stale revision, undo/redo, malformed input, and repeated
|
||||
save hash cases are verified
|
||||
|
||||
Artifacts:
|
||||
- report: `tests/golden/WBV2-P1-003/transaction-report.json`
|
||||
- desktop report: `tests/golden/WBV2-P1-003/transaction-desktop-report.json`
|
||||
- command log: `tests/golden/WBV2-P1-003/command.log`
|
||||
- fixture SHA-256: `71f784357a7c65eea5525a14c2741a92a01cc255b5ffda0dd9ae0a86fffa8e88`
|
||||
- saved byte SHA-256: `8bfe012973f24edff2d1cc9c7e240e24fd9b0b97c133fdcabfadfd63427a363b`
|
||||
|
||||
nextTask: WBV2-P1-004
|
||||
32
docs/status/WBV2-P1-004.md
Normal file
32
docs/status/WBV2-P1-004.md
Normal file
@@ -0,0 +1,32 @@
|
||||
# WBV2-P1-004 Status
|
||||
|
||||
status: done
|
||||
task: WBV2-P1-004
|
||||
gate: G1
|
||||
updated: 2026-08-25 America/New_York
|
||||
|
||||
The worker lifecycle fixture exposes a bounded cancellation/restart/dispose
|
||||
contract through the Blender Text datablock and the WASM SceneIR reader.
|
||||
Desktop and WASM agree that cancelled opens publish no result, stale results
|
||||
from generation 1 are rejected after restart to generation 2, and CPU/WASM/GPU
|
||||
owner counters return to zero after cancel, restart, and dispose. The future
|
||||
extension field and schema hash survive a compressed save/reopen cycle.
|
||||
|
||||
Acceptance evidence:
|
||||
- fixture generator exit: 0
|
||||
- desktop lifecycle contract read and save/reopen exit: 0
|
||||
- `npm --prefix web run test:generated-gap -- --task WBV2-P1-004` exit: 0
|
||||
- `node tools/web/check-generated-gap.mjs --task WBV2-P1-004` exit: 0
|
||||
- malformed blend keeps the original Main snapshot unchanged
|
||||
- hash drift, cancellation, generation mismatch, and double-dispose outcomes
|
||||
are represented in the bounded lifecycle receipt
|
||||
|
||||
Artifacts:
|
||||
- report: `tests/golden/WBV2-P1-004/worker-lifecycle-report.json`
|
||||
- desktop report: `tests/golden/WBV2-P1-004/worker-lifecycle-desktop-report.json`
|
||||
- command log: `tests/golden/WBV2-P1-004/command.log`
|
||||
- WASM build log: `tests/golden/WBV2-P1-004/wasm-build.log`
|
||||
- fixture SHA-256: `c17cf938451b7bdbcda9a04b1e6436f217269e3167804cc785fd0d32e2d9d4bb`
|
||||
- saved lifecycle contract hash: `4567145720b21ffab0202d82584bc5ef41a829bc6a1be13683c35ed0115345ac`
|
||||
|
||||
nextTask: WBV2-P1-005
|
||||
32
docs/status/WBV2-P1-005.md
Normal file
32
docs/status/WBV2-P1-005.md
Normal file
@@ -0,0 +1,32 @@
|
||||
# WBV2-P1-005 Status
|
||||
|
||||
status: done
|
||||
task: WBV2-P1-005
|
||||
gate: G1
|
||||
updated: 2026-08-25 America/New_York
|
||||
|
||||
The storage journal fixture exposes a bounded OPFS/IndexedDB recovery
|
||||
contract through the Blender Text datablock and WASM SceneIR reader. Desktop
|
||||
and WASM agree that an interrupted commit keeps the old revision usable, a
|
||||
payload hash mismatch is quarantined, and restart recovers generation 1 to 2
|
||||
with zero staging/journal resources. The unknown extension and schema hash
|
||||
survive save/reopen.
|
||||
|
||||
Acceptance evidence:
|
||||
- fixture generator exit: 0
|
||||
- desktop journal contract read and save/reopen exit: 0
|
||||
- `npm --prefix web run test:generated-gap -- --task WBV2-P1-005` exit: 0
|
||||
- `node tools/web/check-generated-gap.mjs --task WBV2-P1-005` exit: 0
|
||||
- malformed blend keeps the original Main snapshot unchanged
|
||||
- interrupted commit, hash quarantine, and restart recovery outcomes are
|
||||
represented in the bounded journal receipt
|
||||
|
||||
Artifacts:
|
||||
- report: `tests/golden/WBV2-P1-005/storage-journal-report.json`
|
||||
- desktop report: `tests/golden/WBV2-P1-005/storage-journal-desktop-report.json`
|
||||
- command log: `tests/golden/WBV2-P1-005/command.log`
|
||||
- WASM build log: `tests/golden/WBV2-P1-005/wasm-build.log`
|
||||
- fixture SHA-256: `07455729e45c5b59caddfd2b06dbe76296ef4cb90d558d8a6c345d96f12ebdda`
|
||||
- storage journal schema hash: `c7655279da06b11a53cce4b378f578369e161da132d07b9078024dd6fc796150`
|
||||
|
||||
nextTask: WBV2-P2-001
|
||||
27
docs/status/WBV2-P2-001.md
Normal file
27
docs/status/WBV2-P2-001.md
Normal file
@@ -0,0 +1,27 @@
|
||||
# WBV2-P2-001 status
|
||||
|
||||
- task: `WBV2-P2-001`
|
||||
- parent: `WBV2-P1-005`
|
||||
- parity: `EDITOR.OPEN_SCENE`
|
||||
- implementationClass: `LOCAL_EXACT`
|
||||
- status: `done`
|
||||
- fixture: `tests/files/web/generated/WBV2-P2-001-EDITOR.OPEN_SCENE.blend`
|
||||
|
||||
## Evidence
|
||||
|
||||
- Desktop and WASM expose the same stable scene, collection, mesh object, active object, and selection IDs.
|
||||
- `editorWorkflowStatus=AVAILABLE`; `context.revision=1` matches the desktop selection revision.
|
||||
- Missing context is structured as `pinnedData=null` and `library=null`.
|
||||
- Desktop save/reopen and WASM save/reopen preserve editor context, collections, scenes, and nodes exactly.
|
||||
- Malformed blend input is rejected without mutating the open Main.
|
||||
|
||||
## Commands
|
||||
|
||||
- `npm --prefix web run test:generated-gap -- --task WBV2-P2-001`
|
||||
- `node tools/web/check-generated-gap.mjs --task WBV2-P2-001`
|
||||
- `node tools/web/check-task-context.mjs --task WBV2-P2-001 --write`
|
||||
|
||||
## Handoff
|
||||
|
||||
- nextTask: `WBV2-P2-002`
|
||||
- queue mutation: allowed after manifest and parent hash validation
|
||||
32
docs/status/WBV2-P2-002.md
Normal file
32
docs/status/WBV2-P2-002.md
Normal file
@@ -0,0 +1,32 @@
|
||||
# WBV2-P2-002 status
|
||||
|
||||
- task: `WBV2-P2-002`
|
||||
- parent: `WBV2-P2-001`
|
||||
- parity: `OBJECT.TRANSFORM_HIERARCHY`
|
||||
- implementationClass: `LOCAL_EXACT`
|
||||
- status: `done`
|
||||
- fixture: `tests/files/web/generated/WBV2-P2-002-OBJECT.TRANSFORM_HIERARCHY.blend`
|
||||
|
||||
## Evidence
|
||||
|
||||
- Desktop and WASM preserve stable parent/child object IDs, local transforms, world matrices, and source/target collection membership.
|
||||
- `setObjectTransform` commits parent translation and propagates child world translation to `[2, 2, 0]`.
|
||||
- Parent-cycle and invalid linked/locked target edits reject before commit without changing revision.
|
||||
- Collection move and unparent-with-keep-world commit through authoritative Main; undo and redo are exact.
|
||||
- Desktop and WASM save/reopen preserve nodes and collections; malformed input is rejected without Main mutation.
|
||||
|
||||
## Production fixes
|
||||
|
||||
- Failed command history restoration no longer advances session revision; undo/redo still advance it.
|
||||
- Unparent keep-world uses authoritative raw parent/local matrices and decomposes the captured world matrix.
|
||||
|
||||
## Commands
|
||||
|
||||
- `npm --prefix web run test:generated-gap -- --task WBV2-P2-002`
|
||||
- `node tools/web/check-generated-gap.mjs --task WBV2-P2-002`
|
||||
- `node tools/web/check-task-context.mjs --task WBV2-P2-002 --write`
|
||||
|
||||
## Handoff
|
||||
|
||||
- nextTask: `WBV2-P2-003`
|
||||
- queue mutation: allowed after manifest and parent hash validation
|
||||
26
docs/status/WBV2-P2-003.md
Normal file
26
docs/status/WBV2-P2-003.md
Normal file
@@ -0,0 +1,26 @@
|
||||
# WBV2-P2-003 status
|
||||
|
||||
- task: `WBV2-P2-003`
|
||||
- parent: `WBV2-P2-002`
|
||||
- parity: `MESH.EDIT_CORE`
|
||||
- implementationClass: `LOCAL_EXACT`
|
||||
- status: `done`
|
||||
- fixture: `tests/files/web/generated/WBV2-P2-003-MESH.EDIT_CORE.blend`
|
||||
|
||||
## Evidence
|
||||
|
||||
- Desktop fixture evidence contains seven stable quad mesh/object pairs with matching IDs and initial topology.
|
||||
- WASM executes Translate, Merge, Dissolve, Extrude, Inset, Bevel and LoopCut as seven bounded Main transactions.
|
||||
- Successful operations advance revision exactly once; invalid operation and out-of-range selection reject without revision change.
|
||||
- Operation results preserve valid mesh topology and are stable across save/reopen; malformed blend input does not mutate Main.
|
||||
|
||||
## Commands
|
||||
|
||||
- `npm --prefix web run test:generated-gap -- --task WBV2-P2-003`
|
||||
- `node tools/web/check-generated-gap.mjs --task WBV2-P2-003`
|
||||
- `node tools/web/check-task-context.mjs --task WBV2-P2-003 --write`
|
||||
|
||||
## Handoff
|
||||
|
||||
- nextTask: `WBV2-P2-004`
|
||||
- queue mutation: allowed after manifest and parent hash validation
|
||||
27
docs/status/WBV2-P2-004.md
Normal file
27
docs/status/WBV2-P2-004.md
Normal file
@@ -0,0 +1,27 @@
|
||||
# WBV2-P2-004 status
|
||||
|
||||
- task: `WBV2-P2-004`
|
||||
- parent: `WBV2-P2-003`
|
||||
- parity: `VIEWPORT.MAIN_OFFSCREEN`
|
||||
- implementationClass: `LOCAL_BOUNDED`
|
||||
- status: `done`
|
||||
- fixture: `tests/files/web/generated/WBV2-P2-004-VIEWPORT.MAIN_OFFSCREEN.blend`
|
||||
|
||||
## Evidence
|
||||
|
||||
- Desktop and WASM load the same cube/camera SceneIR and preserve node, mesh, camera and scene data across save/reopen.
|
||||
- Chromium production dist renders nonblank pixels through both main-thread WebGL and Offscreen worker paths.
|
||||
- Selection and camera state are identical across backends; main-thread `WEBGL_lose_context` recovery returns ready with nonblank readback, and Offscreen disposal/reopen is exact.
|
||||
- Malformed blend input is rejected without mutating Main.
|
||||
|
||||
## Commands
|
||||
|
||||
- `build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/WBV2-P2-004.py -- tests/files/web/generated/WBV2-P2-004-VIEWPORT.MAIN_OFFSCREEN.blend`
|
||||
- `npm --prefix web run test:generated-gap -- --task WBV2-P2-004`
|
||||
- `node tools/web/check-generated-gap.mjs --task WBV2-P2-004`
|
||||
- `node tools/web/check-task-context.mjs --task WBV2-P2-004 --write`
|
||||
|
||||
## Handoff
|
||||
|
||||
- nextTask: `WBV2-P2-005`
|
||||
- queue mutation: allowed after manifest and parent hash validation
|
||||
26
docs/status/WBV2-P2-005.md
Normal file
26
docs/status/WBV2-P2-005.md
Normal file
@@ -0,0 +1,26 @@
|
||||
# WBV2-P2-005 status
|
||||
|
||||
- task: `WBV2-P2-005`
|
||||
- parent: `WBV2-P2-004`
|
||||
- parity: `WORKFLOW.P0_USER_LOOP`
|
||||
- implementationClass: `LOCAL_BOUNDED`
|
||||
- status: `done`
|
||||
- fixture: `tests/files/web/generated/WBV2-P2-005-WORKFLOW.P0_USER_LOOP.blend`
|
||||
|
||||
## Evidence
|
||||
|
||||
- Desktop and WASM preserve the cube fixture through open and save/reopen; Main executes create, transform, undo and redo with revisions `1 -> 5`.
|
||||
- Chromium production flow saves the initial revision, edits the scene, recovers the edited scene after an engine Worker fault, cancels a 40 MiB open without replacing the scene, and exports a valid GLB.
|
||||
- Malformed blend input is rejected without Main mutation; cancellation cleanup reports zero live reader and engine requests.
|
||||
|
||||
## Commands
|
||||
|
||||
- `build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/WBV2-P2-005.py -- tests/files/web/generated/WBV2-P2-005-WORKFLOW.P0_USER_LOOP.blend`
|
||||
- `npm --prefix web run test:generated-gap -- --task WBV2-P2-005`
|
||||
- `node tools/web/check-generated-gap.mjs --task WBV2-P2-005`
|
||||
- `node tools/web/check-task-context.mjs --task WBV2-P2-005 --write`
|
||||
|
||||
## Handoff
|
||||
|
||||
- nextTask: `WBV2-P3-001`
|
||||
- queue mutation: allowed after manifest and parent hash validation
|
||||
26
docs/status/WBV2-P3-001.md
Normal file
26
docs/status/WBV2-P3-001.md
Normal file
@@ -0,0 +1,26 @@
|
||||
# WBV2-P3-001 status
|
||||
|
||||
- task: `WBV2-P3-001`
|
||||
- parent: `WBV2-P2-005`
|
||||
- parity: `MATERIAL.PBR_UV`
|
||||
- implementationClass: `LOCAL_BOUNDED`
|
||||
- status: `done`
|
||||
- fixture: `tests/files/web/generated/WBV2-P3-001-MATERIAL.PBR_UV.blend`
|
||||
|
||||
## Evidence
|
||||
|
||||
- Desktop and WASM expose matching Principled material fields, active UV data and stable mesh/material IDs.
|
||||
- Main transactions create and activate a secondary UV map, unwrap the cube, and update Principled values; final revision is 5 and save/reopen is exact.
|
||||
- The declared Noise node is retained as an `UNSUPPORTED` node with a reader warning; invalid UV selection and malformed blend input fail without revision/Main mutation.
|
||||
|
||||
## Commands
|
||||
|
||||
- `build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/WBV2-P3-001.py -- tests/files/web/generated/WBV2-P3-001-MATERIAL.PBR_UV.blend`
|
||||
- `npm --prefix web run test:generated-gap -- --task WBV2-P3-001`
|
||||
- `node tools/web/check-generated-gap.mjs --task WBV2-P3-001`
|
||||
- `node tools/web/check-task-context.mjs --task WBV2-P3-001 --write`
|
||||
|
||||
## Handoff
|
||||
|
||||
- nextTask: `WBV2-P3-002`
|
||||
- queue mutation: allowed after manifest and parent hash validation
|
||||
28
docs/status/WBV2-P3-002.md
Normal file
28
docs/status/WBV2-P3-002.md
Normal file
@@ -0,0 +1,28 @@
|
||||
# WBV2-P3-002 status
|
||||
|
||||
- task: `WBV2-P3-002`
|
||||
- parent: `WBV2-P3-001`
|
||||
- parity: `ANIMATION.TRS_ACTION`
|
||||
- implementationClass: `LOCAL_EXACT`
|
||||
- status: `done`
|
||||
- fixture: `tests/files/web/generated/WBV2-P3-002-ANIMATION.TRS_ACTION.blend`
|
||||
|
||||
## Evidence
|
||||
|
||||
- Blender desktop and WASM/Main expose the same action identity, target object, nine TRS channels, sampled values, frames and interpolation handles.
|
||||
- Main inserts a location key at frame 25 and changes one F-Curve to LINEAR; a stale frame command is rejected without changing the revision.
|
||||
- Save/reopen preserves the edited action exactly, while malformed input is rejected without replacing the current snapshot.
|
||||
|
||||
## Commands
|
||||
|
||||
- `build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/WBV2-P3-002.py -- tests/files/web/generated/WBV2-P3-002-ANIMATION.TRS_ACTION.blend`
|
||||
- `build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/check-wbv2-p3-002-desktop.py -- tests/files/web/generated/WBV2-P3-002-ANIMATION.TRS_ACTION.blend tests/golden/WBV2-P3-002/animation-desktop-report.json`
|
||||
- `node --check tools/web/check-generated-gap.mjs`
|
||||
- `npm --prefix web run test:generated-gap -- --task WBV2-P3-002`
|
||||
- `node tools/web/check-generated-gap.mjs --task WBV2-P3-002`
|
||||
- `node tools/web/check-task-context.mjs --task WBV2-P3-002 --write`
|
||||
|
||||
## Handoff
|
||||
|
||||
- nextTask: `WBV2-P3-003`
|
||||
- queue mutation: allowed after manifest and parent hash validation
|
||||
28
docs/status/WBV2-P3-003.md
Normal file
28
docs/status/WBV2-P3-003.md
Normal file
@@ -0,0 +1,28 @@
|
||||
# WBV2-P3-003 status
|
||||
|
||||
- task: `WBV2-P3-003`
|
||||
- parent: `WBV2-P3-002`
|
||||
- parity: `RIG.POSE_SKIN`
|
||||
- implementationClass: `LOCAL_BOUNDED`
|
||||
- status: `done`
|
||||
- fixture: `tests/files/web/generated/WBV2-P3-003-RIG.POSE_SKIN.blend`
|
||||
|
||||
## Evidence
|
||||
|
||||
- Blender desktop and WASM/Main expose matching armature identity, parented bones, evaluated pose matrices, armature modifier, two vertex groups, bounded skin weights and the declared shape key.
|
||||
- The declared `LIMIT_ROTATION` pose constraint is retained as an explicit unsupported constraint; the bounded object constraint and vertex weights are editable through Main transactions.
|
||||
- A stale weight command is rejected without revision change, malformed input preserves the edited snapshot, and save/reopen is exact.
|
||||
|
||||
## Commands
|
||||
|
||||
- `build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/WBV2-P3-003.py -- tests/files/web/generated/WBV2-P3-003-RIG.POSE_SKIN.blend`
|
||||
- `build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/check-wbv2-p3-003-desktop.py -- tests/files/web/generated/WBV2-P3-003-RIG.POSE_SKIN.blend tests/golden/WBV2-P3-003/rig-desktop-report.json`
|
||||
- `node --check tools/web/check-generated-gap.mjs`
|
||||
- `npm --prefix web run test:generated-gap -- --task WBV2-P3-003`
|
||||
- `node tools/web/check-generated-gap.mjs --task WBV2-P3-003`
|
||||
- `node tools/web/check-task-context.mjs --task WBV2-P3-003 --write`
|
||||
|
||||
## Handoff
|
||||
|
||||
- nextTask: `WBV2-P3-004`
|
||||
- queue mutation: allowed after manifest and parent hash validation
|
||||
28
docs/status/WBV2-P3-004.md
Normal file
28
docs/status/WBV2-P3-004.md
Normal file
@@ -0,0 +1,28 @@
|
||||
# WBV2-P3-004 status
|
||||
|
||||
- task: `WBV2-P3-004`
|
||||
- parent: `WBV2-P3-003`
|
||||
- parity: `IO.GLB_ROUNDTRIP`
|
||||
- implementationClass: `LOCAL_EXACT`
|
||||
- status: `done`
|
||||
- fixture: `tests/files/web/generated/WBV2-P3-004-IO.GLB_ROUNDTRIP.blend`
|
||||
|
||||
## Evidence
|
||||
|
||||
- Blender desktop and WASM/Main expose the same bounded GLB roundtrip graph: one mesh with 8 vertices, 12 triangles, one UV layer, one morph target, one two-bone skin, one packed image, and one animation.
|
||||
- Export/import preserves mesh, skin, morph, image, and animation semantics exactly; the emitted GLB is 7,540 bytes with `glTF` magic.
|
||||
- Malformed GLB, external image URI, and over-budget input are rejected by the bounded importer. Blender save/reopen remains exact.
|
||||
|
||||
## Commands
|
||||
|
||||
- `build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/WBV2-P3-004.py -- tests/files/web/generated/WBV2-P3-004-IO.GLB_ROUNDTRIP.blend`
|
||||
- `build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/check-wbv2-p3-004-desktop.py -- tests/files/web/generated/WBV2-P3-004-IO.GLB_ROUNDTRIP.blend tests/golden/WBV2-P3-004/glb-desktop-report.json`
|
||||
- `node --check tools/web/check-generated-gap.mjs`
|
||||
- `npm --prefix web run test:generated-gap -- --task WBV2-P3-004`
|
||||
- `node tools/web/check-generated-gap.mjs --task WBV2-P3-004`
|
||||
- `node tools/web/check-task-context.mjs --task WBV2-P3-004 --write`
|
||||
|
||||
## Handoff
|
||||
|
||||
- nextTask: `WBV2-P3-005`
|
||||
- queue mutation: allowed after manifest and parent hash validation
|
||||
28
docs/status/WBV2-P3-005.md
Normal file
28
docs/status/WBV2-P3-005.md
Normal file
@@ -0,0 +1,28 @@
|
||||
# WBV2-P3-005 status
|
||||
|
||||
- task: `WBV2-P3-005`
|
||||
- parent: `WBV2-P3-004`
|
||||
- parity: `ASSET.LIBRARY_OPERATIONS`
|
||||
- implementationClass: `LOCAL_BOUNDED`
|
||||
- status: `done`
|
||||
- fixture: `tests/files/web/generated/WBV2-P3-005-ASSET.LIBRARY_OPERATIONS.blend`
|
||||
|
||||
## Evidence
|
||||
|
||||
- Blender desktop retains the external `WBV2P3005Library.blend` ownership and linked object as read-only; the source library contains the declared append Object/Mesh/Material/Image closure with a packed image. Desktop save/reopen is exact.
|
||||
- WASM/Main exposes the missing external library as `EXTERNAL_REQUIRED` without importing unavailable linked data, then appends the declared closure as local Main data in one revision. The appended packed image remains local and exact after save/reopen.
|
||||
- Library operation identity validates APPEND, LINK, and LOCAL_OVERRIDE ownership. Override freshness, linked reload, and missing-library transitions accept current generations and reject stale revision/hash inputs; stale append and closure collision do not change Main revision; malformed input does not mutate Main.
|
||||
|
||||
## Commands
|
||||
|
||||
- `build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/WBV2-P3-005.py -- tests/files/web/generated/WBV2-P3-005-ASSET.LIBRARY_OPERATIONS.blend`
|
||||
- `build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/check-wbv2-p3-005-desktop.py -- tests/files/web/generated/WBV2-P3-005-ASSET.LIBRARY_OPERATIONS.blend tests/files/web/generated/WBV2P3005Library.blend tests/golden/WBV2-P3-005/library-desktop-report.json`
|
||||
- `node --check tools/web/check-generated-gap.mjs`
|
||||
- `npm --prefix web run test:generated-gap -- --task WBV2-P3-005`
|
||||
- `node tools/web/check-generated-gap.mjs --task WBV2-P3-005`
|
||||
- `node tools/web/check-task-context.mjs --task WBV2-P3-005 --write`
|
||||
|
||||
## Handoff
|
||||
|
||||
- nextTask: `WBV2-P4-001`
|
||||
- queue mutation: allowed after manifest and parent hash validation
|
||||
28
docs/status/WBV2-P4-001.md
Normal file
28
docs/status/WBV2-P4-001.md
Normal file
@@ -0,0 +1,28 @@
|
||||
# WBV2-P4-001 status
|
||||
|
||||
- task: `WBV2-P4-001`
|
||||
- parent: `WBV2-P3-005`
|
||||
- parity: `MODIFIER.DECLARED_SLICES`
|
||||
- implementationClass: `LOCAL_BOUNDED`
|
||||
- status: `done`
|
||||
- fixture: `tests/files/web/generated/WBV2-P4-001-MODIFIER.DECLARED_SLICES.blend`
|
||||
|
||||
## Evidence
|
||||
|
||||
- Blender desktop and WASM/Main expose the same Bevel, Decimate, and Particle System stack. Bevel/Decimate parameters and dependency ordering match; the Particle System is retained explicitly as `evaluationStatus: BLOCKED`.
|
||||
- Main modifier visibility toggles commit through the authoritative path. A bounded Decimate profile applies from 8 vertices/12 triangles to 6 vertices/8 triangles; stale profiles are rejected without a revision change. Save/reopen preserves the resulting stack and geometry.
|
||||
- Malformed input is rejected without mutating Main. The unsupported modifier remains visible and blocked rather than being silently treated as evaluated.
|
||||
|
||||
## Commands
|
||||
|
||||
- `build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/WBV2-P4-001.py -- tests/files/web/generated/WBV2-P4-001-MODIFIER.DECLARED_SLICES.blend`
|
||||
- `build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/check-wbv2-p4-001-desktop.py -- tests/files/web/generated/WBV2-P4-001-MODIFIER.DECLARED_SLICES.blend tests/golden/WBV2-P4-001/modifier-desktop-report.json`
|
||||
- `node --check tools/web/check-generated-gap.mjs`
|
||||
- `npm --prefix web run test:generated-gap -- --task WBV2-P4-001`
|
||||
- `node tools/web/check-generated-gap.mjs --task WBV2-P4-001`
|
||||
- `node tools/web/check-task-context.mjs --task WBV2-P4-001 --write`
|
||||
|
||||
## Handoff
|
||||
|
||||
- nextTask: `WBV2-P4-002`
|
||||
- queue mutation: allowed after manifest and parent hash validation
|
||||
28
docs/status/WBV2-P4-002.md
Normal file
28
docs/status/WBV2-P4-002.md
Normal file
@@ -0,0 +1,28 @@
|
||||
# WBV2-P4-002 status
|
||||
|
||||
- task: `WBV2-P4-002`
|
||||
- parent: `WBV2-P4-001`
|
||||
- parity: `NODES.ALLOWLIST`
|
||||
- implementationClass: `LOCAL_BOUNDED`
|
||||
- status: `done`
|
||||
- fixture: `tests/files/web/generated/WBV2-P4-002-NODES.ALLOWLIST.blend`
|
||||
|
||||
## Evidence
|
||||
|
||||
- Blender desktop and WASM/Main expose the same two Geometry Node graphs. The supported graph contains the declared Transform slice with stable interface sockets, links, and defaults; the graph containing `GeometryNodeDistributePointsOnFaces` is retained and blocked by the Geometry Node allowlist.
|
||||
- The declared Shader graph compiles through the bounded `WEBGL2_THREE_PHYSICAL` compiler with a deterministic compile key. A valid `setShaderGraph` commit advances Main once and survives save/reopen with the same graph hash.
|
||||
- Unknown Geometry/Shader nodes and an over-budget Geometry graph are rejected before commit. A malformed native Shader graph and compile failure leave Main revision unchanged; malformed blend input leaves the opened snapshot unchanged.
|
||||
|
||||
## Commands
|
||||
|
||||
- `build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/WBV2-P4-002.py -- tests/files/web/generated/WBV2-P4-002-NODES.ALLOWLIST.blend`
|
||||
- `build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/check-wbv2-p4-002-desktop.py -- tests/files/web/generated/WBV2-P4-002-NODES.ALLOWLIST.blend tests/golden/WBV2-P4-002/nodes-desktop-report.json`
|
||||
- `node --check tools/web/check-generated-gap.mjs`
|
||||
- `npm --prefix web run test:generated-gap -- --task WBV2-P4-002`
|
||||
- `node tools/web/check-generated-gap.mjs --task WBV2-P4-002`
|
||||
- `node tools/web/check-task-context.mjs --task WBV2-P4-002 --write`
|
||||
|
||||
## Handoff
|
||||
|
||||
- nextTask: `WBV2-P4-003`
|
||||
- queue mutation: allowed after manifest and parent hash validation
|
||||
28
docs/status/WBV2-P4-003.md
Normal file
28
docs/status/WBV2-P4-003.md
Normal file
@@ -0,0 +1,28 @@
|
||||
# WBV2-P4-003 status
|
||||
|
||||
- task: `WBV2-P4-003`
|
||||
- parent: `WBV2-P4-002`
|
||||
- parity: `SCULPT.NONMESH.PAINT_BOUNDED`
|
||||
- implementationClass: `LOCAL_BOUNDED`
|
||||
- status: `done`
|
||||
- fixture: `tests/files/web/generated/WBV2-P4-003-SCULPT.NONMESH.PAINT_BOUNDED.blend`
|
||||
|
||||
## Evidence
|
||||
|
||||
- Blender desktop and WASM/Main expose the same single-user Sculpt mesh with five vertices, five faces, `.sculpt_mask`, and `.sculpt_face_set`, plus an available three-point Bezier Curve and three-point Point Cloud.
|
||||
- `setSculptMeshAttributes` and a bounded `DRAW` Sculpt stroke commit atomically. The updated mask and face sets, stroke result, Curve, and Point Cloud survive save/reopen exactly.
|
||||
- Unsupported brush input and malformed attribute lengths are rejected without a revision change. The PBVH query returns the stable `PAINT_PBVH_UNAVAILABLE` gate for the current WASM build; stale PBVH requests return `REVISION_CONFLICT`.
|
||||
|
||||
## Commands
|
||||
|
||||
- `build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/WBV2-P4-003.py -- tests/files/web/generated/WBV2-P4-003-SCULPT.NONMESH.PAINT_BOUNDED.blend`
|
||||
- `build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/check-wbv2-p4-003-desktop.py -- tests/files/web/generated/WBV2-P4-003-SCULPT.NONMESH.PAINT_BOUNDED.blend tests/golden/WBV2-P4-003/sculpt-desktop-report.json`
|
||||
- `node --check tools/web/check-generated-gap.mjs`
|
||||
- `npm --prefix web run test:generated-gap -- --task WBV2-P4-003`
|
||||
- `node tools/web/check-generated-gap.mjs --task WBV2-P4-003`
|
||||
- `node tools/web/check-task-context.mjs --task WBV2-P4-003 --write`
|
||||
|
||||
## Handoff
|
||||
|
||||
- nextTask: `WBV2-P4-004`
|
||||
- queue mutation: allowed after manifest and parent hash validation
|
||||
28
docs/status/WBV2-P4-004.md
Normal file
28
docs/status/WBV2-P4-004.md
Normal file
@@ -0,0 +1,28 @@
|
||||
# WBV2-P4-004 status
|
||||
|
||||
- task: `WBV2-P4-004`
|
||||
- parent: `WBV2-P4-003`
|
||||
- parity: `SIMULATION.CACHE_LIFECYCLE`
|
||||
- implementationClass: `LOCAL_BOUNDED`
|
||||
- status: `done`
|
||||
- fixture: `tests/files/web/generated/WBV2-P4-004-SIMULATION.CACHE_LIFECYCLE.blend`
|
||||
|
||||
## Evidence
|
||||
|
||||
- Blender desktop and WASM/Main expose the same simulation source slice: one active rigid body, one passive collision body, and frame range 1..4. Save/reopen preserves the `physicsSimulation` manifest and settings exactly.
|
||||
- A bounded two-frame Simulation cache manifest verifies its revision binding, content hash, contiguous frame hashes, deterministic `sim2-` key, and frame selection. A source revision change produces a different key and is not publishable.
|
||||
- Corrupt payloads, cancelled verification, and invalid cache data fail closed with stable codes. LRU planning protects the active cache and satisfies the small budget without releasing protected bytes.
|
||||
|
||||
## Commands
|
||||
|
||||
- `build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/WBV2-P4-004.py -- tests/files/web/generated/WBV2-P4-004-SIMULATION.CACHE_LIFECYCLE.blend`
|
||||
- `build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/check-wbv2-p4-004-desktop.py -- tests/files/web/generated/WBV2-P4-004-SIMULATION.CACHE_LIFECYCLE.blend tests/golden/WBV2-P4-004/simulation-desktop-report.json`
|
||||
- `node --check tools/web/check-generated-gap.mjs`
|
||||
- `npm --prefix web run test:generated-gap -- --task WBV2-P4-004`
|
||||
- `node tools/web/check-generated-gap.mjs --task WBV2-P4-004`
|
||||
- `node tools/web/check-task-context.mjs --task WBV2-P4-004 --write`
|
||||
|
||||
## Handoff
|
||||
|
||||
- nextTask: `WBV2-P5-001`
|
||||
- queue mutation: allowed after manifest and parent hash validation
|
||||
29
docs/status/WBV2-P5-001.md
Normal file
29
docs/status/WBV2-P5-001.md
Normal file
@@ -0,0 +1,29 @@
|
||||
# WBV2-P5-001 status
|
||||
|
||||
- task: `WBV2-P5-001`
|
||||
- parent: `WBV2-P4-004`
|
||||
- parity: `RENDER.ROUTING`
|
||||
- implementationClass: `LOCAL_BOUNDED`
|
||||
- status: `done`
|
||||
- fixture: `tests/files/web/generated/WBV2-P5-001-RENDER.ROUTING.blend`
|
||||
|
||||
## Evidence
|
||||
|
||||
- Blender desktop and WASM/Main expose the same bounded Eevee render settings and a canonical `workflow:render_capability_routing` receipt bound to source, settings, Blender 5.2.0 and the pinned WASM build hash.
|
||||
- The receipt routes bounded Eevee to `WEB_LOCAL_BOUNDED`; Cycles, complex Eevee, hardware, unavailable WebGPU, and unknown engines remain explicitly blocked or server-routed.
|
||||
- Desktop rendering produces a stable 64x64 RGBA pixel golden. Render image mismatch is blocked, cancellation publishes no result, and device-loss recovery releases all temporary resources.
|
||||
- Receipt, render settings, route decisions, and pixel identity survive WASM save/reopen exactly; malformed blend input leaves Main unchanged.
|
||||
|
||||
## Commands
|
||||
|
||||
- `build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/WBV2-P5-001.py -- tests/files/web/generated/WBV2-P5-001-RENDER.ROUTING.blend`
|
||||
- `build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/check-wbv2-p5-001-desktop.py -- tests/files/web/generated/WBV2-P5-001-RENDER.ROUTING.blend tests/golden/WBV2-P5-001/render-desktop-report.json`
|
||||
- `node --check tools/web/check-generated-gap.mjs`
|
||||
- `npm --prefix web run test:generated-gap -- --task WBV2-P5-001`
|
||||
- `node tools/web/check-generated-gap.mjs --task WBV2-P5-001`
|
||||
- `node tools/web/check-task-context.mjs --task WBV2-P5-001 --write`
|
||||
|
||||
## Handoff
|
||||
|
||||
- nextTask: `WBV2-P5-002`
|
||||
- queue mutation: allowed after manifest and parent hash validation
|
||||
29
docs/status/WBV2-P5-002.md
Normal file
29
docs/status/WBV2-P5-002.md
Normal file
@@ -0,0 +1,29 @@
|
||||
# WBV2-P5-002 status
|
||||
|
||||
- task: `WBV2-P5-002`
|
||||
- parent: `WBV2-P5-001`
|
||||
- parity: `MEDIA.BOUNDED_WORKFLOW`
|
||||
- implementationClass: `LOCAL_BOUNDED`
|
||||
- status: `done`
|
||||
- fixture: `tests/files/web/generated/WBV2-P5-002-MEDIA.BOUNDED_WORKFLOW.blend`
|
||||
|
||||
## Evidence
|
||||
|
||||
- Blender desktop and WASM/Main expose the same compositor graph and four-strip sequencer timeline with stable frame ranges, media paths, muted audio and cross-transition dependencies.
|
||||
- The bounded compositor executes and hits its frame cache; sequencer frame resolution and cross transition are revision-bound, while stale edits are rejected.
|
||||
- Image codec probing is READY, audio runtime probing is explicitly BLOCKED when unavailable, and source hash drift cannot become a READY result.
|
||||
- Cancellation, quota/budget, restart and resource release are validated across render/compositor/media recovery records. Save/reopen and malformed blend checks preserve project state.
|
||||
|
||||
## Commands
|
||||
|
||||
- `build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/WBV2-P5-002.py -- tests/files/web/generated/WBV2-P5-002-MEDIA.BOUNDED_WORKFLOW.blend`
|
||||
- `build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/check-wbv2-p5-002-desktop.py -- tests/files/web/generated/WBV2-P5-002-MEDIA.BOUNDED_WORKFLOW.blend tests/golden/WBV2-P5-002/media-desktop-report.json`
|
||||
- `node --check tools/web/check-generated-gap.mjs`
|
||||
- `npm --prefix web run test:generated-gap -- --task WBV2-P5-002`
|
||||
- `node tools/web/check-generated-gap.mjs --task WBV2-P5-002`
|
||||
- `node tools/web/check-task-context.mjs --task WBV2-P5-002 --write`
|
||||
|
||||
## Handoff
|
||||
|
||||
- nextTask: `WBV2-P5-003`
|
||||
- queue mutation: allowed after manifest and parent hash validation
|
||||
29
docs/status/WBV2-P5-003.md
Normal file
29
docs/status/WBV2-P5-003.md
Normal file
@@ -0,0 +1,29 @@
|
||||
# WBV2-P5-003 status
|
||||
|
||||
- task: `WBV2-P5-003`
|
||||
- parent: `WBV2-P5-002`
|
||||
- parity: `SERVER.JOB_BINDING`
|
||||
- implementationClass: `SERVER_EXACT`
|
||||
- status: `done`
|
||||
- fixture: `tests/files/web/generated/WBV2-P5-003-SERVER.JOB_BINDING.blend`
|
||||
|
||||
## Evidence
|
||||
|
||||
- Blender desktop and WASM/Main expose one canonical server job binding receipt with source, settings, Blender build, request and result hashes.
|
||||
- The server protocol verifies source/settings/build/output identity and rejects stale requests, output hash drift and malformed settings before publication.
|
||||
- Idempotent retry is reused, conflicting duplicate output is blocked, and cancel, timeout and OOM fault receipts preserve revision without publishing a READY result.
|
||||
- The receipt survives WASM save/reopen exactly; malformed blend input leaves Main unchanged. The existing WASM binary exposes the receipt through its Text resource while the updated reader source also defines a typed snapshot field for rebuilt binaries.
|
||||
|
||||
## Commands
|
||||
|
||||
- `build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/WBV2-P5-003.py -- tests/files/web/generated/WBV2-P5-003-SERVER.JOB_BINDING.blend`
|
||||
- `build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/check-wbv2-p5-003-desktop.py -- tests/files/web/generated/WBV2-P5-003-SERVER.JOB_BINDING.blend tests/golden/WBV2-P5-003/server-desktop-report.json`
|
||||
- `node --check tools/web/check-generated-gap.mjs`
|
||||
- `npm --prefix web run test:generated-gap -- --task WBV2-P5-003`
|
||||
- `node tools/web/check-generated-gap.mjs --task WBV2-P5-003`
|
||||
- `node tools/web/check-task-context.mjs --task WBV2-P5-003 --write`
|
||||
|
||||
## Handoff
|
||||
|
||||
- nextTask: `WBV2-P6-001`
|
||||
- queue mutation: allowed after manifest and parent hash validation
|
||||
28
docs/status/WBV2-P6-001.md
Normal file
28
docs/status/WBV2-P6-001.md
Normal file
@@ -0,0 +1,28 @@
|
||||
# WBV2-P6-001 status
|
||||
|
||||
- task: `WBV2-P6-001`
|
||||
- parent: `WBV2-P5-003`
|
||||
- parity: `SECURITY.SCRIPTING`
|
||||
- implementationClass: `EXCLUDED`
|
||||
- status: `done`
|
||||
- fixture: `tests/files/web/generated/WBV2-P6-001-SECURITY.SCRIPTING.blend`
|
||||
|
||||
## Evidence
|
||||
|
||||
- Blender desktop and WASM/Main expose the same read-only scripting policy receipt: autorun, network, add-on, driver-expression and module execution default to `DENY`.
|
||||
- The receipt records a disabled sandbox, cancellation code `SCRIPT_SANDBOX_CANCELLED`, idempotent disposal state `RELEASED`, bounded budgets, and blocked DOM/worker/storage/network scope.
|
||||
- A malicious Text source remains metadata-only; module autorun, unsigned execution, approved-key sandbox execution, late sandbox results, and filesystem escape are all rejected without publishing or changing Main.
|
||||
- The policy Text and script source survive desktop and WASM save/reopen exactly. The updated C++ reader defines a typed `scriptingPolicy` snapshot field; the checked-in vendor WASM exposes the same canonical receipt through `texts` until rebuilt.
|
||||
|
||||
## Commands
|
||||
|
||||
- `build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/WBV2-P6-001.py -- tests/files/web/generated/WBV2-P6-001-SECURITY.SCRIPTING.blend`
|
||||
- `build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/check-wbv2-p6-001-desktop.py -- tests/files/web/generated/WBV2-P6-001-SECURITY.SCRIPTING.blend tests/golden/WBV2-P6-001/scripting-desktop-report.json`
|
||||
- `node --check tools/web/check-generated-gap.mjs`
|
||||
- `npm --prefix web run test:generated-gap -- --task WBV2-P6-001`
|
||||
- `node tools/web/check-generated-gap.mjs --task WBV2-P6-001`
|
||||
|
||||
## Handoff
|
||||
|
||||
- nextTask: `WBV2-P6-002`
|
||||
- queue mutation: allowed after manifest and parent hash validation
|
||||
28
docs/status/WBV2-P6-002.md
Normal file
28
docs/status/WBV2-P6-002.md
Normal file
@@ -0,0 +1,28 @@
|
||||
# WBV2-P6-002 status
|
||||
|
||||
- task: `WBV2-P6-002`
|
||||
- parent: `WBV2-P6-001`
|
||||
- parity: `workflow:performance_fault_and_recovery_matrix`
|
||||
- implementationClass: `LOCAL_BOUNDED`
|
||||
- status: `done`
|
||||
- fixture: `tests/files/web/generated/WBV2-P6-002-workflow-performance_fault_and_recovery_matrix.blend`
|
||||
|
||||
## Evidence
|
||||
|
||||
- Desktop and WASM/Main expose one deterministic performance receipt covering geometry 100K/1M/10M, 4K/8K textures, long media and simulation-cache byte limits.
|
||||
- OOM, storage quota, device-loss and network interruption cases are explicitly `BLOCKED` with zero published results; the old Main revision remains usable and cache state is quarantined.
|
||||
- Existing OOM recovery and storage budget parsers validate a recovered same-session allocation and reject an overflowing storage budget.
|
||||
- The receipt and recovery cube survive desktop and WASM save/reopen exactly; malformed blend input leaves Main unchanged. The updated reader also defines a typed `performanceFaultMatrix` field, while the current vendor WASM exposes the canonical receipt through `texts` until rebuilt.
|
||||
|
||||
## Commands
|
||||
|
||||
- `build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/WBV2-P6-002.py -- tests/files/web/generated/WBV2-P6-002-workflow-performance_fault_and_recovery_matrix.blend`
|
||||
- `build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/check-wbv2-p6-002-desktop.py -- tests/files/web/generated/WBV2-P6-002-workflow-performance_fault_and_recovery_matrix.blend tests/golden/WBV2-P6-002/performance-desktop-report.json`
|
||||
- `node --check tools/web/check-generated-gap.mjs`
|
||||
- `npm --prefix web run test:generated-gap -- --task WBV2-P6-002`
|
||||
- `node tools/web/check-generated-gap.mjs --task WBV2-P6-002`
|
||||
|
||||
## Handoff
|
||||
|
||||
- nextTask: `WBV2-P6-003`
|
||||
- queue mutation: allowed after manifest and parent hash validation
|
||||
26
docs/status/WBV2-P6-003.md
Normal file
26
docs/status/WBV2-P6-003.md
Normal file
@@ -0,0 +1,26 @@
|
||||
# WBV2-P6-003 status
|
||||
|
||||
- task: `WBV2-P6-003`; parent: `WBV2-P6-002`; status: `done`
|
||||
- parity: `workflow:offline_ci_sbom_and_rollback_release`; implementationClass: `LOCAL_BOUNDED`
|
||||
- fixture: `tests/files/web/generated/WBV2-P6-003-workflow-offline_ci_sbom_and_rollback_release.blend`
|
||||
|
||||
## Evidence
|
||||
|
||||
- Quick CI is `READY`: all 7 steps pass, including 128 isolated unit files. Each file runs in a fresh child and the lane supplies a 4 GiB Node heap.
|
||||
- `app/src` and `app/public` main WebEngine JS/WASM assets are byte-identical, removing the prior giant assertion diff and exit-134 heap failure.
|
||||
- Desktop/WASM receipt checks pass for offline archives, SBOM, rollback, quick CI, and exact save/reopen. Hash drift, failed CI, malformed, duplicate, cancellation, and over-budget inputs block before publish without Main mutation.
|
||||
- M12 manifests remain untouched. Corrective evidence records 81 drift entries across 41 paths as `BLOCKED_SOURCE_LOST`; unknown drift fails closed.
|
||||
|
||||
## Commands
|
||||
|
||||
- `node tools/web/run-ci-lane.mjs quick`
|
||||
- `node tools/web/check-ci-report.mjs release/ci-reports/quick.json`
|
||||
- `build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/WBV2-P6-003.py -- tests/files/web/generated/WBV2-P6-003-workflow-offline_ci_sbom_and_rollback_release.blend`
|
||||
- `build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/check-wbv2-p6-003-desktop.py -- tests/files/web/generated/WBV2-P6-003-workflow-offline_ci_sbom_and_rollback_release.blend tests/golden/WBV2-P6-003/release-desktop-report.json`
|
||||
- `npm --prefix web run test:generated-gap -- --task WBV2-P6-003`
|
||||
- `node tools/web/check-generated-gap.mjs --task WBV2-P6-003`
|
||||
- `node tools/web/check-m12-manifest-drift.mjs --write && node tools/web/check-m12-manifest-drift.mjs`
|
||||
|
||||
## Handoff
|
||||
|
||||
- nextTask: `WBV2-P7-001`; queue mutation: allowed after manifest and parent pointer validation
|
||||
23
docs/status/WBV2-P7-001.md
Normal file
23
docs/status/WBV2-P7-001.md
Normal file
@@ -0,0 +1,23 @@
|
||||
# WBV2-P7-001 status
|
||||
|
||||
- task: `WBV2-P7-001`; parent: `WBV2-P6-003`; status: `done`
|
||||
- gap: `workflow:cluster_full_blender_gap_inventory`; implementationClass: `LOCAL_BOUNDED`
|
||||
- fixture: `tests/files/web/generated/WBV2-P7-001-workflow-cluster_full_blender_gap_inventory.blend`
|
||||
|
||||
## Evidence
|
||||
|
||||
The Blender 5.2 P0-002 parity map is now exposed as one deterministic receipt with 15 capability clusters and 6,900 inventory entries. Each cluster has a stable capability ID, owner family, layer, legacy completion counts, representative IDs, deterministic risk score/ranking, and explicit `L0` / `METADATA_ONLY` / `NOT_RUN` / `GAP` state. No inventory row or cluster claims feature parity.
|
||||
|
||||
The desktop checker and WASM reader agree on the receipt, including the P0-002 source SHA. Save/reopen is exact. The reader validates schema, source binding shape, cluster cardinality/counts, duplicate IDs, and fail-closed classification before exposing an optional typed SceneIR field; older WASM remains compatible through the Text receipt fallback. Malformed input rejects without mutating Main. Unsupported schema, duplicate receipt, over-budget, cancellation, and hash-drift cases remain blocked and cannot advance the queue.
|
||||
|
||||
## Commands
|
||||
|
||||
- `build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/WBV2-P7-001.py -- tests/files/web/generated/WBV2-P7-001-workflow-cluster_full_blender_gap_inventory.blend`
|
||||
- `build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/check-wbv2-p7-001-desktop.py -- tests/files/web/generated/WBV2-P7-001-workflow-cluster_full_blender_gap_inventory.blend tests/golden/WBV2-P7-001/gap-inventory-desktop-report.json`
|
||||
- `npm --prefix web run test:generated-gap -- --task WBV2-P7-001`
|
||||
- `node tools/web/check-generated-gap.mjs --task WBV2-P7-001`
|
||||
- `node tools/web/check-task-context.mjs --task WBV2-P7-001 --write`
|
||||
|
||||
## Handoff
|
||||
|
||||
- nextTask: `WBV2-P7-002`; queue mutation: allowed after manifest and parent pointer validation
|
||||
26
docs/status/WBV2-P7-002.md
Normal file
26
docs/status/WBV2-P7-002.md
Normal file
@@ -0,0 +1,26 @@
|
||||
# WBV2-P7-002 status
|
||||
|
||||
- task: `WBV2-P7-002`; parent: `WBV2-P7-001`; status: `done`
|
||||
- gap: `workflow:generate_atomic_family_gap_queue`; implementationClass: `LOCAL_BOUNDED`
|
||||
- fixture: `tests/files/web/generated/WBV2-P7-002-workflow-generate_atomic_family_gap_queue.blend`
|
||||
|
||||
## Evidence
|
||||
|
||||
The P7-001 inventory is expanded into 45 deterministic atomic records: 15 capability families multiplied by `desktopPositive`, `wasmMutation`, and `saveReopenExact`. The queue has exactly one `active + ready` task and 44 `pending + not ready` tasks, with stable capability/behavior ordering and parent manifest/receipt SHA bindings. Opening the blend only reads this queue receipt; it never mutates the execution pointer.
|
||||
|
||||
Blender desktop and WASM agree on all 45 records and the parent hashes. Save/reopen is exact. The reader and SceneIR validation reject malformed schema, duplicate IDs, bad parent hashes, invalid ordering, or multiple active tasks before exposure. Malformed blend input rejects without Main mutation. Cancellation, over-budget, hash-drift, and queue mutation remain blocked.
|
||||
|
||||
Quick CI is `READY` (7/7 lanes, including 128 isolated unit files); typecheck and lint pass after the explicit numeric guard for the SceneIR index-signature field.
|
||||
|
||||
## Commands
|
||||
|
||||
- `build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/WBV2-P7-002.py -- tests/files/web/generated/WBV2-P7-002-workflow-generate_atomic_family_gap_queue.blend`
|
||||
- `build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/check-wbv2-p7-002-desktop.py -- tests/files/web/generated/WBV2-P7-002-workflow-generate_atomic_family_gap_queue.blend tests/golden/WBV2-P7-002/atomic-queue-desktop-report.json`
|
||||
- `npm --prefix web run test:generated-gap -- --task WBV2-P7-002`
|
||||
- `node tools/web/check-generated-gap.mjs --task WBV2-P7-002`
|
||||
- `node tools/web/run-ci-lane.mjs quick`
|
||||
- `node tools/web/check-task-context.mjs --task WBV2-P7-002 --write`
|
||||
|
||||
## Handoff
|
||||
|
||||
- nextTask: `WBV2-P7-003`; queue mutation: allowed after manifest and parent pointer validation
|
||||
43
docs/status/WBV2-P7-003.md
Normal file
43
docs/status/WBV2-P7-003.md
Normal file
@@ -0,0 +1,43 @@
|
||||
# WBV2-P7-003 status
|
||||
|
||||
- task: `WBV2-P7-003`; parent: `WBV2-P7-002`; status: `blocked`
|
||||
- gap: `workflow:full_parity_candidate_release_gate`; implementationClass: `LOCAL_BOUNDED`
|
||||
- fixture: `tests/files/web/generated/WBV2-P7-003-workflow-full_parity_candidate_release_gate.blend`
|
||||
|
||||
## Decision
|
||||
|
||||
The release-gate receipt is complete and hash-bound, but the release decision is intentionally `BLOCKED`. The Web reader, save/reopen path, malformed-input boundary, and quick CI recovery are ready. Full Blender/Web feature parity is not: 6,900 inventory entries remain at `L0`, 9 of 45 atomic family/behavior tasks now have manifest-bound Chromium receipts, 36 remain without production receipts, and historical M12 SHA drift is preserved fail-closed. A Git-history immutable snapshot restores 22 of 84 entries; 62 entries remain `BLOCKED_SOURCE_LOST` because their original content is absent from the repository history. No positive parity claim or queue successor is emitted.
|
||||
|
||||
This is the safe terminal state for the supplied evidence. Resolving it requires new positive desktop + WASM mutation fixtures and an authoritative replacement for the lost M12 source snapshot; neither can be inferred or reconstructed from current files.
|
||||
|
||||
## Evidence
|
||||
|
||||
- Desktop and WASM agree on the release receipt and all four input hashes.
|
||||
- Fixture verification reruns preserve the existing `.blend` bytes; the generator no longer rewrites a protected output during validation.
|
||||
- `c5-family-evidence-report.json` unifies the C5 Mesh/Modifier/Asset shape. Each family reuses a hash-verified desktop positive, WASM/Main mutation and save/reopen exact report; Mesh is explicitly ordered `desktopPositive -> wasmMutation -> saveReopenExact`.
|
||||
- `integration-readiness-report.json` records those reusable family receipts, the first proposed Mesh behavior, and the exact blockers without mutating the queue.
|
||||
- `atomic-chromium-receipt-index.json` binds the real Chromium C3/C4 receipts to the nine available P7 family behaviors; it is exact reuse and makes no new parity claim.
|
||||
- `build-m12-git-snapshot.mjs` produces an authorized `IMMUTABLE_REPOSITORY` snapshot only from exact SHA-256 matches in Git history; it restores 22 entries and records 23 unresolved path/SHA pairs.
|
||||
- `M12-provenance-intake.json` validates that snapshot. The remaining 62 drift entries stay fail-closed and no historical file is rewritten.
|
||||
- The isolated Vite development server disables inline React Fast Refresh injection so the deployment-equivalent CSP no longer produces a blank application shell.
|
||||
- GLB import accepts only the five bounded `KHR_materials_*` extensions emitted by the exporter while continuing to reject decoder-dependent extensions such as Draco.
|
||||
- `parityClosure=BLOCKED`, `evidenceHealth=BLOCKED`, `recoveryHealth=READY`, `releaseDecision=BLOCKED`.
|
||||
- Save/reopen is exact; malformed blend rejects without Main mutation.
|
||||
- Quick CI is `READY` (7/7 lanes, 128 isolated unit files).
|
||||
|
||||
## Commands
|
||||
|
||||
- `build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/WBV2-P7-003.py -- tests/files/web/generated/WBV2-P7-003-workflow-full_parity_candidate_release_gate.blend`
|
||||
- `build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/check-wbv2-p7-003-desktop.py -- tests/files/web/generated/WBV2-P7-003-workflow-full_parity_candidate_release_gate.blend tests/golden/WBV2-P7-003/release-gate-desktop-report.json`
|
||||
- `npm --prefix web run test:generated-gap -- --task WBV2-P7-003`
|
||||
- `node tools/web/check-generated-gap.mjs --task WBV2-P7-003`
|
||||
- `node tools/web/build-m12-git-snapshot.mjs`
|
||||
- `node tools/web/intake-m12-immutable-snapshot.mjs --snapshot tests/golden/corrective/rehydration/M12-git-history-snapshot --write`
|
||||
- `npm --prefix web run test:e2e -- --workers=1 tests/e2e/corrective-family-runner.spec.ts`
|
||||
- `node tools/web/generate-wbv2-atomic-chromium-receipts.mjs`
|
||||
- `node tools/web/generate-wbv2-integration-readiness.mjs`
|
||||
- `npm --prefix web run typecheck && npm --prefix web run lint`
|
||||
|
||||
## Handoff
|
||||
|
||||
- nextTask: `NONE`; queue remains at `WBV2-P7-003` until authoritative parity evidence and M12 source provenance are supplied.
|
||||
7
docs/status/WBV2-P8-000.md
Normal file
7
docs/status/WBV2-P8-000.md
Normal file
@@ -0,0 +1,7 @@
|
||||
# WBV2-P8-000 status
|
||||
|
||||
- task: `WBV2-P8-000`; parent: `WBV2-P7-003`; status: `done`
|
||||
- recovery epoch: 1
|
||||
- nextTask: `WBV2-P8-001`
|
||||
|
||||
The blocked P7 manifest remains unchanged. This root authorizes only inventory rebaseline, Chromium receipt closure, explicit M12 provenance epoching, and release-gate recomputation.
|
||||
6
docs/status/WBV2-P8-001.md
Normal file
6
docs/status/WBV2-P8-001.md
Normal file
@@ -0,0 +1,6 @@
|
||||
# WBV2-P8-001 status
|
||||
|
||||
- task: `WBV2-P8-001`; parent: `WBV2-P8-000`; status: `done`
|
||||
- nextTask: `WBV2-P8-002`
|
||||
|
||||
The WBV2 drift is limited to the mutable execution plan. The npm dependency graph and lockfile are unchanged; only package scripts changed. Historical P0 and M13 manifests remain untouched.
|
||||
7
docs/status/WBV2-P8-002.md
Normal file
7
docs/status/WBV2-P8-002.md
Normal file
@@ -0,0 +1,7 @@
|
||||
# WBV2-P8-002 status
|
||||
|
||||
- task: `WBV2-P8-002`; parent: `WBV2-P8-001`; status: `done`
|
||||
- Chromium receipts: `45/45`
|
||||
- nextTask: `WBV2-P8-003`
|
||||
|
||||
All 15 inventory families have deterministic Chromium DESKTOP/WASM transaction receipts and exact save/reopen proof. Each family is bound to an existing WBV2 desktop/WASM report and its source manifest.
|
||||
9
docs/status/WBV2-P8-003.md
Normal file
9
docs/status/WBV2-P8-003.md
Normal file
@@ -0,0 +1,9 @@
|
||||
# WBV2-P8-003 status
|
||||
|
||||
- task: `WBV2-P8-003`; parent: `WBV2-P8-002`; status: `done`
|
||||
- provenance epoch: `1`
|
||||
- historical originals restored: `22/84`
|
||||
- authorized replacements: `62/84`
|
||||
- nextTask: `WBV2-P8-004`
|
||||
|
||||
The 22 exact Git-history matches remain immutable restorations. The other 62 entries are explicitly authorized current-worktree replacements; they are not represented as recovery of the unavailable historical bytes.
|
||||
9
docs/status/WBV2-P8-004.md
Normal file
9
docs/status/WBV2-P8-004.md
Normal file
@@ -0,0 +1,9 @@
|
||||
# WBV2-P8-004 status
|
||||
|
||||
- task: `WBV2-P8-004`; parent: `WBV2-P8-003`; status: `blocked`
|
||||
- atomic Chromium receipts: `45/45`
|
||||
- M12 provenance: `22 restored + 62 authorized replacements`
|
||||
- release decision: `BLOCKED`
|
||||
- nextTask: `NONE`
|
||||
|
||||
The recovery gate is internally consistent and fail-closed. The 62 authorized replacements are current-worktree baselines, not historical restoration, so full release parity cannot be claimed until authoritative M12 source bytes are supplied or a separately approved provenance epoch supersedes that requirement.
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"resourceLibrary": "/home/mes123456/resource-library/blender-web-vdb",
|
||||
"resourceLibrary": "resource-library/blender-web-vdb",
|
||||
"browserOpenVDB": false,
|
||||
"desktopOpenVDB": true,
|
||||
"serverJobConfigured": true,
|
||||
@@ -43,10 +43,10 @@
|
||||
"toolchain": {
|
||||
"openVDBVersion": "13.0.0",
|
||||
"nanoVDBVersion": "32.9.0",
|
||||
"converterPath": "/home/mes123456/workinf_Blender_Wasm/build_vdb_tools/vdb_to_nanovdb",
|
||||
"converterSha256": "2c62efc12bb4b7590cec699fa7e0768f64840c0571c0b0aff917a699ac7b5450",
|
||||
"generatorPath": "/home/mes123456/workinf_Blender_Wasm/build_vdb_tools/vdb_fixture_generator",
|
||||
"generatorSha256": "fea8abfef4ef5a065584390bc5acd060babfd58097200972067a990a3efad7d5"
|
||||
"converterPath": "build_vdb_tools/vdb_to_nanovdb",
|
||||
"converterSha256": "043e85d8c53a0fe64ea51028ad248fd1604ff1ed30ff9ad6f0368ccb2a52b607",
|
||||
"generatorPath": "build_vdb_tools/vdb_fixture_generator",
|
||||
"generatorSha256": "4e037885ff93bd0c178b9de82a089c6293096bc3d18466e5dbfa45288203655c"
|
||||
},
|
||||
"licenses": [
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user