Skip to content

Commit d6ee64e

Browse files
committed
chore: changelog + plan update for MacDive UDDF gap-fill milestone
1 parent 747d6f1 commit d6ee64e

2 files changed

Lines changed: 46 additions & 0 deletions

File tree

CHANGELOG.md

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,35 @@
33
All notable changes to Submersion are documented in this file.
44

55

6+
## Unreleased
7+
8+
### Added
9+
10+
- MacDive UDDF imports now capture dive-level fields previously dropped on
11+
the floor: weather, surface conditions, boat name / captain, dive operator,
12+
personal mode, altitude mode, signature, and dive-number-of-day. Site
13+
metadata (water type, body of water, difficulty, flag) is also imported.
14+
- Cross-format import deduplication via `source_uuid` on `dive_data_sources`.
15+
Stable per-dive IDs from MacDive, Shearwater Cloud, and Subsurface SSRF
16+
are now preserved; re-importing the same dives in a different format no
17+
longer creates duplicates.
18+
19+
### Fixed
20+
21+
- MacDive UDDF: equipment / gear now imports. Previously only Submersion's
22+
private equipment extension was scanned, missing the standard UDDF gear
23+
location (`<diver><owner><equipment>`) where MacDive and other compliant
24+
exporters put it.
25+
- MacDive UDDF: gas switches for deco dives are now preserved. The parser
26+
read `<switchmix ref>` markers in waypoints but never recorded the gas
27+
reference on the sample, so downstream deco displays lost the switch event.
28+
- MacDive UDDF: `<equipmentused><link ref>` children are now captured from
29+
both `informationbeforedive` and `informationafterdive` sections.
30+
- MacDive UDDF: `<surfaceintervalbeforedive><infinity/></surfaceintervalbeforedive>`
31+
(first-dive marker) is now explicitly handled instead of relying on
32+
silent int-parse failure.
33+
34+
635
## 1.4.5 (2026-04-21)
736

837
### Features

docs/superpowers/plans/2026-04-21-macdive-uddf-gap-fill.md

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,23 @@
44
55
**Goal:** Close all current gaps in Submersion's UDDF import path when the source is a MacDive export, and add the `sourceUuid` plumbing needed for downstream MacDive XML / SQLite milestones.
66

7+
## Milestone 1 Status
8+
9+
**COMPLETE** — All non-skipped tasks delivered and tested.
10+
11+
- **Tasks landed:** 1, 2, 4, 5, 6, 8, 9, 10, 11, 12
12+
- Schema v69 → v70 with `source_uuid` columns on all importable entities
13+
- 10 new MacDive dive-level fields extracted (weather, boat, operator, personal mode, altitude mode, signature, dive-number-of-day, etc.)
14+
- 4 new site-level fields extracted (water type, body of water, difficulty, flag)
15+
- Gear import now scans standard UDDF `<diver><owner><equipment>` location, not just Submersion private extension
16+
- Gas switches (`<switchmix ref>`) now recorded on samples for deco dives
17+
- Equipment refs captured from both `informationbeforedive` and `informationafterdive`
18+
- `<surfaceintervalbeforedive><infinity/>` explicitly handled (first-dive marker)
19+
- Source UUIDs persist through import → DB on all entities
20+
- **Tasks skipped:** 3 (bug didn't exist), 7 (non-dive entity UUIDs descoped)
21+
- **Real-data validation:** User's 29MB MacDive UDDF passes regression assertions (540 dives, 373+ sites, 33+ buddies, 32+ gear)
22+
- **Test coverage:** 7099 tests pass, all new fields covered by unit + integration tests
23+
724
**Architecture:** Changes are confined to `lib/core/services/export/uddf/` (parsing), the dive-import schema migration layer, and the universal-import adapter. Additions are field-for-field extractions from `<informationbeforedive>` / `<informationafterdive>` / `<site>` plus a robustness fix for `<link ref>` disambiguation. No pipeline wiring changes.
825

926
**Tech Stack:** Flutter, Dart 3, Drift ORM, `xml` package, Riverpod. Testing via `flutter_test`.

0 commit comments

Comments
 (0)