Repository navigation
feat(oe-tsa-core,oe-timesource): journal bloquant, deux traits restent synchrones - #47
Merged
Merged
Conversation
…t synchrones Dernier morceau du chantier « Recorder async » (docs/WEBUI.md §7, §15 étape 2b ; item P0 J-2 de l'audit du 2026-09-25). Contrairement à oe-ca-core et oe-raflow, ces deux traits restent SYNCHRONES : leurs appelants tournent déjà hors de tout exécuteur async (Authority::timestamp est appelée directement depuis un gestionnaire HTTP sans spawn_blocking, Monitor tourne dans un thread dédié pour les requêtes NTP bloquantes) — un futur dos S3 y ferait un appel HTTP bloquant, sans ajouter de dépendance pour bloquer sur un futur. - oe_tsa_core::Recorder : Authority::record propage l'échec du journal (TsaError::Other) au lieu de l'ignorer ; timestamp.granted est désormais journalisé AVANT la signature HSM (l'acte irréversible), timestamp.rejected après (rien d'irréversible n'en dépend, mais son échec prime quand même). - oe_timesource::Recorder : cas différent, aucun appelant à faire échouer (une mesure périodique, pas une action). Un échec de journal marque la mesure non traçable (Status.traceable = false) : le mécanisme existant de now() (refus en politique Enforce) prend le relais, sans changer la signature de poll_once. Reste, seulement maintenant : câbler ca-server sur oe-s3 (2b-B proprement dite). 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 : pour oe-tsa-core, un compteur d'appels au signataire prouve qu'aucune signature n'a lieu quand le journal échoue (pas seulement qu'une erreur est rendue) ; pour oe-timesource, un test dédié prouve que traceable passe à false uniquement quand le journal échoue. Co-authored-by: Claude <noreply@anthropic.com>
1 of 6 tasks
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
Dernier morceau du chantier « Recorder async » (docs/WEBUI.md §7, §15 étape 2b ; item P0 J-2 de l'audit du 2026-09-25,
docs/AUDIT_2026_09_25.md/TODO.md§0). Suite de #42 (oe-ca-core) et #45 (oe-raflow/oe-actions), toutes deux mergées. Basedev.Une différence importante avec les deux PR précédentes
Contrairement à
oe-ca-coreetoe-raflow, ces deux traits restent synchrones. Leurs appelants tournent déjà hors de tout exécuteur async :Authority::timestampest appelée directement depuis un gestionnaire HTTP sansspawn_blocking(déjà bloquant aujourd'hui pour la signature HSM).Monitortourne dans un thread dédié (std::thread::spawn) pour les requêtes NTP, elles-mêmes bloquantes.Un futur dos S3 y ferait un appel HTTP bloquant (
reqwest::blocking), sans avoir besoin d'ajouter une dépendance juste pour bloquer sur un futur dans ces threads.Contenu
oe_tsa_core::Recorder:Authority::recordpropage l'échec du journal (TsaError::Other) au lieu de l'ignorer.timestamp.grantedest désormais journalisé avant la signature HSM (l'acte irréversible : une signature déjà produite ne s'annule pas) ;timestamp.rejectedreste après (rien d'irréversible n'en dépend), mais son échec prime quand même sur le motif de rejet.oe_timesource::Recorder: cas différent, décidé avec vous — aucun appelant à faire échouer ici (une mesure périodique, pas une action discrète). Un échec de journal marque la mesure non traçable (Status.traceable = false) : le mécanisme existant denow()(refus en politiqueEnforcesi!traceable) prend le relais, sans changer la signature depoll_once.Ce que ça débloque
Le câblage S3 réel de
ca-server(2b-B) peut enfin commencer : les trois familles deRecorderdu dépôt (oe-ca-core/oe-raflow/oe-actionsen async ;oe-tsa-core/oe-timesourceen synchrone, tous deux bloquants et propageant l'échec) sont maintenant cohérentes avec la décision « un échec du journal bloque l'opération qui en dépend ».Vérifications
cargo fmt --checkcargo clippy --workspace --all-targets -- -D warnings(1.97 et 1.98.1)cargo test --workspace(avecOE_CASTORE_TEST_DSN) : vertcargo audit --ignore RUSTSEC-2023-0071: rien à signaleroe-tsa-core, un compteur d'appels au signataire prouve qu'aucune signature n'a lieu quand le journal échoue (pas seulement qu'une erreur est rendue) ; pouroe-timesource, un test dédié prouve quetraceablepasse àfalseuniquement quand le journal échoue