5.2 KiB
5.2 KiB
M03-RND-SCHEDULER-001 — Bounded render budget scheduler
Ownership
- Target: M03
- Program: RND
- Owner/Agent ID: sindo-main-codex
- Branch:
work/sindo-main-codex/m03-render-budget-scheduler - Lease expires UTC: 2026-07-18
- Integrator: M03 milestone integrator
Outcome
Extract the streamer's per-frame main-thread operation quotas into a scene-free
RenderBudgetScheduler, preserving existing queue priority and quota values and
stopping permit issuance after renderer teardown cancellation.
Non-goals
- Move queue, worker-task, cache, Node, Resource or RID ownership out of the streamer.
- Change queue ordering, concurrency limits, exported defaults or visual behavior.
- Add a generic job framework, priority graph, time-based adaptive budgeting or dependency.
- Change cache formats, renderer profiles or target milestone status.
Paths
- Exclusive:
src/render/streaming/render_budget_scheduler.gd,src/tools/verify_render_budget_scheduler.gd,docs/modules/render-budget-scheduler.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 cache resources and proprietary renderer corpus
Contracts and data
- Input: immutable per-frame map from documented operation lane IDs to non-negative operation limits
- Output: boolean permits and remaining/consumed diagnostic snapshots
- Lifecycle:
begin_frameresets permits;cancelpermanently rejects permits for the current scheduler instance - Queue contents, ordering, task concurrency and schema/cache versions: unchanged
- Consumer:
StreamingWorldLoadermain-thread queue/finalize drains
Dependencies
- Requires: integrated M03 facade and streaming planner on master
650d584 - Blocks: renderer performance regression gate and per-service extraction
- External state: none; tests use synthetic lane limits and no world assets
Verification
- Commands: dedicated scheduler verifier, facade/planner/focus/coordinate regressions, renderer manifest/dry-run and repository gates
- Fixtures: shared lane priority, independent lanes, zero/negative limits, frame reset, unknown lane and cancellation
- Fidelity evidence: operation defaults and loop order are captured before migration; all seven renderer checkpoint plans remain valid
- Performance budget: permit checks are constant-time dictionary operations and create no Node, Resource, worker task, cache entry or RID
Documentation deliverables
- Inline API docs for scheduler lifecycle, permits and diagnostics
- New module specification with input/output table, data-flow, sequence and lifecycle diagrams
- Updated world-renderer flow/ownership/source map, module registry and renderer notes
Simplicity and naming
- Important name:
RenderBudgetScheduler - Simplest approach: one small main-thread service with named quota lanes
- Rejected complexity: generic job graph, callbacks, queue ownership, adaptive timing controller, service container or third-party dependency
- Unavoidable complexity: chunk removal and creation intentionally share one lane so removal retains priority while consuming the same historical budget
- Measured optimization evidence: no optimization claim; exact bounded extraction
Status
- State: ready-for-review
- Done: extracted all 16 historical operation quotas, migrated ordered drains, added terminal teardown cancellation, asset-free verification and module docs
- Next: M03 integrator reviews and merges
e52f703 - Blocked by:
Handoff
- Commit:
e52f703 - Results:
RenderBudgetSchedulerowns only per-frame lane counters and terminal cancellation;StreamingWorldLoaderretains queue order, task/cache/node/RID ownership and operation execution. Chunk removal/create share one historical budget. - Verification: scheduler
cases=6 iterations=20000 elapsed_ms=7.495; plannercases=5 average_ms=1.879; facade/focus contracts passed; coordinate boundaryfiles=111 consumers=6; renderer manifestcheckpoints=7 coverage=7 caches=7; shutdown ownership, documentation, coordination and diff gates passed. - Fidelity: exported defaults, quality presets, queue order, operation sites, cache versions and visible rendering rules are unchanged. Seven checkpoint plans remain valid. No build-12340 parity claim is added.
- External/local inputs: ignored native DLL and two generated ADT resource scripts were copied from master only for the worktree parse/smoke and then removed. Proprietary extracted ADT data was unavailable, producing expected degraded-data diagnostics.
- Remaining risks: queue storage length and worker concurrency remain streamer-owned; cancellation stops permit issuance but does not interrupt in-flight work; exact p95/p99 impact still requires an asset-backed baseline.
- Documentation: new scheduler module spec with API, input/output, data-flow, sequence, lifecycle, ownership, cancellation, performance and source-map sections; world renderer, module registry and renderer implementation notes updated.