Issue 1966 (recovery before design 47's milestone G push; prepare finding F21).
A put without hold never ended against a node that composes its own: applied also matched the have's composition digest to the put's, which a self-composing node never has. The puts of mesh-host eb5e6b03 stood at wanted from about 10:47 to 18:08 UTC on 2026-11-09, pinning the want until a hand release. ADR 0546 §5: a put without hold ends once the node runs it healthy; a held put keeps its composition check. assigner_puts now says older-than-newest for a put that stands at another build than the newest.
Quick fix: release each such put by hand (assigner_release), recurring with every put. Thorough fix (chosen): the put ends itself on the fingerprint. Met twice (the eb5e6b03 puts, and milestone G's one logged put of its own indexer), so thorough. Milestone G moves the end onto the node-engine seat's running event (design 47, round 3).
No new read of another module's state: the assigner already reads the node's have (puts.go). Tests: rows in the put table (wants_test.go) and an assertion in pass_test.go; both fail without the change.
Reviewed-by: mesh-code-reviewer@shanks at b71358e2cc
Issue 1966 (recovery before design 47's milestone G push; prepare finding F21).
A put without hold never ended against a node that composes its own: `applied` also matched the have's composition digest to the put's, which a self-composing node never has. The puts of mesh-host eb5e6b03 stood at wanted from about 10:47 to 18:08 UTC on 2026-11-09, pinning the want until a hand release. ADR 0546 §5: a put without hold ends once the node runs it healthy; a held put keeps its composition check. `assigner_puts` now says `older-than-newest` for a put that stands at another build than the newest.
Quick fix: release each such put by hand (assigner_release), recurring with every put. Thorough fix (chosen): the put ends itself on the fingerprint. Met twice (the eb5e6b03 puts, and milestone G's one logged put of its own indexer), so thorough. Milestone G moves the end onto the node-engine seat's running event (design 47, round 3).
No new read of another module's state: the assigner already reads the node's have (puts.go). Tests: rows in the put table (wants_test.go) and an assertion in pass_test.go; both fail without the change.
Reviewed-by: mesh-code-reviewer@shanks at b71358e2cc14e73d0447d06d9865ccfbb63d7bc6
https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
A put with hold false waited for the node's composition digest to equal its own and never ended when the node composes its own,
pinning the module's want (issue 1966, F21).
Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
Deliverynovox/mesh-delivery@b71358e2cc14 — merged since 2026-11-09T19:37:54Z
Source — source.main moved to novox/mesh-delivery@05e21fd8a3. Whether it reached the machines is mesh-delivery-view's, derived from source.main, the wants and the haves.
Transitions
2026-11-09 19:03 (new) → proposed (announced): novox/mesh-delivery#192's head announced
2026-11-09 19:03 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 19:37 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@b71358e2cc14` — **merged** since 2026-11-09T19:37:54Z
**Source** — source.main moved to novox/mesh-delivery@05e21fd8a382. Whether it reached the machines is `mesh-delivery-view`'s, derived from `source.main`, the wants and the haves.
**Transitions**
- 2026-11-09 19:03 (new) → proposed (announced): novox/mesh-delivery#192's head announced
- 2026-11-09 19:03 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 19:37 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 (recovery before design 47's milestone G push; prepare finding F21).
A put without hold never ended against a node that composes its own:
appliedalso matched the have's composition digest to the put's, which a self-composing node never has. The puts of mesh-host eb5e6b03 stood at wanted from about 10:47 to 18:08 UTC on 2026-11-09, pinning the want until a hand release. ADR 0546 §5: a put without hold ends once the node runs it healthy; a held put keeps its composition check.assigner_putsnow saysolder-than-newestfor a put that stands at another build than the newest.Quick fix: release each such put by hand (assigner_release), recurring with every put. Thorough fix (chosen): the put ends itself on the fingerprint. Met twice (the eb5e6b03 puts, and milestone G's one logged put of its own indexer), so thorough. Milestone G moves the end onto the node-engine seat's running event (design 47, round 3).
No new read of another module's state: the assigner already reads the node's have (puts.go). Tests: rows in the put table (wants_test.go) and an assertion in pass_test.go; both fail without the change.
Reviewed-by: mesh-code-reviewer@shanks at
b71358e2cchttps://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
Delivery
novox/mesh-delivery@b71358e2cc14— merged since 2026-11-09T19:37:54ZSource — source.main moved to novox/mesh-delivery@05e21fd8a3. 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.