2025-05-14 11:32:19 +02:00
|
|
|
{
|
|
|
|
|
"name": "EVOLV",
|
2026-05-28 18:33:52 +02:00
|
|
|
"version": "1.0.34",
|
2025-05-14 11:32:19 +02:00
|
|
|
"description": "Modular Node-RED package containing all control and automation nodes developed under the EVOLV project.",
|
|
|
|
|
"keywords": [
|
|
|
|
|
"node-red",
|
|
|
|
|
"EVOLV",
|
|
|
|
|
"automation",
|
|
|
|
|
"control",
|
|
|
|
|
"wastewater"
|
|
|
|
|
],
|
|
|
|
|
"node-red": {
|
2026-03-31 14:26:33 +02:00
|
|
|
"nodes": {
|
release: palette redesign + CoreSync scaffolding + dashboardAPI MODULE_NOT_FOUND fix
PALETTE REDESIGN (2026-05-21)
Sidebar swatches switched from S88 level (all blue) to domain-hue per node.
Family hue = function (rotating=orange, valves=teal, biology=green/olive,
sampling=violet, sensor=amber, aeration=sky-blue, infrastructure=slate);
within a family, darker = higher S88 / "more controller-ish."
Editor-group rectangles in flow.json still follow S88 — only the
registerType colour changed.
Submodule bumps for palette: rotatingMachine, machineGroupControl,
pumpingStation, valve, valveGroupControl, reactor, settler, monster,
measurement, diffuser, dashboardAPI.
Docs touched:
- CLAUDE.md: palette swatch vs. editor-group bullets split out.
- .claude/rules/node-red-flow-layout.md: new §10.0 introduces the two
color systems, full 12-row palette table, and explicit warning not to
mix the two hexes.
- .claude/refactor/MODULE_SPLIT.md: per-node headers annotated with
both `group #XXX` and `palette #XXX`.
- .claude/refactor/WIKI_HOME_TEMPLATE.md + WIKI_TEMPLATE.md: clarify
Mermaid classDefs visualize hierarchy, not palette swatches.
- .claude/refactor/OPEN_QUESTIONS.md: dated decision entry with
rationale, file list, and follow-ups.
CORESYNC SUBMODULE (new)
nodes/coresync added pointing at https://gitea.wbd-rd.nl/RnD/coresync.
FROST/SensorThings handoff path — first version forwards FROST-ready HTTP
request messages on the dbase output; a downstream http-request node
performs the POST and feeds responses back on msg.topic = "frost.response".
Lazy stream resolver, latest-wins queue (keep first + latest, drop middle),
knot-emit on slope change, provenance preserved in Observation parameters.
- .gitmodules: add nodes/coresync entry.
- package.json: register coresync as a Node-RED node.
- generalFunctions bump: new frostFormatter + 4 node config schemas
expose the dbase format option.
- measurement bump: "frost" option added to dbaseOutputFormat dropdown
(plus the in-flight data.measurement unit-handling work).
- machineGroupControl bump: small editor compact-fields tweak alongside
the palette change.
- CORESYNC_FROST_INTERVIEW_HANDOFF.md added at root with interview state
(Q20 open: slope angle vs. relative delta comparison).
DASHBOARDAPI MODULE_NOT_FOUND FIX
package.json: dashboardapi entry path corrected to
nodes/dashboardAPI/dashboardAPI.js. Commit e04c4a1 renamed the files to
camelCase but missed package.json; on case-sensitive filesystems
(Linux/Docker, where the tarball lands) the require resolved to nothing
and the node showed MODULE_NOT_FOUND in the Node-RED palette.
MISC CLEANUP
- examples/README.md + examples/pumpingstation-complete-example/ removal
(build_flow.py, flow.json, README.md superseded by per-node examples).
- jest.config.js: in-progress tweak.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-21 15:09:33 +02:00
|
|
|
"dashboardapi": "nodes/dashboardAPI/dashboardAPI.js",
|
2026-03-31 14:26:33 +02:00
|
|
|
"diffuser": "nodes/diffuser/diffuser.js",
|
release: palette redesign + CoreSync scaffolding + dashboardAPI MODULE_NOT_FOUND fix
PALETTE REDESIGN (2026-05-21)
Sidebar swatches switched from S88 level (all blue) to domain-hue per node.
Family hue = function (rotating=orange, valves=teal, biology=green/olive,
sampling=violet, sensor=amber, aeration=sky-blue, infrastructure=slate);
within a family, darker = higher S88 / "more controller-ish."
Editor-group rectangles in flow.json still follow S88 — only the
registerType colour changed.
Submodule bumps for palette: rotatingMachine, machineGroupControl,
pumpingStation, valve, valveGroupControl, reactor, settler, monster,
measurement, diffuser, dashboardAPI.
Docs touched:
- CLAUDE.md: palette swatch vs. editor-group bullets split out.
- .claude/rules/node-red-flow-layout.md: new §10.0 introduces the two
color systems, full 12-row palette table, and explicit warning not to
mix the two hexes.
- .claude/refactor/MODULE_SPLIT.md: per-node headers annotated with
both `group #XXX` and `palette #XXX`.
- .claude/refactor/WIKI_HOME_TEMPLATE.md + WIKI_TEMPLATE.md: clarify
Mermaid classDefs visualize hierarchy, not palette swatches.
- .claude/refactor/OPEN_QUESTIONS.md: dated decision entry with
rationale, file list, and follow-ups.
CORESYNC SUBMODULE (new)
nodes/coresync added pointing at https://gitea.wbd-rd.nl/RnD/coresync.
FROST/SensorThings handoff path — first version forwards FROST-ready HTTP
request messages on the dbase output; a downstream http-request node
performs the POST and feeds responses back on msg.topic = "frost.response".
Lazy stream resolver, latest-wins queue (keep first + latest, drop middle),
knot-emit on slope change, provenance preserved in Observation parameters.
- .gitmodules: add nodes/coresync entry.
- package.json: register coresync as a Node-RED node.
- generalFunctions bump: new frostFormatter + 4 node config schemas
expose the dbase format option.
- measurement bump: "frost" option added to dbaseOutputFormat dropdown
(plus the in-flight data.measurement unit-handling work).
- machineGroupControl bump: small editor compact-fields tweak alongside
the palette change.
- CORESYNC_FROST_INTERVIEW_HANDOFF.md added at root with interview state
(Q20 open: slope angle vs. relative delta comparison).
DASHBOARDAPI MODULE_NOT_FOUND FIX
package.json: dashboardapi entry path corrected to
nodes/dashboardAPI/dashboardAPI.js. Commit e04c4a1 renamed the files to
camelCase but missed package.json; on case-sensitive filesystems
(Linux/Docker, where the tarball lands) the require resolved to nothing
and the node showed MODULE_NOT_FOUND in the Node-RED palette.
MISC CLEANUP
- examples/README.md + examples/pumpingstation-complete-example/ removal
(build_flow.py, flow.json, README.md superseded by per-node examples).
- jest.config.js: in-progress tweak.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-21 15:09:33 +02:00
|
|
|
"coresync": "nodes/coresync/coresync.js",
|
2026-03-31 14:26:33 +02:00
|
|
|
"machineGroupControl": "nodes/machineGroupControl/mgc.js",
|
|
|
|
|
"measurement": "nodes/measurement/measurement.js",
|
2025-05-27 15:10:55 +02:00
|
|
|
"monster": "nodes/monster/monster.js",
|
2025-10-31 12:14:58 +01:00
|
|
|
"pumpingstation": "nodes/pumpingStation/pumpingStation.js",
|
2025-05-27 15:10:55 +02:00
|
|
|
"reactor": "nodes/reactor/reactor.js",
|
|
|
|
|
"rotatingMachine": "nodes/rotatingMachine/rotatingMachine.js",
|
2025-10-31 12:14:58 +01:00
|
|
|
"settler": "nodes/settler/settler.js",
|
2025-05-27 15:10:55 +02:00
|
|
|
"valve": "nodes/valve/valve.js",
|
2025-10-31 12:14:58 +01:00
|
|
|
"valveGroupControl": "nodes/valveGroupControl/vgc.js"
|
2025-05-14 11:32:19 +02:00
|
|
|
}
|
|
|
|
|
},
|
feat: architecture refactor — validators, positions, menuUtils, ESLint, tests, CI
Major improvements across the codebase:
- Extract validationUtils.js (548→217 lines) into strategy pattern validators
- Extract menuUtils.js (543→35 lines) into 6 focused menu modules
- Adopt POSITIONS constants across 23 files (183 replacements)
- Eliminate all 71 ESLint warnings (0 errors, 0 warnings)
- Add 158 unit tests for ConfigManager, MeasurementContainer, ValidationUtils
- Add architecture documentation with Mermaid diagrams
- Add CI pipeline (Docker, ESLint, Jest, Makefile)
- Add E2E infrastructure (docker-compose.e2e.yml)
Test results: 377 total (230 Jest + 23 node:test + 124 legacy), all passing
Lint: 0 errors, 0 warnings
Closes #2, #3, #9, #13, #14, #18
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 15:37:20 +01:00
|
|
|
"scripts": {
|
2026-03-31 18:29:03 +02:00
|
|
|
"docker:build": "docker compose build",
|
|
|
|
|
"docker:up": "docker compose up -d",
|
|
|
|
|
"docker:down": "docker compose down",
|
|
|
|
|
"docker:logs": "docker compose logs -f nodered",
|
|
|
|
|
"docker:shell": "docker compose exec nodered sh",
|
|
|
|
|
"docker:test": "docker compose exec nodered sh /data/evolv/scripts/test-all.sh",
|
2026-03-31 14:26:33 +02:00
|
|
|
"docker:test:basic": "docker compose exec nodered sh /data/evolv/scripts/test-all.sh basic",
|
|
|
|
|
"docker:test:integration": "docker compose exec nodered sh /data/evolv/scripts/test-all.sh integration",
|
|
|
|
|
"docker:test:edge": "docker compose exec nodered sh /data/evolv/scripts/test-all.sh edge",
|
|
|
|
|
"docker:test:gf": "docker compose exec nodered sh /data/evolv/scripts/test-all.sh gf",
|
|
|
|
|
"docker:validate": "docker compose exec nodered sh /data/evolv/scripts/validate-nodes.sh",
|
2026-03-31 18:29:03 +02:00
|
|
|
"docker:deploy": "docker compose exec nodered sh /data/evolv/scripts/deploy-flow.sh",
|
|
|
|
|
"docker:reset": "docker compose down -v && docker compose up -d --build",
|
feat: architecture refactor — validators, positions, menuUtils, ESLint, tests, CI
Major improvements across the codebase:
- Extract validationUtils.js (548→217 lines) into strategy pattern validators
- Extract menuUtils.js (543→35 lines) into 6 focused menu modules
- Adopt POSITIONS constants across 23 files (183 replacements)
- Eliminate all 71 ESLint warnings (0 errors, 0 warnings)
- Add 158 unit tests for ConfigManager, MeasurementContainer, ValidationUtils
- Add architecture documentation with Mermaid diagrams
- Add CI pipeline (Docker, ESLint, Jest, Makefile)
- Add E2E infrastructure (docker-compose.e2e.yml)
Test results: 377 total (230 Jest + 23 node:test + 124 legacy), all passing
Lint: 0 errors, 0 warnings
Closes #2, #3, #9, #13, #14, #18
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 15:37:20 +01:00
|
|
|
"test": "jest --forceExit",
|
|
|
|
|
"test:node": "node --test nodes/valve/test/basic/*.test.js nodes/valve/test/edge/*.test.js nodes/valve/test/integration/*.test.js nodes/valveGroupControl/test/basic/*.test.js nodes/valveGroupControl/test/edge/*.test.js nodes/valveGroupControl/test/integration/*.test.js",
|
|
|
|
|
"test:legacy": "node nodes/machineGroupControl/src/groupcontrol.test.js && node nodes/generalFunctions/src/nrmse/errorMetric.test.js",
|
|
|
|
|
"test:all": "npm test && npm run test:node && npm run test:legacy",
|
2026-05-11 14:45:06 +02:00
|
|
|
"test:platform": "node scripts/test-platform.js",
|
2026-03-31 18:29:03 +02:00
|
|
|
"test:e2e:reactor": "node scripts/e2e-reactor-roundtrip.js",
|
feat: architecture refactor — validators, positions, menuUtils, ESLint, tests, CI
Major improvements across the codebase:
- Extract validationUtils.js (548→217 lines) into strategy pattern validators
- Extract menuUtils.js (543→35 lines) into 6 focused menu modules
- Adopt POSITIONS constants across 23 files (183 replacements)
- Eliminate all 71 ESLint warnings (0 errors, 0 warnings)
- Add 158 unit tests for ConfigManager, MeasurementContainer, ValidationUtils
- Add architecture documentation with Mermaid diagrams
- Add CI pipeline (Docker, ESLint, Jest, Makefile)
- Add E2E infrastructure (docker-compose.e2e.yml)
Test results: 377 total (230 Jest + 23 node:test + 124 legacy), all passing
Lint: 0 errors, 0 warnings
Closes #2, #3, #9, #13, #14, #18
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 15:37:20 +01:00
|
|
|
"lint": "eslint nodes/",
|
|
|
|
|
"lint:fix": "eslint nodes/ --fix",
|
|
|
|
|
"ci": "npm run lint && npm run test:all",
|
|
|
|
|
"test:e2e": "bash test/e2e/run-e2e.sh"
|
|
|
|
|
},
|
2026-03-31 18:29:03 +02:00
|
|
|
"author": "Rene De Ren, Pim Moerman, Janneke Tack, Sjoerd Fijnje, Dieke Gabriels, pieter van der wilt",
|
|
|
|
|
"license": "SEE LICENSE",
|
2025-05-14 11:32:19 +02:00
|
|
|
"dependencies": {
|
2026-03-31 18:29:03 +02:00
|
|
|
"@flowfuse/node-red-dashboard": "^1.30.2",
|
feat: architecture refactor — validators, positions, menuUtils, ESLint, tests, CI
Major improvements across the codebase:
- Extract validationUtils.js (548→217 lines) into strategy pattern validators
- Extract menuUtils.js (543→35 lines) into 6 focused menu modules
- Adopt POSITIONS constants across 23 files (183 replacements)
- Eliminate all 71 ESLint warnings (0 errors, 0 warnings)
- Add 158 unit tests for ConfigManager, MeasurementContainer, ValidationUtils
- Add architecture documentation with Mermaid diagrams
- Add CI pipeline (Docker, ESLint, Jest, Makefile)
- Add E2E infrastructure (docker-compose.e2e.yml)
Test results: 377 total (230 Jest + 23 node:test + 124 legacy), all passing
Lint: 0 errors, 0 warnings
Closes #2, #3, #9, #13, #14, #18
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 15:37:20 +01:00
|
|
|
"generalFunctions": "file:nodes/generalFunctions",
|
2025-05-14 11:32:19 +02:00
|
|
|
"mathjs": "^13.2.0"
|
feat: architecture refactor — validators, positions, menuUtils, ESLint, tests, CI
Major improvements across the codebase:
- Extract validationUtils.js (548→217 lines) into strategy pattern validators
- Extract menuUtils.js (543→35 lines) into 6 focused menu modules
- Adopt POSITIONS constants across 23 files (183 replacements)
- Eliminate all 71 ESLint warnings (0 errors, 0 warnings)
- Add 158 unit tests for ConfigManager, MeasurementContainer, ValidationUtils
- Add architecture documentation with Mermaid diagrams
- Add CI pipeline (Docker, ESLint, Jest, Makefile)
- Add E2E infrastructure (docker-compose.e2e.yml)
Test results: 377 total (230 Jest + 23 node:test + 124 legacy), all passing
Lint: 0 errors, 0 warnings
Closes #2, #3, #9, #13, #14, #18
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 15:37:20 +01:00
|
|
|
},
|
|
|
|
|
"devDependencies": {
|
|
|
|
|
"@eslint/js": "^8.57.0",
|
|
|
|
|
"eslint": "^8.57.0",
|
|
|
|
|
"globals": "^15.0.0",
|
|
|
|
|
"jest": "^29.7.0"
|
2025-05-14 11:32:19 +02:00
|
|
|
}
|
|
|
|
|
}
|