The assigner reads the seat list, so a proposal no longer refuses a replicated seat (issue 1966, recovery) #183

Merged
mesh-tools merged 2 commits from fix/1966-assigner-verbs-seat-list into main 2026-11-08 23:39:24 +00:00
Member

Recovery fix (recovery-fixes-merge-and-tell; the operator: "you can deliver stuff yourself", 2026-11-08).

Symptom. mesh-module-assigner.propose refused every proposal tonight with "the seat mesh-dns-resolver, held once for the mesh, is held on ace and novox". That seat is replicated by its definition. So fix-1965's registry seats (go-package-registry, container-image-registry, oci-artifact-registry) could get no holder on record.

Cause. No part of the assigner read the seat list, neither the process nor the tools bundle. catalogue.SeatNamed knew no seat beyond the bootstrapped ones, and the check (internal/assignment/check.go) treated every unknown mesh seat as held once. The seat-holders state also marked every seat as outside the list.

Fix.

  • Both runtimes follow the seat list as grants does (new cmd/mesh-delivery-assigner/seatlist.go) and give it to the catalogue at every change.
  • While the list is unread, an unknown mesh seat waits (SeatListWaits) instead of being judged held once, a proposal is not ended, and seat-holders is not written.
  • New tools assigner_seat_list and assigner_seat_list_again.
  • The manifest adds the seat-definitions verb to invokes and the two seat-list events to consumes.

Tests. Rows in assignments_test.go and seat_tools_test.go: the replicated seat passes; an unlisted seat waits while the list is unread; a proposal of mesh-dns-resolver on two nodes waits while unread and is laid once read. They failed without the fix. go vet (plain and integration) and go test ./... pass in the assigner, and go test in the indexer, checker and grants. The indexer's judge, built from trunk, accepts the assigner's manifest; no verdict of 181 manifests differs.

Left, noted on issue 1966.

  • The seat verbs' empty descriptions belong to the console in mesh-tools: it does not fill a verb's description from its definition.
  • The seat-list reader is now copied in four modules (grants, checker, indexer, assigner) and belongs in mesh-sdk seatlist.

Undo. Revert this merge.

https://claude.ai/code/session_01NcbgfFfQ4Z9UE5jK32PmE5

Recovery fix (recovery-fixes-merge-and-tell; the operator: "you can deliver stuff yourself", 2026-11-08). **Symptom.** `mesh-module-assigner.propose` refused every proposal tonight with "the seat mesh-dns-resolver, held once for the mesh, is held on ace and novox". That seat is replicated by its definition. So fix-1965's registry seats (`go-package-registry`, `container-image-registry`, `oci-artifact-registry`) could get no holder on record. **Cause.** No part of the assigner read the seat list, neither the process nor the tools bundle. `catalogue.SeatNamed` knew no seat beyond the bootstrapped ones, and the check (internal/assignment/check.go) treated every unknown mesh seat as held once. The seat-holders state also marked every seat as outside the list. **Fix.** - Both runtimes follow the seat list as grants does (new cmd/mesh-delivery-assigner/seatlist.go) and give it to the catalogue at every change. - While the list is unread, an unknown mesh seat waits (`SeatListWaits`) instead of being judged held once, a proposal is not ended, and seat-holders is not written. - New tools `assigner_seat_list` and `assigner_seat_list_again`. - The manifest adds the seat-definitions verb to invokes and the two seat-list events to consumes. **Tests.** Rows in assignments_test.go and seat_tools_test.go: the replicated seat passes; an unlisted seat waits while the list is unread; a proposal of mesh-dns-resolver on two nodes waits while unread and is laid once read. They failed without the fix. `go vet` (plain and integration) and `go test ./...` pass in the assigner, and `go test` in the indexer, checker and grants. The indexer's judge, built from trunk, accepts the assigner's manifest; no verdict of 181 manifests differs. **Left, noted on issue 1966.** - The seat verbs' empty descriptions belong to the console in mesh-tools: it does not fill a verb's description from its definition. - The seat-list reader is now copied in four modules (grants, checker, indexer, assigner) and belongs in mesh-sdk seatlist. **Undo.** Revert this merge. https://claude.ai/code/session_01NcbgfFfQ4Z9UE5jK32PmE5
mesh-tools added 2 commits 2026-11-08 23:39:19 +00:00
A mesh seat held on two nodes was refused as held once whenever catalogue did
not name it, and a host that has not read the seat list holds only the
bootstrapped definitions: mesh-dns-resolver, a replicated seat, refused every
proposal (ADR 0636 §1).

Claude-Session: https://claude.ai/code/session_01NcbgfFfQ4Z9UE5jK32PmE5
The assigner's process and its seat verbs read the seat list from the seat mesh-catalog (issue 1966)
mesh/delivery merged: source.main moved to novox/mesh-delivery@4a59c17c6886
mesh/check checking e5f782cc07d4 on 4a59c17c6886
e5f782cc07
Neither runtime of the assigner gave catalogue a seat list, so propose judged
every mesh seat as held once (mesh-dns-resolver, replicated, refused every
proposal) and seat-holders marked every seat outside the list. Both now follow
the list as the grants part does (ADR 0636 §1, §4, §7): a proposal laid again
is not ended and seat-holders is not written until the list is read, and the
two seat list tools read and read it again.

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

Delivery novox/mesh-delivery@e5f782cc07d4 — merged since 2026-11-08T23:39:25Z

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

Transitions

  • 2026-11-08 23:39 (new) → proposed (announced): novox/mesh-delivery#183's head announced
  • 2026-11-08 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-08 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@e5f782cc07d4` — **merged** since 2026-11-08T23:39:25Z **Source** — source.main moved to novox/mesh-delivery@4a59c17c6886. Whether it reached the machines is `mesh-delivery-view`'s, derived from `source.main`, the wants and the haves. **Transitions** - 2026-11-08 23:39 (new) → proposed (announced): novox/mesh-delivery#183's head announced - 2026-11-08 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-08 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 4a59c17c68 into main 2026-11-08 23:39:24 +00:00
mesh-tools deleted branch fix/1966-assigner-verbs-seat-list 2026-11-08 23:39:24 +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#183