No seat and no compose verb for the put: the controller takes no change, so the assigner serves the put as its own tools from compositions the controller already writes (ADR 0546)

This commit is contained in:
2026-10-25 21:07:58 +01:00
parent 20a6dc4920
commit 2f6741b7f8
4 changed files with 3 additions and 59 deletions
-41
View File
@@ -1,41 +0,0 @@
package catalogue
// The assigner's seat (novox/hq ADR 0546): putting a version of a module on a node is one verb. The module
// mesh-delivery-assigner, which writes every want, holds it once for the mesh and serves its verbs on its own process's
// credential; a put is a key of its own state, `mesh-delivery-assigner_puts`, so where it stands is read and watched there.
// AssignerSeat is the seat mesh-delivery-assigner holds.
const AssignerSeat = "mesh-delivery-assigner"
// assignerVerbs are the assigner seat's verbs: a put, its release, and the puts read (ADR 0546 clauses 1, 6 and 9).
func assignerVerbs() []Verb {
return []Verb{
{Name: "put", Description: "Put one version of a module on one machine (novox/hq ADR 0546): the build at that " +
"fingerprint, the module's bus accounts and grant there, its composition, then the machine's want naming " +
"it, held there until released when hold is true. A module whose moves a person takes (the bus, a module " +
"of policy record) is asked of the operator first, and the bus has its streams snapshotted after the yes. " +
"Answers step by step what was done, or what it waits on and why; the put goes on after the answer, and " +
"`puts` says where it stands.",
Input: schema(map[string]string{
"node": "the machine, where the module is assigned",
"module": "the module",
"version": "a fingerprint (src2: and 64 hex digits, or at least its first 12 hex digits), or newest",
"hold": "\"true\": the want stays at this version until released; \"false\" (the default): the rules move it again once it runs",
"why": "why, kept with the put and said in any ask",
}, []string{"node", "module", "version", "why"}, "hold")},
{Name: "release", Description: "End a put on one machine (novox/hq ADR 0546): its hold is taken away and the " +
"assigner's rules write the machine's want again from their next pass. Nothing changes on the machine " +
"until they move it.",
Input: schema(map[string]string{
"node": "the machine",
"module": "the module",
"why": "why, kept with the put",
}, []string{"node", "module", "why"})},
{Name: "puts", Description: "Every put and where it stands: its version, hold, why, each step with its time " +
"and words, and what it waits on. Narrowed by machine or module. Read-only.",
Input: schema(map[string]string{
"node": "one machine",
"module": "one module",
}, nil)},
}
}
-2
View File
@@ -243,8 +243,6 @@ var defaultSeats = append([]Seat{
// machine, and a group of them, recorded and ordered by its holder, which asks the controller for each act.
// What it says it says as its module (`mesh-delivery.transition`), through the runtime that launches it.
{Name: DeliverySeat, Scope: ScopeMesh, Serves: deliveryVerbs(), Decision: "novox/hq ADR 0239"},
// Putting a version of a module on a node is one verb, the assigner's, which writes every want (novox/hq ADR 0546).
{Name: AssignerSeat, Scope: ScopeMesh, Serves: assignerVerbs(), Decision: "novox/hq ADR 0546"},
// Deferred renames (novox/hq ADR 0121): these deliver a provision, so renaming them is a
// delivering-seat migration with a mesh-wide cascade if a holder stops resolving mid-flight.
// They keep their names until that migration is done deliberately, apart from the node-* pass.
+3 -3
View File
@@ -43,7 +43,7 @@ func TestTheSeatsAreAClosedSetAndEachNamesItsDecision(t *testing.T) {
delivered[s.Delivers] = s.Name
}
}
// Forty-seven with mesh-delivery-assigner (novox/hq ADR 0546); forty-six with the three build seats replacing node-build-agent and the retired mesh-build-machine (novox/hq
// Forty-six with the three build seats replacing node-build-agent and the retired mesh-build-machine (novox/hq
// ADR 0525 §2, §10); forty-five with node-files (novox/hq ADR 0394); forty-four again once node-reads goes.
// Forty-four with node-provisioner (novox/hq ADR 0349 clause 3); forty-three with mesh-provisioner (novox/hq ADR 0349 clause 3); forty-two with mesh-config (novox/hq ADR 0348 §9); forty-one with node-reads (novox/hq ADR 0310); forty with node-nfs-server and node-mounts (novox/hq ADR 0263); thirty-eight with node-resolver (novox/hq ADR 0247); thirty-seven with mesh-delivery (novox/hq ADR 0239); thirty-six since node-resolver-config retired
// into node-uplink (novox/hq ADR 0223); thirty-seven
@@ -56,8 +56,8 @@ func TestTheSeatsAreAClosedSetAndEachNamesItsDecision(t *testing.T) {
// node-container-runtime (ADR 0207); nineteen with node-environment and node-login-shell (ADR 0203,
// ADR 0204); seventeen with node-build-agent (ADR 0190). One fewer once the retired
// mesh-build-machine row goes, when no registered manifest claims it.
if len(Seats()) != 47 {
t.Errorf("the mesh defines %d seats rather than 47; the set is closed, so a change here is "+
if len(Seats()) != 46 {
t.Errorf("the mesh defines %d seats rather than 46; the set is closed, so a change here is "+
"a decision (novox/hq ADR 0110): %s", len(Seats()), seatNames())
}
}
-13
View File
@@ -248,19 +248,6 @@ var ControllerVerbs = []Verb{
"node": "the machine that runs the module",
"module": "the module's name",
}, []string{"node", "module"})},
// One module composed for one node at one fingerprint, on demand (novox/hq ADR 0546 clause 4): what the assigner's put
// asks when the composition or the grant it needs is not there. Optional until every controller serves it.
{Name: "compose", Description: "Compose one module for one machine at one fingerprint now, and answer it (novox/hq " +
"ADR 0546): the module's bus accounts on that machine that are not minted are issued and sealed (never one minted " +
"before), the bus's user list and the grants are written, then the composition is written into the machine's " +
"compositions with its digest and the judgement of the move to it. Answers the composition's key, digest and " +
"judgement, and whether the grant at that fingerprint names the machine's account. Under the lease only.",
Input: schema(map[string]string{
"node": "the machine",
"module": "the module, assigned to that machine",
"fp": "the fingerprint, src2: and 64 hex digits; the one the module is registered at when absent",
}, []string{"node", "module"}),
Optional: true},
{Name: "token", Description: "Refused through a verb since novox/hq ADR 0266: the one-time token a machine " +
"joins with is answered to its caller, and whoever may call a verb includes agents. Issue it at the " +
"controller's terminal: `mesh-controller token issue --new <name> --overlay-key <public half>`.",