Keep the engine's own history, and a screen that reads it

A second bus subscriber folds executions, errors, timings and queue lag
into per-minute rollups, keeps failures with their traceback and an audit
trail of who published what, and records one row per cascade — manual runs
and previews included, under an id of their own that writes no idempotency
markers. Read back through /observability/*, which always answers 200 so a
degraded engine still renders its own health screen.

Also fixes two things found on the way: node-health alerts read `status`
where the engine publishes `health`, so a device dropping never alerted
anyone, and the Redis queue reported `parked: 0` whatever was held.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017MeiWk3Yq12n2pTvnQWYvt
This commit is contained in:
2026-08-16 22:29:32 +02:00
co-authored by Claude Fable 5
parent f300c43f3a
commit af3ba51571
30 changed files with 2610 additions and 22 deletions
+10
View File
@@ -107,6 +107,12 @@ external interfaces. See `docs/architecture/structure.canvas` → *Backend M
a dead consumer never acknowledged; nodes that reach outside are skipped on a
redelivery they already ran. Long-lived worker pools replace the per-wave
executors, and a delay now waits in the queue rather than on a worker thread
- [x] Engine history in Postgres: a second bus subscriber folds executions, errors,
timings and queue lag into per-minute rollups, keeps failures with their
traceback and an audit trail of who published what, and records one row per
cascade — including the manual runs and previews that never went through the
queue. Read back through `/observability/*`, which always answers 200 so a
degraded engine still renders, and pruned on a retention window
- [ ] Test nodes: a small node dragged onto an existing one, smoke or unit, blocking
deployment on failure
- [ ] User management scoped per flow and per data set
@@ -169,6 +175,10 @@ React + Vite, primarily desktop but usable on mobile. See `docs/architecture/str
channels/rules each get a sidebar page, and the OAuth clients an agent
registers are listed and revocable under Admin — which needed its
management endpoints written first
- [x] Health screen: how the engine is doing now (nodes, flows, queue, loop lag)
over what it has been doing all day — throughput and failure charts, a
per-flow table, the recent cascades, failures that expand to their
traceback, dead-lettered work and the audit trail
- [x] Mobile-friendly canvas: touch connect, full-screen node panel
- [ ] Installable as a PWA (`vite-plugin-pwa`)