# M03-RND-STREAMING-PLANNER-001 — Pure streaming target planner ## Ownership - Target: M03 - Program: RND - Owner/Agent ID: sindo-main-codex - Branch: `work/sindo-main-codex/m03-streaming-target-planner` - Lease expires UTC: 2026-07-17 - Integrator: M03 milestone integrator ## Outcome Extract runtime/editor ADT wanted/retained-set calculation and boundary prefetch selection from `StreamingWorldLoader` into a scene-free, deterministic `StreamingTargetPlanner` with typed focus input and asset-free contract tests. ## Non-goals - Change load/retain radii, boundary thresholds, queue priority or LOD policy. - Move queue mutation, async jobs, cache ownership or GPU finalization. - Extract `RenderBudgetScheduler` or asset services in this package. - Change cache formats, renderer profiles or target milestone status. ## Paths - Exclusive: `src/render/streaming/streaming_target_planner.gd`, `src/render/streaming/streaming_target_policy.gd`, `src/render/streaming/streaming_target_plan.gd`, `src/tools/verify_streaming_target_planner.gd`, `docs/modules/streaming-target-planner.md`, this claim - Shared/hotspots: `src/scenes/streaming/streaming_world_loader.gd`, `docs/modules/world-renderer.md`, `docs/modules/README.md`, `RENDER.md` - Generated/ignored: `.godot`, native DLL, generated cache resources and proprietary renderer corpus ## Contracts and data - Input: immutable `GodotWorldPosition`, available-tile key set and immutable `StreamingTargetPolicy` - Output: immutable `StreamingTargetPlan` with focus tile plus detached wanted/retained tile-key sets - Tile-key representation remains the streamer's existing `_` internal key - Schema/cache/coordinate versions: unchanged - Consumers: `StreamingWorldLoader` runtime/editor refresh paths ## Dependencies - Requires: M01 typed coordinates/focus and integrated facade package `a100ced` - Blocks: budget scheduler extraction and planner performance regression gate - External state: none; tests use synthetic tile catalogs ## Verification - Commands: dedicated planner verifier, facade/focus/coordinate regressions, renderer manifest/dry-run and repository gates - Fixtures: center, edge, corner, unavailable-tile, clamped-radius and editor cases - Fidelity evidence: expected tile sets are captured from current formulas; full renderer dry-run retains all seven checkpoint plans - Performance budget: planner work remains bounded by square radii and creates no Node, Resource, task, cache or RID ## Documentation deliverables - Inline API docs for planner/policy/plan - New module specification with input/output table and data-flow diagram - Updated world-renderer data-flow/sequence/ownership/source map - Updated module registry and renderer notes ## Simplicity and naming - Important names: `StreamingTargetPlanner`, `StreamingTargetPolicy`, `StreamingTargetPlan` - Simplest approach: one pure calculator plus two immutable value objects - Rejected complexity: generic graph planner, priority framework, service container, job ownership or duplicate available-tile catalog - Unavoidable complexity: boundary-prefetch cross product must preserve corner behavior and existing string tile keys - Measured optimization evidence: no new optimization; exact extraction ## Status - State: active - Done: claim and isolated worktree created - Next: implement pure contracts, migrate runtime/editor refresh, verify - Blocked by: ## Handoff - Commit: - Results: - Remaining risks: - Documentation updated: