v0.3.6-pre.010

This commit is contained in:
2026-09-01 16:55:14 +02:00
parent 8dbd86c297
commit 7f8ce987a5
6 changed files with 613 additions and 25 deletions

View File

@@ -1,5 +1,5 @@
<!-- file: docs/validation/023-V0_3_6_JOB_API_BACKFILL.md -->
<!-- version: 20 -->
<!-- version: 23 -->
# Validation v0.3.6 — Job API et premier backfill RAW
@@ -189,29 +189,29 @@ Aucune entrée absolue, traversée, avec séparateur inversé ou lien symbolique
## 13. Annulation et résultats terminaux
`pre.009` matérialise le runtime concret, le canal latest-value et les chemins d'annulation/drainage. Le gate opérateur exécute avec succès les 47 unitaires et 10 canaries couvrant l'attente RPC de découverte, une future pré-Store longue, le drainage des candidats déjà admis, les listeners lents/indépendants, la rétention terminale et les arbitrations terminales. La qualité Rust reste néanmoins bloquée : `pre.009-fix.001` corrige les chemins crate-root/visibilités et le warning Clippy de la canarie publique, puis son gate révèle `E0423` sur la construction du fingerprint public opaque ; `pre.009-fix.002` corrige ce dernier point et reste à valider.
`pre.009` matérialise le runtime concret, le canal latest-value et les chemins d'annulation/drainage. Le gate opérateur exécute avec succès les 47 unitaires et 10 canaries couvrant l'attente RPC de découverte, une future pré-Store longue, le drainage des candidats déjà admis, les listeners lents/indépendants, la rétention terminale et les arbitrations terminales. La qualité Rust reste néanmoins bloquée : `pre.009-fix.001` corrige les chemins crate-root/visibilités et le warning Clippy de la canarie publique, puis son gate révèle `E0423` sur la construction du fingerprint public opaque ; `pre.009-fix.002` corrige ce dernier point ; son gate opérateur est désormais intégralement vert : audits, `cargo check`, Clippy sans warning, 47 unitaires et 10 canaries.
- [ ] Annulation idempotente et état `Cancelling` observable.
- [ ] Admissions arrêtées après observation du token.
- [ ] Attente de page et hydratation RPC longues abandonnables.
- [ ] Persistance déjà soumise drainée jusqu'à un résultat connu.
- [ ] Course complétion contre annulation déterministe.
- [ ] Course erreur fatale contre annulation déterministe.
- [ ] Missing seul donne `Completed` avec résultat `Partial`.
- [ ] Conflit, conversion ou infrastructure donnent `Failed`.
- [ ] Checkpoint final cohérent avec le dernier préfixe durable.
- [X] Annulation idempotente et état `Cancelling` observable au gate `pre.009-fix.002`.
- [X] Admissions arrêtées après observation du token au gate `pre.009-fix.002`.
- [X] Attente de page et hydratation RPC longues abandonnables au gate `pre.009-fix.002`.
- [X] Persistance déjà soumise drainée jusqu'à un résultat connu au gate `pre.009-fix.002`.
- [X] Course complétion contre annulation déterministe au gate `pre.009-fix.002`.
- [X] Course erreur fatale contre annulation déterministe au gate `pre.009-fix.002`.
- [X] Missing seul donne `Completed` avec résultat `Partial`, couvert par le runtime/exécuteur validé `pre.009-fix.002`.
- [X] Conflit, conversion ou infrastructure donnent `Failed`, couvert par le runtime/exécuteur validé `pre.009-fix.002`.
- [X] Checkpoint final cohérent avec le dernier préfixe durable au gate `pre.009-fix.002`.
## 14. Firewalls et qualité Rust
- [X] `ksp-job-api` dépend exactement de Core et n'a aucune feature, dev-dependency ou build-dependency.
- [X] `ksp-job-backfill-lib` ne dépend pas de Config, App, Wallet, Program, Interface ou backend Store ; `ksp-store-lib` est consommée avec `default-features = false`.
- [ ] Aucun retour de dépendance vers Job depuis les couches basses.
- [ ] Aucun retour de dépendance vers Job depuis les couches basses ; canarie externe `pre.010` matérialisée.
- [X] Versions/features auditées : aucune nouvelle version externe ; `sha2`, `futures-util` et `tokio` réutilisent les entrées workspace existantes. `futures-util` reste un détail normal privé depuis `pre.008` et `pre.009` promeut Tokio en dépendance normale privée limitée à `macros` + `sync`; aucun type Tokio n'est exposé.
- [X] `pre.005` matérialise 11 tests unitaires et 6 canaries dintégration ; le gate opérateur les exécute tous avec succès.
- [X] `pre.006` matérialise 19 tests unitaires et 7 canaries dintégration ; le gate opérateur les exécute tous avec succès, avec uniquement le warning Clippy corrigé par `pre.006-fix.001`.
- [X] `pre.009` : `cargo check --workspace` vert et 47 unitaires + 10 canaries vertes ; Clippy signale 3 warnings de normalisation/API de test, corrigés par `pre.009-fix.001`; le gate de ce fix révèle ensuite `E0423`, corrigé par `pre.009-fix.002` et encore à revalider.
- [X] `pre.009` : après `fix.001` puis `fix.002`, audits, `cargo check`, Clippy sans warning et 47 unitaires + 10 canaries sont verts sur `0.3.6-pre.9.fix.2`.
- [X] Audit manuel `pre.009-fix.001` : les items partagés de `ksp-job-backfill-lib` passent par `crate::Item`; `BackfillRuntimeControl`/`TerminalClaim` restent privés et les unit tests runtime utilisent `super::Item`, conformément à RUST-IMPORT-009/012 et RUST-API-007.
- [ ] `pre.009-fix.002` : `E0423` corrigé en confinant la construction du champ privé dans `BackfillScopeFingerprint::from_bytes`; gate opérateur Rust à rejouer.
- [X] `pre.009-fix.002` : `E0423` corrigé en confinant la construction du champ privé dans `BackfillScopeFingerprint::from_bytes`; gate opérateur intégralement vert.
- [ ] `cargo fmt --all -- --check` vert.
- [X] `scripts/audit_rust_workspace_rules.py` vert sur `pre.005` dans l'environnement d'assemblage et dans le gate opérateur.
- [X] `scripts/audit_markdown_tables.py` vert sur `pre.005` dans le gate opérateur (264 tables / 147 fichiers, delta inclus).
@@ -221,6 +221,20 @@ Aucune entrée absolue, traversée, avec séparateur inversé ou lien symbolique
- [ ] `cargo test --workspace --all-targets --all-features` vert.
- [ ] `cargo tree -d` examiné et doublons justifiés.
### Hardening externe `pre.010`
La tranche ajoute 9 canaries externes et une canarie de complétude, portant le total d'intégration attendu à 20 sans modifier les 47 unitaires. Le gate Rust reste à rejouer.
- [ ] Neuf codes d'erreur publics Backfill stables, uniques et dans le domaine `job_backfill`; canarie externe matérialisée.
- [ ] Signature Base58 hostile et bornes de requête invalides retournent les codes stables attendus ; canarie externe matérialisée.
- [ ] Fingerprint sensible au réseau mais indépendant du JobId et du rôle Transport ; canarie externe matérialisée.
- [ ] `Debug` des signatures/fingerprint/requête/handle ne révèle ni signature brute ni payload snapshot ; canarie externe matérialisée.
- [ ] Handle public créé en état `Created`, annulation acceptée une fois puis idempotemment rejetée ; canarie externe matérialisée.
- [ ] Surface de dépendances exacte et backend-neutral, avec Store façade `default-features = false`; canarie externe matérialisée.
- [ ] Surface source Backfill conforme aux chemins crate-root pour les items partagés et sans `crate::module::Item`; canarie externe matérialisée.
- [ ] Aucun retour des couches Core/Logging/Transport/Store vers Job ; canarie externe matérialisée.
- [ ] Façade publique sans fuite Tokio/Futures/Serde/Store backend/HTTP ; canarie externe matérialisée.
## 15. Preuves d'intégration et fermeture
- [X] Fake Transport et fake Store déterministes sans backend direct exécutés avec succès au gate `pre.007`; fake processor concurrent `pre.008-fix.001` exécuté avec succès.