From 8fa8289a6ad6448f63afe9b9e4944e53ebf29398 Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 19:36:17 +0100 Subject: [PATCH] =?UTF-8?q?=C2=A7717=20(2),=20the=20status=20view:=20it=20?= =?UTF-8?q?follows=20the=20assigner's=20views=20by=20their=20seats?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The status view consumes seat:mesh-wants.views.asks, seat:mesh-wants.views.wants and seat:mesh-module-assigner.views.assignments in place of the three mesh-delivery-assigner.views entries, and its process takes each first view from the tool named for the state; its invokes lose assigner_read_asks and assigner_read_assignments, and its tools program keeps assigner_read_wants for a want's key and history reads (A-300). Builds: design 47 G §717, A-300 Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h --- .../cmd/mesh-delivery-view/main.go | 10 ++++++---- modules/mesh-delivery-view/manifest_test.go | 14 +++++++++----- modules/mesh-delivery-view/module.json | 8 +++----- 3 files changed, 18 insertions(+), 14 deletions(-) diff --git a/modules/mesh-delivery-view/cmd/mesh-delivery-view/main.go b/modules/mesh-delivery-view/cmd/mesh-delivery-view/main.go index b4ee947b..05e2efbf 100644 --- a/modules/mesh-delivery-view/cmd/mesh-delivery-view/main.go +++ b/modules/mesh-delivery-view/cmd/mesh-delivery-view/main.go @@ -266,12 +266,14 @@ type ReachedEvent struct { } // ownersFollowed are the indexer's, the assigner's and the teller's states the view's process follows by their first views, each by its -// owner's read tool (as the view's invokes names it) and views family (its events on the shared events stream); the +// owner's first-view or read tool (as the view's consumes or invokes names it) and views family (its events on the shared events stream); the // view's tools ask the other six through the owners' read tools on each call. var ownersFollowed = []struct{ owner, state, tool string }{ - {view.AssignerModule, view.AssignmentsState, view.AssignerModule + ".assigner_read_assignments"}, - {view.AssignerModule, "wants", view.AssignerModule + ".assigner_read_wants"}, - {view.AssignerModule, "asks", view.AssignerModule + ".assigner_read_asks"}, + // The seats mesh-module-assigner's assignments and mesh-wants' wants and asks, each first viewed by the tool named for its + // state (design 47 G §717, A-300). + {view.AssignerModule, view.AssignmentsState, view.AssignerModule + "." + view.AssignmentsState}, + {view.AssignerModule, "wants", view.AssignerModule + ".wants"}, + {view.AssignerModule, "asks", view.AssignerModule + ".asks"}, {view.IndexerModule, "candidates", view.IndexerModule + ".indexer_read_candidates"}, {view.IndexerModule, "taken", view.IndexerModule + ".indexer_read_taken"}, {view.TellerModule, view.AnswersState, view.TellerModule + ".teller_read_answers"}, diff --git a/modules/mesh-delivery-view/manifest_test.go b/modules/mesh-delivery-view/manifest_test.go index 7113348e..0c68a5b5 100644 --- a/modules/mesh-delivery-view/manifest_test.go +++ b/modules/mesh-delivery-view/manifest_test.go @@ -166,7 +166,7 @@ func TestManifestIsTakenAndReadsOnly(t *testing.T) { // 1134/AC7 } // The indexer's and the assigner's states are asked of their owners' read tools (design 25 § 12.2), the six the process // follows then heard on their views families (ADR 0615 §1, §5; DLV-M4). - if want := []invoke{{Verb: "mesh-delivery-assigner.assigner_read_asks"}, {Verb: "mesh-delivery-assigner.assigner_read_differences"}, {Verb: "mesh-delivery-assigner.assigner_read_assignments"}, + if want := []invoke{{Verb: "mesh-delivery-assigner.assigner_read_differences"}, {Verb: "mesh-delivery-assigner.assigner_read_wants"}, {Verb: "mesh-delivery-indexer.indexer_read_candidates"}, {Verb: "mesh-delivery-indexer.indexer_read_config_candidates"}, {Verb: "mesh-delivery-indexer.indexer_read_graph"}, {Verb: "mesh-delivery-indexer.indexer_read_heard"}, {Verb: "mesh-delivery-indexer.indexer_pending"}, {Verb: "mesh-delivery-indexer.indexer_read_packages"}, {Verb: "mesh-delivery-indexer.indexer_read_predefined"}, {Verb: "mesh-delivery-indexer.indexer_read_taken"}, @@ -194,7 +194,7 @@ func TestManifestIsTakenAndReadsOnly(t *testing.T) { // 1134/AC7 if m.Version != "0.1" { t.Errorf("version = %q, want 0.1", m.Version) } - if want := []string{"mesh-conditions.findings-asked", "mesh-delivery-assigner.views.asks", "mesh-delivery-assigner.views.assignments", "seat:mesh-module-assigner.views.seat-holders", "mesh-delivery-assigner.views.wants", + if want := []string{"mesh-conditions.findings-asked", "seat:mesh-wants.views.asks", "seat:mesh-module-assigner.views.assignments", "seat:mesh-module-assigner.views.seat-holders", "seat:mesh-wants.views.wants", "mesh-catalog.catalog-revision", "mesh-catalog.registration-changed", "mesh-delivery.source-moved", "mesh-catalog.seat-definition-changed", "mesh-catalog.seat-definition-removed", "mesh-delivery-indexer.views.candidates", "mesh-delivery-indexer.views.taken", "mesh-delivery-teller.views.answers", "mesh-wants.wait-held", "mesh-wants.wait-ended", "node-engine.wait-held", "node-engine.wait-ended", "mesh-pipeline-runner.wait-held", "mesh-pipeline-runner.wait-ended", "mesh-grants.wait-held", "mesh-grants.wait-ended", "mesh-delivery-builder.wait-held", "mesh-delivery-builder.wait-ended", @@ -245,11 +245,15 @@ func TestManifestIsTakenAndReadsOnly(t *testing.T) { // 1134/AC7 t.Errorf("the view reads %s, its manifest's reads are %v", view.SignersRead, m.Reads) } followed := map[string]string{view.CandidatesBucket: view.IndexerModule + ".views.candidates", - view.TakenBucket: view.IndexerModule + ".views.taken", view.AssignmentsBucket: view.AssignerModule + ".views.assignments", - view.AssignerWantsBucket: view.AssignerModule + ".views.wants", view.AssignerAsksBucket: view.AssignerModule + ".views.asks", + view.TakenBucket: view.IndexerModule + ".views.taken", view.AssignmentsBucket: "seat:mesh-module-assigner.views.assignments", + view.AssignerWantsBucket: "seat:mesh-wants.views.wants", view.AssignerAsksBucket: "seat:mesh-wants.views.asks", view.AnswersBucket: view.TellerModule + ".views.answers"} for bucket, family := range followed { - if module, state, _ := strings.Cut(family, ".views."); bucket != module+"_"+state { + module, state, _ := strings.Cut(family, ".views.") + if strings.HasPrefix(module, "seat:") { // a seat's view, said by its holder (design 47 G §717) + module = view.AssignerModule + } + if bucket != module+"_"+state { t.Errorf("the bucket %s is not the state %s of %s", bucket, state, module) } if !slices.Contains(m.Consumes, family) { diff --git a/modules/mesh-delivery-view/module.json b/modules/mesh-delivery-view/module.json index 68878c5f..a5d0865d 100644 --- a/modules/mesh-delivery-view/module.json +++ b/modules/mesh-delivery-view/module.json @@ -71,10 +71,10 @@ ], "consumes": [ "mesh-conditions.findings-asked", - "mesh-delivery-assigner.views.asks", - "mesh-delivery-assigner.views.assignments", + "seat:mesh-wants.views.asks", + "seat:mesh-module-assigner.views.assignments", "seat:mesh-module-assigner.views.seat-holders", - "mesh-delivery-assigner.views.wants", + "seat:mesh-wants.views.wants", "mesh-catalog.catalog-revision", "mesh-catalog.registration-changed", "mesh-delivery.source-moved", @@ -97,9 +97,7 @@ "mesh-broker.dropped" ], "invokes": [ - "mesh-delivery-assigner.assigner_read_asks", "mesh-delivery-assigner.assigner_read_differences", - "mesh-delivery-assigner.assigner_read_assignments", "mesh-delivery-assigner.assigner_read_wants", "mesh-delivery-indexer.indexer_read_candidates", "mesh-delivery-indexer.indexer_read_config_candidates",