From 351c7c4bf42950bd0f5319f3ecbe385503bc0b49 Mon Sep 17 00:00:00 2001 From: jochen Date: Mon, 26 Oct 2026 11:44:29 +0100 Subject: [PATCH] =?UTF-8?q?gate:=20deliveries=20and=20show=20say=20an=20ap?= =?UTF-8?q?proved=20merge=20waits=20for=20the=20check=20of=20the=20named?= =?UTF-8?q?=20delivery=20on=20the=20named=20repository,=20and=20the=20turn?= =?UTF-8?q?s=20bucket=20is=20read=20by=20the=20checker=20alone,=20written?= =?UTF-8?q?=20by=20the=20gate=20alone=20(ADR=200548=20=C2=A73,=20=C2=A79;?= =?UTF-8?q?=20issue=20568=20G6)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cmd/mesh-delivery-gate/adr548_test.go | 6 ++++++ modules/mesh-delivery-gate/cmd/mesh-delivery-gate/verbs.go | 4 ++++ 2 files changed, 10 insertions(+) diff --git a/modules/mesh-delivery-gate/cmd/mesh-delivery-gate/adr548_test.go b/modules/mesh-delivery-gate/cmd/mesh-delivery-gate/adr548_test.go index a10f167c..862b274f 100644 --- a/modules/mesh-delivery-gate/cmd/mesh-delivery-gate/adr548_test.go +++ b/modules/mesh-delivery-gate/cmd/mesh-delivery-gate/adr548_test.go @@ -86,6 +86,12 @@ func TestOneCheckPerDeliveryAtTheGate(t *testing.T) { d.Ready.HeldSince == nil { t.Fatalf("the merge does not say what it waits for: %+v", d.Ready) } + // §9: deliveries says what it waits for. + for _, l := range w.h.Deliveries("", "", "", false) { + if l.ID == id && !strings.Contains(l.Waits, "approved; waits for the check of g") { + t.Errorf("deliveries says it waits for %q", l.Waits) + } + } // §4: past 30 minutes the held merge is a stalled line naming the check it waits for and since when. for _, l := range w.h.Stalled() { if l.ID == id { diff --git a/modules/mesh-delivery-gate/cmd/mesh-delivery-gate/verbs.go b/modules/mesh-delivery-gate/cmd/mesh-delivery-gate/verbs.go index 7d6caf09..166832cc 100644 --- a/modules/mesh-delivery-gate/cmd/mesh-delivery-gate/verbs.go +++ b/modules/mesh-delivery-gate/cmd/mesh-delivery-gate/verbs.go @@ -26,6 +26,10 @@ type Line struct { // waitsFor is what a delivery waits for, in words. func (h *Holder) waitsFor(d *Delivery) string { + if r := d.Ready; r != nil && r.Merged == nil && strings.HasPrefix(r.Waits, "approved;") { + // Approved and waiting for another delivery's check, or for its own verdict's carry (ADR 0548 §2, §8, §9). + return r.Waits + } switch d.State { case Proposed: return "its check"