Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
49 commits
Select commit Hold shift + click to select a range
e460925
CG-0MQK3PQFG001JLYL: Replace dollar sign ($) with Euro symbol (€) acr…
Jul 10, 2026
54d24bf
CG-0MQQHESOG002VOBK: Create shared HintBar component in core engine UI
Jul 10, 2026
c0d0840
CG-0MQQHETIF002MZZD: Migrate Main Street to use shared HintBar component
Jul 10, 2026
14d5033
CG-0MQK6SKLT0033TIJ: Add Randomize Hand button to Save/Load gym scene
Jul 10, 2026
60dc92b
CG-0MQK3CJUX0043I3U: Update all game thumbnails on menu screen
Jul 10, 2026
1fb0717
CG-0MQK5X1ZK0050TLZ: Add discard animation mode toggle to GymHandPile…
Jul 10, 2026
0731ccf
CG-0MQK5X1ZK0050TLZ: Add rotation to discard animation and dynamic fl…
Jul 11, 2026
23dc48f
CG-0MQK5X1ZK0050TLZ: Fix flip animation visibility by adding depth ma…
Jul 11, 2026
39d757f
CG-0MRFMNXDM0091CBG: Fix regression — overlay text positioned at card…
Jul 11, 2026
ec67ddc
CG-0MQK3CJUX0043I3U: Generate all thumbnails from actual game screens…
Jul 11, 2026
e423829
CG-0MQK6ZSTP0091CA3: Refactor GymAudioFeedbackScene for auto-discover…
Jul 11, 2026
90138a5
CG-0MQK6ZSTP0091CA3: Spread dynamic buttons across full screen width
Jul 11, 2026
a709008
CG-0MQK0OM6I00168HD: Screen layout fixes for Feudalism
Jul 11, 2026
7a64afa
CG-0MQK657MO002X269: Implement scrollable overlay with scrollbar in G…
Jul 11, 2026
66b2e6c
Sync work items and comments
Jul 11, 2026
3a6fc8e
Revert "Sync work items and comments"
Jul 11, 2026
7e3a796
CG-0MQK657MO002X269: Force Canvas renderer to fix GeometryMask scroll…
Jul 11, 2026
5a88df2
CG-0MQK5T8AT009E1EN: Add Face Up/Down toggle for discard pile visual …
Jul 11, 2026
2a304df
CG-0MQK6GBYD0078HSA: Add Blackjack simulation to GymTranscriptScene w…
Jul 11, 2026
f22f227
Carry forward: Add face-up toggle to PileView and GymHandPileScene
Jul 11, 2026
872ec75
CG-0MQK1GC79000CQIJ: Add illegal move sound to shakeIllegalMove anima…
Jul 11, 2026
280fa89
CG-0MQK1UDDC0027MKQ: Settings only shows Tooltips toggle when game ha…
Jul 11, 2026
f488b83
CG-0MQK1C4UA0059VWB: Improve Lost Cities AI with investment card and …
Jul 11, 2026
1ff7780
CG-0MRCLYBUR002GFCZ: CardMemoryTracker - core memory model with proba…
Jul 11, 2026
47e8123
CG-0MRCLYBVH0011SA4: Augment countVisibleRanks with memory support
Jul 11, 2026
2ecd7b2
CG-0MRCLYBYW003HMPT: AiPlayer integration - skill rating and memory t…
Jul 12, 2026
3551072
CG-0MRF343AJ004N6ZW: CSV checksum detection with in-memory SVG regene…
Jul 12, 2026
330e38a
CG-0MRCLYBVM005XRXA: Integrate memory into chooseDrawSource - add tests
Jul 12, 2026
801fd0c
CG-0MRCLYBWM001FA8H: GolfScene wires skill rating through to AI
Jul 12, 2026
30e9569
CG-0MRCMVBJM001MJ45: Documentation and test coverage for skill rating
Jul 12, 2026
b6f2472
CG-0MQK1GC79000CQIJ: Integrate illegal move sound into Beleaguered Ca…
Jul 12, 2026
12db375
CG-0MRH36Z6800065JC: Fix CSV race condition - early SVG regeneration …
Jul 12, 2026
d3761db
CG-0MRH36Z6800065JC: Fix drawImage crash from premature texture clear…
Jul 12, 2026
c1c365e
CG-0MRH36Z6800065JC: Per-key texture clear in prewarm to fix drawImag…
Jul 12, 2026
7fb8473
CG-0MRH36Z6800065JC: Add Playwright test for game startup console errors
Jul 12, 2026
2fe43e3
CG-0MRH36Z6800065JC: Fix drawImage crash — restore skip-existing-text…
Jul 12, 2026
61ee1fe
CG-0MRH36Z6800065JC: Extend Playwright test to verify Golf and Beleag…
Jul 12, 2026
3a55989
CG-0MRDU64K4000APKM: Fix player tableau cards not rendering backgroun…
Jul 12, 2026
66deaa7
some balancing
Jul 12, 2026
d6eafd2
wiki stuff
Jul 12, 2026
f818386
feat(ai): extract CardMemoryTracker into generic core AI memory system
Jul 12, 2026
75864b4
CG-0MRIHJSE20075TNI: Fix 12 test failures from card-data.csv balance …
Jul 13, 2026
fcd5056
CG-0MRIYGE410044PZI: Fix 3 pre-existing browser test failures
Jul 13, 2026
6a1b2be
CG-0MRIYGE410044PZI: Fix BeleagueredCastle win overlay depth and remo…
Jul 13, 2026
953f448
Rebalance Main Street card data and regenerate SVG assets
Jul 14, 2026
100885b
Fix remaining audit-blocking items: wire recordCard in GolfAiControll…
Jul 14, 2026
eff1bb2
Bump version to v0.1.5
Jul 14, 2026
ab0a484
Update CHANGELOG.md for v0.1.5
Jul 14, 2026
3013c4f
Merge origin/dev into main (automated)
Jul 14, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 8 additions & 1 deletion .llm-wiki/meta/backlinks.json
Original file line number Diff line number Diff line change
@@ -1 +1,8 @@
{}
{
"sources/direct-sound-playback-for-game-specific-audio": [],
"sources/obs-2026-06-24-activity-log-windowed-rendering-fix": [],
"sources/obs-2026-06-24-intake-completed-main-street-challenge-celebration-vfx-sound": [],
"sources/obs-2026-06-24-neutral-income-sound-added-for-zero-income-turns": [],
"sources/obs-2026-06-24-stats-button-moved-to-lower-left-to-fix-settings-button-over": [],
"sources/tutorial-i18n-already-implemented": []
}
6 changes: 6 additions & 0 deletions .llm-wiki/meta/events.jsonl
Original file line number Diff line number Diff line change
@@ -1 +1,7 @@
{"timestamp":"2026-06-06T22:21:48.841Z","kind":"bootstrap","topic":"Tableau Card Engine","mode":"personal"}
{"timestamp":"2026-06-24T11:39:05.029Z","kind":"observe","slug":"obs-2026-06-24-neutral-income-sound-added-for-zero-income-turns","title":"Neutral income sound added for zero-income turns","relevance":"medium"}
{"timestamp":"2026-06-24T11:39:10.273Z","kind":"retro","slug":"direct-sound-playback-for-game-specific-audio","title":"Direct sound playback for game-specific audio events","category":"audio"}
{"timestamp":"2026-06-24T12:10:43.832Z","kind":"observe","slug":"obs-2026-06-24-activity-log-windowed-rendering-fix","title":"Activity Log windowed rendering fix","relevance":"medium"}
{"timestamp":"2026-06-24T13:36:23.423Z","kind":"observe","slug":"obs-2026-06-24-intake-completed-main-street-challenge-celebration-vfx-sound","title":"Intake completed: Main Street challenge celebration VFX/sound","relevance":"medium"}
{"timestamp":"2026-06-24T13:50:19.632Z","kind":"retro","slug":"tutorial-i18n-already-implemented","title":"Main Street tutorial i18n externalization already implemented","category":"uncategorized"}
{"timestamp":"2026-06-24T15:36:12.978Z","kind":"observe","slug":"obs-2026-06-24-stats-button-moved-to-lower-left-to-fix-settings-button-over","title":"Stats button moved to lower-left to fix Settings button overlap","relevance":"medium"}
11 changes: 10 additions & 1 deletion .llm-wiki/meta/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,14 @@

