Check a delivery group's member beside its siblings' merges, judged by the group's controller (issue 867, ADR 0382)
mesh/merge-gate head 37fd73f3781e merged into trunk 4446027108fd — pass: builds build-agent, mesh-controller → ace, g14, novox, shanks; no bus step; every …
mesh/repo-check head 37fd73f3781e merged into trunk 4446027108fd — pass: its merge-check.sh passed
mesh/delivery delivered
mesh/delivery-group group fix/867-group-siblings delivered: every member is delivered

A mesh-host change and a mesh-controller change that need each other could not both pass their own checks: each read the other at its base. The check now asks mesh-delivery for the group's open siblings into a base of the same name, reads each at its head merged onto its base, builds the judge from a controller sibling's merge in the isolated judge environment keyed on its inputs, and names the siblings in the verdict. With no answer from mesh-delivery the verdict says it could not learn them; a pull request with no sibling is checked as before. TestReplay867 replays the failure.

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2026-10-15 23:27:12 +00:00
co-authored by Claude
parent 7543f64911
commit 37fd73f378
12 changed files with 1277 additions and 19 deletions
+26
View File
@@ -173,6 +173,13 @@ type CheckRequest struct {
// node-engine with its own validator — and each repository beside it is read at its branch of that name where it
// has one (CheckedOut.Else otherwise). Empty for every other base, checked as before it.
Release string `json:"release,omitempty"`
// Siblings are the other open pull requests of this one's delivery group the check reads beside it (novox/hq ADR
// 0382 §1): each repository found under Dir is read at the sibling's head merged onto the sibling's base, in
// place of the commit the mesh runs. SiblingsUnknown says mesh-delivery could not be asked, or answered without
// what a sibling is found by, and the check reads none. Both empty when mesh-delivery answered and named none:
// the request is then what it was before the rule.
Siblings []CheckSibling `json:"siblings,omitempty"`
SiblingsUnknown string `json:"siblings_unknown,omitempty"`
// Group names a delivery group whose members' heads are composed together with this one (novox/hq ADR
// 0239), and Members are those other heads, each cloned beside it and laid over the mesh in turn. The
// repository's own check is not run for a group: each member's pull request runs its own.
@@ -250,6 +257,19 @@ type CheckBuilt struct {
SameAs map[string]string `json:"same-as,omitempty"`
}
// CheckSibling is one other open pull request of a delivery group (novox/hq ADR 0382): in a request, the repository it
// is in as owner/repo, the directory the check finds that repository under (Dir), its number, its whole head and its
// base branch; in a verdict, what the check read of it — Head, Base and BaseCommit, whole: the base's head the sibling's
// head was merged onto.
type CheckSibling struct {
Repository string `json:"repository"`
Number int `json:"number"`
Head string `json:"head"`
Base string `json:"base"`
BaseCommit string `json:"base_commit,omitempty"`
Dir string `json:"dir,omitempty"`
}
// GroupMember is one other head of a delivery group's composed check.
type GroupMember struct {
Owner string `json:"owner"`
@@ -309,6 +329,12 @@ type CheckOutcome struct {
BesideAt map[string]string `json:"beside-at,omitempty"`
// Validator says which node-engine validator the judge of a release-branch check was built with (ADR 0358 §2).
Validator string `json:"validator,omitempty"`
// Siblings are the pull requests of its delivery group it read beside it, each as its head merged onto its base
// commit (ADR 0382 §4), SiblingsUnknown why it could not learn them, and JudgeFrom where the judge came from when
// the group made it (§3), such as "sibling novox/mesh-controller#346 merge 0123456789ab".
Siblings []CheckSibling `json:"siblings,omitempty"`
SiblingsUnknown string `json:"siblings_unknown,omitempty"`
JudgeFrom string `json:"judge_from,omitempty"`
}
// SourceOnSeat names a repository by the seat whose holder serves it and its path there.
+7
View File
@@ -301,6 +301,13 @@ type Checked struct {
BesideAt map[string]string `json:"beside-at,omitempty"`
// Validator says which node-engine validator the judge of a release-branch check was built with (ADR 0358 §2).
Validator string `json:"validator,omitempty"`
// Siblings are the other pull requests of the delivery group the check read beside it (novox/hq ADR 0382 §4), each
// with its head and the base commit it was merged onto; SiblingsUnknown is why it could not learn them, set only
// then; JudgeFrom says where the judge came from when the group made it. The forge's holder keeps Siblings per
// open pull request (§5). All omitted for a check that read none.
Siblings []CheckSibling `json:"siblings,omitempty"`
SiblingsUnknown string `json:"siblings_unknown,omitempty"`
JudgeFrom string `json:"judge_from,omitempty"`
// Built are the builds the check made for its merge, each with its reuse key and digests, or why not
// (novox/hq ADR 0350 §1): what the walk of the merge takes instead of building.
Built []CheckBuilt `json:"built,omitempty"`