ADR 0256: one reader of the drives, and a stuck read is said
mesh/merge-gate pass: the change touches no module of the mesh's graph
mesh/repo-check pass: its merge-check.sh passed
mesh/delivery superseded: a newer head of the same pull request

After the second review: smartd is dropped as a second reader that could wake or keep awake the drives,
a stuck read or a drive not looked at is unhealthy, a drive asleep for a day is HIGH and never unhealthy,
and a board chip's maximum says nothing of a fan. The never-woken and hourly claims now say exactly what
holds.
This commit is contained in:
jochen
2026-10-08 14:59:12 +02:00
parent f63828ce1c
commit 0406373545
2 changed files with 68 additions and 47 deletions
@@ -284,24 +284,27 @@ health of this design, not yet through the machine's own judgement as §10 does
```
sensors on one machine node-engine controller
┌──────────────────────────────────────────────┐
│ smartd (unit) watches every drive, │ unit ──► liveness + readiness
│ never wakes one asleep │
│ watch (root) each drive's health │
│ (spinning: hourly); fans │ tool ──► asks sensors_health ──► module.sensors.<m>.unhealthy
│ that ran since boot │ every 60 s, 2 looks (the why is its evidence)
│ tools (operator) /sys and the watch's │
│ readings; read-only │
│ drive reader (root) each drive's health, │ unit ──► liveness + readiness
│ never one asleep; each │
│ read bounded, or said │
│ fan watch fans that ran since boot │ tool ──► asks sensors_health ──► module.sensors.<m>.unhealthy
│ │ every 60 s, 2 looks (the why is its evidence)
│ tools (operator) /sys and the two files; │
│ read-only │
└──────────────────────────────────────────────┘
```
- **Unhealthy means the hardware is failing, measured against its own thresholds:** a CPU, GPU, drive or
zone temperature at or above its own critical value (a board chip's is shown, never judged); a drive that
says it is failing (a SATA drive's verdict, a pre-failure attribute failing now, an NVMe critical warning
bit other than temperature); a fan that ran since boot and reads 0 while the CPU, the board or a sensor on
its own chip is at or above its own maximum; memory that reports an uncorrectable error; or the watch's
readings older than five minutes. HIGH readings and fan notes are said by the tools and raise nothing.
- **A drive is never woken, and is read seldom enough to sleep:** a spinning drive hourly, by the watch and
by smartd, because a read can restart a standby timer the mesh cannot yet see.
bit other than temperature); a fan that ran since boot and reads 0 while a CPU sensor, a thermal zone or a
sensor on its own non-board chip is at or above its own maximum; memory that reports an uncorrectable
error. **Or that the module's own processes are stale:** a file five minutes old, a drive's read stuck
past its bound, a drive not looked at for twice its cadence. HIGH readings, fan notes and a drive asleep
for a day are said by the tools and raise nothing.
- **One reader, never waking a drive that can say it sleeps:** the module's drive reader alone reads the
drives (no `smartd`), a spinning drive hourly, because a read can restart a standby timer the mesh cannot
yet see.
- **A class the machine lacks is not present**, never a failure: a virtual machine with no sensor and no
SMART drive is healthy.
- **The cost of using module health for the machine's fault** is that the condition names the module, and a
@@ -320,7 +323,7 @@ health of this design, not yet through the machine's own judgement as §10 does
| D — the proof | mesh-lab, mesh-catalog | the bed; the catalogue's check starting every changed resource on it; adopted image checks proved | the replay of the studio's false *unhealthy* fails the bed, not a machine |
| E — the migration | mesh-catalog, mesh-controller | the declarations of §9 steps 2–5; the count kept in the catalogue and its test; `module check` refusing after the date | the count is zero, or the date has passed and `module check` refuses |
| F — the machine's network | `mesh-host` (node-engine), `mesh-controller`, `mesh-catalog` | §10: the five parts judged on two looks and stated; the three conditions said once; the gate waiting on another's; `node show` | the tests of ADR 0241 pass; the drill's replay raises and clears; a VPN connect on the laptop is raised naming its writer and cleared by the reconcile |
| G — the machine's hardware | `mesh-catalog` | §11: the `sensors` module, its tools, `smartd` and the watch, both checks declared | its tests pass; `module check` accepts its health; on the first machine both checks are stated healthy |
| G — the machine's hardware | `mesh-catalog` | §11: the `sensors` module, its tools, the drive reader and the fan watch, both checks declared | its tests pass; `module check` accepts its health; on the first machine both checks are stated healthy |
Phases A and B may be built together; A is live first, because it judges without a single declaration.