Assigner: a backup ask whose want moved on is stale, and an ended ask is not written again when stale (issue 1966 note 165) #200

Merged
mesh-tools merged 2 commits from fix/1966-stale-ended-ask into main 2026-11-10 10:05:06 +00:00
Member

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)

https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ

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
mesh-tools added 2 commits 2026-11-10 10:04:07 +00:00
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
Assigner: the backup row proves the ask and its condition go with the move (issue 1966 note 165, review round 1)
mesh/delivery merged: source.main moved to novox/mesh-delivery@7ba8449ff67c
mesh/check checking 3841a950685b on 7ba8449ff67c
3841a95068
Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
Author
Member

Delivery novox/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`.
mesh-tools merged commit 7ba8449ff6 into main 2026-11-10 10:05:06 +00:00
mesh-tools deleted branch fix/1966-stale-ended-ask 2026-11-10 10:05:07 +00:00
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: novox/mesh-delivery#200