Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
373 commits
Select commit Hold shift + click to select a range
51cc2aa
- Fixed auto-ping permanently stopping when crossing a regional zone …
MrAlders0n May 21, 2026
5d56fe2
- "Clear Map Markers" now also removes discovery and trace markers
MrAlders0n May 21, 2026
3b5c115
⏺ - Added a toggle button to the map control panel to show/hide the r…
MrAlders0n May 21, 2026
95f02d8
Shortened the "DUPLICATE ID" label on focus mode lines to "DUP" so it…
MrAlders0n May 21, 2026
043220a
- Multi-hop TX echoes are now grouped under their parent TX ping inst…
MrAlders0n May 21, 2026
fd619b7
Enhance map widget: add multi-hop only icon and regional boundary toggle
MrAlders0n May 26, 2026
804fa9f
Refactor map widget to improve tile load failure handling and sync fo…
MrAlders0n May 26, 2026
0bbb6fa
feat: The app now sends your radio preset to the server on connect, a…
MrAlders0n Jun 11, 2026
3cb8b17
Fixed formatting of radio preset in app
MrAlders0n Jun 11, 2026
a8805dd
Privacy: your location is no longer broadcast over the air
MrAlders0n Jun 11, 2026
d74f7ac
Added Vector Tile Support and Refreshing single tiles by injecting Ge…
MrAlders0n Jun 13, 2026
af44cf9
perf: stop the map rebuilding on every notifyListeners (wardrive over…
MrAlders0n Jun 14, 2026
b80bc1a
docs: document map rebuild isolation (mapRevision) architecture
MrAlders0n Jun 14, 2026
489064d
perf: make the mode-button glow static (stop the all-session GPU fram…
MrAlders0n Jun 15, 2026
3c27820
perf: stop the map relayouting on every GPS tick (wardrive overheat fix)
MrAlders0n Jun 15, 2026
d5b556d
feat: bake repeater hex into Detailed-mode chip icons; rename "Covera…
MrAlders0n Jun 16, 2026
8eadf84
fix: reword coverage mode, fix map draw from backgrounded
MrAlders0n Jun 17, 2026
5d7d3d3
feat: in-app cell GRID SUMMARY + repeater popup; full-hex token resol…
MrAlders0n Jun 18, 2026
402dcbd
Fix path-mode warning: app restores original setting on clean disconnect
MrAlders0n Jun 18, 2026
87e4454
Detailed-mode cell tap: blob-aware summary + clicked-tile 3x3 highlight
MrAlders0n Jun 18, 2026
14e45c1
TX wire-tag: send tag + plaintext coords in Broadcast-Coordinates mode
MrAlders0n Jun 18, 2026
4a6a90b
Offline sessions: enable mobile download via the native share sheet
MrAlders0n Jun 18, 2026
a18be02
Apply map style + CVD palette changes immediately (bump mapRevision)
MrAlders0n Jun 18, 2026
c93540a
perf: incremental coverage-marker sync (stop re-pushing every pin eac…
MrAlders0n Jun 19, 2026
117c0ce
- Fixed offline sessions failing to upload — the app now waits for th…
MrAlders0n Jun 19, 2026
1357328
Offline sessions: capture device model, power level, and app version …
MrAlders0n Jun 19, 2026
77107e9
Fix app crash on launch / resume-from-background: reject invalid map …
MrAlders0n Jun 19, 2026
146a2e5
Detailed-mode cell tap: filled dominant-colour footprint + dimmed bac…
MrAlders0n Jun 19, 2026
a74b530
Cell-summary & repeater-detail popups: bright map (no scrim) + minimi…
MrAlders0n Jun 20, 2026
d8a9346
Minimized cell/repeater pill: hide the control bar (like focus mode)
MrAlders0n Jun 20, 2026
2b64b35
Sounds follow media volume; landscape controls can minimize to a cent…
MrAlders0n Jun 20, 2026
2ae6d33
TX 'Broadcast My Coordinates': drop combined wire-tag+coords on-air f…
MrAlders0n Jun 20, 2026
6a7e939
Revert "TX 'Broadcast My Coordinates': drop combined wire-tag+coords …
MrAlders0n Jun 20, 2026
d99687f
Coverage tap-to-inspect: connection lines + repeater coverage cells
MrAlders0n Jun 20, 2026
85bbb35
Coverage tap-to-inspect fixes + tweaks
MrAlders0n Jun 20, 2026
f3277e1
Unify focus camera across coverage views; fix spider in Detailed Mode
MrAlders0n Jun 20, 2026
63038d3
feat(offline): per-region placement summary after upload
MrAlders0n Jun 21, 2026
6e13325
Fix recurring iOS launch/focus crash: map fit-to-bounds could send Ma…
MrAlders0n Jun 21, 2026
0e22a3f
Resume ping counter from /auth resume_counter on session reuse
MrAlders0n Jun 21, 2026
da66ff7
Vendor patched maplibre_gl 0.25.0 with camera-viewport crash guard
MrAlders0n Jun 21, 2026
3323e4e
Fix RX pin z-order: newest pin always renders on top
MrAlders0n Jun 21, 2026
3e78a43
fix: text out of bounds
MrAlders0n Jun 21, 2026
be7d5be
update: podfile
MrAlders0n Jun 21, 2026
a2ae740
Offline upload: distinguish network/timeout from auth failure
MrAlders0n Jun 21, 2026
42446e6
add test
MrAlders0n Jun 21, 2026
c72cd64
Fix multi-hop TX display in history; GPS puck z-order; cooldown UI
MrAlders0n Jun 22, 2026
f8979a0
Encode session date in TX wire-tag to fix cross-day collision (DEAD t…
MrAlders0n Jun 22, 2026
0e8858b
Ping controls: instant start-mode feedback + cut rebuild churn
MrAlders0n Jun 22, 2026
d145dd4
Fix GPS puck blink; log stuck-timer ping lockout
MrAlders0n Jun 23, 2026
222a300
Hide donation link on iOS to satisfy App Store guideline 3.1.1
MrAlders0n Jun 25, 2026
eb74c0e
Fix landscape nav/connect layout, 3-byte ID clipping, hybrid bubble, …
MrAlders0n Jun 26, 2026
5e36b0f
Fix repeater search relevance and surface RX-no-GPS silence
MrAlders0n Jun 28, 2026
01ccec2
Forward offline wardrive batches to Custom API after upload
DataArchitectPro Jul 1, 2026
298dbd8
Revert pubspec font_awesome bump (build-only, not part of feature)
DataArchitectPro Jul 1, 2026
1059911
feat(ios): add Live Activity support for mapping sessions
Bjorkan Jul 14, 2026
2708c82
Fix unnecessary string interpolation braces in Live Activity title
agessaman Aug 12, 2026
2547c52
Add MeshMapperWatch watchOS app target
agessaman Aug 12, 2026
a9fff83
Add watch transport: snapshots down, commands up
agessaman Aug 13, 2026
b2bedbe
Add watch map page with pings, repeaters, and follow mode
agessaman Aug 13, 2026
51332e2
Add heard-node list in both placements, plus stale badge
agessaman Aug 13, 2026
73c6c03
Mirror the app's Top Heard overlay on the watch map
agessaman Aug 13, 2026
cef0e6b
Fit Top Heard on the smallest watch and drop the countdown into the c…
agessaman Aug 13, 2026
ce6af9a
Move the map overlay to a full-width bottom panel with a countdown bar
agessaman Aug 13, 2026
6866035
Overlay the countdown label on the bar and offset the camera for the …
agessaman Aug 13, 2026
5ed21ab
Size the countdown bar to the watch, and place the fix via the map proxy
agessaman Aug 13, 2026
25af775
Put both bar labels back on the track and fit the panel to the displa…
agessaman Aug 13, 2026
2fa0aef
Raise the panel 4 pt without spending the curvature clearance on width
agessaman Aug 13, 2026
f0961c1
Scale the panel gaps with the corner radius, and stop asserting lapse…
agessaman Aug 13, 2026
bbd01ca
Add wrist controls, and make every unavailable control say why
agessaman Aug 13, 2026
0385297
Open the map at 500 m, and remember the wearer's zoom
agessaman Aug 13, 2026
76d8a3b
Cut to the fix on launch, mirror the app's ping markers and ping gate…
agessaman Aug 13, 2026
ea78b4f
Single-source the manual-ping gate, and stop labels and errors misrep…
agessaman Aug 13, 2026
b82b409
Acknowledge admission, not completion, and give async failures a channel
agessaman Aug 13, 2026
b460b98
Send wrist commands over a queued transport, and expire them
agessaman Aug 13, 2026
e998227
Start the mode the region allows, and name it on the button
agessaman Aug 13, 2026
2768c79
Rebuild the Live Activity on the map overlay's vocabulary
agessaman Aug 13, 2026
224772d
Stop telegraphing a routine result: de-tint the bar and keyline
agessaman Aug 13, 2026
a6d7e2d
Give the watch map its discovery and trace pings
agessaman Aug 13, 2026
6a8ba00
Stop drawing a map at a wrist nobody is looking at
agessaman Aug 13, 2026
ad826e7
Key the drain to its deadline, not its caption; widen the panel to be…
agessaman Aug 13, 2026
ac862b7
Keep the fix still and move the world under it
agessaman Aug 13, 2026
e8027d6
Anchor the Live Activity countdown to the end of its bar
agessaman Aug 13, 2026
bce27b1
Stop rebuilding the watch payload twice a second, and fix repeater id…
agessaman Aug 13, 2026
6e1112b
Tell the truth about starting, idling, and going stale
agessaman Aug 13, 2026
10f2e12
Retry Live Activities within a session after they become available
agessaman Aug 13, 2026
aef4030
Offer the readout as a main page, not only when the wrist drops
agessaman Aug 13, 2026
001812a
Say the smallest true thing the dimmed countdown can
agessaman Aug 13, 2026
20bc491
Put the map/readout switch in the system's corner, not ours
agessaman Aug 13, 2026
5ad2c89
Hold the readout still when the wrist drops
agessaman Aug 13, 2026
00759dc
Take back the height Always-On returns, not just the position
agessaman Aug 13, 2026
48aa208
Start the map at 250 m, and stop MapKit overwriting it
agessaman Aug 13, 2026
590e5b7
Put session control in the watch's second corner
agessaman Aug 13, 2026
e1adacb
Make the controls page look like the rest of MeshMapper
agessaman Aug 14, 2026
3b9b895
Let the map page be a page: swipe navigates, crown zooms
agessaman Aug 14, 2026
4a461da
Stop the wrist from starting a session the phone would refuse
agessaman Aug 14, 2026
df145cf
Stop shipping map geography to a watch that isn't showing a map
agessaman Aug 14, 2026
c2b9735
Let MapKit know what covers the map instead of shifting the camera
agessaman Aug 14, 2026
13346e9
Flag the vestigial MapReader for a decision before the PR
agessaman Aug 14, 2026
336d047
Stop renaming every map marker when one new ping arrives
agessaman Aug 14, 2026
df0dcbd
Add a wrist switch for measuring the countdown drain
agessaman Aug 14, 2026
a1dbb2f
Stop a swipe off the map stranding a sheet over the next page
agessaman Aug 14, 2026
8dd93e2
Measure the panel's height, not where it is
agessaman Aug 14, 2026
8430f96
Stop the map camera resting at a continental span
agessaman Aug 14, 2026
591b9ed
Show why the phone is or is not talking to the watch
agessaman Aug 14, 2026
ebc09fb
Stop the puck lagging the pings beside it
agessaman Aug 14, 2026
71dd8dd
Keep the map on screen when the display dims
agessaman Aug 14, 2026
1d7bbe0
Stop the movement-gate tests racing the throttle
agessaman Aug 14, 2026
0b38315
Let the watch app install on watchOS 11
agessaman Aug 15, 2026
0e3916d
Stop a fast watch clock widening the transmit window
agessaman Aug 15, 2026
24370e4
Stop retained state reading as fresh on watch launch
agessaman Aug 15, 2026
41949ac
Clear out two pieces of development residue
agessaman Aug 15, 2026
87f6f1e
Run the tests in CI
agessaman Aug 15, 2026
5a2be4d
Answer a requested refresh even when nothing changed
agessaman Aug 15, 2026
2bfe0e2
Stop map-geo lease renewals forcing a snapshot
agessaman Aug 15, 2026
d9cf509
Reconcile on resume, not only on first appearance
agessaman Aug 15, 2026
6bce3ae
Stop both countdown bars animating against the system
agessaman Aug 16, 2026
50a157f
Stop the status panel dragging the camera when it resizes
agessaman Aug 16, 2026
675fa11
Let a Smart Stack tap reach the watch app
agessaman Aug 16, 2026
afe34cf
Let the wearer's text size reach the reason a control is dead
agessaman Aug 16, 2026
ac7f64f
Dim the held map, and hold it for twelve seconds instead of twenty
agessaman Aug 16, 2026
f4ca85f
Keep the delivery thread off rendered state, and let a failure be felt
agessaman Aug 16, 2026
6925b34
Walk the sample fix so a follow animation can be reviewed
agessaman Aug 16, 2026
d8f3bbe
Slide the map to a new fix instead of cutting to it
agessaman Aug 16, 2026
161a96c
Darken the held map to what a powerlog says it costs
agessaman Aug 16, 2026
8e8f421
Stop a millisecond of deadline drift bypassing the update throttle
agessaman Aug 16, 2026
31a95c9
Give the Smart Stack card the map panel's rows and none of its bar
agessaman Aug 18, 2026
f1d5fdf
Give the Smart Stack card one header line and bigger rows
agessaman Aug 19, 2026
c6f0fc3
Log Custom API host only, quiet disabled path, note offline iata sema…
MrAlders0n Aug 19, 2026
5d866e1
Merge pull request #28 from DataArchitectPro/feature/offline-custom-a…
MrAlders0n Aug 19, 2026
82c2110
Give the watch target the version numbers it ships with
agessaman Aug 19, 2026
e7c2ce5
Format two of the three files the format gate flags
agessaman Aug 19, 2026
33bfc14
Stop the wrist starting Passive inside a manual ping's window
agessaman Aug 19, 2026
eb9ad93
Keep an early teardown from skipping the rest of dispose
agessaman Aug 19, 2026
7e59e11
Decide the Live Activity throttle before paying to build a snapshot
agessaman Aug 19, 2026
2b9b9bb
Let a late stop off the transmit-age window
agessaman Aug 19, 2026
ffb0bee
Pin the Passive start guards in the wire contract tests
agessaman Aug 19, 2026
8f66802
Fix three ways the native watch bridge stayed stuck or spent the radio
agessaman Aug 19, 2026
fe2c1e6
Stop a backgrounded session logging a failed Live Activity every 30 s
agessaman Aug 19, 2026
b299d61
Let resume see the context it just ingested, and read the wire versio…
agessaman Aug 19, 2026
28ba3d1
Take one reading of now for the ping cooldown countdown
agessaman Aug 19, 2026
26c2f8f
Close the two wire-contract gaps redelivery and renames slip through
agessaman Aug 19, 2026
2808dde
Write down the watch bridge's invariants, and correct three stale claims
agessaman Aug 19, 2026
7660f0e
Resolve heard-row names at every hash width, not just the first row's
agessaman Aug 19, 2026
0f35798
Let a wearer read a failure cue they were too slow to feel
agessaman Aug 19, 2026
a3eb306
Stop offering the wrist a Hybrid start that Offline Mode always refuses
agessaman Aug 19, 2026
44ee7fb
Give WatchBridgeService the interval seam LiveActivityService already…
agessaman Aug 19, 2026
bb35480
Let an unshared clock degrade instead of disabling the wrist
agessaman Aug 19, 2026
34a2f1d
Retire the legacy command transport, and make the ack tell the truth
agessaman Aug 19, 2026
a541b13
Stop asking a host that can never show a Live Activity
agessaman Aug 19, 2026
cc0a4c0
Show the watch diagnostics when nothing is working, not only when it is
agessaman Aug 19, 2026
c7e3af4
Name heard rows from the identity the ping carried, not the hash
agessaman Aug 19, 2026
6cdcd87
Restore the names my identity change took away
agessaman Aug 19, 2026
d1267e4
Put the embed phases where Xcode will leave them
agessaman Aug 19, 2026
d380620
Stop the wrist offering flood traffic the phone withholds
agessaman Aug 19, 2026
5ec38ef
Let a failure cue outlive the snapshot that carried it
agessaman Aug 19, 2026
11a7c19
Make map-geo recovery actually demand the geography back
agessaman Aug 19, 2026
0db8805
Stop a slow application context overwriting a newer live one
agessaman Aug 19, 2026
70b11cf
Name the session a queued Stop meant
agessaman Aug 19, 2026
4dd2426
Keep a wrist command that arrives before Dart is listening
agessaman Aug 19, 2026
5064e24
Put the watch's decisions somewhere a test can reach them
agessaman Aug 19, 2026
423a78e
Run dart format across the codebase
MrAlders0n Aug 20, 2026
88b0770
Merge pull request #29 from agessaman/feat/watch-app
MrAlders0n Aug 20, 2026
671f3d8
Remove web deploy, focus on Android and iOS
MrAlders0n Aug 21, 2026
b09ebac
Add deep-link and secure-storage packages for portal sign-in
MrAlders0n Aug 21, 2026
b2b7fbd
Add the PKCE pair the portal sign-in handshake needs
MrAlders0n Aug 21, 2026
130ba4a
Teach the radio connection to sign a nonce
MrAlders0n Aug 21, 2026
e38a341
Keep the signature out of the frame hexdump
MrAlders0n Aug 21, 2026
0e9c305
Stop a stray command stealing the sign handshake's ack
MrAlders0n Aug 21, 2026
c9602cd
Let disconnect cut a sign loose without waiting on it
MrAlders0n Aug 21, 2026
f5fe956
Keep the portal token where a restored backup can't break it
MrAlders0n Aug 21, 2026
76cbd9b
Cover the keystore failure paths with a throwing fake
MrAlders0n Aug 21, 2026
1b80b05
Sign in to the portal through the system browser
MrAlders0n Aug 21, 2026
06abfee
Stop a duplicate callback from exchanging the code twice
MrAlders0n Aug 21, 2026
0073688
Only trust a callback error that answers a live sign-in
MrAlders0n Aug 21, 2026
c52bfa2
Bind a radio to a portal account, and keep the logs clean
MrAlders0n Aug 21, 2026
af976f0
Widen the token scrub and make the link cache tests earn their keep
MrAlders0n Aug 21, 2026
517b207
Decide once whether a radio should be offered a link
MrAlders0n Aug 21, 2026
45ed5f9
Remember which account the app is signed in to
MrAlders0n Aug 21, 2026
30e8a14
Offer to link the radio once a connection has settled
MrAlders0n Aug 21, 2026
01fe310
Let a working radio clear its own sign verdict
MrAlders0n Aug 21, 2026
6d8eafd
Let the browser hand the sign-in back to the app
MrAlders0n Aug 21, 2026
e807b64
Ask before linking a radio to an account
MrAlders0n Aug 21, 2026
3ee7e43
Put the account controls where the other settings live
MrAlders0n Aug 21, 2026
eac24f4
Document the account lane and fix the stale platform floors
MrAlders0n Aug 21, 2026
b81e091
Stop a new device link from wiping the cached ones
MrAlders0n Aug 21, 2026
a8d3643
Add scripted release flags and App Store upload script
MrAlders0n Aug 23, 2026
b717d1b
Adopt the new Flutter Android build flags
MrAlders0n Aug 23, 2026
2e0376b
Move to Font Awesome 11 so release builds compile
MrAlders0n Aug 23, 2026
52cb94c
Bump to 1.4.0 and refresh the iOS build files
MrAlders0n Aug 23, 2026
291b26b
Sign App Store uploads with explicit profiles
MrAlders0n Aug 23, 2026
6058a88
Tell the user when a portal sign-in fails
MrAlders0n Aug 23, 2026
1848c11
Add a dog GPS marker
MrAlders0n Aug 23, 2026
9dadc1b
Show flood-disabled regions in blue, not red
MrAlders0n Aug 23, 2026
3291b4a
Show a zone with no TX slots as passive, not full
MrAlders0n Aug 23, 2026
3bd3c82
Keep the zone status bar from overflowing on narrow phones
MrAlders0n Aug 23, 2026
02ac778
Say it's the phone clock, not GPS, when a fix looks stale
MrAlders0n Aug 23, 2026
554fab2
Say what a flood-disabled zone means, and that it isn't full
MrAlders0n Aug 23, 2026
df49a7f
Refuse to send a ping that can't carry a wire tag
MrAlders0n Aug 23, 2026
8cf7679
Finish saving pings offline before the failed batch is discarded
MrAlders0n Aug 24, 2026
6c63069
Drop queued pings whose wire tag outlived its session
MrAlders0n Aug 24, 2026
adbea23
Back off when the portal says we're asking too often
MrAlders0n Aug 24, 2026
cc05393
Show linked devices right after signing in
MrAlders0n Aug 24, 2026
c92ad07
Keep Anonymous Mode anonymous when offline sessions upload later
MrAlders0n Aug 24, 2026
23b2288
Stop wardriving when we've been sitting still
MrAlders0n Aug 24, 2026
584c945
Tell the difference between no coverage and no answer
MrAlders0n Aug 24, 2026
e023e66
Say when repeater coverage failed to load instead of showing zeros
MrAlders0n Aug 24, 2026
bf513d3
Let a failed coverage load be retried from the sheet
MrAlders0n Aug 24, 2026
1b8ca45
Add iOS App Intents and Siri shortcuts
agessaman Aug 24, 2026
e740c06
Actually stop auto-ping when a skipped ping triggers the idle stop
MrAlders0n Aug 24, 2026
e47894c
Export release secrets read from the local env file
MrAlders0n Aug 24, 2026
7272aa4
Stop knocking on portal routes the server has blocked
MrAlders0n Aug 24, 2026
cd67162
Save the last RX observations when a session expires
MrAlders0n Aug 24, 2026
f529f16
Don't offer a coverage retry that can't work offline
MrAlders0n Aug 24, 2026
8c4e6e9
Make the wire tag drop test actually check the queue
MrAlders0n Aug 24, 2026
c4dd370
Set the TestFlight what to test text after an upload
MrAlders0n Aug 24, 2026
51ea019
Stop hybrid when the ping it waited on never happens
MrAlders0n Aug 24, 2026
ef515d0
Pin down the samples lost when there's no cell coverage
MrAlders0n Aug 24, 2026
4d692c8
Explain a flood-disabled region instead of interrupting
MrAlders0n Aug 24, 2026
a8e4b44
Hold pings when there's no signal instead of writing them off
MrAlders0n Aug 24, 2026
4df70cc
Report the connected radio's power, not the last one's
MrAlders0n Aug 24, 2026
ebf649e
Say why the download button won't go instead of just greying it out
MrAlders0n Aug 24, 2026
e16f14c
Harden Apple external surfaces and Siri responses
agessaman Aug 25, 2026
ee94d2e
Fade the coverage overlay as soon as the opacity slider moves
MrAlders0n Aug 25, 2026
550a57b
Merge branch 'MeshMapper:dev' into feat/ios-appintents-siri
agessaman Aug 25, 2026
698adde
Harden App Intent command execution
agessaman Aug 25, 2026
52346c5
Merge remote branch updates
agessaman Aug 25, 2026
de6faf1
Register the read-only Siri shortcuts from the app target
agessaman Aug 26, 2026
8fa674f
Merge pull request #30 from agessaman/feat/ios-appintents-siri
MrAlders0n Aug 27, 2026
53fea1f
Show the real error message when a Siri intent fails
MrAlders0n Aug 27, 2026
7b31df9
Speak ages in the singular and say why two intents skip auth
MrAlders0n Aug 27, 2026
38e9899
Count the whole session, publish discoveries as they land, say Trace …
MrAlders0n Aug 27, 2026
dd1f5ea
Sync the intent docs with the code and drop the em dashes
MrAlders0n Aug 27, 2026
40c7a1e
Speak app mode names and singular counts in the status reply
MrAlders0n Aug 27, 2026
aff69d4
Keep Siri's repeater identity stable and its session count honest
MrAlders0n Aug 27, 2026
252eefd
Format the files CI keeps flagging
MrAlders0n Aug 27, 2026
bf483f3
Let the formatter own the provider file too
MrAlders0n Aug 27, 2026
4c9be3e
Rebuild the CarPlay card with names, noise floor and battery
MrAlders0n Aug 29, 2026
522cf01
Give the watch band a logo and one word it can actually say
MrAlders0n Aug 29, 2026
d529230
Let pod install trim the lockfile to the non-SPM plugins
MrAlders0n Aug 29, 2026
025c02c
Paint the progress bar in the running mode's color again
MrAlders0n Aug 29, 2026
5ab0b02
Execute a queued stop on every path that ends a ping
MrAlders0n Aug 29, 2026
50c5248
Serialize coverage overlay edits so a zone change can't double-add
MrAlders0n Aug 29, 2026
322783c
Unstick the GPS arrow when its layer install collides
MrAlders0n Aug 29, 2026
21392a2
Retry more BLE connect failures and re-run a dying handshake
MrAlders0n Aug 30, 2026
d2a1795
Anchor the distance readout to the last ping of any type
MrAlders0n Aug 30, 2026
f2bf51b
Keep a throwing provider callback from escaping the disable drain
MrAlders0n Aug 30, 2026
20b55ec
Harden the connect retry against overlap and swallowed failures
MrAlders0n Aug 30, 2026
3054532
Adopt the puck source and layer separately
MrAlders0n Aug 30, 2026
2e96c4f
Pace heartbeats so a fast device clock can't storm the server
MrAlders0n Aug 30, 2026
cd736a7
Add an Android Auto Surface
NicholasFeldman Aug 31, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
2 changes: 1 addition & 1 deletion .build_version
Original file line number Diff line number Diff line change
@@ -1 +1 @@
1.1.1
1.4.0
1 change: 1 addition & 0 deletions .github/CODEOWNERS
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
* @MrAlders0n
57 changes: 57 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
name: CI

on:
pull_request:
branches: [main, dev]
workflow_dispatch:

permissions:
contents: read

jobs:
analyze:
name: Analyze & Test
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- uses: subosito/flutter-action@v2
with:
channel: 'stable'

- run: flutter pub get
- run: dart run build_runner build --delete-conflicting-outputs
- run: dart format --output=none --set-exit-if-changed .
- run: flutter analyze
- run: flutter test

watch-logic:
name: Watch Wire Rules
# The watch app's decision logic — snapshot ordering, cue presentation,
# staleness — decides what the wearer sees and was previously unreachable
# from CI: the analyze job runs on Linux and `flutter test` compiles no
# Swift. These are plain SwiftPM tests over Foundation-only sources, so
# they need no Xcode project, simulator or signing identity, and run in
# seconds. This does not cover WatchConnectivity, SwiftUI or MapKit; those
# still want a wrist.
runs-on: macos-latest
steps:
- uses: actions/checkout@v4

- name: Unit-test the wire rules
run: swift test
working-directory: ios/WatchLogicTests

# Compiles every watch source against the real watchOS SDK without an
# Xcode project, a simulator or a signing identity, so a Swift break in
# the companion app fails a PR instead of Adam's next device build.
#
# It type-checks sources; it does not link, and it knows nothing about
# target membership. A file added to the folder but never added to the
# target still passes here and still fails to build in Xcode, as do
# embed-phase, entitlement and signing mistakes.
- name: Type-check the watch target
run: >
xcrun --sdk watchos swiftc -typecheck
-target arm64_32-apple-watchos11.0
ios/MeshMapperWatch/*.swift ios/Shared/MeshMapperWatchPayload.swift
46 changes: 0 additions & 46 deletions .github/workflows/deploy.yml

This file was deleted.

9 changes: 9 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,15 @@ meshmapper-debug-*.txt
# Test/debug output
drive_route_map*.html

# Build metadata written by Build.sh (machine-specific)
.last_build

# Local TestFlight "What to Test" scratch text picked up by set_whats_new.sh
WhatToTest.txt

# Claude Code
.claude/
CLAUDE.md

# SwiftPM build products for the watch wire-rule tests
ios/WatchLogicTests/.build/
Loading