<feed xmlns='http://www.w3.org/2005/Atom'>
<title>nav.git/test-runner/src, branch main</title>
<subtitle>nav — android navigation app
</subtitle>
<id>https://git.terst.org/nav.git/atom?h=main</id>
<link rel='self' href='https://git.terst.org/nav.git/atom?h=main'/>
<link rel='alternate' type='text/html' href='https://git.terst.org/nav.git/'/>
<updated>2026-04-04T07:10:41+00:00</updated>
<entry>
<title>feat(ui): surface trip planning and reports in instrument sheet</title>
<updated>2026-04-04T07:10:41+00:00</updated>
<author>
<name>Peter Stone</name>
<email>thepeterstone@gmail.com</email>
</author>
<published>2026-04-04T07:10:41+00:00</published>
<link rel='alternate' type='text/html' href='https://git.terst.org/nav.git/commit/?id=9f01ddfba17dda7fb386e83f007c671fec6d5b8e'/>
<id>urn:sha1:9f01ddfba17dda7fb386e83f007c671fec6d5b8e</id>
<content type='text'>
</content>
</entry>
<entry>
<title>refactor: address simplify review findings</title>
<updated>2026-03-25T18:23:54+00:00</updated>
<author>
<name>Peter Stone</name>
<email>thepeterstone@gmail.com</email>
</author>
<published>2026-03-25T18:23:54+00:00</published>
<link rel='alternate' type='text/html' href='https://git.terst.org/nav.git/commit/?id=e68212991935d33a4baca77d88cd20a82fbcf6a6'/>
<id>urn:sha1:e68212991935d33a4baca77d88cd20a82fbcf6a6</id>
<content type='text'>
TrackRepository.addPoint() now returns Boolean (true if point was
added). MainViewModel.addGpsPoint() only updates _trackPoints StateFlow
when a point is actually appended — eliminates ~3,600 no-op flow
emissions per hour when not recording.

MainActivity: loadedStyle promoted from nullable field to
MutableStateFlow&lt;Style?&gt;; trackPoints observer uses filterNotNull +
combine so no track points are silently dropped if the style loads
after the first GPS fix.

Smoke tests: replaced 11× ActivityScenario.launch().use{} with a
single @get:Rule ActivityScenarioRule — same isolation, less
boilerplate.

CI: removed redundant app-debug artifact upload (app-debug.apk is
already included inside the test-apks artifact).

Removed stale/placeholder comments from MainActivity.

Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>feat(track): implement GPS track recording with map overlay</title>
<updated>2026-03-25T18:09:53+00:00</updated>
<author>
<name>Peter Stone</name>
<email>thepeterstone@gmail.com</email>
</author>
<published>2026-03-25T18:09:53+00:00</published>
<link rel='alternate' type='text/html' href='https://git.terst.org/nav.git/commit/?id=ca57e40adc0b89e7dc5409475f7510c0c188d715'/>
<id>urn:sha1:ca57e40adc0b89e7dc5409475f7510c0c188d715</id>
<content type='text'>
- TrackRepository + TrackPoint wired into MainViewModel:
  isRecording/trackPoints StateFlows, startTrack/stopTrack/addGpsPoint
- MapHandler.updateTrackLayer(): lazily initialises a red LineLayer
  and updates GeoJSON polyline from List&lt;TrackPoint&gt;
- fab_record_track FAB in activity_main.xml (top|end of bottom nav);
  icon toggles between ic_track_record and ic_close while recording
- MainActivity feeds every GPS fix into viewModel.addGpsPoint() and
  observes trackPoints to redraw the polyline in real time
