EquipmentDataModel now carries an EptStateMachine as a value member
alongside the other top-level state machines. Server installs a
state-change handler that maps every EPT transition to a CEID emission
through the existing emit_event path:
1100 NonScheduledTime 1103 Engineering
1101 ScheduledDowntime 1104 Standby
1102 UnscheduledDowntime 1105 Productive
CEIDs land in the 1100+ block to keep clear of the demo equipment.yaml
(100s/200s/400s) and E90 (900s). Log lines include the dwell time of
the previous state so trace-level diagnostics show utilization without
extra tooling.
Application code drives transitions by calling model->ept.on_event(...);
the existing event-report machinery (subscription state, S6F11
batching, spool) gates wire emission so EPT events spool on offline
hosts like every other CEID.
Closes Tranche F — E116 Equipment Performance Tracking end-to-end.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>