tasks.org: add milestone 6 post-ship cleanup log
This commit is contained in:
61
tasks.org
61
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)
|
- tests: manual — change interval to 30, save, verify WorkManager re-queues (check adb shell dumpsys jobscheduler)
|
||||||
- datetime: [2026-05-18 Sun 20:00]
|
- datetime: [2026-05-18 Sun 20:00]
|
||||||
|
|
||||||
|
* milestone 6: post-ship cleanup
|
||||||
|
** DONE fix resource XML comment before <?xml declaration
|
||||||
|
*** acceptance
|
||||||
|
- android build succeeds with custom icon assets.
|
||||||
|
*** notes
|
||||||
|
Android's AAPT resource compiler requires <?xml to be the first byte of the file. Image Asset tool generated ic_launcher_background.xml, ic_launcher.xml, and ic_launcher_round.xml with an Apache license comment block before <?xml, causing ParseError at row 16. Fixed by stripping the comment from those three files. ic_launcher_foreground.xml was unaffected (no <?xml declaration). Do not use Image Asset tool for tweaks — it re-adds the comment on reimport; edit XML directly.
|
||||||
|
*** evidence
|
||||||
|
- commit: a6af2fe
|
||||||
|
- tests: manual — gradle assembleDebug succeeds
|
||||||
|
- datetime: [2026-05-19 Mon]
|
||||||
|
|
||||||
|
** DONE fix manifest missing icon references
|
||||||
|
*** acceptance
|
||||||
|
- app icon appears on device launcher after install.
|
||||||
|
*** notes
|
||||||
|
AndroidManifest.xml was missing android:icon and android:roundIcon attributes on the <application> 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<String> 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
|
* implementation notes for coding agents
|
||||||
- keep the server small and testable.
|
- keep the server small and testable.
|
||||||
- keep org formatting in one pure function.
|
- keep org formatting in one pure function.
|
||||||
|
|||||||
Reference in New Issue
Block a user