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:
mesh-delivery-cli holds [--json]: every hold with module, fingerprint, node, since, answer and cause.
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.
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).
The view reads held keys as holds, never as wants.
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
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.
Deliverynovox/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`.
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.
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:
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
cf26e95691Pushed-by: lead-47@shanks
Delivery
novox/mesh-delivery@cf26e956915c— merged since 2026-10-25T14:30:14ZSource — source.main moved to novox/mesh-delivery@06fd53e5cb. 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.