diff --git a/coordination/claims/M03-RND-M2-RUNTIME-REBUILD-CLASSIFIER-001.md b/coordination/claims/M03-RND-M2-RUNTIME-REBUILD-CLASSIFIER-001.md new file mode 100644 index 0000000..6e6e6d3 --- /dev/null +++ b/coordination/claims/M03-RND-M2-RUNTIME-REBUILD-CLASSIFIER-001.md @@ -0,0 +1,94 @@ +# M03-RND-M2-RUNTIME-REBUILD-CLASSIFIER-001 — M2 runtime rebuild classifier + + + +## Ownership + +- Target: M03 +- Program: RND +- Owner/Agent ID: sindo-main-codex +- Branch: `work/sindo-main-codex/m03-m2-runtime-rebuild-classifier` +- Lease expires UTC: 2026-07-20 +- Integrator: M03 milestone integrator + +## Outcome + +Extract the memoized decision that stale cached M2 meshes require an in-memory +runtime rebuild because raw batches contain billboard vertices or referenced UV +rotation transforms. + +## Non-goals + +- Load raw M2 files or cache Resources. +- Build, replace or mutate Meshes, materials, Nodes or RIDs. +- Change `M2_MATERIAL_REFRESH_VERSION` or cache formats. +- Interpret animation, particles, ribbons or general M2 shader fidelity. +- Change path normalization, ResourceLoader transitions or finalize budgets. + +## Paths + +- Exclusive: `src/render/m2/m2_runtime_mesh_rebuild_classifier.gd`, + `src/tools/verify_m2_runtime_mesh_rebuild_classifier.gd`, + `docs/modules/m2-runtime-mesh-rebuild-classifier.md`, this claim +- Shared/hotspots: `src/scenes/streaming/streaming_world_loader.gd`, + `docs/modules/world-renderer.md`, `docs/modules/README.md`, `RENDER.md`, + `targets/03-renderer-facade.md` +- Generated/ignored: `.godot`, native DLL, generated ADT/M2 resources, caches + and proprietary renderer corpus + +## Contracts and data + +- Billboard metadata requires rebuild when `has_billboard` is true or + `billboard_vertex_count` is positive in any Dictionary batch. +- UV rotation requires non-empty transforms and combos plus a referenced + non-identity `Vector4` rotation or absolute rotation speed above `0.000001`. +- Only up to four texture stages per batch are inspected; invalid variants and + out-of-range combo/transform indices are skipped. +- The first decision for a normalized path is memoized until clear, matching the + existing loader cache lifetime. + +## Dependencies + +- Requires: current accepted master `90b1dac` +- Blocks: further M2 mesh request/cache/finalization extraction +- External state: none; verification uses synthetic raw M2 Dictionaries + +## Verification + +- Commands: dedicated billboard/UV/index/stage/cache/clear/source/timing verifier; + M2 builder/grouper/transform/registry, materials, shutdown, facade, + internal-access, manifest, documentation and coordination gates +- Fixtures: synthetic batches, transform combos and rotation dictionaries +- Fidelity evidence: exact existing predicate thresholds, stage cap and cache lifetime preserved +- Performance budget: 100 classifications over 256 paths under 1 second + +## Documentation deliverables + +- Inline public API docs +- Module specification with inputs/outputs, ownership and source map +- Data-flow, lifecycle/state, sequence and dependency diagrams +- World-renderer, module registry and RENDER status updates + +## Simplicity and naming + +- Important names introduced: `M2RuntimeMeshRebuildClassifier` +- Simplest considered solution: one RefCounted with one memoized query and clear +- Rejected complexity/abstractions: generic predicate cache, strategy interface, + ResourceLoader wrapper, signals or typed rewrite of raw parser Dictionaries +- Unavoidable complexity and justification: four-stage combo indirection is the + existing build-12340 M2 material boundary +- Measured optimization evidence: bounded synthetic classification loop + +## Status + +- State: claimed +- Done: rebuild predicate, one query site and two cache-clear sites identified +- Next: implement classifier, migrate loader adapter, verify and document +- Blocked by: + +## Handoff + +- Commit: +- Results: +- Remaining risks: +- Documentation updated: