DLV-M2: the checker follows the indexer's candidates, modules, manifests, packages and predefined keys and the assigner's placement by first views

ADR 0615 §1 and ADR 0596: the checker invokes the six read tools, consumes their views families and
reads none of the six buckets; this ends its direct read of the packages state (the lead's ruling 2).
It keeps first-views and findings and announces both as its own. The lead's ruling: an owner that is
down never holds the start; the checks, the tries and the hand asks start once every first view is
answered, the placement is followed into the toolchain gate once its first view is. firstview.Reader
opens a followed state's picture as a process.BucketOpener (the builder uses it too). Tools
checker_first_views and checker_first_view_again.

Claude-Session: https://claude.ai/code/session_01JG73KJNrH5EgFXMKKYSrig
This commit is contained in:
2026-11-04 14:13:28 +01:00
parent 28dd86b451
commit a6fdb121fe
8 changed files with 192 additions and 109 deletions
@@ -178,7 +178,7 @@ func run(ctx context.Context, getenv func(string) string, logOut io.Writer) erro
return
case <-placement.Follower().Ready():
}
pe, err := buildrun.FollowPlacement(ctx, pictures{placement}, gate, b.NodesChanged, logger.Printf)
pe, err := buildrun.FollowPlacement(ctx, reader, gate, b.NodesChanged, logger.Printf)
if err != nil {
placementErrs <- err
return
@@ -270,16 +270,6 @@ const (
candidatesState = "candidates"
)
// pictures opens the placement's picture where the gate's follower opens its bucket.
type pictures struct{ placement *firstview.Picture }
func (p pictures) KeyValue(ctx context.Context, bucket string) (jetstream.KeyValue, error) {
if bucket != p.placement.Bucket() {
return nil, fmt.Errorf("the builder reads %s by its owner's first view alone", bucket)
}
return p.placement, nil
}
// buildFromModules builds from the indexer's modules and candidates once the first views of the modules, the manifests and
// the candidates are answered (never at the start: an indexer that is down holds no other part of it), and follows them.
func buildFromModules(ctx context.Context, b *build.Builder, modules, manifests, candidates *firstview.Picture) error {