W-027: ecs-schedule phases (SCH-F01)¶
Type: feature · Size: M · Epic: E-schedule-v0 · Target: packages/ecs-schedule · Breaking: no
Depends: W-011
Refs: spec SCH-001, SCH-003, SCH-004, SCH-006, SCH-007, SCH-008, SCH-100, SCH-101, SCH-102, SCH-103, SCH-104, SCH-105; SCH-005, SCH-009 retired, not implemented
Goal¶
Implement the phase part of the spec: builtin phases, definePhase, and the minimal createSchedule({ name, phases, systems }) that later items extend. Phase validation, the deterministic phases order (SCH-102), cycle detection, and detached/manual classification are included. SCH-002 is tested in W-029 because it needs run.
Steps¶
- S1 (SCH-001, SCH-100): builtin phase constants in the required order;
definePhasewith defaults and a name check; files: packages/ecs-schedule/src/phase.ts, packages/ecs-schedule/src/index.ts, packages/ecs-schedule/tests/phase-define.test.ts - S2 (SCH-003, SCH-004):
createScheduleaccepts custom phases;dependsOnon builtin and custom phases, transitive order checked throughschedule.phases; files: packages/ecs-schedule/src/create-schedule.ts, packages/ecs-schedule/tests/phase-depends.test.ts - S3 (SCH-006, SCH-007, SCH-103): build errors for unknown phases in
dependsOn/before, duplicate or builtin phases inphases, and cycles that name the custom phases; files: packages/ecs-schedule/src/phase-graph.ts, packages/ecs-schedule/tests/phase-validate.test.ts - S4 (SCH-101, SCH-102, SCH-008): deterministic
phasesorder (builtin chain, edges, promotion and floating rules) with readonly identity; files: packages/ecs-schedule/src/phase-order.ts, packages/ecs-schedule/tests/phase-order.test.ts - S5 (SCH-104, SCH-105): detached and manual classification,
isManual(throws for unknown phase),manualdoes not changephasesorder; files: packages/ecs-schedule/src/phase-manual.ts, packages/ecs-schedule/tests/phase-manual.test.ts - S6 (changeset): add
.changeset/w-027-ecs-schedule-phases.md(patch,@workspace/ecs-schedule)
Log¶
- 2026-11-01 created from the approved spec split of W-004 (Triage)
- 2026-11-02 moved up in Next: schedule is the M1 path for all demos; order within the schedule chain unchanged (Triage)
- 2026-11-02 Next -> Now, state active, user-requested (Triage)
- 2026-11-02 state review: final Reviewer APPROVED; one changeset text fix applied; no [manual] requirements, no accept gate (Triage)
- 2026-11-02 S1-S6 review passed (Triage)
- 2026-11-02 Now -> Done (Triage)