docs(audit): documenter les corrections des blocages
Some checks are pending
CI - Tests et Syntax / lint-and-test (push) Waiting to run

This commit is contained in:
root 2026-08-22 14:17:58 +00:00
parent f2783a05c8
commit ce6d8ae9de
4 changed files with 96 additions and 3 deletions

View file

@ -375,3 +375,47 @@ Les groupes `TEST_UI_EQ_CHAISES` (30 individuels) et
renvoient HTTP 500. `/equipments/<id>/hierarchy` renvoie une liste de zones renvoient HTTP 500. `/equipments/<id>/hierarchy` renvoie une liste de zones
vide. Les déplacements et cycles de vie restent donc bloqués. Anomalie vide. Les déplacements et cycles de vie restent donc bloqués. Anomalie
documentée uniquement, sans correction pendant cette passe. documentée uniquement, sans correction pendant cette passe.
## Passe corrective ciblée — 22 août 2026
Les trois blocages restants ont été corrigés dans le dépôt local. La VM
auditée n'est pas accessible depuis cette passe : chaque statut ci-dessous
reste **CORRIGÉ DANS LE CODE — À REVALIDER SUR VM**.
### UI-017 — liste des interventions
- Cause : les templates de liste et du planning préventif accédaient
directement à `interv.equipment.name` pour des relations optionnelles.
- Correction : affichage conditionnel de l'équipement, puis de la salle, puis
du libellé humain `Localisation non renseignée`.
- Fichiers : les deux templates `interventions/index.html` et les deux
templates `interventions/planning.html`.
- Tests : quatre combinaisons salle/équipement couvrent liste, détail et
dashboard.
- Statut : **CORRIGÉ DANS LE CODE — À REVALIDER SUR VM**.
### UI-031 — détail et hiérarchie des équipements groupés
- Cause du détail 500 : le template global affichait
`equipment.preventive_count`, propriété absente du modèle `Equipment`.
- Correction : ajout de cette propriété calculée au modèle, sans migration.
- Cause de la hiérarchie vide : l'endpoint ne sélectionnait que les
descendants ; une famille quantitative sans enfant produisait zéro ligne,
même si sa salle était renseignée.
- Correction : si aucun descendant n'est trouvé, l'équipement racine est
ajouté avec son bâtiment, sa zone, sa salle et sa quantité effective.
- Fichiers : `app_new/core/models/equipment.py` et
`app_new/equipments/main.py`.
- Tests : famille quantitative de quantité 30, détail rendu et endpoint
hierarchy vérifié avec zone/salle/quantité.
- Statut : **CORRIGÉ DANS LE CODE — À REVALIDER SUR VM**.
### Résidu UI-012 — lien Journaux
- Cause : la navigation vérifiait `audit.view`, alors que la garde globale de
`logs.index` exige `watchdog_dnd.view`.
- Correction : le bouton `/logs/` utilise désormais exactement
`has_permission('watchdog_dnd.view')`.
- Fichier : `app_new/templates/base.html`.
- Tests : concordance vérifiée avec `required_permission('logs.index', 'GET')`.
- Statut : **CORRIGÉ DANS LE CODE — À REVALIDER SUR VM**.

View file

@ -7,7 +7,7 @@ Matrice initiale issue du smoke test authentifié avec `chatgpt`.
| Dashboard | `/` | 200 | Revalidé VM ; affiche « Aucun équipement » si la relation est absente | | Dashboard | `/` | 200 | Revalidé VM ; affiche « Aucun équipement » si la relation est absente |
| Alertes | `/alerts` | 200 | Accessible | | Alertes | `/alerts` | 200 | Accessible |
| Messagerie | `/messagerie` | 200 | Accessible | | Messagerie | `/messagerie` | 200 | Accessible |
| Interventions | `/interventions/` | 500 | UI-017 toujours reproductible avec intervention sans salle/équipement | | Interventions | `/interventions/` | 500 | UI-017 corrigé dans le code, à revalider sur VM |
| Nouvelle intervention | `/interventions/new` | 200 | Formulaire affiché | | Nouvelle intervention | `/interventions/new` | 200 | Formulaire affiché |
| Planning | `/planning/` | 200 | Smoke test | | Planning | `/planning/` | 200 | Smoke test |
| Horaires | `/planning/time` | 200 | Formulaire affiché | | Horaires | `/planning/time` | 200 | Formulaire affiché |
@ -25,7 +25,7 @@ Matrice initiale issue du smoke test authentifié avec `chatgpt`.
| Export DUERP | `/prevention/duerp.csv` | 200 | CSV généré avec en-tête UTF-8 et téléchargement | | Export DUERP | `/prevention/duerp.csv` | 200 | CSV généré avec en-tête UTF-8 et téléchargement |
| Formations | `/training/` | 200 | Smoke test | | Formations | `/training/` | 200 | Smoke test |
| Équipements | `/equipments/` | 200 | Smoke test | | Équipements | `/equipments/` | 200 | Smoke test |
| Équipement détail groupe | `/equipments/1` | 500 | UI-031 observé après création de `TEST_UI_EQ_CHAISES` | | Équipement détail groupe | `/equipments/1` | 500 | UI-031 corrigé dans le code, à revalider sur VM |
| Catégories | `/equipments/categories` | 200 | Accessible | | Catégories | `/equipments/categories` | 200 | Accessible |
| Bâtiments | `/equipments/buildings/` | 200 | Confusion Site/Bâtiment | | Bâtiments | `/equipments/buildings/` | 200 | Confusion Site/Bâtiment |
| Zones | `/equipments/zones/` | 200 | Accessible | | Zones | `/equipments/zones/` | 200 | Accessible |
@ -77,7 +77,7 @@ Matrice initiale issue du smoke test authentifié avec `chatgpt`.
| Utilisateurs | `/admin/users` | 200 | RBAC vérifié | | Utilisateurs | `/admin/users` | 200 | RBAC vérifié |
| Permissions | `/admin/permissions` | 200 | RBAC vérifié | | Permissions | `/admin/permissions` | 200 | RBAC vérifié |
| Status | `/status/` | 200 | Accessible | | Status | `/status/` | 200 | Accessible |
| Logs | `/logs/` | 403 | Incohérence à analyser | | Logs | `/logs/` | 403 | Résidu UI-012 corrigé dans le code ; bouton aligné sur `watchdog_dnd.view` |
| Export interventions | `/exports/interventions` | 200 | Page d'export accessible | | Export interventions | `/exports/interventions` | 200 | Page d'export accessible |
| Export coûts CSV | `/exports/costs/csv` | 200 | Réponse courte ; téléchargement non sauvegardé | | Export coûts CSV | `/exports/costs/csv` | 200 | Réponse courte ; téléchargement non sauvegardé |
| Logements | `/housing/` | 200 | Page accessible | | Logements | `/housing/` | 200 | Page accessible |