> Auto-generated from meta/registry.json. Do not edit manually.

## Sources

- [[sources/direct-sound-playback-for-game-specific-audio]] — "Direct sound playback for game-specific audio events" *(created: 2026-06-24)*
- [[sources/obs-2026-06-24-activity-log-windowed-rendering-fix]] — "Observation: Activity Log windowed rendering fix" *(created: 2026-06-24)*
- [[sources/obs-2026-06-24-intake-completed-main-street-challenge-celebration-vfx-sound]] — "Observation: Intake completed: Main Street challenge celebration VFX/sound" *(created: 2026-06-24)*
- [[sources/obs-2026-06-24-neutral-income-sound-added-for-zero-income-turns]] — "Observation: Neutral income sound added for zero-income turns" *(created: 2026-06-24)*
- [[sources/obs-2026-06-24-stats-button-moved-to-lower-left-to-fix-settings-button-over]] — "Observation: Stats button moved to lower-left to fix Settings button overlap" *(created: 2026-06-24)*
- [[sources/tutorial-i18n-already-implemented]] — "Main Street tutorial i18n externalization already implemented" *(created: 2026-06-24)*

---
*Last updated: 2026-06-06T22:21:48.840Z* | *Total pages: 0*
*Last updated: 2026-06-24T15:36:12.984Z* | *Total pages: 6*
21 changes: 20 additions & 1 deletion .llm-wiki/meta/log.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,24 @@

