Issue 774 (L3). Since 2026-10-29 the assigner wrote novox's wants every ~8 s with unchanged values; the node-engine composed on every put and asked the vault twice (about 1000 own answers an hour; the vault's hand-out record rolled every ~4.5 min). And record asks record.novox.{postgres,keycloak,mongodb} were taken away and raised again with a new id every pass, because staleAsk compared a placed node's digest only with the controller's compositions, so the operator's answer could never count. Now staleAsk keeps a record ask while the node's have waits for a yes on exactly that digest, and a put whose bytes the mirror already holds is skipped (all buckets). Visible change (reviewer): a node no longer retries a failed apply by the old 8-second churn; it retries on a change of want or composition, or on the node-engine's compose verb. Quick vs thorough: this is the source; the node-engine composing only on a changed want is the other half (next). Rows in TestARecordAskOfAHeldBackNodeSurvivesPassesAndItsYesMovesTheWant fail on main. gofmt, vet (both tags), go test pass.
Issue 774 (L3). Since 2026-10-29 the assigner wrote novox's wants every ~8 s with unchanged values; the node-engine composed on every put and asked the vault twice (about 1000 own answers an hour; the vault's hand-out record rolled every ~4.5 min). And record asks record.novox.{postgres,keycloak,mongodb} were taken away and raised again with a new id every pass, because staleAsk compared a placed node's digest only with the controller's compositions, so the operator's answer could never count. Now staleAsk keeps a record ask while the node's have waits for a yes on exactly that digest, and a put whose bytes the mirror already holds is skipped (all buckets). Visible change (reviewer): a node no longer retries a failed apply by the old 8-second churn; it retries on a change of want or composition, or on the node-engine's compose verb. Quick vs thorough: this is the source; the node-engine composing only on a changed want is the other half (next). Rows in TestARecordAskOfAHeldBackNodeSurvivesPassesAndItsYesMovesTheWant fail on main. gofmt, vet (both tags), go test pass.
Reviewed-by: rev-held@shanks at 7235e4fb921d69708186c821d22b8367e0806505
On novox the asks of postgres, keycloak and mongodb were judged stale against the controller's compositions, taken away and made again under a new id every pass (8 s), so no answer could count; and every put is a change the node composes again on.
Quick fix: the stale check keeps a record ask whose digest the node's have waits on; the pass skips a put whose value the bucket holds.
Thorough fix beside it (not here, another branch owns the file): the node-engine's composer composes again only when a want's value changed.
Deliverynovox/mesh-delivery@7235e4fb921d — merged since 2026-10-31T00:21:39Z
Source — source.main moved to novox/mesh-delivery@fd62a36041. Whether it reached the machines is mesh-delivery-view's, derived from source.main, the wants and the haves.
Transitions
2026-10-31 00:12 (new) → proposed (announced): novox/mesh-delivery#121's head announced
2026-10-31 00:12 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-10-31 00:21 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@7235e4fb921d` — **merged** since 2026-10-31T00:21:39Z
**Source** — source.main moved to novox/mesh-delivery@fd62a36041be. Whether it reached the machines is `mesh-delivery-view`'s, derived from `source.main`, the wants and the haves.
**Transitions**
- 2026-10-31 00:12 (new) → proposed (announced): novox/mesh-delivery#121's head announced
- 2026-10-31 00:12 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-10-31 00:21 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 774 (L3). Since 2026-10-29 the assigner wrote novox's wants every ~8 s with unchanged values; the node-engine composed on every put and asked the vault twice (about 1000 own answers an hour; the vault's hand-out record rolled every ~4.5 min). And record asks record.novox.{postgres,keycloak,mongodb} were taken away and raised again with a new id every pass, because staleAsk compared a placed node's digest only with the controller's compositions, so the operator's answer could never count. Now staleAsk keeps a record ask while the node's have waits for a yes on exactly that digest, and a put whose bytes the mirror already holds is skipped (all buckets). Visible change (reviewer): a node no longer retries a failed apply by the old 8-second churn; it retries on a change of want or composition, or on the node-engine's compose verb. Quick vs thorough: this is the source; the node-engine composing only on a changed want is the other half (next). Rows in TestARecordAskOfAHeldBackNodeSurvivesPassesAndItsYesMovesTheWant fail on main. gofmt, vet (both tags), go test pass.
Reviewed-by: rev-held@shanks at
7235e4fb92Delivery
novox/mesh-delivery@7235e4fb921d— merged since 2026-10-31T00:21:39ZSource — source.main moved to novox/mesh-delivery@fd62a36041. 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.