Issue 1966 (notes 147-149): after a restart, a node-engine whose first read of the seat list met "no responders" composed on its bootstrapped list for good. On ace that held about 60 modules from 22:49 to 23:21 UTC on 2026-11-09 under a misleading "no artifact store", raised no condition, and its recovery verb answered no session. Met twice (2026-11-08, 2026-11-09), so the thorough fix.
Group fix/1966-seat-list-unread, one check, members pushed together: mesh-sdk (merge first; a build edge for the others), mesh-host, mesh-catalog, mesh-delivery.
S1 mesh-host: the node-engine's ask keeps the bus's "no responders" in its error.
S2 mesh-sdk: the seat list's reader asks again (busretry) while its ask reached no one (ADR 0636 §1, §4).
S3 mesh-host: seat-list and seat-list-again answer any person, node-tools (every console call is proved as node-tools, issue 627) and mesh-healers, as the node-engine seat's definition says.
S4 mesh-host: while the list is unread, a module whose seats are not all bootstrapped is held before its build is read, with a reason naming the bootstrapped seats; a pass refused whole begins with that line.
S5 mesh-host: the integration test of the node's first read is extended: a holder that answers "no responders" then serves is read by the same reader, with no event or hand act.
S6 mesh-catalog: the condition keeper reads the node-engine's findings, so ADR 0636 §1's condition is raised.
S7 mesh-catalog (claude-code), mesh-delivery (assigner, grants): node-tools on each seat-list-again caller list.
Quick fix: restart the node-engine once (done 2026-11-09 23:21 UTC on the operator's yes, hand act act-1794266688172849851-1). Thorough fix: this change, chosen because the kind was met twice, hid its cause behind another part's name and stopped every delivery to the machine.
Tests: every change is a row or subtest of an existing test and fails without its change; no repository's test count rises (mesh-host and mesh-delivery stay over their budgets, unchanged).
Manifest validator: the verdict on mesh-catalog modules/mesh-conditions/module.json (new read mesh-host.findings) is unproved until this pull request's check runs. A local re-creation against mesh-sdk's test copy of the seats accepted it in both the change and trunk cases, with no verdict differing; that is not the validator's live verdict.
Prepare and rulings: hq .work/1966-engine-seat-list/prepare.md.
Issue 1966 (notes 147-149): after a restart, a node-engine whose first read of the seat list met "no responders" composed on its bootstrapped list for good. On ace that held about 60 modules from 22:49 to 23:21 UTC on 2026-11-09 under a misleading "no artifact store", raised no condition, and its recovery verb answered no session. Met twice (2026-11-08, 2026-11-09), so the thorough fix.
Group fix/1966-seat-list-unread, one check, members pushed together: mesh-sdk (merge first; a build edge for the others), mesh-host, mesh-catalog, mesh-delivery.
- S1 mesh-host: the node-engine's ask keeps the bus's "no responders" in its error.
- S2 mesh-sdk: the seat list's reader asks again (busretry) while its ask reached no one (ADR 0636 §1, §4).
- S3 mesh-host: seat-list and seat-list-again answer any person, node-tools (every console call is proved as node-tools, issue 627) and mesh-healers, as the node-engine seat's definition says.
- S4 mesh-host: while the list is unread, a module whose seats are not all bootstrapped is held before its build is read, with a reason naming the bootstrapped seats; a pass refused whole begins with that line.
- S5 mesh-host: the integration test of the node's first read is extended: a holder that answers "no responders" then serves is read by the same reader, with no event or hand act.
- S6 mesh-catalog: the condition keeper reads the node-engine's findings, so ADR 0636 §1's condition is raised.
- S7 mesh-catalog (claude-code), mesh-delivery (assigner, grants): node-tools on each seat-list-again caller list.
Quick fix: restart the node-engine once (done 2026-11-09 23:21 UTC on the operator's yes, hand act act-1794266688172849851-1). Thorough fix: this change, chosen because the kind was met twice, hid its cause behind another part's name and stopped every delivery to the machine.
Tests: every change is a row or subtest of an existing test and fails without its change; no repository's test count rises (mesh-host and mesh-delivery stay over their budgets, unchanged).
Manifest validator: the verdict on mesh-catalog modules/mesh-conditions/module.json (new read mesh-host.findings) is unproved until this pull request's check runs. A local re-creation against mesh-sdk's test copy of the seats accepted it in both the change and trunk cases, with no verdict differing; that is not the validator's live verdict.
Prepare and rulings: hq .work/1966-engine-seat-list/prepare.md.
Reviewed-by: mesh-code-reviewer@shanks (2 rounds) at mesh-sdk 2f156e7f30508e9aaf06322b305036645c3ed266, mesh-host 5c353cfc7bf08d1503d5bd6ce28b6d704df51bab, mesh-catalog c39503e3227c0d6ac653d7d48b7103fd7c5fcad0, mesh-delivery b1343147e80f846b889467143f4ae145e4b682f7
Pushed-by: lead-47@shanks
https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
Their seat_list_again answered person.<name> and the healers, but every call
through the mesh MCP server is proved as its machine's tool runner (issue
627), so no operator's session could ask it; node-tools now stands for that
session, the kind met a second time in the node-engine (issue 1966). The
assigner's silent stand-in keeps the bus's retry bound short, since the
seat list's reader now asks again while its ask reached no one.
Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
Deliverynovox/mesh-delivery@b1343147e80f — merged since 2026-11-10T00:44:39Z
Source — source.main moved to novox/mesh-delivery@8d9683d844. Whether it reached the machines is mesh-delivery-view's, derived from source.main, the wants and the haves.
2026-11-10 00:21 (new) → proposed (announced): novox/mesh-delivery#197's head announced
2026-11-10 00:21 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-10 00:44 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@b1343147e80f` — **merged** since 2026-11-10T00:44:39Z
**Source** — source.main moved to novox/mesh-delivery@8d9683d844ec. Whether it reached the machines is `mesh-delivery-view`'s, derived from `source.main`, the wants and the haves.
**Group** `fix/1966-seat-list-unread`: novox/mesh-catalog@c39503e3227c, novox/mesh-delivery@b1343147e80f, novox/mesh-host@5c353cfc7bf0, novox/mesh-sdk@2f156e7f3050
**Transitions**
- 2026-11-10 00:21 (new) → proposed (announced): novox/mesh-delivery#197's head announced
- 2026-11-10 00:21 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-10 00:44 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 1966 (notes 147-149): after a restart, a node-engine whose first read of the seat list met "no responders" composed on its bootstrapped list for good. On ace that held about 60 modules from 22:49 to 23:21 UTC on 2026-11-09 under a misleading "no artifact store", raised no condition, and its recovery verb answered no session. Met twice (2026-11-08, 2026-11-09), so the thorough fix.
Group fix/1966-seat-list-unread, one check, members pushed together: mesh-sdk (merge first; a build edge for the others), mesh-host, mesh-catalog, mesh-delivery.
Quick fix: restart the node-engine once (done 2026-11-09 23:21 UTC on the operator's yes, hand act act-1794266688172849851-1). Thorough fix: this change, chosen because the kind was met twice, hid its cause behind another part's name and stopped every delivery to the machine.
Tests: every change is a row or subtest of an existing test and fails without its change; no repository's test count rises (mesh-host and mesh-delivery stay over their budgets, unchanged).
Manifest validator: the verdict on mesh-catalog modules/mesh-conditions/module.json (new read mesh-host.findings) is unproved until this pull request's check runs. A local re-creation against mesh-sdk's test copy of the seats accepted it in both the change and trunk cases, with no verdict differing; that is not the validator's live verdict.
Prepare and rulings: hq .work/1966-engine-seat-list/prepare.md.
Reviewed-by: mesh-code-reviewer@shanks (2 rounds) at mesh-sdk 2f156e7f30508e9aaf06322b305036645c3ed266, mesh-host 5c353cfc7bf08d1503d5bd6ce28b6d704df51bab, mesh-catalog c39503e3227c0d6ac653d7d48b7103fd7c5fcad0, mesh-delivery
b1343147e8Pushed-by: lead-47@shanks
https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
Delivery
novox/mesh-delivery@b1343147e80f— merged since 2026-11-10T00:44:39ZSource — source.main moved to novox/mesh-delivery@8d9683d844. Whether it reached the machines is
mesh-delivery-view's, derived fromsource.main, the wants and the haves.Group
fix/1966-seat-list-unread: novox/mesh-catalog@c39503e322, novox/mesh-delivery@b1343147e8, novox/mesh-host@5c353cfc7b, novox/mesh-sdk@2f156e7f30Transitions
The commit's note under
refs/notes/mesh-plankeeps every transition of this change up to its merge:git log --notes=mesh-plan.