Skip to content

feat(ra-console): file des demandes et modale de signature (étape 6b) - #71

Open
PhilippeVienne wants to merge 1 commit into
feat/ra-console-frontendfrom
feat/ra-console-frontend-requests
Open

PhilippeVienne wants to merge 1 commit into
feat/ra-console-frontendfrom
feat/ra-console-frontend-requests

Conversation

@PhilippeVienne

Copy link
Copy Markdown
Contributor

Objet

docs/WEBUI.md §15 étape 6, tranche 6b : les décisions RA se prennent dans le navigateur, avec la clé FIDO2 (docs/UI-UX.md §3.1, §3.4, §5, §6.1). Empilée sur #70 (feat/ra-console-frontend, tête 6e3e1c2). Aucun changement côté API : 6b consomme les routes des étapes 3a/3b (#64, #65).

  • File des demandes en attente : tableau dense, sélection au clavier (j/k, a approuver, r rejeter), inspecteur latéral (transaction, sujet, profil, date UTC).
  • Justification avant signature : obligatoire pour un rejet (UI-UX §3.4). C'est une garde d'interface (attribut required et contrôle du script) : ca-server ne l'exige pas sur la voie signée — à décider si elle doit le devenir.
  • Modale de signature WYSIWYS (<dialog> natif) : le corps figé par ca-server, affiché tel quel, et son empreinte SHA-256 groupée, avant tout geste sur la clé ; erreur sans fermeture (message selon le code : action_mismatch, already_used, expired, denied…), challenge redemandé s'il est consommé ou expiré ; Échap bloqué pendant la cérémonie matérielle, clic extérieur sans effet.
  • Harnais e2e : le vrai service d'actions de ca-server derrière le lien mTLS (au lieu d'un lien mort), et huit demandes en attente.

Vérifications

  • Playwright, 6/6 en local sur trois passes (PW_CHANNEL=chrome) : approbation (corps et empreinte affichés, état APPROVED par alice côté serveur, aucune erreur ni violation de CSP), rejet au clavier avec motif obligatoire (état REJECTED), renoncement sans effet (PENDING). Les parcours de 6a restent verts.
  • Mutation : sans les deux gardes du motif, le parcours de rejet échoue. Retirer seulement le contrôle du script ne suffit pas — l'attribut required du champ bloque déjà l'envoi (deux gardes indépendantes, vérifié).
  • npm run typecheck, dist/ reconstruit ; cargo fmt --check, cargo clippy --workspace --all-targets -- -D warnings (1.97 et 1.98.1), cargo test -p ra-console avec PostgreSQL : verts (seuls le harnais e2e et le frontend changent).

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

docs/WEBUI.md §15 étape 6, docs/UI-UX.md §3.1, §3.4, §5, §6.1 : les
décisions RA se prennent dans le navigateur, avec la clé FIDO2.

- File des demandes en attente : tableau dense, sélection au clavier
  (j/k, a approuver, r rejeter), inspecteur latéral.
- Justification avant signature, obligatoire pour un rejet (garde
  d'interface : attribut required et contrôle du script).
- Modale de signature (<dialog> natif) : corps figé par ca-server
  affiché tel quel avec son empreinte SHA-256, puis la clé ; erreur sans
  fermeture, challenge redemandé s'il est consommé ou expiré, Échap
  bloqué pendant la cérémonie matérielle.
- Harnais e2e : le vrai service d'actions de ca-server derrière le lien
  mTLS, et huit demandes en attente. Parcours Playwright : approbation
  (corps et empreinte affichés, état APPROVED côté serveur), rejet au
  clavier avec motif obligatoire, renoncement sans effet.

Co-authored-by: Claude <noreply@anthropic.com>
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