Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
24 changes: 24 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,30 @@
Format : [Keep a Changelog](https://keepachangelog.com/fr/1.1.0/) · versioning :
[SemVer](https://semver.org/lang/fr/). Démo : <https://decarvalhoe.github.io/MemoForge/>.

## [1.4.0] — 2026-07-02

Sanification & meilleurs standards du web (EPIC 10) : le code de la couche UI/jeu rejoint la
barre de qualité du moteur.

### Ajouté
- **Garde i18n** (E10-1) : un test échoue si une chaîne visible par le joueur est en dur —
soit non enregistrée dans le pack EN, soit une clé `t()` orpheline. A révélé et corrigé des
fuites invisibles à l'audit précédent (carte EN « tu es ici / verrouillé », `title`/
`aria-label` du réordonnancement). Nouvel écran visuel **carte EN**.
- **A11y WCAG 2.2 AA outillée** (E10-4) : **axe-core** exécuté en CI sur 3 vues (0 violation) ;
focus visible sur tous les interactifs ; lien d'évitement bilingue ; hiérarchie de titres
`h1→h2→h3` réelle ; `prefers-contrast`. Contraste du label d'adresse corrigé. Voir
[`docs/A11Y.md`](docs/A11Y.md).
- **CSP stricte** (E10-5) sans `'unsafe-inline'`, vérifiée en CI (écoute
`securitypolicyviolation`) ; en-têtes serveur recommandés. Voir
[`docs/SECURITY.md`](docs/SECURITY.md).

### Modifié
- **Styles inline → classes** (E10-2) : plus aucun `style=""` statique dans les vues (nouveau
`styles/views.css`) ; états dynamiques via classes modificatrices. Rendu pixel-identique.
- **Lint étendu à tout `src/` et `tests/`** (E10-3) — cause racine des fuites — avec refactors
sous 50 lignes/fonction et `eqeqeq` (idiome `== null` préservé).

## [1.3.1] — 2026-07-02

Finition bilingue et durcissement du process.
Expand Down
7 changes: 4 additions & 3 deletions README.en.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@

[![CI](https://github.com/decarvalhoe/MemoForge/actions/workflows/ci.yml/badge.svg)](https://github.com/decarvalhoe/MemoForge/actions/workflows/ci.yml)
[![Deploy](https://github.com/decarvalhoe/MemoForge/actions/workflows/deploy.yml/badge.svg)](https://github.com/decarvalhoe/MemoForge/actions/workflows/deploy.yml)
![Version](https://img.shields.io/badge/version-1.3.1-46E08A)
![Version](https://img.shields.io/badge/version-1.4.0-46E08A)
![Engine coverage](https://img.shields.io/badge/engine_coverage-100%25-46E08A)
![Runtime dependencies](https://img.shields.io/badge/runtime_dependencies-0-46E08A)

Expand Down Expand Up @@ -105,9 +105,10 @@ Every PR passes four gates in CI:

| Gate | Content |
|---|---|
| **Tests** | 621 `node:test` tests — engine, levels (each lure verified as *teaching*), world, medals, pitfalls, a11y · **engine coverage ≥ 90 % required (100 % effective)** |
| **Tests** | 655 `node:test` tests — engine, levels (each lure verified as *teaching*), world, medals, pitfalls, a11y, i18n guard · **engine coverage ≥ 90 % required (100 % effective)** |
| **Non-regression** | data-driven sweep: every level must stay solvable via its canonical path |
| **Key screens** | Puppeteer harness: 8 screens captured (incl. mobile and EN), structural invariants + pixel diff ([`docs/TESTING.md`](docs/TESTING.md)) |
| **Key screens** | Puppeteer harness: 9 screens captured (incl. mobile, EN, EN map), structural invariants + pixel diff ([`docs/TESTING.md`](docs/TESTING.md)) |
| **A11y & security** | axe-core (WCAG 2.x AA, 0 violations) + strict-CSP guard, both enforced in CI ([`docs/A11Y.md`](docs/A11Y.md), [`docs/SECURITY.md`](docs/SECURITY.md)) |
| **Perf budgets** | weight ≤ 280 KB, render ≤ 16 ms — measured and enforced ([`docs/PERF.md`](docs/PERF.md)) |

The production artifact (`npm run build` → `dist/`) is re-verified by the same harness before
Expand Down
7 changes: 4 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@

[![CI](https://github.com/decarvalhoe/MemoForge/actions/workflows/ci.yml/badge.svg)](https://github.com/decarvalhoe/MemoForge/actions/workflows/ci.yml)
[![Deploy](https://github.com/decarvalhoe/MemoForge/actions/workflows/deploy.yml/badge.svg)](https://github.com/decarvalhoe/MemoForge/actions/workflows/deploy.yml)
![Version](https://img.shields.io/badge/version-1.3.1-46E08A)
![Version](https://img.shields.io/badge/version-1.4.0-46E08A)
![Couverture moteur](https://img.shields.io/badge/couverture_moteur-100%25-46E08A)
![Dépendances runtime](https://img.shields.io/badge/d%C3%A9pendances_runtime-0-46E08A)

Expand Down Expand Up @@ -106,9 +106,10 @@ Chaque PR passe quatre barrières en CI :

| Barrière | Contenu |
|---|---|
| **Tests** | 621 tests `node:test` — moteur, niveaux (chaque appât vérifié comme *enseignant*), monde, médailles, pièges, a11y · **couverture moteur ≥ 90 % exigée (100 % effective)** |
| **Tests** | 655 tests `node:test` — moteur, niveaux (chaque appât vérifié comme *enseignant*), monde, médailles, pièges, a11y, garde i18n · **couverture moteur ≥ 90 % exigée (100 % effective)** |
| **Non-régression** | balayage data-driven : chaque niveau doit rester résoluble par son chemin canonique |
| **Écrans clés** | harnais Puppeteer : 8 écrans capturés (dont mobile et EN), invariants structurels + comparaison pixel ([`docs/TESTING.md`](docs/TESTING.md)) |
| **Écrans clés** | harnais Puppeteer : 9 écrans capturés (dont mobile, EN, carte EN), invariants structurels + comparaison pixel ([`docs/TESTING.md`](docs/TESTING.md)) |
| **A11y & sécurité** | axe-core (WCAG 2.x AA, 0 violation) + garde CSP stricte, vérifiés en CI ([`docs/A11Y.md`](docs/A11Y.md), [`docs/SECURITY.md`](docs/SECURITY.md)) |
| **Budgets perf** | poids ≤ 280 KB, rendu ≤ 16 ms — mesurés et appliqués ([`docs/PERF.md`](docs/PERF.md)) |

L'artefact de prod (`npm run build` → `dist/`) est revérifié par le même harnais avant
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "memoforge",
"version": "1.3.1",
"version": "1.4.0",
"private": true,
"type": "module",
"description": "Jeu de puzzle pour comprendre les pointeurs et la mémoire C",
Expand Down
Loading