mesh-grants: a pass composing part of the mesh only grows a membership (issue 1966, bootstrap recovery) #172

Merged
mesh-tools merged 1 commits from fix/1966-grants-partial-pass-grows into main 2026-11-07 23:39:27 +00:00
Member

Recovery fix (mesh instruction recovery-fixes-merge-and-tell), merged by lead-47@shanks without the Approve; the operator is told at the terminal.

Cause. While grants composes part of the mesh (the assignments view did not answer), #171 kept a published membership whole when the composed one narrowed anything. The new assigner d325caf4 on ace composes a membership that drops its old mesh-placement seats and adds its state view-marks: kept whole, its tools process never got view-marks, so mesh-delivery-assigner.assignments fails ("keeps and reads no state called view-marks"), so the assignments view never answers, so grants never leaves its partial pass. A deadlock; the third bootstrap loop of the kind tonight (#170, #171).

Evidence. mesh-grants.grants_user_list last pass 2026-11-07 23:23 UTC: not_published ace.mesh-delivery-assigner: kept as published: the assignments view did not answer ... composes it without seats mesh-placement .... Issue 1966 notes 69-71.

Kind and fix. Quick: special-case the assigner. Thorough (chosen, the kind met three times): while a pass composes part of the mesh it publishes the union of the membership last published and the one composed, so it only grows; the next full pass narrows as before. The user list's KeepLoaded already unions and holds only losses.

Tests. Rows of TestGrants (no new test function): narrows+adds publishes the union with the addition; adds only; narrows only; full pass publishes as composed. Failed first with part.go at trunk. go vet (both tags) and go test ./... in modules/mesh-grants pass.

Undo. Revert this merge commit.

Reviewed-by: mesh-code-reviewer@shanks at f3f0a5e695

https://claude.ai/code/session_01NcbgfFfQ4Z9UE5jK32PmE5

Recovery fix (mesh instruction recovery-fixes-merge-and-tell), merged by lead-47@shanks without the Approve; the operator is told at the terminal. **Cause.** While grants composes part of the mesh (the assignments view did not answer), #171 kept a published membership whole when the composed one narrowed anything. The new assigner d325caf4 on ace composes a membership that drops its old mesh-placement seats and adds its state `view-marks`: kept whole, its tools process never got `view-marks`, so `mesh-delivery-assigner.assignments` fails ("keeps and reads no state called view-marks"), so the assignments view never answers, so grants never leaves its partial pass. A deadlock; the third bootstrap loop of the kind tonight (#170, #171). **Evidence.** `mesh-grants.grants_user_list` last pass 2026-11-07 23:23 UTC: not_published `ace.mesh-delivery-assigner: kept as published: the assignments view did not answer ... composes it without seats mesh-placement ...`. Issue 1966 notes 69-71. **Kind and fix.** Quick: special-case the assigner. Thorough (chosen, the kind met three times): while a pass composes part of the mesh it publishes the union of the membership last published and the one composed, so it only grows; the next full pass narrows as before. The user list's KeepLoaded already unions and holds only losses. **Tests.** Rows of TestGrants (no new test function): narrows+adds publishes the union with the addition; adds only; narrows only; full pass publishes as composed. Failed first with part.go at trunk. go vet (both tags) and go test ./... in modules/mesh-grants pass. **Undo.** Revert this merge commit. Reviewed-by: mesh-code-reviewer@shanks at f3f0a5e6950351b96ef61f000d841075ccedeb17 https://claude.ai/code/session_01NcbgfFfQ4Z9UE5jK32PmE5
mesh-tools added 1 commit 2026-11-07 23:39:07 +00:00
Fault: the new assigner composes a membership that drops the placement seats and adds its state view-marks. The partial pass
kept the published one whole, so the assigner's tools never got view-marks, its assignments view never answered, and the
pass never left its partial state (third bootstrap loop of the kind after #170 and #171).

Kind: the bootstrap hold freezes whole entries, so a grant needed to end the hold is never given.
Quick fix: special-case the assigner (or let additions through for it). Rejected: the next module that gains a state meets the same loop.
Thorough fix: while a pass keeps what the bus loaded, publish the union of the membership last published and the one composed
(every list, deduplicated, published entries first; the private network, contributions and bindings the pass's), published
when it differs; the pass says what it kept beyond the composed one. The user list already unions (KeepLoaded), additions pass there.

Claude-Session: https://claude.ai/code/session_01NcbgfFfQ4Z9UE5jK32PmE5
Author
Member

Delivery novox/mesh-delivery@f3f0a5e69503 — merged since 2026-11-07T23:39:32Z

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

Transitions

  • 2026-11-07 23:39 (new) → proposed (announced): novox/mesh-delivery#172's head announced
  • 2026-11-07 23:39 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-07 23:39 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@f3f0a5e69503` — **merged** since 2026-11-07T23:39:32Z **Source** — source.main moved to novox/mesh-delivery@838dbd59ed5d. Whether it reached the machines is `mesh-delivery-view`'s, derived from `source.main`, the wants and the haves. **Transitions** - 2026-11-07 23:39 (new) → proposed (announced): novox/mesh-delivery#172's head announced - 2026-11-07 23:39 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-07 23:39 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 838dbd59ed into main 2026-11-07 23:39:27 +00:00
mesh-tools deleted branch fix/1966-grants-partial-pass-grows 2026-11-07 23:39:28 +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#172