An assigner ask that ends at the channel without an answer is asked again under a new asking (issue 1966) #198

Merged
mesh-tools merged 3 commits from fix/1966-ask-ended into main 2026-11-10 00:44:43 +00:00
Member

Issue 1966 (notes 151, 152): the nats yes on novox was lost a second time with #195 delivered. The assigner's ask key stood under an id whose ask had ended at the operator channel without an answer; the teller will not ask an ended id again, and the assigner wrote again only an absent or stale key. So nothing asked: the nats move on novox and issue 784's mesh-knowledge delivery waited, and backup asks for searxng, nats and jackett were lost the same way.

  • T: the teller says its own module event ask-ended (manifest emits; body in its own package modules/mesh-delivery-teller/tellerevents, ADR 0634 §1) when the router records an expiry or a cancellation, and at its start for a key standing under an ended id. Not for a refusal, a replacement, an answer, or a hand end by teller_end_ask.
  • A: the assigner consumes mesh-delivery-teller.ask-ended and writes hold, restore, backup and rule-written record asks again by compare-and-set under a new asking (AskingSeconds). Not written again, by rule: the assignments ask (ADR 0567 §5/§11; the seat has its own verb again) and a record ask a put asked (ADR 0546: its expiry is the put's refusal).
  • C: tellerevents' own test folded into the rows; test counts as main (mesh-delivery 665 unit, 68 integration; both over budget before, unchanged).

Quick fix: none (no tool writes an ask key again). Thorough fix: this change, chosen because the yes was lost twice and the kind hid every ask kind. Once the teller is delivered, the standing nats yes and the three backup asks are asked again without a hand act.

Tests: rows in TestAnAssignerAskWaitsForRoomAndARefusalIsSaidAsADeliveryAsk and TestTheHoldAskIsValid/ended_at_the_channel; each fails without its change (checked by the reviewer). go vet, go vet -tags integration and go test pass in all 41 modules of the repository (reviewer, siblings placed with mesh-catalog main).

Manifest validator: the verdicts on the teller's and the assigner's manifests are unproved until this pull request's check runs. A local re-creation (53 of the live 60 seats; neither manifest names a missing one) accepted both in the change and trunk cases, with no verdict differing.

Found, not built (note 152): a hand tool to ask an ended ask again; the gate's merge asks have the same fault; meshdeliveryclient.Answer belongs in tellerevents.

Prepare and rulings: hq .work/1966-ask-ended/prepare.md.

Reviewed-by: mesh-code-reviewer@shanks at 77f5ec7d4f
Pushed-by: lead-47@shanks

https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ

Issue 1966 (notes 151, 152): the nats yes on novox was lost a second time with #195 delivered. The assigner's ask key stood under an id whose ask had ended at the operator channel without an answer; the teller will not ask an ended id again, and the assigner wrote again only an absent or stale key. So nothing asked: the nats move on novox and issue 784's mesh-knowledge delivery waited, and backup asks for searxng, nats and jackett were lost the same way. - T: the teller says its own module event ask-ended (manifest `emits`; body in its own package modules/mesh-delivery-teller/tellerevents, ADR 0634 §1) when the router records an expiry or a cancellation, and at its start for a key standing under an ended id. Not for a refusal, a replacement, an answer, or a hand end by teller_end_ask. - A: the assigner consumes mesh-delivery-teller.ask-ended and writes hold, restore, backup and rule-written record asks again by compare-and-set under a new asking (AskingSeconds). Not written again, by rule: the assignments ask (ADR 0567 §5/§11; the seat has its own verb `again`) and a record ask a put asked (ADR 0546: its expiry is the put's refusal). - C: tellerevents' own test folded into the rows; test counts as main (mesh-delivery 665 unit, 68 integration; both over budget before, unchanged). Quick fix: none (no tool writes an ask key again). Thorough fix: this change, chosen because the yes was lost twice and the kind hid every ask kind. Once the teller is delivered, the standing nats yes and the three backup asks are asked again without a hand act. Tests: rows in TestAnAssignerAskWaitsForRoomAndARefusalIsSaidAsADeliveryAsk and TestTheHoldAskIsValid/ended_at_the_channel; each fails without its change (checked by the reviewer). go vet, go vet -tags integration and go test pass in all 41 modules of the repository (reviewer, siblings placed with mesh-catalog main). Manifest validator: the verdicts on the teller's and the assigner's manifests are unproved until this pull request's check runs. A local re-creation (53 of the live 60 seats; neither manifest names a missing one) accepted both in the change and trunk cases, with no verdict differing. Found, not built (note 152): a hand tool to ask an ended ask again; the gate's merge asks have the same fault; meshdeliveryclient.Answer belongs in tellerevents. Prepare and rulings: hq .work/1966-ask-ended/prepare.md. Reviewed-by: mesh-code-reviewer@shanks at 77f5ec7d4f0a5fd44525afcb80e66f09f585bd5b Pushed-by: lead-47@shanks https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
mesh-tools added 3 commits 2026-11-10 00:39:38 +00:00
An assigner ask that lapsed or was cancelled at the operator channel while its key still stands
was never asked again: the router drops a second ask under an id it keeps, and the assigner
only writes a new asking when the key is absent (note 151: the nats yes on novox and three
backup asks). The teller now says ask-ended (its module event, emits; body in its own package
tellerevents, ADR 0634 §1) when the router records such an end, and when a watch hands it a key
standing under an asking that ended so, which covers its start and the asks standing now. A
refusal, a replacement, an answer and an end by hand (teller_end_ask, kept in its own record)
are not said.

Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
An ask that ended at the operator channel without an answer while its key stood was never
written again, so nothing asked it (note 151: the nats yes on novox, three backup asks). The
assigner now consumes mesh-delivery-teller.ask-ended on its durable consumer and writes the key
again by compare-and-set under AskingSeconds (above the old asking), an id of its own and a new
expiry (AskLasts), one row per kind: hold, restore, backup and a record ask of the rules are
written again; the authorising ask of a proposal is not (ADR 0567 §5, §11: its lapse ends the
proposal, again asks it again), nor a record ask a put asked (ADR 0546: its lapse refuses the
put), nor an asking the key no longer holds.

Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
Subtask C: tellerevents' own test goes, its rows are the assigner's ended-ask rows and the teller's decode of every event said, to stay within the test budget (issue 1966)
mesh/delivery merged: source.main moved to novox/mesh-delivery@1fad9c8855a8
mesh/check checking 77f5ec7d4f0a on 8d9683d844ec
77f5ec7d4f
Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
Author
Member

Delivery novox/mesh-delivery@77f5ec7d4f0a — merged since 2026-11-10T00:44:45Z

Source — source.main moved to novox/mesh-delivery@1fad9c8855. Whether it reached the machines is mesh-delivery-view's, derived from source.main, the wants and the haves.

Transitions

  • 2026-11-10 00:39 (new) → proposed (announced): novox/mesh-delivery#198's head announced
  • 2026-11-10 00:39 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 00:44 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@77f5ec7d4f0a` — **merged** since 2026-11-10T00:44:45Z **Source** — source.main moved to novox/mesh-delivery@1fad9c8855a8. Whether it reached the machines is `mesh-delivery-view`'s, derived from `source.main`, the wants and the haves. **Transitions** - 2026-11-10 00:39 (new) → proposed (announced): novox/mesh-delivery#198's head announced - 2026-11-10 00:39 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 00:44 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 1fad9c8855 into main 2026-11-10 00:44:43 +00:00
mesh-tools deleted branch fix/1966-ask-ended 2026-11-10 00:44:43 +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#198