§717 (2), the status view: it follows the assigner's views by their seats

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
This commit is contained in:
2026-11-12 19:36:17 +01:00
parent c3fd29a64c
commit 8fa8289a6a
3 changed files with 18 additions and 14 deletions
@@ -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"},
+9 -5
View File
@@ -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) {
+3 -5
View File
@@ -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",