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
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
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
Deliverynovox/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`.
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 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.getparses withcatalogue.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_membershipwith 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 ./...andgo 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
aea22bf793Delivery
novox/mesh-delivery@aea22bf793b4— merged since 2026-10-26T09:01:01ZSource — source.main moved to novox/mesh-delivery@7ddbf40715. 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.