v0.4.2 — Cable-lock unplug confirmation (boundary race fix)
Fix (PR-25, #34)
On the goe_gemini profile the go-e charger fires plug: on→off 0–3 s before cable_lock: Locked→Unlocked on a genuine unplug. The engine read cable_lock synchronously at plug-off, saw Locked, and misclassified the unplug as a transient disconnect — starting the 10-minute grace timer. A second car plugged in within that window was absorbed as a new charging window of the previous user's session, and the new RFID blip was ignored.
This release makes cable_lock→Unlocked (while plug is off, grace pending, active session, charger not offline) confirm a genuine unplug: the session completes immediately using the real plug-off timestamp, and the race-induced data_gap is cleared (a genuinely-recorded earlier gap is preserved). The next plug-in then starts a fresh, correctly-attributed session.
Existing transient-disconnect behavior is preserved for every non-matching case; no car_status boundary is introduced. Also hardens session completion against stranding in COMPLETING.
Scope: goe_gemini / PlugAnchoredSessionEngine only. No store-schema change, no new options. 14 new tests, full suite green.