2025-07-26 - 2026-07-26

Overview

85 Active Pull Requests
98 Active Issues
Excluding merges, 3 authors have pushed 881 commits to master and 1109 commits to all branches. On master, 721 files have changed and there have been 188388 additions and 75492 deletions.

83 Releases published by 1 user

Published v0.49.0 v0.49.0 2026-07-17 01:11:59 +00:00

Published v0.48.1 v0.48.1 2026-07-15 22:27:47 +00:00

Published v0.48.0 v0.48.0 2026-07-15 22:03:27 +00:00

Published v0.47.0 v0.47.0 2026-07-14 02:04:24 +00:00

Published v0.46.0 v0.46.0 2026-07-14 00:50:29 +00:00

Published v0.45.0 v0.45.0 2026-07-13 23:22:33 +00:00

Published v0.44.0 v0.44.0 2026-07-13 22:16:27 +00:00

Published v0.43.3 v0.43.3 2026-07-10 16:57:04 +00:00

Published v0.43.2 v0.43.2 2026-07-09 23:46:47 +00:00

Published v0.43.1 v0.43.1 2026-07-09 18:51:23 +00:00

Published v0.43.0 v0.43.0 2026-07-09 05:29:07 +00:00

Published v0.42.1 v0.42.1 2026-07-07 18:13:25 +00:00

Published v0.42.0 v0.42.0 2026-07-07 04:37:40 +00:00

Published v0.41.1 v0.41.1 2026-07-06 21:28:33 +00:00

Published v0.41.0 v0.41.0 2026-07-06 20:27:54 +00:00

Published v0.40.3 v0.40.3 2026-06-26 21:16:05 +00:00

Published v0.40.2 v0.40.2 2026-06-26 20:12:55 +00:00

Published v0.40.1 v0.40.1 2026-06-25 18:18:04 +00:00

Published v0.40.0 v0.40.0 2026-06-25 17:38:25 +00:00

Published v0.39.1 v0.39.1 2026-05-29 05:54:52 +00:00

Published v0.39.0 v0.39.0 2026-05-19 23:58:42 +00:00

Published v0.38.0 v0.38.0 2026-05-19 23:27:04 +00:00

Published v0.37.0 v0.37.0 2026-05-19 22:44:10 +00:00

Published v0.36.12 v0.36.12 2026-05-19 22:44:04 +00:00

Published v0.36.11 v0.36.11 2026-05-19 22:40:16 +00:00

Published v0.36.10 v0.36.10 2026-05-19 22:38:07 +00:00

Published v0.36.9 v0.36.9 2026-05-19 22:32:14 +00:00

Published v0.36.8 v0.36.8 2026-05-19 22:26:42 +00:00

Published v0.36.7 v0.36.7 2026-05-19 22:16:24 +00:00

Published v0.36.6 v0.36.6 2026-05-19 21:55:09 +00:00

Published v0.36.5 v0.36.5 2026-05-19 21:45:49 +00:00

Published v0.36.4 v0.36.4 2026-05-19 21:34:04 +00:00

Published v0.36.3 v0.36.3 2026-05-19 21:01:10 +00:00

Published v0.36.2 v0.36.2 2026-05-19 20:19:02 +00:00

Published v0.36.1 v0.36.1 2026-05-19 00:09:54 +00:00

Published v0.36.0 v0.36.0 2026-05-18 20:25:15 +00:00

Published v0.35.1 v0.35.1 2026-05-18 06:55:22 +00:00

Published v0.35.0 v0.35.0 2026-05-18 06:19:43 +00:00

Published v0.34.0 v0.34.0 2026-05-18 02:16:24 +00:00

Published v0.33.0 v0.33.0 2026-05-16 21:06:34 +00:00

Published v0.32.0 v0.32.0 2026-05-16 20:48:52 +00:00

Published v0.31.0 v0.31.0 2026-05-16 20:24:25 +00:00

Published v0.30.0 v0.30.0 2026-05-16 19:34:40 +00:00

Published v0.29.0 v0.29.0 2026-05-16 19:11:22 +00:00

Published v0.28.0 v0.28.0 2026-05-15 03:11:12 +00:00

Published v0.27.0 v0.27.0 2026-05-15 02:04:07 +00:00

Published v0.26.0 v0.26.0 2026-05-15 01:15:11 +00:00

Published v0.25.7 2026-05-14 23:08:40 +00:00

Published v0.25.8 2026-05-14 23:08:40 +00:00

Published v0.25.6 2026-05-14 22:43:18 +00:00

Published v0.25.5 2026-05-14 22:37:22 +00:00

Published v0.25.4 2026-05-14 22:32:46 +00:00

Published v0.25.3 2026-05-14 22:12:30 +00:00

Published v0.25.2 2026-05-14 21:57:03 +00:00

Published v0.25.1 2026-05-14 20:54:53 +00:00

Published v0.25.0 2026-05-14 20:35:09 +00:00

Published v0.24.0 2026-05-14 17:11:42 +00:00

Published v0.22.4 2026-05-11 03:53:40 +00:00

Published v0.22.3 2026-05-11 02:18:46 +00:00

Published v0.22.0 2026-05-09 05:58:58 +00:00

Published v0.22.1 2026-05-09 05:58:58 +00:00

Published v0.22.2 2026-05-09 05:58:58 +00:00

Published v0.21.8 2026-05-09 01:19:00 +00:00

Published v0.21.7 2026-05-09 01:01:22 +00:00

Published v0.21.6 2026-05-09 00:46:24 +00:00

Published v0.21.5 2026-05-09 00:05:03 +00:00

Published v0.21.4 2026-05-08 22:26:54 +00:00

Published v0.21.3 2026-05-08 21:39:49 +00:00

Published v0.21.2 2026-05-08 21:06:14 +00:00

Published v0.21.1 2026-05-08 19:56:32 +00:00

Published v0.21.0 2026-05-08 17:39:15 +00:00

Published v0.20.0 2026-05-08 01:58:51 +00:00

Published v0.19.0 2026-05-07 03:06:27 +00:00

Published v0.18.0 2026-05-07 00:20:23 +00:00

Published v0.17.0 2026-05-06 04:11:11 +00:00

Published v0.16.0 2026-05-06 00:52:08 +00:00

Published v0.15.0 2026-05-05 23:07:15 +00:00

Published v0.14.0 2026-05-05 19:44:03 +00:00

Published v0.13.0 2026-05-02 20:43:38 +00:00

Published v0.12.0 2026-05-02 03:09:09 +00:00

Published v0.11.0 2026-05-02 00:42:21 +00:00

Published v0.10.0 2026-04-29 03:35:41 +00:00

Published v0.9.0 v0.9.0 — Playability improvements 2026-04-28 02:38:58 +00:00

85 Pull requests merged by 1 user

Merged #189 feat(engine): Phase M — sync transparency + local data backup 2026-07-17 01:11:26 +00:00

Merged #188 refactor(engine): ambiguity gate covers the full cluster — batches 1-3 2026-07-17 00:48:15 +00:00

Merged #173 feat(engine): surface upstream move-type counters and replay seek 2026-07-16 23:53:11 +00:00

Merged #187 feat(engine): glass bar accessibility + drag duck-away 2026-07-15 22:23:25 +00:00

Merged #186 feat(engine): floating liquid-glass touch tab bar 2026-07-15 21:59:21 +00:00

Merged #185 fix(engine): swallow game-mutating hotkeys during pointer drags 2026-07-14 18:49:18 +00:00

Merged #184 polish(engine): standard empty/loading/error states (Phase L) 2026-07-14 03:08:55 +00:00

Merged #183 feat(engine): hold-/ hotkey cheat sheet + unified binding table (Phase J) 2026-07-14 02:04:07 +00:00

Merged #182 feat(engine): UI scale setting — 90/100/115/130% (Phase K) 2026-07-14 01:45:02 +00:00

Merged #181 feat(engine): contextual one-time tips — stall hint + radial teach (Phase I complete) 2026-07-14 01:43:51 +00:00

Merged #180 feat(engine): one-shot What's-new card after updates (Phase I) 2026-07-14 01:43:47 +00:00

Merged #179 feat(engine): theme-store preview thumbnails (Phase H part 2) 2026-07-14 00:46:46 +00:00

Merged #178 polish(engine): Phase H part 1 — unified toast stack, onboarding fixes 2026-07-14 00:14:04 +00:00

Merged #177 feat(engine): Phase F touch action bar — thumb-reach Undo/Draw/Hint + hold-to-repeat undo 2026-07-13 23:22:15 +00:00

Merged #176 ci(test): host-persistent target dir; fast fmt gate; drop dead rust-cache 2026-07-13 22:14:40 +00:00

Merged #175 feat(engine): Phase B home hierarchy — Continue card, hero New Game, deal-options disclosure 2026-07-13 20:55:38 +00:00

Merged #174 test(e2e): read v4 recording.instructions in cycle regression gate 2026-07-10 21:56:13 +00:00

Merged #172 test(e2e): update replay payload specs to schema v4 2026-07-10 21:01:28 +00:00

Merged #171 fix(core): save files store the deal via upstream serializers (schema v6) 2026-07-10 18:12:28 +00:00

Merged #170 fix(replay): store the deal via upstream card_game serializers (schema v4) 2026-07-10 16:56:33 +00:00

Merged #169 chore: delete dead code approved from the PR #166 sweep 2026-07-09 23:46:47 +00:00

Merged #167 fix(engine): double-click moves exactly the clicked run (#158) 2026-07-09 21:58:16 +00:00

Merged #168 ci(web): build wasm in the deploy pipeline instead of committing it (#156) 2026-07-09 21:57:57 +00:00

Merged #166 fix(engine): restore 60 fps Android card animations + dead-code sweep 2026-07-09 18:51:07 +00:00

Merged #162 refactor(core): align Spider with upstream card_game idioms 2026-07-09 05:26:50 +00:00

Merged #165 feat(engine): group HUD menu into Play/You/Community/System + Esc dismissal audit 2026-07-09 05:10:03 +00:00

Merged #164 feat(engine): win-summary action hierarchy — Play Again, Watch, Share 2026-07-09 05:09:36 +00:00

Merged #161 feat(engine): You hub — Profile/Stats/Achievements/Replays in one tabbed modal (Phase E) 2026-07-09 05:02:08 +00:00

