Adds src/api/ingest.py and refactors the live upload handler to auto-detect
and route each submission by format instead of assuming .sub:
- Flipper .sub -> existing parser + signature matcher (unchanged)
- rtl_433 .json/.ndjson -> decoded; model is the device (conf 1.0)
- Wigle-style .csv -> decoded; one observation per row (conf 0.9)
- .zip batch -> recursed; any mix of the above
Also adds stable dedup (SHA256 for whole files, composite key for decoded
records) so re-submissions are skipped rather than stored twice, optional
GPS privacy rounding via manifest privacy_gps_decimals, a session-level GPS
fallback, and helpful errors for unsupported formats. Documented in
docs/SUBMISSION_FORMAT.md with rtl_433/CSV sample fixtures.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>