ADR 0256: one module reads a machine's hardware condition, and a fault is said through its health #206

Merged
mesh-admin merged 4 commits from decision/hardware-sensors into main 2026-10-08 13:20:58 +00:00
Contributor

The operator's boundary of 2026-10-08, recorded: what hardware a machine has is a node-engine fact; a module holding a generic role reads and provides it; a vendor module adds only vendor extras.

  • ADR 0256: a sensors module reads temperatures (against the hardware's own thresholds), fans, drive health (NVMe health log, SATA SMART) and the kernel's error counts on every machine. It claims no seat: nothing asks for the role yet, and a new seat would be a controller change first (ADR 0246). A hardware fault is said through ADR 0240's health (smartd by its unit, the module's root watch by the sensors_health tool), with the cost recorded: the condition names the module, and a standing fault holds the module's own builds at their gate. The machine judging its own hardware, as it judges its network, is the follow-up.
  • To-be 48 gains §11 (the machine under the modules: its hardware) and phase G.

Evidence: one of 116 catalogue modules read a temperature (the laptop's vendor module); none read a drive's health; the machines hold 20 drives, 15 spinning.

Checks: records.py, index.py, cycle.py, words.py and merge-check.sh pass locally.

Implementation: novox/mesh-catalog feat/sensors (modules/sensors).

The operator's boundary of 2026-10-08, recorded: what hardware a machine has is a node-engine fact; a module holding a generic role reads and provides it; a vendor module adds only vendor extras. - **ADR 0256**: a `sensors` module reads temperatures (against the hardware's own thresholds), fans, drive health (NVMe health log, SATA SMART) and the kernel's error counts on every machine. It claims **no seat**: nothing asks for the role yet, and a new seat would be a controller change first (ADR 0246). A hardware fault is said through ADR 0240's health (smartd by its unit, the module's root watch by the `sensors_health` tool), with the cost recorded: the condition names the module, and a standing fault holds the module's own builds at their gate. The machine judging its own hardware, as it judges its network, is the follow-up. - **To-be 48** gains §11 (the machine under the modules: its hardware) and phase G. Evidence: one of 116 catalogue modules read a temperature (the laptop's vendor module); none read a drive's health; the machines hold 20 drives, 15 spinning. Checks: records.py, index.py, cycle.py, words.py and merge-check.sh pass locally. Implementation: novox/mesh-catalog `feat/sensors` (modules/sensors).
mesh-admin added 1 commit 2026-10-08 11:49:02 +00:00
ADR 0256: one module reads the machine's hardware, so a failing drive or fan is raised, not found dead
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
c8b6a4eea8
A machine's temperatures, fans and drive health were read by the laptop's vendor module only; the
machines' 20 drives were watched by nothing. The sensors module reads them on every machine, holds no
seat until a caller must reach it by role, and says a hardware fault through ADR 0240's health until the
machine judges its own hardware. To-be 48 gains §11 and phase G.
Author
Contributor

Delivery novox/hq@df41dfff38b4 — delivered since 2026-10-08T13:21:10Z

Delivery plan — builds nothing: the change touches no module of the mesh's graph

Transitions

  • 2026-10-08 13:04 (new) → proposed (announced): novox/hq#206's head announced
  • 2026-10-08 13:04 proposed → checked (checked): the verdict names this commit
  • 2026-10-08 13:04 checked → ready (accepted): the gate passed or warned, and the repository's own check did not fail
  • 2026-10-08 13:21 ready → published (merged): on the trunk its modules follow: merged there, and its walk opened — or nothing for a walk to move
  • 2026-10-08 13:21 published → delivered (done): nothing for a walk to move

The commit's note under refs/notes/mesh-plan keeps every transition: git log --notes=mesh-plan.

<!-- mesh-delivery:view --> **Delivery** `novox/hq@df41dfff38b4` — **delivered** since 2026-10-08T13:21:10Z **Delivery plan** — builds nothing: the change touches no module of the mesh's graph **Transitions** - 2026-10-08 13:04 (new) → proposed (announced): novox/hq#206's head announced - 2026-10-08 13:04 proposed → checked (checked): the verdict names this commit - 2026-10-08 13:04 checked → ready (accepted): the gate passed or warned, and the repository's own check did not fail - 2026-10-08 13:21 ready → published (merged): on the trunk its modules follow: merged there, and its walk opened — or nothing for a walk to move - 2026-10-08 13:21 published → delivered (done): nothing for a walk to move The commit's note under `refs/notes/mesh-plan` keeps every transition: `git log --notes=mesh-plan`.
jschoubben added 1 commit 2026-10-08 12:35:25 +00:00
ADR 0256: say exactly what raises a condition, and why a drive is read only hourly
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
f63828ce1c
Rule 4 now matches the module after review: the NVMe temperature bit, old-age attributes, a fan's minimum
or alarm and a board chip's limits raise nothing; a stale watch does. The standby caveat is recorded: no
mesh tool sees a drive's spin-down timer, so spinning drives are read hourly.
jschoubben added 1 commit 2026-10-08 12:59:15 +00:00
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
0406373545
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.
jschoubben added 1 commit 2026-10-08 13:04:05 +00:00
ADR 0256: say exactly how a SAS drive, a USB drive and a stuck read are treated
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 delivered
df41dfff38
The SAS sentence now holds for modes with spaces, a hung read is unhealthy in two to three minutes, not
one, every USB drive is told sat, and the limits of a stuck read are recorded.
mesh-admin merged commit 4196b711f8 into main 2026-10-08 13:20:58 +00:00
mesh-admin deleted branch decision/hardware-sensors 2026-10-08 13:20:58 +00:00
Sign in to join this conversation.
No Reviewers
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: novox/hq#206