Story: Clean ores.scheduler to the component clean standard

Table of Contents

This page documents a story in Sprint 27. It captures the goal, current status, acceptance criteria, and the tasks that compose it.

1. Goal

ores.scheduler meets the Component Clean Standard: every item: All, Protocol and Entity pass, each item that does not apply is recorded with its reason, and ores.scheduler joins COMPONENTS_UNDER_TEST. Order 20 of 35 in the sprint 26 component clean-up, tier 2 (higher infrastructure).

2. Status

Field Value
State DONE
Parent sprint Sprint 27
Now Nothing.
Waiting on Nothing.
Next Nothing.
Last touched 2026-09-26

3. Acceptance

  • Every checklist item that applies to a component of kind Entity passes, with its evidence recorded on the task.
  • Every item that does not apply is recorded as not applicable, with the reason.
  • Every generator defect found is fixed at its source, with a regression test.
  • ores.scheduler passes its own gate, check_component_drift.py --component scheduler-cpp. It joins COMPONENTS_UNDER_TEST, and with it the shared --all list, in the job_instance unit (V06); the shared list deliberately covers only a component whose regeneration leaves the tree fully clean.

4. Tasks

Task State Start End Description
Bring ores.scheduler to the clean standard DONE   2026-10-09 Work ores.scheduler through the Component Clean Standard in order and record each item.

5. Notes

  • Survey on 2026-09-23: 1 entity, junction or operation models; 62 C++ files outside tests, 0 of them generated (0%); 5 messaging headers, 5 of them hand-written.
  • Nothing is generated yet. Known work sits in the inbox story "Complete the LLM skills catalogue": the scheduler audit findings, the hand-written operations to model, and the custom history handler to replace. Take those tasks into this story.
  • Survey on 2026-09-26, before any edit: 39 public headers, reproduced by command at f7fc9396b7; nine of the names they declare had a production consumer outside the component, all of them in ores.reporting, and that list is verified by git grep at the same revision: cron_expression, its rfl::Reflector, job_definition, and the three request and response pairs of the old protocol. The survey also tallied 59 declared symbols, a manual count that no command reproduces – counting named types alone gives 45 – so the task keeps the verified list rather than a ratio. One model was visible to codegen, eight subject literals were in code, and regeneration would have rewritten 19 files and created 12.
  • The job_definition unit is done: the model is resynced and bound to uuid-identified-lookup, the entity stack is generated, the retired schedule, unschedule and schedule-batch subjects are gone in favour of the canonical put, put_many and delete verbs, ores.reporting has moved to them, and the generated history provider replaces the custom history handler. Five generator defects were found and fixed at source, each with a regression test.
  • The units that remain are recorded on the task, each with its size: the job_instance model and the registry entry (M06, V06 and V05's last clause), the scheduler shell part and its commands (S01, S02 and V04), the scheduler loop's I/O path – the decisions it computes are tested now, the database and NATS work is not – the model-property reference gap, the repository-wide component_files.cmake sweep, the drift check's repository-wide diff, the SQL ER diagram that no gate covers, and the diagram generator's inability to regenerate a composite component's modules.

6. Decisions

7. Out of scope

8. Result

Closed on the tasks' state, in the sprint's bookkeeping pass: every task is DONE with its work merged, and the tasks carry the outcomes.

Emacs 29.3 (Org mode 9.6.15)