Files
Forge-Engine/vulture_whitelist.py
williamandClaude Sonnet 5 864ae697fd Ajoute le système de modèles/thèmes de document ("Utiliser un modèle")
Nouveau bouton dans le topbar de l'éditeur, à côté d'Aperçu, qui ouvre
une modale listant les thèmes du catalogue (document_engine/themes/).
Cliquer un thème charge un VRAI aperçu (rendu serveur réel dans un
iframe, jamais une resucée CSS côté client) avec le choix de garder le
contenu actuel ou de le remplacer par le contenu de démonstration du
modèle.

Architecture pensée pour une centaine de thèmes futurs : chaque thème
est une feuille de style externe (static/document/themes/<id>.css) qui
habille les classes fixes du moteur, jamais du code qui en changerait
la structure. Premier thème implémenté pour valider le mécanisme :
"Sécurité Incendie" (6 pages de contenu réel, quiz inclus).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-24 09:12:57 +02:00

41 lines
1.8 KiB
Python

# Whitelist Vulture — faux positifs STRUCTURELS uniquement (jamais une
# excuse pour ignorer du vrai code mort). Vulture ne "voit" pas qu'un nom
# est utilise par CONVENTION (une route Flask enregistree par decorateur
# et jamais appelee directement en Python, un hook appele par son nom par
# le framework, un champ lu dynamiquement via getattr/**kwargs...) : ce
# fichier reference ces noms pour les faire compter comme "utilises",
# sans jamais etre execute lui-meme (voir CODE_QUALITY.md, section
# Vulture, pour la procedure de mise a jour).
#
# Vide pour l'instant — rempli en Phase 3 au fur et a mesure des VRAIS
# faux positifs releves par le rapport de la Phase 2, jamais en avance de
# phase.
# app.py::from core import (auth_guard, csrf, csrf_guard, db_teardown_guard,
# jinja_filters, recovery_codes_flash) — chacun est un module importe pour
# son SEUL effet de bord a l'import (enregistrement d'un hook/filtre Jinja
# aupres de Flask), jamais reference par son nom ensuite ; deja marque
# # noqa: F401 pour ruff/pyflakes, mais Vulture ne lit pas noqa.
from core import (
auth_guard,
csrf,
csrf_guard,
db_teardown_guard,
jinja_filters,
recovery_codes_flash,
)
_ = (auth_guard, csrf, csrf_guard, db_teardown_guard, jinja_filters, recovery_codes_flash)
# routes/document/document_theme_preview.py::document_theme_preview(slug, theme_id) —
# `slug` doit rester dans la signature (Flask appelle la vue avec un
# kwarg par segment <slug>/<theme_id> de la route, TypeError sinon), mais
# le corps de la fonction ne s'en sert pas : l'aperçu d'un thème ne
# dépend d'aucune donnée DU support, `slug` ne sert qu'à laisser
# core/auth_guard.py (générique sur `request.view_args.get("slug")`)
# vérifier la propriété avant d'atteindre la vue.
def _unused_but_required_route_param(slug: str) -> None:
_ = slug