- Lot 1 (S8786, ReDoS) : 5 sites documentes NOSONAR apres preuve empirique
(script reproductible docs/redos_probe_s8786.js), aucune reecriture
defensive necessaire.
- Lot 2 (S2703, variable globale implicite) : bug reel trouve et corrige
(SCENE_OBJECT_NAMES en const au lieu de let, cassait la reassignation
cross-script depuis scene-editor.js) + test de non-regression ; 4 autres
sites confirmes surs et documentes.
- Lot 3 (S2486, exceptions avalees) : 6 sites confirmes surs et
documentes ; 2 sites (config sprite JSON invalide) corriges avec un
console.warn devtools, comportement joueur inchange, couverts par un
nouveau test.
- Retrait du job CI sonarqube (.gitea/workflows/deploy.yml) et du service
prod sonarqube/sonar-postgres (docker-compose.prod.yml) : acces dashboard
bloque par des soucis d'infrastructure reseau (WSL2/pare-feu Hyper-V en
local, reseau Docker partage avec Caddy pas en place en prod), sans lien
avec le code du moteur - mis de cote plutot que de continuer a bloquer
sur de l'infra. Les lots 4+ de modernisation JS dependent de scores
Sonar exacts et sont donc egalement en pause (voir CODE_QUALITY.md).
SKIP=djlint : H021 (styles inline, 49 occurrences) est un backlog deja
documente et assume (CODE_QUALITY.md section 6), sur des templates non
touches par ce commit - deja exclu de la CI pour la meme raison.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Config strictement stricte partout (ruff, mypy --strict, bandit, vulture,
import-linter, eslint, stylelint), aucune regle desactivee "pour ne pas
casser le build" - l'existant a ete corrige pour la satisfaire plutot que
l'inverse. Hooks pre-commit locaux (language: system) bloquants.
- Typage mypy --strict propage a tout le moteur (db, screens, auth, core,
ai, routes, puis publish/scripts/tests/app.py/build_css.py).
- Securite : fuite de handle fichier Windows corrigee dans l'export SCORM
(routes/publish/export_scorm.py), CSRF/RNG non-crypto/xAPI documentes
(# nosec, # NOSONAR justifies), nouveau db.json_for_script() (echappe
"</script>" dans le JSON embarque en <script>, 25 sites).
- Architecture : imports circulaires/F811 nettoyes, contrats
import-linter respectes, code mort retire (vulture).
- Accessibilite : 69 champs de formulaire sans label correctement
associe corriges (for/id ou aria-label) sur 11 templates.
- ESLint/Stylelint : lot mecanique JS/CSS, regles ajustees puis
appliquees (aucune desactivee sans verification individuelle).
- Tests : isolation du compte admin partage (nettoyage ponctuel +
fixture de teardown automatique en filet de securite), suite complete
verte (591 tests Python, 241 tests JS).
- SonarQube Community Build self-heberge (Docker + PostgreSQL) : rapport
complet analyse point par point, faux positifs documentes.
- .gitattributes ajoute (LF force) : core.autocrlf=true sur cette machine
faisait echouer ESLint (linebreak-style) via un bug connu de git
(checkout "en place" qui ignore l'eol force sur un fichier deja
present sur disque - contourne en supprimant puis recreant chaque
fichier suivi).
djLint (H021, styles inline) volontairement saute pour ce commit -
backlog assume, deja documente, traite dans un lot separe.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
- Ajoute clic/survol/affichage-ecran comme declencheurs, et surbrillance,
video, son, visibilite, indication, attendre comme actions, utilisables
aussi bien par l'editeur manuel (menu lateral Objets/Ecran) que par
Ruby (IA), avec blocs deplacables/supprimables dans une chaine.
- Corrige plusieurs variantes du bug "impossible de poser un objet hors
du champ de la camera" (troncature du chainage d'actions a 4 maillons,
fond importe pose a 128x128 au lieu de sa taille reelle, decalage du
fond au vrai glisser-depose, redimensionnement manuel jamais propage
au monde).
- Ajoute un vrai glisser-depose depuis la galerie vers la scene, la
gestion complete de "Mes assets" (sous-sections Fonds/Decors/Sons/
Videos, suppression, reclassement fond<->decor sans re-upload).
- Ajoute l'upload de son (limite 3 min) et de video (MP4 uniquement,
limite 5 min), avec validation de la duree reelle du fichier, et une
replique audio optionnelle dans une bulle de dialogue.
- Fixe la taille de pose d'un objet/decor importe a 200x200 avec une
boite de collision de 150x150.
- Filtre le selecteur de fichier des actions son/video par type reel.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Supprime le concept de "quête" au profit d'un onglet unique "Déclencheurs"
portant toute la logique (dialogue, condition, marquage terminé) directement
sur l'objet de scène. Ajoute une nouvelle action "Modifier une variable"
(réutilisant le vocabulaire du graphe de flow) utilisable après une
collision, une interaction ou une branche de condition, ainsi qu'un
chaînage d'actions ("then") permettant d'enchaîner plusieurs actions à la
suite et d'étendre un déclencheur déjà posé sans le recréer.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>