ADR 0015: APU is strictly auxiliary; the primary battery is the sole bus¶
- Status: Accepted
- Date: 2026-05-20
- Authors: rmednitzer
- Builds on: ADR 0003, ADR 0010
Context¶
The auxiliary power unit covers four distinct sources: a solar panel with an MPPT front end, a methanol fuel cell, a vehicle tether connection, and a USB-C PD-in port. Each source could in principle bypass the primary Li-ion pack and feed compute directly. Doing so would let the simulator model a "battery removed, running off solar" posture, at the cost of a much more involved power-flow graph.
The alternative, and the path the v0.1 simulator takes, is to treat every APU source as a charge input to the primary battery. Compute, sensors, comms, and accessories pull from the battery; the APU only ever charges it.
Decision¶
The primary Li-ion pack is the sole power bus. Every APU source sums
into a single ApuSubsystem.total_w, which the engine offers to
PowerSubsystem.set_charge_w each tick. The bus regulator (the
power subsystem's charge_limit_w) clamps the accepted charge; the
offered value is preserved so the controller can see how much APU
power was clipped.
This design implies:
- The APU never powers compute directly. Removing the battery puts the device offline regardless of how many APU sources are connected.
- The APU is always additive. There is no negotiation between sources, no fallback chain, no priority order.
- The bus regulator's clipping behaviour is observable. Callers can
ask the power subsystem for
charge_offered_wandcharge_accepted_wand reason about under-utilised APU capacity.
Consequences¶
Easier: the power-flow model has one node (the battery). Every
estimator and self-model rule reduces to "what does the battery look
like". Endurance estimates use load_w - charge_accepted_w without
having to reason about which source is feeding which bus.
Harder: scenarios that legitimately want to run on AC alone (wall charger powering compute while the battery is removed for cooling or replacement) cannot be expressed. A future ADR can revisit this if the use case appears.
Alternatives rejected:
- A full multi-bus power graph with priority routing. Strictly superior in fidelity, strictly worse in legibility. The simulator prioritises legibility.
- A dual-mode "primary bus selector". Same legibility cost; the FSM would need to track which bus was active.
Revisit triggers¶
- A scenario requires AC-only operation (battery removed or under thermal cooldown), or a workload too large for the charge limit to be feasibly served by APU + battery combined.
- A new APU source (e.g., a kinetic harvester, a thermoelectric generator) cannot reasonably be modelled as a charge contributor.