From 5e8dce621ba19f8a8bba52aa03627afe0a08cac7 Mon Sep 17 00:00:00 2001 From: jochen Date: Wed, 11 Nov 2026 15:51:53 +0100 Subject: [PATCH] K3 (running healthy): running says the health of the build that runs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The node-engine seat's Running gains healthy, a nullable boolean so that a false survives the wire and a running said by a node-engine of before G, with none, is told apart and reads as healthy; stopped is said only when the have no longer holds the module. Two fixtures read healthy true and false; the one without it still decodes. Generated code waits for K21. Builds: design 47 G §520 Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ --- seats/node-engine/fixtures/events.json | 28 ++++++++++++++++++++++++++ seats/node-engine/seat.json | 13 +++++++++--- 2 files changed, 38 insertions(+), 3 deletions(-) diff --git a/seats/node-engine/fixtures/events.json b/seats/node-engine/fixtures/events.json index 657566e..56731bd 100644 --- a/seats/node-engine/fixtures/events.json +++ b/seats/node-engine/fixtures/events.json @@ -92,6 +92,34 @@ "at": "2026-11-09T20:01:00Z" } }, + { + "name": "running says the build that runs is healthy", + "of": "event:running", + "subject": "mesh.seat.node-engine.event.running.ace.nats", + "given": { + "v": 1, + "node": "ace", + "module": "nats", + "fingerprint": "src2:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", + "manifest": "sha256:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", + "healthy": true, + "at": "2026-11-11T09:00:00Z" + } + }, + { + "name": "running says the build that runs turned unhealthy, still running", + "of": "event:running", + "subject": "mesh.seat.node-engine.event.running.ace.nats", + "given": { + "v": 1, + "node": "ace", + "module": "nats", + "fingerprint": "src2:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", + "manifest": "sha256:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", + "healthy": false, + "at": "2026-11-11T09:05:00Z" + } + }, { "name": "running says a module stopped on the node, with no fingerprint", "of": "event:running", diff --git a/seats/node-engine/seat.json b/seats/node-engine/seat.json index ab45d89..89352fa 100644 --- a/seats/node-engine/seat.json +++ b/seats/node-engine/seat.json @@ -2883,7 +2883,7 @@ }, "Running": { "type": "object", - "description": "a module running healthy on a node at a build: what the node-engines of other nodes and the grants part decide a seat's pass from (ADR 0660 §2), kept last per subject with no age limit", + "description": "a module's build running on a node, and its health: what the node-engines of other nodes and the grants part decide a seat's pass from (ADR 0660 §2), and the assigner reads a provider's and a canary's health and a put's end from (design 47 G 520); said again on the same subject each time healthy changes and for every module the have holds at the engine's start, kept last per subject with no age limit", "properties": { "v": { "type": "integer", @@ -2905,14 +2905,21 @@ "type": "string", "description": "the digest of that build's manifest, the indexer's manifest of it, read by digest from the catalog half" }, + "healthy": { + "type": [ + "boolean", + "null" + ], + "description": "the health of the build that runs, as the node-engine's have holds it from the module's declared check (ADR 0240); a running with none, said by a node-engine of before design 47 G, reads as healthy (design 47 G 520). SeatsToPassOn reads none of it: an unhealthy holder still holds its seat" + }, "at": { "type": "string", - "description": "when it was seen running healthy, RFC 3339", + "description": "when it was said, RFC 3339", "format": "date-time" }, "stopped": { "type": "boolean", - "description": "true when the module no longer runs on the node: no fingerprint or manifest then (design 47 G 365, 404); mesh-sdk's SeatsToPassOn counts such a module as not running there" + "description": "true when the have no longer holds the module on the node, never for an unhealthy build: no fingerprint or manifest then (design 47 G 365, 404, 520); mesh-sdk's SeatsToPassOn counts such a module as not running there" } }, "required": [