Skip to main content

Phases

ASF50 keeps two non-collapsible phase layers:

  • Program-roadmap phase (PHASE-00 through PHASE-20) — a coverage concept.
  • Implementation phase (IMP-00 through IMP-11) — an executable goal.

The PHASE_EXECUTION_CROSSWALK.yaml in goals/ASF50_PROGRAM_COMPLETION_001/ is the only authoritative bridge between the two.

Why the layers are separate

If you collapse PHASE-XX into IMP-XX, three things break:

  1. The Program Controller cannot determine the next eligible executable.
  2. Coverage tracking loses its roadmap semantic — the program no longer knows what a phase is for.
  3. The predecessor-terminal-state rule (each IMP must reach FROZEN_PASS before its successor) is bypassable.

The crosswalk preserves the semantic gap by saying, in machine-checkable form, which IMPs satisfy which PHASE concepts.

PHASE-00 through PHASE-20

The 21 program phases are declared by ASF50_BLUEPRINT_KIT_V3/06_PHASES/PHASE_REGISTRY.yaml. The Program Controller reads this registry to compute phase_coverage. Each PHASE has:

  • A phase_id (PHASE-00PHASE-20).
  • A status (NOT_STARTED, IN_PROGRESS, COVERED, …).
  • An optional list of contributing IMP-XX IDs from the crosswalk.

IMP-00 through IMP-11

Each IMP-XX is a single bounded goal with the standard contract fields. IMPs are dispatched in declared order; the next IMP is only eligible after the previous one reaches FROZEN_PASS. There is no parallel IMP dispatch.

The canonical IMP sequence is:

IMP-00 → IMP-01 → IMP-02 → IMP-03 → IMP-04 → IMP-05 →
IMP-06 → IMP-07 → IMP-08 → IMP-09 → IMP-10 → IMP-11

Spike dependencies are recorded in crosswalk.imp_execution_dag.predecessor_overrides and preserve the linear chain unless explicitly overridden.

Program Controller routing

The Program Controller (scripts/goal-runner/program_controller.py) is responsible for:

  1. Loading the Program Goal contract.
  2. Loading the crosswalk.
  3. Determining the next eligible IMP from runtime state.
  4. Enforcing predecessor FROZEN_PASS.
  5. Stopping at real owner gates.
  6. Delegating execution to the orchestrator for the eligible child goal.
  7. Advancing to the next IMP after child FROZEN_PASS.
  8. Computing PHASE-* coverage from the crosswalk.
  9. Finishing the program only after IMP-11 + production acceptance.

The controller's routing is fail-closed: an unrecognized state or an unmet predecessor raises a hard error and stops the program.

State coverage model

Each PHASE-XX has a coverage state derived from its crosswalk entries. A phase becomes COVERED when every contributing IMP-XX has reached FROZEN_PASS. Until then, it is IN_PROGRESS (if any contributing IMP is non-terminal) or NOT_STARTED.