+ | Package | Files | Key Exports |
+ |---|---|---|
+ | `mapping/` | 1 | `File`, `Load`, `Classify`, `Kind`, sentinel constants |
+ | `audio/` | 5 | `Float64ToPCM16`, `AudioPlayer`, `BandpassShiftFilter`, `PowerSpectrumFFT`, `Resample`, `ResampleRate` |
+ | `wav/` | 4 | `WAVMetadata`, `ParseWAVHeader`, `WriteWAVFile`, `AudioMothData`, `GainLevel`, `ResolveTimestamp`, `ProcessSingleFile` |
+ | `spectrogram/` | 3 | `GenerateSpectrogram`, `SpectrogramImageFromSamples`, `WriteImage`, `ApplyL4Colormap`, `ImageProtocol` |
+ | `astro/` | 1 | `AstronomicalData`, `CalculateAstronomicalData`, `CalculateMidpointTime` |
+
+ **Key outcomes:**
+ - `utils/` is now a true leaf package — zero `database/sql` imports, zero DB interfaces, zero `*Input/*Output` structs, no `skraak/*` imports
+ - No circular imports; all extracted packages are leaf-level with clear dependency direction
+ - DB-facing interfaces moved to their consumers (`tools/import/`, `db/tx_logger.go`), each defining its own minimal interface
+ - All interfaces standardized on `*Context` method variants, compatible with `*sql.DB`/`*sql.Tx`
+ - `ResolveTimestamp`/`ProcessSingleFile` landed in `wav/` after Phase 4 broke the import cycle
+
+ See per-phase entries below for detailed change records.
+