From 2c8d3f5b403f99ff25afb8c2d91acecc144567f7 Mon Sep 17 00:00:00 2001 From: jochen Date: Wed, 11 Nov 2026 15:48:04 +0100 Subject: [PATCH] BL5 (version half): a build whose catalog entry's version is not MAJOR.MINOR reserves nothing and says so in the journal MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The first-watched-branch half (§371) waits for BL6's revision view, which names a build's branch. Builds: design 47 G §505 Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ --- modules/mesh-delivery-builder/internal/build/numbers.go | 2 ++ .../mesh-delivery-builder/internal/build/reserve_test.go | 7 +++++++ 2 files changed, 9 insertions(+) diff --git a/modules/mesh-delivery-builder/internal/build/numbers.go b/modules/mesh-delivery-builder/internal/build/numbers.go index f8d7ee45..279a8345 100644 --- a/modules/mesh-delivery-builder/internal/build/numbers.go +++ b/modules/mesh-delivery-builder/internal/build/numbers.go @@ -165,6 +165,8 @@ func (b *Builder) reserves(ctx context.Context, module string, m meshcatalog.Mod return false } if strings.Count(plan.Series, ".") != 1 { + // G §505: such an entry (a manifest from before G, "1") reserves nothing and is built as a build without a version. + b.logf("%s: the catalog entry's version %q is not MAJOR.MINOR: no version is reserved, and the build is made and delivered without one", module, plan.Series) return false } return b.doneDigests(ctx, module, m.Fp2) == nil diff --git a/modules/mesh-delivery-builder/internal/build/reserve_test.go b/modules/mesh-delivery-builder/internal/build/reserve_test.go index b9a33735..d2c85fdf 100644 --- a/modules/mesh-delivery-builder/internal/build/reserve_test.go +++ b/modules/mesh-delivery-builder/internal/build/reserve_test.go @@ -2,6 +2,7 @@ package build import ( "context" + "fmt" "slices" "strings" "testing" @@ -80,9 +81,15 @@ func TestABuildReservesItsVersionAtItsStartOnceTheCatalogFilled(t *testing.T) { r2 := newRig(t, goBundle) res2 := &fakeReservations{filled: true} r2.b.Reserved = res2 + var journal []string + r2.b.Logf = func(f string, a ...any) { journal = append(journal, fmt.Sprintf(f, a...)) } if v := r2.consider(t, "modules/m"); v.State != builds.BuildDone || len(res2.reserved) != 0 { t.Errorf("a manifest with no MAJOR.MINOR: state %s, reserved %v", v.State, res2.reserved) } + // G §505: the builder writes in its journal, naming the module, that it reserved nothing. + if !slices.ContainsFunc(journal, func(l string) bool { return strings.HasPrefix(l, "m: ") && strings.Contains(l, "not MAJOR.MINOR") }) { + t.Errorf("journal %q, want a line naming m and saying its version is not MAJOR.MINOR", journal) + } } // TestADropOfAReservationIsAReasksValueOfItsOwnKey: design 47 G §369 — builder_reserved_drop asks the builder through