# User Preferences & Workflow Quirks Living record of user preferences for the Nav project. ## 1. Interaction & Workflow - **Safety First:** Cautious and deliberate action. - **Checkpoint Model:** Research -> Strategy -> GO. ## 3. User Context - **Solo developer who is also the sole user.** The user is both the target audience and the developer. Optimize for their experience as a sailor, not for a hypothetical general public. - **Reinstall resilience is non-negotiable.** All persistent data (tracks, settings) must survive app uninstall/reinstall. Never use `getExternalFilesDir()` or other app-private storage for user data. - **Pragmatic about implementation quality.** One-off solutions and temporary hacks are acceptable — just flag them clearly and ensure they get cleaned up in a follow-up. - **Debug logging:** The in-app debug log (`NavLogger`) is the primary debugging tool. ADB (`adb logcat`) is occasionally available but should not be assumed. Log anything useful to `NavLogger`, not just to Android's `Log`. ## 2. Merge Policy — NON-NEGOTIABLE - **Merge to `main` after every complete unit of work.** Nothing counts until it lands on `main` — that's when the user can test it. Don't batch up multiple tasks across a session and merge at the end. Each self-contained piece (a feature, a bug fix, a redesign) merges to `main` as soon as it's working and tested. - Feature branches are short-lived and merge-forward aggressively. Push the branch, then immediately merge it to `main` and push `main`. - **Merge immediately when a task is done — not at session end, not during cleanup.** "Prep for new session" should never be the moment work first lands on main. ## 3. Repository Conventions — NON-NEGOTIABLE - **Default branch is `main`.** Always has been, always will be. - When the user says "main", "master", or "the default branch" they all mean `main`. - **CI/CD (`.github/workflows/android.yml`) triggers on `main`.** Firebase App Distribution only fires on pushes to `main`. Never change the trigger branch without explicit instruction. - Before any merge or push, verify: `git branch --show-current` is `main` and `git remote show origin | grep "HEAD branch"` shows `main`. - Never create or develop on `master`. If `master` ever appears, rename it to `main` immediately.