P130 extracts the scheduler boundary into a small plain-RTL
valid / ready / fire helper. It is still shadow-only, but it gives
the backend refactor an actual module contract instead of another layer
of inferred FSM-window counters.
The BusyBox shell workload passed:
P130-FILE-OK @ cycle 218,446,148
post-load cycles : 218,446,005
shell window : 64,551,556
instr retired : 86,248,132
CPI : 2.5328
The new contract counters reported:
samples : 64,743,639
arrival-fire cycles : 22,652,878
service-fire cycles : 22,652,811
backpressure cycles : 0
dual/triple ready cycles: 0 / 0
integer fires : 13,095,201 arrival / 13,095,201 service
memory fires : 3,246,456 arrival / 3,246,389 service
control fires : 6,311,221 arrival / 6,311,221 service
The helper agrees with the older scheduler arrival/service audit. That is the good part. The limiting result is unchanged: no class coexistence yet, no queue depth beyond 1, and no reason to build a picker until a real queue owns state.
Next target: a state-owning dispatch queue module with the same handshake names.