audit(ui): documenter validation locale et workflows équipements
Some checks are pending
CI - Tests et Syntax / lint-and-test (push) Waiting to run
Some checks are pending
CI - Tests et Syntax / lint-and-test (push) Waiting to run
This commit is contained in:
parent
08c5b655c2
commit
8d49bfe242
5 changed files with 115 additions and 2 deletions
|
|
@ -451,3 +451,31 @@ dashboard ne contient plus aucun lien `logs`. Les identifiants des anciens
|
||||||
comptes à permissions réduites ne sont pas documentés ; aucun compte n'a été
|
comptes à permissions réduites ne sont pas documentés ; aucun compte n'a été
|
||||||
modifié et `alban` n'a pas été touché. Le contrôle positif avec
|
modifié et `alban` n'a pas été touché. Le contrôle positif avec
|
||||||
`watchdog_dnd.view` devra être réalisé lors d'une prochaine passe.
|
`watchdog_dnd.view` devra être réalisé lors d'une prochaine passe.
|
||||||
|
|
||||||
|
## Reproduction et correction locale — UI-031 — 22 août 2026
|
||||||
|
|
||||||
|
Sur la copie locale de la base VM, `/equipments/1` reproduisait le 500. Le
|
||||||
|
traceback exact était `jinja2.exceptions.TemplateRuntimeError: No filter
|
||||||
|
named 'nl2br' found`, dans `app_new/templates/equipments/detail.html`.
|
||||||
|
|
||||||
|
Le filtre est désormais enregistré dans la factory Flask avec échappement du
|
||||||
|
contenu et conversion des retours à la ligne. Après reconstruction Docker,
|
||||||
|
les détails réels des équipements 1, 2 et 3 répondent 200. Le test ciblé de
|
||||||
|
non-régression passe (`1 passed`).
|
||||||
|
|
||||||
|
Statut : **VALIDÉ LOCALEMENT SUR COPIE VM**.
|
||||||
|
|
||||||
|
## Scénarios équipements locaux
|
||||||
|
|
||||||
|
- Groupe quantitatif ID 3 : 30 chaises en salle 2 ; déplacements de 1 puis 5
|
||||||
|
unités vers salle 3, groupe cible ID 4 avec 6 unités et mouvements tracés.
|
||||||
|
- Quantité 999 : refus métier, sans mouvement supplémentaire ni stock
|
||||||
|
négatif.
|
||||||
|
- Réparation : unité ID 5 individualisée, intervention ID 3 créée, puis
|
||||||
|
remise en service et événements de cycle de vie présents.
|
||||||
|
- Rebut : unité ID 6 proposée puis confirmée, statut final `jete`, localisation
|
||||||
|
supprimée et historique conservé.
|
||||||
|
- Équipement fixe : `TEST_UI_EQ_LUMINAIRE_LOCAL` ID 7, déplacement refusé.
|
||||||
|
|
||||||
|
Ces scénarios sont **VALIDÉS LOCALEMENT SUR COPIE VM** ; ils restent à
|
||||||
|
rejouer sur la VM distante si une validation distante est nécessaire.
|
||||||
|
|
|
||||||
|
|
@ -111,3 +111,21 @@ Aucune donnée supplémentaire n'a été créée pendant la revalidation des
|
||||||
commits `8c54f46`, `864f65d`, `f2783a0` et `ce6d8ae`. Les objets listés
|
commits `8c54f46`, `864f65d`, `f2783a0` et `ce6d8ae`. Les objets listés
|
||||||
ci-dessus ont été réutilisés ; aucune donnée `TEST_UI_*` n'a été supprimée ou
|
ci-dessus ont été réutilisés ; aucune donnée `TEST_UI_*` n'a été supprimée ou
|
||||||
modifiée.
|
modifiée.
|
||||||
|
|
||||||
|
## Données ajoutées pendant la reprise locale — 22/08/2026
|
||||||
|
|
||||||
|
- Groupe quantitatif `TEST_UI_EQ_CHAISES_GROUP_CORRECT` (ID 3), quantité 30,
|
||||||
|
salle `TEST_UI_CLASSE_101` ; groupe cible de déplacement ID 4 en salle
|
||||||
|
`TEST_UI_CLASSE_102` (6 unités après deux mouvements).
|
||||||
|
- Unité réparée ID 5, individualisée depuis le groupe ID 3, intervention de
|
||||||
|
réparation ID 3, remise en service.
|
||||||
|
- Unité rebutée ID 6, individualisée depuis le groupe ID 3, rebut confirmé et
|
||||||
|
événements conservés.
|
||||||
|
- `TEST_UI_EQ_LUMINAIRE_LOCAL` (ID 7), équipement fixe en salle 2 ; tentative
|
||||||
|
de déplacement refusée.
|
||||||
|
- Rôle `TEST_UI_ROLE_LOGS` (ID 11) et utilisateur
|
||||||
|
`TEST_UI_REVALIDATION_RBAC` (ID 5) pour le contrôle positif Journaux. Le
|
||||||
|
mot de passe est conservé uniquement localement et n'est pas versionné.
|
||||||
|
|
||||||
|
Le groupe importé ID 1 a été replacé dans sa salle d'origine après un essai
|
||||||
|
de déplacement ; aucune donnée antérieure ni `alban` n'a été supprimée.
|
||||||
|
|
|
||||||
|
|
@ -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 toujours reproductible sur VM |
|
| Équipement détail groupe | `/equipments/1` | 200 local | UI-031 validé localement après enregistrement du filtre `nl2br` |
|
||||||
| 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 | UI-012 : lien absent pour `chatgpt` sans `watchdog_dnd.view`, contrôle négatif validé |
|
| Logs | `/logs/` | 403/200 | UI-012 : absent/403 sans permission ; visible/200 avec `TEST_UI_REVALIDATION_RBAC` |
|
||||||
| 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 |
|
||||||
|
|
|
||||||
|
|
@ -245,6 +245,52 @@ zones interdites et l'utilisateur `alban` n'ont pas été touchés.
|
||||||
|
|
||||||
Prochaine étape : corriger UI-031 dans une passe de code distincte, puis
|
Prochaine étape : corriger UI-031 dans une passe de code distincte, puis
|
||||||
revalider sur la VM avant de reprendre les mouvements d'équipements.
|
revalider sur la VM avant de reprendre les mouvements d'équipements.
|
||||||
|
|
||||||
|
## Reprise locale sur copie de VM — 22 août 2026
|
||||||
|
|
||||||
|
URL locale : `http://127.0.0.1:5080/`.
|
||||||
|
|
||||||
|
- Docker : MariaDB, Flask et Adminer démarrés et sains ; migrations Alembic
|
||||||
|
appliquées au démarrage.
|
||||||
|
- Base : copie locale de la VM, données `TEST_UI_*` présentes et conservées.
|
||||||
|
- Build exécuté avec le commit `d4d80a3`, puis relancé avec le correctif
|
||||||
|
`08c5b65`.
|
||||||
|
- Watchdogs/intégrations : non configurés et non sollicités.
|
||||||
|
|
||||||
|
### Correctifs et revalidation locale
|
||||||
|
|
||||||
|
- **UI-017 — VALIDÉ LOCALEMENT SUR COPIE VM** : liste, détails, planning et
|
||||||
|
dashboard en 200 pour les relations optionnelles ; libellés humains.
|
||||||
|
- **UI-031 — VALIDÉ LOCALEMENT SUR COPIE VM** : cause reproduite dans les
|
||||||
|
logs (`TemplateRuntimeError: No filter named 'nl2br'`), filtre enregistré
|
||||||
|
dans la factory, détail et hiérarchie des équipements 1/2 en 200.
|
||||||
|
- **UI-012 — VALIDÉ LOCALEMENT SUR COPIE VM** : contrôle négatif avec
|
||||||
|
`chatgpt` (lien absent/403) et contrôle positif avec
|
||||||
|
`TEST_UI_REVALIDATION_RBAC` (lien présent/`/logs/` en 200).
|
||||||
|
|
||||||
|
### Scénarios équipements exécutés
|
||||||
|
|
||||||
|
Un groupe correctement déclaré `TEST_UI_EQ_CHAISES_GROUP_CORRECT` (ID 3,
|
||||||
|
quantité 30, salle 2) a été créé pour compléter le scénario importé dont le
|
||||||
|
champ historique `is_group` était faux. Déplacements quantitatifs de 1 puis
|
||||||
|
5 unités vers la salle 3 : mouvement journalisé, groupe cible ID 4 avec 6
|
||||||
|
unités, refus d'une quantité 999 sans quantité négative.
|
||||||
|
|
||||||
|
Une unité a été retirée pour réparation (ID 5), l'intervention ID 3 créée,
|
||||||
|
puis la réparation terminée et l'unité remise en service. Une autre unité
|
||||||
|
(ID 6) a été proposée puis confirmée au rebut ; elle est `jete`, sans salle,
|
||||||
|
et conserve ses événements de cycle de vie.
|
||||||
|
|
||||||
|
Un luminaire fixe `TEST_UI_EQ_LUMINAIRE_LOCAL` (ID 7) a été créé. La tentative
|
||||||
|
de déplacement est refusée par la règle de mobilité fixe et l'équipement
|
||||||
|
reste dans sa salle.
|
||||||
|
|
||||||
|
### Contrôle de régression local
|
||||||
|
|
||||||
|
Le balayage séquentiel des pages principales (patrimoine, interventions,
|
||||||
|
planning, prévention, stock, RBAC, détail équipements) n'a relevé aucun 500.
|
||||||
|
`/documents/` reste un 404 connu (UI-011). Le test ciblé
|
||||||
|
`test_grouped_equipment_detail_and_hierarchy` passe : **1 passed**.
|
||||||
après modification du rôle admin par les tests RBAC. Ces résultats sont hors
|
après modification du rôle admin par les tests RBAC. Ces résultats sont hors
|
||||||
des trois correctifs ciblés.
|
des trois correctifs ciblés.
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -210,3 +210,24 @@ un compte sans `watchdog_dnd.view`. Aucune migration Alembic n'est nécessaire.
|
||||||
Aucune nouvelle donnée n'a été créée et aucune donnée `TEST_UI_*` n'a été
|
Aucune nouvelle donnée n'a été créée et aucune donnée `TEST_UI_*` n'a été
|
||||||
supprimée. `alban`, les watchdogs et les intégrations interdites n'ont pas été
|
supprimée. `alban`, les watchdogs et les intégrations interdites n'ont pas été
|
||||||
touchés.
|
touchés.
|
||||||
|
|
||||||
|
## Audit local sur copie VM — 22 août 2026
|
||||||
|
|
||||||
|
L'application locale (`http://127.0.0.1:5080/`) a été reconstruite avec le
|
||||||
|
correctif `08c5b65`. Le traceback UI-031 a été reproduit puis supprimé en
|
||||||
|
enregistrant le filtre Jinja `nl2br` dans la factory. Les détails groupés et
|
||||||
|
les hiérarchies réelles répondent maintenant 200.
|
||||||
|
|
||||||
|
Les trois points ciblés sont validés localement : UI-017, UI-031 et UI-012.
|
||||||
|
Le contrôle UI-012 a été effectué avec `chatgpt` sans permission (lien absent,
|
||||||
|
403) et avec le compte temporaire `TEST_UI_REVALIDATION_RBAC` disposant de
|
||||||
|
`watchdog_dnd.view` (lien présent, `/logs/` 200).
|
||||||
|
|
||||||
|
Les scénarios équipements ont été exécutés sur un groupe quantitatif local :
|
||||||
|
déplacements 1 + 5 unités, refus d'une quantité excessive, individualisation
|
||||||
|
et réparation d'une unité, rebut confirmé d'une autre, et refus de déplacement
|
||||||
|
d'un luminaire fixe. Les événements et mouvements sont présents en base.
|
||||||
|
|
||||||
|
Un balayage séquentiel des pages principales n'a révélé aucun nouveau 500.
|
||||||
|
Le seul défaut HTTP connu retrouvé est `/documents/` en 404 (UI-011). Les
|
||||||
|
watchdogs et intégrations restent hors périmètre et non sollicités.
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue