From 09d347a045d8da0bf72fa6b5c4aa5661c1a53ddc Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 8 Oct 2026 10:11:57 +0200 Subject: [PATCH] Register the replay of issue 305, run in the catalogue module it lives in (hq ADR 0237) A catalogue module is a Go module of its own, so the prover runs a replay in the directory its register entry names. R305 fails on the commit before the fix and passes on it. --- replays/cmd/prove/main.go | 4 ++-- replays/register.go | 15 +++++++++++++++ 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/replays/cmd/prove/main.go b/replays/cmd/prove/main.go index bc5bc86..d8ffa73 100644 --- a/replays/cmd/prove/main.go +++ b/replays/cmd/prove/main.go @@ -128,11 +128,11 @@ func run(r replays.Replay, repos, at string, fixed bool) (string, string) { return verdictOf(string(out), err, false) } mode := "-mod=vendor" - if _, err := os.Stat(filepath.Join(tree, "vendor")); err != nil { + if _, err := os.Stat(filepath.Join(tree, r.Module, "vendor")); err != nil { mode = "-mod=mod" } cmd := exec.CommandContext(ctx, "go", "test", "-count=1", "-run", "^"+r.Test, r.Package) - cmd.Dir = tree + cmd.Dir = filepath.Join(tree, r.Module) cmd.Env = append(os.Environ(), "GOFLAGS="+mode, "GOPRIVATE=git.novox.be") out, err := cmd.CombinedOutput() return verdictOf(string(out), err, r.Kind == replays.Gate) diff --git a/replays/register.go b/replays/register.go index b2bd959..b856a8d 100644 --- a/replays/register.go +++ b/replays/register.go @@ -67,6 +67,9 @@ type Replay struct { Home, HomeRef string // With is the other repositories the replay runs at their commits beside Repository's (Liveness). With []Also + // Module is the directory of the Go module the replay runs in, within Repository, when that is not its + // root: a catalogue module is a Go module of its own. Package is relative to it; Files are not. + Module string } // Register is every replay, by incident. @@ -151,6 +154,18 @@ var Register = []Replay{ "toolchain, and the layer passes only when every part does", Package: "./internal/builder", Test: "TestARepositoryInTwoLanguagesIsCheckedInBoth", Files: []string{"internal/builder/check_test.go"}}, + // A recheck left the old verdict standing (2026-10-07): the forge keeps the newest status of each context + // on a head, and a recheck asks of the same head, so the old green let the pull request merge while the + // fresh check ran. A test in mesh-delivery, which asks the forge's holder (core) to put the merge check + // back to pending; the holder's own half is its TypeScript test. + {ID: "R305", Issue: 305, Kind: InRepository, Repository: "mesh-catalog", Fix: "74f912e", + What: "a pull request rechecked at 23:04 kept mesh/merge-gate and mesh/repo-check success from 16:59, " + + "and the forge would have merged it while its fresh check ran", + Asserts: "a recheck puts the head's merge check statuses back to pending before it asks the check, and " + + "is refused whole when the forge cannot be told", + Module: "modules/mesh-delivery", Package: "./cmd/mesh-delivery", Test: "TestARecheck", + Files: []string{"modules/mesh-delivery/cmd/mesh-delivery/recheck_test.go", + "modules/mesh-delivery/cmd/mesh-delivery/fakes_test.go"}}, // Not a core incident, and the first of its kind: a module's. The crash loop was found by a person // reading the agent server's log for another reason (issue 268); research 032 measured it, and ADR // 0240 makes the node-engine judge it and the gate fail it. -- 2.54.0