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>
Platform Standards (post-refactor)
Front door: start at
CONTRACTS.mdat the EVOLV root. It maps every contract, rule, and standard in the stack.
This directory holds the live standards that govern how every EVOLV node
is shaped. They are the source of truth for any human or agent making a
change. The platform refactor that produced them landed on development in
May 2026; the plan artifacts that drove it are in Archive/
for historical reference only.
Live standards (read these before changing code)
| File | Purpose |
|---|---|
CONTRACTS.md |
The exact API shapes — BaseNodeAdapter, BaseDomain, commands registry, ChildRouter, UnitPolicy, statusBadge, HealthStatus, LatestWinsGate, output ports, topic naming. |
CONVENTIONS.md |
Code style, file/function size, comments, naming, imports, tests. |
MODULE_SPLIT.md |
Per-node src/ concern layout + the generic node template. |
WIKI_TEMPLATE.md |
The 14-section visual-first template every per-node wiki uses. |
WIKI_HOME_TEMPLATE.md |
The shape of each per-node wiki/Home.md. |
OPEN_QUESTIONS.md |
Live decisions log — append-only. Most entries are resolved; unresolved entries are what's actually in play. |
How to use them
- Reading code in a node. The node's
CONTRACT.mdandsrc/commands/index.jsare the per-node contract; the files above are the platform contract those per-node files implement. - Writing new code in a node. Match
MODULE_SPLIT.mdfor layout,CONVENTIONS.mdfor style,CONTRACTS.mdfor the base-class API surface, and add toOPEN_QUESTIONS.mdif you discover something unclear rather than inventing a decision. - Touching
generalFunctions. Any new export needs aCONTRACT.mdentry innodes/generalFunctions/CONTRACT.mdand, if it introduces a new platform shape, a section inCONTRACTS.mdhere. - Updating a wiki page. Generated sections (topic-contract, data-model)
are produced by
npm run wiki:allper submodule — never hand-edit between theBEGIN AUTOGEN/END AUTOGENmarkers.
Archive
Archive/ holds the refactor plan (now done): CONTINUE_HERE.md,
TASKS.md. They describe how the platform got from pre-refactor to the
current shape. They are not authoritative for new work — the files above are.