# 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