Merged #160 feat(engine): tabbed Settings panel — Phase A of the menu redesign 2026-07-09 04:59:12 +00:00

Merged #159 feat: Show solution — winning_line core API + auto-playback (card_game bucket 4) 2026-07-08 01:08:58 +00:00

Merged #157 feat(core): Spider rules as a second card_game::Game implementation 2026-07-07 23:40:44 +00:00

Merged #155 fix(engine): force full board repaint when the decor-view poller fires (#130) 2026-07-07 23:14:12 +00:00

Merged #154 feat: in-game theme store — server catalog + verified downloads + install UI 2026-07-07 20:23:53 +00:00

Merged #153 fix: July 7 code-review remediation (M1–M3, L1–L3) 2026-07-07 20:16:20 +00:00

Merged #152 fix(engine): poll decor-view size to catch fold resizes winit misses (#130) 2026-07-07 18:12:57 +00:00

Merged #151 docs(changelog): cut v0.42.0 section 2026-07-07 04:37:30 +00:00

Merged #150 docs(changelog): record the July 6 evening arc 2026-07-07 04:14:51 +00:00

Merged #149 refactor(engine): ambiguity burn-down batch 4 — ZERO ambiguities, gate enforced 2026-07-07 04:14:00 +00:00

Merged #148 refactor(engine): ambiguity burn-down batch 3 — board paint chain (171 → 47) 2026-07-07 03:57:21 +00:00

Merged #147 refactor(engine): ambiguity burn-down batch 2 — SettingsResource cleared (198 → 171) 2026-07-07 03:48:11 +00:00

Merged #146 refactor(engine): first ambiguity burn-down batch — 302 → 198 pairs 2026-07-07 03:37:53 +00:00

Merged #145 test(engine): ratchet on Bevy system-order ambiguities 2026-07-07 03:22:29 +00:00

Merged #144 fix(server): login timing pad, 409 on register race, avatar magic-byte check 2026-07-07 03:15:04 +00:00

Merged #138 fix(engine): bounded blocking sync push on exit 2026-07-07 03:05:17 +00:00

Merged #137 refactor(core,engine,wasm): canonical FOUNDATIONS/TABLEAUS consts; adopt upstream SUITS/RANKS 2026-07-07 03:05:11 +00:00

Merged #136 fix(server): transactional sync push; single-use refresh rotation 2026-07-07 03:04:41 +00:00

Merged #135 ci: add workspace clippy + test gate workflow 2026-07-06 23:29:11 +00:00

Merged #134 perf(web): size-focused wasm-release profile for the canvas build (36.2 → 23.2 MB) 2026-07-06 22:44:33 +00:00

Merged #133 docs(architecture): bring source-of-truth docs to post-migration reality 2026-07-06 22:26:18 +00:00

Merged #132 docs: add v0.41.1 changelog section and refresh session handoff 2026-07-06 22:19:37 +00:00

Merged #131 fix(engine): resize pile-marker outline and watermark children on relayout 2026-07-06 21:28:23 +00:00

Merged #129 refactor(engine): split card_plugin runtime code into submodules 2026-07-06 21:01:25 +00:00

Merged #128 refactor(engine): split hud_plugin runtime code into submodules 2026-07-06 20:54:18 +00:00

Merged #127 refactor(engine): split settings_plugin runtime code into submodules 2026-07-06 20:46:10 +00:00

Merged #126 docs(changelog): cut v0.41.0 section 2026-07-06 20:27:44 +00:00

Merged #125 refactor(engine): move hud/settings/game/input plugin tests into tests.rs files 2026-07-06 20:20:11 +00:00

Merged #124 refactor(engine): move card_plugin tests into card_plugin/tests.rs 2026-07-06 20:16:55 +00:00

Merged #123 chore(scripts): add Gitea deploy watcher 2026-07-06 20:10:34 +00:00

Merged #122 docs(core): record unlimited stock recycling as an intentional rules decision 2026-07-06 20:10:01 +00:00

Merged #121 fix(engine): re-poll safe-area insets after app resume 2026-07-06 19:52:59 +00:00

Merged #115 fix(engine): raise dynamic tableau fan cap to fill tall viewports 2026-06-26 21:15:54 +00:00

Merged #114 docs(changelog): note foldable tableau fill and card-move jank fixes 2026-06-26 20:12:48 +00:00

Merged #113 fix(engine): fill tableau fan to viewport on all aspect ratios 2026-06-26 20:11:34 +00:00

Merged #112 perf(engine): rebuild card children only on appearance change 2026-06-26 19:03:19 +00:00

Merged #111 fix(android): sign release APK v2+v3 only (drop invalid v1 JAR signature) 2026-06-25 18:16:58 +00:00

Merged #110 docs(handoff): mark physical-device smoke test as the only v0.40.0 item left 2026-06-25 17:48:31 +00:00

Merged #109 docs(handoff): record v0.40.0 release 2026-06-25 17:46:06 +00:00

Merged #108 docs(android): update NDK reference to 30.0.14904198 2026-06-25 17:37:04 +00:00

Merged #107 docs(changelog): note Draw-Three waste fan hit-test fix 2026-06-25 17:13:52 +00:00

Merged #106 fix(engine): share Draw-Three waste fan step between renderer and hit-test 2026-06-25 17:11:27 +00:00

