fit-the-ups-battery.md states the
design assumption plainly:
prometheus and oracle hang off an unmanaged TP-Link that has no battery at
all. Both are laptops with their own batteries, so on a mains cut they stay
running and go deaf — the monitoring host survives the event it exists
to observe and cannot report it.
#93 and
#110 closed the deaf half,
by fitting the UPS pack and racking the shelf switch on UPS power.
The running half rests entirely on two thirteen-year-old lithium cells that
nothing monitors and no document names as a dependency.
A dead cell in prometheus silently converts a mains cut from "the monitoring
host survives the event it exists to observe" back into "it dies with it" —
reopening exactly what #110 closed, with no alert, no metric, and no line in any
file saying the guarantee has lapsed. It is the same shape as the UPS card
fabricating a healthy pack: the estate believes it has a property it does not
have.
There is also a plain safety case. A swollen cell in a rack, on a shelf, in an
occupied room is a fire risk, and it is the failure mode a laptop battery of
this age actually has.
What this carries
1. The cell. A1437, which fits the A1425 — the Retina 13" late-2012 that
docs/hardware.md records as prometheus. Roughly $39 bare, or ~$110 for a kit
with tools and adhesive solvent, which is the sensible option for a glued cell in
a machine nobody wants to be learning on.
2. A collector, so the next one is visible. /sys/class/power_supply/BAT0/
exposes energy_full against energy_full_design and a cycle count, all
world-readable. A textfile collector emitting those fits the exporter-less
pattern scripts/collect-*.sh already establishes — no new service, no new
image, no new port, no root, and it is scraped by the Alloy already running on
the host.
That turns the replacement into something provable rather than assumed, and
gives the next degradation somewhere to show up.
oracle has the same cell problem and the same absent metric. It is second in
line, not first — it holds the wiki and the off-host firewall exports, but
prometheus is the host whose death is the estate going blind.
3. The carve-out in roadmap.md. The list currently ends:
Never, and the documents say so: anything for prometheus or oracle.
That was written about upgrades — money spent making a landfill laptop
faster is money wasted, and the README is proud of the machine precisely as it
is. It was not written about a consumable whose failure is a safety event and
an availability event at once. The line needs to narrow rather than reverse,
because a document that overstates a rule is worse than one that names its
exception.
Verification
After the swap, energy_full should sit at or near energy_full_design and the
cycle count should read low. Then pull mains and confirm the host stays up —
which is the property this issue is actually about, and which has probably not
been tested since the machine was commissioned.
Purchases this needs
The cell. $39, or ~$110 with tools and solvent. Recorded on the roadmap's
list against the carve-out above.
Corrected 2026-09-19
Items 1 and 3 are done and item 2 was never needed.
What keeps this open is step 8 of replace-the-laptop-cell.md: the mains pull on the charged pack and the runtime it measures. The accidental firing at 41 % on 2026-09-18 was not the bounded test and measured no runtime. Two things the fit surfaced and this issue does not own: oracle's cell is #531, and continuous watching of cell temperature and runtime is #532. The RTC reset the swap caused is #519.
fit-the-ups-battery.mdstates thedesign assumption plainly:
#93 and
#110 closed the deaf half,
by fitting the UPS pack and racking the shelf switch on UPS power.
The running half rests entirely on two thirteen-year-old lithium cells that
nothing monitors and no document names as a dependency.
A dead cell in
prometheussilently converts a mains cut from "the monitoringhost survives the event it exists to observe" back into "it dies with it" —
reopening exactly what #110 closed, with no alert, no metric, and no line in any
file saying the guarantee has lapsed. It is the same shape as the UPS card
fabricating a healthy pack: the estate believes it has a property it does not
have.
There is also a plain safety case. A swollen cell in a rack, on a shelf, in an
occupied room is a fire risk, and it is the failure mode a laptop battery of
this age actually has.
What this carries
1. The cell.
A1437, which fits theA1425— the Retina 13" late-2012 thatdocs/hardware.mdrecords asprometheus. Roughly $39 bare, or ~$110 for a kitwith tools and adhesive solvent, which is the sensible option for a glued cell in
a machine nobody wants to be learning on.
2. A collector, so the next one is visible.
/sys/class/power_supply/BAT0/exposes
energy_fullagainstenergy_full_designand a cycle count, allworld-readable. A textfile collector emitting those fits the exporter-less
pattern
scripts/collect-*.shalready establishes — no new service, no newimage, no new port, no root, and it is scraped by the Alloy already running on
the host.
That turns the replacement into something provable rather than assumed, and
gives the next degradation somewhere to show up.
oraclehas the same cell problem and the same absent metric. It is second inline, not first — it holds the wiki and the off-host firewall exports, but
prometheusis the host whose death is the estate going blind.3. The carve-out in
roadmap.md. The list currently ends:That was written about upgrades — money spent making a landfill laptop
faster is money wasted, and the README is proud of the machine precisely as it
is. It was not written about a consumable whose failure is a safety event and
an availability event at once. The line needs to narrow rather than reverse,
because a document that overstates a rule is worse than one that names its
exception.
Verification
After the swap,
energy_fullshould sit at or nearenergy_full_designand thecycle count should read low. Then pull mains and confirm the host stays up —
which is the property this issue is actually about, and which has probably not
been tested since the machine was commissioned.
Purchases this needs
The cell. $39, or ~$110 with tools and solvent. Recorded on the roadmap's
list against the carve-out above.
Corrected 2026-09-19
Items 1 and 3 are done and item 2 was never needed.
charge_fullreads 6.889 Ah of 6.8 Ah design at one cycle.prometheus.exporter.unixexportednode_power_supply_*all along; the rules in feat(prometheus): alert on the laptops' batteries and mains (#454) #461 read it. Note the body namesenergy_full/energy_full_design— neither BAT0 exposes those; the family ischarge_*. A textfile collector written to the body's text would have produced an empty.prom.What keeps this open is step 8 of
replace-the-laptop-cell.md: the mains pull on the charged pack and the runtime it measures. The accidental firing at 41 % on 2026-09-18 was not the bounded test and measured no runtime. Two things the fit surfaced and this issue does not own:oracle's cell is #531, and continuous watching of cell temperature and runtime is #532. The RTC reset the swap caused is #519.