Console: keep a mesh seat's node argument, and refuse what a call would drop (hq issue 244) #14

Merged
mesh-admin merged 1 commits from fix/console-keeps-a-mesh-seats-node into main 2026-10-05 22:46:47 +00:00
Contributor

Root cause of hq issue 244. schemaWithoutNode took node out of every tool's schema, and mesh_call deleted node from every call's arguments — right for an address that names the machine (<node>/<seat>.<verb>, <node>/<module>.<tool>), wrong for a seat held once for the mesh, where node is the verb's own argument. So the controller's verbs were described and called without the machine they act on:

  • push → {}: mesh_call mesh-controller.push {"node": "…"} arrived empty and ran as push --behind — every machine behind was pushed by someone who meant one.
  • plan / node → {}, and plan needs "node" whatever was sent.
  • assign, unassign, pin, unpin, issue, settings, rotate, pause, resume → no node.

(The controller's records — mesh-controller.tools — always carried node; only the console lost it.)

Fix

  • schemaAsPassed: node is taken out only where the address names the machine.
  • argumentsAsSent: where the address names the machine, a node naming the same one is dropped as redundant, a different one is refused; where it does not, node goes to the tool. A seat verb's call carrying an argument its schema does not declare is refused, naming it — never sent to be passed over.

Paired with novox/mesh-controller (the verb side of the same safety net: undeclared/unused arguments refused, push without a machine says it is the whole mesh).

Tests

  • New TestAMeshSeatsNodeIsItsOwnArgument (no bus needed).
  • gofmt -l, go vet ./..., go test ./... clean. The bus-backed console tests (MESH_TEST_NATS) fail identically on main against a bare nats -js container here, so they were not a usable signal locally — worth running in the usual lab before merging.
**Root cause of hq issue 244.** `schemaWithoutNode` took `node` out of every tool's schema, and `mesh_call` deleted `node` from every call's arguments — right for an address that names the machine (`<node>/<seat>.<verb>`, `<node>/<module>.<tool>`), wrong for a seat held once for the mesh, where `node` is the verb's own argument. So the controller's verbs were described and called without the machine they act on: - `push` → `{}`: `mesh_call mesh-controller.push {"node": "…"}` arrived empty and ran as `push --behind` — every machine behind was pushed by someone who meant one. - `plan` / `node` → `{}`, and `plan needs "node"` whatever was sent. - `assign`, `unassign`, `pin`, `unpin`, `issue`, `settings`, `rotate`, `pause`, `resume` → no node. (The controller's records — `mesh-controller.tools` — always carried `node`; only the console lost it.) ## Fix - `schemaAsPassed`: `node` is taken out only where the address names the machine. - `argumentsAsSent`: where the address names the machine, a `node` naming the same one is dropped as redundant, a different one is **refused**; where it does not, `node` goes to the tool. A seat verb's call carrying an argument its schema does not declare is **refused, naming it** — never sent to be passed over. Paired with novox/mesh-controller (the verb side of the same safety net: undeclared/unused arguments refused, push without a machine says it is the whole mesh). ## Tests - New `TestAMeshSeatsNodeIsItsOwnArgument` (no bus needed). - `gofmt -l`, `go vet ./...`, `go test ./...` clean. The bus-backed console tests (`MESH_TEST_NATS`) fail identically on `main` against a bare `nats -js` container here, so they were not a usable signal locally — worth running in the usual lab before merging.
mesh-admin added 1 commit 2026-10-05 22:37:50 +00:00
The console took node out of every schema and every call, so the
controller's push, plan, assign, pin and settings were described without
the machine and called without it: a push naming one machine ran as a
push of every machine behind (hq issue 244). node is now taken out only
where the address names the machine, a different machine there is
refused, and an argument a seat's verb does not declare is refused.
mesh-admin merged commit 9730bd89c3 into main 2026-10-05 22:46:47 +00:00
mesh-admin deleted branch fix/console-keeps-a-mesh-seats-node 2026-10-05 22:46:48 +00:00
Author
Contributor

Delivery novox/mesh-tools@9730bd89c3e4 — held since 2026-10-06T23:05:28Z

Held for a person: merged without a passing check: only a person decides that it goes on — mesh-delivery.release with why lets it go on.

Delivery plan — builds mesh-tools, node-tools → ace, g14, novox, shanks; no bus step

  • tier 0: mesh-tools, node-tools
  • ace: receives node-tools
  • g14: receives node-tools
  • novox: receives node-tools
  • shanks: receives node-tools
  • node-tools provides mcp-endpoint: its consumers are sent again after it

Transitions

  • 2026-10-06 23:05 (new) → proposed (announced): novox/mesh-tools#14 merged; its head was not heard by this owner, so it is made from the forge's word
  • 2026-10-06 23:05 proposed → held (merged-unchecked): merged without a passing check — a verdict known with it is taken first: only a person decides that it goes on

The commit's note under refs/notes/mesh-plan keeps every transition: git log --notes=mesh-plan.

<!-- mesh-delivery:view --> **Delivery** `novox/mesh-tools@9730bd89c3e4` — **held** since 2026-10-06T23:05:28Z Held for a person: merged without a passing check: only a person decides that it goes on — `mesh-delivery.release` with why lets it go on. **Delivery plan** — builds mesh-tools, node-tools → ace, g14, novox, shanks; no bus step - tier 0: mesh-tools, node-tools - ace: receives node-tools - g14: receives node-tools - novox: receives node-tools - shanks: receives node-tools - node-tools provides mcp-endpoint: its consumers are sent again after it **Transitions** - 2026-10-06 23:05 (new) → proposed (announced): novox/mesh-tools#14 merged; its head was not heard by this owner, so it is made from the forge's word - 2026-10-06 23:05 proposed → held (merged-unchecked): merged without a passing check — a verdict known with it is taken first: only a person decides that it goes on The commit's note under `refs/notes/mesh-plan` keeps every transition: `git log --notes=mesh-plan`.
Sign in to join this conversation.
No Reviewers
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: novox/mesh-tools#14