21 Commits
Author SHA1 Message Date
SansanandClaude Sonnet 5 f39ed1684b Sequence windows after build to avoid shared action-cache race
Build and Test / build (push) Successful in 22s
Build and Test / windows (push) Successful in 27s
Release / release (push) Successful in 1m45s
Run 136's build job failed immediately (not a segfault) because it
and windows both clone actions/checkout@v4 and actions/cache@v4 into
the same cache directory on the runner at the same time; one job's
git fetch loses the race and ends up with a missing dist/index.js.
needs: build serializes them so they don't race on that shared cache.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
v0.0.1
2026-10-03 19:43:30 +02:00
SansanandClaude Sonnet 5 f53ec2d71d Fix: ulimit and odin test must be on the same justfile line
Build and Test / build (push) Failing after 4s
Build and Test / windows (push) Successful in 1m9s
just runs each recipe line in its own shell invocation (no shebang on
this recipe), so the previous commit's separate ulimit -s 8192 line
never actually affected the odin test line - CI segfaulted again the
same way. Confirmed fixed in an ubuntu:24.04 container running the
actual `just test` recipe with ulimit -s unlimited set beforehand.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-10-03 19:41:09 +02:00
SansanandClaude Sonnet 5 06f4e9ed11 Fix CI test segfault: clamp stack ulimit before odin test
Build and Test / build (push) Failing after 19s
Build and Test / windows (push) Successful in 1m34s
Root cause found via gdb backtrace on the runner (thread::pool_init
crashed from main -> testing runner): the CI container sets
`ulimit -s unlimited`, so getrlimit(RLIMIT_STACK) returns RLIM_INFINITY.
core:thread passes that to pthread_attr_setstacksize, pthread_create
fails, and thread.create() returns nil, which core:testing's pool_init
dereferences without a nil check. Reproduced and confirmed fixed in an
ubuntu:24.04 container with the same Odin build. `just test` now clamps
the stack limit before running odin test. Also removes the gdb
diagnostic step added to debug this.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-10-03 19:35:43 +02:00
SansanandClaude Sonnet 5 0776e8e4b9 Revert runner-contention theory, add gdb diagnostics for the test segfault
Build and Test / build (push) Failing after 25s
Build and Test / windows (push) Successful in 10m28s
The windows job hadn't even started when build's odin test segfaulted
again on its own (run 132), so concurrency wasn't the cause. Add a
Debug Segfault step that runs the already-built test binary under gdb
to get a backtrace, since this doesn't reproduce locally or in a plain
ubuntu:24.04 container with the same Odin build.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-10-03 18:02:11 +02:00
SansanandClaude Sonnet 5 458f0edccb Sequence windows after build job to avoid CI runner contention
Build and Test / build (push) Failing after 23s
Build and Test / windows (push) Skipped
Both jobs land on the same self-hosted runner. Run 129 segfaulted
odin test in build while windows was mid (uncached) SDK download/
splat at the same time; odin check passed and the test suite
reproduces fine in isolation, so this is resource contention from
running concurrently for the first time, not a code or toolchain bug.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-10-03 15:56:42 +02:00
SansanandClaude Opus 5.5 26904b6852 Windows build links ole32; CI cross-builds Windows on main/develop; docs
Build and Test / build (push) Failing after 23s
Build and Test / windows (push) Successful in 11m6s
- os.user_data_dir needs ole32.lib on Windows
- Build workflow gets a Windows cross-build job with a cached SDK
- Drop the backtick from Jua's codepoints (the font lacks it)
- Update AGENTS.md and README for decks, controls, scores and layout

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 21:38:07 +02:00
SansanandClaude Opus 5.5 3794a9e2e9 Add screen fade-in and card deal-in animations
Cards slide in one after another when a game starts and can't be picked
until they have landed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 21:36:54 +02:00
SansanandClaude Opus 5.5 83ff9511ec Save best scores and last difficulty to a JSON profile
- profile package: best moves, best time and games played per
  deck/difficulty, stored in the user data folder
- Win panel shows the best (or New best!), language menu shows bests
- Profile memory always comes from the heap allocator (it outlives callers)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 21:35:43 +02:00
SansanandClaude Opus 5.5 685182b25d Add keyboard play: arrows/WASD/hjkl focus, Enter/Space flips
Focus ring appears on the first key press and hides when the mouse moves.
Enter also triggers Play Again on the win panel.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 21:34:00 +02:00
SansanandClaude Opus 5.5 8214fda8f6 Add Katakana, Korean and Thai games and difficulty levels
- decks package: Hiragana, Katakana, Hangul jamo and Thai consonants
  (Thai readings carry the letter's name word, since sounds repeat)
- Per-script fonts: Jua for Hangul, Mali for Thai (both OFL)
- Memory game works with any deck; Easy 3x4, Normal 4x6, Hard 4x8
- Language menus pick a deck and difficulty, with number/arrow key shortcuts
- Tests cover every deck, difficulty, and font glyph coverage

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 21:33:16 +02:00
SansanandClaude Opus 5.5 4cfe73c9eb Fix AGENTS.md gotcha ordering
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 21:27:28 +02:00
SansanandClaude Opus 5.5 e893c45d4f Add Windows cross-build and Gitea release; share CI setup
- just windows-deps / windows / package-windows: cross-compile with Odin
  objects + lld-link against an xwin SDK, static VC runtime
- Release workflow runs on v* tags, builds Linux and Windows packages,
  uploads them to the package registry and creates a Gitea release
- Shared toolchain setup as a local composite action

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 21:27:22 +02:00
SansanandClaude Opus 5.5 9ee2eabe9a Add justfile, ols/odinfmt config, tests and Gitea workflows; drop odin.json
- justfile with build/run/check/test/release/package/fmt/clean recipes
- ols.json and odinfmt.json for neovim (ols)
- Tests for memory game rules and card animation; memory.deal and
  memory.select_card split out so logic is testable without a window
- Gitea workflows: build+test on main/develop, package and upload to the
  generic package registry on version branches
- Game changes to the executable's directory so packaged builds find assets

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 21:04:08 +02:00
SansanandClaude Opus 5.5 148570a4e6 Update AGENTS.md for new structure, themes, font and audio
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 20:47:25 +02:00
SansanandClaude Opus 5.5 5806f0498c Restructure into themed screens with flag card backs, real font, flip animation and sound
- Replace the bogus DroidSansJapanese.ttf (an HTML page) with M PLUS Rounded 1c,
  loaded with LoadFontEx and explicit kana codepoints
- Theme struct per language with flag-based card backs (Hinomaru, Taegukgi, Trairong)
- Card art rendered to textures so the flip squashes the whole card
- Synthesized flip/match/mismatch/win/click sounds (new audio package)
- Shared ui package for text and buttons; Screen enum replaces i32 ids
- Kana <-> romaji pairs drawn from all 46 basic hiragana

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 20:47:04 +02:00
SansanandClaude Opus 5.5 5557de62a3 Fix ESC quitting, memory layout overlap, shuffle and move counting
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 20:40:54 +02:00
SansanandClaude Opus 5.5 964d9987be Track src modules; stop ignoring .odin files
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 20:40:13 +02:00
Sansan 33d55357cf Remove executable from git
Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
2026-06-07 21:32:34 +02:00
Sansan 2feba4e9e1 Add .gitignore for Odin builds
Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
2026-06-07 21:32:30 +02:00
Sansan 34fff3cc0d Initial commit: empty raylib window
Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
2026-06-07 21:30:43 +02:00
Sansan 47a71d9b04 Initial commit 2026-06-07 21:30:36 +02:00