From fca3ea6f602a923747301f78b42e1eb464104ffe Mon Sep 17 00:00:00 2001 From: eulaly Date: Tue, 19 May 2026 08:11:48 -0400 Subject: [PATCH] tasks.org: add milestone 6 post-ship cleanup log --- tasks.org | 61 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) diff --git a/tasks.org b/tasks.org index 69c175c..27cc96d 100644 --- a/tasks.org +++ b/tasks.org @@ -471,6 +471,67 @@ SynqSettings gained syncIntervalMinutes: Int = 15 field with DataStore key sync_ - tests: manual — change interval to 30, save, verify WorkManager re-queues (check adb shell dumpsys jobscheduler) - datetime: [2026-05-18 Sun 20:00] +* milestone 6: post-ship cleanup +** DONE fix resource XML comment before element. Added @mipmap/ic_launcher and @mipmap/ic_launcher_round. Also committed all mipmap-* webp files and drawable/ic_launcher_background.xml (solid #22569d) and ic_launcher_foreground.xml generated by Image Asset tool. +*** evidence +- commit: a6af2fe +- tests: manual — install APK on device, verify icon appears in launcher +- datetime: [2026-05-19 Mon] + +** DONE fix status bar icons washed out (API 35 edge-to-edge) +*** acceptance +- system clock, battery, wifi icons are visible over the app TopAppBar. +*** notes +Android 15 (API 35) enforces edge-to-edge regardless of enableEdgeToEdge() call — removing it had no effect. Real fix: keep enableEdgeToEdge() in MainActivity and add a SideEffect in Theme.kt that calls WindowCompat.getInsetsController(window, view).isAppearanceLightStatusBars = true. This tells the system to render dark (visible) status bar icons on the light TopAppBar background. +*** evidence +- commit: 68deb5c +- tests: manual — open app, verify clock/battery/wifi icons are dark and readable +- datetime: [2026-05-19 Mon] + +** DONE fix keyboard covering Save button +*** acceptance +- Save and Save & Close buttons are visible above the software keyboard. +*** notes +Added imePadding() to the Column modifier in CaptureScreen. The column shrinks to fit above the keyboard rather than being obscured by it. +*** evidence +- commit: 23df95d +- tests: manual — tap body field, keyboard opens, verify save buttons remain visible +- datetime: [2026-05-19 Mon] + +** DONE add sync result snackbar +*** acceptance +- brief snackbar appears after tapping sync: "synced N", "nothing to sync", or "server unreachable". +*** notes +Added MutableSharedFlow snackbar emitter to CaptureViewModel. syncNow() now calls checkHealth() first and emits "server unreachable" on failure. syncPending() return type changed from Unit to Int (count of successfully synced captures). SnackbarHost added to CaptureScreen Scaffold; LaunchedEffect collects the flow and calls snackbarState.showSnackbar(). +*** evidence +- commit: 4597f92 +- tests: manual — tap sync with server up (see "synced N"), with server down (see "server unreachable"), with empty queue (see "nothing to sync") +- datetime: [2026-05-19 Mon] + +** DONE log token on every server startup +*** acceptance +- token is clearly visible in container logs on every start, not just first run. +*** notes +lifespan() in server/app/main.py now logs the token between === lines on every startup. Previously only logged "token loaded from token.txt" quietly; now logs the token value itself so it's easy to find with docker logs synq. +*** evidence +- commit: a6af2fe +- tests: manual — docker restart synq, docker logs synq | grep token +- datetime: [2026-05-19 Mon] + * implementation notes for coding agents - keep the server small and testable. - keep org formatting in one pure function.