nats: a WebSocket listener for a page in a browser, from the overlay only (hq research 036) #181
Closed
mesh-admin
wants to merge 1 commits from
feat/bus-websocket-listener into main
pull from: feat/bus-websocket-listener
merge into: :main
:main
:fix/47-G-start-2
:feat/47-G-join11
:fix/1966-gate-record-catalog
:pre/registry-milestone
:fix/1748-retake-and-resolver
:pin/sdk1
:fix/check-every-failure
:feat/l5-l7
:feat/l5-l7-a3
:feat/judge-once-pkgs
:fix/turn-handed-on-approve
:fix/checker-full-failure
:revert/774-l3
:fix/check-names-every-conflict
:fix/check-speed
:probe/1126-seed-10
:probe/1126-seed-9
:probe/1126-seed-8
:probe/1126-seed-7
:probe/1126-seed-6
:probe/1126-seed-5
:feat/1126-seed-4
:revert/1126-seed-2
:feat/774-vault-mints
:fix/1901-node-test-cause
:fix/1945-adopt-hashes
:fix/1945-vault-hashing
:feat/try-speed
:fix/1921-every-failure
:feat/r4g-finish-composer
:feat/r4g-finish-1935
:fix/1901
:fix/forge-requires-no-status
:feat/mail-list
:feat/modules-name-no-node
:fix/r4e-r2
:fix/r4e-k2
:fix/r4e-k1
:feat/r4e-leaf
:feat/r4e-buildmods
:feat/r4e-gate
:fix/1106-sdk-member-merges
:feat/r4c5-checker
:fix/xterm-config-defaults
:fix/1165-fill-retry
:feat/r4d-automx-go
:feat/r4d-n8n
:fix/1275-group-merges-whole-or-not
:fix/1129-no-drift-pass
:fix/270-nats-emits-bus-faults
:fix/claude-code-tips-preference
:fix/628-modules-declare-every-package-they-need
:fix/613-home-network-shares
:feat/bus-websocket-listener
:fix/340-tool-servers-only-from-the-terminal
:feat/the-store-collects-nightly-again
:feat/dbus-module
No Reviewers
No labels
Milestone
No items
No Milestone
Projects
Clear projects
No projects
Assignees
agent-ace
agent-g14
agent-novox
agent-shanks
jschoubben
mesh-tools
miel.truyen
nox-agent
Clear assignees
No Assignees
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: novox/mesh-catalog#181
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
hq research 036 (everything over NATS) names the gap: there is no WebSocket listener and no auth callout (G1). This is the smallest bus-side half of closing it, for the issue tracker's local view page; the controller's half is the read-only
viewuser (mesh-controller PRfeat/bus-view-principal). No hq record by the operator's word; code only.What changes (
modules/nats)server-confgains awebsocketblock:listen: 0.0.0.0:4223,no_tls: true,compression: true. The comment says whyno_tlsis acceptable: the port is reached across the overlay only, which is WireGuard — encrypted and authenticated by the peers' keys before anything is on the wire — and a browser cannot be made to trust the mesh's own certificate. The client port 4222 keeps its TLS; nothing of the mesh moves.listensgainsbus-websocket(4223/tcp, from: mesh): the machine's filter admits it from the overlay and nothing else, exactly as 4222 is published today. The container publishes4223:4223.cmd/nats-tools/websocket_test.go: the declared configuration parsed by nats-server itself (TLS paths and store pointed at the test's directories, a user list of its own beside it); the opening, the published port and the listener held to one port,no_tlsandcompressionheld on, the listener bound to every interface inside the container; a client connected overws://with a round trip; the client port still refusing a plain connection.The bus step. The bus module's policy is
record: a new build of it is never rolled out, and reaches the bus's machine only through the planned step a person starts —bus upgrade --why … --reversible(hq ADR 0236; the streams are snapshotted first). This is the same path #166 (natsin_force) takes. One restart carries both: this branch merges cleanly with #166's (git merge-tree: no conflict; different files), so once both are merged onebus upgradesends one build holding both. The listener is live on the bus's machine after that step, and not before.Reviewers' checklist
from: meshon the opening (the filter), published4223:4223like4222:4222; nothing is reachable off the overlay.no_tlsis said and justified in the configuration's own comment; TLS on 4222 is untouched.upgrade.policy: record(unchanged), so the merge gate plans it and sends nothing;bus upgradeis the one way.Checks.
MESH_GATE=<controller built from main 4d30b5d> MESH_CHECK_MODULES=nats sh merge-check.shpasses locally: words, agent-home, paths, every manifest throughmodule check(70 long-running resources without health, as kept),go test ./...of the module.Do not merge without review; the controller PR goes with it (the view user is what connects here).
Delivery
novox/mesh-catalog@e6d5ead50dfd— stopped since 2026-10-17T23:46:53ZDelivery plan — builds nats, sent nowhere; merging this needs a person's bus upgrade; 1 wait(s) for a person
mesh_call mesh-controller.bus {"upgrade": "true", "why": "…", "reversible" or "irreversible": "true"}runs, nothing else is sent to novox either — unless the new build turns out the same as the one running there (issue 280)Transitions
The commit's note under
refs/notes/mesh-plankeeps every transition:git log --notes=mesh-plan.Merge check at
e6d5ead5mesh/merge-gate: PASS — every machine composes with the change as it did without (4 of 4 compose) (modules: nats)mesh/repo-check: PASS — its merge-check.sh passed, each part in its toolchain: merge-check.sh (go), merge-check-typescript.sh (typescript)Delivery plan — builds nats, sent nowhere; merging this needs a person's bus upgrade; 1 wait(s) for a person
mesh_call mesh-controller.bus {"upgrade": "true", "why": "…", "reversible" or "irreversible": "true"}runs, nothing else is sent to novox either — unless the new build turns out the same as the one running there (issue 280)Run by the build seat on novox as
build-1791640894244056399(builds --log build-1791640894244056399).Merge check at
e6d5ead5Judged: head
e6d5ead50dfdmerged into trunkf076cadecedcmesh/merge-gate: FAIL — heade6d5ead50ddoes not merge cleanly into trunkf076cadece: in conflict modules/nats/module.json (modules: nats)mesh/repo-check: FAIL — heade6d5ead50ddoes not merge cleanly into trunkf076cadece: in conflict modules/nats/module.jsonDelivery plan — builds nats, sent nowhere; merging this needs a person's bus upgrade; 1 wait(s) for a person
mesh_call mesh-controller.bus {"upgrade": "true", "why": "…", "reversible" or "irreversible": "true"}runs, nothing else is sent to novox either — unless the new build turns out the same as the one running there (issue 280)Run by the build seat on ace as
build-1792268517127920779(builds --log build-1792268517127920779).Merge check at
e6d5ead5Judged: head
e6d5ead50dfdmerged into trunkad80048c22d8mesh/merge-gate: FAIL — heade6d5ead50ddoes not merge cleanly into trunkad80048c22: in conflict modules/nats/module.json (modules: nats)mesh/repo-check: FAIL — heade6d5ead50ddoes not merge cleanly into trunkad80048c22: in conflict modules/nats/module.jsonDelivery plan — builds nats, sent nowhere; merging this needs a person's bus upgrade; 1 wait(s) for a person
mesh_call mesh-controller.bus {"upgrade": "true", "why": "…", "reversible" or "irreversible": "true"}runs, nothing else is sent to novox either — unless the new build turns out the same as the one running there (issue 280)Run by the build seat on ace as
build-1792272975340054091(builds --log build-1792272975340054091).Merge check at
e6d5ead5Judged: head
e6d5ead50dfdmerged into trunk3395af96bc34mesh/merge-gate: FAIL — heade6d5ead50ddoes not merge cleanly into trunk3395af96bc: in conflict modules/nats/module.json (modules: nats)mesh/repo-check: FAIL — heade6d5ead50ddoes not merge cleanly into trunk3395af96bc: in conflict modules/nats/module.jsonDelivery plan — builds nats, sent nowhere; merging this needs a person's bus upgrade; 1 wait(s) for a person
mesh_call mesh-controller.bus {"upgrade": "true", "why": "…", "reversible" or "irreversible": "true"}runs, nothing else is sent to novox either — unless the new build turns out the same as the one running there (issue 280)Run by the build seat on shanks as
build-1792273742160090126(builds --log build-1792273742160090126).Merge check at
e6d5ead5Judged: head
e6d5ead50dfdmerged into trunk0c56f603059bmesh/merge-gate: FAIL — heade6d5ead50ddoes not merge cleanly into trunk0c56f60305: in conflict modules/nats/module.json (modules: nats)mesh/repo-check: FAIL — heade6d5ead50ddoes not merge cleanly into trunk0c56f60305: in conflict modules/nats/module.jsonDelivery plan — builds nats, sent nowhere; merging this needs a person's bus upgrade; 1 wait(s) for a person
mesh_call mesh-controller.bus {"upgrade": "true", "why": "…", "reversible" or "irreversible": "true"}runs, nothing else is sent to novox either — unless the new build turns out the same as the one running there (issue 280)Run by the build seat on ace as
build-1792275426673975530(builds --log build-1792275426673975530).Merge check at
e6d5ead5Judged: head
e6d5ead50dfdmerged into trunk44e7002d3c84mesh/merge-gate: FAIL — heade6d5ead50ddoes not merge cleanly into trunk44e7002d3c: in conflict modules/nats/module.json (modules: nats)mesh/repo-check: FAIL — heade6d5ead50ddoes not merge cleanly into trunk44e7002d3c: in conflict modules/nats/module.jsonDelivery plan — builds nats, sent nowhere; merging this needs a person's bus upgrade; 1 wait(s) for a person
mesh_call mesh-controller.bus {"upgrade": "true", "why": "…", "reversible" or "irreversible": "true"}runs, nothing else is sent to novox either — unless the new build turns out the same as the one running there (issue 280)Run by the build seat on ace as
build-1792280716402835672(builds --log build-1792280716402835672).mesh-delivery: the operator's Approve of this pull request's merge into main is ended: its head
e6d5ead50dis no longer the pull request's head, or the pull request closed. Nothing is merged on it. The operator is asked again once the checks pass at the new head.Pull request closed