# M00-QAR-GUI-RID-SHUTDOWN-001 — GUI capture RID shutdown ## Ownership - Target: M00 - Program: QAR - Owner/Agent ID: sindo-main-codex - Branch: `work/sindo-main-codex/m00-gui-rid-shutdown` - Lease expires UTC: 2026-07-15 - Integrator: milestone integrator ## Outcome Identify ownership of GUI render-baseline shutdown leaks and apply the smallest regression-covered fix that lets queued world resources release before engine teardown. ## Non-goals - Renderer architecture decomposition. - Hiding or filtering Godot leak diagnostics. - Changing M00 status, Evidence or `OPENWC_TARGET_DONE`. ## Paths - Exclusive: capture shutdown sequencing and its regression diagnostic - Shared/hotspots: `src/tools/capture_render_checkpoints.gd`, renderer module shutdown documentation - Generated/ignored: GUI capture output and verbose logs under `user://` ## Contracts and data - Public API/events: unchanged - Schema/format version: unchanged - Migration/compatibility: capture images and report schema remain unchanged - Consumers: M00 baseline runner and milestone integrator ## Dependencies - Requires: merged seven-reference evidence audit - Blocks: integrator disposition of the final GUI renderer leak risk - External state: proprietary references are not required for the focused shutdown regression ## Verification - Commands: focused GUI single-checkpoint capture with verbose shutdown, headless project load, manifest/self-tests, repository gates - Fixtures: existing non-proprietary render-baseline manifest and local extracted corpus - Fidelity evidence: no visual behavior change; focused PNG hash/report remains valid - Performance budget: shutdown-only change ## Documentation deliverables - Inline public API docs: shutdown method semantics if introduced - Module specification: shutdown ownership and observed leak status - Data-flow diagram: unchanged - Sequence/state/dependency diagrams: update shutdown sequence only if behavior changes - Source map/status updates: capture tool if changed ## Simplicity and naming - Important names introduced: `_release_runtime_caches_for_shutdown`, `_free_detached_node_cache`, `_queue_free_streamed_node` - Simplest considered solution: explicitly release capture-owned scene references and drain deferred deletion - Rejected complexity/abstractions: global RID registry or suppressed engine diagnostics - Unavoidable complexity and justification: async streaming jobs must finish before resource ownership can drain - Measured optimization evidence: not applicable ## Status - State: ready-for-review - Done: reproduced the focused leak; assigned detached prototype/resource caches and empty liquid roots to explicit owners; added a headless regression; verified zero Node/resource/RID leak lines in focused and seven-checkpoint GUI captures - Next: integrator review and disposition of the residual engine-level zero-reference `RefCounted` diagnostic - Blocked by: ## Handoff - Commit: this work-package commit - Results: before the fix the focused capture retained 6 mesh, 6 material, 4 shader, 6 texture, 6 instance and RenderingDevice RIDs (30 resources); after the fix focused and seven-checkpoint captures retained none - Remaining risks: D3D12 descriptor fallback remains unrelated; Godot can report a timing-dependent anonymous `RefCounted` whose reference count is already zero, without retained Node/resource/RID ownership - Documentation updated: `RENDER.md`, `docs/modules/world-renderer.md`, `docs/M00_FINAL_PAIRED_EVIDENCE.md`; existing renderer shutdown sequence updated, no new diagram required