S4: extinde suita cu gameplay bomberman + overworld + audio (24/24)

3 teste noi commitate (mutate din scratch in suita):
- audio S1: beep._ctx 'running' dupa Incepe aventura (era NO_CTX)
- overworld: mers cu tastatura (ArrowRight) + iesire blocata pana la final
- arcade bomberman: bomba sparge cutie, BFS AI se apropie, respawn pastreaza progres

Arbore AGENTS.md/CLAUDE.md/tests actualizat 21→24 (14 @regresie + 10 @campanie).
Iteratia 2 COMPLETA (S1+S2+S3+S4). Board: TODOS.md S4 [x].

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Claude Agent
2026-06-13 11:01:13 +00:00
parent 4454df9c3b
commit cead5c5156
5 changed files with 168 additions and 58 deletions

View File

@@ -1,60 +1,23 @@
# CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
Ghid pentru Claude Code în acest repo.
## Ce este
## Sursa de adevăr: arborele AGENTS.md
Generator de jocuri escape room: un singur fișier HTML (`escape-builder.html`), fără backend, fără build, fără dependențe. Același set de puzzle-uri se exportă în 5 stiluri de joc diferite (clasic/quiz, terminal retro, arcade pixel, story chat, point-and-click).
Adevărul tehnic (arhitectură, reguli de editare, testare) trăiește în arborele `AGENTS.md`, nu aici.
Înainte să editezi un path, citește lanțul DOX din rădăcină:
## Dezvoltare
- [`AGENTS.md`](AGENTS.md) — root: ce e produsul, Quick Reference, Durable Rules (zero-dep, un singur
fișier, backslash dublu, sentinel `__CFG__`, demo-uri generate, `libJS`/`SNIP` partajate, dispatch
pe 6 motoare).
- [`tests/AGENTS.md`](tests/AGENTS.md) — harness Playwright (fără `package.json` commitat, `npx`,
tag-uri `@regresie`/`@campanie`, 24/24).
- `scratch/AGENTS.md` — prototipuri & QA (gitignored).
Nu există build sau lint. Produsul (HTML files) e vanilla HTML/CSS/JS, zero-dependențe.
Documente de conținut: `DESIGN.md` (design campanie), `TODOS.md` (backlog), `HANDOFF.md` (handoff sesiune),
`README.md` (utilizator final).
```bash
# Verificare: deschide direct în browser (merge de pe file://)
# sau servește local:
python3 -m http.server 8000
```
## Specific Claude Code
Testarea manuală: deschide `escape-builder.html`, schimbă "Stil joc" și verifică preview-ul live (iframe), apoi exportă și verifică jocul standalone. Testele automate → vezi `## Testing`.
## Arhitectură
Toată aplicația trăiește în `escape-builder.html`, organizată în secțiuni comentate (`stare`, `editor`, `preview`, `template-urile jocului exportat`):
- **Stare**: obiectul `state` (titlu, poveste, culoare, `style`, listă `puzzles`), persistat automat în `localStorage` sub cheia `escape-builder-v1`. Export/import ca JSON.
- **Editor** (stânga): formularele scriu direct în `state` via `data-g`; orice modificare cheamă `onChange()` → persist + refresh preview cu debounce 400ms.
- **Preview** (dreapta): `refreshPreview()` setează `iframe.srcdoc = gameHTML(cleanState())` — preview-ul este exact jocul exportat, jucabil.
- **Generare joc**: `gameHTML(cfg)` face dispatch pe `cfg.style` către cele 5 motoare: `gameClassic`, `gameTerminal`, `gameArcade`, `gameChat`, `gamePoint`. Fiecare motor returnează un string HTML complet, standalone (jocul exportat merge offline).
Cod partajat între motoare (injectat în HTML-ul generat):
- `libJS(cfg)`: `CFG` (config serializat), `norm` (normalizare răspuns: fără diacritice/majuscule, virgulă→punct), `checkAnswer`, `starsFor` (3/2/1 stele după încercări/indiciu), `finalWord` (literele puzzle-urilor formează cuvântul final), `beep` (WebAudio), `confetti`.
- `SNIP.*`: fragmente de template partajate — `baseCss`, modal de întrebare (`modalCss/Html/Js`, folosit de arcade și point) și ecranul final (`finalCss/Html/Js`).
Tipuri de puzzle: `free` (răspuns liber), `tf` (adevărat/fals), `choice` (variante pe linii separate în `choices`, cea corectă prefixată cu `*`).
## Testing
Harness Playwright în `tests/smoke.mjs`. **Nu există `package.json` commitat** — produsul rămâne zero-dependențe. Instalare dev o singură dată:
```bash
npm i -D @playwright/test && npx playwright install chromium
```
Rulare (fără npm scripts — direct `npx`):
```bash
npx playwright test tests/smoke.mjs --grep "@regresie" # regresie: 13 teste
npx playwright test tests/smoke.mjs --grep "@campanie" # campanie E2E: 8 teste
npx playwright test tests/smoke.mjs # suita completă: 21 teste
```
**Status curent:** 21/21 trec (13 `@regresie` + 8 `@campanie`).
## Atenție la editare
- Motoarele de joc sunt template literals mari — backslash-urile din codul generat trebuie dublate (`\\u0300`, `\\n`), iar codul generat folosește `var`/`function` clasic intenționat.
- O schimbare în `libJS`/`SNIP` afectează toate cele 5 motoare; verifică fiecare stil în preview.
- `exemplu-*.html` sunt jocuri demo exportate din builder (câte unul per stil). Nu le edita manual — după modificări la motoare, regenerează-le prin exportul din builder.
- `index.html` e doar pagina de landing care leagă builder-ul și demo-urile.
- `node_modules/` (gitignored) e doar dev tooling Playwright. Produsul (fișierele HTML) rămâne zero-dependențe — merge offline de pe `file://`.
- Regulile de mediu și modul non-interactiv (`claude -p`) sunt în `/workspace/CLAUDE.md` (părinte).
- Skill relevant: `/dox` — bootstrap/update al acestui arbore `AGENTS.md`.