Files
mesh-catalog/modules/mesh-self-check
jschoubben bbd02004b8
mesh/delivery merged: source.main moved to novox/mesh-catalog@19714898986c
mesh/delivery-group group fix/l4-quick merged: every member is merged
mesh/check pass bbd02004b863 on 3d7830cfdc4f | unit 2729 run, 4570 kept, 16 skipped | integration 2975 run, 4493 kept, 25 skipped | over bound: unit, …
Let the health take-over's compare come out empty (issue 1952)
The self-check's D13 read every reading, good night, indexer module and
manifest one key at a time through the runtime and never finished
within its 30 s; it now keeps those states by watching them and judges
from memory, and reads the setting `probes` once a run. Findings name
their key's last part `ref`, since the runtime refuses a field named
`token`; the self-check, the healers and the keeper are pinned to the
mesh-sdk that reads it and lets a carried holder say its seat's events.
The controller's own bus.nats.upgrade-failed ends with its lease, as
the operator approved on 2026-10-31, so compare lists it apart.

Quick vs thorough: quick, these fixes for L4's take-over now; the
thorough fix (research 032 / ADR 0240's health view extension) is
decided later.

Claude-Session: https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL
2026-10-31 21:35:59 +01:00
..

mesh-self-check

Holds the seat mesh-self-check (novox/hq ADR 0564 §6): the mesh's self-check, moved out of the controller. Go, one binary (cmd/mesh-self-check), served by a runtime of its own on its own bus account (runs-as), so that its account alone writes its buckets.

What it does

Every five minutes (the first run a minute after it starts) it runs its registry of probes, each within thirty seconds. A probe is one live invariant of a design, with its assertion as the controller had it, reading its facts on the bus (the bus module's tools for the bus's own state). A probe whose facts have no home on the bus yet answers deferred, naming them: never a pass. A probe that cannot run is said in the verdict at once, and written as a finding of its own (probe.<id>.failed) when the next run cannot run it either.

What a probe finds is written as a finding, one key <scope>.<id>.<kind> per fault, only when what it says changes, and deleted when a run no longer sees it. The condition keeper (mesh-conditions) raises and clears conditions from them. A finding one look can be wrong about (a consumer behind after a burst) is written when two runs in a row see it.

Every run ends with the event checked, the body of the controller's doctor-heartbeat, which the watchman (S10) and mesh-watcher on another machine hear: a self-check that stops checking is said through a path that does not pass through it.

What it keeps

  • mesh-self-check_findings: what it finds wrong now.
  • mesh-self-check_verdict: the key last, the last run whole.
  • mesh-self-check_verdicts: every run (each probe's findings at most twenty), kept a week by the bucket's age.

Its verbs and tools

  • mesh-self-check.doctor: the last verdict; run=true runs now; probe=<id> one probe whole.
  • mesh-self-check.probes: the registry, with what each deferred probe lacks.
  • self_check_findings, self_check_verdicts: the reads of its buckets.