Skip to content

docs(conformance): « couvert » exige une preuve de mise en service (D-2) - #79

Merged
PhilippeVienne merged 1 commit into
devfrom
docs/matrix-in-service
Sep 30, 2026
Merged

PhilippeVienne merged 1 commit into
devfrom
docs/matrix-in-service

Conversation

@PhilippeVienne

Copy link
Copy Markdown
Contributor

Remplace #63, fermée par GitHub à la suppression de sa branche de base (pile) après la fusion de #75 (ex-#61). Même contenu, rebasé sur dev ; base : dev.

Objet

Constat D-2 de l'audit du 2026-09-25 : la matrice prouvait l'existence d'un test, pas la mise en service du mécanisme — c'est ainsi que §7.11 avait pu rester « couvert » sans qu'aucun binaire ne l'appelle. Tranche c, dernière du découpage D (a : #60 → b : #61 → c : cette PR).

Empilement : base docs/matrix-versions-ids (#61, tête d25ee8c à l'ouverture). La branche contient aussi, en premier commit, le correctif #62 (encodage du failInfo), trouvé par le test du binaire écrit ici et nécessaire à ses assertions. Ordre de merge : #62 (indépendante), #60, #61, puis cette PR ; au rebase sur dev, le commit de #62 déjà mergé disparaît de lui-même.

Changements

  • Statut « implémenté, pas en service » : mécanisme et test présents, aucun binaire ne l'appelle — compte comme non satisfait. §7.11.1/§7.11.2 (oe-crosstsa, oe-replicate) y passe.
  • in_service, obligatoire pour une ligne couverte (choix de l'utilisateur) : un test qui exerce un binaire (bin/…) ou une étape d'un job de démonstration réelle (.github/workflows/ci.yml, kind/compose). validate() refuse une ligne couverte sans elle.
  • crates/oe-conformance/tests/references.rs résout mécaniquement chaque référence test et in_service : fichier présent, fonction définie et non #[ignore], étape de workflow existante. Il a trouvé que la ligne REQ-7.5-01 citait pkcs11_integration.rs, entièrement #[ignore] (jamais exécuté en CI) — elle cite désormais le test du binaire.
  • Tests de câblage écrits plutôt que déclasser (choix de l'utilisateur) :
    • bin/tsa-server/tests/serve.rs — premier test du binaire tsa-server : vrai token SoftHSM (clé générée dedans), certificat émis par une CA de test ; refus au démarrage d'un certificat au profil OCSP (EN 319 422 §6) ; en enforce sans heure traçable, /healthz 503 et refus timeNotAvailable (EN 319 421 TIS-7.7.1-07) ; en monitor, jeton vérifié par openssl ts -verify (EN 319 422 §7) et SHA-1 refusé en badAlg (TS 119 312 §5.1).
    • bin/ca-server/tests/bootstrap_cli.rs::undersized_ca_keys_are_refused_by_the_binary (TS 119 312 §8.4).
  • CI : SoftHSM2 installé dans le job de tests ; OE_REQUIRE_SOFTHSM=1 fait échouer le test du binaire au lieu de l'ignorer — une preuve de mise en service ne peut plus sauter en silence.
  • Matrice : 36 exigences — 17 couvertes, 1 implémentée, 16 écarts, 2 hors périmètre ; le document affiche la preuve « en service » de chaque ligne couverte ; /api/v1/conformance expose en_service. README à jour.

Limites

  • Les deux jobs de démonstration tournent en OPENEIDAS_TIME_POLICY=monitor : la suspension en enforce n'est prouvée que par le test du binaire, pas en démonstration réelle.
  • Les tests PostgreSQL restent gardés par OE_CASTORE_TEST_DSN, absente du job de tests CI (inchangé ici).
  • « Faire relire la matrice par une personne qui n'a pas écrit le code, à chaque version » (recommandation de l'audit) reste organisationnel.

Vérifications

  • cargo fmt --check, cargo clippy --workspace --all-targets -- -D warnings (1.97 et 1.98.1), cargo test --workspace avec PostgreSQL et OE_REQUIRE_SOFTHSM=1, cargo audit --ignore RUSTSEC-2023-0071, cargo deny check licenses : verts. make conformance-doc régénéré.
  • Mutation : le résolveur refuse la citation d'origine (fichier de tests ignorés) ; sans la règle in_service, detects_missing_versions_ids_and_mismatched_clauses échoue.
  • À confirmer par la CI : l'installation de SoftHSM2 sur le runner (le module est fourni par libsofthsm2 à /usr/lib/softhsm/libsofthsm2.so, vérifié sous Ubuntu).

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

Constat D-2 de l'audit du 2026-09-25 : la matrice prouvait l'existence
d'un test, pas la mise en service du mécanisme. C'est ainsi que §7.11
avait pu rester « couvert » alors qu'aucun binaire ne l'appelait.

- Nouveau statut « implémenté, pas en service » (mécanisme et test
  présents, aucun binaire ne l'appelle) : §7.11 (oe-crosstsa,
  oe-replicate) y passe.
- Entry gagne `in_service` : pour une ligne couverte, un test qui exerce
  un binaire (bin/…) ou une étape d'un job de démonstration réelle
  (.github/workflows/…). validate() refuse une ligne couverte sans elle.
- tests/references.rs résout chaque référence `test` et `in_service` :
  fichier présent, fonction définie et non #[ignore], étape de workflow
  existante. La ligne REQ-7.5-01 citait un test #[ignore] : elle cite
  désormais le test du binaire.
- bin/tsa-server/tests/serve.rs, premier test du binaire tsa-server :
  vrai token SoftHSM, refus d'un certificat hors profil TSU, suspension
  en enforce (/healthz 503, timeNotAvailable), jeton vérifié par
  openssl ts -verify, SHA-1 refusé (badAlg). C'est ce test qui a révélé
  l'encodage fautif du failInfo (commit précédent, PR #62).
- ca-server : undersized_ca_keys_are_refused_by_the_binary.
- CI : SoftHSM2 installé dans le job de tests ; OE_REQUIRE_SOFTHSM fait
  échouer le test du binaire au lieu de l'ignorer.
- 36 exigences : 17 couvertes, 1 implémentée, 16 écarts, 2 hors
  périmètre. `/api/v1/conformance` expose `en_service`.

Co-authored-by: Claude <noreply@anthropic.com>
@PhilippeVienne
PhilippeVienne merged commit 197c88e into dev Sep 30, 2026
17 checks passed
@PhilippeVienne
PhilippeVienne deleted the docs/matrix-in-service branch September 30, 2026 14:56
PhilippeVienne added a commit that referenced this pull request Oct 1, 2026
…a matrice (#84)

Les correctifs de l'audit du 2026-09-25 sont tous sur dev (#52 à #59, via
#76, #80, #82) : la matrice le dit, avec pour chaque ligne repassée en
« couvert » une preuve de mise en service (règle D-2, #79) — pas seulement
un test de bibliothèque.

- bin/tsa-server/tests/serve.rs, le test du binaire, prouve désormais aussi :
  le refus de démarrer quand OPENEIDAS_ACCURACY ne couvre pas la dérive
  tolérée (T-1), le refus d'émettre avec une clé TSU expirée mais un
  certificat encore valide (T-3), la fraction de seconde de genTime (T-1),
  et le journal du jeton relu (série, empreinte soumise, état de l'horloge :
  J-3), en relisant audit-monitor.log après un horodatage réel.
- Le job de démonstration Helm/kind interroge le répondeur OCSP pour un
  numéro jamais émis et exige `unknown` (O-1).
- C-1 : preuve par les tests du binaire ca-server (ARL et certificat de la
  racine servis aux adresses gravées) ; R-2 : étape Helm qui refuse
  l'approbation automatique en production ; R-1 : actions signées relayées
  par ra-console et revue de la voie de secours, toutes deux testées sur les
  binaires.
- Restent en écart, cible resserrée : l'authentification multifacteur
  (GEN-6.5.5-04 : la voie de secours CLI n'a pas de second facteur, son
  contrôle compensatoire — RBAC de l'hôte, trace non authentifiée, revue —
  est nommé dans le mécanisme, décision de l'utilisateur), la durée de
  conservation côté tsa-server (§7.10) et la nouvelle bi-clé à chaque
  renouvellement TSU (TIS-7.6.7). docs/ARCHITECTURE.md décrit le journal
  tel qu'il est.

Bilan : 23 couvertes, 1 implémentée, 10 écarts, 2 hors périmètre (avant :
17 / 1 / 16 / 2). docs/CONFORMITE-ETSI.md régénéré.

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