fbef131bcb
Work-Package: M01-RND-STREAMING-FOCUS-001 Agent: sindo-main-codex
3.4 KiB
3.4 KiB
M01-RND-STREAMING-FOCUS-001 — Explicit streaming focus contract
Ownership
- Target: M01
- Program: RND/FND
- Owner/Agent ID: sindo-main-codex
- Branch:
work/sindo-main-codex/m01-streaming-focus - Lease expires UTC: 2026-07-15
- Integrator: M01 milestone integrator
Outcome
Introduce a scene-free StreamingFocus value and make runtime/test streaming
consume it through an explicit source or public setter instead of discovering
the active Camera3D from a viewport.
Non-goals
- Extracting
WorldRenderFacadeorStreamingTargetPlannerfrom the monolithic loader. - Adding direction, velocity, frustum or multi-focus planning.
- Decomposing the player controller before M02.
- Changing terrain, M2, WMO, liquid, cache or LOD formulas.
Paths
- Exclusive:
src/domain/streaming/,src/tools/verify_streaming_focus.gd - Shared/hotspots:
src/scenes/streaming/streaming_world_loader.gd,src/scenes/streaming/eastern_kingdoms_streaming.tscn,src/scenes/streaming/kalimdor_streaming.tscn, renderer diagnostic tools,docs/modules/world-renderer.md, this claim - Generated/ignored: local extracted assets, renderer caches and Godot import metadata
Contracts and data
- Public API: immutable
StreamingFocus; loaderset_streaming_focusandrefresh_streaming_focus - Source adapter: explicit
streaming_focus_source_pathmay reference anyNode3D - Migration: runtime scenes use player focus; capture/probe tools explicitly use their dedicated camera as the source
- Compatibility: streaming radii/LOD/cache behavior and coordinate contract v2 unchanged
Dependencies
- Requires: coordinate contract version 2 and golden fixtures at
52e1b2b - Blocks: M01 renderer/test focus exit criterion and later renderer facade extraction
- External state: no new dependency or proprietary input
Verification
- Commands: streaming focus contract/integration verifier, renderer baseline manifest/calibration, headless scene smoke, coordination/documentation gates
- Fixtures: Node3D player-style source and explicit capture-style setter
- Fidelity evidence: existing seven renderer checkpoints and build-12340 coordinate calibration must remain unchanged
- Performance budget: one scalar focus snapshot per configured streaming interval; no new per-tile or per-chunk work
Documentation deliverables
- Inline public API docs: focus value and loader public methods
- Module specification: inputs/outputs, ownership, lifecycle, failure/recovery and source map
- Data-flow diagram: player/editor/capture source to focus contract to loader
- State/sequence diagram: focus sampling and refresh threshold sequence
Simplicity and naming
- Important names introduced:
StreamingFocus,streaming_focus_source_path,set_streaming_focus,refresh_streaming_focus - Simplest considered solution: one immutable value plus one explicit scene adapter path
- Rejected complexity/abstractions: provider interface hierarchy, service locator, multi-focus registry and predictive motion fields
- Unavoidable complexity and justification: editor viewport remains a separate
adapter because its camera is owned by
EditorInterface - Measured optimization evidence: not applicable
Status
- State: active
- Done: scope and contract boundary selected
- Next: implement contract, runtime/test migration, tests and documentation
- Blocked by: