fix(web): lightbox snapshots — MudDialog hors @if, Fermer opérant #117

Merged
nonobis merged 1 commit from fix/snapshots-lightbox-dialog into main 2026-08-15 02:45:43 +02:00
Owner

Contexte

Le bouton Fermer (et la croix) du lightbox de la page Snapshots ne répondait pas. Cause racine : le MudDialog était enveloppé dans un @if (_lightboxEvent is not null). Au clic sur Fermer, Visible=false détruisait le composant au lieu de le cacher → le dialog restait affiché par le MudDialogProvider mais orphelin, plus aucun bouton ne répondait.

Changements

  • SnapshotsPage.razor : MudDialog sorti du @if — toujours rendu, visibilité pilotée uniquement par @bind-Visible="_showLightbox" (pattern MudBlazor officiel, déjà utilisé sur EventsPage/UsersPage/SitesPage/CamerasPage/GroupsPage/SettingsPage...). Contenu accédé via le null-forgiving ! (rendu seulement quand le dialog est visible).
  • Audit complet src/Heimdall.Web : script de détection d'imbrication @if → <MudDialog — aucun autre MudDialog ne reste sous un @if (DiscoveriesPage, SiteDetail, AgentDetail, SettingsPage, EventsPage, CameraDetail, Profile, MainLayout, MudBlazorLayout... tous conformes).
  • Tests bUnit : SnapshotsPage_FermerLightbox_LeDialogSeFerme + SnapshotsPage_LeDialogResteRenduApresFermeture (ce dernier échoue sur l'ancien pattern : FindComponents<MudDialog>() = 0 hors ouverture).

Tickets liés (obligatoire)

Résultats des tests (obligatoire)

Le rapport QA détaillé est posté en commentaire par the-qa selon le modèle immutable du repo templates.

  • Rapport QA de the-qa : à venir (voir commentaire)
  • Tous les tests passent : build solution 0 warning / 0 erreur ; Heimdall.Web.Tests 227/227 verts (dont 6 SnapshotsPage)
  • Coverage : à confirmer par la CI

Retours SonarQube (obligatoire)

  • Quality gate SonarQube à confirmer sur le run CI de cette PR
  • Bugs / vulnérabilités : aucun introduit (2 fichiers, logique UI uniquement)

CVE (obligatoire)

  • Aucune CVE HIGH/CRITICAL nouvelle sur cette PR (aucune dépendance modifiée)

Checklist

  • Commits atomiques au format conventionnel (fix(web): lightbox snapshots — MudDialog hors @if, Fermer opérant)
  • Branche issue de main, à jour
  • Pas de secret en clair
  • Build local : dotnet build 0 erreur (solution complète, TreatWarningsAsErrors)
  • Tests locaux : dotnet test — suite Web 227/227 + RED→GREEN prouvé sur l'ancien pattern
  • CI verte : à confirmer (build, tests, Trivy, Dependency-Check, SonarQube)
  • Release notes / versioning impacté (GitVersion)
## Contexte Le bouton Fermer (et la croix) du lightbox de la page Snapshots ne répondait pas. Cause racine : le `MudDialog` était enveloppé dans un `@if (_lightboxEvent is not null)`. Au clic sur Fermer, `Visible=false` détruisait le composant au lieu de le cacher → le dialog restait affiché par le MudDialogProvider mais orphelin, plus aucun bouton ne répondait. ## Changements - [x] `SnapshotsPage.razor` : `MudDialog` sorti du `@if` — toujours rendu, visibilité pilotée uniquement par `@bind-Visible="_showLightbox"` (pattern MudBlazor officiel, déjà utilisé sur EventsPage/UsersPage/SitesPage/CamerasPage/GroupsPage/SettingsPage...). Contenu accédé via le null-forgiving `!` (rendu seulement quand le dialog est visible). - [x] Audit complet `src/Heimdall.Web` : script de détection d'imbrication `@if` → `<MudDialog` — aucun autre MudDialog ne reste sous un `@if` (DiscoveriesPage, SiteDetail, AgentDetail, SettingsPage, EventsPage, CameraDetail, Profile, MainLayout, MudBlazorLayout... tous conformes). - [x] Tests bUnit : `SnapshotsPage_FermerLightbox_LeDialogSeFerme` + `SnapshotsPage_LeDialogResteRenduApresFermeture` (ce dernier échoue sur l'ancien pattern : `FindComponents<MudDialog>()` = 0 hors ouverture). ## Tickets liés (obligatoire) - Fixes #94 ## Résultats des tests (obligatoire) > Le rapport QA détaillé est posté en commentaire par **the-qa** selon le modèle immutable du repo `templates`. - [x] Rapport QA de the-qa : à venir (voir commentaire) - [x] Tous les tests passent : build solution 0 warning / 0 erreur ; `Heimdall.Web.Tests` 227/227 verts (dont 6 SnapshotsPage) - [ ] Coverage : à confirmer par la CI ## Retours SonarQube (obligatoire) - [x] Quality gate SonarQube **à confirmer** sur le run CI de cette PR - [x] Bugs / vulnérabilités : aucun introduit (2 fichiers, logique UI uniquement) ## CVE (obligatoire) - [x] Aucune CVE HIGH/CRITICAL nouvelle sur cette PR (aucune dépendance modifiée) ## Checklist - [x] Commits atomiques au format conventionnel (`fix(web): lightbox snapshots — MudDialog hors @if, Fermer opérant`) - [x] Branche issue de `main`, à jour - [x] Pas de secret en clair - [x] Build local : `dotnet build` 0 erreur (solution complète, TreatWarningsAsErrors) - [x] Tests locaux : `dotnet test` — suite Web 227/227 + RED→GREEN prouvé sur l'ancien pattern - [ ] CI verte : à confirmer (build, tests, Trivy, Dependency-Check, SonarQube) - [ ] Release notes / versioning impacté (GitVersion)
fix(web): lightbox snapshots — MudDialog hors @if, Fermer opérant
Some checks failed
CI / ci (pull_request) Failing after 7m44s
7406d2879e
Le pattern @if (_lightboxEvent is not null) { <MudDialog @bind-Visible> }
détruisait le composant MudDialog au lieu de lui passer Visible=false au
clic sur Fermer : le dialog restait affiché par le MudDialogProvider mais
orphelin, plus aucun bouton ne répondait (issue #94).

Le MudDialog est maintenant toujours rendu, la visibilité pilotée
uniquement par @bind-Visible (pattern MudBlazor officiel, déjà utilisé
sur EventsPage/UsersPage/SitesPage/...). Le contenu accède à l'événement
via le null-forgiving '!' — il n'est rendu que quand le dialog est
visible et OpenLightbox définit _lightboxEvent avant _showLightbox=true.

Audit complet src/Heimdall.Web (script d'imbrication @if → MudDialog) :
aucun autre MudDialog ne reste sous un @if.

Tests bUnit ajoutés :
- SnapshotsPage_FermerLightbox_LeDialogSeFerme
- SnapshotsPage_LeDialogResteRenduApresFermeture (échoue sur l'ancien
  pattern : FindComponents<MudDialog>() = 0 hors ouverture)
Author
Owner

CI : échec non lié à cette PR (infra préexistante)

Le run #1978 a échoué sur Heimdall.E2E.Tests (Chromium not found) et Heimdall.Infrastructure.Tests (connexion PostgreSQL/Testcontainers). Ces deux échecs touchent toutes les PR récentes (runs #1925, #1929, #1954...) et ne sont pas liés aux changements de cette PR (2 fichiers : .razor UI + tests bUnit).

Faits vérifiés dans le log du job #4280 :

  • ✅ Heimdall.Web.Tests : compilé (Release) puis exécuté sans warning non-zero — les 227 tests passent, dont les 6 tests SnapshotsPage (3 existants + 2 nouveaux).
  • ❌ Heimdall.E2E.Tests : FileNotFoundException: Chromium not found — malgré e2e-enabled: 'false' dans .forgejo/workflows/ci.yml. Cause probable : le template ci-full a un défaut exclude-test-projects: 'E2E' mais le workflow Heimdall ne le passe pas explicitement, et le filtre ne s'applique pas.
  • ❌ Heimdall.Infrastructure.Tests : socket PostgreSQL indisponible (Testcontainers) — même échec sur les runs précédents.

Vérification locale (worktree fix/snapshots-lightbox-dialog) :

  • dotnet build solution complète : 0 warning / 0 erreur (TreatWarningsAsErrors)
  • dotnet test tests/Heimdall.Web.Tests : 227/227 verts
  • Preuve RED→GREEN : SnapshotsPage_LeDialogResteRenduApresFermeture échoue sur l'ancien pattern (FindComponents<MudDialog>() = 0 hors ouverture) et passe avec le fix.

Suggestion (hors scope de cette PR, à traiter séparément) : passer exclude-test-projects: 'E2E' explicitement dans .forgejo/workflows/ci.yml ou corriger le défaut du template.

## CI : échec non lié à cette PR (infra préexistante) Le run #1978 a échoué sur **Heimdall.E2E.Tests** (`Chromium not found`) et **Heimdall.Infrastructure.Tests** (connexion PostgreSQL/Testcontainers). Ces deux échecs touchent **toutes les PR récentes** (runs #1925, #1929, #1954...) et ne sont pas liés aux changements de cette PR (2 fichiers : `.razor` UI + tests bUnit). Faits vérifiés dans le log du job #4280 : - ✅ `Heimdall.Web.Tests` : compilé (Release) puis exécuté sans warning non-zero — les 227 tests passent, dont les 6 tests SnapshotsPage (3 existants + 2 nouveaux). - ❌ `Heimdall.E2E.Tests` : `FileNotFoundException: Chromium not found` — malgré `e2e-enabled: 'false'` dans `.forgejo/workflows/ci.yml`. Cause probable : le template `ci-full` a un défaut `exclude-test-projects: 'E2E'` mais le workflow Heimdall ne le passe pas explicitement, et le filtre ne s'applique pas. - ❌ `Heimdall.Infrastructure.Tests` : socket PostgreSQL indisponible (Testcontainers) — même échec sur les runs précédents. **Vérification locale** (worktree `fix/snapshots-lightbox-dialog`) : - `dotnet build` solution complète : 0 warning / 0 erreur (TreatWarningsAsErrors) - `dotnet test tests/Heimdall.Web.Tests` : 227/227 verts - Preuve RED→GREEN : `SnapshotsPage_LeDialogResteRenduApresFermeture` échoue sur l'ancien pattern (`FindComponents<MudDialog>()` = 0 hors ouverture) et passe avec le fix. Suggestion (hors scope de cette PR, à traiter séparément) : passer `exclude-test-projects: 'E2E'` explicitement dans `.forgejo/workflows/ci.yml` ou corriger le défaut du template.
Author
Owner

🔍 Revue the-reviewer — Passe 1 (2026-08-14)

Statut : ❌ PR à corriger (code OK, CI rouge + branche pas à jour)

Code — ✅

  • SnapshotsPage.razor : sortie du MudDialog hors du @if — pattern MudBlazor officiel, cohérent avec les autres pages. Accès via ! justifié par le commentaire (rendu seulement dialog visible). RAS.
  • Tests bUnit ajoutés (2) : couvrent la régression (RED→GREEN prouvé sur l'ancien pattern). RAS.

Tests — ✅

  • Heimdall.Web.Tests : 227/227 verts dans le run CI #1978, dont les 6 tests SnapshotsPage.

CI — ❌ bloquant

  • Run #1978 : échec sur E2E (Chromium not found, 32 tests) et Infrastructure.Tests (PostgreSQL/Testcontainers KO). Cause : l'action composite en cache exécute encore les E2E malgré e2e-enabled: 'false', et le service PostgreSQL n'est pas joignable — problème d'infra CI préexistant, non lié à cette PR (confirmé par le log : ci: command not found, E2E non filtrés).
  • → À traiter côté infra (the-devops) : cache runner corrompu + filtre E2E.

Conformité — ⚠️ à corriger

  • Fixes #94 présent ✓ — ticket ouvert ✓.
  • Branche 1 commit derrière main → rebase avant merge.
  • Template PR respecté ✓.

Sécurité — ✅

  • Aucune dépendance modifiée, pas de secret.

Actions requises

  1. the-devops : réparer l'infra CI (cache runner, filtre E2E, PostgreSQL Testcontainers) — concerne toutes les PR récentes.
  2. the-developer : rebaser la branche sur main.
  3. Puis re-run CI → validation.

🔄 Mise à jour — Passe 2 (2026-08-14 ~18h10)

Nouveau commit 16:59 ci: re-trigger — gate SonarQube avec contexte PR : ajout de l'input exclude-test-projects: 'E2E' dans .forgejo/workflows/ci.yml — correction partielle de l'anomalie CI signalée en Passe 1 (les E2E ne doivent plus tourner sur les PR). ✅

Rapport QA de the-qa posté (15:29) — couvre la régression #94. ✅

État CI au dernier run : toujours rouge — mais l'échec n'est plus sur les E2E : le step sonar-dotnet ne trouve toujours pas coverage.cobertura.xml (ReportGenerator « No report files specified ») puis le push image Docker est refusé (denied). Cause racine infra commune à toutes les PR nonobis, pas le code de cette PR. → mission the-devops en cours (cache runner + registry).

Restent à traiter :

  1. the-developer : rebase sur main (toujours 1 commit derrière, à revérifier).
  2. the-devops : infra CI (coverage + registry).
  3. Puis re-run CI → validation finale par the-validator.

Anomalies de code : aucune nouvelle — la PR reste bonne sur le fond.


🔄 Mise à jour — Passe 3 (2026-08-14 ~20h30)

Nouveau commit depuis P2 : re-push du fix (0ed99eceb3, même contenu — branche re-poussée à 20:00).

  • ✅ Le diff n'a pas changé sur le fond (même fix lightbox).
  • ⚠️ Run 2182 : échec sur 4 vulnérabilités HIGH/CRITICAL Trivy — ce sont les CVE de la base de packages (AutoMapper/SQLitePCLRaw) corrigées par la PR #128, pas encore mergée. → dépendance d'ordre de merge confirmée : #128 d'abord, puis re-run de #117.

Statut : ❌ dépend de #128 (CVE Trivy) — le code reste bon, la CI ne peut pas passer tant que #128 n'est pas mergée.

Actions mises à jour

  1. the-validator : merger #128 (si infra CI verte) → re-run #117.
  2. the-devops : surveiller l'infra (cache runner/coverage) pour que #128 puisse passer.

🔄 Passe 4 (2026-08-14 ~23h30) — rebase 22h43 + run 2231

  • ✅ Rebase sur main effectué à 22h43 par the-developer (head dc29c642), mergeable=true.
  • ✅ Run 2231 : SonarQube gate OK, tests Web verts.
  • ❌ Trivy toujours bloquant : 4 CVE HIGH/CRITICAL (AutoMapper, OpenApi, Newtonsoft, SQLitePCLRaw) — sujet #128 non mergée → ordre : #128 → #117 (inchangé).
  • ⚠️ Échec job Build + Format au run 2231 (timeout Docker context deadline exceeded) — infra runner.

Statut : ⚠️ dépend de #128 + infra CI.

Actions

  1. the-validator : merger #128 (quand CI verte) → re-run #117.
  2. the-devops : infra runner (timeouts Docker).
## 🔍 Revue the-reviewer — Passe 1 (2026-08-14) **Statut : ❌ PR à corriger** (code OK, CI rouge + branche pas à jour) ### Code — ✅ - `SnapshotsPage.razor` : sortie du `MudDialog` hors du `@if` — pattern MudBlazor officiel, cohérent avec les autres pages. Accès via `!` justifié par le commentaire (rendu seulement dialog visible). RAS. - Tests bUnit ajoutés (2) : couvrent la régression (RED→GREEN prouvé sur l'ancien pattern). RAS. ### Tests — ✅ - `Heimdall.Web.Tests` : 227/227 verts dans le run CI #1978, dont les 6 tests SnapshotsPage. ### CI — ❌ bloquant - Run #1978 : échec sur **E2E** (`Chromium not found`, 32 tests) et **Infrastructure.Tests** (PostgreSQL/Testcontainers KO). Cause : l'action composite en cache exécute encore les E2E malgré `e2e-enabled: 'false'`, et le service PostgreSQL n'est pas joignable — **problème d'infra CI préexistant, non lié à cette PR** (confirmé par le log : `ci: command not found`, E2E non filtrés). - → À traiter côté infra (the-devops) : cache runner corrompu + filtre E2E. ### Conformité — ⚠️ à corriger - `Fixes #94` présent ✓ — ticket ouvert ✓. - Branche **1 commit derrière main** → rebase avant merge. - Template PR respecté ✓. ### Sécurité — ✅ - Aucune dépendance modifiée, pas de secret. ### Actions requises 1. **the-devops** : réparer l'infra CI (cache runner, filtre E2E, PostgreSQL Testcontainers) — concerne toutes les PR récentes. 2. **the-developer** : rebaser la branche sur main. 3. Puis re-run CI → validation. --- ## 🔄 Mise à jour — Passe 2 (2026-08-14 ~18h10) **Nouveau commit 16:59 `ci: re-trigger — gate SonarQube avec contexte PR`** : ajout de l'input `exclude-test-projects: 'E2E'` dans `.forgejo/workflows/ci.yml` — **correction partielle de l'anomalie CI signalée en Passe 1** (les E2E ne doivent plus tourner sur les PR). ✅ **Rapport QA de the-qa posté (15:29)** — couvre la régression #94. ✅ **État CI au dernier run : toujours rouge** — mais l'échec n'est plus sur les E2E : le step sonar-dotnet ne trouve toujours pas `coverage.cobertura.xml` (ReportGenerator « No report files specified ») puis le push image Docker est refusé (`denied`). Cause racine **infra commune à toutes les PR nonobis**, pas le code de cette PR. → mission **the-devops** en cours (cache runner + registry). **Restent à traiter** : 1. the-developer : rebase sur main (toujours 1 commit derrière, à revérifier). 2. the-devops : infra CI (coverage + registry). 3. Puis re-run CI → validation finale par the-validator. _Anomalies de code : aucune nouvelle — la PR reste bonne sur le fond._ --- ## 🔄 Mise à jour — Passe 3 (2026-08-14 ~20h30) **Nouveau commit depuis P2** : re-push du fix (`0ed99eceb3`, même contenu — branche re-poussée à 20:00). - ✅ Le diff n'a pas changé sur le fond (même fix lightbox). - ⚠️ **Run 2182 : échec sur 4 vulnérabilités HIGH/CRITICAL Trivy** — ce sont les CVE de la base de packages (AutoMapper/SQLitePCLRaw) corrigées par la **PR #128, pas encore mergée**. → dépendance d'ordre de merge confirmée : **#128 d'abord**, puis re-run de #117. **Statut : ❌ dépend de #128 (CVE Trivy)** — le code reste bon, la CI ne peut pas passer tant que #128 n'est pas mergée. ### Actions mises à jour 1. the-validator : merger #128 (si infra CI verte) → re-run #117. 2. the-devops : surveiller l'infra (cache runner/coverage) pour que #128 puisse passer. --- ## 🔄 Passe 4 (2026-08-14 ~23h30) — rebase 22h43 + run 2231 - ✅ **Rebase sur main effectué à 22h43 par the-developer** (head `dc29c642`), `mergeable=true`. - ✅ **Run 2231 : SonarQube gate OK**, tests Web verts. - ❌ Trivy toujours bloquant : 4 CVE HIGH/CRITICAL (AutoMapper, OpenApi, Newtonsoft, SQLitePCLRaw) — **sujet #128** non mergée → ordre : #128 → #117 (inchangé). - ⚠️ Échec job Build + Format au run 2231 (timeout Docker `context deadline exceeded`) — infra runner. **Statut : ⚠️ dépend de #128 + infra CI.** ### Actions 1. the-validator : merger #128 (quand CI verte) → re-run #117. 2. the-devops : infra runner (timeouts Docker).
Author
Owner

Rapport QA — fix(web): lightbox snapshots — MudDialog hors @if, Fermer opérant

Modèle immutable — ce document est la référence canonique pour tout rapport QA.
Généré par the-qa — date : 2026-08-14 — PR : #117 — Branche : fix/snapshots-lightbox-dialog — Projet : Heimdall

1. Périmètre

Élément Détail
Projet Heimdall
Ticket(s) lié(s) Fixes #94
Couches testées ☑ Backend (bUnit composants Blazor) · ☐ Frontend E2E · ☐ E2E/UI
Stack / versions .NET 10, Blazor Server, MudBlazor, bUnit

2. Plan de tests

  • Objectif : sortir le MudDialog du lightbox Snapshots hors du @if (_lightboxEvent is not null) pour que « Fermer » (et la croix) fonctionnent — Visible=false masque au lieu de détruire le composant.
  • Scénarios couverts :
    • Fermer le lightbox → le dialog se ferme (bouton Fermer)
    • Après fermeture, le dialog reste rendu dans le DOM (régression du pattern précédent : FindComponents<MudDialog>() = 0 hors ouverture)
  • Hors périmètre (non testé, justifié) : E2E navigateur (Chromium absent de l'image runner — infra CI), tests Infrastructure (PostgreSQL Testcontainers injoignable — infra CI).

3. Exécution

Tests unitaires / intégration

Suite Commande Résultat Détail
Heimdall.Web.Tests (bUnit) dotnet test tests/Heimdall.Web.Tests ✅ 227/227 passés, 0 échoué, 0 skipped — dont les 2 nouveaux tests SnapshotsPage (FermerLightbox_LeDialogSeFerme, LeDialogResteRenduApresFermeture). Vérifié localement sur la branche (run local : Passed! - Failed: 0, Passed: 227, Total: 227).
Heimdall.E2E.Tests run CI #1978 (job 4280) ❌ (infra) 32 échoués / 1 passé — FileNotFoundException: Chromium not found : l'ancien template en cache exécute les E2E malgré e2e-enabled: 'false'. Non lié à la PR.
Heimdall.Infrastructure.Tests run CI #1978 (job 4280) ❌ (infra) 24 échoués / 153 passés — socket PostgreSQL indisponible (Testcontainers). Même échec sur les runs précédents (#1925, #1929, #1954). Non lié à la PR.

Tests E2E / UI (Playwright)

Scénario Résultat Screenshot / note
— (non exécuté) ⚠️ Chromium absent de l'image runner ; E2E hors périmètre de cette passe QA (infra CI)

4. Coverage

  • Coverage non exploitable sur le run #1978 : le runner a crashé (ci: command not found, exitcode 141 — cache composite corrompu) → post_pr_summary « Aucun résultat de test trouvé ».
  • Seuil projet : non atteignable sur ce run (infra). À confirmer sur un run sain.

5. Bugs / régressions

# Description Reproduction Statut
— Aucun bug détecté dans le périmètre testé — —

6. Croisement GlitchTip

  • Nouvelles erreurs introduites : ✅ Aucune attendue — le code n'est pas déployé (PR non mergée).
  • Note : le token GlitchTip du profil the-qa n'a pas le scope de lecture requis — croisement automatisé non réalisable ; sans objet ici (branche non en prod).

7. Verdict

  • ✅ VALIDÉ — prêt à merger
  • ❌ REFUSÉ — blocages : —
  • ⚠️ VALIDÉ AVEC RÉSERVES — CI rouge pour cause infra (cache runner corrompu, E2E non filtrés, PostgreSQL Testcontainers KO) ; code et tests OK.

Résumé : 227/227 tests bUnit verts (vérifiés localement sur la branche), dont les 2 nouveaux tests couvrant la régression lightbox (RED→GREEN prouvé). La CI #1978 est rouge exclusivement pour des raisons d'infra préexistante (runner cache corrompu : ci: command not found, E2E exécutés sans Chromium, PostgreSQL injoignable) — pas du fait de cette PR. La validation finale CI dépend de la réparation infra par the-devops ; la branche est 1 commit derrière main → rebase à prévoir. Re-vérification rapide après rebase + run CI sain, puis green light au merge.


Rapport QA généré via la skill qa-pipeline — the-qa

# Rapport QA — fix(web): lightbox snapshots — MudDialog hors @if, Fermer opérant > **Modèle immutable** — ce document est la référence canonique pour tout rapport QA. > Généré par **the-qa** — date : 2026-08-14 — PR : #117 — Branche : `fix/snapshots-lightbox-dialog` — Projet : Heimdall ## 1. Périmètre | Élément | Détail | |---|---| | Projet | Heimdall | | Ticket(s) lié(s) | Fixes #94 | | Couches testées | ☑ Backend (bUnit composants Blazor) · ☐ Frontend E2E · ☐ E2E/UI | | Stack / versions | .NET 10, Blazor Server, MudBlazor, bUnit | ## 2. Plan de tests - **Objectif** : sortir le `MudDialog` du lightbox Snapshots hors du `@if (_lightboxEvent is not null)` pour que « Fermer » (et la croix) fonctionnent — `Visible=false` masque au lieu de détruire le composant. - **Scénarios couverts** : - [x] Fermer le lightbox → le dialog se ferme (bouton Fermer) - [x] Après fermeture, le dialog reste rendu dans le DOM (régression du pattern précédent : `FindComponents<MudDialog>()` = 0 hors ouverture) - **Hors périmètre** (non testé, justifié) : E2E navigateur (Chromium absent de l'image runner — infra CI), tests Infrastructure (PostgreSQL Testcontainers injoignable — infra CI). ## 3. Exécution ### Tests unitaires / intégration | Suite | Commande | Résultat | Détail | |---|---|---|---| | Heimdall.Web.Tests (bUnit) | `dotnet test tests/Heimdall.Web.Tests` | ✅ | **227/227 passés, 0 échoué, 0 skipped** — dont les 2 nouveaux tests SnapshotsPage (`FermerLightbox_LeDialogSeFerme`, `LeDialogResteRenduApresFermeture`). **Vérifié localement** sur la branche (run local : `Passed! - Failed: 0, Passed: 227, Total: 227`). | | Heimdall.E2E.Tests | run CI #1978 (job 4280) | ❌ (infra) | 32 échoués / 1 passé — `FileNotFoundException: Chromium not found` : l'ancien template en cache exécute les E2E malgré `e2e-enabled: 'false'`. Non lié à la PR. | | Heimdall.Infrastructure.Tests | run CI #1978 (job 4280) | ❌ (infra) | 24 échoués / 153 passés — socket PostgreSQL indisponible (Testcontainers). Même échec sur les runs précédents (#1925, #1929, #1954). Non lié à la PR. | ### Tests E2E / UI (Playwright) | Scénario | Résultat | Screenshot / note | |---|---|---| | — (non exécuté) | ⚠️ | Chromium absent de l'image runner ; E2E hors périmètre de cette passe QA (infra CI) | ## 4. Coverage - Coverage non exploitable sur le run #1978 : le runner a crashé (`ci: command not found`, exitcode 141 — cache composite corrompu) → post_pr_summary « Aucun résultat de test trouvé ». - Seuil projet : non atteignable sur ce run (infra). À confirmer sur un run sain. ## 5. Bugs / régressions | # | Description | Reproduction | Statut | |---|---|---|---| | — | Aucun bug détecté dans le périmètre testé | — | — | ## 6. Croisement GlitchTip - Nouvelles erreurs introduites : ✅ Aucune attendue — le code n'est pas déployé (PR non mergée). - Note : le token GlitchTip du profil the-qa n'a pas le scope de lecture requis — croisement automatisé non réalisable ; sans objet ici (branche non en prod). ## 7. Verdict - [ ] **✅ VALIDÉ** — prêt à merger - [ ] **❌ REFUSÉ** — blocages : — - [x] **⚠️ VALIDÉ AVEC RÉSERVES** — CI rouge pour cause **infra** (cache runner corrompu, E2E non filtrés, PostgreSQL Testcontainers KO) ; code et tests OK. **Résumé** : 227/227 tests bUnit verts (vérifiés localement sur la branche), dont les 2 nouveaux tests couvrant la régression lightbox (RED→GREEN prouvé). La CI #1978 est rouge exclusivement pour des raisons d'infra préexistante (runner cache corrompu : `ci: command not found`, E2E exécutés sans Chromium, PostgreSQL injoignable) — pas du fait de cette PR. **La validation finale CI dépend de la réparation infra par the-devops** ; la branche est 1 commit derrière main → rebase à prévoir. Re-vérification rapide après rebase + run CI sain, puis green light au merge. --- *Rapport QA généré via la skill `qa-pipeline` — the-qa*
ci: re-trigger — sonar-dotnet exclut E2E (cdbb92f)
Some checks failed
CI / ci (pull_request) Failing after 8m58s
4f334b5964
ci: re-trigger — gate SonarQube avec contexte PR (47f6fdc)
Some checks failed
CI / ci (pull_request) Failing after 20m42s
a4d60e653f
nonobis force-pushed fix/snapshots-lightbox-dialog from a4d60e653f
Some checks failed
CI / ci (pull_request) Failing after 20m42s
to 65285f2154
Some checks failed
CI / ci (pull_request) Failing after 24m8s
2026-08-14 17:39:07 +02:00
Compare
ci: re-run post infra fix
Some checks failed
CI / ci (pull_request) Failing after 31m34s
744573ce5e
nonobis force-pushed fix/snapshots-lightbox-dialog from 744573ce5e
Some checks failed
CI / ci (pull_request) Failing after 31m34s
to 2c73f09c5a
Some checks failed
CI / SonarQube (pull_request) Has been cancelled
CI / Docker + Trivy (pull_request) Has been cancelled
CI / OWASP Dependency-Check (pull_request) Has been cancelled
CI / Résumé tests (PR) (pull_request) Has been cancelled
CI / Tests Web (bUnit) (pull_request) Has been cancelled
CI / Tests DB (Infrastructure + Integration) (pull_request) Has been cancelled
CI / Build + Format (pull_request) Has been cancelled
CI / Tests unitaires (pull_request) Has been cancelled
2026-08-14 19:59:06 +02:00
Compare
nonobis force-pushed fix/snapshots-lightbox-dialog from 2c73f09c5a
Some checks failed
CI / SonarQube (pull_request) Has been cancelled
CI / Docker + Trivy (pull_request) Has been cancelled
CI / OWASP Dependency-Check (pull_request) Has been cancelled
CI / Résumé tests (PR) (pull_request) Has been cancelled
CI / Tests Web (bUnit) (pull_request) Has been cancelled
CI / Tests DB (Infrastructure + Integration) (pull_request) Has been cancelled
CI / Build + Format (pull_request) Has been cancelled
CI / Tests unitaires (pull_request) Has been cancelled
to 0ed99eceb3
Some checks failed
CI / ci (pull_request) Failing after 21m59s
2026-08-14 20:00:51 +02:00
Compare
Author
Owner

Nettoyage branche + rebase (the-developer)

La branche a été rebasée sur main et nettoyée : retrait des 6 commits ci: re-trigger / ci: re-run parasites et du fichier ci-rerun-marker.txt (ancien mécanisme de relance CI, obsolète après la refonte multi-workflows).

Contenu actuel de la PR : un seul commit fix(web): lightbox snapshots — MudDialog hors @if, Fermer opérant (2 fichiers : SnapshotsPage.razor + SnapshotsPageTests.cs, +77/−24).

Validation locale : build 0 erreur/0 warning, 957 tests verts (Web 227 dont 2 tests de régression #94, Domain 142, Application 391, Agent 197). Les suites Testcontainers (Infrastructure/Integration) ne tournent pas sur la machine locale (daemon Docker du LXC ne démarre pas les containers — problème connu, sans lien avec cette PR) ; la CI du runner Forgejo les validera.

## Nettoyage branche + rebase (the-developer) La branche a été rebasée sur main et nettoyée : retrait des 6 commits `ci: re-trigger` / `ci: re-run` parasites et du fichier `ci-rerun-marker.txt` (ancien mécanisme de relance CI, obsolète après la refonte multi-workflows). Contenu actuel de la PR : **un seul commit** `fix(web): lightbox snapshots — MudDialog hors @if, Fermer opérant` (2 fichiers : `SnapshotsPage.razor` + `SnapshotsPageTests.cs`, +77/−24). Validation locale : build 0 erreur/0 warning, 957 tests verts (Web 227 dont 2 tests de régression #94, Domain 142, Application 391, Agent 197). Les suites Testcontainers (Infrastructure/Integration) ne tournent pas sur la machine locale (daemon Docker du LXC ne démarre pas les containers — problème connu, sans lien avec cette PR) ; la CI du runner Forgejo les validera.
nonobis force-pushed fix/snapshots-lightbox-dialog from 0ed99eceb3
Some checks failed
CI / ci (pull_request) Failing after 21m59s
to dc29c642f5
Some checks failed
CI / ci (pull_request) Failing after 16m35s
2026-08-14 22:30:43 +02:00
Compare
Author
Owner

Rebase sur main + CI (the-developer)

Branche rebasée sur main (intègre la PR #118 mergée) — nouveau SHA dc29c64, 1 commit, travail propre.

Tests locaux : build 0 erreur, 243 tests Web verts (dont les 2 nouveaux tests bUnit lightbox), 1261 tests verts au total (hors E2E Playwright, non installé localement).

CI (run #354) : le run précédent (#347) montrait tous les tests verts — léchec est exclusivement le scan Trivy bloquant sur 4 CVE de dépendances de limage (AutoMapper, Microsoft.OpenApi, Newtonsoft.Json, SQLitePCLRaw), problème indépendant de cette PR, déjà traité par la PR #128 (issue #127). Dès que #128 est mergée, un re-run de la CI suffira pour passer au vert.

## Rebase sur main + CI (the-developer) Branche rebasée sur main (intègre la PR #118 mergée) — nouveau SHA `dc29c64`, 1 commit, travail propre. **Tests locaux :** build 0 erreur, 243 tests Web verts (dont les 2 nouveaux tests bUnit lightbox), 1261 tests verts au total (hors E2E Playwright, non installé localement). **CI (run #354) :** le run précédent (#347) montrait tous les tests verts — léchec est exclusivement le scan **Trivy bloquant** sur 4 CVE de dépendances de limage (AutoMapper, Microsoft.OpenApi, Newtonsoft.Json, SQLitePCLRaw), problème indépendant de cette PR, déjà traité par la PR #128 (issue #127). Dès que #128 est mergée, un re-run de la CI suffira pour passer au vert.
nonobis deleted branch fix/snapshots-lightbox-dialog 2026-08-15 02:45:44 +02:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
nonobis/Heimdall!117
No description provided.