Answer the controller's lease, what still depends on it and the lease write's check in one call (issue 774) #120

Merged
mesh-tools merged 2 commits from feat/lease-tool into main 2026-10-30 22:49:20 +00:00
Member

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 2dd5239726

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
mesh-tools added 2 commits 2026-10-30 22:45:35 +00:00
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.
Refuse the lease write's check when the indexer's manifests were not all read (issue 774)
mesh/delivery merged: source.main moved to novox/mesh-delivery@e559798972b4
mesh/check being carried to 2dd5239726ca on e559798972b4 | from d409bdf20f48
2dd5239726
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.
Author
Member

Delivery novox/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`.
mesh-tools merged commit e559798972 into main 2026-10-30 22:49:20 +00:00
mesh-tools deleted branch feat/lease-tool 2026-10-30 22:49:20 +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#120