feat(oe-ca-core): journal bloquant avant toute écriture durable - #42
Merged
Merged
Conversation
Premier morceau du chantier « Recorder async » (docs/WEBUI.md §7, §15 étape 2b) : le stockage distant du journal (2b-B, à venir) sera atteint par réseau, donc asynchrone, et son échec doit bloquer l'opération en cours — pas seulement être ignoré comme c'était le cas jusqu'ici (`let _ = recorder.append(...)`). - oe_ca_core::Recorder devient async (#[async_trait]). - Issuer::record propage l'échec du journal (CaError::Other) au lieu de l'ignorer. - Chaque appelant journalise désormais AVANT sa mutation durable, jamais après : run_ceremony (avant save_authority), issue (avant save_certificate, les deux événements ca.issuance_refused et ca.certificate_issued), revoke (avant store.revoke), publish_crl (avant store.save_crl). Si le journal échoue, rien d'irréversible n'a encore eu lieu ; seul un numéro de série ou de CRL réservé est perdu, déjà toléré (la séquence ne recule jamais). Ne touche pas encore oe_raflow::Recorder ni oe_tsa_core::Recorder (chantiers suivants), ni ca-server au-delà de la signature de l'impl existante — le câblage S3 réel viendra après ce chantier et le nouveau crate client S3. Vérifications : cargo fmt --check, cargo clippy --workspace --all-targets (1.97 et 1.98.1), cargo test --workspace (avec OE_CASTORE_TEST_DSN), cargo audit. Contrôle par mutation : chacun des quatre réordonnancements (cérémonie, émission, révocation, CRL) échoue pour la bonne raison quand on revient à l'ordre précédent (illustré pour la révocation, le même schéma s'applique aux trois autres).
This was referenced Sep 25, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Contexte
Prérequis découvert en travaillant sur l'étape 2b (
GET /api/v1/audit/search, docs/WEBUI.md §7, §15) : le stockage distant du journal (S3-compatible auto-hébergé, tranche B à venir) sera atteint par réseau, donc asynchrone. Oroe_ca_core::Recorderest un trait synchrone, et son échec est aujourd'hui ignoré (let _ = recorder.append(...)) partout où il est appelé. Décision prise avec vous : un échec du journal doit bloquer l'opération en cours, pas seulement être signalé.Premier morceau d'un chantier en plusieurs PR (
oe-ca-core→oe-raflow/oe-actions→oe-tsa-core/oe-timesource→ câblage S3 deca-server).Contenu
oe_ca_core::Recorderdevient async (#[async_trait]).Issuer::recordpropage l'échec du journal (CaError::Other) au lieu de l'ignorer.run_ceremony(avantsave_authority),issue(avantsave_certificate, pourca.issuance_refusedetca.certificate_issued),revoke(avantstore.revoke),publish_crl(avantstore.save_crl). Si le journal échoue, rien d'irréversible n'a eu lieu ; seul un numéro de série ou de CRL réservé est perdu — déjà toléré aujourd'hui (la séquence ne recule jamais).Ne touche pas
oe_raflow::Recordernioe_tsa_core::Recorder(chantiers suivants), ni le câblage S3 réel deca-server(viendra avec le nouveau crate client, préparé séparément).Vérifications
cargo fmt --checkcargo clippy --workspace --all-targets -- -D warnings(1.97 et 1.98.1)cargo test --workspace(avecOE_CASTORE_TEST_DSN) : vert, y compris 4 nouveaux tests prouvant qu'un journal défaillant bloque bien la cérémonie/l'émission/la révocation/la publication de CRL avant toute écriture au storecargo audit --ignore RUSTSEC-2023-0071: rien à signaler