Ă€ propos du portail
Ce que ce portail couvre, comment il fonctionne, et pourquoi il existe.
🎯 Objectif
Le portail n'est pas un simple aide-mémoire : c'est un outil de pilotage du parc des 137 outils pyRevit du plugin ANMA. Il répond à 4 questions :
- Où j'en suis ? — un verdict de maturité par outil (déployable / à maintenir / brut).
- Par quoi je commence ? — un backlog de corrections priorisé (page Corrections).
- Que fusionner / mutualiser ? — doublons et code commun (page Architecture).
- Comment ça marche ? — doc auto-extraite du code + explication IA à la demande.
🚦 Verdict de maturité
Calculé à partir des diagnostics, pas d'un score abstrait :
- Brut — au moins 1 diagnostic
error. (52 outils) - À maintenir — 0 erreur mais des warnings. (65 outils)
- Déployable — 0 erreur, 0 warning. (20 outils)
Un score sur 100 (4 axes : Documentation, Robustesse, Structure, Conventions) complète ce verdict mais ne le décide pas — c'est la présence de problèmes concrets qui tranche.
⚙️ Comment ça fonctionne
Ă€ chaque git push, Cloudflare relance le scanner Python (analyse statique
par AST, 100% déterministe, zéro dépendance), régénère les JSON, et reconstruit le site.
Aucune base de données : la seule source de vérité est le code des plugins.
L'explication détaillée d'un outil est générée à la demande par IA (Cloudflare Workers AI) en lisant le code source, et mise en cache. C'est la seule partie non déterministe du portail.
🔍 Critères analysés
Chaque outil est passé au crible de ces règles. Les error bloquent le
déploiement, les warning demandent une maintenance, les info
sont des pistes d'amélioration.
Sécurité & portabilité (bloqueurs)
| Code | Sévérité | Détecte |
|---|---|---|
HARDCODED_SECRET | error | Clé API, mot de passe, token ou JWT codé en dur |
EXEC_USAGE | error | exec()/eval() — exécution de code arbitraire |
HARDCODED_ELEMENTID | error | ElementId numérique en dur (casse hors du projet) |
HARDCODED_URL | warning | URL / endpoint codé en dur |
HARDCODED_GUID | warning | GUID littéral en dur |
HARDCODED_PATH | warning | Chemin absolu (C:\…, \\serveur) en dur |
Découplage & interface
| Code | Sévérité | Détecte |
|---|---|---|
PYREVIT_COUPLING | warning | Dépendance au framework pyRevit (objectif portabilité) |
UI_NOT_WPF | warning | Interface non-WPF (pyrevit.forms, WinForms) |
WPF_NO_XAML | info | Interface WPF construite en code, sans fichier .xaml |
WILDCARD_IMPORT | info | from X import * — masque les dépendances |
Robustesse
| Code | Sévérité | Détecte |
|---|---|---|
NO_TRY_EXCEPT | error | Aucun try/except sur > 30 lignes |
TRANSACTION_NO_TRY | error | Transaction Revit sans try/except (risque de corruption) |
BARE_EXCEPT | warning | except: nu (avale toutes les exceptions) |
Documentation & métadonnées
| Code | Sévérité | Détecte |
|---|---|---|
NO_TITLE | error | __title__ manquant |
NO_DOC | error | __doc__ absent ou trop court |
NO_AUTHOR | warning | __author__ manquant |
NO_ICON | warning | icon.png absent |
NO_EXTRA_DOC | info | Ni bundle.yaml ni DOCUMENTATION.md |
Structure
| Code | Sévérité | Détecte |
|---|---|---|
NO_FUNCTIONS | warning | Code procédural sans fonction (> 80 lignes) |
HIGH_NESTING | warning | Imbrication trop profonde |
LOW_COMMENTS | warning | Très peu de commentaires |
LARGE_SCRIPT | info | > 800 lignes — envisager un découpage |
SMALL_SCRIPT | info | Script potentiellement incomplet |
STALE | warning | Dernier commit > 12 mois |
⚠️ Limites connues
- Les détections d'UI, de secrets et de code en dur sont heuristiques (motifs) — fiables mais non exhaustives.
- 5 scripts en syntaxe Python 2 ne sont pas analysables par l'AST Python 3 : ils apparaissent sans diagnostics (angle mort Ă corriger).
- La détection de doublons (page Architecture) se base sur les noms : elle rate le code identique sous un nom différent.
- Le portail signale les problèmes ; il ne corrige rien automatiquement.