09b3e87a8d
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
79 lines
3.6 KiB
Markdown
79 lines
3.6 KiB
Markdown
# 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
|