Files
workinf_Blender_Wasm/docs/status/WBV2-NEXT-MIGRATION-WAVES.md
mes123456 f3e21c6b98
Some checks failed
M6 deployable RC / quick (push) Has been cancelled
M6 deployable RC / chromium (push) Has been cancelled
M6 deployable RC / release (push) Has been cancelled
chore: checkpoint web Blender migration source, tools and docs
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>
2026-11-10 11:18:01 +08:00

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 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:

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.