Two fixes in one release of mesh-delivery, which the registry group (issue 1966) needs before its own push.
The indexer validates its successor with the seat definitions its revision carries (issue 1966; ADR 0633 §1 and §6 as of v33). The running indexer's manifest validator used a built-in seat list, so it would have refused the registry group's indexer (which serves seat-definitions on mesh-catalog and invokes node-engine.manifest-reads), and the new indexer would never have run. Now the running indexer, and the check's validator (cmd/mesh-judge), use the definitions the merges carry. A refusal is said on take-in.pending (refused) and in indexer_pending. The indexer fixes its own build at its start (ADR 0639 §7), and an indexer that cannot learn it says own build unknown on take-in.pending (§8).
A try is a delivery group's check at exact commits (issue 1921; ADR 0637, ADR 0638, ADR 0639). checker_try takes members (a repository and an exact commit each) and runs the group check's own code: each member merged onto its trunk, both levels, the manifest validator on the members' heads, and the composition on every placed node. It names every failure and owes the forge nothing. The checker says try.started and try.ended on its stream checks (an end is said again until acknowledged); the indexer writes and deletes the try's candidate from them, and recovers open tries at its start through the new tool checker_tries (consumer first, then recovery, then events). New tools: checker_tries, indexer_try_candidates, indexer_drop_try_candidate, indexer_recover_tries. A try's candidate never reaches the assigner, the gate or the forge bridge; the builder builds its fingerprints. The checker places mesh-contracts and mesh-delivery beside mesh-sdk.
Quick or thorough: the thorough fix was chosen for both: the try runs the check's own code, so the two cannot drift; the successor is validated with its own definitions, never the built-in list.
Tested: unit and integration levels green in the indexer, takein, checker, view, watchman and sdk; no test function added (mesh-delivery is over its budget, cases are table rows); both manifest validators (trunk and change) accept every manifest. Ordering edge in this release: the new indexer starts first (a pending revision it names), while the old checker does not serve checker_tries; the recovery then fails loudly and is asked again on the checker's next try event (ADR 0639 §1).
The review: three rounds and a fourth short look limited to round 3's four findings (a bent rule, said to the operator); notes on issues 1921 and 1966.
Reviewed-by: mesh-code-reviewer@shanks at f9578cb7b4
Two fixes in one release of mesh-delivery, which the registry group (issue 1966) needs before its own push.
**The indexer validates its successor with the seat definitions its revision carries** (issue 1966; ADR 0633 §1 and §6 as of v33). The running indexer's manifest validator used a built-in seat list, so it would have refused the registry group's indexer (which serves `seat-definitions` on `mesh-catalog` and invokes `node-engine.manifest-reads`), and the new indexer would never have run. Now the running indexer, and the check's validator (`cmd/mesh-judge`), use the definitions the merges carry. A refusal is said on `take-in.pending` (`refused`) and in `indexer_pending`. The indexer fixes its own build at its start (ADR 0639 §7), and an indexer that cannot learn it says `own build unknown` on `take-in.pending` (§8).
**A try is a delivery group's check at exact commits** (issue 1921; ADR 0637, ADR 0638, ADR 0639). `checker_try` takes `members` (a repository and an exact commit each) and runs the group check's own code: each member merged onto its trunk, both levels, the manifest validator on the members' heads, and the composition on every placed node. It names every failure and owes the forge nothing. The checker says `try.started` and `try.ended` on its stream `checks` (an end is said again until acknowledged); the indexer writes and deletes the try's candidate from them, and recovers open tries at its start through the new tool `checker_tries` (consumer first, then recovery, then events). New tools: `checker_tries`, `indexer_try_candidates`, `indexer_drop_try_candidate`, `indexer_recover_tries`. A try's candidate never reaches the assigner, the gate or the forge bridge; the builder builds its fingerprints. The checker places mesh-contracts and mesh-delivery beside mesh-sdk.
Quick or thorough: the thorough fix was chosen for both: the try runs the check's own code, so the two cannot drift; the successor is validated with its own definitions, never the built-in list.
Tested: unit and integration levels green in the indexer, takein, checker, view, watchman and sdk; no test function added (mesh-delivery is over its budget, cases are table rows); both manifest validators (trunk and change) accept every manifest. Ordering edge in this release: the new indexer starts first (a pending revision it names), while the old checker does not serve `checker_tries`; the recovery then fails loudly and is asked again on the checker's next try event (ADR 0639 §1).
The review: three rounds and a fourth short look limited to round 3's four findings (a bent rule, said to the operator); notes on issues 1921 and 1966.
Reviewed-by: mesh-code-reviewer@shanks at f9578cb7b41893e1c3b1e69738722a917c1d8425
https://claude.ai/code/session_01NcbgfFSnn24M3GcqttoU7i
The take-in's dry run reads the contracts modules' definitions of the revision's merges and puts them over the seats while it judges; cmd/mesh-judge puts the request's seats over its own. A refusal of the named indexer's manifest is said on take-in.pending and in indexer_pending.
Claude-Session: https://claude.ai/code/session_01NcbgfFSnn24M3GcqttoU7i
A try names several repositories, each the exact commit asked. A whole try (not narrowed to a level or
tests) runs the group check's own path: the manifest validator, the module graph and the composition on every
placed node, reading the indexer's candidate of the try's group. A try with no such candidate is an error that
says so, never a pass. A try's candidate is no check: the checker leaves it alone and owes the forge nothing.
Claude-Session: https://claude.ai/code/session_01NcbgfFSnn24M3GcqttoU7i
A whole try has no pull request, yet compose-candidate and the manifest validator read the indexer's
candidate of a group. The indexer reads the checker's tries, writes candidates.<try id> (number 0 per member) from the
previews, judges its manifests with the seat definitions the members carry, leaves try-* alone in the open message,
deletes it when the try ends, and has a tool that reads and one that drops it.
Claude-Session: https://claude.ai/code/session_01NcbgfFSnn24M3GcqttoU7i
The checker says try.started (members at their commits) and try.ended for a whole try; the indexer writes and
deletes the candidate from them and finds the open tries again at its start through checker_tries, never reading
the checker's state. The try's digests are judged inside the one pass that takes the seats; the definitions of every
contracts module of each member are read; the config declarations leave a try's candidate alone.
Claude-Session: https://claude.ai/code/session_01NcbgfFSnn24M3GcqttoU7i
mesh-sdk compares its bootstrapped seat definitions with their contracts files, read beside it; the checker
places both, at the group's head for a member, else at the trunk, for a check and for a group try alike.
Claude-Session: https://claude.ai/code/session_01NcbgfFSnn24M3GcqttoU7i
Deliverynovox/mesh-delivery@f9578cb7b418 — merged since 2026-11-05T18:34:55Z
Source — source.main moved to novox/mesh-delivery@abe9ea3796. Whether it reached the machines is mesh-delivery-view's, derived from source.main, the wants and the haves.
Transitions
2026-11-05 18:27 (new) → proposed (announced): novox/mesh-delivery#155's head announced
2026-11-05 18:27 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-05 18:34 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@f9578cb7b418` — **merged** since 2026-11-05T18:34:55Z
**Source** — source.main moved to novox/mesh-delivery@abe9ea3796ea. Whether it reached the machines is `mesh-delivery-view`'s, derived from `source.main`, the wants and the haves.
**Transitions**
- 2026-11-05 18:27 (new) → proposed (announced): novox/mesh-delivery#155's head announced
- 2026-11-05 18:27 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-05 18:34 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.
Two fixes in one release of mesh-delivery, which the registry group (issue 1966) needs before its own push.
The indexer validates its successor with the seat definitions its revision carries (issue 1966; ADR 0633 §1 and §6 as of v33). The running indexer's manifest validator used a built-in seat list, so it would have refused the registry group's indexer (which serves
seat-definitionsonmesh-catalogand invokesnode-engine.manifest-reads), and the new indexer would never have run. Now the running indexer, and the check's validator (cmd/mesh-judge), use the definitions the merges carry. A refusal is said ontake-in.pending(refused) and inindexer_pending. The indexer fixes its own build at its start (ADR 0639 §7), and an indexer that cannot learn it saysown build unknownontake-in.pending(§8).A try is a delivery group's check at exact commits (issue 1921; ADR 0637, ADR 0638, ADR 0639).
checker_trytakesmembers(a repository and an exact commit each) and runs the group check's own code: each member merged onto its trunk, both levels, the manifest validator on the members' heads, and the composition on every placed node. It names every failure and owes the forge nothing. The checker saystry.startedandtry.endedon its streamchecks(an end is said again until acknowledged); the indexer writes and deletes the try's candidate from them, and recovers open tries at its start through the new toolchecker_tries(consumer first, then recovery, then events). New tools:checker_tries,indexer_try_candidates,indexer_drop_try_candidate,indexer_recover_tries. A try's candidate never reaches the assigner, the gate or the forge bridge; the builder builds its fingerprints. The checker places mesh-contracts and mesh-delivery beside mesh-sdk.Quick or thorough: the thorough fix was chosen for both: the try runs the check's own code, so the two cannot drift; the successor is validated with its own definitions, never the built-in list.
Tested: unit and integration levels green in the indexer, takein, checker, view, watchman and sdk; no test function added (mesh-delivery is over its budget, cases are table rows); both manifest validators (trunk and change) accept every manifest. Ordering edge in this release: the new indexer starts first (a pending revision it names), while the old checker does not serve
checker_tries; the recovery then fails loudly and is asked again on the checker's next try event (ADR 0639 §1).The review: three rounds and a fourth short look limited to round 3's four findings (a bent rule, said to the operator); notes on issues 1921 and 1966.
Reviewed-by: mesh-code-reviewer@shanks at
f9578cb7b4https://claude.ai/code/session_01NcbgfFSnn24M3GcqttoU7i
Delivery
novox/mesh-delivery@f9578cb7b418— merged since 2026-11-05T18:34:55ZSource — source.main moved to novox/mesh-delivery@abe9ea3796. 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.