SD-M3: the node-engine seat's read-only verb pull-waits (design 51, A7's ENG-9)

Optional until every engine serves it; answers each failed pull waiting on a store's holder.

Claude-Session: https://claude.ai/code/session_01JG73KJNrH5EgFXMKKYSrig
This commit is contained in:
2026-11-04 12:19:52 +01:00
parent 7f0b0f3b42
commit 5b4239e6d9
3 changed files with 138 additions and 3 deletions
+3
View File
@@ -684,6 +684,9 @@ func List() []Seat {
Input: map[string]any{"properties": map[string]any{"module": map[string]any{"description": "a module placed on this machine whose apply is also tried again (optional)", "type": "string"}}, "type": "object"}},
{Name: "compose-candidate", Description: "Compose a check's candidate on this machine in shadow, with its own sealed values and the indexer's manifest verdicts, and say per module placed here whether it composes (with its digest and whether the candidate changes it), is refused by the candidate or is held without it, each with why, and the verdict of the machine's own composition (novox/hq ADR 0593 §7). Read-only: applies nothing and writes nothing. Answered by this machine's engine alone, within the asker's bound.", Optional: true,
Input: map[string]any{"properties": map[string]any{"candidate": map[string]any{"description": "the key of the indexer's candidate, <group>.<heads hash>", "type": "string"}, "input": map[string]any{"description": "\"true\": also answer the composition input the candidate was composed from, for the sandbox path", "enum": []string{"true", "false"}, "type": "string"}}, "required": []string{"candidate"}, "type": "object"}},
{Name: "pull-waits", Description: "The failed pulls this machine's engine waits on a store's holder for (design 51 *What a pull meets in the swap*): per module, the image, the seat it came through and that seat's holder, when the pull began, how many settled events of that holder it heard and the last, and its last retry and what started it. Read-only. Answered by this machine's engine alone.", Optional: true,
Input: map[string]any{"properties": map[string]any{}, "type": "object"},
Output: map[string]any{"properties": map[string]any{"waits": map[string]any{"description": "every failed pull waiting on a holder", "items": map[string]any{"properties": map[string]any{"holder": map[string]any{"description": "that seat's holder, whose settled the retry waits on", "type": "string"}, "image": map[string]any{"description": "the image whose pull failed", "type": "string"}, "module": map[string]any{"description": "the module whose apply failed", "type": "string"}, "pull-began": map[string]any{"description": "when the failed pull began, RFC 3339", "type": "string"}, "retry-last": map[string]any{"description": "when it was last tried again, RFC 3339", "type": "string"}, "retry-trigger": map[string]any{"description": "what started that retry: settled, or the engine's start", "type": "string"}, "seat": map[string]any{"description": "the seat the image came through", "type": "string"}, "settled-count": map[string]any{"description": "the settled events of the holder heard since the engine started", "type": "integer"}, "settled-last": map[string]any{"description": "when the last was heard, RFC 3339", "type": "string"}}, "required": []string{"module", "image"}, "type": "object"}, "type": "array"}}, "required": []string{"waits"}, "type": "object"}},
}},
{Name: NodeLoginManager, Scope: "node", Grain: "seat-list", Decision: "novox/hq ADR 0208",
Serves: []Verb{
+69 -3
View File
@@ -32,7 +32,7 @@
"input": {
"properties": {
"access": {
"description": "the access, library:\u003cname\u003e",
"description": "the access, library:<name>",
"type": "string"
},
"act": {
@@ -117,7 +117,7 @@
},
{
"name": "composition",
"description": "One module's composition on this machine beside what runs of it, read-only: the composition its want's build has in the bucket composed-\u003cnode\u003e (the latest revision, or the one whose digest is given, from the revisions the bucket keeps), the digest of each kept revision, what runs (applied, its have, or the kept declaration), its want and have (phase running, failed, held or waiting-yes, and the digest that waits for a yes), and the move's judgement with its words: why a record module waits for a yes. With diff, every resource added, removed or changed, a provider's received file naming the consumers that join or leave.",
"description": "One module's composition on this machine beside what runs of it, read-only: the composition its want's build has in the bucket composed-<node> (the latest revision, or the one whose digest is given, from the revisions the bucket keeps), the digest of each kept revision, what runs (applied, its have, or the kept declaration), its want and have (phase running, failed, held or waiting-yes, and the digest that waits for a yes), and the move's judgement with its words: why a record module waits for a yes. With diff, every resource added, removed or changed, a provider's received file naming the consumers that join or leave.",
"optional": true,
"input": {
"properties": {
@@ -161,7 +161,7 @@
"input": {
"properties": {
"candidate": {
"description": "the key of the indexer's candidate, \u003cgroup\u003e.\u003cheads hash\u003e",
"description": "the key of the indexer's candidate, <group>.<heads hash>",
"type": "string"
},
"input": {
@@ -178,6 +178,72 @@
],
"type": "object"
}
},
{
"name": "pull-waits",
"optional": true,
"description": "The failed pulls this machine's engine waits on a store's holder for (design 51 *What a pull meets in the swap*): per module, the image, the seat it came through and that seat's holder, when the pull began, how many settled events of that holder it heard and the last, and its last retry and what started it. Read-only. Answered by this machine's engine alone.",
"input": {
"type": "object",
"properties": {}
},
"answer": {
"type": "object",
"required": [
"waits"
],
"properties": {
"waits": {
"type": "array",
"description": "every failed pull waiting on a holder",
"items": {
"type": "object",
"required": [
"module",
"image"
],
"properties": {
"module": {
"type": "string",
"description": "the module whose apply failed"
},
"image": {
"type": "string",
"description": "the image whose pull failed"
},
"seat": {
"type": "string",
"description": "the seat the image came through"
},
"holder": {
"type": "string",
"description": "that seat's holder, whose settled the retry waits on"
},
"pull-began": {
"type": "string",
"description": "when the failed pull began, RFC 3339"
},
"settled-count": {
"type": "integer",
"description": "the settled events of the holder heard since the engine started"
},
"settled-last": {
"type": "string",
"description": "when the last was heard, RFC 3339"
},
"retry-last": {
"type": "string",
"description": "when it was last tried again, RFC 3339"
},
"retry-trigger": {
"type": "string",
"description": "what started that retry: settled, or the engine's start"
}
}
}
}
}
}
}
],
"events": [
+66
View File
@@ -6581,6 +6581,72 @@ export const list: readonly Seat[] = [
},
"name": "compose-candidate",
"optional": true
},
{
"description": "The failed pulls this machine's engine waits on a store's holder for (design 51 *What a pull meets in the swap*): per module, the image, the seat it came through and that seat's holder, when the pull began, how many settled events of that holder it heard and the last, and its last retry and what started it. Read-only. Answered by this machine's engine alone.",
"input": {
"properties": {},
"type": "object"
},
"name": "pull-waits",
"optional": true,
"output": {
"properties": {
"waits": {
"description": "every failed pull waiting on a holder",
"items": {
"properties": {
"holder": {
"description": "that seat's holder, whose settled the retry waits on",
"type": "string"
},
"image": {
"description": "the image whose pull failed",
"type": "string"
},
"module": {
"description": "the module whose apply failed",
"type": "string"
},
"pull-began": {
"description": "when the failed pull began, RFC 3339",
"type": "string"
},
"retry-last": {
"description": "when it was last tried again, RFC 3339",
"type": "string"
},
"retry-trigger": {
"description": "what started that retry: settled, or the engine's start",
"type": "string"
},
"seat": {
"description": "the seat the image came through",
"type": "string"
},
"settled-count": {
"description": "the settled events of the holder heard since the engine started",
"type": "integer"
},
"settled-last": {
"description": "when the last was heard, RFC 3339",
"type": "string"
}
},
"required": [
"module",
"image"
],
"type": "object"
},
"type": "array"
}
},
"required": [
"waits"
],
"type": "object"
}
}
]
},