Commit Graph

192 Commits

Author SHA1 Message Date
znetsixe
b1e0736e8e docs: propagate folder-naming convention + bump submodules for editor refresh
Convention:
* CLAUDE.md (root): new "Folder & File Layout (READ BEFORE CREATING NEW FILES)"
  section with required-name table and explicit legacy-drift list (mgc, vgc,
  dashboardapi).
* .claude/rules/node-architecture.md: file-naming convention + src/editor/
  module layout sections; serving recipe for /<nodeName>/editor/:file.

Submodule bumps:
* generalFunctions: shared output-format picker, redesigned position SVGs,
  tighter asset wizard, restored curve preview size.
* rotatingMachine: pump banner, circular state diagram, mode icon cards,
  picker integration, CLAUDE.md update.
* 10 others: per-node CLAUDE.md "Folder & File Layout" sections — 3 of
  them (machineGroupControl, valveGroupControl, dashboardAPI) carry inline
  warnings about their entry-filename drift.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-18 21:31:50 +02:00
Rene De Ren
253ac93896 docs: standards cleanup — single front-door CONTRACTS.md + archive stale plan artifacts
Establish CONTRACTS.md at the EVOLV root as the canonical map of where every
contract, rule, and standard lives. Surface it from CLAUDE.md so every fresh
agent or colleague lands there first.

Reshape .claude/refactor/ to reflect that the platform refactor is done:
live standards stay at the top level; the plan artifacts (CONTINUE_HERE.md,
TASKS.md) move into Archive/ with WARNING banners.

Drop content that drifted out of date or duplicated the new standards stack:
- docs/DEVELOPER_GUIDE.md (pre-refactor walkthrough; superseded by
  wiki/Architecture, wiki/Getting-Started, .claude/rules/node-architecture,
  .claude/refactor/MODULE_SPLIT + per-node CONTRACT.md + src/commands/).
- .agents/decisions/ (15 DECISION files): load-bearing decisions belong in
  commit messages and PR descriptions; live open items in OPEN_QUESTIONS.md.
- .agents/improvements/TOP10_*.md: moved to Archive/.

Bump generalFunctions to 49c77f2 — adds CONTRACT.md inside the library:
different shape from per-node CONTRACT.md files (library API, not msg.topic),
with stability tags and pointers to .claude/refactor/CONTRACTS.md §N.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-18 15:48:46 +02:00
znetsixe
560cc2f39a bump submodules: shared icon-picker visuals + asset wizard
* generalFunctions @ 34a4ef0 — new iconHelpers module + initVisuals
  step on logger/position menus; asset selector rebuilt as a chip
  wizard with per-stage type-to-filter combobox and node-aware curve
  mini-chart (rotatingMachine Q-H, valve Cv, diffuser SOTE).
* machineGroupControl @ 6833e9f — consumes the shared visuals;
  strategy/rendezvous cards keep their MGC-local SVGs; maintenance
  switched to FA fa-wrench. Output-format pickers now use the shared
  .evolv-icon-picker classes.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-18 11:11:07 +02:00
znetsixe
4b6579a820 bump submodules: MGC rendezvous planner (same-time landing across modes)
- machineGroupControl @ 472402c — rendezvous planner extracted into
  src/movement/. Every dispatch (both optimalControl and priorityControl)
  routes through a shared _dispatchFlowDistribution helper so all pumps
  reach their setpoint at t* = max(eta_i) regardless of per-pump speed.
  New "Same-time landing" toggle in the editor (planner.useRendezvous,
  default true) for operators who want the legacy fire-and-forget.
- generalFunctions @ af02d36 — new planner.useRendezvous schema field
  and stateManager.getRemainingTransitionS() that the planner reads to
  compute exact eta for children mid-ladder.
