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-toolsmerged 3 commits from fix/1126-gates-delivery into main2026-11-02 09:51:14 +00:00
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
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
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
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
Deliverynovox/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`.
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 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:
Records.LeaseHandedAwayset at the call site; mesh-sdk unchanged). Its hand-back answers gone.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
a192052d82Pushed-by: lead-47@shanks
https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL
Delivery
novox/mesh-delivery@a192052d82fe— merged since 2026-11-02T09:51:16ZSource — source.main moved to novox/mesh-delivery@be88162cde. Whether it reached the machines is
mesh-delivery-view's, derived fromsource.main, the wants and the haves.Transitions
The commit's note under
refs/notes/mesh-plankeeps every transition of this change up to its merge:git log --notes=mesh-plan.