Skip to content

fix: say which GPS milestone is outstanding on the status page - #130

Merged
TheAngryRaven merged 1 commit into
BETAfrom
claude/sprint-run-log-parsing-a6x07o
Aug 4, 2026
Merged

fix: say which GPS milestone is outstanding on the status page#130
TheAngryRaven merged 1 commit into
BETAfrom
claude/sprint-run-log-parsing-a6x07o

Conversation

@TheAngryRaven

Copy link
Copy Markdown
Owner

"FIX (time sync)" parses as a KIND of fix — a time-only, position-less one — when it meant the opposite: the position fix is good and the clock isn't ready yet. So a healthy device looked broken. That cost a bench session today, and the instinctive response to it, a power cycle, is actively harmful: it restarts the ~12.5-minute UTC decode being waited on.

The line now reads "FIX ok UTC..", and line 3 names the outstanding milestone instead of leaving the user with nothing to wait for: "UTC: no date/time", then "UTC: resolving <=12m" once date and time are valid but fullyResolved is not. That second state is the slow, normal one — the leap-second parameters live in nav-message subframe 4 page 18, which repeats every ~12.5 minutes, so a clean 3D fix minutes ahead of timeValid is expected rather than a fault. The bound is worst case, not an estimate; seeing a number at all is what stops the power-cycling.

Nothing is lost: the constellation readout keeps that line once the clock is locked, so the diagnostic only takes the space while there is something to diagnose.

gpsData gains the two halves of timeValid so the page can tell them apart, and the three-way classification is a pure timeSyncState() in gps_status_page rather than branching in the renderer. One of its tests asserts kLocked agrees with timeValid across all four input combinations — a page claiming a lock while logging still waits would be the same confusion wearing a different hat.

"FIX (time sync)" parses as a KIND of fix — a time-only, position-less
one — when it meant the opposite: the position fix is good and the clock
isn't ready yet. So a healthy device looked broken. That cost a bench
session today, and the instinctive response to it, a power cycle, is
actively harmful: it restarts the ~12.5-minute UTC decode being waited
on.

The line now reads "FIX ok  UTC..", and line 3 names the outstanding
milestone instead of leaving the user with nothing to wait for:
"UTC: no date/time", then "UTC: resolving <=12m" once date and time are
valid but fullyResolved is not. That second state is the slow, normal
one — the leap-second parameters live in nav-message subframe 4 page 18,
which repeats every ~12.5 minutes, so a clean 3D fix minutes ahead of
timeValid is expected rather than a fault. The bound is worst case, not
an estimate; seeing a number at all is what stops the power-cycling.

Nothing is lost: the constellation readout keeps that line once the
clock is locked, so the diagnostic only takes the space while there is
something to diagnose.

gpsData gains the two halves of timeValid so the page can tell them
apart, and the three-way classification is a pure timeSyncState() in
gps_status_page rather than branching in the renderer. One of its tests
asserts kLocked agrees with timeValid across all four input
combinations — a page claiming a lock while logging still waits would be
the same confusion wearing a different hat.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01ESkRRtF4vRrANPL6huSgmD
@TheAngryRaven
TheAngryRaven merged commit c2457d2 into BETA Aug 4, 2026
8 checks passed
@github-actions

github-actions Bot commented Aug 4, 2026

Copy link
Copy Markdown

Coverage — host-testable units

📂 Overall coverage

Metric Coverage
Lines 🟢 1166/1188 (98.1%)
Functions 🟢 123/123 (100.0%)
Branches 🟡 862/966 (89.2%)

📄 File coverage

File Lines Functions Branches
BirdsEye/camera_fsm.cpp 🟢 222/230 (96.5%) 🟢 20/20 (100.0%) 🟡 126/144 (87.5%)
BirdsEye/course_creator.cpp 🟢 209/217 (96.3%) 🟢 21/21 (100.0%) 🟡 114/131 (87.0%)
BirdsEye/crc32.cpp 🟢 30/30 (100.0%) 🟢 4/4 (100.0%) 🟢 24/24 (100.0%)
BirdsEye/crossing_pattern.cpp 🟢 15/15 (100.0%) 🟢 1/1 (100.0%) 🟢 12/12 (100.0%)
BirdsEye/dovex_header.cpp 🟢 106/107 (99.1%) 🟢 7/7 (100.0%) 🔴 62/88 (70.5%)
BirdsEye/filename_validator.cpp 🟢 14/14 (100.0%) 🟢 1/1 (100.0%) 🟢 30/30 (100.0%)
BirdsEye/gps_stats.cpp 🟢 25/25 (100.0%) 🟢 3/3 (100.0%) 🟢 8/8 (100.0%)
BirdsEye/gps_status_page.cpp 🟢 29/29 (100.0%) 🟢 4/4 (100.0%) 🟢 28/28 (100.0%)
BirdsEye/gps_time.cpp 🟢 45/45 (100.0%) 🟢 6/6 (100.0%) 🟢 30/32 (93.8%)
BirdsEye/gps_validation.cpp 🟢 24/24 (100.0%) 🟢 2/2 (100.0%) 🟢 66/66 (100.0%)
BirdsEye/haversine.cpp 🟢 8/8 (100.0%) 🟢 1/1 (100.0%) ⚫ 0/0 (0.0%)
BirdsEye/insta360_protocol.cpp 🟢 140/140 (100.0%) 🟢 16/16 (100.0%) 🟡 86/98 (87.8%)
BirdsEye/lap_format.cpp 🟢 18/18 (100.0%) 🟢 1/1 (100.0%) 🟢 9/9 (100.0%)
BirdsEye/sat_bars.cpp 🟢 33/33 (100.0%) 🟢 2/2 (100.0%) 🟢 51/54 (94.4%)
BirdsEye/sd_access_policy.cpp 🟢 9/9 (100.0%) 🟢 3/3 (100.0%) 🟢 18/18 (100.0%)
BirdsEye/sd_format_page.cpp 🟢 25/25 (100.0%) 🟢 3/3 (100.0%) 🟢 25/26 (96.2%)
BirdsEye/sensoregg_protocol.cpp 🟢 44/45 (97.8%) 🟢 7/7 (100.0%) 🟢 33/34 (97.1%)
BirdsEye/sprint_select.cpp 🟢 25/25 (100.0%) 🟢 4/4 (100.0%) 🟢 46/48 (95.8%)
BirdsEye/tach_filter.cpp 🟢 15/15 (100.0%) 🟢 3/3 (100.0%) 🟡 7/8 (87.5%)
BirdsEye/track_json.cpp 🟢 116/120 (96.7%) 🟢 12/12 (100.0%) 🟡 67/88 (76.1%)
BirdsEye/wake_cause.cpp 🟢 14/14 (100.0%) 🟢 2/2 (100.0%) 🟢 20/20 (100.0%)

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.

2 participants