116 lines
5.3 KiB
Markdown
116 lines
5.3 KiB
Markdown
# 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 -->
|