Issue 1966, a recovery fix (instruction recovery-fixes-merge-and-tell). Group fix/1966-requires-state: mesh-sdk (this), mesh-tools, mesh-delivery.
Live case. From 11:38 UTC no build could be stored: distribution 19c3a0ff keeps its state as key-value entries in requires (ADR 0595 §1), and the tool runner issued state only from the old state list ("distribution keeps and reads no state called transfers ... issued: none"). The fix's own build could only be stored through that seat, so the tool runner and the grants part built from these heads were placed on novox by hand at the operator's terminal (12:3x and 12:45 UTC); a build stored again at 12:46:31. This group makes those hand builds the normal ones.
Change.Membership.StateIssued and StateNames (an old state entry wins; otherwise a key-value binding is issued by its local name, writable) and catalogue.KeptStates: the one rule the tool runner, the grants part and the manifest validator call.
Quick or thorough. Thorough: one shared rule in mesh-sdk instead of a fallback in each reader; the kind was met twice (issue 249, and now distribution and mesh-knowledge). Tests: rows in the existing membership and catalogue tests, which fail without the change.
Check. Its check is expected to fail on the checker's composition-size fault lead-47 fixes next (issue 1966 note 130), not on this change; the merge needs the operator's Approve of that red check.
Reviewed-by: mesh-code-reviewer@shanks at 17475257d1
Issue 1966, a recovery fix (instruction recovery-fixes-merge-and-tell). Group fix/1966-requires-state: mesh-sdk (this), mesh-tools, mesh-delivery.
**Live case.** From 11:38 UTC no build could be stored: distribution 19c3a0ff keeps its state as key-value entries in `requires` (ADR 0595 §1), and the tool runner issued state only from the old `state` list ("distribution keeps and reads no state called transfers ... issued: none"). The fix's own build could only be stored through that seat, so the tool runner and the grants part built from these heads were placed on novox by hand at the operator's terminal (12:3x and 12:45 UTC); a build stored again at 12:46:31. This group makes those hand builds the normal ones.
**Change.** `Membership.StateIssued` and `StateNames` (an old `state` entry wins; otherwise a key-value binding is issued by its local name, writable) and `catalogue.KeptStates`: the one rule the tool runner, the grants part and the manifest validator call.
**Quick or thorough.** Thorough: one shared rule in mesh-sdk instead of a fallback in each reader; the kind was met twice (issue 249, and now distribution and mesh-knowledge). Tests: rows in the existing membership and catalogue tests, which fail without the change.
**Check.** Its check is expected to fail on the checker's composition-size fault lead-47 fixes next (issue 1966 note 130), not on this change; the merge needs the operator's Approve of that red check.
Reviewed-by: mesh-code-reviewer@shanks at 17475257d15f8fc9d0b082dbd30085e83510f973
https://claude.ai/code/session_01NcbgfFSnn24M3GcqttoU7i
A key-value entry asked in requires (ADR 0595) was bound but never issued
as a state, because each reader read the old state list alone (issue 1966).
Membership.StateIssued and StateNames, and catalogue.KeptStates, are the one
rule the tool runner, the grants part and the manifest validator call.
Claude-Session: https://claude.ai/code/session_01NcbgfFSnn24M3GcqttoU7i
Deliverynovox/mesh-sdk@17475257d15f — merged since 2026-11-09T12:56:34Z
Source — source.main moved to novox/mesh-sdk@0177432196. Whether it reached the machines is mesh-delivery-view's, derived from source.main, the wants and the haves.
2026-11-09 12:49 (new) → proposed (announced): novox/mesh-sdk#177's head announced
2026-11-09 12:49 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-09 12:56 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-sdk@17475257d15f` — **merged** since 2026-11-09T12:56:34Z
**Source** — source.main moved to novox/mesh-sdk@017743219669. Whether it reached the machines is `mesh-delivery-view`'s, derived from `source.main`, the wants and the haves.
**Group** `fix/1966-requires-state`: novox/mesh-delivery@a78c5700fdf4, novox/mesh-sdk@17475257d15f, novox/mesh-tools@8052fd14f4fd
**Transitions**
- 2026-11-09 12:49 (new) → proposed (announced): novox/mesh-sdk#177's head announced
- 2026-11-09 12:49 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-09 12:56 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, a recovery fix (instruction recovery-fixes-merge-and-tell). Group fix/1966-requires-state: mesh-sdk (this), mesh-tools, mesh-delivery.
Live case. From 11:38 UTC no build could be stored: distribution 19c3a0ff keeps its state as key-value entries in
requires(ADR 0595 §1), and the tool runner issued state only from the oldstatelist ("distribution keeps and reads no state called transfers ... issued: none"). The fix's own build could only be stored through that seat, so the tool runner and the grants part built from these heads were placed on novox by hand at the operator's terminal (12:3x and 12:45 UTC); a build stored again at 12:46:31. This group makes those hand builds the normal ones.Change.
Membership.StateIssuedandStateNames(an oldstateentry wins; otherwise a key-value binding is issued by its local name, writable) andcatalogue.KeptStates: the one rule the tool runner, the grants part and the manifest validator call.Quick or thorough. Thorough: one shared rule in mesh-sdk instead of a fallback in each reader; the kind was met twice (issue 249, and now distribution and mesh-knowledge). Tests: rows in the existing membership and catalogue tests, which fail without the change.
Check. Its check is expected to fail on the checker's composition-size fault lead-47 fixes next (issue 1966 note 130), not on this change; the merge needs the operator's Approve of that red check.
Reviewed-by: mesh-code-reviewer@shanks at
17475257d1https://claude.ai/code/session_01NcbgfFSnn24M3GcqttoU7i
Delivery
novox/mesh-sdk@17475257d15f— merged since 2026-11-09T12:56:34ZSource — source.main moved to novox/mesh-sdk@0177432196. Whether it reached the machines is
mesh-delivery-view's, derived fromsource.main, the wants and the haves.Group
fix/1966-requires-state: novox/mesh-delivery@a78c5700fd, novox/mesh-sdk@17475257d1, novox/mesh-tools@8052fd14f4Transitions
The commit's note under
refs/notes/mesh-plankeeps every transition of this change up to its merge:git log --notes=mesh-plan.