Files
mesh-delivery/sdk/graph/reads.go
T
jschoubben 541eaa20fe
mesh/delivery merged: source.main moved to novox/mesh-delivery@21eaa55b277a
mesh/delivery-group group fix/47-G-bridge merged: every member is merged
mesh/check checking 541eaa20fec4 on 21eaa55b277a
Bridge for G's take-in: the pre-G package directories contracts/go and sdk again, unused
The running pre-G indexer publishes a repository's packages only when every package directory it published last is
still in the tree; G moved contracts/go and sdk to modules/, so mesh-delivery's packages, G's renamed paths among them,
are never published and nothing importing them builds (2026-11-13, indexer journal 'its packages are not published').
These are the trees of e70754ef, unchanged, without sdk/module.json (no second module). Nothing imports them; they go
once G's indexer runs and publishes without them.

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-13 14:34:40 +01:00

38 lines
1.4 KiB
Go

package graph
import (
"slices"
"strings"
"sync"
"git.novox.be/novox/mesh-sdk/go/catalogue"
"git.novox.be/novox/mesh-sdk/go/seatlist"
)
// bootstrappedReads are the reader capabilities `seat:<seat>` of the bootstrapped seats: the embedded files' own, so
// computed once.
var bootstrappedReads = sync.OnceValue(func() []string {
var out []string
for _, d := range seatlist.Bootstrapped() {
out = append(out, catalogue.ReadSeat+d.Seat)
}
return out
})
// MissingReads is catalogue.MissingManifestReads with every need of a bootstrapped seat counted as read (novox/hq ADR 0614
// §4, ADR 0636 §2): every reader of the seat list holds the bootstrapped seats from its start, before it has read the list,
// so a manifest naming one is read by every node-engine whatever its statement names. Without it an engine whose statement
// was made before its list was in use states no seat, and the node-engine's own build naming mesh-catalog is held on the
// very engine that would state it (issue 1966). The assigner's capability hold and the indexer's hold both judge with it,
// so the rule is one.
func MissingReads(needs, stated []string) []string {
boot := bootstrappedReads()
missing := slices.DeleteFunc(catalogue.MissingManifestReads(needs, stated), func(n string) bool {
return strings.HasPrefix(n, catalogue.ReadSeat) && slices.Contains(boot, n)
})
if len(missing) == 0 {
return nil
}
return missing
}