mirror of
https://github.com/tiennm99/loto.git
synced 2026-10-14 12:17:00 +00:00
chore: move TODO.md to the repo root and drop the redundant serialize-javascript override
This commit is contained in:
1 parent
8c2a6c2413
commit
28825b78e4
12 files changed
+26
-27
No files matched your search
@@ -157,10 +157,10 @@ iOS Safari. No code; verification only.
|
||||
`cookie`: still needed — Kit 2.70.x still declares `cookie ^0.6.0`,
|
||||
below the 0.7.0 fix. Kit 3.0.1 (now `latest`) declares `^2.0.1`, so
|
||||
the override goes away with a Kit 3 migration (a major upgrade, not
|
||||
done). `serialize-javascript`: effectively redundant — the consumer
|
||||
done). `serialize-javascript`: dropped 2026-10-12 — redundant — the consumer
|
||||
(`@rollup/plugin-terser`, via `workbox-build`) declares `^7.0.3`, which
|
||||
already resolves to 7.1.x; the `^7.0.5` override only guards a lockfile
|
||||
that pins 7.0.3/7.0.4. Safe to drop.
|
||||
that pins 7.0.3/7.0.4.
|
||||
- **Voice list growth.** If we add voices > 2 (esp. > 10), revisit
|
||||
the precache strategy — currently we precache only the default
|
||||
voice. The 7d runtime cache covers the rest, but cold-start cost
|
||||
@@ -95,7 +95,7 @@ pending.
|
||||
- [ ] `./gradlew :app:test` clean
|
||||
- [ ] `./gradlew :app:assembleDebug` clean
|
||||
- [ ] Manual smoke per checklist
|
||||
- [ ] Update `plans/TODO.md` once verified
|
||||
- [ ] Update `TODO.md` once verified
|
||||
|
||||
## Success criteria
|
||||
|
||||
|
||||
@@ -23,7 +23,7 @@ sequencing and cancellation semantics as `web/src/lib/voice.js`.
|
||||
a new utterance cancels any in-flight one (token semantics of
|
||||
`voice.js`).
|
||||
- Non-functional: no audio focus grab beyond transient playback
|
||||
(`plans/TODO.md` flags the unanswered incoming-call question — decide
|
||||
(`TODO.md` flags the unanswered incoming-call question — decide
|
||||
and document here: use `AudioAttributes` USAGE_MEDIA +
|
||||
`setHandleAudioBecomingNoisy`, request no focus or transient-may-duck;
|
||||
record the choice in the code and android README); no INTERNET.
|
||||
@@ -77,7 +77,7 @@ Package `com.miti99.loto.audio`:
|
||||
|
||||
- **ExoPlayer `asset:///` quirks on API 24** — the old port's research
|
||||
already picked ExoPlayer over SoundPool (decision record:
|
||||
`git show f7cbb6e:android/plans/TODO.md`; the standalone research
|
||||
`git show f7cbb6e:android/TODO.md`; the standalone research
|
||||
reports no longer exist). Signal: playback failure on
|
||||
the API 24 emulator in Phase 10. Response: fall back to
|
||||
`AssetFileDescriptor` + `ProgressiveMediaSource`, or MediaPlayer for
|
||||
|
||||
@@ -35,7 +35,7 @@ celebration. Compose throughout, driven by `PlayerBoardViewModel`.
|
||||
match web copy exactly.
|
||||
- Non-functional: haptics via `VIBRATE` on cell tap, suppressed when the
|
||||
system reduced-motion/haptics-off signals say so (mirror wrapper
|
||||
behavior recorded in `plans/TODO.md` QA list); 60fps grid on API 24
|
||||
behavior recorded in `TODO.md` QA list); 60fps grid on API 24
|
||||
hardware (no per-cell recomposition storms — stable keys, immutable
|
||||
cell state).
|
||||
|
||||
|
||||
+3
-3
@@ -13,7 +13,7 @@ dependencies: [5, 6, 7]
|
||||
|
||||
Everything that made the wrapper feel like a real Android app, now
|
||||
native-first: keep-screen-on, back handling, theming, splash, launcher
|
||||
icons, edge-to-edge. The wrapper-era device-QA list in `plans/TODO.md`
|
||||
icons, edge-to-edge. The wrapper-era device-QA list in `TODO.md`
|
||||
is the acceptance spec.
|
||||
|
||||
## Requirements
|
||||
@@ -56,7 +56,7 @@ is the acceptance spec.
|
||||
`res/values*/themes.xml`, `values-night/`
|
||||
- Modify: `MainActivity.kt` (back callback, edge-to-edge),
|
||||
`LotoAppRoot.kt` (footer, keep-screen-on binding)
|
||||
- Spec: `plans/TODO.md` device-QA list, wrapper `MainActivity.java` +
|
||||
- Spec: `TODO.md` device-QA list, wrapper `MainActivity.java` +
|
||||
`res/` in git history, `web/src/app.css` (colors), `web/src/lib/PageFooter.svelte`
|
||||
|
||||
## Implementation Steps
|
||||
@@ -72,7 +72,7 @@ is the acceptance spec.
|
||||
|
||||
## Success Criteria
|
||||
|
||||
- [ ] Wrapper-era QA items in `plans/TODO.md` that are still applicable pass on an emulator (screen-awake, back chain, exit dialog copy, themed icon, dark splash)
|
||||
- [ ] Wrapper-era QA items in `TODO.md` that are still applicable pass on an emulator (screen-awake, back chain, exit dialog copy, themed icon, dark splash)
|
||||
- [ ] No hardcoded color literals outside `ui/theme` (lint check or grep)
|
||||
- [ ] App label, icon, splash match the brand in light + dark
|
||||
|
||||
|
||||
@@ -39,7 +39,7 @@ pipeline stays untouched.
|
||||
`android/README.md` full rewrite (native stack, build, release,
|
||||
permissions rationale kept — no INTERNET), `docs/play-store-publishing.md`
|
||||
spot-check (paths to build.gradle change),
|
||||
`plans/TODO.md`: drop wrapper-only items, keep still-valid ones.
|
||||
`TODO.md`: drop wrapper-only items, keep still-valid ones.
|
||||
|
||||
## Architecture
|
||||
|
||||
@@ -47,7 +47,7 @@ Move, don't rewrite: `git rm -r` the Capacitor tree, `git mv
|
||||
android-native android`, fix the audio-assets relative path
|
||||
(`../web/static/audio` from `android/app/`), fix workflow paths.
|
||||
History preserves the wrapper (like the old native port before it) —
|
||||
note the swap in the commit message and `plans/TODO.md` decisions record.
|
||||
note the swap in the commit message and `TODO.md` decisions record.
|
||||
|
||||
## Related Code Files
|
||||
|
||||
@@ -56,7 +56,7 @@ note the swap in the commit message and `plans/TODO.md` decisions record.
|
||||
- Move: `android-native/**` → `android/**`
|
||||
- Modify: `.github/workflows/ci.yml`, `.github/workflows/android-release.yml`,
|
||||
`.github/actions/setup-android/action.yml`, root `README.md`,
|
||||
`docs/play-store-publishing.md`, `plans/TODO.md`
|
||||
`docs/play-store-publishing.md`, `TODO.md`
|
||||
- Create: `android/README.md` (rewritten)
|
||||
|
||||
## Implementation Steps
|
||||
|
||||
@@ -41,7 +41,7 @@ without breaking the running 14-day tester window.
|
||||
## Related Code Files
|
||||
|
||||
- Modify: `android/app/build.gradle.kts` (only if versionCode/Name
|
||||
need correction), `plans/TODO.md` (retire completed QA items, carry
|
||||
need correction), `TODO.md` (retire completed QA items, carry
|
||||
genuinely open ones — e.g. store-listing assets)
|
||||
- No feature code — QA findings each become a fix commit or a tracked
|
||||
todo item; do not batch silent fixes into the release commit.
|
||||
@@ -53,13 +53,13 @@ without breaking the running 14-day tester window.
|
||||
Studio/SDK command-line tools on this machine, create AVDs for
|
||||
API 24, 31, 36 (or attach a physical device via ADB). Budget ~0.5d
|
||||
extra the first time.
|
||||
1. Build QA matrix from `plans/TODO.md` device-QA list + the checklist
|
||||
1. Build QA matrix from `TODO.md` device-QA list + the checklist
|
||||
above; run on API 24 / 31 / 36 emulators (BlueStacks optional).
|
||||
2. File and fix blockers; re-run the affected checks.
|
||||
3. Verify versionCode/Name; tag `v0.2.0`; watch `android-release` run.
|
||||
4. Confirm Play console shows the build on `alpha`; monitor tester
|
||||
opt-in count for the next days (window must not dip below 12).
|
||||
5. Sweep `plans/TODO.md`: mark superseded wrapper items, record the
|
||||
5. Sweep `TODO.md`: mark superseded wrapper items, record the
|
||||
decision reversal, keep the production-access log going (tester
|
||||
feedback + exercised features — Play asks for both).
|
||||
|
||||
@@ -71,7 +71,7 @@ without breaking the running 14-day tester window.
|
||||
all green in the tag run)
|
||||
- [x] Play `alpha` accepted the upload (`Validating tracks: 'alpha'`);
|
||||
tester opt-in count to be monitored over the coming days
|
||||
- [x] `plans/TODO.md` reconciled with the new reality
|
||||
- [x] `TODO.md` reconciled with the new reality
|
||||
|
||||
## QA log — 2026-08-31, API 36 emulator (Medium_Phone_API_36.1)
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@ behavioral spec; the retired 2026-04 native port (git `f7cbb6e`) is
|
||||
2026-08-31). The wrapper is deleted in the same effort; the native app
|
||||
takes over the package id, signing key, and tag-driven release pipeline.
|
||||
|
||||
**Decision reversal on record:** `plans/TODO.md` records "Native
|
||||
**Decision reversal on record:** `TODO.md` records "Native
|
||||
Kotlin/Compose port retired (2026-05-10) in favour of the wrapper, for
|
||||
maintenance parity." The user explicitly reversed this on 2026-08-31.
|
||||
Trade-off accepted: every future `web/` feature must now be hand-ported
|
||||
@@ -54,7 +54,7 @@ to Kotlin; the two apps no longer ship from one codebase.
|
||||
## Non-goals
|
||||
|
||||
- iOS target, multiplayer, i18n, background audio, share sheet — all stay
|
||||
in the `plans/TODO.md` parking lot.
|
||||
in the `TODO.md` parking lot.
|
||||
- Migrating WebView `localStorage` (wrapper users' settings/round state)
|
||||
into the native app — loss accepted (Validation Session 1); release
|
||||
notes must state it.
|
||||
@@ -87,7 +87,7 @@ after 4. Everything else is sequential.
|
||||
| Settings contract | `web/src/lib/settings-store.svelte.js` (DEFAULT_SETTINGS) |
|
||||
| Voice semantics (cancellation, chờ+N sequence) | `web/src/lib/voice.js` + test |
|
||||
| Auto-cross, auto-countdown | `web/src/lib/player-auto-cross.js`, `AutoCountdown.svelte` |
|
||||
| Wrapper-era platform behaviors | `plans/TODO.md` (device QA list), old `android/.../MainActivity.java`, `web/src/lib/wake-lock.js`, `overlay-history.js` |
|
||||
| Wrapper-era platform behaviors | `TODO.md` (device QA list), old `android/.../MainActivity.java`, `web/src/lib/wake-lock.js`, `overlay-history.js` |
|
||||
| Visual parity details (confetti tiers, chờ ring, palette, hint copy) | superseded plan `plans/260429-1511-loto-upstream-sync/` phase files |
|
||||
| Old port architecture (reference only, no code reuse) | git `f7cbb6e` tree, commit message of `90a9dd1` |
|
||||
|
||||
@@ -136,7 +136,7 @@ phase files; chờ = exactly-one-remaining-in-row
|
||||
|
||||
Failures/refinements (both propagated):
|
||||
1. [Fact Checker] `plans/reports/researcher-260427-*` — not found;
|
||||
phase 3 now cites only the `f7cbb6e:android/plans/TODO.md` decision
|
||||
phase 3 now cites only the `f7cbb6e:android/TODO.md` decision
|
||||
record for the ExoPlayer pick.
|
||||
2. [Fact Checker] Exit-dialog Vietnamese strings live in wrapper
|
||||
`res/values/strings.xml:9-12`, not `MainActivity.java` — phase 8
|
||||
|
||||
@@ -57,7 +57,7 @@ generate/clear replays (H2), auto-call lifecycle pause on background (H3),
|
||||
color sliders commit on drag end (H4), R8 `assembleRelease` in CI (H5),
|
||||
auto-cross cursor clamp + ván-mới on shrink (M1), wall-clock countdown
|
||||
immune to animator scale (M3), `grep -Fvx` in the tag guard (L2). Four new
|
||||
tests cover H2/H3/M1. Minors deferred to `plans/TODO.md` tech debt.
|
||||
tests cover H2/H3/M1. Minors deferred to `TODO.md` tech debt.
|
||||
|
||||
## State for the next session
|
||||
|
||||
|
||||
@@ -211,7 +211,7 @@ per-frame `withFrameNanos` loop in `AutoCountdown.kt:143-153`, auto-call at
|
||||
1 s/number keeps the main thread busy.
|
||||
|
||||
Not a blocker for a fairground app on modern hardware, but worth measuring
|
||||
on the API 24 target listed in `plans/TODO.md`. Cheap mitigations: hoist
|
||||
on the API 24 target listed in `TODO.md`. Cheap mitigations: hoist
|
||||
`MasterBoardLayout.BOARD` rows into `key(num)` blocks, or pass `isCalled` /
|
||||
`isLast` as lambdas so the token colour changes without recomposing the cell.
|
||||
|
||||
@@ -321,7 +321,7 @@ Recorded so a future audit does not re-litigate them:
|
||||
animation so the digit still ticks under "remove animations"
|
||||
(`AutoCountdown.kt:139-153`) — correct, and the comment explains why.
|
||||
- `KeepScreenOn` releases the flag in `onDispose` and is keyed on `remaining`,
|
||||
matching the `plans/TODO.md` QA items.
|
||||
matching the `TODO.md` QA items.
|
||||
- Manifest surface is minimal: `VIBRATE` only, `ACCESS_NETWORK_STATE`
|
||||
stripped, one exported activity with a LAUNCHER filter.
|
||||
|
||||
@@ -391,5 +391,5 @@ Then assert that `generate()` before `gate.complete(Unit)` wins.
|
||||
3. **L8** — was `launchMode="singleTask"` carried over deliberately from the
|
||||
Capacitor wrapper manifest, or copied without a reason?
|
||||
4. **M6** — has the master panel been profiled on the API 24 device named in
|
||||
`plans/TODO.md`, or is that QA item still open? The `todo.md` list shows
|
||||
`TODO.md`, or is that QA item still open? The `todo.md` list shows
|
||||
all device-QA boxes unchecked.
|
||||
@@ -114,7 +114,7 @@ Scope: `android/` only (per delegation; `web/` read-only for M2 parity check;
|
||||
|
||||
- **Deferred, not applied.** The report frames this as "not a blocker...
|
||||
worth measuring," conditional on API 24 device profiling that
|
||||
`plans/TODO.md` shows as still unchecked. The suggested mitigations
|
||||
`TODO.md` shows as still unchecked. The suggested mitigations
|
||||
(`key(num)` blocks or lambda-based cell props) touch the hot
|
||||
`MasterBoard`/cell-render path with no compose UI test harness in this
|
||||
project to catch a visual regression — the risk/verification ratio didn't
|
||||
@@ -193,7 +193,7 @@ Scope: `android/` only (per delegation; `web/` read-only for M2 parity check;
|
||||
in-progress round acceptable/desired? Needs a product call, not a code
|
||||
fix.
|
||||
3. M6: is there an actual profiled slowdown on the API 24 device from
|
||||
`plans/TODO.md`, or should this stay deferred until QA reports one?
|
||||
`TODO.md`, or should this stay deferred until QA reports one?
|
||||
|
||||
Status: DONE_WITH_CONCERNS
|
||||
Summary: Fixed H1, H2, M1, M3, M4 (partial, documented gap), M5, L1, and the two clear-cut manifest/gradle hygiene items (L8, L11); confirmed M2 already matches web and left as-is; deferred M6, L2-L7, L9, L10 with reasons. All unit tests (including 5 new race-regression tests) and lint pass.
|
||||
|
||||
@@ -20,7 +20,6 @@
|
||||
"lightningcss-linux-x64-gnu": "1.33.0"
|
||||
},
|
||||
"overrides": {
|
||||
"serialize-javascript": "^7.0.5",
|
||||
"cookie": "^0.7.2"
|
||||
},
|
||||
"devDependencies": {
|
||||
|
||||
Reference in new issue
Block a user