Drop node-engine's optional verb pull-waits: no record gives the seat that verb

The lead's ruling (14:2x): the pull waits ENG-9 shows are carried in the engine's have, read through node_haves, as
ENG-9 allows, so the seat serves no verb of its own for them. Regenerated; seatgen -check finds nothing out of step.

Claude-Session: https://claude.ai/code/session_01JG73KJNrH5EgFXMKKYSrig
This commit is contained in:
2026-11-04 13:52:54 +01:00
parent 22abe5c955
commit 4afce1aac8
5 changed files with 1 additions and 201 deletions
+1 -34
View File
@@ -17,7 +17,6 @@ const (
VerbComposition = "composition"
VerbCompose = "compose"
VerbComposeCandidate = "compose-candidate"
VerbPullWaits = "pull-waits"
VerbManifestReads = "manifest-reads"
)
@@ -30,7 +29,7 @@ const (
// Verbs is every verb the seat serves, in its definition's order: a new copy each call.
func Verbs() []string {
return []string{VerbHandOver, VerbAccessAct, VerbJudgeDirectories, VerbSetuidSearch, VerbRootFree, VerbActs, VerbPackages, VerbComposition, VerbCompose, VerbComposeCandidate, VerbPullWaits, VerbManifestReads}
return []string{VerbHandOver, VerbAccessAct, VerbJudgeDirectories, VerbSetuidSearch, VerbRootFree, VerbActs, VerbPackages, VerbComposition, VerbCompose, VerbComposeCandidate, VerbManifestReads}
}
// Events is every event published on the seat's subject: a new copy each call.
@@ -493,38 +492,6 @@ type ComposeCandidateAnswer struct {
Verdict string `json:"verdict"`
}
// PullWaitsInput is what pull-waits takes.
type PullWaitsInput struct {
}
// PullWaitsAnswerWaitsItem is a type of the contract.
type PullWaitsAnswerWaitsItem struct {
// that seat's holder, whose settled the retry waits on
Holder string `json:"holder,omitempty"`
// the image whose pull failed
Image string `json:"image"`
// the module whose apply failed
Module string `json:"module"`
// when the failed pull began, RFC 3339
PullBegan string `json:"pull-began,omitempty"`
// when it was last tried again, RFC 3339
RetryLast string `json:"retry-last,omitempty"`
// what started that retry: settled, or the engine's start
RetryTrigger string `json:"retry-trigger,omitempty"`
// the seat the image came through
Seat string `json:"seat,omitempty"`
// the settled events of the holder heard since the engine started
SettledCount int64 `json:"settled-count,omitempty"`
// when the last was heard, RFC 3339
SettledLast string `json:"settled-last,omitempty"`
}
// PullWaitsAnswer is what pull-waits answers.
type PullWaitsAnswer struct {
// every failed pull waiting on a holder
Waits []PullWaitsAnswerWaitsItem `json:"waits"`
}
// ManifestReadsInput is what manifest-reads takes.
type ManifestReadsInput struct {
}
-3
View File
@@ -694,9 +694,6 @@ func List() []Seat {
{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": "also answer the composition input the candidate was composed from, for the sandbox path", "type": "boolean"}}, "required": []string{"candidate"}, "type": "object"},
Output: map[string]any{"properties": map[string]any{"candidate": map[string]any{"description": "the candidate's key", "type": "string"}, "input": map[string]any{"description": "when asked: the composition input it composed from", "type": "object"}, "modules": map[string]any{"description": "every module placed on the node, sorted by name", "items": map[string]any{"description": "one module's composition with the candidate", "properties": map[string]any{"changed": map[string]any{"description": "the candidate changes it from the one composed without it", "type": "boolean"}, "digest": map[string]any{"description": "the composition's digest when composed", "type": "string"}, "fp": map[string]any{"description": "the fingerprint it was composed at", "type": "string"}, "module": map[string]any{"description": "the module, node for the node's own composition", "type": "string"}, "state": map[string]any{"description": "composed (digest set), refused by the candidate, or held without it too (words set)", "enum": []string{"composed", "refused", "held"}, "type": "string"}, "words": map[string]any{"description": "why, for a refused or held one", "type": "string"}}, "required": []string{"module", "state"}, "type": "object"}, "type": "array"}, "node": map[string]any{"description": "the node", "type": "string"}, "own": map[string]any{"description": "one module's composition with the candidate", "properties": map[string]any{"changed": map[string]any{"description": "the candidate changes it from the one composed without it", "type": "boolean"}, "digest": map[string]any{"description": "the composition's digest when composed", "type": "string"}, "fp": map[string]any{"description": "the fingerprint it was composed at", "type": "string"}, "module": map[string]any{"description": "the module, node for the node's own composition", "type": "string"}, "state": map[string]any{"description": "composed (digest set), refused by the candidate, or held without it too (words set)", "enum": []string{"composed", "refused", "held"}, "type": "string"}, "words": map[string]any{"description": "why, for a refused or held one", "type": "string"}}, "required": []string{"module", "state"}, "type": "object"}, "refused": map[string]any{"description": "why the node could not compose with the candidate at all", "type": "string"}, "took": map[string]any{"description": "how long the engine took, in milliseconds", "type": "integer"}, "v": map[string]any{"description": "the layout's version", "type": "integer"}, "verdict": map[string]any{"description": "the node's verdict (ADR 0593 §7, §9)", "enum": []string{"composed", "refused", "unready", "not-judged"}, "type": "string"}}, "required": []string{"v", "node", "candidate", "verdict", "modules", "own", "took"}, "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: "manifest-reads", Description: "The reader capabilities this machine's engine states (manifest words, forms and seat names it reads, novox/hq ADR 0618 §3) and when it last stated them. An engine built before it said them states none, which a reader takes as the baseline. 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{"description": "what this machine's engine reads of a manifest (ADR 0618 §3)", "properties": map[string]any{"manifest-reads": map[string]any{"description": "the reader capabilities its engine states: the manifest words, forms and seat names it reads; empty for an engine built before it said them, read as the baseline", "items": map[string]any{"minLength": float64(1), "type": "string"}, "type": "array"}, "node": map[string]any{"description": "the node", "type": "string"}, "stated-at": map[string]any{"description": "when the engine last stated them, RFC 3339", "type": "string"}, "v": map[string]any{"description": "the layout's version", "type": "integer"}}, "required": []string{"v", "node", "stated-at"}, "type": "object"}},
-66
View File
@@ -634,72 +634,6 @@
]
}
},
{
"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"
}
}
}
}
}
}
},
{
"name": "manifest-reads",
"optional": true,
-32
View File
@@ -15,7 +15,6 @@ export const verbs = {
composition: "composition",
compose: "compose",
composeCandidate: "compose-candidate",
pullWaits: "pull-waits",
manifestReads: "manifest-reads",
} as const;
@@ -478,37 +477,6 @@ export interface ComposeCandidateAnswer {
"verdict": "composed" | "refused" | "unready" | "not-judged";
}
/** is what pull-waits takes. */
export interface PullWaitsInput {
}
export interface PullWaitsAnswerWaitsItem {
/** that seat's holder, whose settled the retry waits on */
"holder"?: string;
/** the image whose pull failed */
"image": string;
/** the module whose apply failed */
"module": string;
/** when the failed pull began, RFC 3339 */
"pull-began"?: string;
/** when it was last tried again, RFC 3339 */
"retry-last"?: string;
/** what started that retry: settled, or the engine's start */
"retry-trigger"?: string;
/** the seat the image came through */
"seat"?: string;
/** the settled events of the holder heard since the engine started */
"settled-count"?: number;
/** when the last was heard, RFC 3339 */
"settled-last"?: string;
}
/** is what pull-waits answers. */
export interface PullWaitsAnswer {
/** every failed pull waiting on a holder */
"waits": PullWaitsAnswerWaitsItem[];
}
/** is what manifest-reads takes. */
export interface ManifestReadsInput {
}
-66
View File
@@ -7584,72 +7584,6 @@ export const list: readonly Seat[] = [
"type": "object"
}
},
{
"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"
}
},
{
"description": "The reader capabilities this machine's engine states (manifest words, forms and seat names it reads, novox/hq ADR 0618 §3) and when it last stated them. An engine built before it said them states none, which a reader takes as the baseline. Read-only. Answered by this machine's engine alone.",
"input": {