Accumulated uncommitted work: GHOST Web backend, WebGL/GPU web layer, web workflow engine and protocol, tooling, docs and task records. Large generated evidence, user-testing archives, build snapshots and imported test assets remain untracked. Co-Authored-By: Claude Code <noreply@anthropic.com>
7.6 KiB
WBV2 next migration waves
Date: 2026-09-01
The current function-module epoch ends at WBV2-P1130-001. It contains 37 completed source-backed modules plus the bridge/root and successor-authorization tasks. It is a verified migration slice, not full Blender parity: the immutable inventory remains 6900 total and effective 290/6609.
Completed and reusable
- Core scene, mesh, material, non-mesh, nodes, asset, sculpt, editor, object, compositor, audio/particle and rig modules: reuse their receipts by SHA-256.
- GLB mesh/non-mesh roundtrip dependency repair:
WBV2-P1123-000. - Historical M12 drift audit:
WBV2-P1124-000; 84 entries across 43 paths areBLOCKED_SOURCE_LOST, with old manifests untouched. - Geometry Nodes allowlist/Main persistence and typed unsupported mapping:
WBV2-P1125-000. - Grease Pencil viewport selection/marquee on main and Offscreen Chromium:
WBV2-P1126-000. - Tracking Mask reader/interaction:
WBV2-P1127-000. - ffmpeg.wasm MOVIE probe/proxy fallback:
WBV2-P1128-000; local core resources are hash-bound and upstream source is checked out atf876f907c7e9b9bf51d4ed0b913a855a63ae63fc. - Core Scene Graph compositor/performance/sampling settings:
WBV2-P1129-001; reused P65/P66/P67 source receipts and added one aggregate Chromium Main transaction receipt. - UI Editor View2D state:
WBV2-P1130-001; dedicated adapter preserves Graph/Dope Sheetcurand pixelmaskwithout changing the P1102 parser. - Web-safe Sound/Speaker/ParticleSettings retention uses authoritative Main Scene IDProperty; desktop Audaspace stays disabled.
Ordered follow-up waves
IO_LIBRARY_HASH_REHYDRATION: useM12-manifest-sha-drift.jsonand current observed hashes to produce corrective evidence; recover original bytes only from trusted cache. Never re-sign old manifests.UI_EDITOR_FAMILY: split the 3930 UI rows by editor/workspace/region behavior, reusing existing Main reader/context and keyboard/layout evidence without duplicate E2E.MEDIA_IO_FAMILY: extend image/audio/video routes around the ffmpeg.wasm Worker; add a new receipt for each distinct codec/container contract.NODES_SIMULATION_FAMILY: extend only for a new node family or simulation lifecycle with distinct Main mutation and recovery evidence.MESH_EDITING_FAMILY: select remaining UV/material-slot/topology rows not represented by existing aggregate fixtures.OTHER_OPERATORS_CORE_SCENE: cluster remaining operators by Main ownership and save/reopen semantics, then run source-backed modules only.
Execution shape for the remaining inventory
The 6,609 effective pending rows are a coverage ledger, not 6,609 independent implementations. The implementation unit remains:
owner family -> source-backed module -> shared command/reader -> operator case matrix
For every new module, use this bounded sequence:
- Generate a deterministic family slice from the immutable P0 inventory. Each row must have one primary module, one behavior marker, an implementation class, and a source path. Existing receipts are linked by SHA-256 instead of reimplemented.
- Freeze a small positive/negative/reopen contract. Implement the real Blender Main, WebEngine, WASM ABI, Worker/protocol and frontend path once for that behavior.
- Run the mapped case matrix in shards against the same catalog/source snapshot. Shards may run concurrently inside a module, but queue handoff remains serial and follows the parent manifest only.
- Aggregate source hashes, positive and negative counts, no-mutation/recovery evidence, undo/redo, save/reopen, deterministic replay and Chromium results into one receipt. Only then may an effective-ledger overlay add coverage; the original inventory and historical manifests stay unchanged.
The recommended batching is by shared ownership, not by operator name:
| Batch | Module slices | Planning scope | Required reuse |
|---|---|---|---|
| Provenance gate | IO_LIBRARY_HASH_REHYDRATION |
84 drift entries / 43 paths | M12 corrective report; trusted cache only; never re-sign |
| UI | editor/workspace/region context, input, layout persistence | 3,930 | UI_EDITOR, UI_INPUT_INTERACTION, Main context readers |
| Media | image/audio/video container and codec contracts | 585 | SEQUENCER_MOVIE_CODEC, local ffmpeg.wasm Worker, media retention |
| Nodes | node families, sockets, simulation lifecycle | 543 | NODES_GRAPH, NODES_SIMULATION, typed unsupported mapping |
| Mesh | UV, material slots, topology and edit history | 431 | SCENE_OBJECT_MESH, mesh transaction/history fixtures |
| Rig/Object | remaining rig, constraint, object ownership behaviors | 691 | RIG_ANIMATION, OBJECT_OPERATIONS, depsgraph recovery |
| Simulation | non-node physics/cache lifecycles | 155 | SIMULATION_CACHE, ENGINE_RUNTIME |
| Material/Render | unrepresented material and render settings | 125 | SHADER_MATERIAL, RENDER_PIPELINE |
| Sculpt/Paint | remaining stroke, mask and paint data paths | 117 | SCULPT_PAINT, PAINT_STROKE |
| Other/Core | residual operators and core Scene graph ownership | 169 | Main ID ownership, save/reopen and explicit unsupported routing |
Planning scopes overlap where one legacy row belongs to more than one observable behavior; they must not be summed to claim more than the 6,609 effective pending rows. The provenance gate is a separate corrective lane: it must be recorded before any completion overlay is changed, but a source-lost result does not block an unrelated source-backed module once that status is explicit. Every successor still requires its own source-backed slice and parent manifest authorization.
Per-family exit gates
A family remains in_progress until every selected module has all of the following:
- stable source, protocol, Worker/frontend and fixture hashes;
- a real Main mutation or an exact Main reader/context result;
- positive, malformed/unsupported and no-mutation cases;
- undo/redo where the behavior mutates state, plus save/reopen and deterministic replay;
- Chromium-only production evidence and an aggregate manifest with shard exit codes;
- an explicit
VERIFIED,UNSUPPORTED,ENVIRONMENT_UNAVAILABLE,HASH_DRIFTorSOURCE_LOSTresult for every mapped case.
Failure, hash drift, missing source, budget exhaustion or browser unavailability stops the
current module and preserves the parent nextTask. It never reduces the pending count and
never creates a corrective duplicate of an existing receipt.
Progress accounting
Report three numbers independently after each handoff: source-backed modules completed,
effective inventory coverage, and legacy regression coverage. The current baseline is
37 modules / 41 module tasks, 290/6609 effective, and 281/6618 legacy. A module
receipt may increase effective coverage only when its case-to-inventory mapping is
hash-bound; implementation or build success alone does not.
Verification rules
- Chromium only; use an isolated
WEB_TEST_PORTfor every Playwright lane. - Read the queue, print fresh context, and run context checks before edits.
- Do not rerun a completed module merely to refresh logs.
- Keep unsupported, environment-unavailable, hash-drift and source-lost states explicit.
- A module advances only after source hashes, positive/negative/recovery evidence, save/reopen, deterministic replay and aggregate manifest pass.
- The 6900 inventory and historical manifest meaning remain immutable.
External scheduler checkpoint
print-wbv2-live-status.mjs still reports the old scheduler/guardian/supervisor checkpoint blocked at P594. That state is unrelated to the local authoritative capability queue and remains read-only until an explicit scheduler recovery task is authorized.