Skip to content

Promote to production: Daily Word Guess + Fruit Merge - #372

Merged
slaveofcode merged 6 commits into
mainfrom
develop
Aug 31, 2026
Merged

Promote to production: Daily Word Guess + Fruit Merge#372
slaveofcode merged 6 commits into
mainfrom
develop

Conversation

@slaveofcode

Copy link
Copy Markdown
Owner

What

Two new Games tools, both fully tested and merged to develop:

Verification

  • Both PRs: Test·Build·Lint + Playwright e2e green on develop tip
  • develop merge commit verified locally: 2166 unit tests, build produces all four pages (/tools/* + /id/tools/*)

Promotes the current develop (8d665f2) to production.

- Pure lib: guess evaluation with duplicate-letter handling, deterministic
  daily answer from UTC day index, streak stats, spoiler-free emoji share,
  keyboard state derivation — all Vitest-covered
- Curated strict word lists: 1827 EN answers + 219 extras, 620 ID answers +
  163 extras (shape/dup/overlap enforced by tests)
- Island: 6x5 tile grid with flip/shake/pop animations (reduced-motion safe),
  on-screen QWERTY + physical keyboard, toasts, end panel with stats,
  distribution, share button, next-puzzle countdown, unlimited practice mode
- Daily state + stats persisted per language in localStorage
- Registered in tools.ts + full EN/ID SEO entries with how-to and FAQs
- E2E: full daily game, invalid-word rejection, practice mode
- Hand-rolled circle physics in a pure lib: semi-implicit Euler, soft
  positional correction (slop + capped) with zero-restitution impulses,
  wall/floor constraints with rest cutoff, speed cap, and deterministic
  ordering — no physics dependency
- Two solver bugs found and fixed via a 100-drop stress sim: restitution
  pumping launched fruits out of the box (fixed with e=0 impulses + soft
  correction), and speed-based calm detection never fired because jammed
  fruits hold phantom velocity while positionally frozen (fixed with
  displacement-based calm tracking)
- 11-tier chain cherry→watermelon, triangular scoring, next-fruit preview,
  drop cooldown, deadline with dashed render
- Island: canvas render (DPR-scaled), pointer aim + drop, fixed-step RAF
  loop with substeps, best score persisted in localStorage
- Registered in tools.ts + full EN/ID SEO entries
- E2E: merge scoring via real pointer drops, game-over + restart flow
On a cold CI runner the first on-screen-key click landed before React
attached props to the island — the click was silently dropped, every
subsequent Enter hit a mangled draft, and the game never finished. Wait
for the __react props marker on a keyboard key before interacting.
feat(games): Daily Word Guess — Wordle-style daily word puzzle (EN + ID)
…ries

Word-guess and fruit-merge both inserted registry/SEO entries at the same
spots; resolved by keeping both blocks in both locales.
feat(games): Fruit Merge — Suika-style physics merge puzzle
@slaveofcode
slaveofcode merged commit f9e67e7 into main Aug 31, 2026
3 of 5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant