jschoubben
45d143192b
Record a merge through the merge gate so the new indexer reads this repository's seat definitions on its merge (issue 1966, the operator's bootstrap)
mesh/delivery merged: source.main moved to novox/mesh-networking@f0ec726e7ffc
mesh/delivery-group group fix/1966-gate-record merged: every member is merged
mesh/check checking 45d143192b36 on f0ec726e7ffc
2026-11-07 21:13:58 +01:00
mesh-tools
5af7189cad
Merge pull request 'Registry milestone: mesh-networking (issue 1966)' ( #3 ) from feat/registry-milestone into main
2026-11-07 14:19:55 +00:00
jschoubben
9ee0ffe3c0
gofmt the file the group try listed
...
mesh/delivery merged: source.main moved to novox/mesh-networking@5af7189cad82
mesh/delivery-group group feat/registry-milestone merged: every member is merged
mesh/check checking 9ee0ffe3c0b6 on 5af7189cad82 | novox/mesh-networking#3 in group feat/registry-milestone
Claude-Session: https://claude.ai/code/session_01NcbgfFSnn24M3GcqttoU7i
2026-11-06 01:40:22 +01:00
jschoubben
4d1f9acae1
Take tidy's go.mod whole: mesh requirements at the zero version only, unused ones dropped
...
Claude-Session: https://claude.ai/code/session_01NcbgfFSnn24M3GcqttoU7i
2026-11-06 00:52:18 +01:00
jschoubben
34f5757d94
Complete go.mod and go.sum for the externals each module builds with
...
A check's tests run without network, so each module must carry every external module it builds with.
Claude-Session: https://claude.ai/code/session_01NcbgfFSnn24M3GcqttoU7i
2026-11-06 00:51:22 +01:00
jschoubben
2f0b7c9741
Route-proxy and the overlay name the assigner's new places: the contracts' go/ path and the state assignments (issue 1966)
...
Claude-Session: https://claude.ai/code/session_01NcbgfFSnn24M3GcqttoU7i
2026-11-05 22:00:49 +01:00
jschoubben
db50239373
No client names the holder of the seat mesh-provisioner: each reader keeps its own constant, held to its manifest (ADR 0625 section 4, issue 1966)
...
Claude-Session: https://claude.ai/code/session_01NcbgfFSnn24M3GcqttoU7i
2026-11-05 19:36:21 +01:00
jschoubben
e1eb98fcbc
No client names a holder: each reader keeps its own constant, held to its manifest (ADR 0625 section 4, issue 1966)
...
Claude-Session: https://claude.ai/code/session_01NcbgfFSnn24M3GcqttoU7i
2026-11-05 18:37:28 +01:00
jschoubben
2020b87df0
Require every mesh package of the group at the floor version (ADR 0573 sections 2 and 4, issue 1966)
...
A member's go.mod names the oldest version a module accepts; the check builds the group's own heads whatever it names. go.sum lines of mesh packages are left out.
Claude-Session: https://claude.ai/code/session_01NcbgfFSnn24M3GcqttoU7i
2026-11-05 16:56:39 +00:00
jschoubben
122f640963
mesh-wireguard: the two provisions say their credential form (none), as the manifest validator requires of every offer (V1; issue 1966)
...
Claude-Session: https://claude.ai/code/session_01NcbgfFSnn24M3GcqttoU7i
2026-11-05 17:27:53 +01:00
jschoubben
e313ac9d3b
route-proxy: placement is read through the module assigner's client, and a bus address is said without its credential by the proxy's own helper (N-1, ADR 0634 §4; issue 1966)
...
Claude-Session: https://claude.ai/code/session_01NcbgfFSnn24M3GcqttoU7i
2026-11-05 15:33:20 +01:00
jschoubben
5885ab600a
mesh-wireguard: the modules the mesh provides itself are its overlay package's, and the seat's name is the generated package's (ADR 0636 §6; issue 1966)
...
Claude-Session: https://claude.ai/code/session_01NcbgfFSnn24M3GcqttoU7i
2026-11-05 15:32:43 +01:00
jschoubben
f5fc1e4ebc
mesh-connectivity-contracts: each seat's definition names its domain, Connectivity (the indexer's domain rule; ADR 0634 §9; issue 1966)
...
Claude-Session: https://claude.ai/code/session_01NcbgfFSnn24M3GcqttoU7i
2026-11-05 15:16:07 +01:00
jschoubben
acaebc5ddf
route-proxy: provisions and the provider come from the provisioner's client, not mesh-sdk (N-1, ADR 0634 §4; issue 1966)
...
The requires of the two mesh-contracts modules carry a placeholder version the group's re-pin replaces.
2026-11-05 14:09:12 +01:00
jschoubben
be74c94151
mesh-wireguard: the module that holds the-private-network, with its manifest and peer generator its own package (ADR 0636 §6; issue 1966)
...
The names and the manifest come from mesh-sdk's overlay, the peer graph, the generator and the declaration from the node-engine's internal/overlay; the value's layout is the seat's contract in mesh-connectivity-contracts.
Claude-Session: https://claude.ai/code/session_01JG73KJNrH5EgFXMKKYSrig
2026-11-05 14:07:21 +01:00
jschoubben
dd7dfdd6f7
mesh-connectivity-contracts: the Connectivity domain's contracts module moves here from mesh-contracts; the-private-network defined whole, no client (ADR 0636 §6; issue 1966)
...
Claude-Session: https://claude.ai/code/session_01JG73KJNrH5EgFXMKKYSrig
2026-11-05 14:05:54 +01:00
jschoubben
0c0a12f1c9
Pin mesh-sdk 05b3e2e1b94f and mesh-contracts ae5266e77639, the group's final heads (issue 1966)
...
mesh/delivery-group group feat/registry-milestone checking: 7 of 7 member(s) ready
mesh/delivery closed: a newer head of the same pull request
mesh/check checking 0c0a12f1c929 on efdcc9daef2d | novox/mesh-networking#3 in group feat/registry-milestone
Claude-Session: https://claude.ai/code/session_01JG73KJNrH5EgFXMKKYSrig
2026-11-04 18:47:39 +01:00
jschoubben
3c8553a6c3
Pin mesh-sdk e5d89c5eedb5 and mesh-contracts 347a3053580a, the group's heads after review round 2 (issue 1966)
...
Claude-Session: https://claude.ai/code/session_01JG73KJNrH5EgFXMKKYSrig
2026-11-04 18:26:33 +01:00
jschoubben
39196381de
Pin mesh-sdk c54648e74346 and mesh-contracts ec9529022c44, the group's heads (issue 1966)
...
Claude-Session: https://claude.ai/code/session_01JG73KJNrH5EgFXMKKYSrig
2026-11-04 17:46:08 +01:00
mesh-tools
efdcc9daef
Merge pull request 'sdk1: route-proxy moves here; its composition proofs move to the node-engine' ( #2 ) from feat/sdk1 into main
2026-11-02 20:43:16 +00:00
jschoubben
f18ec031c4
Pin mesh-sdk at f02f142, the sdk1 head whose tests no longer leak package globals, so the group's check builds against it
...
mesh/delivery merged: source.main moved to novox/mesh-networking@efdcc9daef2d
mesh/delivery-group group feat/sdk1 merged: every member is merged
mesh/check checking f18ec031c463 on fe0392e05f62 | novox/mesh-networking#2 in group feat/sdk1
Claude-Session: https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL
2026-11-02 20:14:16 +01:00
jschoubben
9d67813829
Pin mesh-sdk at the sdk1 group's head 1c7356c, so the group's check builds every module against the narrowed SDK it was written for
...
mesh/delivery-group group feat/sdk1 checking: 7 of 7 member(s) ready
mesh/delivery closed: a newer head of the same pull request
mesh/check failed: integration: meshbuildgo/cmd/mesh-build-go.TestAComposeAskIsBuiltOnceAndAnsweredOnTheBus: NOT CHECKED: the node-engine's composer c…
Claude-Session: https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL
2026-11-02 19:29:53 +01:00
jschoubben
f82e0b77b4
Write route-proxy's test plan entry as the contributed form itself, since its encoder left mesh-sdk
...
Claude-Session: https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL
2026-11-02 19:20:18 +01:00
jschoubben
a74f9db508
Test route-proxy without composing: its manifest's own facts and a plan entry's port, since the composition left mesh-sdk
...
The composer's proof that the manifest composes, and that a port is the placement's, is the node-engine's now (ADR 0593 §7).
Claude-Session: https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL
2026-11-02 19:06:37 +01:00
jschoubben
9c9d03691b
Drop route-proxy's stale notes of a contract module of its own, which the move made a package
...
The go.mod comment and the contract package's comment still described a separate Go module with its own tags. Issue 1126.
Claude-Session: https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL
2026-11-02 18:14:32 +01:00
jschoubben
759a7bff12
Keep route-proxy's contract a package of its own module, not a second module behind a replace
...
mesh/delivery-group group feat/1126-removal rejected: composed together: the checker's verdict at the members' heads (6593d973ff2e): the composition
mesh/delivery closed: the pull request closed unmerged
mesh/check failed: the composition: route-proxy is defined twice, in novox/mesh-controller and novox/mesh-networking | 759a7bff129b on fe0392e05f62 | …
The group's check failed at go mod verify: the build module's workspace carries one module, so the replace of
./contract named a go.mod it never placed; and ADR 0573 clause 1 refuses a path into another tree. Nothing outside
route-proxy imports the contract today; when one must, it moves into the networking domain's package (research 081).
Issue 1126.
Claude-Session: https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL
2026-11-02 13:55:07 +01:00
jschoubben
6c15ff3f0e
Pin mesh-sdk to the group head of issue 1126
...
mesh/delivery-group group feat/1126-removal rejected: composed together: the checker's verdict at the members' heads (c35fdd232bcd): shanks
mesh/delivery closed: a newer head of the same pull request
mesh/check failed: shanks: the check of novox/mesh-networking#1 failed: go mod verify in modules/route-proxy: go: git.novox.be/novox/mesh-networking/m…
Every member builds against mesh-sdk abf5eac, the head of feat/1126-removal, so the group is checked as one contract.
Claude-Session: https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL
2026-11-02 12:27:34 +01:00
jschoubben
d2c5057fdf
Say that the seat mesh-provisioner composes route-proxy's plans, since the controller ended
...
Claude-Session: https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL
2026-11-02 12:23:47 +01:00
jschoubben
30cb63e29f
Pin mesh-sdk to the group head of issue 1126
...
Every member builds against mesh-sdk f569924, the head of feat/1126-removal, so the group is checked as one contract.
Claude-Session: https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL
2026-11-02 12:20:14 +01:00
jschoubben
8c89b84045
Join the forge's first commit of mesh-networking
...
Claude-Session: https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL
# Conflicts:
# README.md
2026-11-02 11:57:09 +01:00
mesh-admin
fe0392e05f
Begin mesh-networking with its README and its own check (ADR 0428)
2026-11-02 10:56:32 +00:00
jschoubben
6f038810fd
Move route-proxy out of the controller's repository, which is archived with the controller
...
route-proxy provides `route` to five modules and lived in novox/mesh-controller, archived once the controller is
removed (issue 1126). Its history comes along (git filter-repo of modules/route-proxy and its earlier home
examples/route-proxy). Its contract's Go module path names this repository, and route-proxy builds the contract from
its own tree through a replace, so no tag is needed before the first build. The two manifest tests that held its
public ACME account and mounted program lived in the controller's internal/ownmanifest; they move beside the module.
Claude-Session: https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL
2026-11-02 11:45:17 +01:00
mesh-tools
3ef81c0fe6
Merge pull request 'The controller takes the indexer's verdict instead of judging manifests; route-proxy declares its credential form (ADR 0578, 0579)' ( #489 ) from feat/judge-once into main
2026-11-01 07:54:23 +00:00
jschoubben
03ac1f7f35
Pin the group's mesh-sdk head after the gofmt fix
...
Claude-Session: https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL
2026-11-01 03:27:07 +01:00
jschoubben
c3a2e71d2e
Pin mesh-sdk at the head after review round 1
...
Claude-Session: https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL
2026-11-01 03:13:17 +01:00
jschoubben
2adbc5c82d
Pin mesh-sdk at the judge-less release head in the controller and route-proxy
...
Claude-Session: https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL
2026-11-01 02:46:24 +01:00
jschoubben
0afee8c2fc
Declare credential form none for the provision, which hands consumers no credential
...
The manifest judge refuses an offer that says no credential form (issue 1585).
Claude-Session: https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL
2026-11-01 02:43:24 +01:00
mesh-tools
3dec14334e
Merge pull request 'route-proxy dials the machine port its plans now carry (issue 774)' ( #488 ) from fix/route-ports into main
2026-10-31 12:56:54 +00:00
jschoubben
d550c6da7a
Check route-proxy's composed targets over the live shapes in an existing test's place, and pin the mesh-sdk that keeps unassigned bare ports (issue 774, research 072 row 34)
...
The table covers gitea and grafana moved by the placement, influxdb's bare port, mailu's and
photos' fixed mappings and home-assistant on the host's network; it replaces the loopback test it
subsumes, so route-proxy's test count does not grow.
The controller, NATS-native: no piece moves; route-proxy only.
2026-10-31 13:22:00 +01:00
jschoubben
70b8bff570
Dial a route at the machine port its module's placement assigned, from the mesh-sdk whose plans carry it (issue 774, research 072 row 34)
...
route-proxy from plans dialled every route at the software's own port: gitea at 127.0.0.1:3000
(published at 20000) and grafana on ace at 3000 (published at 20012), and public sites answered
502. The proxy already reaches a module beside it over loopback and one elsewhere at the plan's
address; the plan now carries the assigned port, and a test composes the plan with the SDK and
reads it as the proxy does, so the two cannot drift again.
The controller, NATS-native: no piece moves; route-proxy only.
2026-10-31 13:11:00 +01:00
mesh-tools
de46374d10
Merge pull request 'route-proxy from the provisioner's plans with its own contract; the controller forwards accounts to the vault (issue 774)' ( #487 ) from feat/072-moves into main
2026-10-31 10:31:07 +00:00
jschoubben
26dea32f5f
Pin route-proxy at the group's mesh-sdk head acbf80a and its contract at the published tag v0.1.0, so it builds and reads the contributed payload; refresh its manifest digest for the events its contract names (issue 774)
2026-10-31 10:27:05 +01:00
jschoubben
fa56e38429
Serve route-proxy's routes through its own contract: decode each plan entry's opaque contribution with it, say each name served, withdrawn or refused on the bus, and take who is inside from the seat mesh-placement, since the membership went with the assignments stream (issue 774, research 072 rows 33 and 34)
2026-10-31 09:44:07 +01:00
jschoubben
bf395f88ee
Publish route-proxy's contract as a Go module of its own: the route a consumer asks, its schema, the events the proxy says, what it keeps on the bus and its tools' arguments, so other modules use the contract by its version and the provisioner carries a route unread (issue 774, research 072 row 34)
2026-10-31 09:44:00 +01:00
jschoubben
373565c2f7
Serve route-proxy's routes from the seat mesh-provisioner's plans alone and drop its received routes file, since a route is a provision and the file is the deprecated path (issue 774, research 072 row 34; needs the mesh-sdk pin carrying plan entries' given and Conn.Read)
2026-10-31 09:24:53 +01:00
mesh-tools
c7493f4889
Merge pull request 'The web front's route helper reads the seat's plans, so a route-only module's route is provided (issue 774)' ( #486 ) from fix/route-proxy-reads-plans into main
2026-10-30 23:43:15 +00:00
jschoubben
fd74e38ee0
Start route-proxy's provider helper only once Serve holds the runtime's channel, so its first watch is never refused and the helper never stops until a restart (issue 774, review)
2026-10-31 00:32:26 +01:00
jschoubben
69bffee443
Answer route-proxy's routes from the seat mesh-provisioner's plans and keys, not the controller's assignments, so a route the seat keys for a module not handed is marked provided and its new builds are no longer withheld (issue 774)
2026-10-31 00:27:11 +01:00
mesh-tools
dd52c9cce1
Merge pull request 'The web front keeps what it serves, its certificates and what it refuses on the bus, with tools to read them (issue 774)' ( #485 ) from feat/route-proxy-tools into main
2026-10-30 22:11:52 +00:00
jschoubben
d2e5323b7c
Keep a scan out of route-proxy's unrouted state: only names under a served domain, a few a minute, no visitor address (issue 774)
...
Review of 3e14a13b : a scanner's random Host or SNI names each became a key, bounded only by the
bucket's lifetime and size, and every failed write was retried at each change and logged each time.
A refused name is now kept by name only under the registrable domain of a name the proxy serves, and
at most five new names a minute; every other refusal is counted in memory and written once a minute
under <node>._other (last minute, since start), which route_proxy_unrouted shows. A refused write of
that state is dropped and logged once until a write succeeds; trimming memory to 4096 names moved
from the request to the writer. The visitor's address is no longer kept: the journal has it.
Quick: drop unrouted keys from strangers by a fixed allow-list. Thorough: bound by the proxy's own
domains, by rate, and by never retrying. Chose thorough: the scan is constant on a public machine.
2026-10-30 23:03:00 +01:00