Covers the two offline (no-server) identification behaviors:
- BinRAW->RAW route (4396c74): parser reconstructs a signed pulse train from
the demodulated Data_RAW bit stream so has_raw_data becomes true and a
BinRAW capture identifies through the same path as a RAW file.
- Per-match catalog-category surfacing (41850b5): every engine match carries
its own catalog category in match_details['device_category'], cross-checked
against the protocol database and the DeviceMatch source value.
Fixtures are embedded and written to tmp_path (the repo ignores *.sub), so a
bare pytest runs green with no docker, no bound server, and no network.
11 tests, all passing.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>