Skip to content

feat(ra-console): dossiers d'incident dans le navigateur (étape 5c) - #100

Merged
PhilippeVienne merged 1 commit into
devfrom
feat/ra-console-frontend-incidents
Oct 13, 2026
Merged

PhilippeVienne merged 1 commit into
devfrom
feat/ra-console-frontend-incidents

Conversation

@PhilippeVienne

Copy link
Copy Markdown
Contributor

Objet

Dernière tranche du workflow d'incident (docs/WEBUI.md §6, §15 étape 5), après #98 et #99 : l'écran du navigateur. Base dev, PR indépendante. Aucun changement côté serveur.

  • Navigation : entrée « Incidents » avec le compteur des dossiers ouverts.
  • Liste et dossier : liste filtrable par état ; pour le dossier choisi, sa chronologie (notes, actions rattachées avec identifiant, empreinte du corps et état chez l'autorité) et, s'il est clos, sa clôture (qui, quand, justification, empreinte signée, clé).
  • Écriture : ouvrir un dossier, consigner une note, rattacher une action par son identifiant.
  • Clôture : justification obligatoire, puis la modale de signature sur le corps que la console a figé.
  • Modale de signature (sign.ts) : elle accepte un autre émetteur de challenge que ca-server (Signing.prepare) et un corps figé sous forme de texte, affiché tel quel.

Points d'attention pour la revue :

  • Pas de maquette : docs/mockups/ n'a pas d'écran d'incident. L'écran suit le texte de docs/UI-UX.md et reprend les composants existants (tableau dense, inspecteur, badges, modale) ; ni docs/mockups/ ni docs/UI-UX.md ne sont touchés. À faire relire par antigravity.
  • Le corps à signer se lit en entier : le corps de clôture tient en une ligne ; il est maintenant replié dans la modale au lieu de déborder hors champ. Cette règle CSS vaut pour toutes les signatures.
  • Les boutons d'écriture ne sont qu'un affichage : ils sont masqués pour auditeur et admin, et c'est la console qui refuse (403), ce que le second parcours vérifie.
  • Rattacher une action demande son identifiant, à recopier depuis la salle de quorum ou l'audit. Il n'y a pas encore de sélecteur d'actions.
  • web/dist est reconstruit et versionné, comme l'exige la CI.

Vérifications

  • npm run typecheck : vert. npm run build deux fois de suite : dist identique.
  • npx playwright test contre une console réelle sur PostgreSQL (Chrome local) : 14 parcours verts, dont les deux nouveaux :
    • ouverture, note, rattachement d'une action figée par l'autorité, refus d'une action inconnue, clôture avec une vraie cérémonie WebAuthn (corps figé et empreinte affichés, rien de clos avant la signature), compteur, aucune erreur de console ni violation de CSP ;
    • un administrateur lit le dossier clos sans pouvoir écrire, et l'API lui répond 403.
  • Mise en page contrôlée sur captures d'écran (dossier ouvert, modale de clôture, dossier clos).
  • cargo fmt --check, cargo clippy --workspace --all-targets -- -D warnings (toolchain locale et 1.98.1), cargo test --workspace --features oe-castore/postgres (96 suites, aucun « test PostgreSQL ignoré »), cargo audit --ignore RUSTSEC-2023-0071 : verts.
  • Pas de mutation : cette PR ne porte aucune garde de sécurité, celles de l'étape 5 sont côté serveur (feat(ra-console): dossiers d'incident, ouverture et lecture (étape 5a) #98, feat(ra-console): dossiers d'incident, entrées et clôture signée (étape 5b) #99).

Revue humaine obligatoire

Voir PROVENANCE.md. Chaque case est cochée par le
contributeur humain qui valide la PR, après l'avoir fait lui-même.

  • Revue d'architecture validée par l'humain
  • Code relu et tests unitaires/intégration vérifiés localement
  • Absence de dépendances tierces incompatibles avec la double licence EUPL-1.2 / AGPL-3.0 (make licenses)
  • Validation de l'apport intellectuel et de la paternité humaine sur la modification

Assistance par IA

  • Cette PR a été produite avec l'assistance de Claude Code : les commits concernés portent la remorque Co-authored-by: Claude <noreply@anthropic.com>, auteur et committer restent humains, et scripts/provenance.py archive a été lancé
  • Cette PR a été écrite sans assistance par IA

https://claude.ai/code/session_01YRg8X9dbmth9GXcR9hP4QQ

Dernière tranche du workflow d'incident (docs/WEBUI.md §6, docs/UI-UX.md) :
l'écran, au-dessus de l'API des étapes 5a et 5b.

- Entrée « Incidents » dans la navigation, avec le compteur des dossiers
  ouverts.
- Liste filtrable par état ; pour le dossier choisi, sa chronologie
  (notes, actions rattachées avec identifiant, empreinte du corps et état
  chez l'autorité) et, s'il est clos, sa clôture (qui, quand,
  justification, empreinte signée, clé).
- Ouvrir un dossier, consigner une note, rattacher une action par son
  identifiant : proposés aux seuls `ra_operateur` et `ca_operateur`
  (affichage ; la console refuse de toute façon les autres).
- Clôture : justification obligatoire, puis la modale de signature sur le
  corps figé par la console. La modale accepte désormais un autre
  émetteur de challenge que ca-server (`Signing.prepare`) et un corps
  figé sous forme de texte, affiché tel quel et en entier.
- Parcours Playwright : ouverture, note, rattachement d'une action figée,
  refus d'une action inconnue, clôture signée avec la clé, lecture seule
  pour un administrateur.

Co-authored-by: Claude <noreply@anthropic.com>
@PhilippeVienne
PhilippeVienne merged commit 4e14f16 into dev Oct 13, 2026
20 checks passed
@PhilippeVienne
PhilippeVienne deleted the feat/ra-console-frontend-incidents branch October 13, 2026 05:02
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant