# M03-RND-WMO-RENDER-RESOURCE-CACHE-001 — WMO render resource cache state

<!-- OPENWC_CLAIM:M03-RND-WMO-RENDER-RESOURCE-CACHE-001:sindo-main-codex:2026-07-20 -->

## Ownership

- Target: M03
- Program: RND
- Owner/Agent ID: sindo-main-codex
- Branch: `work/sindo-main-codex/m03-wmo-render-resource-cache`
- Lease expires UTC: 2026-07-20
- Integrator: M03 milestone integrator

## Outcome

Extract lightweight-WMO render Resource cache, negative cache and asynchronous
request bookkeeping from the loader while preserving loader-owned I/O and
cache-format validation.

## Non-goals

- Call `ResourceLoader`, construct cache paths or inspect files.
- Validate `WMOStreamingResource` script identity or format version.
- Own cached WMO scenes, live prototypes, placement/build jobs or Nodes/RIDs.
- Change fallback order, retry behavior, quality profiles or visual output.
- Claim asset-backed WMO fidelity, leak acceptance or traversal p95/p99.

## Paths

- Exclusive: `src/render/wmo/wmo_render_resource_cache_state.gd`,
  `src/tools/verify_wmo_render_resource_cache_state.gd`,
  `docs/modules/wmo-render-resource-cache-state.md`, this claim
- Shared/hotspots: `src/scenes/streaming/streaming_world_loader.gd`,
  `src/tools/verify_render_runtime_cache_shutdown.gd`,
  `docs/modules/wmo-render-build-queue.md`, `docs/modules/world-renderer.md`,
  `docs/modules/README.md`, `RENDER.md`, `targets/03-renderer-facade.md`
- Generated/ignored: `.godot`, native DLL, generated ADT/WMO resources, caches
  and proprietary renderer corpus

## Contracts and data

- State keys are loader-normalized relative WMO paths copied as `String`.
- Cached values are already validated `Resource` references.
- Pending values are cache paths for loader-owned `ResourceLoader` requests.
- Terminal request removal precedes validated-resource or missing-state adoption.
- Request/missing reset preserves accepted resources; full clear releases all.
- Cache/schema/coordinate/profile versions and validation rules remain unchanged.

## Dependencies

- Requires: current master `c954704`, accepted WMO render build queue
- Blocks: further WMO cached-scene/load and materialization decomposition
- External state: none; verification uses synthetic Resources and paths

## Verification

- Commands: dedicated lifecycle/request/cache/reset/diagnostics/source/timing
  verifier; WMO queue/planner/registry/resolver/material/shutdown plus adjacent
  renderer/streaming/coordinate/documentation/coordination gates
- Fixtures: synthetic Resource instances and normalized relative/cache paths
- Fidelity evidence: exact current cache/missing/request transitions preserved
- Performance budget: 100 cycles over 256 resource/request keys under 1 second

## Documentation deliverables

- Inline public API docs
- Module specification with inputs/outputs, ownership and source map
- Data-flow, lifecycle/state and loader interaction sequence diagrams
- World-renderer, module registry, WMO queue and RENDER status updates

## Simplicity and naming

- Important names introduced: `WmoRenderResourceCacheState`
- Simplest considered solution: one RefCounted around three Dictionaries
- Rejected complexity/abstractions: generic cache, callbacks, signals, mutexes,
  ResourceLoader wrapper, persistence layer or shared WMO/M2 cache hierarchy
- Unavoidable complexity and justification: partial reset must retain validated
  Resources while discarding pending/negative state at map reset and shutdown
- Measured optimization evidence: bounded synthetic store/request/reset loop

## Status

- State: accepted
- Done: state holder implemented; loader cache/request/reset/metrics adapters
  migrated; shutdown regression and required documentation updated
- Next: cached WMO scene/load state or liquid service extraction
- Blocked by:

<!-- OPENWC_INTEGRATION:ACCEPTED:M03-RND-WMO-RENDER-RESOURCE-CACHE-001:b4955d6 -->

## Handoff

- Commit: `d39f591`
- Results: cache-state PASS (`cases=10`, `iterations=100`,
  `elapsed_ms=58.727`); direct no-`.godot` cache-state run PASS (`45.361ms`);
  WMO queue/planner/registry/resolver/material/shutdown plus 18 adjacent
  M2/terrain/facade/scheduler/streaming/coordinate regressions PASS;
  documentation and coordination gates PASS; checkpoint dry-run PASS `7/7`.
- Remaining risks: accepted Resources remain strongly referenced until full
  shutdown release; cached-scene and ResourceLoader I/O seams remain in loader;
  no proprietary corrupt-cache fixture, asset-backed WMO traversal/leak run,
  p95/p99 or original-client paired evidence. Full loader cannot be used as a
  direct empty-class-cache smoke because pre-existing typed global coordinate/
  focus dependencies require editor class registration; the extracted service
  itself passed cold and normal editor parse passed.
- Documentation updated: inline public API; new
  `docs/modules/wmo-render-resource-cache-state.md`; module registry, WMO queue,
  world renderer and `RENDER.md`; data-flow/state/sequence diagrams, ownership,
  threading, cache-version boundary, failure/recovery and source map included.
- Integration: merged as `b4955d6`; post-merge cache state (`cases=10`,
  `iterations=100`, `elapsed_ms=51.949`), shutdown, WMO queue/resolver, facade,
  internal-access (`private_symbols=41`), `7/7` manifest, documentation and
  coordination gates passed.

<!-- OPENWC_HANDOFF:READY:M03-RND-WMO-RENDER-RESOURCE-CACHE-001:d39f591 -->
