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>
31 lines
1.0 KiB
JavaScript
31 lines
1.0 KiB
JavaScript
const test = require('node:test');
|
|
const assert = require('node:assert/strict');
|
|
|
|
const { loadModelCurve } = require('../../src/curves/curveLoader');
|
|
|
|
test('curveLoader: valid model returns rawCurve and null error', () => {
|
|
const result = loadModelCurve('hidrostal-H05K-S03R');
|
|
assert.equal(result.error, null);
|
|
assert.ok(result.rawCurve);
|
|
assert.ok(result.rawCurve.np);
|
|
assert.ok(result.rawCurve.nq);
|
|
});
|
|
|
|
test('curveLoader: missing model returns Model not specified', () => {
|
|
const result = loadModelCurve('');
|
|
assert.equal(result.rawCurve, null);
|
|
assert.equal(result.error, 'Model not specified');
|
|
});
|
|
|
|
test('curveLoader: undefined model returns Model not specified', () => {
|
|
const result = loadModelCurve(undefined);
|
|
assert.equal(result.rawCurve, null);
|
|
assert.equal(result.error, 'Model not specified');
|
|
});
|
|
|
|
test('curveLoader: unknown model returns Curve not found error', () => {
|
|
const result = loadModelCurve('this-model-does-not-exist');
|
|
assert.equal(result.rawCurve, null);
|
|
assert.match(result.error, /Curve not found for model/);
|
|
});
|