A machine makes its tunnel key first and joins through the tunnel (hq ADR 0169) #52

Merged
mesh-admin merged 5 commits from feat/a-machine-joins-through-the-tunnel into main 2026-10-08 08:24:16 +00:00
Contributor

The node-engine's side of novox/hq ADR 0169. Merge second, after novox/mesh-controller#132 (same branch name, one group).

  • nox-mesh-host key: makes the machine's tunnel key, or reads the one made, and prints the public half for the token to be issued for.
  • enrol with a token that carries a tunnel: takes that key and refuses another, writes mesh0 with the hub as its one peer, starts it, waits for the hub's handshake (and says so in the tunnel's words when there is none), then dials the bus over it.
  • The installer places the controller's composed bus accounts beside the bus it raised, before and after the enrolment (hq issue 146, fault 5).

Rebased onto main (109 commits behind; no conflicts). Re-tested against the current node-engine: the rebase did not pass as the review expected — go vet refused internal/bootstrap/enrol.go (the enrolment's timeout context could leak, since the account placement returned between making it and cancelling it). Fixed by placing the accounts before the wait begins. Words: the added texts say controller, per the glossary.

Tests: sh merge-check.sh (race detector on): pass.

Lab: mesh-lab's joins-through-the-tunnel bed (novox/mesh-lab, same branch) ran this host: the joiner made its key, enrolled through the tunnel with the bus's port closed to its own address, and shook hands with the hub. Pass.

The node-engine's side of novox/hq ADR 0169. **Merge second**, after novox/mesh-controller#132 (same branch name, one group). - `nox-mesh-host key`: makes the machine's tunnel key, or reads the one made, and prints the public half for the token to be issued for. - `enrol` with a token that carries a tunnel: takes that key and refuses another, writes `mesh0` with the hub as its one peer, starts it, waits for the hub's handshake (and says so in the tunnel's words when there is none), then dials the bus over it. - The installer places the controller's composed bus accounts beside the bus it raised, before and after the enrolment (hq issue 146, fault 5). **Rebased onto main** (109 commits behind; no conflicts). Re-tested against the current node-engine: the rebase did **not** pass as the review expected — `go vet` refused `internal/bootstrap/enrol.go` (the enrolment's timeout context could leak, since the account placement returned between making it and cancelling it). Fixed by placing the accounts before the wait begins. Words: the added texts say *controller*, per the glossary. **Tests:** `sh merge-check.sh` (race detector on): pass. **Lab:** mesh-lab's `joins-through-the-tunnel` bed (novox/mesh-lab, same branch) ran this host: the joiner made its key, enrolled through the tunnel with the bus's port closed to its own address, and shook hands with the hub. Pass.
mesh-admin added 5 commits 2026-10-07 23:56:46 +00:00
nox-mesh-host key makes the tunnel key, or reads the one made, and
prints its public half for the token to be issued for. enrol with a
token that carries a tunnel takes that key, refuses another, writes
mesh0 with the hub as its one peer and starts it, then reaches the bus
over it (novox/hq ADR 0169). Tokens without a tunnel enrol as before.
At genesis the bus's users reach it in no declaration, because the
machine running it has not enrolled. The installer, which raised the
bus from its bundle, places the control plane's composed list beside it
and makes it re-read it: before the machine enrols, for the token's
account, and after, for the node's own (novox/hq issue 146).
Issuing the token sends the hub its new peer, and the hub applies it on
its own time; a bus dialled before then timed out naming the bus. The
first tunnel now waits for a handshake with the hub, and says so in the
tunnel's words when there is none (novox/hq ADR 0169).
The installer placed them between making the enrolment's deadline and
using it, so a failure returned without cancelling it, and go vet refused
the package.
Say controller in the installer's and the token's words, as the glossary does
mesh/delivery delivered
mesh/merge-gate pass: builds mesh-host → ace, g14, novox, shanks; no bus step; every machine composes with the change as it did without (4 of 4 compose)
mesh/repo-check pass: its merge-check.sh passed
mesh/delivery-group group feat/a-machine-joins-through-the-tunnel merged: every member is merged
86cbebd10f
Author
Contributor

Delivery novox/mesh-host@86cbebd10f8a — delivered since 2026-10-08T08:28:11Z

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

  • tier 0: mesh-host
  • ace: receives mesh-host
  • g14: receives mesh-host
  • novox: receives mesh-host
  • shanks: receives mesh-host

Group feat/a-machine-joins-through-the-tunnel, in order: novox/mesh-lab@e80a4b1642

Machines

  • mesh-host on ace: passed — healthy 3 times over 2m19s
  • mesh-host on the rest running it: sent

