Delivery group on branch fix/1279-consumers-from-now: mesh-sdk first, then mesh-controller, then this pull request. The forge bridge's and the indexer's go.mod pin the mesh-sdk branch head 4580d80a32d9 (the open kind).
What changes: at start and at each reconnect the bridge reads the forge, writes a pull message only for a head FORGE does not hold (it reads FORGE through an ordered consumer; if that cannot be read it writes every pull message, as before, and logs it), then one open message naming every open pull request into trunk it read; events and the sync take turns on one mutex, so no event is heard between the read and the write. The indexer, on open, takes every pull request it does not name out of its group and deletes a group left empty (compare-and-set as for any message); it needs the store's Keys.
1279/AC8 (integration, bridge started whole): cmd integration_test.go TestBridgeReadsTheForgeAtStartAndAfterAReconnectAndHearsNoOlderEvent (the other integration tests now make the bridge's consumer from now, as the controller will, and expect the open message)
The integration tests were compiled, not run, on the author's machine.
Issue 1279, decided by ADR 0443 (clause 5).
Delivery group on branch fix/1279-consumers-from-now: mesh-sdk first, then mesh-controller, then this pull request. The forge bridge's and the indexer's go.mod pin the mesh-sdk branch head 4580d80a32d9 (the open kind).
What changes: at start and at each reconnect the bridge reads the forge, writes a pull message only for a head FORGE does not hold (it reads FORGE through an ordered consumer; if that cannot be read it writes every pull message, as before, and logs it), then one `open` message naming every open pull request into trunk it read; events and the sync take turns on one mutex, so no event is heard between the read and the write. The indexer, on `open`, takes every pull request it does not name out of its group and deletes a group left empty (compare-and-set as for any message); it needs the store's Keys.
- 1279/AC6 (unit, bridge): internal/bridge TestOpenMessageNamesEveryOpenPullIntoTheTrunk, TestOnlyAHeadFORGEDoesNotHoldIsWritten; cmd open_test.go TestSyncOpenWritesPullsForNewHeadsThenOneOpenMessageNamingAll, TestSyncOpenWritesAllWhenFORGECannotBeRead, TestNoForgeEventIsHeardWhileTheOpenPullsAreSaid
- 1279/AC7 (unit, indexer): internal/index TestAnOpenMessageDropsEveryCandidateItDoesNotName
- 1279/AC8 (integration, bridge started whole): cmd integration_test.go TestBridgeReadsTheForgeAtStartAndAfterAReconnectAndHearsNoOlderEvent (the other integration tests now make the bridge's consumer from now, as the controller will, and expect the open message)
The integration tests were compiled, not run, on the author's machine.
Reviewed-by: review-1279@shanks at ca667af562b0849df9caf5f13dfa2007e4c13fba
composed together: pass — every machine composes with the change as it did without (4 of 4 compose)
Machines
mesh-controller on every machine running it: sent
mesh-delivery-indexer on every machine running it: sent
route-proxy on every machine running it: sent
build-agent on every machine running it: sent
mesh-delivery-forge-bridge on every machine running it: sent
Transitions
2026-10-19 20:09 (new) → proposed (announced): novox/mesh-delivery#7's head announced
2026-10-19 20:15 proposed → checked (checked): a verdict names this commit and the trunk's head as its trunk commit
2026-10-19 20:15 checked → ready (accepted): the gate passed or warned, and the repository's own check did not fail
2026-10-19 20:45 ready → published (merged): on the trunk its modules follow: merged there, and its walk opened — or nothing for a walk to move
2026-10-19 20:45 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 — not a failed walk that carried a later commit for it, after which it waits for a walk of its own commit
2026-10-19 20:58 delivering → delivered (done): its walk is done, carrying its own commit: 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-delivery@ca667af562b0` — **delivered** since 2026-10-19T20:58:09Z
**Delivery plan** — builds mesh-delivery-forge-bridge, mesh-delivery-indexer → novox; no bus step
- tier 0: mesh-delivery-forge-bridge, mesh-delivery-indexer
- novox: receives mesh-delivery-forge-bridge, mesh-delivery-indexer
**Group** `fix/1279-consumers-from-now`: novox/mesh-controller@a0c971cea92e, novox/mesh-delivery@ca667af562b0, novox/mesh-sdk@4580d80a32d9
- composed together: pass — every machine composes with the change as it did without (4 of 4 compose)
**Machines**
- mesh-controller on every machine running it: sent
- mesh-delivery-indexer on every machine running it: sent
- route-proxy on every machine running it: sent
- build-agent on every machine running it: sent
- mesh-delivery-forge-bridge on every machine running it: sent
**Transitions**
- 2026-10-19 20:09 (new) → proposed (announced): novox/mesh-delivery#7's head announced
- 2026-10-19 20:15 proposed → checked (checked): a verdict names this commit and the trunk's head as its trunk commit
- 2026-10-19 20:15 checked → ready (accepted): the gate passed or warned, and the repository's own check did not fail
- 2026-10-19 20:45 ready → published (merged): on the trunk its modules follow: merged there, and its walk opened — or nothing for a walk to move
- 2026-10-19 20:45 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 — not a failed walk that carried a later commit for it, after which it waits for a walk of its own commit
- 2026-10-19 20:58 delivering → delivered (done): its walk is done, carrying its own commit: 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/merge-gate head ca667af562b0 merged into trunk 1325c8b452c8 — pass: group fix/1279-consumers-from-now composed: every machine composes with the change…
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.
Issue 1279, decided by ADR 0443 (clause 5).
Delivery group on branch fix/1279-consumers-from-now: mesh-sdk first, then mesh-controller, then this pull request. The forge bridge's and the indexer's go.mod pin the mesh-sdk branch head 4580d80a32d9 (the open kind).
What changes: at start and at each reconnect the bridge reads the forge, writes a pull message only for a head FORGE does not hold (it reads FORGE through an ordered consumer; if that cannot be read it writes every pull message, as before, and logs it), then one
openmessage naming every open pull request into trunk it read; events and the sync take turns on one mutex, so no event is heard between the read and the write. The indexer, onopen, takes every pull request it does not name out of its group and deletes a group left empty (compare-and-set as for any message); it needs the store's Keys.The integration tests were compiled, not run, on the author's machine.
Reviewed-by: review-1279@shanks at
ca667af562Delivery
novox/mesh-delivery@ca667af562b0— delivered since 2026-10-19T20:58:09ZDelivery plan — builds mesh-delivery-forge-bridge, mesh-delivery-indexer → novox; no bus step
Group
fix/1279-consumers-from-now: novox/mesh-controller@a0c971cea9, novox/mesh-delivery@ca667af562, novox/mesh-sdk@4580d80a32Machines
Transitions
The commit's note under
refs/notes/mesh-plankeeps every transition:git log --notes=mesh-plan.