Without the controller: mesh-grants makes consumers, enrolment issues, the watchman keeps dead letters, and the controller cannot be placed again (issue 1126) #137

Merged
mesh-tools merged 3 commits from fix/1126-gates-delivery into main 2026-11-02 09:51:14 +00:00
Member

Issue 1126 (design 47): the controller ended by its unassignment (the operator, 2026-11-02 10:09); its lease key expired and is never handed, so every part waiting for "the lease is handed away" stayed in its controller-era branch. This opens those gates in mesh-delivery:

  • mesh-grants creates and matches every account's event consumer again, raises grant-missing, keeps memberships in its state only, and always seals as handed (Records.LeaseHandedAway set at the call site; mesh-sdk unchanged). Its hand-back answers gone.
  • mesh-enrolment issues without the lease; its manifest drops the lease read.
  • The watchman keeps the dead letters once the controller's consumer is gone, and reads no lease.
  • The assigner refuses any placement of mesh-controller (a place, a seed holding it, or a laid node running it), so the controller can never run beside the ungated parts (two writers).

Checked before the push: no open proposal and no node's placement names mesh-controller.

Tested locally (GOWORK=off): gofmt, go vet, go vet -tags integration, the unit suites of mesh-grants, mesh-enrolment, the watchman and the assigner; the integration tests of mesh-grants, mesh-enrolment and the watchman (run with no lease key at all) pass. Unit test count: 3 fewer.

Reviewed-by: review-g2@shanks at a192052d82
Pushed-by: lead-47@shanks

https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL

Issue 1126 (design 47): the controller ended by its unassignment (the operator, 2026-11-02 10:09); its lease key expired and is never handed, so every part waiting for "the lease is handed away" stayed in its controller-era branch. This opens those gates in mesh-delivery: - **mesh-grants** creates and matches every account's event consumer again, raises grant-missing, keeps memberships in its state only, and always seals as handed (`Records.LeaseHandedAway` set at the call site; mesh-sdk unchanged). Its hand-back answers gone. - **mesh-enrolment** issues without the lease; its manifest drops the lease read. - **The watchman** keeps the dead letters once the controller's consumer is gone, and reads no lease. - **The assigner refuses any placement of mesh-controller** (a place, a seed holding it, or a laid node running it), so the controller can never run beside the ungated parts (two writers). Checked before the push: no open proposal and no node's placement names mesh-controller. **Tested locally** (GOWORK=off): gofmt, `go vet`, `go vet -tags integration`, the unit suites of mesh-grants, mesh-enrolment, the watchman and the assigner; the integration tests of mesh-grants, mesh-enrolment and the watchman (run with no lease key at all) pass. Unit test count: 3 fewer. Reviewed-by: review-g2@shanks at a192052d82fe59a192394bc40a935d2f2a1fb1b2 Pushed-by: lead-47@shanks https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL
mesh-tools added 3 commits 2026-11-02 09:41:16 +00:00
The controller ended by its unassignment and its lease key expired, so
every gate on "the lease is handed away" stayed shut for good: no account
consumer was created or matched, grant-missing was never raised, the
enrolment users kept the controller's subject, memberships were still
said on their subject and the sealed key never said LeaseHanded. The
handed branch now always runs, and a hand-back is gone.

Claude-Session: https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL
The controller ended by its unassignment, so its lease key is absent for
good and mesh-sdk reads that as not handed away: mesh-enrolment's issue
stayed off and the watchman never took DEAD_LETTER_NOTICES, whose notices
age out after a week. Both now act without reading the lease; the
watchman still waits, and says so, while the controller's consumer on the
notices stands. Neither manifest reads the lease any more.

Claude-Session: https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL
Refuse any placement of the controller (issue 1126)
mesh/delivery merged: source.main moved to novox/mesh-delivery@be88162cde31
mesh/check being carried to a192052d82fe on be88162cde31 | from 0490043990e2
a192052d82
The grants part, the enrolment seat and the watchman now act without
reading the lease, so a controller placed again would write beside them
with nothing saying so. The assigner refuses every proposal, seed or
joining node's write that would place mesh-controller, naming why.

Claude-Session: https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL
Author
Member

Delivery novox/mesh-delivery@a192052d82fe — merged since 2026-11-02T09:51:16Z

Source — source.main moved to novox/mesh-delivery@be88162cde. Whether it reached the machines is mesh-delivery-view's, derived from source.main, the wants and the haves.

Transitions

  • 2026-11-02 09:41 (new) → proposed (announced): novox/mesh-delivery#137's head announced
  • 2026-11-02 09:41 proposed → ready (accepted): a verdict names this commit and the trunk's head as its trunk commit, the gate passed or warned, and the repository's own check did not fail; or the check gates no merge (check-gates-merge false)
  • 2026-11-02 09:51 ready → merged (merged): on the trunk its modules follow: merged there

The commit's note under refs/notes/mesh-plan keeps every transition of this change up to its merge: git log --notes=mesh-plan.

<!-- mesh-delivery:view --> **Delivery** `novox/mesh-delivery@a192052d82fe` — **merged** since 2026-11-02T09:51:16Z **Source** — source.main moved to novox/mesh-delivery@be88162cde31. Whether it reached the machines is `mesh-delivery-view`'s, derived from `source.main`, the wants and the haves. **Transitions** - 2026-11-02 09:41 (new) → proposed (announced): novox/mesh-delivery#137's head announced - 2026-11-02 09:41 proposed → ready (accepted): a verdict names this commit and the trunk's head as its trunk commit, the gate passed or warned, and the repository's own check did not fail; or the check gates no merge (check-gates-merge false) - 2026-11-02 09:51 ready → merged (merged): on the trunk its modules follow: merged there The commit's note under `refs/notes/mesh-plan` keeps every transition of this change up to its merge: `git log --notes=mesh-plan`.
mesh-tools merged commit be88162cde into main 2026-11-02 09:51:14 +00:00
mesh-tools deleted branch fix/1126-gates-delivery 2026-11-02 09:51:14 +00:00
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: novox/mesh-delivery#137