Tighten the Series III / Series IV boundary so UI and storage dispatch
on a clean signal instead of sniffing filenames or applying magnitude
heuristics.
Phase 1 — events.device_family column ("series3" | "series4"):
self-applying migration with filename-based backfill of existing rows
(1,132 backfilled on prod 2026-05-20); plumbed through every import
path (BW endpoint, IDF endpoint, ACH server, BW CLI, sidecar
backfill); UPSERT preserves via COALESCE; UI dispatches on it.
Phase 2 — extract micromate/ package alongside minimateplus/:
native IdfEvent / IdfReport / IdfPeaks / IdfProjectInfo /
IdfSensorCheck (mic in dB(L), not pseudo-psi); moved
idf_ascii_report.py from sfm/ to micromate/; refactored
save_imported_idf to use IdfEvent and bridge to minimateplus.Event at
the SQL-insert boundary; idf_file.py stub for the future binary codec.
Phase 3 prep — docs/idf_protocol_reference.md captures the two
observed Thor binary header signatures (1,012 newer-firmware files vs
2 old files whose layout is byte-for-byte BW-STRT-compatible), file-size
hints suggesting int8 sample encoding, open questions in dependency
order, and a concrete first-session plan for cracking the codec.
Also rolled in the v0.18.1 hotfixes that motivated this work:
- idf_ascii_report parser now handles "<0.005 in/s" (below-threshold)
and "N/A" markers without leaving raw strings in numeric DB columns.
- sfm_webapp.html: defensive _ppvFmt / mic formatter so future
data-shape drift can't kill the whole events table render.
All 1,014 example-data sidecars round-trip through the new package.
See CHANGELOG.md for full notes.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Tighten the Series III / Series IV boundary so UI and storage dispatch on a clean signal instead of sniffing filenames or applying magnitude heuristics. Phase 1 — events.device_family column ("series3" | "series4"): self-applying migration with filename-based backfill of existing rows (1,132 backfilled on prod 2026-05-20); plumbed through every import path (BW endpoint, IDF endpoint, ACH server, BW CLI, sidecar backfill); UPSERT preserves via COALESCE; UI dispatches on it. Phase 2 — extract micromate/ package alongside minimateplus/: native IdfEvent / IdfReport / IdfPeaks / IdfProjectInfo / IdfSensorCheck (mic in dB(L), not pseudo-psi); moved idf_ascii_report.py from sfm/ to micromate/; refactored save_imported_idf to use IdfEvent and bridge to minimateplus.Event at the SQL-insert boundary; idf_file.py stub for the future binary codec. Phase 3 prep — docs/idf_protocol_reference.md captures the two observed Thor binary header signatures (1,012 newer-firmware files vs 2 old files whose layout is byte-for-byte BW-STRT-compatible), file-size hints suggesting int8 sample encoding, open questions in dependency order, and a concrete first-session plan for cracking the codec. Also rolled in the v0.18.1 hotfixes that motivated this work: - idf_ascii_report parser now handles "<0.005 in/s" (below-threshold) and "N/A" markers without leaving raw strings in numeric DB columns. - sfm_webapp.html: defensive _ppvFmt / mic formatter so future data-shape drift can't kill the whole events table render. All 1,014 example-data sidecars round-trip through the new package. See CHANGELOG.md for full notes.