Issue 774 (L3, the controller's hand-over). mesh-grants gets the tool grants_lease_check: in one call it answers the controller's lease holder, every dependency a manifest declares on mesh-controller (kept, with the record that keeps it, or refused, with the record that ended it), the streams, and a dry run of the lease write's check in both phases. It refuses when the indexer's manifests were not all read, so an empty read never passes. Both reads of the controller's grants are refused per ADR 0571 §9.
Tests: go vet ./..., go vet -tags integration ./..., go test ./... in modules/mesh-grants (2 test functions, 10 rows).
Quick vs thorough: one tool reading bus state, mesh-wide (one-question-one-tool); the thorough form, since it answers every dependency at once.
Reviewer notes, not findings (noted on issue 774): the reason text when the second key listing fails reads "0 modules"; the verdict still refuses.
Issue 774 (L3, the controller's hand-over). mesh-grants gets the tool grants_lease_check: in one call it answers the controller's lease holder, every dependency a manifest declares on mesh-controller (kept, with the record that keeps it, or refused, with the record that ended it), the streams, and a dry run of the lease write's check in both phases. It refuses when the indexer's manifests were not all read, so an empty read never passes. Both reads of the controller's grants are refused per ADR 0571 §9.
Tests: go vet ./..., go vet -tags integration ./..., go test ./... in modules/mesh-grants (2 test functions, 10 rows).
Quick vs thorough: one tool reading bus state, mesh-wide (one-question-one-tool); the thorough form, since it answers every dependency at once.
Reviewer notes, not findings (noted on issue 774): the reason text when the second key listing fails reads "0 modules"; the verdict still refuses.
Reviewed-by: rev-lease@shanks at 2dd5239726ca20984e0075b12012e38ecb259143
The operator asked to remove the controller by finishing its hand-over; no tool said who holds
the lease, which manifests still read, invoke or consume mesh-controller, or whether the lease
write's check (ADR 0571 §13) would pass. grants_lease_check answers all three from bus state on
the grants part, which already reads the lease, every manifest at the indexer's trunk and the
bus's streams: the holder and what follows from it, every dependency with the record on the
named keep list that keeps it, the controller's streams and buckets someone consumes, and the
check run dry at the write (the three kept to it alone) and before its delivery, with reasons.
Quick fix: the judgement and the keep list in the grants part, as here.
Thorough fix: the keep list and the dependency derivation in mesh-sdk, shared by this tool and
the §13 manifest tests in mesh-catalog, mesh-delivery and mesh-tools. Chosen quick: the tests do
not exist yet and an sdk move needs a group; the move is named for the lead.
Review of 09791f5: with the indexer's modules bucket readable but empty, nothing was read, so
nothing was found and both phases passed; the operator could have handed the lease away while an
unkept read still stood. Judge now refuses when no manifest was read, or fewer of the indexer's
modules than it holds (a provided manifest does not count for a missing one), saying why; a
missing or refused manifest is named as before, now under test.
The controller's grants leave the keep list: ADR 0571 §9 has no manifest read them from L7's
delivery, changing ADR 0567 §10 and ADR 0547 §5's shadow compare, so the assigner's and the grants
part's reads are refused, and a refusal names the record that ended a declaration where one does.
Quick fix: the counts in the grants part's Judge, as here. Thorough fix: the same coverage rule
in the shared mesh-sdk derivation once the keep list moves there; the quick one stands until then.
Deliverynovox/mesh-delivery@2dd5239726ca — merged since 2026-10-30T22:49:21Z
Source — source.main moved to novox/mesh-delivery@e559798972. Whether it reached the machines is mesh-delivery-view's, derived from source.main, the wants and the haves.
Transitions
2026-10-30 22:45 (new) → proposed (announced): novox/mesh-delivery#120's head announced
2026-10-30 22:45 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-10-30 22:49 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@2dd5239726ca` — **merged** since 2026-10-30T22:49:21Z
**Source** — source.main moved to novox/mesh-delivery@e559798972b4. Whether it reached the machines is `mesh-delivery-view`'s, derived from `source.main`, the wants and the haves.
**Transitions**
- 2026-10-30 22:45 (new) → proposed (announced): novox/mesh-delivery#120's head announced
- 2026-10-30 22:45 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-10-30 22:49 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 774 (L3, the controller's hand-over). mesh-grants gets the tool grants_lease_check: in one call it answers the controller's lease holder, every dependency a manifest declares on mesh-controller (kept, with the record that keeps it, or refused, with the record that ended it), the streams, and a dry run of the lease write's check in both phases. It refuses when the indexer's manifests were not all read, so an empty read never passes. Both reads of the controller's grants are refused per ADR 0571 §9.
Tests: go vet ./..., go vet -tags integration ./..., go test ./... in modules/mesh-grants (2 test functions, 10 rows).
Quick vs thorough: one tool reading bus state, mesh-wide (one-question-one-tool); the thorough form, since it answers every dependency at once.
Reviewer notes, not findings (noted on issue 774): the reason text when the second key listing fails reads "0 modules"; the verdict still refuses.
Reviewed-by: rev-lease@shanks at
2dd5239726Delivery
novox/mesh-delivery@2dd5239726ca— merged since 2026-10-30T22:49:21ZSource — source.main moved to novox/mesh-delivery@e559798972. 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.