-
BUG-1: Format String Crash —
MissingFormatArgumentExceptionifuserNamecontains%s,%d, etc.- Files:
MainActivity.kt:92,HomeScreen.kt:70,GameScreen.kt:81 - Fix: Sanitize
userName(replace%with%%) before passing tostringResource(..., userName)in all three files.
- Files:
-
BUG-2:
CelebrationScreenfiresonNext()twice- File:
CelebrationScreen.kt:87-97 - Fix: Added
hasNavigatedmutable state andguardedOnNextlambda soonNext()can only execute once.
- File:
-
BUG-3: Language Dropdown Toggle Race
- File:
SettingsScreen.kt:351-369 - Fix: Removed
IconButtononClick so only the overlay handler toggles expanded.
- File:
-
BUG-4: "Colors" Category Hidden Behind
lettersEnabled- File:
HomeScreen.kt:145-153 - Fix: Removed the
if (lettersEnabled)guard so Colors is always visible.
- File:
-
BUG-5:
dragRadiusIs Raw Pixels- File:
GameScreen.kt:105 - Fix: Changed to
with(LocalDensity.current) { 56.dp.toPx() }.
- File:
-
BUG-6: Unsafe Activity Cast in Theme
- File:
ui/theme/Theme.kt:28 - Fix: Used safe cast
as? Activitywith null-safe fallback.
- File:
-
BUG-7:
nextRound()Uses Stale State- File:
game/GameViewModel.kt:84-121 - Fix: Restructured to compute and assign inside
_state.update { }atomically.
- File:
-
EDGE-1:
GameScreenDefaultviewModel()Parameter Is Dangerous- File:
ui/game/GameScreen.kt:70 - Fix: Removed default value and unused import.
- File:
-
EDGE-2:
LevelManagerCan Crash on Missing Color Translation- File:
game/LevelManager.kt:80 - Fix: Wrapped in try/catch with fallback to existing display.
- File:
-
EDGE-3:
shuffledDrawerItemsReshuffles on Unrelated State Updates- File:
ui/game/GameScreen.kt:90-92 - Fix: Changed remember key to
state.categoryandstate.itemCount.
- File:
-
EDGE-4: Tutorial Pointer Input
while(true)- File:
ui/game/GameScreen.kt:296-303 - Fix: Changed loop condition to
while(showTutorial).
- File:
-
EDGE-5: Dead Navigation Route (
Screen.Celebration)- File:
navigation/AppNavHost.kt:57-66 - Fix: Removed unreachable route, composable, import, and sealed object.
- File:
-
EDGE-6: Unused Function
nextItemCount()- File:
game/LevelManager.kt:88-90 - Fix: Deleted unused function.
- File:
-
EDGE-7: Unused Function
getLocaleDisplayName()- File:
ui/settings/SettingsScreen.kt:421-431 - Fix: Deleted unused function.
- File:
-
EDGE-8: Unused String Resource
game_back- File:
res/values/strings.xml:12,res/values-en/strings.xml:12 - Fix: Removed unused string resource.
- File:
-
EDGE-9: No Input Validation on
userName- File:
ui/settings/SettingsScreen.kt:127-139/GameViewModel.kt - Fix: Added trim + 20-character cap in
setUserName.
- File:
-
EDGE-10: Accessibility: Hardcoded English Content Description
- File:
MainActivity.kt:128 - Fix: Replaced with
stringResource(R.string.splash_content_desc)and added to XMLs.
- File:
-
EDGE-11: Accessibility: Emojis Without Content Descriptions
- Files:
HomeScreen.kt,GameScreen.kt,SettingsScreen.kt - Fix: Added
Modifier.semantics { contentDescription = ... }to settings gear, home buttons, and category cards.
- Files:
-
EDGE-12:
YourTurnIndicatorLogic Is Narrow- File:
ui/game/GameScreen.kt:118,232 - Fix: Removed
itemCount == 3guard so it shows after any tutorial.
- File:
-
EDGE-13:
unplaceItemIs Defined but Unreachable- File:
game/GameViewModel.kt:73-82 - Fix: Removed dead code.
- File:
-
EDGE-14: Inconsistent Celebration Navigation
- File:
navigation/AppNavHost.kt:57-66 - Fix: Resolved by removing the dead route (EDGE-5); only the inline overlay remains.
- File:
-
EDGE-15: ProGuard Rule Is Overly Broad
- File:
app/proguard-rules.pro - Fix: Removed
-keep class androidx.compose.** { *; }; kept runtime only.
- File:
-
INFO-1: Sound removed from first release
- Decision: No sounds for first release. Sound files (
pop.ogg,chime.ogg) deleted fromres/raw/. Removed from AGENTS.md, README.md, TRANSLATIONS.md.
- Decision: No sounds for first release. Sound files (
-
INFO-2: Full Test Suite
- Unit tests: GameStateTest, ItemSetsTest, LevelManagerTest, GameViewModelTest (with Robolectric + Turbine)
- Instrumented tests: HomeScreenTest, GameScreenTest, SettingsScreenTest, MainActivityTest
- Updated AGENTS.md with testing conventions
- Updated build.gradle.kts with test dependencies
-
INFO-3: Splash Delay Is Skippable
- Added
clickableto splash screen +onSkipcallback. Hint text "Toca para continuar" appears after 1s. String added to all locales.
- Added
-
INFO-4: Haptic Feedback on Correct Drop
- Added gentle haptic vibration on correct placement
- Settings toggle: "Vibrar al acertar" (default OFF)
- Includes plain-language explanation text
- Uses CONFIRM haptic on API 34+, VIRTUAL_KEY fallback on older devices
- Does not trigger on tutorial auto-placement
-
INFO-5:
showColorAidLogic Is Duplicated- Centralized in
LevelManager.shouldShowColorAid(category, complexity). GameStateexposes it as computed propertyshowColorAid.GameScreenreads directly from state, no local duplication.
- Centralized in