{ "feature_name": "resval-id-decoupling", "description": "Investigated the controller-to-scheduler/apiserver resource-value transport, which previously assumed idx/id parity between controller and scheduler resource arrays (collect_resval_with_idx(), src/controller/dataex.c) -- a silent-corruption risk on divergent registration order. Recommended and shipped a name-keyed replacement.", "phase": "implemented", "created_at": "2026-05-12T06:52:00-07:00", "updated_at": "2026-08-16T11:35:00Z", "language": "en", "status": "closed", "approvals": { "requirements": { "generated": true, "approved": true }, "design": { "generated": true, "approved": true }, "tasks": { "generated": true, "approved": true } }, "note": "CLOSED 2026-08-16. Recommended fix was implemented, not just proposed -- collect_resval_with_idx() replaced by name-keyed collect_resval() (commit d47b3375, 2026-05-13, landed one day after this spec was created). Verified in current code: zero remaining callers of the old idx-keyed function; controller.capnp's Worker.resvals/Conf4Sched.resvals are List(NameValue); scheduler resolves via key_find() by name (scheduler.c, schedobj.c). Related hazard bug-335 (UPDATE_RESVALS hardcoded slot 0) closed 2026-06-10. research.md's own Gap Re-Audit (2026-06-18): 21/23 EARS requirements met, functionally complete. 2 SHOULD-level residuals left as separate small cleanup, not a spec: delete the now-dead ValueWithIdx/xce_val_with_idx_t type (zero real callers); add one regression test for divergent controller/scheduler registration order (EARS-R6-1)." }