Commit Graph

796 Commits

Author SHA1 Message Date
Gitea CI 0998f226ce chore(deploy): bump image to 2869e1c3 [skip ci] 2026-06-26 21:36:34 +00:00
Gitea CI 2399d7c06c chore(deploy): bump image to 783f0162 [skip ci] 2026-06-26 21:18:02 +00:00
Gitea CI 3b59116206 chore(deploy): bump image to 3daaf476 [skip ci] 2026-06-26 20:32:11 +00:00
Gitea CI 2d7a229f52 chore(deploy): bump image to 0ed91ea2 [skip ci] 2026-06-26 20:13:37 +00:00
Gitea CI 10cf87649c chore(deploy): bump image to e2082450 [skip ci] 2026-06-26 19:18:47 +00:00
Gitea CI 21d3d088ca chore(deploy): bump image to 0247efcb [skip ci] 2026-06-26 19:05:17 +00:00
Gitea CI 8a880f3521 chore(deploy): bump image to 2fc190ee [skip ci] 2026-06-25 17:27:14 +00:00
Gitea CI 3673c1c2f2 chore(deploy): bump image to 22334e0d [skip ci] 2026-06-25 17:13:16 +00:00
Gitea CI d083cbd4a8 chore(deploy): bump image to fde863a4 [skip ci] 2026-06-25 17:00:22 +00:00
Gitea CI 8a059e4a5e chore(deploy): bump image to 79ddfbc0 [skip ci] 2026-06-24 17:46:12 +00:00
Gitea CI 8bfec9174f chore(deploy): bump image to 79193657 [skip ci] 2026-06-24 17:33:05 +00:00
Gitea CI 96b9b18017 chore(deploy): bump image to 189e0afd [skip ci] 2026-06-24 17:13:07 +00:00
Gitea CI 1e06e095a8 chore(deploy): bump image to a5902ac0 [skip ci] 2026-06-24 16:54:33 +00:00
Gitea CI 52db85d8ee chore(deploy): bump image to a46505fe [skip ci] 2026-06-24 16:43:58 +00:00
Gitea CI 1c720a5ad0 chore(deploy): bump image to 1602f195 [skip ci] 2026-06-24 16:25:43 +00:00
Gitea CI 4ea3168cf2 chore(deploy): bump image to c232444e [skip ci] 2026-06-24 02:22:02 +00:00
Gitea CI 0d48deeae0 chore(deploy): bump image to 56e05caa [skip ci] 2026-06-24 02:04:45 +00:00
Gitea CI 81ff6ad465 chore(deploy): bump image to 1e061989 [skip ci] 2026-06-24 01:51:06 +00:00
Gitea CI 5dcf8b9f87 chore(deploy): bump image to 4850e941 [skip ci] 2026-06-24 01:20:42 +00:00
Gitea CI 38151d8a15 chore(deploy): bump image to b3b282ec [skip ci] 2026-06-24 00:51:00 +00:00
Gitea CI df743d9276 chore(deploy): bump image to 923a67dc [skip ci] 2026-06-24 00:24:48 +00:00
Gitea CI ee0316f234 chore(deploy): bump image to 0b7a24a7 [skip ci] 2026-06-23 17:27:04 +00:00
Gitea CI 6b86a90d3d chore(deploy): bump image to fc45b6d2 [skip ci] 2026-06-23 17:07:21 +00:00
Gitea CI ff6efe433f chore(deploy): bump image to b3a8575b [skip ci] 2026-06-22 19:22:38 +00:00
Gitea CI 250875bd10 chore(deploy): bump image to da165f16 [skip ci] 2026-06-22 19:14:14 +00:00
Gitea CI 9c3afebf56 chore(deploy): bump image to 5af69d75 [skip ci] 2026-06-22 19:02:23 +00:00
Gitea CI 956a7777e2 chore(deploy): bump image to 32400356 [skip ci] 2026-06-09 02:14:53 +00:00
Gitea CI d0fa79fa1a chore(deploy): bump image to 159774f8 [skip ci] 2026-06-09 02:10:35 +00:00
Gitea CI cac85156d8 chore(deploy): bump image to 7fe6ac6c [skip ci] 2026-06-09 02:09:09 +00:00
Gitea CI 9372c9cba6 chore(deploy): bump image to 7dbf34c1 [skip ci] 2026-06-08 18:14:35 +00:00
Gitea CI f4f2ef7b7d chore(deploy): bump image to 2cf72821 [skip ci] 2026-06-02 20:45:47 +00:00
Gitea CI 9ae940dff6 chore(deploy): bump image to 8b262afc [skip ci] 2026-06-02 20:36:31 +00:00
Gitea CI b966708228 chore(deploy): bump image to 8b736cae [skip ci] 2026-06-02 20:27:59 +00:00
Gitea CI 31fc0eb9ec chore(deploy): bump image to de7ae168 [skip ci] 2026-06-02 20:04:37 +00:00
Gitea CI e80ac5e636 chore(deploy): bump image to d45b7cb8 [skip ci] 2026-06-02 19:44:37 +00:00
Gitea CI f8d15d39f2 chore(deploy): bump image to 763fdb48 [skip ci] 2026-06-02 19:43:43 +00:00
Gitea CI 2f9cd1a32d chore(deploy): bump image to 1cdb78ca [skip ci] 2026-06-02 19:26:23 +00:00
Gitea CI 4dc5956552 chore(deploy): bump image to 20e52221 [skip ci] 2026-06-01 22:30:58 +00:00
Gitea CI 627b116c12 chore(deploy): bump image to 44e90ff5 [skip ci] 2026-06-01 22:03:04 +00:00
Gitea CI dc0ce8cd02 chore(deploy): bump image to 7eb1181e [skip ci] 2026-05-28 21:45:02 +00:00
Gitea CI 4c517f4ccd chore(deploy): bump image to 6e407a3e [skip ci] 2026-05-28 20:45:06 +00:00
Gitea CI 7a523f3963 chore(deploy): bump image to 561395fc [skip ci] 2026-05-28 00:34:41 +00:00
Gitea CI e46b3fce2e chore(deploy): bump image to 25c43db6 [skip ci] 2026-05-27 21:44:57 +00:00
Gitea CI 07c05179c3 chore(deploy): bump image to ecab227b [skip ci] 2026-05-19 23:58:50 +00:00
funman300 ecab227b8d ci(deploy): push kustomization updates to deploy branch, not master
Build and Deploy / build-and-push (push) Successful in 21s
The CI bot was committing image-tag bumps back to master after every
Docker build, which forced a `git pull --rebase` before every developer
push. Moving the kustomization commit to a dedicated `deploy` branch
keeps master clean — the build bot no longer diverges it.

