From 236ce2fe121a76ea59f4ebb49f2f221bfbb2ef1d Mon Sep 17 00:00:00 2001 From: jochen Date: Wed, 4 Nov 2026 21:38:14 +0100 Subject: [PATCH] =?UTF-8?q?mesh-conditions:=20the=20indexer's=20manifest-h?= =?UTF-8?q?eld=20has=20its=20home=20(ADR=200632=20=C2=A72;=20issue=201966)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A module's new entry held from the whole mesh past its bound is a finding of the indexer's; without a home the keeper would not raise it. Claude-Session: https://claude.ai/code/session_01JG73KG7AfSdh6FP8VrBqCn --- modules/mesh-conditions/cmd/mesh-conditions/homes.go | 3 +++ .../mesh-conditions/cmd/mesh-conditions/keeper_test.go | 9 +++++---- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/modules/mesh-conditions/cmd/mesh-conditions/homes.go b/modules/mesh-conditions/cmd/mesh-conditions/homes.go index 9af3ef92d..dad8d9eb5 100644 --- a/modules/mesh-conditions/cmd/mesh-conditions/homes.go +++ b/modules/mesh-conditions/cmd/mesh-conditions/homes.go @@ -128,6 +128,9 @@ var Homes = map[string]Home{ "generated-types-out-of-step": {Source: "indexer", Observer: indexer}, "seat-defined-twice": {Source: "indexer", Observer: indexer}, "accepted-unsaid": {Source: "indexer", Observer: indexer}, + // A module's new entry held from the whole mesh past its bound while a counted node-engine lacks the reading it + // needs (ADR 0632 §2), cleared when the hold moves or is dropped. + "manifest-held": {Source: "indexer", Observer: indexer}, // The package seats' holder (design 32): the forge refused the packages account's write token. "packages-token-refused": {Source: "gitea", Observer: gitea}, // The kinds that end with the controller and are carried until its lease write (clauses 4, 9). diff --git a/modules/mesh-conditions/cmd/mesh-conditions/keeper_test.go b/modules/mesh-conditions/cmd/mesh-conditions/keeper_test.go index ed05cb9ee..62aacc79f 100644 --- a/modules/mesh-conditions/cmd/mesh-conditions/keeper_test.go +++ b/modules/mesh-conditions/cmd/mesh-conditions/keeper_test.go @@ -284,7 +284,7 @@ func TestEveryControllerKindHasItsHome(t *testing.T) { "data-shrank": selfCheck, "retire-waiting": provisioner, "asks-undelivered": messenger, "image-missing": artifactStore, "build-failed": builder, "floor-silent": builder, "old-form-held": builder, "tag-removal-not-done": builder, "seat-definition-unparsed": indexer, "generated-types-out-of-step": indexer, - "seat-defined-twice": indexer, "accepted-unsaid": indexer, "packages-token-refused": gitea, + "seat-defined-twice": indexer, "accepted-unsaid": indexer, "manifest-held": indexer, "packages-token-refused": gitea, "publish-refused": builder, "publish-unanswered": builder, "seat-outcome-unread": builder} { if h, ok := Homes[kind]; !ok || h.Observer != observer || h.Carried { t.Errorf("%s's home is %+v", kind, h) @@ -327,9 +327,10 @@ 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. - // 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 { + // And the owners' changes not said, view-unsaid: 104. And the indexer's mesh-wide hold past its bound, manifest-held + // (ADR 0632 §2): 105. (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) != 105 || carried != 37 { t.Errorf("the table holds %d kinds, %d carried", len(Homes), carried) } }