Merge a group in one pass on its one Approve, with no order and no turns (issue 978)
A group has no order: mesh-delivery asks the controller for none, reads no after: line (it says once that the line is not read), merges every member in one pass once the composed check passed and the Approve covers the heads, and gives the plan its word once every member is merged. A failed member stops no other. The composed verdict sets each member's mesh/merge-gate (pending, saying why, until one stands), the groups answer says composed_gate, and a trunk move asks the out-of-date members' checks at once and merges on the same Approve (issue 1047).
This commit is contained in:
+15
-1
@@ -58,8 +58,11 @@ export interface Checked {
|
||||
"repo-check"?: Layer;
|
||||
/** The change plan of the commit checked (novox/hq ADR 0238): what a merge of it would build and send. */
|
||||
plan?: ChangePlan;
|
||||
/** Set on a delivery group's composed check (novox/hq ADR 0239): not this head's merge gate. */
|
||||
/** Set on a delivery group's composed check (novox/hq ADR 0239): its verdict is each member's merge gate (ADR 0403 §1,
|
||||
* issue 978), set in setGroupVerdict, never read as this head's own. */
|
||||
group?: string;
|
||||
/** The members a composed check read, each at its head and the trunk commit it was merged onto (ADR 0323 §6). */
|
||||
members?: { owner: string; repo: string; number?: number; commit: string; trunk?: string }[];
|
||||
/** The trunk commit the head was merged into and judged as, twelve characters (novox/hq ADR 0323 §3); absent from a
|
||||
* controller whose build seat judged the head alone. Beside are the other repositories' commits the check read,
|
||||
* by directory; took how long it ran. */
|
||||
@@ -234,6 +237,17 @@ export function statusFor(c: Checked): CommitStatus {
|
||||
return judgedFirst(c, { state: stateOf(gate.verdict), context: CHECK_CONTEXT, description });
|
||||
}
|
||||
|
||||
/**
|
||||
* **A member's gate from its group's composed verdict** (novox/hq ADR 0403 §1, issue 978): the composed check, which
|
||||
* composed every machine with all the members' heads, sets each member's `mesh/merge-gate` at the head it read. The
|
||||
* description names what it judged first, as a member's own gate does (ADR 0323 §3), and the group.
|
||||
*/
|
||||
export function groupGateStatus(c: Checked, m: NonNullable<Checked["members"]>[number]): CommitStatus {
|
||||
const said = described(c.verdict, `group ${c.group} composed: ${c.summary}`);
|
||||
const first = m.trunk ? `head ${m.commit.slice(0, 12)} merged into trunk ${m.trunk.slice(0, 12)} — ` : "";
|
||||
return { state: stateOf(c.verdict), context: CHECK_CONTEXT, description: clipped(first + said) };
|
||||
}
|
||||
|
||||
/** Every status a verdict sets: the gate's, and the repository's own check's when it was said. */
|
||||
export function statusesFor(c: Checked, facts: RepoCheckFacts = {}): CommitStatus[] {
|
||||
const out = [statusFor(c)];
|
||||
|
||||
Reference in New Issue
Block a user