diff --git a/cmd/mesh-controller/bus_waits.go b/cmd/mesh-controller/bus_waits.go index 5355066d..38f9f214 100644 --- a/cmd/mesh-controller/bus_waits.go +++ b/cmd/mesh-controller/bus_waits.go @@ -128,8 +128,9 @@ func (b busFacts) heldByTheBus() map[string]bool { return out } -// busUpgradeVerb is the verb that ends the wait, as the summary names it. -const busUpgradeVerb = "`mesh-controller.bus upgrade --why … --reversible|--irreversible`" +// busUpgradeVerb is the call that ends the wait, as the summary names it: through the mesh MCP server, with +// why, saying whether the new version can be undone ("reversible": "true") or not ("irreversible": "true"). +const busUpgradeVerb = "`mesh_call mesh-controller.bus {\"upgrade\": \"true\", \"why\": \"…\", \"reversible\" or \"irreversible\": \"true\"}`" // watchBusWaits is S17: a send held for the bus's planned step, said at once to the operator. func watchBusWaits(f *signalFacts) []conditions.Observation { diff --git a/cmd/mesh-controller/bus_waits_test.go b/cmd/mesh-controller/bus_waits_test.go index af568494..2a462b21 100644 --- a/cmd/mesh-controller/bus_waits_test.go +++ b/cmd/mesh-controller/bus_waits_test.go @@ -112,8 +112,8 @@ func TestASendHeldForTheBusStepIsSaidAtOnceAndNotAsLateness(t *testing.T) { if o.Key() != "bus.nats.step-waiting" || o.Kind != kindBusStepWaiting || o.Resolver != conditions.ResolverOperator { t.Fatalf("raised %s (%s), resolver %q", o.Key(), o.Kind, o.Resolver) } - for _, want := range []string{"anchor", "mesh-host", "88135ad0", "32307bd1", "mesh-controller.bus upgrade --why", - "--reversible", "--irreversible", "2026-10-08T18:29:00Z", "plan-1"} { + for _, want := range []string{"anchor", "mesh-host", "88135ad0", "32307bd1", "mesh_call mesh-controller.bus", + `"upgrade": "true"`, `"reversible"`, `"irreversible"`, "2026-10-08T18:29:00Z", "plan-1"} { if !strings.Contains(o.Summary, want) { t.Errorf("its summary does not say %q: %s", want, o.Summary) } diff --git a/cmd/mesh-controller/changeplan.go b/cmd/mesh-controller/changeplan.go index a5a9ce03..7a983c97 100644 --- a/cmd/mesh-controller/changeplan.go +++ b/cmd/mesh-controller/changeplan.go @@ -55,7 +55,8 @@ func changePlanOf(repository, base, head string, r mergeReach, entries []invento // Said before the merge (novox/hq issue 336): a new bus build holds every send to the bus's machine // until a person takes the step, so merging it is a promise to take it. p.Steps = append(p.Steps, fmt.Sprintf("%s: %s is never sent by an ordinary send, and until %s runs, "+ - "nothing else is sent to %s either", busUpgradeNeeded, name, busUpgradeVerb, strings.Join(e.On, ", "))) + "nothing else is sent to %s either — unless the new build turns out the same as the one running there "+ + "(issue 280)", busUpgradeNeeded, name, busUpgradeVerb, strings.Join(e.On, ", "))) case name == "nats" || catalogue.ProvidesBus(e.Manifest): p.Steps = append(p.Steps, "a planned bus step: the bus is upgraded by `bus upgrade`, never by an ordinary send") case waits && len(e.On) > 0: diff --git a/cmd/mesh-controller/changeplan_test.go b/cmd/mesh-controller/changeplan_test.go index 2b8371ca..599cb20e 100644 --- a/cmd/mesh-controller/changeplan_test.go +++ b/cmd/mesh-controller/changeplan_test.go @@ -61,7 +61,7 @@ func TestAChangePlanSaysWhatEachMachineReceives(t *testing.T) { // Said before the merge (novox/hq issue 336): merging it holds every send to the bus's machine until a // person runs the bus's step, and the verb that does. for _, want := range []string{"merging this needs a person's bus upgrade", "nothing else is sent to anchor", - "`mesh-controller.bus upgrade --why … --reversible|--irreversible`", "photos waits for a person", + "mesh_call mesh-controller.bus", "the same as the one running there", "photos waits for a person", "nats provides mesh-bus"} { if !strings.Contains(text, want) { t.Errorf("the steps do not say %q:\n%s", want, text)