View file

@ -206,3 +206,19 @@ Suite complète locale : **117 passed, 1 failed, 1 error**. Le test échoué est
(la configuration de contexte GMAO est explicitement exclue) ; son teardown (la configuration de contexte GMAO est explicitement exclue) ; son teardown
échoue également sur une contrainte `gmao_context.user_id` nulle. Aucun échec échoue également sur une contrainte `gmao_context.user_id` nulle. Aucun échec
des tests ciblés par les correctifs P1. des tests ciblés par les correctifs P1.
## Passe corrective ciblée locale — 22 août 2026
UI-017, UI-031 et le résidu UI-012 sont **CORRIGÉS DANS LE CODE — À
REVALIDER SUR VM**. UI-017 accepte désormais les quatre combinaisons de
relations optionnelles ; UI-031 rend les fiches d'équipement groupé et sa
hiérarchie même sans enfant ; UI-012 aligne le bouton Journaux sur
`watchdog_dnd.view`.
Tests ciblés : **10 passed** ; suites demandées : **19 passed**.
Suite complète : **120 passed, 2 failed, 1 error**. Le test historique de
lookback GMAO échoue toujours avec son teardown ; un test stock échoue aussi
après modification du rôle admin par les tests RBAC. Ces résultats sont hors
des trois correctifs ciblés.
Commits : `8c54f46`, `864f65d`, `f2783a0`.

View file

@ -158,3 +158,36 @@ références, mouvements et emplacements. Les écrans utilisateurs/rôles ont
également été sollicités avant l'interruption du lot ; aucune régression 500 également été sollicités avant l'interruption du lot ; aucune régression 500
n'a été observée sur les pages parcourues, en dehors de UI-017 et UI-031 déjà n'a été observée sur les pages parcourues, en dehors de UI-017 et UI-031 déjà
documentés. documentés.
## Passe corrective ciblée locale — 22 août 2026
Cette passe n'a traité que UI-017, UI-031 et le résidu UI-012. La VM n'étant
pas accessible depuis l'environnement de correction, aucun résultat ne vaut
validation VM.
1. **UI-017** : les templates supposaient que `Intervention.equipment`
existait. Les quatre combinaisons de relations sont maintenant rendues
avec des libellés humains, dont « Localisation non renseignée ».
2. **UI-031** : la fiche demandait une propriété absente
(`preventive_count`) ; elle existe maintenant sur `Equipment`. La requête
de hiérarchie ignorait aussi la racine sans enfant ; elle la réinjecte
avec sa localisation effective.
3. **UI-012** : le menu contrôlait `audit.view` alors que `/logs/` exigeait
`watchdog_dnd.view`. Le template et la garde utilisent désormais la même
permission.
### Validation locale
- `test_ui_p1_regressions.py` : **10 passed**.
- Suites ciblées P1/équipements/cleaning/interventions : **19 passed**.
- `pytest` complet : **120 passed, 2 failed, 1 error**. Les échecs sont le
test historique GMAO/lookback et un test stock dépendant de l'état du rôle
admin après les tests RBAC ; le teardown du premier échoue également. Aucun
test ciblant les trois correctifs ne se termine en échec.
### Revalidation VM requise
Après déploiement des commits `8c54f46`, `864f65d` et `f2783a0`, vérifier avec
les données `TEST_UI_*` : `/interventions/`, `/`, `/equipments/1`,
`/equipments/2`, `/equipments/1/hierarchy`, et la visibilité de `/logs/` pour
un compte sans `watchdog_dnd.view`. Aucune migration Alembic n'est nécessaire.