List holds and let the operator release or keep one again from mesh-delivery-cli (issue 1906) #41

Merged
mesh-tools merged 2 commits from fix/r6-hold-verbs into main 2026-10-25 14:30:12 +00:00
Member

On 2026-10-25 the operator answered 'keep' to the systemd-resolved hold on Telegram and then wanted to release it: the ask had ended, the view listed nothing to answer, and no verb releases a hold, so a kept hold could never move (and blocked the auto-lift).

What changes:

  1. mesh-delivery-cli holds [--json]: every hold with module, fingerprint, node, since, answer and cause.
  2. mesh-delivery-cli hold-release|hold-keep [words]: answers the standing hold ask through the view's socket, writing only .view; the teller moves it under the ask's key, which the assigner reads. Refuses the same answer again, a hold with no ask, an unknown hold, any other option.
  3. Teller: a later view answer with another option replaces a HOLD's answer (changesMind: the view entry's time is after the standing warrant's); restore, backup and record answers stay fixed. This changes issue 1297's rule for holds only (TestTellerFillsAnAskFromTheViewsAnswerOnce adjusted).
  4. The view reads held keys as holds, never as wants.

Acceptance: issue 1906 note 24 (N23-AC1..AC4). Tests (each seen failing first): TestTheViewListsEveryHoldWithItsNodeCauseAndAnswer, TestAKeptHoldCanBeReleased, TestTheHoldCommandsListAndAnswerHolds, TestALaterViewAnswerChangesAHoldsAnswer, TestTellerTakesAChangedHoldAnswerFromTheView (integration).

Reviewer's note (not blocking): the view's socket is 0666, so any local account can answer a hold; consistent with ADR 0528 clause 6 (a hold ask needs no proof), but 'the operator asked' holds by convention only. SO_PEERCRED against the operator's account would tighten it.

Tries: try-1792937748626702592 passed on cf26e956.
Reviewed-by: reviewer-r6m@shanks at cf26e95691
Pushed-by: lead-47@shanks

On 2026-10-25 the operator answered 'keep' to the systemd-resolved hold on Telegram and then wanted to release it: the ask had ended, the view listed nothing to answer, and no verb releases a hold, so a kept hold could never move (and blocked the auto-lift). What changes: 1. mesh-delivery-cli holds [--json]: every hold with module, fingerprint, node, since, answer and cause. 2. mesh-delivery-cli hold-release|hold-keep <module> <fingerprint prefix> [words]: answers the standing hold ask through the view's socket, writing only <ask key>.view; the teller moves it under the ask's key, which the assigner reads. Refuses the same answer again, a hold with no ask, an unknown hold, any other option. 3. Teller: a later view answer with another option replaces a HOLD's answer (changesMind: the view entry's time is after the standing warrant's); restore, backup and record answers stay fixed. This changes issue 1297's rule for holds only (TestTellerFillsAnAskFromTheViewsAnswerOnce adjusted). 4. The view reads held keys as holds, never as wants. Acceptance: issue 1906 note 24 (N23-AC1..AC4). Tests (each seen failing first): TestTheViewListsEveryHoldWithItsNodeCauseAndAnswer, TestAKeptHoldCanBeReleased, TestTheHoldCommandsListAndAnswerHolds, TestALaterViewAnswerChangesAHoldsAnswer, TestTellerTakesAChangedHoldAnswerFromTheView (integration). Reviewer's note (not blocking): the view's socket is 0666, so any local account can answer a hold; consistent with ADR 0528 clause 6 (a hold ask needs no proof), but 'the operator asked' holds by convention only. SO_PEERCRED against the operator's account would tighten it. Tries: try-1792937748626702592 passed on cf26e956. Reviewed-by: reviewer-r6m@shanks at cf26e956915cbb438e6e3acc4eee4a9972103fd7 Pushed-by: lead-47@shanks
mesh-tools added 2 commits 2026-10-25 14:22:54 +00:00
A hold answered keep on the phone could not be changed: its ask ended with the
answer, nothing listed it, and a kept hold is never lifted by itself. The view
lists every hold with its node, cause and answer (mesh-delivery-cli holds) and
answers the standing hold ask with hold-release or hold-keep through its one
write; the teller takes a later view answer that changes a hold's option into
the answer of that asking, never an older one.
A view answer rewritten with the same option changes nothing; pin a unit test's clock against the integration tests' (issue 1906)
mesh/check pass cf26e956915c on 06fd53e5cbf7 | unit 154 run, 408 kept | integration 164 run, 474 kept | composition passed in 1ms on 2 machines
mesh/delivery merged: source.main moved to novox/mesh-delivery@06fd53e5cbf7
cf26e95691
Author
Member

Delivery novox/mesh-delivery@cf26e956915c — merged since 2026-10-25T14:30:14Z

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

Transitions

  • 2026-10-25 14:22 (new) → proposed (announced): novox/mesh-delivery#41's head announced
  • 2026-10-25 14:25 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
  • 2026-10-25 14:30 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@cf26e956915c` — **merged** since 2026-10-25T14:30:14Z **Source** — source.main moved to novox/mesh-delivery@06fd53e5cbf7. Whether it reached the machines is `mesh-delivery-view`'s, derived from `source.main`, the wants and the haves. **Transitions** - 2026-10-25 14:22 (new) → proposed (announced): novox/mesh-delivery#41's head announced - 2026-10-25 14:25 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 - 2026-10-25 14:30 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 06fd53e5cb into main 2026-10-25 14:30:12 +00:00
mesh-tools deleted branch fix/r6-hold-verbs 2026-10-25 14:30:12 +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#41