feat(gpx): post-parse timestamp repair
Task group 3 of gpx-parser-robustness. Timestamps were passed through raw; a partially-broken time channel from a flaky recorder silently shrank moving time and skewed start-time derivation. New pure `timestamp-repair.ts` applied per segment after parsing: - validity = Date.parse yields a finite epoch; - a segment with no valid timestamps is left untouched (untimed track); - >50% invalid → drop all the segment's timestamps (noise, not signal); - otherwise → linearly interpolate invalid runs between valid neighbours (by point index), leading/trailing runs clamp to the nearest valid timestamp; only repaired points are rewritten as ISO 8601, valid points keep their original string. Monotonicity intentionally not enforced (movingTime already skips non-positive intervals; reordering would be fabrication). No GpxData shape change. Wired into parseTracks output in parse.ts. Verified: gpx typecheck + lint clean, 81/81 tests pass, journal + planner typecheck unchanged. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
99278fd305
commit
4536470eb9
4 changed files with 128 additions and 4 deletions
|
|
@ -11,9 +11,9 @@
|
|||
|
||||
## 3. Timestamp repair
|
||||
|
||||
- [ ] 3.1 Create `packages/gpx/src/timestamp-repair.ts`: per-segment pass — >50% invalid → drop all; else linear interpolation between valid neighbors with leading/trailing clamp; output ISO 8601 strings
|
||||
- [ ] 3.2 Wire the repair pass into `parseTracks` output in `parse.ts`
|
||||
- [ ] 3.3 Unit tests (`timestamp-repair.test.ts`): sparse invalid interpolated, >50% invalid dropped (and `movingTime` returns null), leading/trailing clamp, all-valid untouched, no-timestamps untouched
|
||||
- [x] 3.1 Create `packages/gpx/src/timestamp-repair.ts`: per-segment pass — >50% invalid → drop all; else linear interpolation between valid neighbors with leading/trailing clamp; output ISO 8601 strings
|
||||
- [x] 3.2 Wire the repair pass into `parseTracks` output in `parse.ts`
|
||||
- [x] 3.3 Unit tests (`timestamp-repair.test.ts`): sparse invalid interpolated, >50% invalid dropped (and `movingTime` returns null), leading/trailing clamp, all-valid untouched, no-timestamps untouched
|
||||
|
||||
## 4. Metadata fallback
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue