diff --git a/coordination/claims/M03-RND-M2-BUILD-BATCH-PLANNER-001.md b/coordination/claims/M03-RND-M2-BUILD-BATCH-PLANNER-001.md new file mode 100644 index 0000000..4f75127 --- /dev/null +++ b/coordination/claims/M03-RND-M2-BUILD-BATCH-PLANNER-001.md @@ -0,0 +1,93 @@ +# M03-RND-M2-BUILD-BATCH-PLANNER-001 — M2 build batch planner + + + +## Ownership + +- Target: M03 +- Program: RND +- Owner/Agent ID: sindo-main-codex +- Branch: `work/sindo-main-codex/m03-m2-build-batch-planner` +- Lease expires UTC: 2026-07-20 +- Integrator: M03 milestone integrator + +## Outcome + +Extract pure static/animated M2 build batch sizing and cursor progression from +the loader build-job loop into a scene-free planner. + +## Non-goals + +- Move build-job/queue ownership, tile eligibility or cancellation. +- Move animation/mesh requests, cache lookup, queue rotation or retry behavior. +- Create Nodes, MultiMesh, Mesh, materials or RIDs. +- Change render-budget permit consumption or per-profile batch limits. +- Introduce spatial-cell batching or claim asset-backed performance parity. + +## Paths + +- Exclusive: `src/render/m2/m2_build_batch_planner.gd`, + `src/tools/verify_m2_build_batch_planner.gd`, + `docs/modules/m2-build-batch-planner.md`, this claim +- Shared/hotspots: `src/scenes/streaming/streaming_world_loader.gd`, + `docs/modules/m2-placement-grouper.md`, `docs/modules/world-renderer.md`, + `docs/modules/README.md`, `RENDER.md`, `targets/03-renderer-facade.md` +- Generated/ignored: `.godot`, native DLL, generated ADT resources, caches and + proprietary renderer corpus + +## Contracts and data + +- Input: transform count, current offset, animated/static path selector and raw + animated/static batch limits +- Output: fresh plan Dictionary with effective batch size, batch count, next + offset and group-complete flag +- Selected batch limit clamps to at least one +- Batch count clamps to remaining non-negative transforms +- Group completes when no batch can be consumed or offset plus batch reaches end +- Queue/cache/schema/coordinate/profile values: unchanged + +## Dependencies + +- Requires: current master `9d74d99`; grouped transform arrays from + `M2PlacementGrouper` +- Blocks: broader M2 build-job state extraction +- External state: none; tests use scalar synthetic counts/limits + +## Verification + +- Commands: dedicated static/animated/limit/remaining/complete/empty/offset and + bounded timing verifier; loader source boundary; grouper/transform/registry plus + facade/internal-access/manifest/shutdown/documentation/coordination gates +- Fidelity evidence: exact batch/count/cursor formulas moved unchanged +- Performance budget: constant-time scalar/container calculation; no Node, + Resource, RID, task, queue, mutex, cache or file access + +## Documentation deliverables + +- Inline planner API documentation +- New module spec with inputs/outputs, data-flow, lifecycle, ownership, failure, + performance, fidelity limitations and source map +- Grouper, renderer/module registry and `RENDER.md` updates + +## Simplicity and naming + +- Important name: `M2BuildBatchPlanner` +- Simplest solution: one stateless `plan_batch` query with a small detached result +- Rejected complexity: job classes, state machine framework, callbacks, signals, + Resources, strategies or scheduler integration +- Unavoidable complexity: loader retains raw build-job Dictionaries +- Measured optimization evidence: bounded synthetic planning loop + +## Status + +- State: claimed +- Done: formula, ownership and non-goal boundary published +- Next: implement planner, migrate cursor calculation, tests and docs +- Blocked by: + +## Handoff + +- Commit: +- Results: +- Remaining risks: +- Documentation updated: