- Nouveau db/assert_not_none.py : centralise l'unique suppression
Bandit/Ruff (# nosec B101 / # noqa: S101) de narrowing de type dans
tout le moteur. Remplace 11 sites disperses (ai/chat.py, ai/tools.py,
routes/scenes/scene_object_{add,collision,geometry,personnage_data,
quiz_config}.py, screens/payload/full_game_payload.py,
scripts/build_demo_dialogues.py) qui repetaient chacun le meme
commentaire empile - Sonar (python:S7632) ne parse pas deux
commentaires # sur une ligne, meme si Ruff et Bandit les acceptent
chacun tres bien (contrainte structurelle documentee dans
CODE_QUALITY.md : chaque outil exige son propre mot-cle immediatement
apres un #, aucun format a un seul # ne peut satisfaire les deux a la
fois). Les 6 sites # nosec B608 (SQL dynamique) restent inchanges,
nature differente, hors perimetre de ce refactor.
Verifie : mypy --strict propre (389 fichiers), ruff/bandit/import-linter
clean, suite complete verte (591 tests), scan SonarQube local relance
confirmant S7632 a 7 (1 seul site restant dans le helper lui-meme + les
6 B608), 0 bug (une regression S8371 trouvee et corrigee en route).
- 4 sites |safe repositionnes sur leur ligne exacte (scene_edit.html,
register_2fa.html, onboarding_new.html, play.html) - le marqueur
NOSONAR etait sur la ligne precedente par erreur (meme piege que celui
documente pour S8371 ci-dessus). Confirme par scan que meme corrige,
l'analyseur Web de Sonar ne supporte aucune syntaxe de suppression
inline testee pour la regle Web:S5247 - documente comme limitation
technique connue dans CODE_QUALITY.md plutot que force.
- CODE_QUALITY.md (nouveau) : reference complete du dispositif qualite -
vue d'ensemble par outil, configuration de chacun, commandes de lancement
local, procedure de justification d'une exception (avec le format exact
attendu par Bandit/Ruff/Sonar, verifie empiriquement), table des 10
exceptions documentees, backlog (djLint H021, code smells Sonar).
djLint (H021, styles inline) volontairement saute pour ce commit - meme
backlog assume que les commits precedents, aucun rapport avec ce changement.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
47 lines
2.3 KiB
HTML
47 lines
2.3 KiB
HTML
{% extends "base.html" %}
|
|
{% block title %}Forge Engine — Créer mon jeu{% endblock %}
|
|
{% block body_class %}objectEditBody{% endblock %}
|
|
{% block content_class %}content-wide onboardingPage{% endblock %}
|
|
{% block content %}
|
|
{% if error %}<p class="hint onboardingError">{{ error }}</p>{% endif %}
|
|
|
|
<form method="post" action="{{ url_for('onboarding_new') }}" id="onboardingForm">
|
|
<input type="hidden" name="onboarding_type" id="onboardingTypeHidden">
|
|
|
|
<div class="onboardingViewport">
|
|
<div class="onboardingTrack" id="onboardingTrack">
|
|
|
|
<section class="onboardingStep onboardingStep--pick">
|
|
<h2 class="onboardingTitle">Quel jeu veux-tu créer ?</h2>
|
|
<div class="onboardingGrid">
|
|
{% for key, info in onboarding_types.items() %}
|
|
<button type="button" class="onboardingCard" data-type="{{ key }}" data-label="{{ info.label }}">
|
|
<span class="onboardingCardInner">
|
|
<span class="onboardingCardFace onboardingCardFront">
|
|
<span class="onboardingCardIcon">{{ info.icon }}</span>
|
|
<span class="onboardingCardLabel">{{ info.label }}</span>
|
|
</span>
|
|
<span class="onboardingCardFace onboardingCardBack">
|
|
<span class="onboardingCardDesc">{{ info.description|safe }}</span> {# //NOSONAR S5247 - description est du HTML fixe, code en dur dans db.ONBOARDING_TYPES (aucune saisie utilisateur) #}
|
|
</span>
|
|
</span>
|
|
</button>
|
|
{% endfor %}
|
|
</div>
|
|
</section>
|
|
|
|
<section class="onboardingStep onboardingStep--name">
|
|
<button type="button" class="onboardingBackBtn" id="onboardingBackBtn">← Changer de type</button>
|
|
<div class="onboardingNameBox">
|
|
<label class="onboardingTitle" for="onboardingNameInput">Quel est le nom de votre jeu ?</label>
|
|
<input type="text" name="name" id="onboardingNameInput" class="onboardingNameInput" placeholder="ex. CyberQuest RGPD" autocomplete="off">
|
|
<button type="submit" id="onboardingSubmitBtn" class="primary onboardingSubmitBtn" disabled>Créer mon jeu</button>
|
|
</div>
|
|
</section>
|
|
|
|
</div>
|
|
</div>
|
|
</form>
|
|
<script src="{{ url_for('static', filename='js/onboarding/onboarding_new.js') }}"></script>
|
|
{% endblock %}
|