Transitions

  • 2026-10-07 23:57 (new) → proposed (announced): novox/mesh-host#52's head announced
  • 2026-10-07 23:59 proposed → checked (checked): the verdict names this commit
  • 2026-10-07 23:59 checked → ready (accepted): the gate passed or warned, and the repository's own check did not fail
  • 2026-10-08 08:24 ready → published (merged): on the trunk its modules follow: merged there, and its walk opened — or nothing for a walk to move
  • 2026-10-08 08:24 published → delivering (go): its walk started: let go by this owner in its group's order, by a person, or on the controller's own path
  • 2026-10-08 08:28 delivering → delivered (done): its walk is done: every machine of its deploy plan passed, or was left as its policy says

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

<!-- mesh-delivery:view --> **Delivery** `novox/mesh-host@86cbebd10f8a` — **delivered** since 2026-10-08T08:28:11Z **Delivery plan** — builds mesh-host → ace, g14, novox, shanks; no bus step - tier 0: mesh-host - ace: receives mesh-host - g14: receives mesh-host - novox: receives mesh-host - shanks: receives mesh-host **Group** `feat/a-machine-joins-through-the-tunnel`, in order: novox/mesh-lab@e80a4b1642bf - novox/mesh-controller@8bbfdb53db2b before novox/mesh-host@86cbebd10f8a: built by - novox/mesh-host@86cbebd10f8a before novox/mesh-controller@8bbfdb53db2b: engine before controller **Machines** - mesh-host on ace: passed — healthy 3 times over 2m19s - mesh-host on the rest running it: sent **Transitions** - 2026-10-07 23:57 (new) → proposed (announced): novox/mesh-host#52's head announced - 2026-10-07 23:59 proposed → checked (checked): the verdict names this commit - 2026-10-07 23:59 checked → ready (accepted): the gate passed or warned, and the repository's own check did not fail - 2026-10-08 08:24 ready → published (merged): on the trunk its modules follow: merged there, and its walk opened — or nothing for a walk to move - 2026-10-08 08:24 published → delivering (go): its walk started: let go by this owner in its group's order, by a person, or on the controller's own path - 2026-10-08 08:28 delivering → delivered (done): its walk is done: every machine of its deploy plan passed, or was left as its policy says The commit's note under `refs/notes/mesh-plan` keeps every transition: `git log --notes=mesh-plan`.
Author
Contributor

Merge check at 86cbebd1

  • mesh/merge-gate: PASS — every machine composes with the change as it did without (4 of 4 compose) (modules: mesh-host)
  • mesh/repo-check: PASS — its merge-check.sh passed

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

  • tier 0: mesh-host
  • ace: receives mesh-host
  • g14: receives mesh-host
  • novox: receives mesh-host
  • shanks: receives mesh-host

Run by the build seat on g14 as build-1791417425560348155 (builds --log build-1791417425560348155).

--- the gate: mesh-host
mesh-host: ok
long-running resources without health: 0
1 manifest(s) checked. Judged against the seats this binary carries; a claim on one of the mesh's own seats is judged fully at registration, and a seat declared by a module not given here reads as unknown. Identities judged on a 6-character machine name, against the bounds of the providers given here
judging 0 module(s) changed against 4 machine(s), as the snapshot of 2026-10-07T23:44:12Z says they run
composing every machine as the mesh is
the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued
the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued
composing every machine with the change
the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued
the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued
merge gate: PASS — every machine composes with the change as it did without (4 of 4 compose)
judged by controller development build against the facts of 2026-10-07T23:44:12Z

machines:
  - a machine (f35): composes
  - holds mesh-dns-resolver (idt): composes
  - holds git, holds mesh-artifact-store, holds mesh-broker, holds mesh-catalog, holds mesh-delivery, holds mesh-dns-resolver, holds mesh-store, holds mesh-vault, holds npm-package-registry, the control node, the hub (ygcyr): composes
  - a machine (yvbpsm): composes