Merged #105 test(engine): regression tests for waste-card draggability 2026-06-25 16:58:15 +00:00

Merged #104 fix(engine): clicking the waste card no longer draws from stock 2026-06-24 17:31:31 +00:00

Merged #103 fix(e2e): cycle gate resets games in place (no 240 page reloads) 2026-06-24 17:07:47 +00:00

Merged #102 fix(server): scope no-cache to HTML pages (fix web-e2e cycle gate) 2026-06-24 16:46:36 +00:00

Merged #101 fix(web): use adapter limits so /play renders at native res (no 2048 cap) 2026-06-24 16:20:08 +00:00

Merged #100 fix(web): cap canvas via Window resize_constraints (real surface fix) 2026-06-24 01:59:37 +00:00

Merged #99 fix(server): Cache-Control no-cache for web assets (stop stale builds) 2026-06-24 01:45:09 +00:00

Merged #98 fix(web): cap /play canvas at the real 2048 wgpu limit (corrects #97) 2026-06-24 01:14:49 +00:00

Merged #97 fix(web): clamp /play canvas to GPU MAX_TEXTURE_SIZE (wgpu 2048 panic) 2026-06-24 00:45:30 +00:00

Merged #96 fix(web): classic timer ran at 2x (idempotent startTimer) 2026-06-24 00:18:53 +00:00

Merged #95 fix(web): CI-owned wasm artifacts + e2e harness fixes 2026-06-23 17:01:04 +00:00

Merged #94 ci(web-e2e): prebuild server so Playwright webServer stops timing out 2026-06-22 19:11:23 +00:00

Merged #93 ci(web): add precise wasm-freshness gate; drop flawed drift heuristic 2026-06-22 19:03:50 +00:00

Merged #92 fix(web): regenerate stale WASM artifacts against current master 2026-06-22 18:56:32 +00:00

Merged #88 refactor(core): card_game redundancy cleanup + derive scoring from upstream stats 2026-06-22 18:44:38 +00:00

97 Issues closed from 2 users

Closed #158 Only Consider Complete Stack in Double-Click Move 2026-07-09 21:58:16 +00:00

Closed #156 Deploy Wasm in CI 2026-07-09 21:57:57 +00:00

Closed #130 fix(engine): tableau clipped off-screen after fold cycle — layout computed for stale window width 2026-07-07 18:12:57 +00:00

Closed #143 test(engine): enable Bevy system-order ambiguity detection in a headless test 2026-07-07 04:14:00 +00:00

Closed #142 fix(server): delete analytics_events rows on account deletion 2026-07-07 03:15:20 +00:00

Closed #139 fix(server): login timing oracle — verify a dummy hash for unknown usernames 2026-07-07 03:15:04 +00:00

Closed #140 fix(server): map unique-violation on register to 409 UsernameTaken 2026-07-07 03:15:04 +00:00

Closed #141 fix(server): sniff avatar magic bytes instead of trusting Content-Type 2026-07-07 03:15:04 +00:00

Closed #118 refactor(engine): split oversized plugin modules (card_plugin 4.1k lines, hud/settings 3.5k+) 2026-07-06 21:01:25 +00:00

Closed #120 chore(scripts): cratemap.go should distinguish dev-dependencies from runtime deps 2026-07-06 20:12:21 +00:00

Closed #119 chore(scripts): commit or remove untracked watch_deploy.sh 2026-07-06 20:10:34 +00:00

Closed #117 feat(core): decide and enforce Draw-1 stock recycle limit (or document unlimited as intentional) 2026-07-06 20:10:01 +00:00

Closed #116 fix(engine): safe-area insets never re-polled after app resume (stale on fold/unfold) 2026-07-06 19:52:59 +00:00

Closed #91 Forbid unsafe code 2026-06-22 18:40:26 +00:00

Closed #90 Add some pedantic lints for fun 2026-06-12 20:07:29 +00:00

Closed #89 Remove Saved* serde mirror types (migrate ReplayMove to upstream klondike serde) 2026-06-12 19:45:18 +00:00

Closed #85 Remove TestPileState 2026-06-12 02:50:39 +00:00

Closed #82 Remove DrawMode 2026-06-12 02:36:06 +00:00

Closed #83 Remove card.rs 2026-06-12 02:35:16 +00:00

Closed #87 Remove counts from GameState 2026-06-11 17:37:20 +00:00

Closed #84 Remove external undo tracking 2026-06-11 17:37:19 +00:00

Closed #86 Remove score_history from GameState 2026-06-11 17:37:19 +00:00

Closed #80 Auto-complete triggers before player can finish playing from stock 2026-05-30 01:01:37 +00:00

Closed #81 Right-click auto-move plays no shake animation when no legal move exists 2026-05-30 01:01:37 +00:00

Closed #79 Audit animation and timer systems for reactive render compatibility 2026-05-29 20:55:17 +00:00

Closed #78 Switch focused render mode to reactive (render on demand) to save battery 2026-05-29 20:55:07 +00:00

Closed #77 Leaderboard panel missing modal scrim guard 2026-05-28 22:53:34 +00:00

Closed #75 Stats panel can open on top of another modal (missing scrim guard) 2026-05-28 22:19:44 +00:00

Closed #73 bug(server): sync push always rejected — user_id nil placeholder fails mismatch check 2026-05-28 21:42:21 +00:00

Closed #74 bug(server): replay upload uses client-supplied recorded_at for leaderboard — allows timestamp spoofing 2026-05-28 21:42:20 +00:00

Closed #71 bug(engine): auto-complete does not block player drag/tap input 2026-05-28 21:25:32 +00:00

Closed #72 bug(challenge): silent no-op when all challenges are completed 2026-05-28 21:25:31 +00:00

Closed #70 Add selectable touch input mode (one-tap auto-move vs. tap-to-select) 2026-05-28 21:05:02 +00:00

Closed #56 bug(achievements): XP granted before persistence confirmed — reward lost on crash 2026-05-28 20:26:37 +00:00

Closed #60 bug(daily-challenge): stale date cache when app runs past midnight 2026-05-28 20:26:37 +00:00

Closed #61 bug(server): leaderboard opt-in check is not atomic — TOCTOU race condition 2026-05-28 20:26:37 +00:00

Closed #62 bug(server): missing input validation on replay header fields 2026-05-28 20:26:37 +00:00

Closed #66 bug(android): safe area inset arithmetic has no bounds check — UI can shift off-screen 2026-05-28 20:26:37 +00:00

Closed #68 perf(analytics): per-event HTTP flush causes excessive network requests — add batching 2026-05-28 20:26:37 +00:00

Closed #52 fix(android): replace forbidden Unicode U+2500 (─) in win_summary_plugin.rs 2026-05-28 05:20:53 +00:00

Closed #53 fix(android): replace forbidden Unicode U+258C (▌) cursor glyph in splash_plugin.rs 2026-05-28 05:20:53 +00:00

Closed #58 bug(assets): assert!() on bundled font parse in svg_loader.rs — startup crash risk 2026-05-28 05:20:53 +00:00

Closed #59 refactor(engine): deduplicate TABLEAU_FAN_FRAC constant shared between layout.rs and card_plugin.rs 2026-05-28 05:20:53 +00:00

Closed #63 bug(theme): broken theme manifests are silently skipped — no log warning 2026-05-28 05:20:53 +00:00

Closed #64 bug(settings): default theme ID 'classic' contradicts migration that renames it to 'dark' 2026-05-28 05:20:53 +00:00

Closed #65 bug(wasm): replay move failures are silently ignored in solitaire_wasm 2026-05-28 05:03:46 +00:00

Closed #69 bug(stats): win events can be double-counted if multiple WinEvent fire in the same frame 2026-05-28 05:03:46 +00:00

Closed #57 bug(ui): profile panel can stack over other modals — missing ModalScrim guard 2026-05-28 02:21:50 +00:00

Closed #67 refactor(ui): modal card has hardcoded pixel dimensions — breaks on small screens 2026-05-28 02:21:50 +00:00

Closed #54 bug(time-attack): timer does not pause when Home or Win overlay is open 2026-05-28 02:13:42 +00:00

Closed #55 bug(time-attack): timer can underflow to negative values 2026-05-28 02:13:42 +00:00

Closed #51 Final cleanup of module structure and dead code 2026-05-28 01:08:13 +00:00

Closed #50 Ensure WASM build compiles cleanly 2026-05-28 01:04:30 +00:00

Closed #49 Eliminate platform-specific code from gameplay 2026-05-28 01:01:51 +00:00

Closed #48 Replace direct storage with platform abstraction 2026-05-28 00:30:45 +00:00

Closed #45 Move safe gameplay systems into CoreGamePlugin 2026-05-28 00:10:47 +00:00

Closed #46 Fully migrate gameplay systems into CoreGamePlugin 2026-05-28 00:10:47 +00:00

Closed #47 Add platform module structure 2026-05-27 23:59:32 +00:00

Closed #42 Create shared build_app() function for all platforms 2026-05-27 23:41:46 +00:00

Closed #44 Add CoreGamePlugin without moving systems 2026-05-27 23:41:46 +00:00

Closed #43 Reduce platform entrypoints to minimal wrappers 2026-05-27 23:34:41 +00:00

Closed #35 Android cards draw overlapped while dragging 2026-05-27 23:29:10 +00:00

Closed #34 Android bevy engine WSI damage reporting 2026-05-27 20:48:48 +00:00

Closed #36 Bug: Cannot move cards from foundation back to tableau 2026-05-27 20:48:48 +00:00

Closed #31 [server] .tmp avatar file leaks on disk if fs::rename fails 2026-05-19 20:20:23 +00:00

Closed #32 [server] ReplayHeader.seed is i64 but client Replay.seed is u64 — high-bit seeds rejected 2026-05-19 20:20:23 +00:00

Closed #33 expect() in Startup system and TokioRuntimeResource::default() violate no-panic rule 2026-05-19 20:20:23 +00:00

Closed #24 WinSummaryOverlay bypasses spawn_modal / ModalScrim — invisible to all modal guards 2026-05-19 20:20:22 +00:00

Closed #25 AnimationChain skips one frame between each step due to deferred command flush 2026-05-19 20:20:22 +00:00

Closed #26 drop_overlay_rect panics via HashMap index operator on unknown PileType 2026-05-19 20:20:22 +00:00

