fix(M00): release GUI capture render resources
Work-Package: M00-QAR-GUI-RID-SHUTDOWN-001 Agent: sindo-main-codex Tests: render baseline dry-run; runtime cache shutdown; comparator self-test; coordination and documentation gates Fidelity: shutdown-only ownership fix; no visual or Blizzlike335 behavior change
This commit is contained in:
@@ -0,0 +1,78 @@
|
||||
# M00-QAR-GUI-RID-SHUTDOWN-001 — GUI capture RID shutdown
|
||||
|
||||
<!-- OPENWC_CLAIM:M00-QAR-GUI-RID-SHUTDOWN-001:sindo-main-codex:2026-07-15 -->
|
||||
|
||||
## 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
|
||||
Reference in New Issue
Block a user