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.
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
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
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
Deliverynovox/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`.
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.
Recovery fix (recovery-fixes-merge-and-tell; the operator: "you can deliver stuff yourself", 2026-11-08).
Symptom.
mesh-module-assigner.proposerefused 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.SeatNamedknew 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.
SeatListWaits) instead of being judged held once, a proposal is not ended, and seat-holders is not written.assigner_seat_listandassigner_seat_list_again.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) andgo test ./...pass in the assigner, andgo testin 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.
Undo. Revert this merge.
https://claude.ai/code/session_01NcbgfFfQ4Z9UE5jK32PmE5
Delivery
novox/mesh-delivery@e5f782cc07d4— merged since 2026-11-08T23:39:25ZSource — source.main moved to novox/mesh-delivery@4a59c17c68. 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.