builder_build_again: a person can build a failed key again, as the builder does by itself (issue 1126) #95

Merged
mesh-tools merged 3 commits from fix/1126-build-again into main 2026-10-28 14:27:08 +00:00
Member

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 a3b4ac79af

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
mesh-tools added 3 commits 2026-10-28 13:35:08 +00:00
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.
builder_build_again: a look the builder queued during the by-hand build still runs; say a look that ended early is not asked
mesh/delivery merged: source.main moved to novox/mesh-delivery@f39bc10e3be7
mesh/check being carried to a3b4ac79afaa on f39bc10e3be7 | from 31bbf207ef3b
a3b4ac79af
Author
Member

Delivery novox/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`.
mesh-tools merged commit f39bc10e3b into main 2026-10-28 14:27:08 +00:00
mesh-tools deleted branch fix/1126-build-again 2026-10-28 14:27:09 +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#95