{ "feature_name": "scheduler-dispatch-commit", "created_at": "2026-08-23T03:25:54Z", "updated_at": "2026-08-24T04:59:00Z", "language": "en", "phase": "implementation-complete", "parent_spec": "scheduler-framework", "description": "Move the RUN-state transition to dispatch-decision-commit time on both scheduler and controller, and build the currently-missing dispatch-failure retry/terminal-fail handling this requires -- fixes bug-1624 (resource-in-use round-boundary loss for dispatched-but-unconfirmed jobs) and bug-1625 (scheduler has no handler for NotifyData_data_jobDispatchFail).", "approvals": { "requirements": { "generated": true, "approved": true }, "design": { "generated": true, "approved": true }, "tasks": { "generated": true, "approved": true } }, "ready_for_implementation": true, "task_plan_validation": "2 rounds of independent task-graph sanity review. Round 1: NEEDS_FIXES (task 3.1 missing counter-reset wiring, task 3.2 undersized/overloaded across 6 failure sites with an asymmetric reference-leak fix, ambiguous boundary labels, undocumented non-parallel rationale) -- repaired: 3.1 now resets the counter with explicit _Depends:_, former 3.2 split into 3.2 (terminal, 2 sites) / 3.3 (retryable+bounded escalation, 4 sites, carries the reference-leak fix), boundary labels differentiated, non-parallel rationale stated on task 3's major line. Round 2: NEEDS_FIXES (task 3.2's requirements list incorrectly carried over 4.1/4.4, which belong only to the PEND-return path 3.3 performs) -- fixed directly (single-line correction), and the same leftover was independently found and fixed in task 5.3's mirrored requirements list. Final coverage check: all 18 requirement IDs and all 5 design components mapped, each exactly once except where a requirement genuinely spans tasks. GO.", "sibling_specs": ["scheduler-core", "scheduler-allocation", "scheduler-preemption", "scheduler-controller-msg-gap", "scheduler-sim-eager-reconciliation"], "blocks": ["scheduler-allocation"], "related_bugs": ["bug-1624", "bug-1625", "bug-1626", "bug-1627"], "design_validation": "5 rounds of /kiro-validate-design, all findings fixed in place (no NO-GO carried forward): RTTI_LOCK_WRITE gap (bug-1626), unused scheduler-side field removed, requirements.md AC 2.1 wording reconciled, double-notify race (notify_dispatch fires on success too) fixed by moving classification+notification inside dispatch_a_job_(), rc-value classification replaced with an exhaustive site-identity enum, a 6th failure site (RPC failure) found and added, dispatch_a_job_() reference leak found and fixed (bug-1627, 4 sites), WAL apply logic corrected to cover both apply_wal_entry() and apply_committed_entry(). Final pass found no further issues. GO.", "sequencing_note": "User directive (2026-08-22): this spec must land before scheduler-allocation begins implementation -- scheduler-allocation's iterator-based try_alloc_on_host() reads the same resInUse/sharedInUse totals bug-1624 corrupts, and its planned XCE_ALLOC_PREEMPT borrowing mode interacts with what counts as committed/borrowable. scheduler-allocation's own spec.json should be updated to note this dependency." }