A pull request's check composes only after the change's own builds end (issue 1921) #164

Merged
mesh-tools merged 2 commits from fix/1921-compose-waits-builds into main 2026-11-07 13:28:38 +00:00
Member

A pull request's check composed the nodes before the change's own candidate builds ended, and read the running node-engine's "wanted at , of which the builder holds no done build yet" as the change's refusal (met twice on 2026-11-07: mesh-catalog #624 and mesh-delivery #163; issue 1921 notes 72 and 75). ADR 0603 §10 says the check waits for them (builds_not_ended).

Cause: the checker built its case from the indexer's first candidate write, which carries no fp2 yet (the merge preview follows on the same heads), and only a try waited for the previewed candidate; so buildsOfTheCheck skipped every module and awaitBuilds waited on nothing.

Fix (mesh-delivery-checker): internal/check/judge.go runs takeTryCandidate also for a pull request's check whose case still holds a module waiting on its preview, within the build-wait bound; WaitsOnPreview moves into internal/check. A build not ended within the bound is named and the composition marked not run (the engines are not asked); a check with no previewed candidate within the bound likewise, saying its manifests were judged from the indexer's first write. A not-run composition keeps a pass with the tests passed and says "composition not judged: …" on the status (as a compose error and a node without an answer do, ADR 0593 §9). A check that has its fingerprints does not wait; every wait is bounded (at most two build-wait bounds).

Changed behaviour of a try, said here: when a build runs late, a try is now not composed and so no pass (try.go), where before it composed without that build.

The first check (3f9acf02) failed only in the composition, from the fault this fixes (the checker module's own build was done minutes later); the operator's Decline of 13:56 was meant for another ask, so the review's note on judge.go's comment and words is pushed as c0da09d8 to ask again.

Quick fix named: read the candidate again before waiting on builds. Thorough fix, chosen: the check judges only the previewed candidate, as a try does, and a late builder is never read as the change refusing. Left for later (notes on issue 1921): the node-engine's "no done build yet" as a held module state; the noPreview words copied from the indexer belong in the candidate's contract.

Tests: two rows in aChangeToABuildModuleOrBaseNamesTheModulesBuiltOnIt (composition_test.go), each failing without the fix; no new test function; no module.json changed.

Reviewed-by: mesh-code-reviewer@shanks at c0da09d81f

https://claude.ai/code/session_01NcbgfFSnn24M3GcqttoU7i

A pull request's check composed the nodes before the change's own candidate builds ended, and read the running node-engine's "wanted at <fp>, of which the builder holds no done build yet" as the change's refusal (met twice on 2026-11-07: mesh-catalog #624 and mesh-delivery #163; issue 1921 notes 72 and 75). ADR 0603 §10 says the check waits for them (builds_not_ended). Cause: the checker built its case from the indexer's first candidate write, which carries no fp2 yet (the merge preview follows on the same heads), and only a try waited for the previewed candidate; so buildsOfTheCheck skipped every module and awaitBuilds waited on nothing. Fix (mesh-delivery-checker): internal/check/judge.go runs takeTryCandidate also for a pull request's check whose case still holds a module waiting on its preview, within the build-wait bound; WaitsOnPreview moves into internal/check. A build not ended within the bound is named and the composition marked not run (the engines are not asked); a check with no previewed candidate within the bound likewise, saying its manifests were judged from the indexer's first write. A not-run composition keeps a pass with the tests passed and says "composition not judged: …" on the status (as a compose error and a node without an answer do, ADR 0593 §9). A check that has its fingerprints does not wait; every wait is bounded (at most two build-wait bounds). Changed behaviour of a try, said here: when a build runs late, a try is now not composed and so no pass (try.go), where before it composed without that build. The first check (3f9acf02) failed only in the composition, from the fault this fixes (the checker module's own build was done minutes later); the operator's Decline of 13:56 was meant for another ask, so the review's note on judge.go's comment and words is pushed as c0da09d8 to ask again. Quick fix named: read the candidate again before waiting on builds. Thorough fix, chosen: the check judges only the previewed candidate, as a try does, and a late builder is never read as the change refusing. Left for later (notes on issue 1921): the node-engine's "no done build yet" as a held module state; the noPreview words copied from the indexer belong in the candidate's contract. Tests: two rows in aChangeToABuildModuleOrBaseNamesTheModulesBuiltOnIt (composition_test.go), each failing without the fix; no new test function; no module.json changed. Reviewed-by: mesh-code-reviewer@shanks at c0da09d81f6e30c4135848811c9b7ca70ab11fa9 https://claude.ai/code/session_01NcbgfFSnn24M3GcqttoU7i
mesh-tools added 1 commit 2026-11-07 11:52:54 +00:00
A check composes only after the candidate's builds it waits on have ended (issue 1921)
mesh/delivery closed: a newer head of the same pull request
mesh/check failed: novox: not composed on novox: mesh-delivery-checker: frombus: mesh-delivery-checker is wanted at src… | 3f9acf022325 on b719dc0ecf27
3f9acf0223
The indexer writes a pull request's candidate first from its pull message alone, every module's
fingerprint "no merge preview is computed", and the fingerprints only with the preview, on the same
heads. A check that began on that first write kept its case: it waited on no build, said nothing,
and the engines, reading the previewed candidate, refused the module as not yet built (mesh-catalog
#624, mesh-delivery #163). Such a check now takes the previewed candidate before it judges the
manifests, waits on the builds and composes, as a whole try already does.

A build not ended within the build-wait-bound is named and the change is not composed, never an
engine's refusal of a fingerprint it has no done build of read as the change's.

Claude-Session: https://claude.ai/code/session_01NcbgfFSnn24M3GcqttoU7i
Author
Member

Delivery novox/mesh-delivery@c0da09d81f6e — merged since 2026-11-07T13:28:41Z

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

Transitions

  • 2026-11-07 13:22 (new) → proposed (announced): novox/mesh-delivery#164's head announced
  • 2026-11-07 13:22 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-11-07 13:28 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@c0da09d81f6e` — **merged** since 2026-11-07T13:28:41Z **Source** — source.main moved to novox/mesh-delivery@6bc232eb78b9. Whether it reached the machines is `mesh-delivery-view`'s, derived from `source.main`, the wants and the haves. **Transitions** - 2026-11-07 13:22 (new) → proposed (announced): novox/mesh-delivery#164's head announced - 2026-11-07 13:22 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-11-07 13:28 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`.
Author
Member

mesh-delivery: not merged. The merge of this pull request into main at 3f9acf0223 was declined: the operator, via telegram (user id verified), chose Decline. A new head asks the operator again.

mesh-delivery: **not merged.** The merge of this pull request into main at 3f9acf0223259b709cae5018f38fb05bc37dc6a8 was declined: the operator, via telegram (user id verified), chose Decline. A new head asks the operator again.
jschoubben added 1 commit 2026-11-07 13:22:50 +00:00
A pull request's check without a previewed candidate says its composition was not judged, not its manifests (issue 1921, review note)
mesh/delivery merged: source.main moved to novox/mesh-delivery@6bc232eb78b9
mesh/check checking c0da09d81f6e on 6bc232eb78b9
c0da09d81f
Claude-Session: https://claude.ai/code/session_01NcbgfFSnn24M3GcqttoU7i
mesh-tools merged commit 6bc232eb78 into main 2026-11-07 13:28:38 +00:00
mesh-tools deleted branch fix/1921-compose-waits-builds 2026-11-07 13:28:39 +00:00
Sign in to join this conversation.
No Reviewers
No labels
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: novox/mesh-delivery#164