Inside one pack
Rule A · spread
- Go < 40 mΩ
- Caution 40–49 mΩ
- Pull ≥ 50 mΩ
Amber panel, amber caution band. This rule does not retire a pack by itself. The status call can be OFF or Caution for floor or self-discharge while spread is still Go.
Source and rules
iCharger DX8 Storage logs (individual pack storage charges). Last ingest 2026-09-30. The canonical file is the append-only IR store: 156 rows across 14 sessions. The pages read the JSON built from that store.
Glossary
Internal resistance in milliohms, one number per cell, from the DX8 storage-charge IR line. Pack average is the mean of the six cells.
Glossary
Intra-pack spread: the highest cell IR minus the lowest cell IR in that pack, in milliohms. Rule A reads this number.
Glossary
Start floor, in millivolts: the lowest cell voltage at the start of the storage charge. A watch line sits at 3600 mV.
Glossary
Inter-pack rest delta, in volts: on a night, the highest pack rest voltage minus the lowest in that fleet. Rest voltage is the sum of the six start-cell voltages. Rule B reads the full measured set. The next-parallel board delta is a separate call and can leave OFF packs out.
Glossary
Arrival imbalance is the gap between the highest and lowest cell voltage at the start of the charge, in millivolts. The status file treats about 150 mV or more as a self-discharge flag. A smaller imbalance is noted and is not called self-discharge.
Glossary
Inside one pack
Amber panel, amber caution band. This rule does not retire a pack by itself. The status call can be OFF or Caution for floor or self-discharge while spread is still Go.
Across a fleet
Violet panel, violet caution band. Kept separate from Rule A so a spread call and a rest-delta call are not read as the same limit.
Do not mix scales
DX8 absolute IR, roughly 400–600 mΩ per cell in this fleet, does not map to manufacturer IR ratings or to Oscar/CNHL absolute retire bins. The rules above are relative to this store.
From the status file
Repeatable ingest
Only LiPo Storage logs named LiPo[Storage_NNN_CHx].txt (or .txt.gz) are auto-mapped. NNN belongs to one charger alias. Streams are not merged across chargers. Ingest maps the header serial to DX8-A or DX8-B with a private map that is not stored in this repo.
Channel, then NNN. CH1 is fleet C1 and CH2 is fleet C2. Within a night and channel, files sort by NNN ascending: lowest is P1, sixth is P6. A channel is mapped only when that night has exactly six valid files on it. Otherwise those files stay unassigned.
Hard fingerprints must pass or that fleet-night stays unassigned for review: C1-P4 cell 1 is the pack-max IR, and C2-P2 cell 3 is the pack-min IR. Soft fingerprints are advisory and can fail without remapping: C2-P6 lowest C2 average, C2-P4 tightest spread.
Dual-DX8 hold: fleet_lock is enforced only when a charger in the registry has it set. Both are unlocked, so DX8-A can log both channels. The store is append-only. An existing session and pack is not overwritten. Partial nights are kept as measured.
DX8-A · C1 · lock off
Dual-DX8 HOLD: single DX8-A has logged both CH1 (C1) and CH2 (C2) so far. Set fleet_lock true once DX8-B is live.
DX8-B · C2 · lock off
Replacement expected; no serial locked as of 2026-10-08. 2026-09-30 C2 ran on DX8-A.
LiHV logs and non-Storage (Charge/Discharge/Balance) and short/orphan Storage_412 etc. are catalogued by Lary but not in IR store — keep unassigned if re-ingested without map confidence.
In the repo
In the store
Not invented
Normalized from Lipo Lary ir_store.csv (canonical). Do not invent capacity series. Capacity in and out stay empty on the dashboard, labeled not in DX8 Storage data yet.