Announce an acknowledged node failure on the bus
Docs / docs (push) Successful in 21s
Playwright Tests / test-playwright (1, 2) (push) Failing after 2m38s
Playwright Tests / test-playwright (2, 2) (push) Failing after 1m38s
pre-commit / pre-commit (push) Failing after 2m46s
Test Backend / test-backend (push) Successful in 2m17s
Compose Smoke Test / test-compose (push) Successful in 31s
Playwright Tests / merge-reports (push) Failing after 1m2s

Clearing a node's last error on the engine published nothing, so a second
browser kept the marker until its next snapshot. One event carries the
qualified node; the receiving client drops the marker without refetching.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013Gf7WaExcJ9bs3kfJXB3nK
This commit is contained in:
2026-08-25 22:33:09 +02:00
co-authored by Claude Opus 5
parent 5ba379490a
commit dd7db026e1
4 changed files with 49 additions and 0 deletions
@@ -167,6 +167,10 @@ export const liveStore = {
getFailure(nodeId: string) {
return failures.get(nodeId)
},
/** Drop the marker for a failure the engine has already been told about. */
clearFailure(nodeId: string) {
if (failures.delete(nodeId)) notify(`failure:${nodeId}`)
},
/**
* Dismiss a node's failure, here and on the engine.
*
@@ -57,6 +57,7 @@ type FlowEvent =
ts?: number
}
| { type: "node_status"; node: string; status: string; error?: string | null }
| { type: "node_error_acknowledged"; node: string; ts?: number }
| ({ type: "node_log" } & LogLine)
| { type: "flow_paused"; flow: string; paused: boolean }
| {
@@ -235,6 +236,11 @@ function connect() {
error: message.error,
})
break
case "node_error_acknowledged":
// Someone dismissed it, here or in another browser. The engine has
// already forgotten it, so drop the marker rather than posting back.
liveStore.clearFailure(message.node)
break
case "node_log":
liveStore.appendLog(message)
break