2025-07-26 - 2026-07-26
Overview
83 Releases published by 1 user
Published
v0.49.0
v0.49.0
Published
v0.48.1
v0.48.1
Published
v0.48.0
v0.48.0
Published
v0.47.0
v0.47.0
Published
v0.46.0
v0.46.0
Published
v0.45.0
v0.45.0
Published
v0.44.0
v0.44.0
Published
v0.43.3
v0.43.3
Published
v0.43.2
v0.43.2
Published
v0.43.1
v0.43.1
Published
v0.43.0
v0.43.0
Published
v0.42.1
v0.42.1
Published
v0.42.0
v0.42.0
Published
v0.41.1
v0.41.1
Published
v0.41.0
v0.41.0
Published
v0.40.3
v0.40.3
Published
v0.40.2
v0.40.2
Published
v0.40.1
v0.40.1
Published
v0.40.0
v0.40.0
Published
v0.39.1
v0.39.1
Published
v0.39.0
v0.39.0
Published
v0.38.0
v0.38.0
Published
v0.37.0
v0.37.0
Published
v0.36.12
v0.36.12
Published
v0.36.11
v0.36.11
Published
v0.36.10
v0.36.10
Published
v0.36.9
v0.36.9
Published
v0.36.8
v0.36.8
Published
v0.36.7
v0.36.7
Published
v0.36.6
v0.36.6
Published
v0.36.5
v0.36.5
Published
v0.36.4
v0.36.4
Published
v0.36.3
v0.36.3
Published
v0.36.2
v0.36.2
Published
v0.36.1
v0.36.1
Published
v0.36.0
v0.36.0
Published
v0.35.1
v0.35.1
Published
v0.35.0
v0.35.0
Published
v0.34.0
v0.34.0
Published
v0.33.0
v0.33.0
Published
v0.32.0
v0.32.0
Published
v0.31.0
v0.31.0
Published
v0.30.0
v0.30.0
Published
v0.29.0
v0.29.0
Published
v0.28.0
v0.28.0
Published
v0.27.0
v0.27.0
Published
v0.26.0
v0.26.0
Published
v0.25.7
Published
v0.25.8
Published
v0.25.6
Published
v0.25.5
Published
v0.25.4
Published
v0.25.3
Published
v0.25.2
Published
v0.25.1
Published
v0.25.0
Published
v0.24.0
Published
v0.22.4
Published
v0.22.3
Published
v0.22.0
Published
v0.22.1
Published
v0.22.2
Published
v0.21.8
Published
v0.21.7
Published
v0.21.6
Published
v0.21.5
Published
v0.21.4
Published
v0.21.3
Published
v0.21.2
Published
v0.21.1
Published
v0.21.0
Published
v0.20.0
Published
v0.19.0
Published
v0.18.0
Published
v0.17.0
Published
v0.16.0
Published
v0.15.0
Published
v0.14.0
Published
v0.13.0
Published
v0.12.0
Published
v0.11.0
Published
v0.10.0
Published
v0.9.0
v0.9.0 — Playability improvements
85 Pull requests merged by 1 user
Merged
#189 feat(engine): Phase M — sync transparency + local data backup
Merged
#188 refactor(engine): ambiguity gate covers the full cluster — batches 1-3
Merged
#173 feat(engine): surface upstream move-type counters and replay seek
Merged
#187 feat(engine): glass bar accessibility + drag duck-away
Merged
#186 feat(engine): floating liquid-glass touch tab bar
Merged
#185 fix(engine): swallow game-mutating hotkeys during pointer drags
Merged
#184 polish(engine): standard empty/loading/error states (Phase L)
Merged
#183 feat(engine): hold-/ hotkey cheat sheet + unified binding table (Phase J)
Merged
#182 feat(engine): UI scale setting — 90/100/115/130% (Phase K)
Merged
#181 feat(engine): contextual one-time tips — stall hint + radial teach (Phase I complete)
Merged
#180 feat(engine): one-shot What's-new card after updates (Phase I)
Merged
#179 feat(engine): theme-store preview thumbnails (Phase H part 2)
Merged
#178 polish(engine): Phase H part 1 — unified toast stack, onboarding fixes
Merged
#177 feat(engine): Phase F touch action bar — thumb-reach Undo/Draw/Hint + hold-to-repeat undo
Merged
#176 ci(test): host-persistent target dir; fast fmt gate; drop dead rust-cache
Merged
#175 feat(engine): Phase B home hierarchy — Continue card, hero New Game, deal-options disclosure
Merged
#174 test(e2e): read v4 recording.instructions in cycle regression gate
Merged
#172 test(e2e): update replay payload specs to schema v4
Merged
#171 fix(core): save files store the deal via upstream serializers (schema v6)
Merged
#170 fix(replay): store the deal via upstream card_game serializers (schema v4)
Merged
#169 chore: delete dead code approved from the PR #166 sweep
Merged
#167 fix(engine): double-click moves exactly the clicked run (#158)
Merged
#168 ci(web): build wasm in the deploy pipeline instead of committing it (#156)
Merged
#166 fix(engine): restore 60 fps Android card animations + dead-code sweep
Merged
#162 refactor(core): align Spider with upstream card_game idioms
Merged
#165 feat(engine): group HUD menu into Play/You/Community/System + Esc dismissal audit
Merged
#164 feat(engine): win-summary action hierarchy — Play Again, Watch, Share
Merged
#161 feat(engine): You hub — Profile/Stats/Achievements/Replays in one tabbed modal (Phase E)
Merged
#160 feat(engine): tabbed Settings panel — Phase A of the menu redesign
Merged
#159 feat: Show solution — winning_line core API + auto-playback (card_game bucket 4)
Merged
#157 feat(core): Spider rules as a second card_game::Game implementation
Merged
#155 fix(engine): force full board repaint when the decor-view poller fires (#130)
Merged
#154 feat: in-game theme store — server catalog + verified downloads + install UI
Merged
#153 fix: July 7 code-review remediation (M1–M3, L1–L3)
Merged
#152 fix(engine): poll decor-view size to catch fold resizes winit misses (#130)
Merged
#151 docs(changelog): cut v0.42.0 section
Merged
#150 docs(changelog): record the July 6 evening arc
Merged
#149 refactor(engine): ambiguity burn-down batch 4 — ZERO ambiguities, gate enforced
Merged
#148 refactor(engine): ambiguity burn-down batch 3 — board paint chain (171 → 47)
Merged
#147 refactor(engine): ambiguity burn-down batch 2 — SettingsResource cleared (198 → 171)
Merged
#146 refactor(engine): first ambiguity burn-down batch — 302 → 198 pairs
Merged
#145 test(engine): ratchet on Bevy system-order ambiguities
Merged
#144 fix(server): login timing pad, 409 on register race, avatar magic-byte check
Merged
#138 fix(engine): bounded blocking sync push on exit
Merged
#137 refactor(core,engine,wasm): canonical FOUNDATIONS/TABLEAUS consts; adopt upstream SUITS/RANKS
Merged
#136 fix(server): transactional sync push; single-use refresh rotation
Merged
#135 ci: add workspace clippy + test gate workflow
Merged
#134 perf(web): size-focused wasm-release profile for the canvas build (36.2 → 23.2 MB)
Merged
#133 docs(architecture): bring source-of-truth docs to post-migration reality
Merged
#132 docs: add v0.41.1 changelog section and refresh session handoff
Merged
#131 fix(engine): resize pile-marker outline and watermark children on relayout
Merged
#129 refactor(engine): split card_plugin runtime code into submodules
Merged
#128 refactor(engine): split hud_plugin runtime code into submodules
Merged
#127 refactor(engine): split settings_plugin runtime code into submodules
Merged
#126 docs(changelog): cut v0.41.0 section
Merged
#125 refactor(engine): move hud/settings/game/input plugin tests into tests.rs files
Merged
#124 refactor(engine): move card_plugin tests into card_plugin/tests.rs
Merged
#123 chore(scripts): add Gitea deploy watcher
Merged
#122 docs(core): record unlimited stock recycling as an intentional rules decision
Merged
#121 fix(engine): re-poll safe-area insets after app resume
Merged
#115 fix(engine): raise dynamic tableau fan cap to fill tall viewports
Merged
#114 docs(changelog): note foldable tableau fill and card-move jank fixes
Merged
#113 fix(engine): fill tableau fan to viewport on all aspect ratios
Merged
#112 perf(engine): rebuild card children only on appearance change
Merged
#111 fix(android): sign release APK v2+v3 only (drop invalid v1 JAR signature)
Merged
#110 docs(handoff): mark physical-device smoke test as the only v0.40.0 item left
Merged
#109 docs(handoff): record v0.40.0 release
Merged
#108 docs(android): update NDK reference to 30.0.14904198
Merged
#107 docs(changelog): note Draw-Three waste fan hit-test fix
Merged
#106 fix(engine): share Draw-Three waste fan step between renderer and hit-test
Merged
#105 test(engine): regression tests for waste-card draggability
Merged
#104 fix(engine): clicking the waste card no longer draws from stock
Merged
#103 fix(e2e): cycle gate resets games in place (no 240 page reloads)
Merged
#102 fix(server): scope no-cache to HTML pages (fix web-e2e cycle gate)
Merged
#101 fix(web): use adapter limits so /play renders at native res (no 2048 cap)
Merged
#100 fix(web): cap canvas via Window resize_constraints (real surface fix)
Merged
#99 fix(server): Cache-Control no-cache for web assets (stop stale builds)
Merged
#98 fix(web): cap /play canvas at the real 2048 wgpu limit (corrects #97)
Merged
#97 fix(web): clamp /play canvas to GPU MAX_TEXTURE_SIZE (wgpu 2048 panic)
Merged
#96 fix(web): classic timer ran at 2x (idempotent startTimer)
Merged
#95 fix(web): CI-owned wasm artifacts + e2e harness fixes
Merged
#94 ci(web-e2e): prebuild server so Playwright webServer stops timing out
Merged
#93 ci(web): add precise wasm-freshness gate; drop flawed drift heuristic
Merged
#92 fix(web): regenerate stale WASM artifacts against current master
Merged
#88 refactor(core): card_game redundancy cleanup + derive scoring from upstream stats
97 Issues closed from 2 users
Closed
#158 Only Consider Complete Stack in Double-Click Move
Closed
#156 Deploy Wasm in CI
Closed
#130 fix(engine): tableau clipped off-screen after fold cycle — layout computed for stale window width
Closed
#143 test(engine): enable Bevy system-order ambiguity detection in a headless test
Closed
#142 fix(server): delete analytics_events rows on account deletion
Closed
#139 fix(server): login timing oracle — verify a dummy hash for unknown usernames
Closed
#140 fix(server): map unique-violation on register to 409 UsernameTaken
Closed
#141 fix(server): sniff avatar magic bytes instead of trusting Content-Type
Closed
#118 refactor(engine): split oversized plugin modules (card_plugin 4.1k lines, hud/settings 3.5k+)
Closed
#120 chore(scripts): cratemap.go should distinguish dev-dependencies from runtime deps
Closed
#119 chore(scripts): commit or remove untracked watch_deploy.sh
Closed
#117 feat(core): decide and enforce Draw-1 stock recycle limit (or document unlimited as intentional)
Closed
#116 fix(engine): safe-area insets never re-polled after app resume (stale on fold/unfold)
Closed
#91 Forbid unsafe code
Closed
#90 Add some pedantic lints for fun
Closed
#89 Remove Saved* serde mirror types (migrate ReplayMove to upstream klondike serde)
Closed
#85 Remove TestPileState
Closed
#82 Remove DrawMode
Closed
#83 Remove card.rs
Closed
#87 Remove counts from GameState
Closed
#84 Remove external undo tracking
Closed
#86 Remove score_history from GameState
Closed
#80 Auto-complete triggers before player can finish playing from stock
Closed
#81 Right-click auto-move plays no shake animation when no legal move exists
Closed
#79 Audit animation and timer systems for reactive render compatibility
Closed
#78 Switch focused render mode to reactive (render on demand) to save battery
Closed
#77 Leaderboard panel missing modal scrim guard
Closed
#75 Stats panel can open on top of another modal (missing scrim guard)
Closed
#73 bug(server): sync push always rejected — user_id nil placeholder fails mismatch check
Closed
#74 bug(server): replay upload uses client-supplied recorded_at for leaderboard — allows timestamp spoofing
Closed
#71 bug(engine): auto-complete does not block player drag/tap input
Closed
#72 bug(challenge): silent no-op when all challenges are completed
Closed
#70 Add selectable touch input mode (one-tap auto-move vs. tap-to-select)
Closed
#56 bug(achievements): XP granted before persistence confirmed — reward lost on crash
Closed
#60 bug(daily-challenge): stale date cache when app runs past midnight
Closed
#61 bug(server): leaderboard opt-in check is not atomic — TOCTOU race condition
Closed
#62 bug(server): missing input validation on replay header fields
Closed
#66 bug(android): safe area inset arithmetic has no bounds check — UI can shift off-screen
Closed
#68 perf(analytics): per-event HTTP flush causes excessive network requests — add batching
Closed
#52 fix(android): replace forbidden Unicode U+2500 (─) in win_summary_plugin.rs
Closed
#53 fix(android): replace forbidden Unicode U+258C (▌) cursor glyph in splash_plugin.rs
Closed
#58 bug(assets): assert!() on bundled font parse in svg_loader.rs — startup crash risk
Closed
#59 refactor(engine): deduplicate TABLEAU_FAN_FRAC constant shared between layout.rs and card_plugin.rs
Closed
#63 bug(theme): broken theme manifests are silently skipped — no log warning
Closed
#64 bug(settings): default theme ID 'classic' contradicts migration that renames it to 'dark'
Closed
#65 bug(wasm): replay move failures are silently ignored in solitaire_wasm
Closed
#69 bug(stats): win events can be double-counted if multiple WinEvent fire in the same frame
Closed
#57 bug(ui): profile panel can stack over other modals — missing ModalScrim guard
Closed
#67 refactor(ui): modal card has hardcoded pixel dimensions — breaks on small screens
Closed
#54 bug(time-attack): timer does not pause when Home or Win overlay is open
Closed
#55 bug(time-attack): timer can underflow to negative values
Closed
#51 Final cleanup of module structure and dead code
Closed
#50 Ensure WASM build compiles cleanly
Closed
#49 Eliminate platform-specific code from gameplay
Closed
#48 Replace direct storage with platform abstraction
Closed
#45 Move safe gameplay systems into CoreGamePlugin
Closed
#46 Fully migrate gameplay systems into CoreGamePlugin
Closed
#47 Add platform module structure
Closed
#42 Create shared build_app() function for all platforms
Closed
#44 Add CoreGamePlugin without moving systems
Closed
#43 Reduce platform entrypoints to minimal wrappers
Closed
#35 Android cards draw overlapped while dragging
Closed
#34 Android bevy engine WSI damage reporting
Closed
#36 Bug: Cannot move cards from foundation back to tableau
Closed
#31 [server] .tmp avatar file leaks on disk if fs::rename fails
Closed
#32 [server] ReplayHeader.seed is i64 but client Replay.seed is u64 — high-bit seeds rejected
Closed
#33 expect() in Startup system and TokioRuntimeResource::default() violate no-panic rule
Closed
#24 WinSummaryOverlay bypasses spawn_modal / ModalScrim — invisible to all modal guards
Closed
#25 AnimationChain skips one frame between each step due to deferred command flush
Closed
#26 drop_overlay_rect panics via HashMap index operator on unknown PileType
Closed
#27 play_by_seed fires NewGameRequestEvent { confirmed: false } — forces unwanted confirm dialog
Closed
#28 SettleAnim and FoundationFlourish both write Transform.scale on king card — undefined visual result
Closed
#29 evaluate_on_win uses .last() — drops all but the final GameWonEvent when multiple fire in one frame
Closed
#30 Multiple modals can stack — sync_setup, achievements, and leaderboard guard by plugin marker not ModalScrim
Closed
#17 Time attack countdown continues running while Win Summary overlay is displayed
Closed
#18 [Android] U+25BE Geometric Shapes glyph in HUD labels — renders as missing-glyph rectangle
Closed
#19 Theme A→B→A switch leaves stale card-image handles — cards display wrong theme
Closed
#20 SyncAuthError and SyncBusyOverlay on same entity — auth error text is always invisible
Closed
#21 Stats double-counted on game forfeit — record_abandoned() fires twice
Closed
#22 check_win only counts 13 cards per foundation — corrupt save permanently locks game
Closed
#23 [server] avg_time_seconds merge produces wrong value when losing side has more wins
Closed
#12 Undo penalty deducted from pre-move score instead of post-move score
Closed
#13 take_from_foundation defaults to true but is documented as "Off by default"
Closed
#14 [server] Replay leaderboard update is dead code — case mismatch "classic" vs "Classic"
Closed
#15 Auto-complete deactivates mid-sequence when is_auto_completable is transiently false
Closed
#16 Replay backward step decrements cursor before undo is applied — cursor/state mismatch and rapid-click divergence
Closed
#8 [critical] Space/D keys fire DrawRequestEvent during replay playback
Closed
#9 [critical] toggle_help_screen spawns second ModalScrim while another modal is open
Closed
#10 [critical] toggle_settings_screen spawns second ModalScrim while another modal is open
Closed
#11 [critical] Sync pull completion silently overwrites wins that occurred during the fetch
Closed
#5 leaderboard_plugin opt-in/opt-out tests are flaky under parallel execution
Closed
#6 [Android] resize_android_corner_labels never refreshes Text2d content — stale rank/suit on resize
Closed
#7 Cards stuck at scatter positions when new game is started during win cascade
Closed
#4 Timer does not pause on auto-win
Closed
#3 Cards Cannot Be Played From Suit Piles
Closed
#2 Game Over False Positive
Closed
#1 Previously Drawn Card Disappears on Draw
98 Issues created by 1 user
Opened
#1 Previously Drawn Card Disappears on Draw
Opened
#2 Game Over False Positive
Opened
#3 Cards Cannot Be Played From Suit Piles
Opened
#4 Timer does not pause on auto-win
Opened
#5 leaderboard_plugin opt-in/opt-out tests are flaky under parallel execution
Opened
#6 [Android] resize_android_corner_labels never refreshes Text2d content — stale rank/suit on resize
Opened
#7 Cards stuck at scatter positions when new game is started during win cascade
Opened
#8 [critical] Space/D keys fire DrawRequestEvent during replay playback
Opened
#9 [critical] toggle_help_screen spawns second ModalScrim while another modal is open
Opened
#10 [critical] toggle_settings_screen spawns second ModalScrim while another modal is open
Opened
#11 [critical] Sync pull completion silently overwrites wins that occurred during the fetch
Opened
#12 Undo penalty deducted from pre-move score instead of post-move score
Opened
#13 take_from_foundation defaults to true but is documented as "Off by default"
Opened
#14 [server] Replay leaderboard update is dead code — case mismatch "classic" vs "Classic"
Opened
#15 Auto-complete deactivates mid-sequence when is_auto_completable is transiently false
Opened
#16 Replay backward step decrements cursor before undo is applied — cursor/state mismatch and rapid-click divergence
Opened
#17 Time attack countdown continues running while Win Summary overlay is displayed
Opened
#18 [Android] U+25BE Geometric Shapes glyph in HUD labels — renders as missing-glyph rectangle
Opened
#19 Theme A→B→A switch leaves stale card-image handles — cards display wrong theme
Opened
#20 SyncAuthError and SyncBusyOverlay on same entity — auth error text is always invisible
Opened
#21 Stats double-counted on game forfeit — record_abandoned() fires twice
Opened
#22 check_win only counts 13 cards per foundation — corrupt save permanently locks game
Opened
#23 [server] avg_time_seconds merge produces wrong value when losing side has more wins
Opened
#24 WinSummaryOverlay bypasses spawn_modal / ModalScrim — invisible to all modal guards
Opened
#25 AnimationChain skips one frame between each step due to deferred command flush
Opened
#26 drop_overlay_rect panics via HashMap index operator on unknown PileType
Opened
#27 play_by_seed fires NewGameRequestEvent { confirmed: false } — forces unwanted confirm dialog
Opened
#28 SettleAnim and FoundationFlourish both write Transform.scale on king card — undefined visual result
Opened
#29 evaluate_on_win uses .last() — drops all but the final GameWonEvent when multiple fire in one frame
Opened
#30 Multiple modals can stack — sync_setup, achievements, and leaderboard guard by plugin marker not ModalScrim
Opened
#31 [server] .tmp avatar file leaks on disk if fs::rename fails
Opened
#32 [server] ReplayHeader.seed is i64 but client Replay.seed is u64 — high-bit seeds rejected
Opened
#33 expect() in Startup system and TokioRuntimeResource::default() violate no-panic rule
Opened
#34 Android bevy engine WSI damage reporting
Opened
#35 Android cards draw overlapped while dragging
Opened
#36 Bug: Cannot move cards from foundation back to tableau
Opened
#42 Create shared build_app() function for all platforms
Opened
#43 Reduce platform entrypoints to minimal wrappers
Opened
#44 Add CoreGamePlugin without moving systems
Opened
#45 Move safe gameplay systems into CoreGamePlugin
Opened
#46 Fully migrate gameplay systems into CoreGamePlugin
Opened
#47 Add platform module structure
Opened
#48 Replace direct storage with platform abstraction
Opened
#49 Eliminate platform-specific code from gameplay
Opened
#50 Ensure WASM build compiles cleanly
Opened
#51 Final cleanup of module structure and dead code
Opened
#52 fix(android): replace forbidden Unicode U+2500 (─) in win_summary_plugin.rs
Opened
#53 fix(android): replace forbidden Unicode U+258C (▌) cursor glyph in splash_plugin.rs
Opened
#54 bug(time-attack): timer does not pause when Home or Win overlay is open
Opened
#55 bug(time-attack): timer can underflow to negative values
Opened
#56 bug(achievements): XP granted before persistence confirmed — reward lost on crash
Opened
#57 bug(ui): profile panel can stack over other modals — missing ModalScrim guard
Opened
#58 bug(assets): assert!() on bundled font parse in svg_loader.rs — startup crash risk
Opened
#59 refactor(engine): deduplicate TABLEAU_FAN_FRAC constant shared between layout.rs and card_plugin.rs
Opened
#60 bug(daily-challenge): stale date cache when app runs past midnight
Opened
#61 bug(server): leaderboard opt-in check is not atomic — TOCTOU race condition
Opened
#62 bug(server): missing input validation on replay header fields
Opened
#63 bug(theme): broken theme manifests are silently skipped — no log warning
Opened
#64 bug(settings): default theme ID 'classic' contradicts migration that renames it to 'dark'
Opened
#65 bug(wasm): replay move failures are silently ignored in solitaire_wasm
Opened
#66 bug(android): safe area inset arithmetic has no bounds check — UI can shift off-screen
Opened
#67 refactor(ui): modal card has hardcoded pixel dimensions — breaks on small screens
Opened
#68 perf(analytics): per-event HTTP flush causes excessive network requests — add batching
Opened
#69 bug(stats): win events can be double-counted if multiple WinEvent fire in the same frame
Opened
#70 Add selectable touch input mode (one-tap auto-move vs. tap-to-select)
Opened
#71 bug(engine): auto-complete does not block player drag/tap input
Opened
#72 bug(challenge): silent no-op when all challenges are completed
Opened
#73 bug(server): sync push always rejected — user_id nil placeholder fails mismatch check
Opened
#74 bug(server): replay upload uses client-supplied recorded_at for leaderboard — allows timestamp spoofing
Opened
#75 Stats panel can open on top of another modal (missing scrim guard)
Opened
#77 Leaderboard panel missing modal scrim guard
Opened
#78 Switch focused render mode to reactive (render on demand) to save battery
Opened
#79 Audit animation and timer systems for reactive render compatibility
Opened
#80 Auto-complete triggers before player can finish playing from stock
Opened
#81 Right-click auto-move plays no shake animation when no legal move exists
Opened
#82 Remove DrawMode
Opened
#83 Remove card.rs
Opened
#84 Remove external undo tracking
Opened
#85 Remove TestPileState
Opened
#86 Remove score_history from GameState
Opened
#87 Remove counts from GameState
Opened
#89 Remove Saved* serde mirror types (migrate ReplayMove to upstream klondike serde)
Opened
#90 Add some pedantic lints for fun
Opened
#91 Forbid unsafe code
Opened
#116 fix(engine): safe-area insets never re-polled after app resume (stale on fold/unfold)
Opened
#117 feat(core): decide and enforce Draw-1 stock recycle limit (or document unlimited as intentional)
Opened
#118 refactor(engine): split oversized plugin modules (card_plugin 4.1k lines, hud/settings 3.5k+)
Opened
#119 chore(scripts): commit or remove untracked watch_deploy.sh
Opened
#120 chore(scripts): cratemap.go should distinguish dev-dependencies from runtime deps
Opened
#130 fix(engine): tableau clipped off-screen after fold cycle — layout computed for stale window width
Opened
#139 fix(server): login timing oracle — verify a dummy hash for unknown usernames
Opened
#140 fix(server): map unique-violation on register to 409 UsernameTaken
Opened
#141 fix(server): sniff avatar magic bytes instead of trusting Content-Type
Opened
#142 fix(server): delete analytics_events rows on account deletion
Opened
#143 test(engine): enable Bevy system-order ambiguity detection in a headless test
Opened
#156 Deploy Wasm in CI
Opened
#158 Only Consider Complete Stack in Double-Click Move
Opened
#190 cards in the wrong position on deal