> Auto-generated from meta/events.jsonl. Do not edit manually.

_No events recorded yet._
## [2026-06-06T22:21:48.841Z] bootstrap
- topic: "Tableau Card Engine", mode: "personal"

## [2026-06-24T11:39:05.029Z] observe
- slug: "obs-2026-06-24-neutral-income-sound-added-for-zero-income-turns", title: "Neutral income sound added for zero-income turns", relevance: "medium"

## [2026-06-24T11:39:10.273Z] retro
- slug: "direct-sound-playback-for-game-specific-audio", title: "Direct sound playback for game-specific audio events", category: "audio"

## [2026-06-24T12:10:43.832Z] observe
- slug: "obs-2026-06-24-activity-log-windowed-rendering-fix", title: "Activity Log windowed rendering fix", relevance: "medium"

## [2026-06-24T13:36:23.423Z] observe
- slug: "obs-2026-06-24-intake-completed-main-street-challenge-celebration-vfx-sound", title: "Intake completed: Main Street challenge celebration VFX/sound", relevance: "medium"

## [2026-06-24T13:50:19.632Z] retro
- slug: "tutorial-i18n-already-implemented", title: "Main Street tutorial i18n externalization already implemented", category: "uncategorized"

## [2026-06-24T15:36:12.978Z] observe
- slug: "obs-2026-06-24-stats-button-moved-to-lower-left-to-fix-settings-button-over", title: "Stats button moved to lower-left to fix Settings button overlap", relevance: "medium"

