From 2b340d7ddb32c28ddb4a93f2f8950c787bc99b31 Mon Sep 17 00:00:00 2001 From: jochen Date: Wed, 4 Nov 2026 18:18:23 +0100 Subject: [PATCH] mesh-conditions: a home for view-unsaid, every views owner's own mesh-sdk's views.UnsaidFinding (id .) is written by the indexer and the assigner in their own findings; the closed set finds a catalogue writer of it too. nats.status-unwritten is said to the keeper directly, not a finding: no row. Claude-Session: https://claude.ai/code/session_01JG73KJNrH5EgFXMKKYSrig --- modules/mesh-conditions/cmd/mesh-conditions/homes.go | 3 +++ .../mesh-conditions/cmd/mesh-conditions/keeper_test.go | 10 ++++++---- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/modules/mesh-conditions/cmd/mesh-conditions/homes.go b/modules/mesh-conditions/cmd/mesh-conditions/homes.go index 4a0a8da7..9af3ef92 100644 --- a/modules/mesh-conditions/cmd/mesh-conditions/homes.go +++ b/modules/mesh-conditions/cmd/mesh-conditions/homes.go @@ -105,6 +105,9 @@ var Homes = map[string]Home{ // An owner's views event too large to say (ADR 0615 ยง5): written by each owner of a views family in its own findings // (the indexer, the assigner), so the kind has no one observer. "view-too-large": {Source: "views", Why: "every owner of a views family writes its own"}, + // An owner's change not said on its views family past its bound (mesh-sdk views.UnsaidFinding, id .): + // written by each owner of a views family in its own findings (the indexer, the assigner), so no one observer. + "view-unsaid": {Source: "views", Why: "every owner of a views family writes its own"}, // The builder's own (design 51): a build that ended failed, a floor whose holder said nothing past its bound, an old // form held seven days by a counted node-engine, a tag's removal asked and not done. "build-failed": {Source: "builder", Observer: builder}, diff --git a/modules/mesh-conditions/cmd/mesh-conditions/keeper_test.go b/modules/mesh-conditions/cmd/mesh-conditions/keeper_test.go index 133a492c..ed05cb9e 100644 --- a/modules/mesh-conditions/cmd/mesh-conditions/keeper_test.go +++ b/modules/mesh-conditions/cmd/mesh-conditions/keeper_test.go @@ -308,7 +308,7 @@ func TestEveryControllerKindHasItsHome(t *testing.T) { } } // The readers' unanswered first view and the owners' views too large to say are every reader's and owner's own. - for _, kind := range []string{"first-view-unanswered", "view-too-large", "family-not-heard"} { + for _, kind := range []string{"first-view-unanswered", "view-too-large", "view-unsaid", "family-not-heard"} { if h := Homes[kind]; h.Observer != "" || h.Carried || h.Controller { t.Errorf("%s's home is %+v", kind, h) } @@ -327,16 +327,18 @@ func TestEveryControllerKindHasItsHome(t *testing.T) { // 19 of ADR 0564, the 63 of the table, plan-failed and stalled, mesh-config's four (design 32), the readers' unanswered // first view, the owners' view too large, the builder's four, the indexer's four and the package seats' token refused. // And the builder's three publishing kinds and the delivery parts' family not heard: 103. - if len(Homes) != 103 || carried != 37 { + // And the owners' changes not said, view-unsaid: 104. (The bus module's own conditions, nats.status-unwritten among + // them, are said to the keeper directly, never through findings, so they have no home here.) + if len(Homes) != 104 || carried != 37 { t.Errorf("the table holds %d kinds, %d carried", len(Homes), carried) } } // viewFindingWriters are the catalogue modules (under modules) whose non-test Go code writes a views finding into its own -// findings: views.UnansweredFinding, views.TooLargeFinding or views.OwnFindings. +// findings: views.UnansweredFinding, views.TooLargeFinding, views.UnsaidFinding or views.OwnFindings. func viewFindingWriters(t *testing.T, modules string) []string { t.Helper() - writes := regexp.MustCompile(`views\.(UnansweredFinding|TooLargeFinding|OwnFindings)\b`) + writes := regexp.MustCompile(`views\.(UnansweredFinding|TooLargeFinding|UnsaidFinding|OwnFindings)\b`) var out []string entries, err := os.ReadDir(modules) if err != nil {