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>
111 lines
7.6 KiB
Markdown
111 lines
7.6 KiB
Markdown
# 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 are `BLOCKED_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 at `f876f907c7e9b9bf51d4ed0b913a855a63ae63fc`.
|
|
- 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 Sheet `cur` and pixel `mask` without changing the P1102 parser.
|
|
- Web-safe Sound/Speaker/ParticleSettings retention uses authoritative Main Scene IDProperty; desktop Audaspace stays disabled.
|
|
|
|
## Ordered follow-up waves
|
|
|
|
1. `IO_LIBRARY_HASH_REHYDRATION`: use `M12-manifest-sha-drift.json` and current observed hashes to produce corrective evidence; recover original bytes only from trusted cache. Never re-sign old manifests.
|
|
2. `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.
|
|
3. `MEDIA_IO_FAMILY`: extend image/audio/video routes around the ffmpeg.wasm Worker; add a new receipt for each distinct codec/container contract.
|
|
4. `NODES_SIMULATION_FAMILY`: extend only for a new node family or simulation lifecycle with distinct Main mutation and recovery evidence.
|
|
5. `MESH_EDITING_FAMILY`: select remaining UV/material-slot/topology rows not represented by existing aggregate fixtures.
|
|
6. `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:
|
|
|
|
```text
|
|
owner family -> source-backed module -> shared command/reader -> operator case matrix
|
|
```
|
|
|
|
For every new module, use this bounded sequence:
|
|
|
|
1. 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.
|
|
2. Freeze a small positive/negative/reopen contract. Implement the real Blender Main,
|
|
WebEngine, WASM ABI, Worker/protocol and frontend path once for that behavior.
|
|
3. 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.
|
|
4. 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_DRIFT` or
|
|
`SOURCE_LOST` result 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_PORT` for 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.
|