On a fault transition to CONFIRMED, persist a compact JSON dict of the captured topic values to SQLite alongside the existing rosbag/mcap snapshot, keyed by fault_code, retained across clear_fault.
- Capture set is config-driven via
SnapshotCapture::resolve_topics(fault_code) (per-fault-code topic list + regex patterns); an unconfigured fault_code yields an empty freeze-frame. Values come from the /plc/* topics published by the protocol plugins.
- Acceptance: a confirmed fault writes a
freeze_frames row with the captured values; the row survives clear_fault; retrievable by fault_code.
On a fault transition to CONFIRMED, persist a compact JSON dict of the captured topic values to SQLite alongside the existing rosbag/mcap snapshot, keyed by fault_code, retained across clear_fault.
SnapshotCapture::resolve_topics(fault_code)(per-fault-code topic list + regex patterns); an unconfigured fault_code yields an empty freeze-frame. Values come from the/plc/*topics published by the protocol plugins.freeze_framesrow with the captured values; the row survives clear_fault; retrievable by fault_code.