a merge would rebuild 1 module(s) in 1 tier(s): mesh-host
--- its merge-check.sh (go toolchain)
ok  	github.com/novox/mesh-host/cmd/mesh-bootstrap	1.015s
ok  	github.com/novox/mesh-host/cmd/mesh-host	5.263s
ok  	github.com/novox/mesh-host/examples	1.019s
ok  	github.com/novox/mesh-host/internal/apply	2.163s
ok  	github.com/novox/mesh-host/internal/bootstrap	1.311s
ok  	github.com/novox/mesh-host/internal/bundle	1.020s
ok  	github.com/novox/mesh-host/internal/declaration	1.044s
ok  	github.com/novox/mesh-host/internal/firewall	1.679s
ok  	github.com/novox/mesh-host/internal/identity	1.044s
ok  	github.com/novox/mesh-host/internal/image	1.020s
ok  	github.com/novox/mesh-host/internal/inventory	1.020s
ok  	github.com/novox/mesh-host/internal/link	10.389s
ok  	github.com/novox/mesh-host/internal/liveness	2.039s
ok  	github.com/novox/mesh-host/internal/network	1.031s
ok  	github.com/novox/mesh-host/internal/outward	1.023s
ok  	github.com/novox/mesh-host/internal/profile	1.497s
ok  	github.com/novox/mesh-host/internal/reachable	1.021s
ok  	github.com/novox/mesh-host/internal/store	1.093s
ok  	github.com/novox/mesh-host/internal/system	1.015s
ok  	github.com/novox/mesh-host/internal/tunnel	1.020s
ok  	github.com/novox/mesh-host/internal/upgrade	1.038s
ok  	github.com/novox/mesh-host/internal/witness	1.446s
ok  	github.com/novox/mesh-host/packaging	1.012s
ok  	github.com/novox/mesh-host/validate	1.013s
**Merge check** at `86cbebd1` - `mesh/merge-gate`: **PASS** — every machine composes with the change as it did without (4 of 4 compose) (modules: mesh-host) - `mesh/repo-check`: **PASS** — its merge-check.sh passed **Delivery plan** — builds mesh-host → ace, g14, novox, shanks; no bus step - tier 0: mesh-host - ace: receives mesh-host - g14: receives mesh-host - novox: receives mesh-host - shanks: receives mesh-host Run by the build seat on g14 as `build-1791417425560348155` (`builds --log build-1791417425560348155`). ``` --- the gate: mesh-host mesh-host: ok long-running resources without health: 0 1 manifest(s) checked. Judged against the seats this binary carries; a claim on one of the mesh's own seats is judged fully at registration, and a seat declared by a module not given here reads as unknown. Identities judged on a 6-character machine name, against the bounds of the providers given here judging 0 module(s) changed against 4 machine(s), as the snapshot of 2026-10-07T23:44:12Z says they run composing every machine as the mesh is the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued composing every machine with the change the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued merge gate: PASS — every machine composes with the change as it did without (4 of 4 compose) judged by controller development build against the facts of 2026-10-07T23:44:12Z machines: - a machine (f35): composes - holds mesh-dns-resolver (idt): composes - holds git, holds mesh-artifact-store, holds mesh-broker, holds mesh-catalog, holds mesh-delivery, holds mesh-dns-resolver, holds mesh-store, holds mesh-vault, holds npm-package-registry, the control node, the hub (ygcyr): composes - a machine (yvbpsm): composes a merge would rebuild 1 module(s) in 1 tier(s): mesh-host --- its merge-check.sh (go toolchain) ok github.com/novox/mesh-host/cmd/mesh-bootstrap 1.015s ok github.com/novox/mesh-host/cmd/mesh-host 5.263s ok github.com/novox/mesh-host/examples 1.019s ok github.com/novox/mesh-host/internal/apply 2.163s ok github.com/novox/mesh-host/internal/bootstrap 1.311s ok github.com/novox/mesh-host/internal/bundle 1.020s ok github.com/novox/mesh-host/internal/declaration 1.044s ok github.com/novox/mesh-host/internal/firewall 1.679s ok github.com/novox/mesh-host/internal/identity 1.044s ok github.com/novox/mesh-host/internal/image 1.020s ok github.com/novox/mesh-host/internal/inventory 1.020s ok github.com/novox/mesh-host/internal/link 10.389s ok github.com/novox/mesh-host/internal/liveness 2.039s ok github.com/novox/mesh-host/internal/network 1.031s ok github.com/novox/mesh-host/internal/outward 1.023s ok github.com/novox/mesh-host/internal/profile 1.497s ok github.com/novox/mesh-host/internal/reachable 1.021s ok github.com/novox/mesh-host/internal/store 1.093s ok github.com/novox/mesh-host/internal/system 1.015s ok github.com/novox/mesh-host/internal/tunnel 1.020s ok github.com/novox/mesh-host/internal/upgrade 1.038s ok github.com/novox/mesh-host/internal/witness 1.446s ok github.com/novox/mesh-host/packaging 1.012s ok github.com/novox/mesh-host/validate 1.013s ```
mesh-admin merged commit f863adb741 into main 2026-10-08 08:24:16 +00:00
mesh-admin deleted branch feat/a-machine-joins-through-the-tunnel 2026-10-08 08:24:17 +00:00
Sign in to join this conversation.
No Reviewers
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: novox/mesh-host#52