Phases
ASF50 keeps two non-collapsible phase layers:
- Program-roadmap phase (
PHASE-00throughPHASE-20) — a coverage concept. - Implementation phase (
IMP-00throughIMP-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:
- The Program Controller cannot determine the next eligible executable.
- Coverage tracking loses its roadmap semantic — the program no longer knows what a phase is for.
- The predecessor-terminal-state rule (each IMP must reach
FROZEN_PASSbefore 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-00…PHASE-20). - A
status(NOT_STARTED,IN_PROGRESS,COVERED, …). - An optional list of contributing
IMP-XXIDs 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:
- Loading the Program Goal contract.
- Loading the crosswalk.
- Determining the next eligible IMP from runtime state.
- Enforcing predecessor
FROZEN_PASS. - Stopping at real owner gates.
- Delegating execution to the orchestrator for the eligible child goal.
- Advancing to the next IMP after child
FROZEN_PASS. - Computing
PHASE-*coverage from the crosswalk. - 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.