Skip to content

feat(ca-server): revue a posteriori des décisions de la voie de secours (R-1) - #59

Open
PhilippeVienne wants to merge 1 commit into
feat/cli-decision-provenancefrom
feat/cli-decision-review
Open

PhilippeVienne wants to merge 1 commit into
feat/cli-decision-provenancefrom
feat/cli-decision-review

Conversation

@PhilippeVienne

Copy link
Copy Markdown
Contributor

Objet

Constat R-1 de l'audit du 2026-09-25, docs/WEBUI.md §20, décision O4 : tranche C du découpage validé (A : #57 → B : #58 → C : cette PR). Empilée sur #58 (feat/cli-decision-provenance) : elle lit le champ authenticated_via que #58 introduit. Merger #58 d'abord, puis rebaser celle-ci (git rebase --onto origin/dev <tête de #58>) et la rebrancher sur dev.

  • ca-server audit cli-decisions relit le journal chaîné — ni base ni token, une copie répliquée suffit (--journal) — et liste les décisions authenticated_via = "cli" non encore revues (ou depuis --since <RFC 3339>), en texte ou --json. Codes de sortie 0 (rien à revoir), 1 (à revoir), 2 (journal illisible ou rompu : rien n'est jugé) — même logique que operators audit, exploitable par une CronJob d'alerte.
  • --acknowledge --reviewer <nom> <commentaire> consigne ra.cli_decisions_reviewed (relecteur, commentaire, jusqu_a = tête lue, séquences couvertes), annoté Via::Cli + identité système ; la revue suivante repart de là. Refusé sur une copie (--journal) et sans commentaire ; l'acquittement lui-même n'est jamais relisté comme décision.
  • docs/CA.md : procédure de revue.

Limites assumées

  • La fréquence de revue (O4) reste à fixer par l'association : la commande la rend possible et prouvable, elle ne l'impose pas.
  • Le relecteur n'est que déclaré (voie CLI, comme le reste du secours) ; son identité système est consignée.

Vérifications

  • cargo fmt --check, cargo clippy --workspace --all-targets -- -D warnings (1.97 et 1.98.1), cargo test --workspace avec PostgreSQL, cargo audit --ignore RUSTSEC-2023-0071 : verts.
  • bin/ca-server/tests/cli_review.rs : logique de revue (fenêtre par acquittement, --since), binaire réel (codes 0/1/2, acquittement refusé sans commentaire ou sur une copie sans rien écrire), journal falsifié → code 2 et rien de listé.
  • Le test a trouvé un vrai défaut en cours d'écriture : l'acquittement (lui-même cli) se relistait comme décision — corrigé.
  • Mutation (4 mutants, tous tués) : sans le filtre cli, sans la fenêtre d'acquittement, sans le refus d'acquitter une copie, sans l'exclusion de l'événement de revue.

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

…rs (R-1)

Constat R-1 de l'audit du 2026-09-25, docs/WEBUI.md §20 et décision O4 :
chaque décision prise par le CLI (authenticated_via: cli) doit être relue,
et cette relecture doit laisser une trace.

- `ca-server audit cli-decisions` relit le journal chaîné (ni base ni
  token ; une copie répliquée suffit, `--journal`) et liste les décisions
  de secours non encore revues, ou depuis `--since`. Codes de sortie
  0 (rien à revoir), 1 (à revoir), 2 (journal illisible ou rompu).
- `--acknowledge --reviewer … -- commentaire` consigne
  ra.cli_decisions_reviewed (relecteur, jusqu'au n°, séquences couvertes),
  annoté Via::Cli ; la revue suivante repart de là. Refusé sur une copie
  ou sans commentaire ; l'acquittement n'est pas relisté.

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