- Wrap root layout with SafeAreaProvider, use useSafeAreaInsets in all
screens so FAB/action bar/scroll content clear Android nav bar
- Add deleteIncidentFromGit() (Gitea/GitHub/GitLab) — detail screen now
offers Cancel / Local only / Local + Repo when incident was pushed
- Add Mistral as AI provider (OpenAI-compat, api.mistral.ai/v1,
mistral-small-latest default)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- DB migration v2: git_pushed_at column on incidents
- markIncidentPushed(id): stamps the push timestamp
- loadGitConfig(): shared helper in lib/git.ts, removes duplication
- Home screen: colored dot per incident (red=never pushed,
orange=dirty/modified after push, green=up to date);
dot visible only when git is configured
- Home screen: long-press enters selection mode, tap toggles;
action bar with Select unpushed / Select all shortcuts +
bulk push with sequential progress counter
- [id].tsx: marks incident pushed after successful push,
updates local state without reload
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
new.tsx: service field was missing its mic button — VoiceField type
excluded "service" and the label used a plain Text instead of labelRow().
index.tsx: incident list only loaded on mount; router.back() does not
remount the screen so new incidents never appeared. useFocusEffect
replaces the one-shot useEffect so the list reloads on every focus.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>