diff --git a/seats/node-engine/fixtures/events.json b/seats/node-engine/fixtures/events.json index 66f0f87..bf8142c 100644 --- a/seats/node-engine/fixtures/events.json +++ b/seats/node-engine/fixtures/events.json @@ -131,5 +131,32 @@ "stopped": true, "at": "2026-11-11T09:00:00Z" } + }, + { + "name": "a kept build's wait is held", + "of": "event:wait-held", + "subject": "mesh.seat.node-engine.event.wait-held.ace.postgres", + "given": { + "owner": "node-engine", + "step": "kept-build", + "node": "ace", + "on": "the kept build of postgres", + "bound": "60m", + "since": "2026-11-11T10:00:00Z", + "clock-from": "2026-11-11T10:00:00Z", + "words": "waiting for the kept build of postgres on ace", + "reason": "node away" + } + }, + { + "name": "a hold of the composition ends", + "of": "event:wait-ended", + "subject": "mesh.seat.node-engine.event.wait-ended.ace.postgres", + "given": { + "owner": "node-engine", + "step": "compose", + "since": "2026-11-11T10:00:00Z", + "reason": "restore point missing" + } } ] diff --git a/seats/node-engine/fixtures/states.json b/seats/node-engine/fixtures/states.json index 35631e7..aa0ae83 100644 --- a/seats/node-engine/fixtures/states.json +++ b/seats/node-engine/fixtures/states.json @@ -515,5 +515,28 @@ "contract": 3, "at": "2026-11-05T12:00:00Z" } + }, + { + "name": "a have that waits for the recovery module, with its wait, ask-at and act (design 47 G 560, 629)", + "of": "state:have/.", + "given": { + "v": 1, + "fp": "0123456789ab", + "phase": "held", + "detail": "waiting for a restore point", + "wait": { + "owner": "node-engine", + "step": "compose", + "on": "the recovery module's ended", + "bound": "90m", + "since": "2026-11-11T10:00:00Z", + "clock-from": "2026-11-11T10:00:00Z", + "words": "waiting for the point of postgres's data", + "reason": "recovery wait", + "ask-at": "2026-11-11T10:00:00Z", + "act": "a-20261111t100000" + }, + "health": "waits" + } } ] diff --git a/seats/node-engine/seat.json b/seats/node-engine/seat.json index ff03a96..3156047 100644 --- a/seats/node-engine/seat.json +++ b/seats/node-engine/seat.json @@ -904,6 +904,28 @@ "body": { "$ref": "#/defs/Running" } + }, + { + "name": "wait-held", + "subject": "wait-held..", + "keep": { + "max-age-days": 0, + "last-per-subject": true + }, + "body": { + "$ref": "#/defs/Wait" + } + }, + { + "name": "wait-ended", + "subject": "wait-ended..", + "keep": { + "max-age-days": 0, + "last-per-subject": true + }, + "body": { + "$ref": "#/defs/Wait" + } } ], "family": { @@ -1008,6 +1030,9 @@ }, "handed": { "$ref": "#/defs/AccountsHanded" + }, + "wait": { + "$ref": "#/defs/Wait" } }, "required": [ @@ -2986,6 +3011,66 @@ "node", "processes" ] + }, + "Wait": { + "type": "object", + "description": "a hold or wait a node-engine says, the fields of the seat mesh-wants' wait (design 47 G 498, 512, 629); in the have it also carries ask-at and act (design 47 G 560)", + "properties": { + "owner": { + "type": "string", + "description": "the seat holding the wait: node-engine" + }, + "step": { + "type": "string", + "enum": [ + "compose", + "kept-build" + ], + "description": "compose: a hold of the composition (a restore point missing, an entry missing, parts that differ, a recovery that waits); kept-build: waiting for a kept build (design 47 G 499, 541)" + }, + "node": { + "type": "string", + "description": "the node waited on: the build node for a kept build; the subject's is the node that says it" + }, + "on": { + "type": "string", + "description": "what it waits on" + }, + "bound": { + "type": "string", + "description": "a duration such as 30m" + }, + "since": { + "type": "string", + "format": "date-time" + }, + "clock-from": { + "type": "string", + "format": "date-time", + "description": "the time the bound counts from (design 47 G 266, 269, 498)" + }, + "words": { + "type": "string", + "description": "the wait said in words" + }, + "reason": { + "type": "string", + "description": "why it holds, such as restore point missing, entry-missing, parts-differ, node away or build no longer kept (design 47 G 541, 499)" + }, + "ask-at": { + "type": "string", + "format": "date-time", + "description": "in the have: the time of the first ask of the recovery module for this wait (design 47 G 560)" + }, + "act": { + "type": "string", + "description": "in the have: the act the recovery module answered accepted with (design 47 G 560)" + } + }, + "required": [ + "step", + "since" + ] } } }