Round 1: known by the module path alone, never a package inside it
mesh/delivery merged: source.main moved to novox/mesh-delivery@68581bed7e36
mesh/check failed: mesh-build-go: the change's manifests cannot be judged: the seat list is not read (the seat list is … | 2e9f23f34828 on 68581bed7e36

The review of 0f5c186b: counting each record's packages made 94 sub-package
paths, commands among them, known names, which design 32 forbids; the seven
names refused live are each their record's module (issue 1966).

Claude-Session: https://claude.ai/code/session_01NcbgfFfQ4Z9UE5jK32PmE5
This commit is contained in:
2026-11-08 01:24:54 +01:00
parent 0f5c186b9c
commit 2e9f23f348
5 changed files with 16 additions and 23 deletions
@@ -158,7 +158,7 @@ func TestThePublishedVersionsAreTheIndexersPackagesState(t *testing.T) {
if got := p.LatestPackages(); len(got) != 1 || got[sdk] == "" {
t.Errorf("after a delete: %v", got)
}
// Issue 1966: a module record names its module and its Go packages too, with no series to say them.
// Issue 1966: a module record names its module, with no series to say it, and none of the packages inside it.
if got := p.PackageNames(); !reflect.DeepEqual(got, map[string]string{sdk: ""}) {
t.Errorf("the known packages from a module record = %v", got)
}
@@ -78,8 +78,9 @@ func (p *publishedPackages) LatestPackages() buildstep.PackageVersions {
return out
}
// PackageNames are the packages the state's series keys name, and the Go module path and each Go package of each per-module record (issue 1966:
// the indexer's own knownPackages counts them the same way, with no `<module>/<artifact>` to say), by the name in its own ecosystem: the `<module>/<artifact>`
// PackageNames are the packages the state's series keys name, and the Go module path of each per-module record (issue
// 1966: the indexer's own knownPackages counts them the same way, with no `<module>/<artifact>` to say; never a package
// inside a module, design 32), by the name in its own ecosystem: the `<module>/<artifact>`
// each is built from (empty when the key does not say). Nil while the state is not read yet (Answered), which judges no
// name; once read never nil, an empty state included, so the judge judges every name against it.
func (p *publishedPackages) PackageNames() map[string]string {
@@ -95,14 +96,8 @@ func (p *publishedPackages) PackageNames() map[string]string {
}
}
for _, v := range p.byKey {
names := []string{v.Module}
for _, d := range v.Packages {
names = append(names, d.Package)
}
for _, n := range names {
if _, ok := out[n]; !ok && n != "" {
out[n] = ""
}
if _, ok := out[v.Module]; !ok && v.Module != "" {
out[v.Module] = ""
}
}
return out
@@ -440,7 +440,8 @@ func TestTheControlRecords(t *testing.T) {
if known := ix.knownPackages(ctx); len(known) != 2 || !known[sdkGo] || !known["@novox/mesh-sdk"] {
t.Errorf("the judge's known packages = %v", known)
}
// Issue 1966: a Go package of a module the trunk holds a per-module record of is known, though no series names it.
// Issue 1966: a Go module the trunk holds a per-module record of is known by its module path, though no series
// names it; a package inside it is not (design 32).
resticMod, at := "git.novox.be/novox/mesh-delivery/modules/restic", time.Unix(1, 0)
rec, err := EncodePublishedPackages(meshcatalog.PackagesByModuleValue{Module: resticMod, Repository: "novox/mesh-delivery", Dir: "modules/restic", At: &at,
Commit: strings.Repeat("a", 40), Requires: "h1:r", Packages: []meshcatalog.PackagesByModuleValuePackagesItem{{Package: resticMod + "/backupgood", Digest: "h1:a"}}})
@@ -448,7 +449,7 @@ func TestTheControlRecords(t *testing.T) {
t.Fatal(err)
}
ix.Packages.(*memStore).vals["restic"] = rec
if known := ix.knownPackages(ctx); len(known) != 4 || !known[resticMod] || !known[resticMod+"/backupgood"] || !known[sdkGo] || known["restic/go"] || known["unknown/pkg"] {
if known := ix.knownPackages(ctx); len(known) != 3 || !known[resticMod] || known[resticMod+"/backupgood"] || !known[sdkGo] || known["restic/go"] || known["unknown/pkg"] {
t.Errorf("the judge's known packages with a module record = %v", known)
}
delete(ix.Packages.(*memStore).vals, "restic")
@@ -362,10 +362,10 @@ func namesAtMerge(module string, raw []byte, atMerge bool, known judge.KnownPack
}
// knownPackages are the packages a manifest's `packages` may name (DLV-I14, design 32): every name the packages state's
// series keys hold, as KeepPackageNames reads it at each merge, and the Go module path and each Go package of every
// per-module record the state holds from the trunk: while no build module builds Go package artifacts, a package the
// trunk holds a record of has no series and is known by that record (issue 1966). Nil, which judges no name, where the indexer keeps no
// packages state or it cannot be listed (said): a state the judge cannot read refuses no manifest.
// series keys hold, as KeepPackageNames reads it at each merge, and the Go module path of every per-module record the
// state holds from the trunk: while no build module builds Go package artifacts, a Go module the trunk holds a record of
// has no series and is known by its module path, never by a package inside it (design 32; issue 1966). Nil, which judges
// no name, where the indexer keeps no packages state or it cannot be listed (said): a state the judge cannot read refuses no manifest.
func (ix *Indexer) knownPackages(ctx context.Context) judge.KnownPackages {
if ix.Packages == nil {
return nil
@@ -385,9 +385,6 @@ func (ix *Indexer) knownPackages(ctx context.Context) judge.KnownPackages {
if !IsSeriesKey(key) {
if r, err := DecodePublishedPackages(value); found && err == nil && r.Module != "" {
known[r.Module] = true
for _, d := range r.Packages {
known[d.Package] = true
}
}
continue
}
@@ -12,9 +12,9 @@ import (
// KnownPackages are the names of the packages the mesh knows, each by its name in its own ecosystem (design 32: a Go
// package's go.mod module path, a TypeScript package's package.json name): the names the indexer's packages state holds
// (its series keys, index.SeriesPackage's Name), read at each trunk merge, and, at the merge check, the names a member
// of the change's delivery group names at its head for a package new in the group, and the Go module path and each Go package of each per-module
// record the state holds: a package the trunk holds a record of is known while no build module builds Go package
// artifacts (issue 1966), as well as a declared series. Both read a name with mesh-delivery's
// of the change's delivery group names at its head for a package new in the group, and the Go module path of each
// per-module record the state holds: a Go module the trunk holds a record of is known while no build module builds Go
// package artifacts (issue 1966), never a package inside it. Both read a name with mesh-delivery's
// sdk/packagename. Nil is no list at hand: the names are then not judged, only their series.
type KnownPackages map[string]bool