src/curves/ loader + normalizer (with cross-pressure anomaly
detection) + reverseCurve helper
src/prediction/ predictors (predictFlow/Power/Ctrl) +
groupPredictors (lazy group-scope views) +
OperatingPoint (pressure-driven prediction setpoints)
src/drift/ DriftAssessor (per-metric drift) + PredictionHealth
(composes flow/power/pressure into HealthStatus +
confidence sibling — see OPEN_QUESTIONS 2026-05-10)
src/pressure/ VirtualPressureChildren (dashboard-sim) +
PressureInitialization (real-vs-virtual tracking) +
PressureRouter (dispatches by position)
src/state/ stateBindings (state.emitter listener helper) +
isOperationalState
src/measurement/ measurementHandlers (dispatcher for flow/power/temp/pressure)
src/flow/ flowController (handleInput body — execSequence,
execMovement, flowMovement, emergencystop)
src/display/ workingCurves (showWorkingCurves + showCoG admin)
src/commands/ canonical names: set.mode, cmd.startup/shutdown/estop,
set.setpoint, set.flow-setpoint,
data.simulate-measurement, query.curves, query.cog,
child.register. execSequence demuxes by payload.action
to canonical cmd.* handlers.
CONTRACT.md inputs/outputs/events/children surface
110 basic tests pass (100 new + 10 pre-existing).
specificClass.js / nodeClass.js untouched — integration in P5 wave 2.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
86 lines
2.4 KiB
JavaScript
86 lines
2.4 KiB
JavaScript
'use strict';
|
|
|
|
// rotatingMachine command registry. Consumed by BaseNodeAdapter via
|
|
// `static commands = require('./commands')`. Each descriptor maps a
|
|
// canonical msg.topic to its handler; legacy names are listed under
|
|
// `aliases` and emit a one-time deprecation warning at runtime.
|
|
//
|
|
// `execSequence` is special: the legacy payload carried `{source, action,
|
|
// parameter}` where `action` selected the canonical verb (startup /
|
|
// shutdown). The registry does not natively dispatch by payload content,
|
|
// so we keep `execSequence` as its own descriptor whose handler routes to
|
|
// the canonical `cmd.startup` / `cmd.shutdown` handler. Behaviour matches
|
|
// the canonical topics exactly; the deprecation warning still fires once.
|
|
|
|
const handlers = require('./handlers');
|
|
|
|
module.exports = [
|
|
{
|
|
topic: 'set.mode',
|
|
aliases: ['setMode'],
|
|
payloadSchema: { type: 'string' },
|
|
handler: handlers.setMode,
|
|
},
|
|
{
|
|
topic: 'cmd.startup',
|
|
payloadSchema: { type: 'any' },
|
|
handler: handlers.startup,
|
|
},
|
|
{
|
|
topic: 'cmd.shutdown',
|
|
payloadSchema: { type: 'any' },
|
|
handler: handlers.shutdown,
|
|
},
|
|
{
|
|
topic: 'cmd.estop',
|
|
aliases: ['emergencystop'],
|
|
payloadSchema: { type: 'any' },
|
|
handler: handlers.estop,
|
|
},
|
|
{
|
|
// Legacy umbrella topic. Content-based demux inside the handler routes
|
|
// to the canonical startup / shutdown logic. Emits the registry's
|
|
// one-time deprecation warning the first time it fires.
|
|
topic: 'execSequence',
|
|
payloadSchema: { type: 'object' },
|
|
handler: handlers.execSequenceAlias,
|
|
_legacy: true,
|
|
},
|
|
{
|
|
topic: 'set.setpoint',
|
|
aliases: ['execMovement'],
|
|
payloadSchema: { type: 'object' },
|
|
handler: handlers.setSetpoint,
|
|
},
|
|
{
|
|
topic: 'set.flow-setpoint',
|
|
aliases: ['flowMovement'],
|
|
payloadSchema: { type: 'object' },
|
|
handler: handlers.setFlowSetpoint,
|
|
},
|
|
{
|
|
topic: 'data.simulate-measurement',
|
|
aliases: ['simulateMeasurement'],
|
|
payloadSchema: { type: 'object' },
|
|
handler: handlers.simulateMeasurement,
|
|
},
|
|
{
|
|
topic: 'query.curves',
|
|
aliases: ['showWorkingCurves'],
|
|
payloadSchema: { type: 'any' },
|
|
handler: handlers.queryCurves,
|
|
},
|
|
{
|
|
topic: 'query.cog',
|
|
aliases: ['CoG'],
|
|
payloadSchema: { type: 'any' },
|
|
handler: handlers.queryCog,
|
|
},
|
|
{
|
|
topic: 'child.register',
|
|
aliases: ['registerChild'],
|
|
payloadSchema: { type: 'string' },
|
|
handler: handlers.registerChild,
|
|
},
|
|
];
|