v1.120 wires the battery estimator (relay-batt) into the supervisor, and LoggingBackend forwards read_battery_i to the inner backend — but TickRecord (v1.118 schema) has no battery fields, so a replayed flight runs the estimator on defaults (16 V, no current) rather than the recorded pack state. Bit-exact estimator replay is unaffected (the IEKF does not consume battery), but failsafe-flag reproduction is not replay-exact.
Scope for the schema-v2 slice:
- Add battery_v (f32) + battery_i (Option) to TickRecord (+ encode/decode + truncation property tests)
- ReplayBackend serves them back
- Regenerate tests-data/golden-v1118.bblog (becomes golden-v2) + version note in relay-log
- Cross-check kani.yml coverage for the new decode arms
Deferred from the v1.120 BATTERY-P02 slice deliberately: it changes the shipped v1.118 log format and the checked-in golden mid-slice.
🤖 Generated with Claude Code
https://claude.ai/code/session_01HvusAXYbHLyv3uTzfBcMbG
v1.120 wires the battery estimator (relay-batt) into the supervisor, and LoggingBackend forwards read_battery_i to the inner backend — but TickRecord (v1.118 schema) has no battery fields, so a replayed flight runs the estimator on defaults (16 V, no current) rather than the recorded pack state. Bit-exact estimator replay is unaffected (the IEKF does not consume battery), but failsafe-flag reproduction is not replay-exact.
Scope for the schema-v2 slice:
Deferred from the v1.120 BATTERY-P02 slice deliberately: it changes the shipped v1.118 log format and the checked-in golden mid-slice.
🤖 Generated with Claude Code
https://claude.ai/code/session_01HvusAXYbHLyv3uTzfBcMbG