Closed #27 play_by_seed fires NewGameRequestEvent { confirmed: false } — forces unwanted confirm dialog 2026-05-19 20:20:22 +00:00

Closed #28 SettleAnim and FoundationFlourish both write Transform.scale on king card — undefined visual result 2026-05-19 20:20:22 +00:00

Closed #29 evaluate_on_win uses .last() — drops all but the final GameWonEvent when multiple fire in one frame 2026-05-19 20:20:22 +00:00

Closed #30 Multiple modals can stack — sync_setup, achievements, and leaderboard guard by plugin marker not ModalScrim 2026-05-19 20:20:22 +00:00

Closed #17 Time attack countdown continues running while Win Summary overlay is displayed 2026-05-19 20:20:21 +00:00

Closed #18 [Android] U+25BE Geometric Shapes glyph in HUD labels — renders as missing-glyph rectangle 2026-05-19 20:20:21 +00:00

Closed #19 Theme A→B→A switch leaves stale card-image handles — cards display wrong theme 2026-05-19 20:20:21 +00:00

Closed #20 SyncAuthError and SyncBusyOverlay on same entity — auth error text is always invisible 2026-05-19 20:20:21 +00:00

Closed #21 Stats double-counted on game forfeit — record_abandoned() fires twice 2026-05-19 20:20:21 +00:00

Closed #22 check_win only counts 13 cards per foundation — corrupt save permanently locks game 2026-05-19 20:20:21 +00:00

Closed #23 [server] avg_time_seconds merge produces wrong value when losing side has more wins 2026-05-19 20:20:21 +00:00

Closed #12 Undo penalty deducted from pre-move score instead of post-move score 2026-05-19 20:20:20 +00:00

Closed #13 take_from_foundation defaults to true but is documented as "Off by default" 2026-05-19 20:20:20 +00:00

Closed #14 [server] Replay leaderboard update is dead code — case mismatch "classic" vs "Classic" 2026-05-19 20:20:20 +00:00

Closed #15 Auto-complete deactivates mid-sequence when is_auto_completable is transiently false 2026-05-19 20:20:20 +00:00

Closed #16 Replay backward step decrements cursor before undo is applied — cursor/state mismatch and rapid-click divergence 2026-05-19 20:20:20 +00:00

Closed #8 [critical] Space/D keys fire DrawRequestEvent during replay playback 2026-05-19 20:20:19 +00:00

Closed #9 [critical] toggle_help_screen spawns second ModalScrim while another modal is open 2026-05-19 20:20:19 +00:00

Closed #10 [critical] toggle_settings_screen spawns second ModalScrim while another modal is open 2026-05-19 20:20:19 +00:00

Closed #11 [critical] Sync pull completion silently overwrites wins that occurred during the fetch 2026-05-19 20:20:19 +00:00

Closed #5 leaderboard_plugin opt-in/opt-out tests are flaky under parallel execution 2026-05-19 18:32:11 +00:00

Closed #6 [Android] resize_android_corner_labels never refreshes Text2d content — stale rank/suit on resize 2026-05-19 18:32:11 +00:00

Closed #7 Cards stuck at scatter positions when new game is started during win cascade 2026-05-19 18:32:11 +00:00

Closed #4 Timer does not pause on auto-win 2026-05-19 01:59:56 +00:00

Closed #3 Cards Cannot Be Played From Suit Piles 2026-05-15 00:57:27 +00:00

Closed #2 Game Over False Positive 2026-05-12 03:05:48 +00:00

Closed #1 Previously Drawn Card Disappears on Draw 2026-05-12 03:05:40 +00:00

98 Issues created by 1 user

Opened #1 Previously Drawn Card Disappears on Draw 2026-05-05 17:58:08 +00:00

Opened #2 Game Over False Positive 2026-05-05 17:59:49 +00:00

Opened #3 Cards Cannot Be Played From Suit Piles 2026-05-14 22:39:17 +00:00

Opened #4 Timer does not pause on auto-win 2026-05-19 00:18:45 +00:00

Opened #5 leaderboard_plugin opt-in/opt-out tests are flaky under parallel execution 2026-05-19 18:20:48 +00:00

Opened #6 [Android] resize_android_corner_labels never refreshes Text2d content — stale rank/suit on resize 2026-05-19 18:21:11 +00:00

Opened #7 Cards stuck at scatter positions when new game is started during win cascade 2026-05-19 18:21:43 +00:00

Opened #8 [critical] Space/D keys fire DrawRequestEvent during replay playback 2026-05-19 18:42:00 +00:00

Opened #9 [critical] toggle_help_screen spawns second ModalScrim while another modal is open 2026-05-19 18:42:00 +00:00

Opened #10 [critical] toggle_settings_screen spawns second ModalScrim while another modal is open 2026-05-19 18:42:00 +00:00

Opened #11 [critical] Sync pull completion silently overwrites wins that occurred during the fetch 2026-05-19 18:42:00 +00:00

Opened #12 Undo penalty deducted from pre-move score instead of post-move score 2026-05-19 18:43:04 +00:00

Opened #13 take_from_foundation defaults to true but is documented as "Off by default" 2026-05-19 18:43:04 +00:00

Opened #14 [server] Replay leaderboard update is dead code — case mismatch "classic" vs "Classic" 2026-05-19 18:43:04 +00:00