Argo CD / Flux should now watch the `deploy` branch (targetRevision:
deploy) instead of master.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-19 16:57:20 -07:00
funman300 da601bebd6 fix(engine,wasm,web): detect no-legal-moves correctly and surface banner
Build and Deploy / build-and-push (push) Successful in 4m24s
Engine: replace broken has_legal_moves loop (which checked buried
mid-column cards without sequence validation) with a delegation to
possible_instructions(), mirroring the hint system's logic exactly.

WASM: add has_moves: bool to GameSnapshot, computed in snap() using the
same stock/waste/possible_instructions check so the web client gets the
flag in every state update at no extra round-trip cost.

Web: show a non-blocking no-moves banner (slide-up toast) with Undo and
New Game actions when has_moves is false and the game is not won. Banner
hides automatically once a move restores legal play (e.g. after undo).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-19 16:54:01 -07:00
Gitea CI a2dd8d220c chore(deploy): bump image to d5d869a6 [skip ci] 2026-05-19 23:31:16 +00:00
funman300 d5d869a6c8 fix(multi): resolve 16 bugs from comprehensive rules and code review
Build and Deploy / build-and-push (push) Successful in 4m12s
Core (solitaire_core):
- fix(core): auto-complete now requires waste empty to prevent deadlock
- fix(core): reject multi-card moves from waste pile (Klondike rule)
- fix(core): reject foundation-to-foundation moves (score farming exploit)
- fix(core): undo restores score from snapshot baseline, not live score
- feat(scoring): add +5 flip bonus when face-down tableau card is exposed
- feat(scoring): add recycle penalty (Draw-1: -100/pass, Draw-3: -20/pass)

Engine (solitaire_engine):
- fix(engine): remove TokioRuntimeResource::default() panic; degrade gracefully
- fix(engine): add ModalScrim guard to handle_new_game spawn site
- fix(engine): add ModalScrim guard to spawn_restore_prompt spawn site
- fix(engine): add ModalScrim guard to check_no_moves spawn site

Server / Web (solitaire_server):
- fix(web): correct draw_mode casing in replay submission (DrawOne/DrawThree)
- fix(web): correct mode casing in replay submission (Classic) for leaderboard
- fix(web): trim recorded_at to YYYY-MM-DD for NaiveDate deserialization
- fix(server): move /avatars route outside auth middleware (was always 401)

Data / Sync (solitaire_data, solitaire_sync):
- fix(data): namespace Android token file under APP_DIR_NAME with migration
- fix(data): Android token store now multi-user (HashMap); no silent overwrite
- fix(sync): draw_one_wins + draw_three_wins invariant preserved after merge

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-19 16:27:09 -07:00
Gitea CI 42898c0b3f chore(deploy): bump image to f6e7de10 [skip ci] 2026-05-19 22:53:25 +00:00
funman300 f6e7de1093 fix(core): make take_from_foundation true by default across all clients
Build and Deploy / build-and-push (push) Successful in 3m51s
Android Release / build-apk (push) Successful in 4m36s
The flag was modelled as an opt-in non-standard rule but moving a card
off a foundation is in fact standard Klondike — disabling it is the
non-standard variant.

Changing the core default to true means every client (desktop, Android,
web) gets correct behaviour without each having to independently patch
the value after construction. Clients that expose a settings toggle
(desktop/Android) can still disable it through SettingsResource.

- game_state.rs: flip default from false → true in new_with_mode
- game_state.rs: rename/update take_from_foundation_disabled_by_default
  test to reflect the new intended default
- solitaire_wasm/lib.rs: remove now-redundant override in new()
  (from_saved keeps its override to fix old saves that serialised false)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
v0.37.0
2026-05-19 15:44:10 -07:00