Issue 1906 (note 28): an assigner ask outlived its fingerprint. A restore ask for nextcloud on novox at an old fingerprint stayed offered to the operator since 2026-10-25 16:15 while nextcloud ran the trunk fingerprint healthy; lift() never took away the restore asks of the lifted fingerprint, and no pass took away a hold, restore or record ask the trunk had left behind.
What changes (mesh-delivery-assigner, pass.go):
Each pass takes away a hold or restore ask whose module left the trunk or whose fingerprint is not the trunk's; it keeps the held record (the memory that the fingerprint failed, so a revert to it is asked again) and clears only its condition, which is raised again on a return.
A record ask is taken away only when its module left the trunk or its digest is the composition of none of the fingerprints the node can still want (trunk, its want, its have), all read; unread keeps it (ADR 0545's held-back nodes keep their asks).
lift() also takes away the restore asks of the lifted fingerprint on every node.
The teller already withdraws an ask at the router when its key goes (OnAssignerAskGone), so the operator stops seeing it.
Tests: one table-driven test and one pass-level test (a held-back node's record ask survives two passes and its yes moves the want); both fail on the round-1 heads. Try try-1793007301404384331 passed (unit and integration, 2m43s).
Test budget (bent, said): the repository is over the 50/500 budget today; this change adds one top-level unit test and table cases, no integration test. The budget shrink is issue 1921's.
Known leftover (note on issue 1906): if the clear of an old fingerprint's condition fails once, it stays raised until a restart.
Issue 1906 (note 28): an assigner ask outlived its fingerprint. A restore ask for nextcloud on novox at an old fingerprint stayed offered to the operator since 2026-10-25 16:15 while nextcloud ran the trunk fingerprint healthy; lift() never took away the restore asks of the lifted fingerprint, and no pass took away a hold, restore or record ask the trunk had left behind.
What changes (mesh-delivery-assigner, pass.go):
- Each pass takes away a hold or restore ask whose module left the trunk or whose fingerprint is not the trunk's; it keeps the held record (the memory that the fingerprint failed, so a revert to it is asked again) and clears only its condition, which is raised again on a return.
- A record ask is taken away only when its module left the trunk or its digest is the composition of none of the fingerprints the node can still want (trunk, its want, its have), all read; unread keeps it (ADR 0545's held-back nodes keep their asks).
- lift() also takes away the restore asks of the lifted fingerprint on every node.
- The teller already withdraws an ask at the router when its key goes (OnAssignerAskGone), so the operator stops seeing it.
Tests: one table-driven test and one pass-level test (a held-back node's record ask survives two passes and its yes moves the want); both fail on the round-1 heads. Try try-1793007301404384331 passed (unit and integration, 2m43s).
Test budget (bent, said): the repository is over the 50/500 budget today; this change adds one top-level unit test and table cases, no integration test. The budget shrink is issue 1921's.
Known leftover (note on issue 1906): if the clear of an old fingerprint's condition fails once, it stays raised until a restart.
Reviewed-by: review-asks@shanks at 769dab43a24d71443eff2aa41ee2af011edebedb
An ask outlived its fingerprint: a lift left the restore asks of its fingerprint on every node,
and no pass removed an ask of a fingerprint that is no longer the module's trunk fingerprint,
so the operator kept being asked about a module that runs the trunk healthy. Each pass now
takes those asks away (the teller then withdraws the router ask), and a lift takes the restore
asks of its fingerprint. Nothing is taken away while the trunk or a composition is unread.
Review round 1: a record ask is about the composition of any fingerprint a node may still want
(trunk, want, have), not only the trunk's, so deleting it looped with the wants rule that asks it
again and the operator was never asked. It is now stale only when the module left the trunk or no
read composition of those fingerprints has its digest. A hold or restore ask taken away as stale
also takes its held record and clears its held condition.
The held record is the memory that a fingerprint failed (ADR 0408 section 4); a revert returns the
trunk to exactly it, and without the key rule 3 would move the canary onto the failed build with
nothing asked. A stale hold ask now clears only the condition (raised again on a revisit), and the
hold is asked again under a new asking. Also read the single want key for a record ask.
Deliverynovox/mesh-delivery@769dab43a24d — merged since 2026-10-26T09:49:24Z
Source — source.main moved to novox/mesh-delivery@2f697216ee. Whether it reached the machines is mesh-delivery-view's, derived from source.main, the wants and the haves.
Transitions
2026-10-26 09:38 (new) → proposed (announced): novox/mesh-delivery#60's head announced
2026-10-26 09:38 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-10-26 09:49 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@769dab43a24d` — **merged** since 2026-10-26T09:49:24Z
**Source** — source.main moved to novox/mesh-delivery@2f697216eee4. Whether it reached the machines is `mesh-delivery-view`'s, derived from `source.main`, the wants and the haves.
**Transitions**
- 2026-10-26 09:38 (new) → proposed (announced): novox/mesh-delivery#60's head announced
- 2026-10-26 09:38 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-10-26 09:49 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 1906 (note 28): an assigner ask outlived its fingerprint. A restore ask for nextcloud on novox at an old fingerprint stayed offered to the operator since 2026-10-25 16:15 while nextcloud ran the trunk fingerprint healthy; lift() never took away the restore asks of the lifted fingerprint, and no pass took away a hold, restore or record ask the trunk had left behind.
What changes (mesh-delivery-assigner, pass.go):
Tests: one table-driven test and one pass-level test (a held-back node's record ask survives two passes and its yes moves the want); both fail on the round-1 heads. Try try-1793007301404384331 passed (unit and integration, 2m43s).
Test budget (bent, said): the repository is over the 50/500 budget today; this change adds one top-level unit test and table cases, no integration test. The budget shrink is issue 1921's.
Known leftover (note on issue 1906): if the clear of an old fingerprint's condition fails once, it stays raised until a restart.
Reviewed-by: review-asks@shanks at
769dab43a2Delivery
novox/mesh-delivery@769dab43a24d— merged since 2026-10-26T09:49:24ZSource — source.main moved to novox/mesh-delivery@2f697216ee. 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.