Pulsed Scenario Scheduler¶
The pulsed scenario scheduler is the CONTROL-owned lifecycle contract for reusable pulsed-fusion shot admission. It models the adjacent eight-state ring:
idle -> ramp_up -> flat_top -> burn -> expansion -> dump -> recharge -> cool_down -> idle
The scheduler is a control-boundary primitive. It does not replace facility machine protection, commissioned actuator drivers, capacitor-bank hardware interlocks, or measured-shot validation. It provides a deterministic state contract that SCPN-MIF-CORE and other pulsed-fusion callers can consume without duplicating CONTROL logic.
Public import surfaces¶
The canonical implementation is:
The MIF-facing compatibility import is also supported:
Both names resolve to the same Python implementation. The compiled hot-path
counterpart is control_control::pulsed_scenario in Rust, exposed through
scpn_control_rs.PyPulsedScenarioScheduler when the optional PyO3 extension is
built.
Guard contract¶
| State | Transition guard | Hold reason when blocked |
|---|---|---|
idle |
bank energy is at least min_precharge_energy_J |
waiting for precharge energy |
ramp_up |
absolute coil current is at least ramp_current_A |
waiting for ramp current |
flat_top |
phase, spatial, temperature, and energy guards pass | waiting for phase/spatial lock, burn temperature, or burn energy |
burn |
minimum dwell elapsed and fusion power reaches min_fusion_power_W |
waiting for minimum burn dwell or fusion power |
expansion |
radial velocity reaches expansion_velocity_m_s |
waiting for expansion velocity |
dump |
bank energy falls to dump_energy_floor_J or below |
waiting for dump energy floor |
recharge |
voltage fraction reaches recharge_voltage_fraction |
waiting for recharge voltage |
cool_down |
plasma temperature and coil current are below cooldown limits | waiting for plasma cooldown |
Manual transitions are allowed only to the adjacent successor. For example,
idle -> burn is rejected in Python, Rust, PyO3, and the Lean proof model.
Formal liveness evidence¶
lean/SCPNControl/PulsedFSM.lean contains the finite-state transition model and
the theorem:
theorem pulsed_fsm_eventually_returns_to_idle (state : State) :
∃ n : Nat, n ≤ 8 ∧ stepN n state = State.idle
This proves that every state in the adjacent transition ring reaches idle
within one full cycle under the abstract transition relation. The theorem is a
structural liveness proof for the scheduler topology. It is not a proof that a
specific plasma or capacitor-bank plant satisfies the guard thresholds; those
remain runtime admission and validation obligations.
Benchmark evidence¶
Existing local-regression evidence is recorded in:
validation/reports/pulsed_scenario_scheduler_v2_soft_isolated_20260604T113618Z.jsonvalidation/reports/pulsed_scenario_scheduler_v2_soft_isolated_20260604T113618Z.md
These measurements are soft-isolated local regression evidence only. Production timing claims require the project benchmark-isolation protocol: reserved cores, host-load context, scheduler/governor context, and target runtime evidence.
Validation commands¶
PYTHONPATH=src python -m pytest tests/test_pulsed_scenario_scheduler_v2.py \
tests/test_pulsed_scenario_scheduler_formal.py
To require the Lean proof build where lake is installed: