Skip to content

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; definePhase with 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): createSchedule accepts custom phases; dependsOn on builtin and custom phases, transitive order checked through schedule.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 in phases, 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 phases order (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), manual does not change phases order; 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)