From 86eb29f2433cbac53daf487eb829cc43a3620b67 Mon Sep 17 00:00:00 2001 From: jochen Date: Tue, 10 Nov 2026 16:48:51 +0100 Subject: [PATCH] =?UTF-8?q?A-D29:=20the=20pipeline=20runner=20joins=20the?= =?UTF-8?q?=20validator's=20foundation=20list=20(ADR=200666=20=C2=A74;=20i?= =?UTF-8?q?ssue=201966)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Builds ADR 0666 §4 (the runner is a foundation part: the bus module's own delivery waits on its pipeline), changing ADR 0619 §1 and §3: judge.Foundation, the one list in code, gains mesh-delivery-pipeline, so its manifest keeps its state in the old sections and a request of new-form bus state by it is refused. Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ --- .../internal/index/verdicts_test.go | 6 +++--- modules/mesh-delivery-indexer/judge/oldsections.go | 11 ++++++----- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/modules/mesh-delivery-indexer/internal/index/verdicts_test.go b/modules/mesh-delivery-indexer/internal/index/verdicts_test.go index 09d6cf52..f8b1ab7e 100644 --- a/modules/mesh-delivery-indexer/internal/index/verdicts_test.go +++ b/modules/mesh-delivery-indexer/internal/index/verdicts_test.go @@ -358,7 +358,7 @@ func TestTheIndexerJudgesEveryManifestOnce(t *testing.T) { t.Fatalf("the reads on the owners' state count %v", c.Reads) } } - // DLV-J1 (ADR 0619 §1, §3): a foundation part asking bus state in the new form is refused; the nine are the foundation. + // DLV-J1 (ADR 0619 §1, §3): a foundation part asking bus state in the new form is refused; the nine and the pipeline runner are the foundation. cfg := hold("mesh-config", `{"module":"mesh-config","version":"1","requires":[{"name":"cache","storage":"key-value","template":"state"}]}`) if _, err := ix.JudgeAll(ctx, map[string]bool{cfg: true}); err != nil { t.Fatal(err) @@ -367,8 +367,8 @@ func TestTheIndexerJudgesEveryManifestOnce(t *testing.T) { t.Fatalf("mesh-config asking new-form bus state: %+v", v) } if !slices.Equal(judge.Foundation, []string{"nats", "mesh-grants", "mesh-delivery-indexer", "mesh-delivery-assigner", "node-tools", - "mesh-delivery-builder", "mesh-delivery-checker", "mesh-config", "mesh-vault"}) { - t.Fatalf("the foundation is %v, want exactly the nine of ADR 0619", judge.Foundation) + "mesh-delivery-builder", "mesh-delivery-checker", "mesh-config", "mesh-vault", "mesh-delivery-pipeline"}) { + t.Fatalf("the foundation is %v, want exactly the nine of ADR 0619 and the pipeline runner (ADR 0666 §4)", judge.Foundation) } late := hold("late", `{"module":"late","version":"1","logs":[{"name":"l"}]}`) grants := hold("mesh-grants", `{"module":"mesh-grants","version":"2","logs":[{"name":"l"},{"name":"m"}]}`) diff --git a/modules/mesh-delivery-indexer/judge/oldsections.go b/modules/mesh-delivery-indexer/judge/oldsections.go index 91a2446d..a6da40ea 100644 --- a/modules/mesh-delivery-indexer/judge/oldsections.go +++ b/modules/mesh-delivery-indexer/judge/oldsections.go @@ -16,12 +16,13 @@ import ( // OldSections are the sections of a manifest that keep bus state in the old forms. var OldSections = []string{"state", "logs", "streams", "objects"} -// Foundation are the modules that keep using the old sections for good: exactly the nine parts the bus module's own -// composition, assignments, build or delivery needs before it can answer (novox/hq ADR 0619 §1, §3): the bus module, the -// grants part, the indexer, the assigner, the tool runner, the builder, the checker, mesh-config and the vault. Their new -// state goes on their old sections too, so a foundation manifest asking bus state in the new form is refused. +// Foundation are the modules that keep using the old sections for good: exactly the ten parts the bus module's own +// composition, assignments, build or delivery needs before it can answer (novox/hq ADR 0619 §1, §3, as ADR 0666 §4 changes +// them): the bus module, the grants part, the indexer, the assigner, the tool runner, the builder, the checker, mesh-config, +// the vault and the pipeline runner, which runs the bus module's own pipeline. Their new state goes on their old sections +// too, so a foundation manifest asking bus state in the new form is refused. var Foundation = []string{"nats", "mesh-grants", "mesh-delivery-indexer", "mesh-delivery-assigner", "node-tools", - "mesh-delivery-builder", "mesh-delivery-checker", "mesh-config", "mesh-vault"} + "mesh-delivery-builder", "mesh-delivery-checker", "mesh-config", "mesh-vault", "mesh-delivery-pipeline"} // ViewOwners are the two owners whose state every reader reads through their first views and read tools, never by a // `reads` entry (novox/hq ADR 0615 §1): CountOwnerReads counts what is left of those entries.