- ic_track_record.xml vector drawable (red record dot)
- 8 TrackRepositoryTest tests all GREEN

Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>Merge branch 'master' of /site/git.terst.org/repos/nav</title>
<updated>2026-03-16T01:10:08+00:00</updated>
<author>
<name>Peter Stone</name>
<email>thepeterstone@gmail.com</email>
</author>
<published>2026-03-16T01:10:08+00:00</published>
<link rel='alternate' type='text/html' href='https://git.terst.org/nav.git/commit/?id=9f694c364e547cb767a8f76a0cabf25ee06d6cc7'/>
<id>urn:sha1:9f694c364e547cb767a8f76a0cabf25ee06d6cc7</id>
<content type='text'>
</content>
</entry>
<entry>
<title>feat: add GribFileManager interface and InMemoryGribFileManager</title>
<updated>2026-03-16T00:45:04+00:00</updated>
<author>
<name>Claudomator Agent</name>
<email>agent@claudomator</email>
</author>
<published>2026-03-16T00:45:04+00:00</published>
<link rel='alternate' type='text/html' href='https://git.terst.org/nav.git/commit/?id=debd559f7cfff790bdb91f883f3d2cd6ee7dddca'/>
<id>urn:sha1:debd559f7cfff790bdb91f883f3d2cd6ee7dddca</id>
<content type='text'>
</content>
</entry>
<entry>
<title>feat: add GribRegion and GribFile data models with staleness logic</title>
<updated>2026-03-16T00:02:55+00:00</updated>
<author>
<name>Claudomator Agent</name>
<email>agent@claudomator</email>
</author>
<published>2026-03-16T00:02:55+00:00</published>
<link rel='alternate' type='text/html' href='https://git.terst.org/nav.git/commit/?id=76a7e39a4bdb15db8b782ac0c469b26bfc7d7ab6'/>
<id>urn:sha1:76a7e39a4bdb15db8b782ac0c469b26bfc7d7ab6</id>
<content type='text'>
</content>
</entry>
<entry>
<title>feat: add AIS data model, CPA calculator, and NMEA VDM parser</title>
<updated>2026-03-15T12:24:35+00:00</updated>
<author>
<name>Claudomator Agent</name>
<email>agent@claudomator</email>
</author>
<published>2026-03-15T12:24:35+00:00</published>
<link rel='alternate' type='text/html' href='https://git.terst.org/nav.git/commit/?id=d1de605e28bd8ac32d73420ef60235eac4c56a50'/>
<id>urn:sha1:d1de605e28bd8ac32d73420ef60235eac4c56a50</id>
<content type='text'>
- AisVessel data class (mmsi, name, callsign, lat, lon, sog, cog, heading, vesselType, timestampMs)
- CpaCalculator: flat-earth CPA/TCPA algorithm (nm, min)
- AisVdmParser: !AIVDM/!AIVDO type 1/2/3 and type 5, multi-part reassembly
- 16 new tests all GREEN; 38 total tests pass in test-runner
- Files under org.terst.nav.ais/nmea (com dir was root-owned)

Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>feat: implement NMEA stream management, sensor data models, and power modes</title>
<updated>2026-03-15T01:24:07+00:00</updated>
<author>
<name>Peter Stone</name>
<email>thepeterstone@gmail.com</email>
</author>
<published>2026-03-15T01:24:07+00:00</published>
<link rel='alternate' type='text/html' href='https://git.terst.org/nav.git/commit/?id=18c2f1c038f62fda1c1cea19c12dfdd4ce411602'/>
<id>urn:sha1:18c2f1c038f62fda1c1cea19c12dfdd4ce411602</id>
<content type='text'>
- Added NmeaStreamManager for TCP connection and sentence parsing.
- Extended NmeaParser to support MWV (wind), DBT (depth), and HDG/HDM (heading) sentences.
- Added sensor data models: WindData, DepthData, HeadingData.
- Introduced PowerMode enum to manage GPS update intervals.
- Integrated NmeaStreamManager and PowerMode into LocationService.
- Added test-runner, a standalone JVM-only Gradle project for verifying GPS/NMEA logic.

Co-Authored-By: Gemini CLI &lt;noreply@google.com&gt;
</content>
</entry>
</feed>
