From 4afce1aac809bdaff0a94b0a8348a0f4f23dda34 Mon Sep 17 00:00:00 2001 From: jochen Date: Wed, 4 Nov 2026 13:52:54 +0100 Subject: [PATCH] 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 --- go/seats/nodeengine/contract.go | 35 +---------------- go/seats/seats.go | 3 -- seats/node-engine/seat.json | 66 -------------------------------- ts/seats/nodeengine/src/index.ts | 32 ---------------- ts/src/seats.ts | 66 -------------------------------- 5 files changed, 1 insertion(+), 201 deletions(-) diff --git a/go/seats/nodeengine/contract.go b/go/seats/nodeengine/contract.go index 74daf78..200524c 100644 --- a/go/seats/nodeengine/contract.go +++ b/go/seats/nodeengine/contract.go @@ -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 { } diff --git a/go/seats/seats.go b/go/seats/seats.go index ab7d3c8..2eb7cbb 100644 --- a/go/seats/seats.go +++ b/go/seats/seats.go @@ -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, .", "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"}}, diff --git a/seats/node-engine/seat.json b/seats/node-engine/seat.json index 229e220..dfcaeb8 100644 --- a/seats/node-engine/seat.json +++ b/seats/node-engine/seat.json @@ -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, diff --git a/ts/seats/nodeengine/src/index.ts b/ts/seats/nodeengine/src/index.ts index 8c0f71e..d37717b 100644 --- a/ts/seats/nodeengine/src/index.ts +++ b/ts/seats/nodeengine/src/index.ts @@ -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 { } diff --git a/ts/src/seats.ts b/ts/src/seats.ts index 2d5e4b0..13ff8a5 100644 --- a/ts/src/seats.ts +++ b/ts/src/seats.ts @@ -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": {