84 changes: 82 additions & 2 deletions .llm-wiki/meta/registry.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,85 @@
{
"version": "1.0",
"last_updated": "2026-06-06T22:21:48.840Z",
"pages": {}
"last_updated": "2026-06-24T15:36:12.984Z",
"pages": {
"sources/direct-sound-playback-for-game-specific-audio": {
"type": "source",
"title": "\"Direct sound playback for game-specific audio events\"",
"created": "2026-06-24",
"updated": "2026-06-24",
"slug": "direct-sound-playback-for-game-specific-audio",
"status": "insight",
"category": "audio"
},
"sources/obs-2026-06-24-activity-log-windowed-rendering-fix": {
"type": "source",
"title": "\"Observation: Activity Log windowed rendering fix\"",
"created": "2026-06-24",
"updated": "2026-06-24",
"slug": "obs-2026-06-24-activity-log-windowed-rendering-fix",
"status": "observation",
"relevance": "medium",
"observed_at": "2026-06-24T12:10:43.831Z",
"tags": [
"main-street",
"ui",
"activity-log",
"scrolling",
"bugfix"
],
"source_context": "\"Implementing CG-0MQK4H9180049050: Activity Log scrolls off top of container\""
},
"sources/obs-2026-06-24-intake-completed-main-street-challenge-celebration-vfx-sound": {
"type": "source",
"title": "\"Observation: Intake completed: Main Street challenge celebration VFX/sound\"",
"created": "2026-06-24",
"updated": "2026-06-24",
"slug": "obs-2026-06-24-intake-completed-main-street-challenge-celebration-vfx-sound",
"status": "observation",
"relevance": "medium",
"observed_at": "2026-06-24T13:36:23.421Z",
"tags": [
"main-street",
"intake",
"challenge",
"VFX",
"audio"
],
"source_context": "\"Intake command for Main Street challenge celebration feature\""
},
"sources/obs-2026-06-24-neutral-income-sound-added-for-zero-income-turns": {
"type": "source",
"title": "\"Observation: Neutral income sound added for zero-income turns\"",
"created": "2026-06-24",
"updated": "2026-06-24",
"slug": "obs-2026-06-24-neutral-income-sound-added-for-zero-income-turns",
"status": "observation",
"relevance": "medium",
"observed_at": "2026-06-24T11:39:05.027Z",
"tags": [
"main-street",
"audio",
"sound"
],
"source_context": "\"Implementing CG-0MQK4EGJ0001JN6N: No sound on some turns\""
},
"sources/obs-2026-06-24-stats-button-moved-to-lower-left-to-fix-settings-button-over": {
"type": "source",
"title": "\"Observation: Stats button moved to lower-left to fix Settings button overlap\"",
"created": "2026-06-24",
"updated": "2026-06-24",
"slug": "obs-2026-06-24-stats-button-moved-to-lower-left-to-fix-settings-button-over",
"status": "observation",
"relevance": "medium",
"observed_at": "2026-06-24T15:36:12.954Z"
},
"sources/tutorial-i18n-already-implemented": {
"type": "source",
"title": "\"Main Street tutorial i18n externalization already implemented\"",
"created": "2026-06-24",
"updated": "2026-06-24",
"slug": "tutorial-i18n-already-implemented",
"status": "insight"
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
---
type: source
title: "Direct sound playback for game-specific audio events"
slug: direct-sound-playback-for-game-specific-audio
status: insight
created: 2026-06-24
updated: 2026-06-24
category: audio
---
# Direct sound playback for game-specific audio events
When adding game-specific sounds that don't need to be shared across games or don't require the declarative event-to-sound mapping system, playing them directly via `soundManager.play(SFX_KEY)` is simpler than adding new event types to the core engine's `GameEventMap`. This avoids polluting the core engine with game-specific concerns while still benefiting from the SoundManager's namespacing, volume, mute, and synth integration. The Key pattern: define the SFX key constant in the game's constants file, add it to the synth/tf mapping if needed, preload the audio asset, and call `soundManager.play()` directly.
*Category: audio*
---
*Captured: 2026-06-24*
## Related
_Add links to related pages._
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
---
type: source
title: "Observation: Activity Log windowed rendering fix"
slug: obs-2026-06-24-activity-log-windowed-rendering-fix
status: observation
created: 2026-06-24
updated: 2026-06-24
relevance: medium
observed_at: 2026-06-24T12:10:43.831Z
tags: ["main-street", "ui", "activity-log", "scrolling", "bugfix"]
source_context: "Implementing CG-0MQK4H9180049050: Activity Log scrolls off top of container"
---
# 🔍 Observation: Activity Log windowed rendering fix
Fixed Activity Log content overflowing its container by implementing windowed rendering. Previously all log entries were rendered in the logContentContainer with a geometry mask clipping the overflow. Now only entries within the visible panel area are rendered, determined by calculating maxDisplayEntries from the panel height divided by LOG_LINE_H. The scroll offset (logScrollOffset) is converted to a start index, and only that window of entries is rendered. The container stays at its initial Y position instead of being moved. The handleLogWheel handler triggers refreshLog after each scroll change. Commit 52715d7c pushed to dev.
*Relevance: medium*

*Context: Implementing CG-0MQK4H9180049050: Activity Log scrolls off top of container*

*Tags: main-street ui activity-log scrolling bugfix*
---
*Observed: 2026-06-24T12:10:43.831Z*
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
---
type: source
title: "Observation: Intake completed: Main Street challenge celebration VFX/sound"
slug: obs-2026-06-24-intake-completed-main-street-challenge-celebration-vfx-sound
status: observation
created: 2026-06-24
updated: 2026-06-24
relevance: medium
observed_at: 2026-06-24T13:36:23.421Z
tags: ["main-street", "intake", "challenge", "VFX", "audio"]
source_context: "Intake command for Main Street challenge celebration feature"
---
# 🔍 Observation: Intake completed: Main Street challenge celebration VFX/sound
Completed intake for a new feature (CG-0MQS46G5U001CYUG) to add celebration VFX (particle burst) and sound effects when challenges are completed in Main Street. The `processEndOfTurn()` function currently discards the return value of `evaluateChallenges()`, so the first implementation step is to capture newly completed challenge IDs, surface them to the UI, and trigger particle VFX (following the GymAudioFeedbackScene pattern) plus a new `sfx-challenge-complete` sound via the existing SoundManager/SFX_KEYS/tf-mapping infrastructure. Estimated Small effort (8.67h expected), Low risk.
*Relevance: medium*

*Context: Intake command for Main Street challenge celebration feature*

*Tags: main-street intake challenge VFX audio*
---
*Observed: 2026-06-24T13:36:23.421Z*
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
---
type: source
title: "Observation: Neutral income sound added for zero-income turns"
slug: obs-2026-06-24-neutral-income-sound-added-for-zero-income-turns
status: observation
created: 2026-06-24
updated: 2026-06-24
relevance: medium
observed_at: 2026-06-24T11:39:05.027Z
tags: ["main-street", "audio", "sound"]
source_context: "Implementing CG-0MQK4EGJ0001JN6N: No sound on some turns"
---
# 🔍 Observation: Neutral income sound added for zero-income turns
Added a neutral sound effect (sfx-income-neutral) that plays when turn-end net income is 0 in Main Street. Previously only positive income (delta > 0) triggered the coin-pop sound. The neutral sound is played directly via soundManager.play() in MainStreetAnimator.animateHudValueChanges when coin delta equals 0. The tf factory key is 'income-neutral-chime'. Preload reuses click.wav as the fallback WAV asset. No core engine changes were needed — the sound is played directly rather than through a new game event. Commit a5ea5229 pushed to dev.
*Relevance: medium*

*Context: Implementing CG-0MQK4EGJ0001JN6N: No sound on some turns*

*Tags: main-street audio sound*
---
*Observed: 2026-06-24T11:39:05.027Z*
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
---
type: source
title: "Observation: Stats button moved to lower-left to fix Settings button overlap"
slug: obs-2026-06-24-stats-button-moved-to-lower-left-to-fix-settings-button-over
status: observation
created: 2026-06-24
updated: 2026-06-24
relevance: medium
observed_at: 2026-06-24T15:36:12.954Z
---
# 🔍 Observation: Stats button moved to lower-left to fix Settings button overlap
The StatsButton in StatsOverlay.ts was positioned at (canvasWidth - 80, 32), exactly overlapping the SettingsButton (also at canvasWidth - 80, 32). Fixed by moving it to the lower-left corner at (MARGIN + radius, canvasHeight - MARGIN - radius) = (32, canvasHeight - 32). Also standardized the visual style (fill 0x333355, border 0xf0c040, text #f0c040, hover 0x4444aa) to match HelpButton and SettingsButton exactly.
*Relevance: medium*
---
*Observed: 2026-06-24T15:36:12.954Z*
23 changes: 23 additions & 0 deletions .llm-wiki/wiki/sources/tutorial-i18n-already-implemented.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
---
type: source
title: "Main Street tutorial i18n externalization already implemented"
slug: tutorial-i18n-already-implemented
status: insight
created: 2026-06-24
updated: 2026-06-24
---
# Main Street tutorial i18n externalization already implemented
Work item **CG-0MP415DUV0032SKK** (Main Street tutorial localization and i18n externalization) was already fully implemented in commit `76450222` which was already in the `dev` branch ancestry. Upon investigation:

- The core engine's `I18n.ts` module provides `t()`, `registerLocale()`, `setLocale()`, and `resetI18n()` APIs
- Tutorial step definitions in `TutorialFlow.ts` use `titleKey`/`bodyKey` i18n key references instead of hardcoded strings
- `example-games/main-street/i18n/tutorial-en.ts` contains all 13 tutorial steps + modal + overlay button strings, registered at module load
- `tests/main-street/tutorial-i18n.test.ts` has 16 tests verifying all keys exist, locale switching works, and `resolveTutorialStepText()` works correctly
- `docs/main-street/tutorial-localization.md` documents how to edit copy and add translations

The work item was stale (still `plan_complete` despite being implemented). Audit confirmed all 5 acceptance criteria met. Updated to `in_review` status.

---
*Captured: 2026-06-24*
## Related
_Add links to related pages._
41 changes: 41 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,46 @@
# Changelog

## v0.1.5 (2026-07-14)
### Features
- Golf AI should consider vertical columns (CG-0MQ7W12C3002HP7L)
- Golf AI: add skill rating (1-100) for strategic card memory (CG-0MQIOPP1L004OYYA)
- Use Euro not dollar (CG-0MQK3PQFG001JLYL)
- Ensure SVGs are regenerated when CSV changes on game start and load (CG-0MRF343AJ004N6ZW)
- Extract CardMemoryTracker into generic core AI memory system (CG-0MRH2FERF001OGWB)
- Illegal Move sound (CG-0MQK1GC79000CQIJ)
- Create a standard hint object for all games. (CG-0MQK3M237009GR6E)
- discard shrinks the card - not a good UX (CG-0MQK5X1ZK0050TLZ)
- Save Load scene needs randomize hand (CG-0MQK6SKLT0033TIJ)
- Ensure card data is loaded from CSV when a new game starts (CG-0MRH36Z6800065JC)
- Screen layout for Feudalism (CG-0MQK0OM6I00168HD)
- AI in Lost Cities is dumb (CG-0MQK1C4UA0059VWB)
- Settings should only show tooltips switch if they exist (CG-0MQK1UDDC0027MKQ)
- Discards face up or down (CG-0MQK5T8AT009E1EN)
- Scrollable overlay is not demonstrated well (CG-0MQK657MO002X269)
- Audio and Feedback Config gym improvement (CG-0MQK6ZSTP0091CA3)
- Transcript recording needs more detail (CG-0MQK6GBYD0078HSA)
### Bug Fixes
- Sushi Go played cards not rendered (CG-0MRDU64K4000APKM)
- Fix regression: income/reputation overlay text positioned at card right edge instead of center (CG-0MRFMNXDM0091CBG)
- Fix 12 pre-existing test failures from card-data.csv balance changes (CG-0MRIHJSE20075TNI)
- Fix 3 pre-existing browser test failures (HUD layer contract + Golf overlay) (CG-0MRIYGE410044PZI)
- [test-failure] tutorial-text-updates > T3 body text (AC2) > should mention the cost of the card to buy — failing test (CG-0MRFP08A40088F5L)
- Fix toggle label format inconsistency in GymLayoutOwnershipScene (CG-0MRE3ZKF10074GER)
- Fix removeUngrouped to only target ungrouped items (CG-0MRE3ZKFW002S3ND)
### Other
- CardMemoryTracker: core memory model (CG-0MRCLYBUR002GFCZ)
- Augment countVisibleRanks with memory support (CG-0MRCLYBVH0011SA4)
- Integrate memory into chooseDrawSource (CG-0MRCLYBVM005XRXA)
- GolfScene wires skill rating through to AI (CG-0MRCLYBWM001FA8H)
- AiPlayer integration: skill rating and memory tracking (CG-0MRCLYBYW003HMPT)
- Documentation and test coverage (CG-0MRCMVBJM001MJ45)
- Replace $ with € symbol across all games (CG-0MQQHESZW002QCS6)
- Integrate currency symbol with localization system (CG-0MQQHETXO0064TMZ)
- Update all thumbnails on the menu screen (CG-0MQK3CJUX0043I3U)
- Create shared HintBar component in core engine UI (CG-0MQQHESOG002VOBK)
- Migrate Main Street and other games to use shared HintBar (CG-0MQQHETIF002MZZD)
- Add Face Up/Down toggle button for discard pile (CG-0MQQIMO18001NZNE)

## v0.1.4 (2026-07-10)
### Features
- Migrate Gym scenes to Screen Layout Language (SLL) (CG-0MPF8WT920076RQ5)
Expand Down
3 changes: 2 additions & 1 deletion docs/DEVELOPER.md
Original file line number Diff line number Diff line change
Expand Up @@ -263,7 +263,8 @@ example-games/
│ ├── GolfRules.ts Turn legality, move application, round-end detection
│ ├── GolfScoring.ts Card point values, grid scoring, column matching
│ ├── GolfGame.ts Game orchestration (session setup, turn execution)
│ ├── AiStrategy.ts AI strategies (RandomStrategy, GreedyStrategy)
│ ├── AiStrategy.ts AI players with configurable skillRating (default 80) and
│ │ CardMemoryTracker for discard-pile memory across turns
│ ├── GameTranscript.ts Transcript recording (TranscriptRecorder)
│ └── scenes/
│ └── GolfScene.ts Phaser scene (full visual interface)
Expand Down
6 changes: 4 additions & 2 deletions docs/SFX_CONVENTION.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# SFX Key Naming Convention

> **Last updated:** 2026-06-17
> **Related work-item:** CG-0MM1OQN4E153GJY3 — SFX key naming inconsistency and potential collision
> **Last updated:** 2026-07-11
> **Related work-items:** CG-0MM1OQN4E153GJY3 — SFX key naming inconsistency and potential collision; CG-0MQK1GC79000CQIJ — Illegal Move sound

## Overview

Expand Down Expand Up @@ -36,6 +36,7 @@ const MY_SFX_KEYS = {
| `COMMON_SFX_KEYS.TURN_CHANGE` | `sfx-turn-change` | Active player changes |
| `COMMON_SFX_KEYS.ROUND_END` | `sfx-round-end` | A round has ended |
| `COMMON_SFX_KEYS.SCORE_REVEAL` | `sfx-score-reveal` | Scores are being revealed |
| `COMMON_SFX_KEYS.ILLEGAL_MOVE` | `sfx-illegal-move` | Illegal / invalid action feedback (played automatically by {@link shakeIllegalMove}) |

## Audio Asset Organization

Expand All @@ -46,6 +47,7 @@ public/assets/audio/
├── default/ # Fallback sounds for common SFX keys
│ ├── card-draw.wav
│ ├── card-flip.wav
│ ├── illegal-move.wav
│ ├── ui-click.wav
│ └── ...
├── golf/ # Game-specific audio
Expand Down
Loading
Loading