release: promote develop → staging (1.4.0) - #176
Closed
decarvalhoe wants to merge 9 commits into
Closed
Conversation
Co-authored-by: decarvalhoe <dev@realisons.com> Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* fix(i18n): compléter l'anglais de l'UI — français résiduel traduit Revue complète de l'UI en anglais (audit carte + salle + examen + bac à sable + tas/sortie) : plus aucun français résiduel. - game.js : bac à sable (titre/hint EXÉCUTÉ), résumé d'examen (score, temps, recommencer, ← carte), ligne de stats locales, « (réf) ». - memoryView : « tas — mémoire dynamique », « // sortie », alloué/libéré. - components/memory : libellés d'état des casiers (normal/modifié/ pointeur/alloué/libéré). - regionMapView : titre de la fenêtre carte, adresses de régions (« pile basse », « la pile »). - Bac à sable (sandbox.js) ajouté aux niveaux traduits (id 'sandbox'). - en.js : toutes les clés correspondantes. FR inchangé (défaut) · 621 tests · 8 écrans visuels · lint clean. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * docs(i18n): README/CONTRIBUTING/WORKFLOW bilingues + gate de release doc - README.en.md, CONTRIBUTING.en.md, docs/WORKFLOW.en.md (traductions complètes) + liens de langue (🌐) sur les versions FR. - README FR : badges/chiffres à jour (v1.3.0, 621 tests, 8 écrans, 280 KB, section i18n). - .github/workflows/docs-gate.yml : bloque toute PR qui bump la version de package.json sans entrée CHANGELOG correspondante ni badge README (FR + EN) à jour → mise à jour de la doc OBLIGATOIRE à chaque release. Inerte sans bump. Rappel « description GitHub » en notice. - Description du dépôt GitHub réécrite (bilingue, état actuel) + topics bilingual/i18n/gitflow. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * fix(a11y): refléter la langue sur <html lang> (lecteurs d'écran) Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * fix(ci): docs-gate.yml — corriger le parsing YAML (run en bloc) Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> --------- Co-authored-by: decarvalhoe <dev@realisons.com> Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-authored-by: decarvalhoe <dev@realisons.com> Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…0-1, #162) Ferme le trou qui laissait passer les oublis de traduction. La garde tests/game/i18n-guard.test.mjs scanne les vues et échoue si : - un littéral de « prose » rendu (valeur d'une prop non structurelle) n'est pas une clé enregistrée du pack EN ; - une clé passée à t('…') n'existe pas dans le pack (fuite silencieuse FR en EN). Fuites réelles corrigées, invisibles à l'audit précédent (title/aria-label, tables de clés-source) : - carte : « tu es ici / verrouillé / résolu » (DEFAULT_NOTE) restaient en FR ; - programme : title/aria-label « monter/descendre/retirer » ; - « ta libft », « n° », labels octets/pile déjà traduits mais non routés par t(). Nouvel écran visuel en-carte (carte en EN) : verrouille la non-régression de la fuite signalée. 655 tests (+34), 9 écrans visuels. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Cause racine des fuites de contenu : le lint ne couvrait que src/engine. Désormais `npm run lint` = `eslint src tests` — la couche UI/jeu suit les mêmes standards que le moteur. - eslint.config.js : src/ui rejoint le périmètre ; eqeqeq garde l'idiome délibéré `x == null` (null: 'ignore'), === strict partout ailleurs ; les tests reçoivent les globals browser (callbacks page.evaluate du harnais). - Corrections réelles révélées : import LEVELS mort (world.js), let→const, == → === hors null-checks. - Refactors pour passer sous 50 lignes/fonction (standard du moteur), à comportement identique (tests + 9 écrans visuels à 0,00 %) : createTracker → helpers purs read/write/applyState/collectDue ; renderRegionMap → helpers roomLink/regionBlock ; Game.evaluate → extraction evaluateSandbox. 655 tests OK, lint vert sur tout src/+tests/, visuels conformes. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…#165) Audit d'accessibilité outillé et corrections, sans régression visuelle (9 écrans à 0,00 %). - axe-core (devDep) exécuté par le harnais sur 3 vues (carte FR/EN, salle) : la CI échoue sur toute violation serious/critical (WCAG 2.x AA). État : 0. - Contraste : `.mf-locker__addr` — `opacity:.7` retirée (passait sous 4.5:1, détecté par axe). - Focus visible (2.4.7) : anneau --ring sur tous les interactifs. - Contournement (2.4.1) : lien d'évitement « Aller au contenu » (bilingue). - Titres (1.3.1) : LA RAM / mission / région en <h2>/<h3> réels (h1→h2→h3), marges UA neutralisées → pixel-identique. - prefers-contrast: more (bordures/texte renforcés, scanlines coupées). - docs/A11Y.md étendu (audit runtime + couverture clavier/ARIA + limites). 655 tests, lint vert, 9 écrans + 3 audits axe conformes. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…E10-2, #163) Le CSS était codé en dur dans le JS (style: 'display:flex;…' massifs) : difficile à thématiser/maintenir et bloquant pour une CSP stricte (style-src 'unsafe-inline' requis). Extraction vers styles/views.css. - Zéro attribut style="" statique dans les vues (9 fichiers). - États dynamiques (actif/ouvert/propre/cliquable) → classes modificatrices (.mf-frame--active, .mf-region-block--open, .mf-valgrind--clean…) plutôt que des chaînes de style interpolées. - Seul reste du CSSOM légitime et dynamique (géométrie de l'overlay de fils SVG, glow pointeur) — non concerné par style-src, calculé au runtime. - Rendu pixel-identique : 9 écrans du harnais à 0,00 % (sources ET dist/). Débloque la CSP stricte (#166). 655 tests, lint vert, poids 254 KB. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
) CSP stricte SANS 'unsafe-inline', active via <meta http-equiv> et vérifiée en CI. Débloquée par l'extraction des styles inline (#163). - index.html : script de pré-peinture du thème externalisé (src/theme-init.js), bloc <style> déplacé dans main.css, attribut style="" du bouton langue → classe (.theme-toggle--lang). Plus aucun inline → script-src/style-src 'self'. - CSP : default-src 'self' ; object-src 'none' ; frame-ancestors 'none' ; base-uri/form-action 'self' ; img-src 'self' data: (favicon). Seule exception documentée : Google Fonts (style-src/font-src scopés à ces 2 domaines). - <meta name="referrer" content="no-referrer">. - Harnais : nouveau check checkCSP (écoute securitypolicyviolation sur carte + salle → échoue à la moindre violation) ; normalisation du rendu via feuille construite (adoptedStyleSheets, CSP-safe) au lieu d'un <style> injecté ; bypass CSP ciblé pour l'injection d'axe (outil de test). - docs/SECURITY.md : CSP, exception fonts, en-têtes serveur/CDN recommandés. Les 9 écrans rendus CSP active à 0,00 % (sources ET dist/). 655 tests, lint vert. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Garde i18n, a11y outillée (axe-core), CSP stricte, styles inline → classes, lint étendu à tout src/. CHANGELOG + badges README (FR/EN) à jour. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Promotion 1.4.0 (EPIC 10).