Files
EVOLV/CLAUDE.md
Rene De Ren 5766ee4d16
Some checks failed
CI / lint-and-test (push) Has been cancelled
Drop tensorflow deps; rule cleanups; repo-mem MCP; bump pumpingStation@6ab585b
- package.json: remove @tensorflow/tfjs and @tensorflow/tfjs-node.
  Monster's TF code was already stripped; the deps were stale and kept
  pulling a heavy native binary back into every install.
- .gitignore: ignore .repo-mem/ regenerable indexes and per-session
  .claude/*.lock runtime files.
- CLAUDE.md: prepend READ-FIRST pointer to .claude/rules/repo-mem.md;
  collapse the 'three outputs' bullet to a pointer at node-architecture.
- .claude/rules/telemetry.md: drop Port 0/1/2 duplication; reference
  node-architecture.md.
- .claude/rules/testing.md: stop requiring a separate test/edge tier and
  the basic/integration/edge example flow trio. Reflects what nodes
  actually do.
- .claude/rules/repo-mem.md (new): when-to-call-which guide for the
  per-repo memory MCP, anti-patterns, refresh model.
- .mcp.json (new): wire repo-mem stdio server.
- docs/DEVELOPER_GUIDE.md (new): step-by-step guide for adding a new
  EVOLV node under the three-layer pattern.
- Bump nodes/pumpingStation to 6ab585b (docs + simulations refresh,
  spill-flow path renames consistent with d8490aa).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-06 17:23:47 +02:00

2.2 KiB

EVOLV - Claude Code Project Guide

READ FIRST, BEFORE ANY OTHER WORK: .claude/rules/repo-mem.md — this repo has an MCP server (repo-mem) exposing a substrate-trained repo_search and a persistent fix-trace store. Use those instead of grep for concept queries, and record completed fixes via repo_record_fix. Triggers, anti-patterns, and refresh model are in that rule.

What This Is

Node-RED custom nodes package for wastewater treatment plant automation. Developed by Waterschap Brabantse Delta R&D team. Follows ISA-88 (S88) batch control standard.

Architecture

Each node follows a three-layer pattern:

  1. Node-RED wrapper (<name>.js) - registers the node type, sets up HTTP endpoints
  2. Node adapter (src/nodeClass.js) - bridges Node-RED API with domain logic, handles config loading, tick loops, events
  3. Domain logic (src/specificClass.js) - pure business logic, no Node-RED dependencies

Key Shared Library: nodes/generalFunctions/

  • logger - structured logging (use this, NOT console.log)
  • MeasurementContainer - chainable measurement storage (type/variant/position)
  • configManager - loads JSON configs from src/configs/
  • MenuManager - dynamic UI dropdowns
  • outputUtils - formats messages for InfluxDB and process outputs
  • childRegistrationUtils - parent-child node relationships
  • coolprop - thermodynamic property calculations

Conventions

  • Nodes register under category 'EVOLV' in Node-RED
  • S88 color scheme: Area=#0f52a5, ProcessCell=#0c99d9, Unit=#50a8d9, Equipment=#86bbdd, ControlModule=#a9daee
  • Config JSON files in generalFunctions/src/configs/ define defaults, types, enums per node
  • Tick loop runs at 1000ms intervals for time-based updates
  • Output ports + 3-tier architecture: see .claude/rules/node-architecture.md
  • Multi-tab demo flows: see .claude/rules/node-red-flow-layout.md for the tab/link-channel/spacing rule set used by examples/

Development Notes

  • No build step required - pure Node.js
  • Install: npm install in root
  • Submodule URLs were rewritten from gitea.centraal.wbd-rd.nl to gitea.wbd-rd.nl for external access
  • Dependencies: mathjs, generalFunctions (git submodule)