--- paths: - "nodes/*/src/**" --- # Node Architecture Rules ## 3-Tier Structure Every node follows entry → nodeClass → specificClass: 1. **Entry file** (`nodes//.js`): Registers with Node-RED via `RED.nodes.registerType`, exposes admin HTTP endpoints. 2. **nodeClass** (`nodes//src/nodeClass.js`): Handles Node-RED runtime concerns — message routing, output formatting, tick loops, status updates, `RED.*` API calls. 3. **specificClass** (`nodes//src/specificClass.js`): Pure domain logic — physics, control algorithms, state machines. ## Separation Rules - **specificClass must never call `RED.*` directly** — all Node-RED interaction goes through nodeClass. - specificClass is the source of truth for domain behavior. - nodeClass is the adapter between Node-RED and domain logic. - Entry file is minimal — registration and admin endpoints only. ## Output Port Convention - Port 0: Process data (control outputs, state, setpoints) - Port 1: InfluxDB telemetry payload - Port 2: Registration/control plumbing (parent-child handshakes) ## Admin Endpoints - `GET //menu.js` — Dynamic menu configuration for editor - `GET //configData.js` — Runtime configuration for editor ## Submodule Awareness Most `nodes/*` directories are git submodules. Keep edits scoped to the target node's directory.