<feed xmlns='http://www.w3.org/2005/Atom'>
<title>nav.git/android-app/app/src/main/res/menu, 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-05-04T17:50:32+00:00</updated>
<entry>
<title>feat: move Layers from bottom nav to dedicated FAB</title>
<updated>2026-05-04T17:50:32+00:00</updated>
<author>
<name>Peter Stone</name>
<email>thepeterstone@gmail.com</email>
</author>
<published>2026-05-04T17:50:32+00:00</published>
<link rel='alternate' type='text/html' href='https://git.terst.org/nav.git/commit/?id=afc7906c1a47fa9cf9dff5a247e6abae7e8aacbb'/>
<id>urn:sha1:afc7906c1a47fa9cf9dff5a247e6abae7e8aacbb</id>
<content type='text'>
Replaces the nav_layers bottom nav item with a mini FloatingActionButton
anchored below the HUD, giving layers access without occupying a nav slot.

Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>Merge origin/main — unite all work onto one branch</title>
<updated>2026-04-23T23:10:11+00:00</updated>
<author>
<name>Claude</name>
<email>noreply@anthropic.com</email>
</author>
<published>2026-04-23T23:10:11+00:00</published>
<link rel='alternate' type='text/html' href='https://git.terst.org/nav.git/commit/?id=e1db9200e9d44c10450361cc8984a45b2eda87b7'/>
<id>urn:sha1:e1db9200e9d44c10450361cc8984a45b2eda87b7</id>
<content type='text'>
Brings in dev log (NavLogger), UnitPrefs, MapLayerManager, HUD views,
conditions throttling, track save/load pipeline, improved ParticleWindView
(antimeridian-aware, dynamic particle count), Snackbar error surfacing,
and all other main-branch work from the prior session.

Combined with master's hardware source flags, vessel registry, crew
management, thermal alarm, CPA collision alerts, and track stats.

Also documents primary branch policy in CLAUDE.md and .agent/config.md:
all work merges to main, never master.

https://claude.ai/code/session_011h2dXbgXg3PesQMmQUNTCW
</content>
</entry>
<entry>
<title>feat: vessel registry, crew management, and thermal alarm</title>
<updated>2026-04-22T05:35:49+00:00</updated>
<author>
<name>Claude</name>
<email>noreply@anthropic.com</email>
</author>
<published>2026-04-22T05:35:49+00:00</published>
<link rel='alternate' type='text/html' href='https://git.terst.org/nav.git/commit/?id=eeafe2f0f3a3718bd52e9c333894e1abbc0611ab'/>
<id>urn:sha1:eeafe2f0f3a3718bd52e9c333894e1abbc0611ab</id>
<content type='text'>
- Vessel/CrewMember data classes with full profile fields
  (MMSI, callsign, flag, home port, hull type, dimensions, roles)
- VesselRepository: in-memory CRUD for own vessel, fleet, and crew;
  getOwnVessel(), getSkipper(), getCrewByRole() helpers
- VesselRegistryFragment: own-vessel card + crew list + known-vessels
  list; AlertDialog editors for add/edit; long-press to delete
- ic_vessel.xml sailboat icon; 5th bottom-nav tab "Vessel"
- ThermalMonitor: thermalFlow() using Intent.ACTION_BATTERY_CHANGED
  (battery °C) + PowerManager.OnThermalStatusChangedListener (API 29+);
  ThermalState OK/WARM/HOT/CRITICAL with distinct-until-changed filter
- MainActivity: startThermalMonitoring() sounds mob_alarm + Toast on
  HOT (≥45°C) and CRITICAL (≥50°C); auto-silences on OK/WARM
- MainViewModel: thermalState and thermalReading StateFlows
- 18 VesselRepositoryTest cases — all GREEN (test-runner)
- design.md: updated competitive matrix + feature implementation status

https://claude.ai/code/session_011h2dXbgXg3PesQMmQUNTCW
</content>
</entry>
<entry>
<title>Add Learn tab; move quit to Safety; remove persistent MOB FAB</title>
<updated>2026-04-10T22:47:27+00:00</updated>
<author>
<name>Claude</name>
<email>noreply@anthropic.com</email>
</author>
<published>2026-04-10T22:47:27+00:00</published>
<link rel='alternate' type='text/html' href='https://git.terst.org/nav.git/commit/?id=fc7192288109fc3542670cbeeaebe0de2a75eb74'/>
<id>urn:sha1:fc7192288109fc3542670cbeeaebe0de2a75eb74</id>
<content type='text'>
UI cleanup:
- Remove always-visible MOB FAB — Safety screen button is sufficient
- Remove floating quit button; move to bottom of Safety screen
- fragment_container is now clickable/focusable, blocking map touch-through
  for all overlays (trip reports, log, safety)
- Record Track FAB hidden while any overlay is shown, visible on map tab

New Learn tab (5th nav item):
- Migration guides for Navionics and Sea People (local markdown via DocFragment)
- ASA Course Catalog, ASA Online Learning, ColRegs, Sailing Flashcards
  (open in browser)
- Remove blanket assets/ .gitignore so markdown docs are tracked

