Recovery fix under issue 1966 (instruction section recovery-fixes-merge-and-tell).
Symptom (live 2026-11-08 11:58 local): mesh-module-assigner.propose (the holder correction of seat mesh-catalog) refused: "the indexer's modules cannot be listed: mesh-delivery-assigner keeps and reads no state called mesh-delivery-indexer.modules". mesh-delivery-checker's checker_status and checker_pull fail the same way ("keeps and reads no state mesh-delivery-indexer.candidates").
Cause: tool-runner code read the indexer's states directly, which the manifests no longer declare under reads since they moved to the indexer's first views (ADR 0615 §1, ADR 0621); ADR 0596 §2 says another module's data is asked through its tools. Four places: the assigner's propose (lays), its mesh-wants verbs upgrade and bus, its assigner_put newest, and the checker's tools.
Fix: the assigner's indexerView asks mesh-delivery-indexer.<state> (first view, paged by after/next) through the tool runner; the checker's ownerRead asks indexer_read_candidates / indexer_read_modules. No manifest changes: both already invoke these tools, and the indexer's callers name the assigner and node-tools. A guard test fails on any literal stdio.State read in the checker's tools that its manifest does not declare. A sweep of the repository found no other refused read.
Quick vs thorough: quick = declare the indexer's states under reads again (against ADR 0596/0621); thorough = ask the owner's tools in all four places, sweep once, add the guard. Chosen: thorough; second module met with the same kind.
Tests: subtests and rows only (repository over the unit budget); they fail without the fix. go vet ./..., go vet -tags integration ./..., go test ./... pass in modules/mesh-delivery-assigner and modules/mesh-delivery-checker.
Noted, not changed: upgrade, bus and put newest read the modules view whole (~7.8 MB; manifests 3.4 MB) per call: acceptable for hand verbs, a by-key read is the later improvement.
Undo: revert both commits.
Reviewed-by: mesh-code-reviewer@shanks at 0a82e33518
Recovery fix under issue 1966 (instruction section recovery-fixes-merge-and-tell).
**Symptom (live 2026-11-08 11:58 local):** mesh-module-assigner.propose (the holder correction of seat mesh-catalog) refused: "the indexer's modules cannot be listed: mesh-delivery-assigner keeps and reads no state called mesh-delivery-indexer.modules". mesh-delivery-checker's checker_status and checker_pull fail the same way ("keeps and reads no state mesh-delivery-indexer.candidates").
**Cause:** tool-runner code read the indexer's states directly, which the manifests no longer declare under `reads` since they moved to the indexer's first views (ADR 0615 §1, ADR 0621); ADR 0596 §2 says another module's data is asked through its tools. Four places: the assigner's propose (`lays`), its mesh-wants verbs upgrade and bus, its assigner_put `newest`, and the checker's tools.
**Fix:** the assigner's `indexerView` asks `mesh-delivery-indexer.<state>` (first view, paged by after/next) through the tool runner; the checker's `ownerRead` asks `indexer_read_candidates` / `indexer_read_modules`. No manifest changes: both already invoke these tools, and the indexer's callers name the assigner and node-tools. A guard test fails on any literal `stdio.State` read in the checker's tools that its manifest does not declare. A sweep of the repository found no other refused read.
**Quick vs thorough:** quick = declare the indexer's states under `reads` again (against ADR 0596/0621); thorough = ask the owner's tools in all four places, sweep once, add the guard. Chosen: thorough; second module met with the same kind.
**Tests:** subtests and rows only (repository over the unit budget); they fail without the fix. go vet ./..., go vet -tags integration ./..., go test ./... pass in modules/mesh-delivery-assigner and modules/mesh-delivery-checker.
**Noted, not changed:** upgrade, bus and put newest read the modules view whole (~7.8 MB; manifests 3.4 MB) per call: acceptable for hand verbs, a by-key read is the later improvement.
**Undo:** revert both commits.
Reviewed-by: mesh-code-reviewer@shanks at 0a82e33518047ed80b4a1a713b424dd462e87a8b
https://claude.ai/code/session_01NcbgfFfQ4Z9UE5jK32PmE5
mesh-module-assigner.propose and mesh-wants' upgrade and bus read the indexer's
modules and manifests straight from its bus state, which the runtime refuses
since those reads moved to the indexer's first-view tools (ADR 0615 §1, ADR 0621):
"mesh-delivery-assigner keeps and reads no state called mesh-delivery-indexer.modules".
Another module's data is asked through its tools, never read from its state
(ADR 0596). The verbs now ask mesh-delivery-indexer.modules and .manifests through
the tool runner, every page, at each call; the manifest already invokes both and
the indexer answers them to the assigner.
Claude-Session: https://claude.ai/code/session_01NcbgfFfQ4Z9UE5jK32PmE5
mesh/check failed (3): mesh-build-go: the go.mod of novox/mesh-sdk at 396511b7a276, beside the change, cann…; and 2 more | 0a82e3351804 on 9c6bf236b6b1
The second instance of the kind: checker_status and checker_pull read the indexer's
candidates and modules from its bus state, which the checker's manifest does not
declare under reads, so the runtime refuses them ("keeps and reads no state
mesh-delivery-indexer.candidates"). They now ask indexer_read_candidates and
indexer_read_modules, the indexer's read tools the manifest already invokes: the
keys with no argument, one key's value with key (ADR 0596). The assigner's put
read its newest fingerprint from the same refused state and now asks the
indexer's first view of modules, as the seat verbs do. A sweep of every module
finds no other read of another module's state that its manifest does not declare;
the checker's tools carry a test that refuses one.
Claude-Session: https://claude.ai/code/session_01NcbgfFfQ4Z9UE5jK32PmE5
Deliverynovox/mesh-delivery@0a82e3351804 — merged since 2026-11-08T12:01:58Z
Source — source.main moved to novox/mesh-delivery@8f57df2d77. Whether it reached the machines is mesh-delivery-view's, derived from source.main, the wants and the haves.
Transitions
2026-11-08 11:04 (new) → proposed (announced): novox/mesh-delivery#176's head announced
2026-11-08 11:04 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 12:01 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@0a82e3351804` — **merged** since 2026-11-08T12:01:58Z
**Source** — source.main moved to novox/mesh-delivery@8f57df2d7757. Whether it reached the machines is `mesh-delivery-view`'s, derived from `source.main`, the wants and the haves.
**Transitions**
- 2026-11-08 11:04 (new) → proposed (announced): novox/mesh-delivery#176's head announced
- 2026-11-08 11:04 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 12:01 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 under issue 1966 (instruction section recovery-fixes-merge-and-tell).
Symptom (live 2026-11-08 11:58 local): mesh-module-assigner.propose (the holder correction of seat mesh-catalog) refused: "the indexer's modules cannot be listed: mesh-delivery-assigner keeps and reads no state called mesh-delivery-indexer.modules". mesh-delivery-checker's checker_status and checker_pull fail the same way ("keeps and reads no state mesh-delivery-indexer.candidates").
Cause: tool-runner code read the indexer's states directly, which the manifests no longer declare under
readssince they moved to the indexer's first views (ADR 0615 §1, ADR 0621); ADR 0596 §2 says another module's data is asked through its tools. Four places: the assigner's propose (lays), its mesh-wants verbs upgrade and bus, its assigner_putnewest, and the checker's tools.Fix: the assigner's
indexerViewasksmesh-delivery-indexer.<state>(first view, paged by after/next) through the tool runner; the checker'sownerReadasksindexer_read_candidates/indexer_read_modules. No manifest changes: both already invoke these tools, and the indexer's callers name the assigner and node-tools. A guard test fails on any literalstdio.Stateread in the checker's tools that its manifest does not declare. A sweep of the repository found no other refused read.Quick vs thorough: quick = declare the indexer's states under
readsagain (against ADR 0596/0621); thorough = ask the owner's tools in all four places, sweep once, add the guard. Chosen: thorough; second module met with the same kind.Tests: subtests and rows only (repository over the unit budget); they fail without the fix. go vet ./..., go vet -tags integration ./..., go test ./... pass in modules/mesh-delivery-assigner and modules/mesh-delivery-checker.
Noted, not changed: upgrade, bus and put newest read the modules view whole (~7.8 MB; manifests 3.4 MB) per call: acceptable for hand verbs, a by-key read is the later improvement.
Undo: revert both commits.
Reviewed-by: mesh-code-reviewer@shanks at
0a82e33518https://claude.ai/code/session_01NcbgfFfQ4Z9UE5jK32PmE5
The second instance of the kind: checker_status and checker_pull read the indexer's candidates and modules from its bus state, which the checker's manifest does not declare under reads, so the runtime refuses them ("keeps and reads no state mesh-delivery-indexer.candidates"). They now ask indexer_read_candidates and indexer_read_modules, the indexer's read tools the manifest already invokes: the keys with no argument, one key's value with key (ADR 0596). The assigner's put read its newest fingerprint from the same refused state and now asks the indexer's first view of modules, as the seat verbs do. A sweep of every module finds no other read of another module's state that its manifest does not declare; the checker's tools carry a test that refuses one. Claude-Session: https://claude.ai/code/session_01NcbgfFfQ4Z9UE5jK32PmE5Delivery
novox/mesh-delivery@0a82e3351804— merged since 2026-11-08T12:01:58ZSource — source.main moved to novox/mesh-delivery@8f57df2d77. 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.