Issue 1966, note 165 (prepare and ruling: notes 166, 168). At 07:35 UTC 2026-11-10 the assigner wrote again the ended ask backup.novox.nats.fa58506e0c1e, a backup of a nats move superseded at ~01:40 UTC (nats runs 2b00b88a), and the operator was asked about a backup that no longer mattered.
What changes (modules/mesh-delivery-assigner only, no module.json change, no new exported name, no new state or mesh path):
staleAsk gains the backup case: a backup ask is stale when its module's want on the node is Removed or names another fingerprint; an absent want, or the same fingerprint at another composition, is not stale.
staleAsks clears the backup condition when it takes a stale backup ask away (the condition was never cleared outside tests); a failed clear keeps the ask for the next pass.
askAgain (the teller's ask-ended event and the bind read) runs the same staleAsk over the same world view before writing an ended ask again, and journals why it wrote nothing. The hand tool assigner_ask_again is unchanged (a person's word).
Quick or thorough: quick chosen. Thorough = one pure staleness rule (assign.StaleAsk) under every writer of an ask again, the hand tool included, with a conformance row per ask kind (~2.5 h); the assigner is rebuilt on ADR 0666's graph form in the joint milestone (W5), so the thorough rule is written as a requirement of W5's prepare (note 168) rather than built into code W5 replaces.
Acceptance criteria and their tests (rows only; mesh-delivery is over its test budget, no test function added):
1966/AC165-1 (unit): rows in TestAsksOfAFingerprintTheTrunkLeftBehindAreTakenAway: want at another fingerprint, want removed, trunk not read.
1966/AC165-2 (unit): subtests in TestAHoldAskedAgainAfterALiftAndARestartHasANewID: an ended backup ask whose want moved on or was removed is not written again.
1966/AC165-3 (unit): same fingerprint at another composition, and no want yet: not stale.
1966/AC165-4 (integration, TestABackupAnswerIsWrittenIntoTheNodesWant): after the trunk moves on, the backup ask leaves the asks state and its condition is cleared (fails without the change: 16 s timeout; passes in 1.4 s).
Checked at the head beside mesh-sdk 3176059, mesh-contracts 7fbfd77, mesh-networking f0ec726, mesh-catalog bfa4a085 (origin/main): go vet with and without -tags integration clean; the assigner's unit suite passes; TestABackupAnswerIsWrittenIntoTheNodesWant passes against an embedded bus. Live once delivered: the ask backup.novox.nats.fa58506e0c1e (asks revision 4501) is taken away at the first pass, as want.novox.nats names src2:2b00b88a.
Reviewed-by: mesh-code-reviewer@shanks (for lead-47@shanks) at 3841a95068 (round 1: one finding, fixed; round 2: approve)
Issue 1966, note 165 (prepare and ruling: notes 166, 168). At 07:35 UTC 2026-11-10 the assigner wrote again the ended ask backup.novox.nats.fa58506e0c1e, a backup of a nats move superseded at ~01:40 UTC (nats runs 2b00b88a), and the operator was asked about a backup that no longer mattered.
What changes (modules/mesh-delivery-assigner only, no module.json change, no new exported name, no new state or mesh path):
- staleAsk gains the backup case: a backup ask is stale when its module's want on the node is Removed or names another fingerprint; an absent want, or the same fingerprint at another composition, is not stale.
- staleAsks clears the backup condition when it takes a stale backup ask away (the condition was never cleared outside tests); a failed clear keeps the ask for the next pass.
- askAgain (the teller's ask-ended event and the bind read) runs the same staleAsk over the same world view before writing an ended ask again, and journals why it wrote nothing. The hand tool assigner_ask_again is unchanged (a person's word).
Quick or thorough: quick chosen. Thorough = one pure staleness rule (assign.StaleAsk) under every writer of an ask again, the hand tool included, with a conformance row per ask kind (~2.5 h); the assigner is rebuilt on ADR 0666's graph form in the joint milestone (W5), so the thorough rule is written as a requirement of W5's prepare (note 168) rather than built into code W5 replaces.
Acceptance criteria and their tests (rows only; mesh-delivery is over its test budget, no test function added):
- 1966/AC165-1 (unit): rows in TestAsksOfAFingerprintTheTrunkLeftBehindAreTakenAway: want at another fingerprint, want removed, trunk not read.
- 1966/AC165-2 (unit): subtests in TestAHoldAskedAgainAfterALiftAndARestartHasANewID: an ended backup ask whose want moved on or was removed is not written again.
- 1966/AC165-3 (unit): same fingerprint at another composition, and no want yet: not stale.
- 1966/AC165-4 (integration, TestABackupAnswerIsWrittenIntoTheNodesWant): after the trunk moves on, the backup ask leaves the asks state and its condition is cleared (fails without the change: 16 s timeout; passes in 1.4 s).
Checked at the head beside mesh-sdk 3176059, mesh-contracts 7fbfd77, mesh-networking f0ec726, mesh-catalog bfa4a085 (origin/main): go vet with and without -tags integration clean; the assigner's unit suite passes; TestABackupAnswerIsWrittenIntoTheNodesWant passes against an embedded bus. Live once delivered: the ask backup.novox.nats.fa58506e0c1e (asks revision 4501) is taken away at the first pass, as want.novox.nats names src2:2b00b88a.
Reviewed-by: mesh-code-reviewer@shanks (for lead-47@shanks) at 3841a950685b0000e387a04ea38c88b799ebdb95 (round 1: one finding, fixed; round 2: approve)
https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
The pass takes a backup ask away when its module's want on the node names another fingerprint or is removed, and clears its condition; askAgain asks the pass's staleAsk first for the event and the bind read. The hand tool is left as it is.
Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
Deliverynovox/mesh-delivery@3841a950685b — merged since 2026-11-10T10:05:09Z
Source — source.main moved to novox/mesh-delivery@7ba8449ff6. Whether it reached the machines is mesh-delivery-view's, derived from source.main, the wants and the haves.
Transitions
2026-11-10 10:04 (new) → proposed (announced): novox/mesh-delivery#200's head announced
2026-11-10 10: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-10 10:05 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@3841a950685b` — **merged** since 2026-11-10T10:05:09Z
**Source** — source.main moved to novox/mesh-delivery@7ba8449ff67c. Whether it reached the machines is `mesh-delivery-view`'s, derived from `source.main`, the wants and the haves.
**Transitions**
- 2026-11-10 10:04 (new) → proposed (announced): novox/mesh-delivery#200's head announced
- 2026-11-10 10: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-10 10:05 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, note 165 (prepare and ruling: notes 166, 168). At 07:35 UTC 2026-11-10 the assigner wrote again the ended ask backup.novox.nats.fa58506e0c1e, a backup of a nats move superseded at ~01:40 UTC (nats runs 2b00b88a), and the operator was asked about a backup that no longer mattered.
What changes (modules/mesh-delivery-assigner only, no module.json change, no new exported name, no new state or mesh path):
Quick or thorough: quick chosen. Thorough = one pure staleness rule (assign.StaleAsk) under every writer of an ask again, the hand tool included, with a conformance row per ask kind (~2.5 h); the assigner is rebuilt on ADR 0666's graph form in the joint milestone (W5), so the thorough rule is written as a requirement of W5's prepare (note 168) rather than built into code W5 replaces.
Acceptance criteria and their tests (rows only; mesh-delivery is over its test budget, no test function added):
Checked at the head beside mesh-sdk 3176059, mesh-contracts 7fbfd77, mesh-networking f0ec726, mesh-catalog bfa4a085 (origin/main): go vet with and without -tags integration clean; the assigner's unit suite passes; TestABackupAnswerIsWrittenIntoTheNodesWant passes against an embedded bus. Live once delivered: the ask backup.novox.nats.fa58506e0c1e (asks revision 4501) is taken away at the first pass, as want.novox.nats names src2:2b00b88a.
Reviewed-by: mesh-code-reviewer@shanks (for lead-47@shanks) at
3841a95068(round 1: one finding, fixed; round 2: approve)https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
Delivery
novox/mesh-delivery@3841a950685b— merged since 2026-11-10T10:05:09ZSource — source.main moved to novox/mesh-delivery@7ba8449ff6. 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.