Waterschap Brabantse Delta · R&D lab · architecture artifact
/v1 REST + OpenAPI, one writer per store, identity by tag not device.One asset, one journey. Specs enter once; arrival cannot proceed unless the type exists; the drawings put the asset in its process and electrical context; the runtime binds on PT → UUID and telemetry follows the tag. RESOLV is the one window over every station. Facts live in the register, behaviour lives in the engine packages, values live in telemetry — one source per fact, joined by the tag.
Every module ships one thing and is consumed over one contract. Two kinds of
cargo exist: shapes plug into the drawing canvas (flowio), rules plug
into the engine that owns them — elecIO for everything wired (electrical and
network cabling), general-functions for process/runtime. Facts never travel as
code: they live in the register and are read over /v1.
| module | what it is | ships | consumed by |
|---|---|---|---|
@wbd-rd/flowio | THE CANVAS — select · drag · relate · insert; the editor grammar every screen must match | npm 0.1.1 + the flowio service (document API, append-only versions, render.svg) — live on both estates | goldenbasket process tab · RESOLV · Node-RED viewer (next) · passport adoption (next) |
@wbd-rd/elecio | THE WIRING ENGINES — shape language, nets/phase, NEN checks, wire router, rail layout | npm 0.1.0 · 28 gates · verbatim from goldenbasket with behaviour-neutral proof | goldenbasket installation and network tabs (PR open) · RESOLV cabinet screen (M2) |
@wbd-rd/general-functions | PROCESS/RUNTIME BEHAVIOUR — domains, S88 command registry, units, curves, reconcile | npm 1.1.0 on the registry | 13 EVOLV node repos · dashboards |
| passport | THE REGISTER — tag = position, uuid = device, custody, QR resolver, measurement tree | /v1 REST + field app (arrival, scan, mint) | arrival flow · atlas · coresync/EVOLV · RESOLV assets screen (M3) |
| asset-catalog | THE TYPE-TRUTH — specs, datasheets, validated writes | /v1 REST (/asset-spec) | intake form & supplier API · passport spec-match · RESOLV |
| EVOLV | THE RUNTIME — Node-RED palette, ISA-88, binds PT→UUID | image-based palette (registry) | plants & edge · FROST |
| FROST + historian | TELEMETRY — one Thing per tag, live values and history | SensorThings /v1.1 · Z-info bridge | dashboards · RESOLV live screen (M4) |
| RESOLV | THE MASTER SHELL — one window, one visual language; imports all of the above, rebuilds none of it | app per estate, behind its own SSO | people |
Reading rule: a row never reaches into another row's store — it consumes what that row ships. That single rule is what keeps the whole table modular.
Each discipline is not a separate program — it is a domain pack: a shape catalogue plus a thin adapter that projects the host's own records onto the shared model. Same core, different vocabulary.
elektra shapes on the canvas; nets/phase, checks, wire router and rail layout are the elecIO enginesnetwerk shapes on the canvas; cabling & routing ride the elecIO wiring engines (today: the network tab already routes with the same router as the electrical tab)proces pack (ready today)assets derivationgeneral-functions equipment modulesRnD/infraDecided 2026-08-11: the master application is built apart from pass.wbd-rd.nl and thegoldenbasket.nl — a separate shell that imports the modules, the way Node-RED imports palette packages. The host apps keep running; the master app is where the COMOS goal lands: every discipline on one canvas, one interaction grammar, one asset backbone.
The grammar is set by what already works, measured against each other:
@wbd-rd/flowio today@wbd-rd/elecio today/v1, it does not rebuild them/v1. No shared files or
tables across a boundary. Whoever wants data asks the owner over a path-versioned REST
contract with an OpenAPI descriptor — the way FROST /v1.1 already works.| Phase | What | Status |
|---|---|---|
| 0–2 | registry packages (general-functions 1.1.0, 13 consumers) · /v1 on passport & asset-catalog · back-doors closed · node-red cutover | live |
| E | @wbd-rd/elecio v0.1.0 — shapes, nets/phase, checks, wire router, rails; extracted verbatim with behaviour-neutral proof (4 measurement gates byte-identical); CI green | live |
| E6 | thegoldenbasket consumes elecIO back (vendor + re-export shims) | PR open |
| F1 | flowio service: document API, append-only versions, If-Match, render.svg — running at home; registry image + stack merged for work | live |
| M | master application — separate shell, one visual language (§3) | next build |
| F2–F4 | viewer (same build as the editor — never a second renderer) · node-red-contrib-flowio | next |
| K·T | one relations derivation · passport instance at home · /live per tag · control last (test-mode gate) | next |
Nothing changes in functionality while this moves; code quality only goes up. Every step is a move-commit first (behaviour identical), a change-commit second (measured).
Source of truth: the revamp plan in ~/plans/revamp/ on the work machine
(secondBrain was retired 2026-08-10; archive kept) and its work-side copy in
RnD/infra/docs/revamp/ (README + migration doctrine + flowio
architecture). Runtime facts verified 2026-08-11: elecIO v0.1.0 tag + CI, the live flowio /healthz
(home instance), the registry package list, and the merged infra stack. Diagram is
hand-drawn inline SVG in the house theme. Contact: R&D lab.