Issue 1126 note 72. de-spiegel's key src2:5b352aa5 failed on ace (no tun). Nothing changed about it since, so the builder never looks at it again: a failed key is built again only on a change (ADR 0429 clause 18). builder_ask_again re-asks only waiting keys, so no tool could recover it (tools-are-how-a-module-is-spoken-to: recover without help).
The tool builder_build_again {module, fp, why} writes a reasks value with mode build, which the builder watches.
In one critical section, the builder refuses: no key; done; building or queued (use builder_ask_again); failed for a reason it does not retry on the same fingerprint; a fingerprint the module no longer has; a module with no manifest; a key it is already looking at or already asked by hand.
Otherwise it logs the why and who asked, and looks once through startOnce: Claim writes the new revision and the lanes ask, under Claim's own rules.
A look the builder queues meanwhile still runs.
The answer names the revision and the ask ids. It says failed (with the key's error), pending, or wrote nothing when that is what happened.
Waits are answer bounds only (15 s, 25 s); no ticker.
Review: three rounds. Round 1: a race that could build twice, and three answers that said success wrongly. Round 2: a queued look was dropped. Both fixed.
Tests: twelve rows in the existing table TestABuildAskWaitingInItsStreamIsNotBounded, no new test function, each failing first. go test -race passes; the table passes under -race -count=5.
Issue 1126 note 72. de-spiegel's key src2:5b352aa5 failed on ace (no tun). Nothing changed about it since, so the builder never looks at it again: a failed key is built again only on a change (ADR 0429 clause 18). builder_ask_again re-asks only waiting keys, so no tool could recover it (tools-are-how-a-module-is-spoken-to: recover without help).
The tool builder_build_again {module, fp, why} writes a reasks value with mode build, which the builder watches.
- In one critical section, the builder refuses: no key; done; building or queued (use builder_ask_again); failed for a reason it does not retry on the same fingerprint; a fingerprint the module no longer has; a module with no manifest; a key it is already looking at or already asked by hand.
- Otherwise it logs the why and who asked, and looks once through startOnce: Claim writes the new revision and the lanes ask, under Claim's own rules.
- A look the builder queues meanwhile still runs.
- The answer names the revision and the ask ids. It says failed (with the key's error), pending, or wrote nothing when that is what happened.
- Waits are answer bounds only (15 s, 25 s); no ticker.
Review: three rounds. Round 1: a race that could build twice, and three answers that said success wrongly. Round 2: a queued look was dropped. Both fixed.
Tests: twelve rows in the existing table TestABuildAskWaitingInItsStreamIsNotBounded, no new test function, each failing first. go test -race passes; the table passes under -race -count=5.
Reviewed-by: rev-build-again@shanks at a3b4ac79afaa293710cc1df65f4aa89f3b6c2510
The builder retakes a failed key only when it looks at its module again, which nothing does for an unchanged module. The tool makes it look now, with the claim's own rules, and refuses a key that is done or waiting.
Review round 1 (issue 1126 note 72): the inflight check, the watch and the look were three locks, so a second request or the builder's own look could build the key twice; the answer said asked when the look wrote nothing or the build failed before its asks.
Deliverynovox/mesh-delivery@a3b4ac79afaa — merged since 2026-10-28T14:27:09Z
Source — source.main moved to novox/mesh-delivery@f39bc10e3b. Whether it reached the machines is mesh-delivery-view's, derived from source.main, the wants and the haves.
Transitions
2026-10-28 13:35 (new) → proposed (announced): novox/mesh-delivery#95's head announced
2026-10-28 13:35 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-28 14:27 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@a3b4ac79afaa` — **merged** since 2026-10-28T14:27:09Z
**Source** — source.main moved to novox/mesh-delivery@f39bc10e3be7. Whether it reached the machines is `mesh-delivery-view`'s, derived from `source.main`, the wants and the haves.
**Transitions**
- 2026-10-28 13:35 (new) → proposed (announced): novox/mesh-delivery#95's head announced
- 2026-10-28 13:35 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-28 14:27 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 1126 note 72. de-spiegel's key src2:5b352aa5 failed on ace (no tun). Nothing changed about it since, so the builder never looks at it again: a failed key is built again only on a change (ADR 0429 clause 18). builder_ask_again re-asks only waiting keys, so no tool could recover it (tools-are-how-a-module-is-spoken-to: recover without help).
The tool builder_build_again {module, fp, why} writes a reasks value with mode build, which the builder watches.
Review: three rounds. Round 1: a race that could build twice, and three answers that said success wrongly. Round 2: a queued look was dropped. Both fixed.
Tests: twelve rows in the existing table TestABuildAskWaitingInItsStreamIsNotBounded, no new test function, each failing first. go test -race passes; the table passes under -race -count=5.
Reviewed-by: rev-build-again@shanks at
a3b4ac79afDelivery
novox/mesh-delivery@a3b4ac79afaa— merged since 2026-10-28T14:27:09ZSource — source.main moved to novox/mesh-delivery@f39bc10e3b. 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.