mesh-grants keeps what the bus loaded while it composes only part of the mesh (issue 1966, bootstrap recovery) #171

Merged
mesh-tools merged 2 commits from fix/1966-grants-keeps-what-is-loaded into main 2026-11-07 22:35:24 +00:00
Member

Recovery fix under the instruction recovery-fixes-merge-and-tell: merged by the session, the operator told on Telegram. The operator asked it delivered (2026-11-07 ~23:2x CET).

Cause. mesh-grants c97d021f (#170) sealed at 23:09 CET a user list composed from the 10 bootstrapped seats only (the seat list unread): it dropped ledger.novox.mesh-knowledge and about 40 users' permissions (every tool runner's node seats, the node-engines' vault reads, the build modules' seat queues). holdsBack checked lost users only, and a held module's ledger user was not kept (held.go). The list did not load (the bus still runs the 20:38Z list); 682fabee was put back. Evidence: issue 1966 note 67.

Change. While the seat list is unread or a pass is placed by the haves: every user of the loaded list and of the list in force is sealed with the union of what the pass composes and what those lists give it, every deny any list says kept; a list that still takes a permission or a deny from a loaded user is held (user-list-held, naming each); a published membership is never narrowed; a held module keeps its ledger user. Once the seat list is read and the assignments view answers, none of this applies.

Quick vs thorough. Quick: this keep. Thorough: the bootstrap order derived by the module graph (the assigner's views and the seat list before the grants part composes), noted on issue 1966.

Tests. Table rows in grants_test.go (seat list unread, placed by haves, a whole pass, a loaded user with no hash, deny kept, membership kept); each fails under its mutation. go vet ./..., go vet -tags integration ./..., go test ./... pass in modules/mesh-grants. Reviewed in two rounds (mesh-code-reviewer), approved at ab2bbe9ff6.

Before the put. The list its build seals is compared with the loaded list, permission by permission, before it is put on novox.

Undo. Revert the merge commit.

https://claude.ai/code/session_01NcbgfFfQ4Z9UE5jK32PmE5

Recovery fix under the instruction recovery-fixes-merge-and-tell: merged by the session, the operator told on Telegram. The operator asked it delivered (2026-11-07 ~23:2x CET). **Cause.** mesh-grants c97d021f (#170) sealed at 23:09 CET a user list composed from the 10 bootstrapped seats only (the seat list unread): it dropped ledger.novox.mesh-knowledge and about 40 users' permissions (every tool runner's node seats, the node-engines' vault reads, the build modules' seat queues). holdsBack checked lost users only, and a held module's ledger user was not kept (held.go). The list did not load (the bus still runs the 20:38Z list); 682fabee was put back. Evidence: issue 1966 note 67. **Change.** While the seat list is unread or a pass is placed by the haves: every user of the loaded list and of the list in force is sealed with the union of what the pass composes and what those lists give it, every deny any list says kept; a list that still takes a permission or a deny from a loaded user is held (user-list-held, naming each); a published membership is never narrowed; a held module keeps its ledger user. Once the seat list is read and the assignments view answers, none of this applies. **Quick vs thorough.** Quick: this keep. Thorough: the bootstrap order derived by the module graph (the assigner's views and the seat list before the grants part composes), noted on issue 1966. **Tests.** Table rows in grants_test.go (seat list unread, placed by haves, a whole pass, a loaded user with no hash, deny kept, membership kept); each fails under its mutation. go vet ./..., go vet -tags integration ./..., go test ./... pass in modules/mesh-grants. Reviewed in two rounds (mesh-code-reviewer), approved at ab2bbe9ff64d1a4fcabec8be2d0d7660d16ec31c. **Before the put.** The list its build seals is compared with the loaded list, permission by permission, before it is put on novox. **Undo.** Revert the merge commit. https://claude.ai/code/session_01NcbgfFfQ4Z9UE5jK32PmE5
mesh-tools added 2 commits 2026-11-07 22:35:20 +00:00
Issue 1966: the list sealed 2026-11-07 23:09, composed while the seat list was unread
(only the bootstrapped seats compose), took the node seats from the tool runners, the
vault's reads from the node-engines and the seat queues from the build modules, and left
out ledger.novox.mesh-knowledge.

- While the seat list is unread (the gate's MayAct with no seat) or a pass is placed by
  the haves, each user of the loaded list and of the list in force is sealed with the
  union of what the pass composes and what those lists give it (publish, subscribe,
  responses; a deny only where every list saying one denies it), kept the way a refused
  principal is; the users so kept are the pass's kept_loaded.
- In such a pass a list that still takes a permission from, or leaves out, a loaded user
  is held (user-list-held), naming each user and how many permissions it loses.
- A held module keeps its ledger account, ledger.<node>.<module>, with its other users:
  heldModuleUsers matched <node>.<module>[.<process>] only, which dropped the ledger user.

Claude-Session: https://claude.ai/code/session_01NcbgfFfQ4Z9UE5jK32PmE5
mesh-grants: a partial pass keeps every deny and every published membership
mesh/delivery merged: source.main moved to novox/mesh-delivery@cd7f85c74a75
ab2bbe9ff6
Review round 1 of issue 1966's keep-what-is-loaded fix.

- KeepLoaded intersected the denies, and the composer gives every composed user an empty
  deny, so a user in force with a wide publish and a deny was sealed with no deny. The
  union of every deny any list says is kept now, and Losses counts a deny dropped.
- A pass composing part of the mesh (the seat list unread, or placed by the haves) no
  longer narrows a published membership: one whose published value serves, hears or gives
  more than the pass composes is kept as published and said so (not_published), so a tool
  runner or a seat holder goes on serving what it serves while keeping its login.

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

Delivery novox/mesh-delivery@ab2bbe9ff64d — merged since 2026-11-07T22:35:25Z

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

Transitions

  • 2026-11-07 22:35 (new) → proposed (announced): novox/mesh-delivery#171's head announced
  • 2026-11-07 22:35 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 22:35 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@ab2bbe9ff64d` — **merged** since 2026-11-07T22:35:25Z **Source** — source.main moved to novox/mesh-delivery@cd7f85c74a75. Whether it reached the machines is `mesh-delivery-view`'s, derived from `source.main`, the wants and the haves. **Transitions** - 2026-11-07 22:35 (new) → proposed (announced): novox/mesh-delivery#171's head announced - 2026-11-07 22:35 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 22:35 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 cd7f85c74a into main 2026-11-07 22:35:24 +00:00
mesh-tools deleted branch fix/1966-grants-keeps-what-is-loaded 2026-11-07 22:35:25 +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#171