Skip to content

Migrate to Tracking 2 (GNSSSignals 2, GNSSDecoder 1.3)#37

Merged
zsoerenm merged 3 commits into
masterfrom
pvt-bump-to-tracking-v2
Jun 19, 2026
Merged

Migrate to Tracking 2 (GNSSSignals 2, GNSSDecoder 1.3)#37
zsoerenm merged 3 commits into
masterfrom
pvt-bump-to-tracking-v2

Conversation

@zsoerenm

Copy link
Copy Markdown
Member

Summary

Migrates PositionVelocityTime to the v2 ecosystem — Tracking 2.0.0, GNSSSignals 2.2.2, GNSSDecoder 1.3.0 (the versions that resolve together). This supersedes the CompatHelper-only bump in #36, which couldn't pass on its own: Tracking 2 requires GNSSSignals 2, which forced a wider migration.

Changes

  • Compat: GNSSSignals2, GNSSDecoder1.3, Tracking2.
  • Core API adaptation (GNSSSignals 2 renames): AbstractGNSSAbstractGNSSSignal, GPSL1GPSL1CA.
  • Tracking is now a weak dependency. It was only used for one convenience constructor (SatelliteState(decoder, system, sat_state)), which now lives in a package extension (PositionVelocityTimeTrackingExt). The core package no longer pulls in Tracking. The extension binds to TrackedSat (Tracking 2) or SatState (Tracking ≤ 1) via isdefined.
  • Tests: Tracking added to the test target with a new test/tracking_ext.jl exercising the extension; GPSL1()GPSL1CA(). The GNSSDecoder fixtures in test/pvt.jl were converted from positional to keyword constructors so they survive GNSSDecoder's struct-field growth (values preserved exactly).

Validation

Pkg.test() resolving the full v2 set passes: Aqua 11/11, PVT Galileo+GPS 42/42, week-rollover 12/12, Tracking-2 extension 7/7.

Note

⚠️ Breaking change — drops support for GNSSSignals 1 / Tracking 1; the core now requires the v2 ecosystem. Warrants a major version bump.

🤖 Generated with Claude Code

Bump GNSSSignals to 2, GNSSDecoder to 1.3 and Tracking to 2, and adapt
the package to the GNSSSignals 2 API (AbstractGNSS -> AbstractGNSSSignal,
GPSL1 -> GPSL1CA).

Tracking is made a weak dependency: the SatelliteState convenience
constructor that converts a Tracking sat state now lives in a package
extension (PositionVelocityTimeTrackingExt), so the core package no
longer pulls in Tracking. The extension binds to TrackedSat (Tracking 2)
or SatState (Tracking <= 1) via isdefined.

Tracking is added to the test target and a test exercises the extension.
The GNSSDecoder test fixtures are converted from positional to keyword
constructors so they survive GNSSDecoder's struct-field growth.

BREAKING CHANGE: drops support for GNSSSignals 1 and Tracking 1; the core
API now requires the v2 ecosystem.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@codecov

codecov Bot commented Jun 18, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 89.38%. Comparing base (d22fc0a) to head (57e5520).

Additional details and impacted files
@@            Coverage Diff             @@
##           master      #37      +/-   ##
==========================================
+ Coverage   88.57%   89.38%   +0.81%     
==========================================
  Files           4        5       +1     
  Lines         245      245              
==========================================
+ Hits          217      219       +2     
+ Misses         28       26       -2     

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

zsoerenm and others added 2 commits June 18, 2026 15:25
Convert the GPSL1Data/GalileoE1BData fixtures from positional to keyword
constructors, use the zero-arg GalileoE1BCache, and switch GPSL1() to
GPSL1CA(), matching the test-suite migration so the AirspeedVelocity
benchmark builds against the v2 ecosystem.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
AirspeedVelocity runs the PR's benchmark script against both the base and
PR revisions, which resolve different GNSSSignals major versions. Select
GPSL1CA (GNSSSignals 2) or GPSL1 (GNSSSignals 1) at load time so the
fixtures build under either revision.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown
Contributor

Benchmark Results (Julia v1)

Time benchmarks
master 57e5520... master / 57e5520...
calc_pvt/GPSL1/4sats/cold 16.7 ± 0.38 μs 16.7 ± 0.4 μs 1 ± 0.033
calc_pvt/GPSL1/4sats/warm 25.4 ± 0.49 μs 25.3 ± 0.51 μs 1.01 ± 0.028
calc_pvt/GPSL1/9sats/cold 24.2 ± 0.49 μs 24.3 ± 0.5 μs 0.997 ± 0.029
calc_pvt/GPSL1/9sats/warm 15 ± 0.42 μs 14.9 ± 0.4 μs 1.01 ± 0.039
calc_pvt/GalileoE1B/4sats/cold 15.9 ± 0.39 μs 16 ± 0.42 μs 0.995 ± 0.036
calc_pvt/GalileoE1B/4sats/warm 9.06 ± 0.3 μs 9.09 ± 0.31 μs 0.997 ± 0.047
calc_pvt/GalileoE1B/5sats/cold 17.5 ± 0.4 μs 17.5 ± 0.42 μs 0.997 ± 0.033
calc_pvt/GalileoE1B/5sats/warm 9.86 ± 0.31 μs 9.88 ± 0.31 μs 0.998 ± 0.044
time_to_load 2.22 ± 0.013 s 2.14 ± 0.012 s 1.04 ± 0.0084
Memory benchmarks
master 57e5520... master / 57e5520...
calc_pvt/GPSL1/4sats/cold 0.161 k allocs: 8.55 kB 0.161 k allocs: 8.55 kB 1
calc_pvt/GPSL1/4sats/warm 0.243 k allocs: 13.2 kB 0.243 k allocs: 13.2 kB 1
calc_pvt/GPSL1/9sats/cold 0.166 k allocs: 10.4 kB 0.166 k allocs: 10.4 kB 1
calc_pvt/GPSL1/9sats/warm 0.127 k allocs: 8.2 kB 0.127 k allocs: 8.2 kB 1
calc_pvt/GalileoE1B/4sats/cold 0.161 k allocs: 8.55 kB 0.161 k allocs: 8.55 kB 1
calc_pvt/GalileoE1B/4sats/warm 0.122 k allocs: 6.38 kB 0.122 k allocs: 6.38 kB 1
calc_pvt/GalileoE1B/5sats/cold 0.162 k allocs: 8.8 kB 0.162 k allocs: 8.8 kB 1
calc_pvt/GalileoE1B/5sats/warm 0.123 k allocs: 6.62 kB 0.123 k allocs: 6.62 kB 1
time_to_load 0.149 k allocs: 11.2 kB 0.149 k allocs: 11.2 kB 1

@zsoerenm
zsoerenm merged commit ac1c2c8 into master Jun 19, 2026
8 checks passed
@zsoerenm
zsoerenm deleted the pvt-bump-to-tracking-v2 branch June 19, 2026 20:34
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant