Build Node-RED
Generate a disabled, read-only flow in probe or final mode.
Follow ../../references/interaction-contract.md.
Process
- Require a canonical map and read plan.
- Run
python3 <skill-dir>/scripts/run.py --map <map.json> --plan <read-plan.json> --mode <mode> --output <directory>. - Inspect the preflight findings and manifest.
- Confirm the flow has one trigger and one shared reader per route. Probe mode keeps the trigger manual one-shot; final mode uses one bounded five-second live-poll trigger.
- Confirm the sequencer waits for each response or timeout before sending the next request.
- Confirm the flow writes a complete
capture/v1file toMODBUS_CAPTURE_PATH. - Confirm the canvas has a readable primary path, a separate health/failure lane, a bounded retry/watchdog lane, labeled groups/comments, and no diagnostic wiring crossing the main read path.
- Confirm the read-only
/modbus-dashboardHTTP endpoint is present. It may render the latest capture rows, but it must not trigger reads, writes, or discovery. Only the single final-flow poll trigger may schedule the existing sequencer, and it must remain disabled by default. - Import the flow into the pinned Node-RED environment before marking native verification complete.
Output files
node-red/flow.json- Import this flow into Node-RED.node-red/README.md- Start here. It explains the connection settings, the single start button, and the capture file.node-red/manifest.jsonandnode-red-result.json- Normally ignore these. They bind the flow to the exact map and read plan and record any holds.capture.json- Created by Node-RED after a run. It contains the raw results and exact point identities for analysis.
The generated flow also exposes a read-only core-HTTP dashboard at
/modbus-dashboard. It shows the latest capture/v1 rows and run state; it
does not add a Modbus trigger or require the optional Node-RED Dashboard plugin.
Completion requires a generated or held flow with no unbounded polling, deploy-time trigger, or write node. Final-flow polling must preserve one request in flight.
Stop
- Stop if the flow would add unbounded polling, a deploy-time trigger, or a write node.
- Keep both probe and final flows disabled by default.
- Do not mark native verification complete without the pinned Node-RED import.
Handoff
- No read plan exists: suggest
plan-reads. - A run creates
capture.json: suggestanalyze-capture. - The user needs more target formats: suggest
build-tool-pack.
Click the single start button once in probe mode. In final mode, enable the
disabled tab intentionally; its one poll trigger runs the bounded plan every
five seconds while the tab is enabled. Both modes run the plan in order and
keep one request in flight. Final mode decodes confirmed layouts only. If analysis
raises a multi-register layout question, continue with check-byte-order.