mesh-conditions: the indexer's manifest-held has its home (ADR 0632 §2; issue 1966)

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
This commit is contained in:
2026-11-04 21:38:14 +01:00
parent bbb9e37df4
commit 236ce2fe12
2 changed files with 8 additions and 4 deletions
@@ -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).
@@ -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)
}
}