- rotatingMachine @ 5ea0b0b — sequenceController honors the new
  sequenceAbortToken so a pre-empted sequence (e.g. shutdown caught
  mid-ramp by a fresh demand) cleanly breaks out instead of barging
  through to its terminal state.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-17 19:45:07 +02:00
znetsixe
1ab913b699 bump submodules: generalFunctions + pumpingStation + rotatingMachine
- generalFunctions f8f71a4: schema additions (output.process/dbase,
  functionality.distance, drop prioritypercentagecontrol), measurement
  position.x nullable, asset-data file renamed machine.json ->
  rotatingmachine.json so AssetMenu lookup matches, menu re-derives
  supplier/assetType from saved model id on reopen.
- pumpingStation 2c7fe17: setDemand reads unit-normalised payload from
  commandRegistry (mirrors today's MGC change to unit-self-describing
  demand commands). Pre-existing test failure (stale path to
  basic-dashboard.flow.json, renamed to 02-Dashboard.json in fe5fa35) is
  unrelated to this commit.
- rotatingMachine 394a972: η = (Q·ΔP)/P_shaft replaces the legacy Q/P
  formula — gives a real BEP peak so NCog stops collapsing to 0 and the
  MGC dashboard's BEP-position metric actually moves. Asset-registry
  lookup renamed machine -> rotatingmachine (matches generalFunctions
  rename). Constructor stateConfig pass-through fixed (default-param was
  clobbering BaseNodeAdapter's pre-set extras). + 2 new tests.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-14 22:52:53 +02:00
znetsixe
18f68aa5da bump machineGroupControl: governance + unit-self-describing demand (26e92b5)
MGC submodule lands the 2026-05-14 governance review fixes plus rolled-up
session work: _output-manifest.md per the new output-coverage rule,
computeEqualFlowDistribution extracted as a pure function (testable without
MGC), groupEfficiency degenerate-case fix, unit-self-describing set.demand,
eta = (Q*dP)/P formula correction, and dashboard fan-out hardening
(auto-init, NCog normalization, Q-H trim, null-trap closure). Suite 108/108.

Superproject adds:
- .claude/rules/output-coverage.md: every-output-every-state testing rule
  prompted by the eta-null crash earlier in the session.
- CLAUDE.md: pointer to the new rule under Conventions.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-14 22:32:39 +02:00
znetsixe
9924e66249 bump diffuser + generalFunctions: canonical Nm³/(h·m² membrane) axis
Follow-up to the AssetResolver landing. All five diffuser supplier
curves now share one X-axis convention; diffuser specificClass
computes specific flux from total flow + membrane area and queries the
curves at that flux. Each curve file carries its own
_meta.membraneArea_m2_per_element so the node defaults are correct
without any per-node overrides.

Supplier naming fixed: Sulzer (PIK300/PRK300), Aquaconsult-Entec
(Aerostrip Phoenix).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-12 18:17:08 +02:00
znetsixe
edc91dd988 bump submodules: AssetResolver landing + diffuser supplier curves
Coordinated cutover across five submodules to the generalFunctions
asset registry. Highlights:

- generalFunctions: AssetResolver namespace + FileBackend, with new
  diffuser supplier curves (GVA migrated, Jäger JetFlex EPDM-1000,
  Aerostrip Phoenix multi-coverage, PIK300/PRK300 multi-coverage).
  Diffuser config schema corrected: density was always meant to be
  bottom-coverage %, not elements/m².
- diffuser: _loadSpecs reads from the registry; editor wired with the
  shared asset cascade (supplier → type → model → unit).
- rotatingMachine + valve: derive supplier/type/units from the model
  id via resolveAssetMetadata; reject saved legacy fields with a clear
  re-save prompt.
- machineGroupControl: integration fixtures use the trimmed asset
  shape.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-12 17:13:37 +02:00
znetsixe
3b192bec63 bump machineGroupControl: editor defaults + mode-case fix + new example flows (4cb9c50)
Surfaces mode/scaling in the editor, fixes the camelCase-vs-lowercase
mismatch that silently disabled dispatch on default config, compacts the
status badge, extends getOutput with capacity / machine-count fields, and
replaces the pre-refactor example stubs with 01-Basic.json (MGC + 3
pumps + setup) and 02-Dashboard.json (FlowFuse dashboard with charts).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-12 15:24:16 +02:00
znetsixe
5eafd83443 bump generalFunctions: deep-merge in buildConfig (84a4430)
Fixes MGC child-registration id collision and rotatingMachine
curve-lookup failure caused by the shallow Object.assign in
ConfigManager.buildConfig wiping general.id and asset.model.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-12 15:06:50 +02:00
znetsixe
29c0cdc37c bump pumpingStation submodule to 6e89e49
Includes 285fd01 (drop 52 MB 01-basic-demo.gif) and 6e89e49 (restore GIF
"needed" placeholders in Home and Reference-Examples so the dropped media
is tracked instead of leaving a broken image link).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-12 15:02:08 +02:00
znetsixe
123ef6fca3 wiki + submodules: Functional Overview page + bump pumpingStation / generalFunctions / monster
Submodule pointers
- pumpingStation: realistic basin defaults, ramp-foot visual fix, manual-mode
  observability, new 02-Dashboard.json (charts + raw-output table), wiki
  Home/Reference-Examples with screenshots + demo GIF.
- generalFunctions: pumpingStation config schema defaults aligned with the
  new editor drag-in values; startLevel description corrected (ramp foot is
  inflowLevel, not startLevel).
- monster: examples cleanup — drop pre-refactor flows, ship single
  02-integrated-e2e.json.

Wiki
- New wiki/Functional-Overview.md: companion to Architecture covering the
  process side — what each node physically represents and which control
  objective it serves.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-12 14:52:36 +02:00
znetsixe
f7ada0fd9d P11.8: bump pumpingStation submodule — Zone A / Reference-* wiki split
Pilot pass for the per-node Home redesign. pumpingStation's wiki/
now has a short, intuitive Home.md plus four Reference-* sibling
pages (Contracts / Architecture / Examples / Limitations). Asset
placeholders created under wiki/_partial-{screenshots,gifs,flows}/
with explicit "screenshot needed" / "GIF needed" callouts where
the user will record assets.

Abandoned content: wiki/functional-description.md and wiki/modes/*
were removed from source per user direction (example-driven over
prose).

Once this pattern is validated on the live pumpingStation wiki,
the same split will be applied to the other 10 nodes.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-12 09:20:44 +02:00
znetsixe
9ab9f6b3e3 P11.7: bump submodule pointers for 2026-05-11 wiki wave
13-agent parallel rewrite of per-node wiki/Home.md per the visual-first
14-section template (.claude/refactor/WIKI_TEMPLATE.md). Three pointer
bumps (diffuser, valve, dashboardAPI) were committed early by their
agents (ff804af, e2aa6e6, 14f9104); this commit covers the remaining
nine submodules:

- generalFunctions  → c7e561e  (new wiki/Home.md; library API surface)
- machineGroupControl → 05de4ee
- measurement       → ffc0358
- monster           → 53c25f2
- pumpingStation    → b825ac1
- reactor           → d735f94
- rotatingMachine   → b373727
- settler           → 98052a1
- valveGroupControl → 618ad27

Parent wiki audit (b8cb889) is already committed: 18 stale pages moved
to wiki/Archive/, evergreen domain/manual content kept, Home.md
refactor-status corrections (Tier 6 + Tier 9).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-11 21:08:51 +02:00
znetsixe
14f9104722 P11.7: bump dashboardAPI submodule pointer (wiki Home.md rewrite)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-11 21:06:56 +02:00
znetsixe
e2aa6e6937 docs: bump valve submodule pointer — wiki Home.md FSM + config rewrite
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-11 21:06:37 +02:00
znetsixe
ff804af11c bump nodes/diffuser submodule pointer: P11.6 wiki regen
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-11 21:05:10 +02:00
znetsixe
44ffae12f7 P11.6 wiki regen + Phase 10 private-test rewrites — bump pointers
All 11 nodes' wiki/Home.md regenerated with the Unit column +
per-topic descriptions. rotatingMachine + reactor private-method
test files rewritten to the public BaseNodeAdapter surface.

OPEN_QUESTIONS: rotatingMachine + reactor private-test entries
marked RESOLVED.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-11 19:44:19 +02:00
znetsixe
4f970eaa0d Wave B3 + C: bump submodule pointers for P11.5 + B2.1 + B2.2
pumpingStation   ef81013 → 5f1c9ae  P11.5 units + B2.1 declareChildGetter
  machineGroupControl 31324ae → 3ee1939  P11.5 units (set.demand)
  rotatingMachine  84126e9 → 1d5e040  P11.5 units (set.flow-setpoint)
  valve            8aa5b5e → 63b5f94  P11.5 units + descriptions
  monster          0038a8c → 133d442  P11.5 descriptions
  diffuser         9122b14 → e18b6a0  P11.5 units (data.flow)
  reactor          297c671 → 1aa2d92  P11.5 descriptions
  settler          2af30c0 → 43a5bf5  P11.5 descriptions
  valveGroupControl c44d595 → 778b2e0  P11.5 + B2.2 ChildRouter adoption
  measurement      497f05d → 15b7414  P11.5 descriptions

Platform: 810 / 0 across all 12 submodules. Phase 11 ready for the
last step (P11.6 regenerate docs).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-11 19:31:52 +02:00
znetsixe
6bf94f4c8a Wave B1: bump submodule pointers + 5 OPEN_QUESTIONS resolved
generalFunctions f117546 → <new>  B2.3 fireAndWait + P11.1 possibilities
                                    + P11.2 commandRegistry.units + monster schema
  measurement      e6e212a → <new>  B1.3 isStable threshold
  monster          2aa7f88 → <new>  B1.4 cooldown-guard root-cause fix
  machineGroupControl 0e8cab5 → <new>  B2.3 fireAndWait migration

OPEN_QUESTIONS marked RESOLVED in the decisions table:
  isStable tautology, monster cooldown-guard, LatestWinsGate fireAndWait

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-11 17:29:23 +02:00
znetsixe
30928ce378 Wave A: bump submodule pointers + mark 4 OPEN_QUESTIONS resolved
generalFunctions ff9aec8 → f117546  B3.1+B3.2+B3.3 infra
  measurement      2aa8021 → e6e212a  B2.4 drop 'mAbs' event
  machineGroupControl 045a941 → 0e8cab5  B3.3 drop _unitView
  rotatingMachine  9e8463b → 84126e9  B3.3 drop _unitView
  pumpingStation   e991ea6 → ef81013  B1.2 drop 'overfillLevel'

OPEN_QUESTIONS.md: 4 entries marked RESOLVED (ChildRouter monkey-patch,
commandRegistry 'none' type, measurement 'mAbs' event, MGC unitPolicy
shape).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-11 17:14:00 +02:00
znetsixe
351e889918 Bump submodule pointers: A1/A2/A3 fixes + basin-docs-update merge
monster          2a82b7d → 2aa7f88  A1: restore child.register input handler
  settler          6953d64 → 2af30c0  A2: restore child.register input handler
  reactor          d931bea → 297c671  A3: expose tick(dt) on BaseDomain wrapper
  pumpingStation   ed22f01 → e991ea6  A4+B4: merge basin-docs-update (per-mode SVG,
                                       stopLevel hysteresis, shifted ramp, manual
                                       q_out, log/linear curve, overflow clamp + spill,
                                       7-file editor module set)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-11 16:20:17 +02:00
znetsixe
23dc23328d Bump generalFunctions for P10.5 test fixes 2026-05-11 15:21:16 +02:00
znetsixe
3bfb9833c0 P9.3: parent EVOLV wiki Home + Archive + bump submodule pointers
wiki/Home.md (new) — platform landing page per WIKI_HOME_TEMPLATE.md.
Mermaid block of 11 active EVOLV nodes coloured by S88 level, navigation
grouped by level, standards-pointer table, live refactor-status table.

wiki/Archive.md (new) — empty archive table for retired wiki pages.

Submodule pointer bumps (all wiki/Home.md + wiki:* npm scripts):
  measurement          42a0333 → 2aa8021
  machineGroupControl  bb2f3be → 045a941
  rotatingMachine      e058fe9 → 9e8463b
  valve                e27135b → 8aa5b5e
  valveGroupControl    e02cd1a → c44d595
  diffuser             15cfb22 → 9122b14
  monster              2a6a0bc → 2a82b7d
  settler              b8247fc → 6953d64
  reactor              7bf464b → d931bea
  dashboardAPI         92d7eba → 67a374f

Every node now has a visual-first wiki Home page with auto-generated
topic contract + data model. Per-node `npm run wiki:all` re-generates
the AUTOGEN blocks from src/commands/ + src/specificClass.js.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-11 15:18:05 +02:00
znetsixe
afc304b424 Bump pumpingStation + generalFunctions for P9.2 + P9.3 + examples
generalFunctions  95c5e68 → 30c5dc8  P9.2 wikiGen.js shared script
  pumpingStation    d2384b1 → ed22f01  P9.3 wiki Home.md pilot +
                                       3-tier example flows + tools/
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-11 14:50:57 +02:00
znetsixe
3b7acdaa88 P10.7: top-level test:platform runner + bump submodule pointers
scripts/test-platform.js iterates each submodule, runs npm test, shows
a per-node pass/fail summary, exits non-zero if any node fails.

Wired as `npm run test:platform` in the parent package.json.

Submodule pointer bumps:
  dashboardAPI     2874608 → 92d7eba  (Mocha → node:test conversion for edge+integration)
  diffuser         0ec9dd1 → 15cfb22  (P10.7a test script fix)
  generalFunctions 8ebf31d → 95c5e68  (P10.7a test script fix + remove 5 broken Mocha dupes)
  pumpingStation   52d3889 → d2384b1  (P10.7a test script fix)

Current platform-wide gate: 729 pass / 5 fail across 12 submodules
(5 failures are all pre-existing AssertionErrors logged in
OPEN_QUESTIONS.md for Phase 10.5).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-11 14:45:06 +02:00
znetsixe
0a890fd0d7 Bump generalFunctions to 7c..-ish (P8.5 cleanup + P6.4 schema fix)
92eb8d2  P8.5: remove src/menu/asset_DEPRECATED.js (243 lines, 0 consumers)
  HEAD     P6.4 follow-up: add diffuser config schema fields

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-11 07:47:39 +02:00
znetsixe
1d0dd45d9a P8 prep: bump submodule pointers to development tips after Phase 1-6
All 12 submodules + parent EVOLV are now on the `development` branch
with the platform refactor complete:

  generalFunctions     7372d12  Phase 1 platform infra (additive)
                                BaseNodeAdapter / BaseDomain / UnitPolicy
                                ChildRouter / LatestWinsGate / HealthStatus
                                commandRegistry / statusBadge / statusUpdater
                                stats — 113 unit tests
  pumpingStation       52d3889  Phase 2 — concern split + integration
                                basin/measurement/control/safety/io/commands
                                specificClass 1039→245 lines, 102 tests
  measurement          42a0333  Phase 3 — Channel-based analog + BaseDomain
                                simulator/calibration/commands extracted
                                specificClass 716→244 lines, 96 tests
  machineGroupControl  bb2f3be  Phase 4 — concern split + integration
                                groupOps/totals/combinatorics/optimizer/
                                efficiency/dispatch/commands
                                specificClass 1808→336 lines, 77 tests
  rotatingMachine      e058fe9  Phase 5 — concern split + integration
                                curves/prediction/drift/pressure/state/
                                measurement/flow/display/commands
                                specificClass 1760→400 lines, 196 tests
  valve                e27135b  Phase 6 platform refactor + concern split
  valveGroupControl    e02cd1a  Phase 6 platform refactor + concern split
  diffuser             0ec9dd1  Phase 6 platform refactor (port 4→3)
  monster              2a6a0bc  Phase 6 platform refactor + concern split
  settler              b8247fc  Phase 6 platform refactor (reactor link kept)
  reactor              7bf464b  Phase 6 platform refactor + kinetics/ split
  dashboardAPI         2874608  Phase 6 — commandRegistry only (no BaseDomain;
                                passive HTTP server — see OPEN_QUESTIONS.md)

493 basic tests pass platform-wide (12/12 nodes green).

All canonical input topics (set.* / cmd.* / data.* / child.* / query.* /
evt.*) live alongside legacy aliases with one-time deprecation warnings.
Topic-rename cycle (P7) elapses across one release before alias removal.

Decisions taken during the refactor are recorded in
.claude/refactor/OPEN_QUESTIONS.md (resolved entries + carryovers for
Phase 8.5 cleanup, Phase 9 wiki, and Phase 10 test rewrite).

Ready for review on a per-submodule basis. Promotion to main is gated
on Docker E2E (per-node trial-ready criteria) — not part of this commit.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-10 22:25:16 +02:00
Rene De Ren
aec90cc8e7 fix: stopLevel hysteresis works — bump rotatingMachine + MGC
Some checks failed
CI / lint-and-test (push) Has been cancelled
Pump-shutdown deadlock fix split across two submodules:

- rotatingMachine@8f9150e: shutdown sequence clears state.delayedMove
  so the abort-and-return-to-operational path doesn't auto-pickup the
  queued setpoint and re-engage the pump.
- machineGroupControl@ea2857f: turnOffAllMachines clears MGC's
  _delayedCall and serializes per-pump shutdown so PS's 2 s tick loop
  can't interrupt an in-flight shutdown.

Live verification on pumpingstation-complete-example demo: basin now
shuts pumps off at stopLevel cleanly, reverses to fill, completes the
hysteresis cycle.

Also disable the trends page in the demo flow (build_flow.py + regen
flow.json). FlowFuse ui-chart's per-series server-side history buffer
(7 charts × ~20 series × 3600-point retention) was saturating the
Node-RED event loop at 129% CPU, making the dashboard freeze on every
click. Trends remain available — just disabled by default; flip the
ui_page_trends "d" key to false to re-enable.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-09 18:18:11 +02:00
Rene De Ren
6fef002da1 Bump machineGroupControl@2651aaf — quiet abortActiveMovements normal path
Some checks failed
CI / lint-and-test (push) Has been cancelled
WARN now fires only when force-aborting an actually in-flight pump
movement (gate-bypass safety net), not on every no-op tick.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-09 09:43:17 +02:00
Rene De Ren
c4d75809cd Bump machineGroupControl@df74ea0 — serialize handleInput dispatches
Some checks failed
CI / lint-and-test (push) Has been cancelled
Adds the _dispatchInFlight gate that mirrors rotatingMachine
state.delayedMove. Before this, PS at 1 Hz overran in-flight pump
ramps via concurrent handleInput entries, producing the live thrash:
120 aborts / 2 min, pump_b clamped at minFlow.

Includes regression test:
test/mgc-overactive-demand-serialization.integration.test.js
covering concurrent-burst serialization (30 calls → ≤ 5 aborts) and
latest-wins semantic.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-09 09:15:23 +02:00
Rene De Ren
a4617d850a Bump MGC@96b84d3 — revert unchanged-demand short-circuit (broke live demo)
Some checks failed
CI / lint-and-test (push) Has been cancelled
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-08 20:55:47 +02:00
Rene De Ren
44963cfa43 Bump MGC@a14aa0d — short-circuit handleInput on unchanged demand
Some checks failed
CI / lint-and-test (push) Has been cancelled
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-08 20:10:57 +02:00
Rene De Ren
15c39f76bb Bump MGC@69bdf11 + adjust overcapacity test to actually exercise storm
Some checks failed
CI / lint-and-test (push) Has been cancelled
- nodes/machineGroupControl@69bdf11 makes DOWNSTREAM single-writer
  (handlePressureChange = live aggregate; optimizer target moved to
  AT_EQUIPMENT). Closes the ps-mgc-flow-contract failure.

- test/inflow-overcapacity-stability now starts the basin at maxLevel
  so PS percControl is immediately 100 % (the actual storm condition)
  and uses real-time waits between ticks so movementManager intervals
  fire — the previous setImmediate yield was too fast for moves to
  progress, making pumps look perma-parked even when behaviour was OK.
  Park observations dropped from 83 to 3 across the sim window; final
  ctrl converges to ~88 % across all 3 pumps.

All 82 cross-node + node integration tests now pass.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-08 18:33:09 +02:00
Rene De Ren
21e777797a Bump machineGroupControl@dc27a56 — mirror aggregate flow onto DOWNSTREAM
Some checks failed
CI / lint-and-test (push) Has been cancelled
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-08 17:20:28 +02:00
Rene De Ren
035f03cdee Bump machineGroupControl@b7c40b0 — mirror dispatch fix in equalFlowControl
Some checks failed
CI / lint-and-test (push) Has been cancelled
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-08 11:47:23 +02:00
Rene De Ren
9bc6908d05 Bump machineGroupControl@8e68420 — add cycle/sweep regression tests
Some checks failed
CI / lint-and-test (push) Has been cancelled
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-08 11:34:01 +02:00
Rene De Ren
0cab98c196 Pumping-station demo overhaul + cross-node test harness + bumps
Some checks failed
CI / lint-and-test (push) Has been cancelled
Submodule bumps land the deadlock fix (state.js residue unpark + MGC
optimalControl dispatch reorder) and pumpingStation stopLevel hysteresis.

- Renames examples/pumpingstation-3pumps-dashboard →
  pumpingstation-complete-example with regenerated flow.json. New
  dashboard groups, demand-broadcast wiring, S88 placement rule
  applied, ui-chart trend-split and link-channel naming follow
  .claude/rules/node-red-flow-layout.md.
- New cross-node test harness under test/: end-to-end-pumpingstation
  drives PS + MGC + 3 pumps + physics simulator end-to-end and
  verifies the ~5/15 min cycle.
- Adds Grafana provisioning dashboards (pumping-station.json) and a
  helper sync-example.sh script for export/import to live Node-RED.
- Docker entrypoint + settings + compose tweaks for the persistent
  user dir layout used by the demo.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-08 11:21:21 +02:00
Rene De Ren
ca0644d689 Bump generalFunctions@94bcc90 — gitignore local lockfile stub
Some checks failed
CI / lint-and-test (push) Has been cancelled
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-06 17:24:28 +02:00
Rene De Ren
5766ee4d16 Drop tensorflow deps; rule cleanups; repo-mem MCP; bump pumpingStation@6ab585b
Some checks failed
CI / lint-and-test (push) Has been cancelled
- 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
Rene De Ren
0466287514 Bump pumpingStation@d8490aa + generalFunctions@a516c2b
Some checks failed
CI / lint-and-test (push) Has been cancelled
pumpingStation: predicted-volume hard-floor at 0; spill flow refactored
from flow.predicted.out.<child=overflow> to its own position
flow.predicted.overflow. Drops the spillPrev self-subtraction. New
underflowVolume diagnostic for flow-balance errors. 70/70 tests pass.

generalFunctions: MeasurementContainer.get() strict-resolves explicit
.child(name) — missing named child now returns null instead of falling
through to a sibling. Persistent setChildId remains a hint (no
behavioural change for registered children).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-06 17:18:45 +02:00
Rene De Ren
21b0bd34c6 Bump pumpingStation@6b46a8a — predicted-volume overflow clamp
Some checks failed
CI / lint-and-test (push) Has been cancelled
Integrator now clamps predicted volume to [dryRunSafetyVol,
maxVolAtOverflow], records cumulative spill as overflowVolume and
exposes a synthetic flow.predicted.out.overflow rate so net flow
balances to ~0 while pinned. _selectBestNetFlow holds the last
level-rate net flow during overflow so dashboards keep a usable
reading. Top-level predictedOverflowVolume / predictedOverflowRate
fields added to getOutput.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-06 14:48:00 +02:00
Rene De Ren
60c6a647e2 Bump pumpingStation@62bc73f — input bounds + full hierarchy validation
Some checks failed
CI / lint-and-test (push) Has been cancelled
- bounds.js sets HTML5 min/max on every level + percent input so the
  spinner can't push values past the basin hierarchy.
- Basin-level violations now surface in a visible ribbon above the
  basin diagram and block Deploy via oneditsave.
- Layout polish: widened side panel, tightened basin viewBox, dropped
  mode-preview axis labels, moved datum below the tank.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-06 14:10:29 +02:00
Rene De Ren
48b9335dac Bump pumpingStation@de9a79b + generalFunctions@4b6250c
Some checks failed
CI / lint-and-test (push) Has been cancelled
- pumpingStation: hold-then-ramp shift hysteresis driven by
  shiftArmPercent (% output threshold for arming) instead of by level.
  New e2e integration test exercises the full fill→arm→hold→ramp-down
  cycle. Editor preview gains the arming-% horizontal line.
- generalFunctions: add shiftArmPercent to the pumpingStation schema;
  add prominent doc block on MeasurementContainer documenting the
  `${type}.${variant}.${position}.${childId}` flatten format and the
  implicit 'default' childId convention so dashboards don't drop it.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-06 11:47:03 +02:00
Rene De Ren
7c6c6183f7 Bump pumpingStation@8a6ca1b + generalFunctions@35f648f
Some checks failed
CI / lint-and-test (push) Has been cancelled
- pumpingStation: level-armed shift hysteresis, derived dryRunLevel,
  side-panel editor with hover-coupling, manual q_out for end-to-end
  testing without rotating-machine wiring.
- generalFunctions: schema additions for flowThreshold, output formats,
  enableShiftedRamp / shiftLevel under control.levelbased.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-05 19:29:49 +02:00
Rene De Ren
2593458bdf Update pumpingStation submodule
Some checks failed
CI / lint-and-test (push) Has been cancelled
2026-05-05 11:02:33 +02:00
znetsixe
36147de6d7 Bump pumpingStation@ab0d4ed — outlet pinned, zone labels added, volume in diagram
Some checks failed
CI / lint-and-test (push) Has been cancelled
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 13:20:06 +02:00
znetsixe
b84c59cbe6 Bump pumpingStation@2dd419d — revert tank size, nudge lines themselves
Some checks failed
CI / lint-and-test (push) Has been cancelled
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 12:10:32 +02:00
znetsixe
b873a8fb02 Bump pumpingStation@785d036 — taller editor diagram, more breathing room
Some checks failed
CI / lint-and-test (push) Has been cancelled
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 11:41:10 +02:00
znetsixe
7e51bec8f2 Bump pumpingStation@65fe68b — nudge crowded threshold inputs with leader lines
Some checks failed
CI / lint-and-test (push) Has been cancelled
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 10:41:26 +02:00