mesh-grants: read manifests as the indexer does and say every refused one, so claude-code counts as placed (issue 1945) #59

Merged
mesh-tools merged 2 commits from fix/1945-grants-inputs into main 2026-10-26 09:00:58 +00:00
Member

Issue 1945 (notes 74, 75). Since 09:19 today mesh-grants holds back 3 memberships for a real shadow difference: novox.mesh-issues, mesh-knowledge and mesh-mail-reader would lose claude-code's per-node reach addresses (claude_code_judge/judged .ace/.g14/.novox/.shanks). Cause: the part parsed manifests with catalogue.ParseManifest, which refuses a predefined-key fallback without the list (claude-code's managed_settings, dunst), silently, so claude-code counted as placed nowhere.

Now Manifests.get parses with catalogue.ParseManifestForInputs, as the indexer, assigner, builder and checker do (issue 1751): the gate already judged fallbacks, and the part reads seats, buckets, logs and streams, never config values. Cache by digest. No read of the controller's predefined list (review round 1: that would tie the part to the leaving controller; mesh-config's copy is republished from the same mirror).

Every manifest the part cannot parse is said loudly: the pass's refused, grants_membership with no arguments lists it, a log line when the set changes, and a gap. No timer.

Not in this change (issue 1945 note 75): messenger's telegram kind loses verified-sender because the root-free judgement is on no bus key; queued for milestone 2/3 (the node-engine's root verdict as a node fact). The guard keeps that membership as the controller published it.

Tests: one table case (mod-p's fallback parses with no list and is placed; mod-z refused and listed in the pass, grants_membership and the log). go test -race -count=1 ./... and go vet -tags integration ./... in modules/mesh-grants pass. Rules bent: no mesh-controller.try (operator, 2026-10-25).

Issue: 1945

Reviewed-by: review-grants-inputs@shanks at aea22bf793

Issue 1945 (notes 74, 75). Since 09:19 today mesh-grants holds back 3 memberships for a real shadow difference: novox.mesh-issues, mesh-knowledge and mesh-mail-reader would lose claude-code's per-node reach addresses (claude_code_judge/judged .ace/.g14/.novox/.shanks). Cause: the part parsed manifests with catalogue.ParseManifest, which refuses a predefined-key fallback without the list (claude-code's managed_settings, dunst), silently, so claude-code counted as placed nowhere. Now `Manifests.get` parses with `catalogue.ParseManifestForInputs`, as the indexer, assigner, builder and checker do (issue 1751): the gate already judged fallbacks, and the part reads seats, buckets, logs and streams, never config values. Cache by digest. No read of the controller's predefined list (review round 1: that would tie the part to the leaving controller; mesh-config's copy is republished from the same mirror). Every manifest the part cannot parse is said loudly: the pass's `refused`, `grants_membership` with no arguments lists it, a log line when the set changes, and a gap. No timer. Not in this change (issue 1945 note 75): messenger's telegram kind loses verified-sender because the root-free judgement is on no bus key; queued for milestone 2/3 (the node-engine's root verdict as a node fact). The guard keeps that membership as the controller published it. Tests: one table case (mod-p's fallback parses with no list and is placed; mod-z refused and listed in the pass, grants_membership and the log). `go test -race -count=1 ./...` and `go vet -tags integration ./...` in modules/mesh-grants pass. Rules bent: no mesh-controller.try (operator, 2026-10-25). Issue: 1945 Reviewed-by: review-grants-inputs@shanks at aea22bf793b4f67fc68c47c2b9fa390ecdd88277
mesh-tools added 2 commits 2026-10-26 08:37:06 +00:00
A manifest falling back to a predefined key (claude-code, dunst) was parsed
with no list, refused silently, and its module counted as placed nowhere, so
three memberships would lose claude-code's reach addresses and were held back.
The part now reads the list the controller mirrors (mesh-controller.predefined,
key list), follows it, and lists every manifest it cannot read in its gaps,
its pass (refused) and its log.

Issue: 1945
mesh-grants: read manifests for their inputs, as every delivery part does, not against a list from the controller
mesh/delivery merged: source.main moved to novox/mesh-delivery@7ddbf40715ff
mesh/check pass aea22bf793b4 on 7ddbf40715ff | unit 168 run, 479 kept | integration 178 run, 545 kept | composition passed on novox
aea22bf793
The part reads seats, buckets, logs and streams, never a config value, and
the merge gate already judged the fallbacks; reading the controller's
predefined mirror would tie the part to the leaving controller (ADR 0547
clause 1). ParseManifestForInputs takes a fallback as it declares itself.

Issue: 1945
Author
Member

Delivery novox/mesh-delivery@aea22bf793b4 — merged since 2026-10-26T09:01:01Z

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

Transitions

  • 2026-10-26 08:37 (new) → proposed (announced): novox/mesh-delivery#59's head announced
  • 2026-10-26 08:37 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-26 09:01 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@aea22bf793b4` — **merged** since 2026-10-26T09:01:01Z **Source** — source.main moved to novox/mesh-delivery@7ddbf40715ff. Whether it reached the machines is `mesh-delivery-view`'s, derived from `source.main`, the wants and the haves. **Transitions** - 2026-10-26 08:37 (new) → proposed (announced): novox/mesh-delivery#59's head announced - 2026-10-26 08:37 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-26 09:01 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 7ddbf40715 into main 2026-10-26 09:00:58 +00:00
mesh-tools deleted branch fix/1945-grants-inputs 2026-10-26 09:00:59 +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#59