diff --git a/02-DECISIONS/0240-a-module-says-how-it-is-healthy-and-the-node-engine-judges-it.md b/02-DECISIONS/0240-a-module-says-how-it-is-healthy-and-the-node-engine-judges-it.md index c4fd56b0..1eba9012 100644 --- a/02-DECISIONS/0240-a-module-says-how-it-is-healthy-and-the-node-engine-judges-it.md +++ b/02-DECISIONS/0240-a-module-says-how-it-is-healthy-and-the-node-engine-judges-it.md @@ -184,6 +184,11 @@ that provision's provider for this consumer is unhealthy on the record, the cons the provider's condition — listed there as waiting on it, raised as nothing of its own — and the consumer's gate waits rather than fails. What a consumer finds while its provider is healthy is its own. +> **The mechanism changed — 2026-10-11, by [ADR 0292](0292-a-consumer-of-the-part-a-provider-waits-on-is-held-under-the-wait-and-passes-its-gate-as-a-wait-for-a-person.md).** The hold under an unhealthy provider, and its consumer's gate +> waiting, stand. A provider that only waits for the operator (ADR 0283) now holds the consumers of a provision one +> of its waits covers, listed at its `needs-operator` condition, which stays a warning; their gate passes as a wait +> for a person, carrying the wait. A consumer no wait covers is said on its own. + **6. Nothing is restarted for being unhealthy.** The runtime restarts what exits, as now. A condition reaches a person through the operator's conversation, or a healer; a healer that restarts on health is its own decision. diff --git a/02-DECISIONS/0283-a-part-that-waits-for-the-operators-secret-or-setting-is-said-as-waiting-passes-the-first-node-gate-and-names-the-act.md b/02-DECISIONS/0283-a-part-that-waits-for-the-operators-secret-or-setting-is-said-as-waiting-passes-the-first-node-gate-and-names-the-act.md index 90d9b0a5..4bebbcff 100644 --- a/02-DECISIONS/0283-a-part-that-waits-for-the-operators-secret-or-setting-is-said-as-waiting-passes-the-first-node-gate-and-names-the-act.md +++ b/02-DECISIONS/0283-a-part-that-waits-for-the-operators-secret-or-setting-is-said-as-waiting-passes-the-first-node-gate-and-names-the-act.md @@ -99,6 +99,10 @@ named exactly, once. Nothing here conflicts with GENESIS. that reason. The type, its constructors and its reader are mesh-sdk's (`go/health`), so the module and the node-engine read one shape; an answer without `state` is read from `healthy` as before. + > **The mechanism changed — 2026-10-11, by [ADR 0292](0292-a-consumer-of-the-part-a-provider-waits-on-is-held-under-the-wait-and-passes-its-gate-as-a-wait-for-a-person.md).** The three answers stand. Which consumers a waiting module + > holds is now read from its waits: a wait covers a provision when its `part` is that provision's name, or when + > the secret it waits for is the provision's shared credential; a wait that covers nothing holds no consumer. + 2. **The node-engine states such a resource `waiting`**, a fifth state beside healthy, unhealthy, starting, held and unknown (ADR 0240 §4), with its waits. One look that says it is enough, inside the grace too: it is a statement, not a flake that a second look might not repeat. The next look that says diff --git a/03-DESIGN/01-to-be/48-a-module-says-how-it-is-healthy.md b/03-DESIGN/01-to-be/48-a-module-says-how-it-is-healthy.md index 59be9292..711593e4 100644 --- a/03-DESIGN/01-to-be/48-a-module-says-how-it-is-healthy.md +++ b/03-DESIGN/01-to-be/48-a-module-says-how-it-is-healthy.md @@ -2,8 +2,9 @@ layer: to-be status: in-progress code: [mesh-host, mesh-controller, mesh-lab, mesh-catalog, mesh-sdk] -updated: 2026-10-10 +updated: 2026-10-11 decisions: + - 02-DECISIONS/0292-a-consumer-of-the-part-a-provider-waits-on-is-held-under-the-wait-and-passes-its-gate-as-a-wait-for-a-person.md - 02-DECISIONS/0283-a-part-that-waits-for-the-operators-secret-or-setting-is-said-as-waiting-passes-the-first-node-gate-and-names-the-act.md - 02-DECISIONS/0254-a-wait-for-a-persons-new-login-is-not-a-gates-failure-and-each-module-of-a-send-keeps-its-own-pass.md - 02-DECISIONS/0240-a-module-says-how-it-is-healthy-and-the-node-engine-judges-it.md @@ -218,6 +219,20 @@ condition is open: P healthy again ─► held findings released: a consumer still failing is now its own ``` +**A provider that only waits for the operator holds the consumers of the part it waits for** +([ADR 0292](../../02-DECISIONS/0292-a-consumer-of-the-part-a-provider-waits-on-is-held-under-the-wait-and-passes-its-gate-as-a-wait-for-a-person.md), +issue 405). A wait covers a provision when its `part` is that provision's name, or when the secret it waits for is +the provision's shared credential: + +``` + provider P waits ─► module.P..needs-operator (a warning, whoever waits on it) + evidence: waiting on it — consumer A + consumer A failing, ─► no condition of its own; its gate passes as a wait for a person, + its provision covered carrying P's wait + consumer B failing, ─► module.B..unhealthy, saying P waits, but not for anything B + no wait covers it is known to need +``` + What a consumer finds while its provider is healthy, or by a check that names no provision, is its own. A machine-level condition is never pinned on a module ([issue 281](../../04-ISSUES/281-a-tier-sent-one-module-at-a-time-blamed-a-module-for-its-machine/00-report.md)).