- 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>
- IncidentDetailScreen: add Delete button (confirm dialog) wired to deleteIncident()
- git.ts: fix Gitea POST vs PUT (use PUT when file exists/sha present); add
pre-flight validation for missing URL/token/owner/repo; add 15s fetch timeout
with AbortError handling; improve error messages with actionable hints
- [id].tsx: guard URL for Gitea/GitLab before calling pushIncidentToGit
- settings.tsx: move ToggleRow/SegmentRow/Field outside SettingsScreen to fix
TextInput focus loss on each keystroke (component remount on rerender)
- settings.tsx: add Title Template setting with auto-increment info card
- settings.tsx: add AI base URL + model fields; expand AI section description
- new.tsx: pre-fill title from pref_title_template; increment counter after save
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>