Opened #15 Auto-complete deactivates mid-sequence when is_auto_completable is transiently false 2026-05-19 18:43:04 +00:00

Opened #16 Replay backward step decrements cursor before undo is applied — cursor/state mismatch and rapid-click divergence 2026-05-19 18:43:04 +00:00

Opened #17 Time attack countdown continues running while Win Summary overlay is displayed 2026-05-19 18:43:04 +00:00

Opened #18 [Android] U+25BE Geometric Shapes glyph in HUD labels — renders as missing-glyph rectangle 2026-05-19 18:43:04 +00:00

Opened #19 Theme A→B→A switch leaves stale card-image handles — cards display wrong theme 2026-05-19 18:43:05 +00:00

Opened #20 SyncAuthError and SyncBusyOverlay on same entity — auth error text is always invisible 2026-05-19 18:43:05 +00:00

Opened #21 Stats double-counted on game forfeit — record_abandoned() fires twice 2026-05-19 18:43:05 +00:00

Opened #22 check_win only counts 13 cards per foundation — corrupt save permanently locks game 2026-05-19 18:44:34 +00:00

Opened #23 [server] avg_time_seconds merge produces wrong value when losing side has more wins 2026-05-19 18:44:34 +00:00

Opened #24 WinSummaryOverlay bypasses spawn_modal / ModalScrim — invisible to all modal guards 2026-05-19 18:44:34 +00:00

Opened #25 AnimationChain skips one frame between each step due to deferred command flush 2026-05-19 18:44:34 +00:00

Opened #26 drop_overlay_rect panics via HashMap index operator on unknown PileType 2026-05-19 18:44:35 +00:00

Opened #27 play_by_seed fires NewGameRequestEvent { confirmed: false } — forces unwanted confirm dialog 2026-05-19 18:44:35 +00:00

Opened #28 SettleAnim and FoundationFlourish both write Transform.scale on king card — undefined visual result 2026-05-19 18:44:35 +00:00

Opened #29 evaluate_on_win uses .last() — drops all but the final GameWonEvent when multiple fire in one frame 2026-05-19 18:44:35 +00:00

Opened #30 Multiple modals can stack — sync_setup, achievements, and leaderboard guard by plugin marker not ModalScrim 2026-05-19 18:44:35 +00:00

Opened #31 [server] .tmp avatar file leaks on disk if fs::rename fails 2026-05-19 18:44:35 +00:00

Opened #32 [server] ReplayHeader.seed is i64 but client Replay.seed is u64 — high-bit seeds rejected 2026-05-19 18:44:36 +00:00

Opened #33 expect() in Startup system and TokioRuntimeResource::default() violate no-panic rule 2026-05-19 18:44:36 +00:00

Opened #34 Android bevy engine WSI damage reporting 2026-05-22 03:35:31 +00:00

Opened #35 Android cards draw overlapped while dragging 2026-05-22 03:37:22 +00:00

Opened #36 Bug: Cannot move cards from foundation back to tableau 2026-05-27 05:09:34 +00:00

Opened #42 Create shared build_app() function for all platforms 2026-05-27 21:26:49 +00:00

Opened #43 Reduce platform entrypoints to minimal wrappers 2026-05-27 21:27:32 +00:00

Opened #44 Add CoreGamePlugin without moving systems 2026-05-27 21:27:39 +00:00

Opened #45 Move safe gameplay systems into CoreGamePlugin 2026-05-27 21:27:47 +00:00

Opened #46 Fully migrate gameplay systems into CoreGamePlugin 2026-05-27 21:27:57 +00:00

Opened #47 Add platform module structure 2026-05-27 21:28:03 +00:00

Opened #48 Replace direct storage with platform abstraction 2026-05-27 21:28:11 +00:00

Opened #49 Eliminate platform-specific code from gameplay 2026-05-27 21:28:18 +00:00

Opened #50 Ensure WASM build compiles cleanly 2026-05-27 21:28:25 +00:00

Opened #51 Final cleanup of module structure and dead code 2026-05-27 21:28:33 +00:00

Opened #52 fix(android): replace forbidden Unicode U+2500 (─) in win_summary_plugin.rs 2026-05-28 01:48:14 +00:00

Opened #53 fix(android): replace forbidden Unicode U+258C (▌) cursor glyph in splash_plugin.rs 2026-05-28 01:48:14 +00:00

Opened #54 bug(time-attack): timer does not pause when Home or Win overlay is open 2026-05-28 01:48:59 +00:00

Opened #55 bug(time-attack): timer can underflow to negative values 2026-05-28 01:48:59 +00:00

Opened #56 bug(achievements): XP granted before persistence confirmed — reward lost on crash 2026-05-28 01:48:59 +00:00

Opened #57 bug(ui): profile panel can stack over other modals — missing ModalScrim guard 2026-05-28 01:50:32 +00:00

Opened #58 bug(assets): assert!() on bundled font parse in svg_loader.rs — startup crash risk 2026-05-28 01:50:33 +00:00

Opened #59 refactor(engine): deduplicate TABLEAU_FAN_FRAC constant shared between layout.rs and card_plugin.rs 2026-05-28 01:50:33 +00:00

