# 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