https://claude.ai/code/session_01HXPjBsogsJVRwCiekDGkJX
</content>
</entry>
<entry>
<title>feat(nav): replace Map+Instruments with Map+Layers in bottom nav</title>
<updated>2026-04-06T18:03:39+00:00</updated>
<author>
<name>Peter Stone</name>
<email>thepeterstone@gmail.com</email>
</author>
<published>2026-04-06T18:03:39+00:00</published>
<link rel='alternate' type='text/html' href='https://git.terst.org/nav.git/commit/?id=d98b441f2f9ca8b11a04406240dd19ecc0cac7ab'/>
<id>urn:sha1:d98b441f2f9ca8b11a04406240dd19ecc0cac7ab</id>
<content type='text'>
Layers acts as an action button — shows LayerPickerSheet and snaps
back to Map so it never stays selected. Instruments tab removed;
sheet expand/collapse via swipe as before.

Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>fix: resolve Kotlin compilation errors from UI refactor</title>
<updated>2026-03-23T07:07:17+00:00</updated>
<author>
<name>Peter Stone</name>
<email>thepeterstone@gmail.com</email>
</author>
<published>2026-03-23T07:07:17+00:00</published>
<link rel='alternate' type='text/html' href='https://git.terst.org/nav.git/commit/?id=65c04f94ecd862ec2ba195e0128da84f79647ef1'/>
<id>urn:sha1:65c04f94ecd862ec2ba195e0128da84f79647ef1</id>
<content type='text'>
- Make InstrumentHandler.labelTrend and barometerTrendView nullable
- Remove anchorWatchHandler init block referencing non-existent view IDs
- Fix state.radiusM -&gt; state.watchCircleRadiusMeters
- Add bottom_nav_weather_menu.xml with nav_forecast; point WeatherActivity at it

Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>feat: refactor UI to BottomNavigationView with Safety and Doc fragments</title>
<updated>2026-03-23T04:16:32+00:00</updated>
<author>
<name>Peter Stone</name>
<email>thepeterstone@gmail.com</email>
</author>
<published>2026-03-23T04:16:32+00:00</published>
<link rel='alternate' type='text/html' href='https://git.terst.org/nav.git/commit/?id=77892d354eda07d98e2dfa5d00fca1ed1f808d8b'/>
<id>urn:sha1:77892d354eda07d98e2dfa5d00fca1ed1f808d8b</id>
<content type='text'>
Replace FAB-based navigation with a 4-tab BottomNavigationView (Map,
Instruments, Log, Safety). Instruments use a collapsible bottom sheet;
Log and Safety display as full-screen overlay fragments.

- Add SafetyFragment with MOB and Anchor Watch controls
- Add DocFragment for in-app markdown help (Markwon: core, tables, images)
- Add layout_instruments_sheet with 3x3 instrument grid and PolarDiagramView
- Add fragment_safety and fragment_doc layouts
- Add vector drawables: ic_map, ic_instruments, ic_log, ic_safety, ic_close
- Update activity_main.xml to CoordinatorLayout with bottom sheet + overlay
- Fix: set isHideable=true before STATE_HIDDEN to avoid silent no-op from
  behavior_hideable=false default; restore false on Map/Instruments tabs

Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>feat: add wind/current map overlay and weather forecast on startup</title>
<updated>2026-03-13T19:59:01+00:00</updated>
<author>
<name>Claudomator Agent</name>
<email>agent@claudomator</email>
</author>
<published>2026-03-13T19:59:01+00:00</published>
<link rel='alternate' type='text/html' href='https://git.terst.org/nav.git/commit/?id=51f86cff118f9532783c4e61724e07173ec029d7'/>
<id>urn:sha1:51f86cff118f9532783c4e61724e07173ec029d7</id>
<content type='text'>
Implements the wind/current map overlay and 7-day weather forecast
display that loads on application launch:

Data layer:
- Open-Meteo API (free, no key): WeatherApiService + MarineApiService
- Moshi-annotated response models (WeatherResponse, MarineResponse)
- WeatherRepository: parallel async fetch, Result&lt;T&gt; error propagation
- Domain models: WindArrow (with beaufortScale/isCalm) + ForecastItem
  (with weatherDescription/isRainy via WMO weather codes)

Presentation layer:
- MainViewModel: StateFlow&lt;UiState&gt; (Loading/Success/Error),
  windArrow and forecast streams
- MainActivity: runtime location permission, FusedLocationProvider
  GPS fetch on startup, falls back to SF Bay default
- MapFragment: MapLibre GL map with wind-arrow SymbolLayer;
  icon rotated by wind direction, size scaled by speed in knots
- ForecastFragment + ForecastAdapter: RecyclerView ListAdapter
  showing 7-day hourly forecast (time, description, wind, temp, precip)

Resources:
- ic_wind_arrow.xml vector drawable (north-pointing, rotated by MapLibre)
- BottomNavigationView: Map / Forecast tabs
- ViewBinding enabled throughout

Tests (TDD — written before implementation):
- WindArrowTest: calm detection, direction normalisation, Beaufort scale
- ForecastItemTest: weatherDescription, isRainy for WMO codes
- WeatherApiServiceTest: MockWebServer request params + response parsing
- WeatherRepositoryTest: MockK service mocks, data mapping, error paths
- MainViewModelTest: Turbine StateFlow assertions for all state transitions

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