<feed xmlns='http://www.w3.org/2005/Atom'>
<title>nav.git/android-app/app/src/main/kotlin/org/terst/nav/data, 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:45:41+00:00</updated>
<entry>
<title>refactor: unify core models and finish org.terst.nav migration</title>
<updated>2026-04-04T07:45:41+00:00</updated>
<author>
<name>Peter Stone</name>
<email>thepeterstone@gmail.com</email>
</author>
<published>2026-04-04T07:45:41+00:00</published>
<link rel='alternate' type='text/html' href='https://git.terst.org/nav.git/commit/?id=97715ab4007ff3101f58edf4385cef1fc3d1615b'/>
<id>urn:sha1:97715ab4007ff3101f58edf4385cef1fc3d1615b</id>
<content type='text'>
</content>
</entry>
<entry>
<title>feat(instruments): add forecast wind, wave, swell and current from Open-Meteo</title>
<updated>2026-04-03T07:38:22+00:00</updated>
<author>
<name>Peter Stone</name>
<email>thepeterstone@gmail.com</email>
</author>
<published>2026-04-03T07:38:22+00:00</published>
<link rel='alternate' type='text/html' href='https://git.terst.org/nav.git/commit/?id=9417a7c6b08da362ad97e85973b7570e05d4f0b5'/>
<id>urn:sha1:9417a7c6b08da362ad97e85973b7570e05d4f0b5</id>
<content type='text'>
- Add swell params to MarineApiService request
- Add swell fields to MarineHourly model
- Add MarineConditions snapshot model
- Add WeatherRepository.fetchCurrentConditions() (first forecast hour)
- Add MainViewModel.loadConditions() + marineConditions StateFlow
- Add Forecast section to instrument sheet: Curr / Wave / Swell
- Populate TWS from forecast wind speed on first GPS fix
- Trigger loadConditions() once on first GPS position received

Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>feat: satellite GRIB download with bandwidth optimisation (§9.1)</title>
<updated>2026-03-25T04:55:20+00:00</updated>
<author>
<name>Claudomator Agent</name>
<email>agent@claudomator</email>
</author>
<published>2026-03-16T00:45:53+00:00</published>
<link rel='alternate' type='text/html' href='https://git.terst.org/nav.git/commit/?id=31b1b3a05d2100ada78042770d62c824d47603ec'/>
<id>urn:sha1:31b1b3a05d2100ada78042770d62c824d47603ec</id>
<content type='text'>
Implements weather data download over Iridium satellite links:
- GribParameter enum with SATELLITE_MINIMAL set (wind + pressure only)
- SatelliteDownloadRequest data class (region, params, forecast hours, resolution)
- SatelliteGribDownloader: size/time estimation, abort-on-oversized, pluggable fetcher
- 8 unit tests covering estimation scaling, minimal param set, and download outcomes

Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>feat: offline GRIB staleness checker, ViewModel integration, and UI badge</title>
<updated>2026-03-25T04:55:10+00:00</updated>
<author>
<name>Claudomator Agent</name>
<email>agent@claudomator</email>
</author>
<published>2026-03-16T00:06:33+00:00</published>
<link rel='alternate' type='text/html' href='https://git.terst.org/nav.git/commit/?id=afe94c5a2ce33c7f98d85b287ebbe07488dc181f'/>
<id>urn:sha1:afe94c5a2ce33c7f98d85b287ebbe07488dc181f</id>
<content type='text'>
- Add GribRegion, GribFile data models and GribFileManager interface
- Add InMemoryGribFileManager for testing and default use
- Add GribStalenessChecker with FreshnessResult sealed class (Fresh/Stale/NoData)
- Integrate weatherStaleness StateFlow into MainViewModel (checked after loadWeather)
- Add yellow staleness banner TextView to fragment_map.xml
- Wire staleness banner in MapFragment (shown on Stale, hidden on Fresh/NoData)
- Add GribStalenessCheckerTest (4 TDD tests)

Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>feat: implement PDF logbook export (Section 4.8)</title>
<updated>2026-03-25T04:54:58+00:00</updated>
<author>
<name>Claudomator Agent</name>
<email>agent@claudomator</email>
</author>
<published>2026-03-16T00:03:17+00:00</published>
<link rel='alternate' type='text/html' href='https://git.terst.org/nav.git/commit/?id=7193b2b3478171a49330f9cbcae5cd238a7d74d7'/>
<id>urn:sha1:7193b2b3478171a49330f9cbcae5cd238a7d74d7</id>
<content type='text'>
- LogbookEntry data class: timestampMs, lat/lon, SOG, COG, wind, baro, depth, event/notes
- LogbookFormatter: UTC time, position (deg/dec-min), 16-pt compass, row/page builders
- LogbookPdfExporter: landscape A4 PDF via android.graphics.pdf.PdfDocument with column headers,
  alternating row shading, and table border
- 20 unit tests covering all formatting helpers and data model behaviour

Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>feat: implement isochrone-based weather routing (Section 3.4)</title>
<updated>2026-03-25T04:54:49+00:00</updated>
<author>
<name>Claudomator Agent</name>
<email>agent@claudomator</email>
</author>
<published>2026-03-15T05:55:47+00:00</published>
<link rel='alternate' type='text/html' href='https://git.terst.org/nav.git/commit/?id=984f915525184a9aaff87f3d5687ef46ebb00702'/>
<id>urn:sha1:984f915525184a9aaff87f3d5687ef46ebb00702</id>
<content type='text'>
</content>
</entry>
<entry>
<title>feat: add harmonic tide height predictions (Section 3.2 / 4.2)</title>
<updated>2026-03-25T04:54:31+00:00</updated>
<author>
<name>Claudomator Agent</name>
<email>agent@claudomator</email>
</author>
<published>2026-03-15T03:44:25+00:00</published>
<link rel='alternate' type='text/html' href='https://git.terst.org/nav.git/commit/?id=826d56ede2c59cad19748f61d8b5d75d08a702d9'/>
<id>urn:sha1:826d56ede2c59cad19748f61d8b5d75d08a702d9</id>
<content type='text'>
Implement offline harmonic tide prediction as specified in COMPONENT_DESIGN.md:
- TideConstituent: name, speedDegPerHour, amplitudeMeters, phaseDeg
- TidePrediction: timestampMs, heightMeters
- TideStation: id, name, lat, lon, datumOffsetMeters, constituents
- HarmonicTideCalculator: predictHeight(), predictRange(), findHighLow()
  Formula: h(t) = Z0 + Σ [ Hi × cos( ωi × (t − t0) − φi ) ]
- 15 unit tests covering all calculation paths

Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</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>fix: move weather feature to org/terst/nav package directories</title>
<updated>2026-03-15T06:52:23+00:00</updated>
<author>
<name>Peter Stone</name>
<email>thepeterstone@gmail.com</email>
</author>
<published>2026-03-15T06:52:23+00:00</published>
<link rel='alternate' type='text/html' href='https://git.terst.org/nav.git/commit/?id=cc76e4f3cc4e4d958f398ed2899a8d653815985b'/>
<id>urn:sha1:cc76e4f3cc4e4d958f398ed2899a8d653815985b</id>
<content type='text'>
Package declarations were already org.terst.nav.* but files lived under
com/example/androidapp/. Kotlin 2.0 (K2) compiler on CI fails when
package declarations don't match directory structure during kapt stub
generation. Moved all 20 files to their correct locations and renamed
MainActivity (weather) -&gt; WeatherActivity to avoid confusion with the
nav app's MainActivity.

Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</content>
</entry>
</feed>
