Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
43 changes: 28 additions & 15 deletions docs/hardware.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,10 @@ dependency of the mains-cut path and is watched as one: Alloy's node collector
exports `node_power_supply_*` from both, and `host.rules.yaml` alerts when the
shelf is off mains, when a cell falls below 80 % of its design capacity, and
when a laptop reports no cell at all
([#454](https://github.com/Gerrrt/HomeLab/issues/454)).
([#454](https://github.com/Gerrrt/HomeLab/issues/454)). `prometheus`'s cell was
replaced on 2026-09-18 and reads 101 % of its design capacity at one cycle;
`oracle`'s is the original, reads 72 %, and is unbought. How long either laptop
actually runs on its cell has never been measured.

The patch panel and the PDU were listed the other way round here until
2026-08-29. U8 is the panel and U7 is the PDU, confirmed against the rack.
Expand Down Expand Up @@ -403,27 +406,37 @@ revisions of this repository treated `shiva` as the hypervisor itself.
([#76](https://github.com/Gerrrt/HomeLab/issues/76))
- A1437 battery cell for `prometheus`[^A1437] — the pack that fits the
`A1425`, the late-2012 Retina 13" in the Compute table — bought new
2026-09-13, **delivered 2026-09-18 and not yet fitted.** A consumable and
2026-09-13, delivered 2026-09-18 and **fitted the same day.** A consumable and
not an upgrade: it is the one
exception the roadmap's *Never* line names, bought because the estate's
mains-cut path rests on this cell and the failure mode of a
thirteen-year-old lithium cell on a shelf is swelling
([#454](https://github.com/Gerrrt/HomeLab/issues/454)). The listing calls
it genuine and its brand field says unbranded, so it is recorded as a
compatible cell, not an Apple part. That wording was written to be settled
once the part could be looked at, which it now can: the cell arrived
2026-09-18 and this line stays as it is until someone reads the pack's own
markings and says otherwise. The cell it
replaces read 94 % of design capacity after 108 cycles on 2026-09-12, which
is above `HostBatteryHealthLow`'s 80 % — it is bought on age, not on the
alert. Nothing in the Compute table changes; a cell is not a spec.
**Checked at the fit, not assumed:** `charge_full` at or near
`charge_full_design` and a cycle count reading low, then mains pulled and
the host staying up with `HostOnBattery` firing — the property the cell is
there for, and untested since the machine was commissioned
([`replace-the-laptop-cell.md`](runbooks/replace-the-laptop-cell.md), which
also carries the stack-down window and the old cell's disposal). `oracle`'s
cell reads 72 % and is second in line, unbought.
once the part could be looked at, and the fit settled it sideways.
`manufacturer` and `model_name` came back unchanged — `SMP`, `bq20z451` —
because an aftermarket A1437 reuses the same gas gauge; but **both design
figures moved**, `charge_full_design` 6.6 → 6.8 Ah and `voltage_min_design`
11.21 → 11.4 V, which is a pack reporting its own numbers and is the only
proof of a different part available on a machine that exports no serial. It
stays recorded as a compatible cell. The new pack reads `charge_full`
6.889 Ah of 6.8 Ah design (101 %) at `cyclecount` 1. The cell it replaced
read 94 % of design capacity after 108 cycles, on 2026-09-12 and again on
2026-09-17 — above `HostBatteryHealthLow`'s 80 %, so it was bought on age and
not on the alert — and went for recycling on 2026-09-18. Nothing in the
Compute table changes; a cell is not a spec.
**Checked at the fit:** `charge_full` above `charge_full_design`,
`cyclecount` 1, `charge_ampere` moving, and both design figures changed — all
read from this host's own Prometheus on 2026-09-18. **Not checked, and the
reason [#454](https://github.com/Gerrrt/HomeLab/issues/454) is still open:**
the mains pull on the fully charged pack, which is the property the cell was
bought for and a runtime the estate has never had. The pack was still
charging when the fit was recorded.
([`replace-the-laptop-cell.md`](runbooks/replace-the-laptop-cell.md) carries
the baseline, the stack-down window — 14:53 to about 18:12 on the day, over
its own two-hour bound — and the disposal.) `oracle`'s cell reads 72 % and is
second in line, unbought.
- ViewSonic N1700W LCD, used as a rack console via the KVM
- RJ45 Cat6 in-line couplers[^Couplers]
- Cat6 patch cables[^Patchcables]
Expand Down
49 changes: 38 additions & 11 deletions docs/roadmap.md
Original file line number Diff line number Diff line change
Expand Up @@ -62,9 +62,24 @@ three rows to two, and neither of them is a part: two licences and a drive
kept at another address. What closes #454 is not the cell landing but the fit
and the test after it — `charge_full` at or near design, a low cycle count,
and mains pulled with the host staying up — which
[`fit-the-ups-battery.md`](runbooks/fit-the-ups-battery.md) names. `oracle`'s
cell, the one that measures worse, stays unbought and second in line, as that
issue ranked it.
[`replace-the-laptop-cell.md`](runbooks/replace-the-laptop-cell.md) names.
This paragraph pointed at
[`fit-the-ups-battery.md`](runbooks/fit-the-ups-battery.md) until 2026-09-18 —
the rack pack in `mjolnir`, not this cell — which is the same wrong pointer
[#506](https://github.com/Gerrrt/HomeLab/pull/506) corrected in the alert's own
description. `oracle`'s cell, the one that measures worse, stays unbought and
second in line, as that issue ranked it.

**2026-09-18: the cell is fitted, and the issue stays open.** The A1437 went
into `prometheus` the day it was delivered; the host was down from 14:53 to
about 18:12 UTC. The new pack reads `charge_full` 6.889 Ah of 6.8 Ah design at
one cycle, and both of its design figures differ from the old pack's — an
aftermarket cell reports its own, which is the only proof of a changed part on
a machine that exports no serial number. **The buy table does not move**: the
cell left it on 2026-09-13, and fitting is not buying. What is still owed is
the mains pull on the charged pack and the runtime it measures, so
[#454](https://github.com/Gerrrt/HomeLab/issues/454) stays open and this gets
no *Done* entry.

**Buy these, and the estate as decided is fully bought:**

Expand Down Expand Up @@ -104,11 +119,12 @@ restore onto `trinity` needs
installer stick — between them, the whole of what the rehearsal now waits on;
the two Exos X20 18 TB drives for `smaug`'s mirror
([#413](https://github.com/Gerrrt/HomeLab/issues/413)); the CRS326 that
replaces `neo` ([#444](https://github.com/Gerrrt/HomeLab/issues/444)); the
A1437 cell that replaces `prometheus`'s thirteen-year-old one
([#454](https://github.com/Gerrrt/HomeLab/issues/454)); and two HP SFF drive
trays for `Saruman`, the carriers its SM863a pair needs to go in the bays
([#418](https://github.com/Gerrrt/HomeLab/issues/418)).
replaces `neo` ([#444](https://github.com/Gerrrt/HomeLab/issues/444)); and two
HP SFF drive trays for `Saruman`, the carriers its SM863a pair needs to go in
the bays ([#418](https://github.com/Gerrrt/HomeLab/issues/418)). The A1437 cell
for `prometheus` was on this list until 2026-09-18 and is on neither now: it is
fitted ([#454](https://github.com/Gerrrt/HomeLab/issues/454)). These two
paragraphs track money that has not yet become a working part, and that has.

**2026-09-17: the trays were bought on 2026-09-11 and are only now written
down.** They were paid for in the same sitting as the I226 card, the Exos pair
Expand Down Expand Up @@ -201,9 +217,12 @@ is the point, not a problem to spend money on.
**consumable whose failure is a safety or availability event** is not an
upgrade. `prometheus`'s battery is the worked example
([#454](https://github.com/Gerrrt/HomeLab/issues/454)) — the estate's
mains-cut path depends on it, `host.rules.yaml` measures it since 2026-09-12
(94 % of design after 108 cycles), and the failure mode of a thirteen-year-old
cell is a fire on a shelf. `oracle` has the same kind of cell and it measures
mains-cut path depends on it, `host.rules.yaml` has measured it since
2026-09-12 — 94 % of design after 108 cycles, on the cell that was there then —
and the failure mode of a thirteen-year-old cell is a fire on a shelf. **That
cell was bought 2026-09-13 and fitted 2026-09-18**, so this is the exception
being exercised rather than restated; the new pack reads 101 % of its design
capacity at one cycle, and the runtime it was bought for is still unmeasured. `oracle` has the same kind of cell and it measures
worse, 72 %, so `HostBatteryHealthLow` fires for it first; it stays second in
line only because `prometheus` is the host whose death is the estate going
blind. The cell for `prometheus` was bought on 2026-09-13; nothing else about
Expand Down Expand Up @@ -475,6 +494,14 @@ new since this file was last honest:
catches a silently dead notification path, and it cannot report a mains cut,
because the switch between the two laptops has no battery (#110).

**That last clause has been stale since 2026-09-08 and is corrected rather
than swapped.** The switch was racked in U4 on UPS power by
[#110](https://github.com/Gerrrt/HomeLab/issues/110), and each laptop rides a
cut on its own cell — measured since 2026-09-12 and, on `prometheus`, replaced
on 2026-09-18 ([#454](https://github.com/Gerrrt/HomeLab/issues/454)). So the
off-host check *can* report a mains cut, for exactly as long as `prometheus`
stays up on its cell, which is the one thing still unmeasured.

Two collection faults of the same kind were fixed in
[#62](https://github.com/Gerrrt/HomeLab/pull/62): the agent was answering to the
name of the server, and cAdvisor could only see its own cgroup. Both ran healthy
Expand Down
14 changes: 9 additions & 5 deletions docs/runbooks/fit-the-ups-battery.md
Original file line number Diff line number Diff line change
Expand Up @@ -86,11 +86,13 @@ is measured rather than assumed
([#454](https://github.com/Gerrrt/HomeLab/issues/454)). No collector was
needed: Alloy's node collector already exports `node_power_supply_*` from both
hosts, and `host.rules.yaml` reads it — `HostBatteryHealthLow` when a cell's
`charge_full` falls below 80 % of `charge_full_design` (`prometheus` read 94 %
after 108 cycles, `oracle` 72 %), `HostOnBattery` when the mains adapter loses
`charge_full` falls below 80 % of `charge_full_design` (`oracle` reads 72 %;
`prometheus` read 94 % after 108 cycles until its cell was replaced on
2026-09-18, and now reads 101 % at one cycle), `HostOnBattery` when the mains
adapter loses
input, `HostBatteryNotReported` when a laptop stops reporting a cell. The cell
for `prometheus`, an A1437, was bought 2026-09-13 and is recorded in
[`hardware.md`](../hardware.md#accessories). The swap and the tests that prove
for `prometheus`, an A1437, was bought 2026-09-13, **fitted 2026-09-18**, and
is recorded in [`hardware.md`](../hardware.md#accessories). The swap and the tests that prove
it are [`replace-the-laptop-cell.md`](replace-the-laptop-cell.md), which is
where the baseline, the disposal and the stack-down window are written down —
that cell is glued into the machine running this stack, so fitting it blinds
Expand All @@ -99,7 +101,9 @@ pack did not carry. What it proves is the same shape as step 5 here:
`charge_full` at or near `charge_full_design` and the cycle count reading low,
then that laptop's mains pulled with the host staying up and `HostOnBattery`
firing — the property the cell is there for, and untested since the machine was
commissioned.
commissioned. The first half was proved at the fit on 2026-09-18: `charge_full`
above design, `cyclecount` 1. **The mains pull on the charged pack has still
not been run**, so that property remains untested and #454 is still open.

## Before you start

Expand Down
Loading
Loading