Opened #60 bug(daily-challenge): stale date cache when app runs past midnight 2026-05-28 01:51:03 +00:00

Opened #61 bug(server): leaderboard opt-in check is not atomic — TOCTOU race condition 2026-05-28 01:51:03 +00:00

Opened #62 bug(server): missing input validation on replay header fields 2026-05-28 01:51:03 +00:00

Opened #63 bug(theme): broken theme manifests are silently skipped — no log warning 2026-05-28 01:51:33 +00:00

Opened #64 bug(settings): default theme ID 'classic' contradicts migration that renames it to 'dark' 2026-05-28 01:51:33 +00:00

Opened #65 bug(wasm): replay move failures are silently ignored in solitaire_wasm 2026-05-28 01:51:34 +00:00

Opened #66 bug(android): safe area inset arithmetic has no bounds check — UI can shift off-screen 2026-05-28 01:52:11 +00:00

Opened #67 refactor(ui): modal card has hardcoded pixel dimensions — breaks on small screens 2026-05-28 01:52:11 +00:00

Opened #68 perf(analytics): per-event HTTP flush causes excessive network requests — add batching 2026-05-28 01:52:11 +00:00

Opened #69 bug(stats): win events can be double-counted if multiple WinEvent fire in the same frame 2026-05-28 01:52:11 +00:00

Opened #70 Add selectable touch input mode (one-tap auto-move vs. tap-to-select) 2026-05-28 19:46:20 +00:00

Opened #71 bug(engine): auto-complete does not block player drag/tap input 2026-05-28 21:19:06 +00:00

Opened #72 bug(challenge): silent no-op when all challenges are completed 2026-05-28 21:19:07 +00:00

Opened #73 bug(server): sync push always rejected — user_id nil placeholder fails mismatch check 2026-05-28 21:36:21 +00:00

Opened #74 bug(server): replay upload uses client-supplied recorded_at for leaderboard — allows timestamp spoofing 2026-05-28 21:36:22 +00:00

Opened #75 Stats panel can open on top of another modal (missing scrim guard) 2026-05-28 22:12:07 +00:00

Opened #77 Leaderboard panel missing modal scrim guard 2026-05-28 22:52:35 +00:00

Opened #78 Switch focused render mode to reactive (render on demand) to save battery 2026-05-29 20:11:42 +00:00

Opened #79 Audit animation and timer systems for reactive render compatibility 2026-05-29 20:11:57 +00:00

Opened #80 Auto-complete triggers before player can finish playing from stock 2026-05-29 22:50:20 +00:00

Opened #81 Right-click auto-move plays no shake animation when no legal move exists 2026-05-29 22:50:38 +00:00

Opened #82 Remove DrawMode 2026-06-11 03:07:49 +00:00

Opened #83 Remove card.rs 2026-06-11 03:09:31 +00:00

Opened #84 Remove external undo tracking 2026-06-11 03:12:48 +00:00

Opened #85 Remove TestPileState 2026-06-11 03:14:13 +00:00

Opened #86 Remove score_history from GameState 2026-06-11 03:15:41 +00:00

Opened #87 Remove counts from GameState 2026-06-11 03:17:14 +00:00

Opened #89 Remove Saved* serde mirror types (migrate ReplayMove to upstream klondike serde) 2026-06-11 22:31:30 +00:00

Opened #90 Add some pedantic lints for fun 2026-06-12 03:11:13 +00:00

Opened #91 Forbid unsafe code 2026-06-13 06:21:14 +00:00

Opened #116 fix(engine): safe-area insets never re-polled after app resume (stale on fold/unfold) 2026-07-06 19:18:48 +00:00

Opened #117 feat(core): decide and enforce Draw-1 stock recycle limit (or document unlimited as intentional) 2026-07-06 19:18:59 +00:00

Opened #118 refactor(engine): split oversized plugin modules (card_plugin 4.1k lines, hud/settings 3.5k+) 2026-07-06 19:19:09 +00:00

Opened #119 chore(scripts): commit or remove untracked watch_deploy.sh 2026-07-06 19:19:19 +00:00

Opened #120 chore(scripts): cratemap.go should distinguish dev-dependencies from runtime deps 2026-07-06 19:19:29 +00:00

Opened #130 fix(engine): tableau clipped off-screen after fold cycle — layout computed for stale window width 2026-07-06 21:24:41 +00:00

Opened #139 fix(server): login timing oracle — verify a dummy hash for unknown usernames 2026-07-07 03:06:04 +00:00

Opened #140 fix(server): map unique-violation on register to 409 UsernameTaken 2026-07-07 03:06:04 +00:00

Opened #141 fix(server): sniff avatar magic bytes instead of trusting Content-Type 2026-07-07 03:06:04 +00:00

Opened #142 fix(server): delete analytics_events rows on account deletion 2026-07-07 03:06:04 +00:00

Opened #143 test(engine): enable Bevy system-order ambiguity detection in a headless test 2026-07-07 03:06:05 +00:00

Opened #156 Deploy Wasm in CI 2026-07-07 23:17:10 +00:00

Opened #158 Only Consider Complete Stack in Double-Click Move 2026-07-07 23:29:11 +00:00

Opened #190 cards in the wrong position on deal 2026-07-24 06:20:23 +00:00