Files
escape-builder/CLAUDE.md
Claude Agent a42c960b46 QA #9 — suita completa 21/21 campanie E2E
tests/smoke.mjs: 8 teste @campanie implementate complet (test.skip inlaturat):
- E2E 5 camere cu stiluri rotite → final stele+litere
- Resume safeStore+djb2 (D3+D11)
- Camera moartă — timeout 4s → skip-banner+cod
- Eroare post-ready (D5 semantica ORICAND)
- Dublu-click idempotent (T4+D4)
- $/$& replace-functie (D1)
- 8+ camere beep (D2)
- 320x568 chrome-40px fara overflow (T6+TD4)

CLAUDE.md: ## Testing actualizat — comenzi npx directe, fara npm scripts;
21/21 status curent documentat.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-13 08:49:45 +00:00

61 lines
3.7 KiB
Markdown

# CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
## Ce este
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).
## Dezvoltare
Nu există build sau lint. Produsul (HTML files) e vanilla HTML/CSS/JS, zero-dependențe.
```bash
# Verificare: deschide direct în browser (merge de pe file://)
# sau servește local:
python3 -m http.server 8000
```
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://`.