v0.3.6-pre.008-fix.001

This commit is contained in:
2026-09-01 15:22:54 +02:00
parent 75cbf9df09
commit d89aee9910
5 changed files with 76 additions and 14 deletions

View File

@@ -1,5 +1,5 @@
<!-- file: docs/plans/027-V0_3_6_JOB_API_BACKFILL_PLAN.md -->
<!-- version: 14 -->
<!-- version: 15 -->
# Plan v0.3.6 — Job API et premier backfill RAW
@@ -482,7 +482,7 @@ La tranche matérialise 29 tests unitaires et 8 canaries d'intégration au total
### `pre.008` — Concurrence, frontier et checkpoint
**Statut : matérialisé ; gate opérateur à rejouer.**
**Statut : alisé ; corrigé par `pre.008-fix.001`, gate opérateur du fix à rejouer.**
Budget cible : **15-20 min**. Entrée : résultats Store typés et gate `pre.007` vert. La tranche ajoute `BackfillCheckpoint`, `BackfillExecutionBatch` et `execute_backfill_discovery`. Le checkpoint est opaque, caller-owned et validé contre `JobId` + fingerprint de scope ; aucune table ou persistance durable de Job n'est créée. `BackfillRequest::with_checkpoint` reste additif afin de préserver les constructeurs existants.
@@ -490,6 +490,12 @@ L'exécution utilise un `FuturesUnordered` privé et maintient au plus `hydratio
La reprise suit les quatre sémantiques figées : Latest repart de la vue courante et s'appuie sur l'idempotence Store ; Before reprend via le dernier curseur contigu et cumule le préfixe durable ; After et Explicit rejouent le scope et sautent uniquement le préfixe validé. Si une découverte After finit sur `AfterAnchorNotReached`, aucun progrès nouveau de checkpoint n'est publié ; le checkpoint précédent est conservé s'il existe. La tranche matérialise 39 tests unitaires et 9 canaries d'intégration. L'annulation coopérative, le snapshot latest-value complet et les courses terminales restent fermés jusqu'à `pre.009`.
#### `pre.008-fix.001` — Masquage du helper `request` dans la canarie checkpoint
**Statut : matérialisé ; gate opérateur à rejouer.**
Le gate opérateur de `pre.008` confirme `cargo fmt`, les audits Rust/Markdown et `cargo check --workspace`, puis la compilation des targets de test échoue en `E0618`/`E0282` : dans `pre_008_checkpoint_is_bound_to_job_and_scope_fingerprint`, la variable locale `request` masque le helper homonyme avant la construction du second scope. Le fix renomme uniquement cette liaison locale en `primary_request` et synchronise ses usages ; aucun contrat, test, comportement runtime, checkpoint, dépendance ou feature ne change. Comme un fichier Rust est corrigé, la version workspace devient `0.3.6-pre.8.fix.1`. Les arbres Cargo de `pre.008` ont déjà été inspectés puisque cette tranche ajoutait `futures-util`; ils n'ont pas à être rejoués pour ce fix sans changement de graphe.
### `pre.009` — Annulation et snapshots concrets
**Statut : planifié.**

View File

@@ -1,5 +1,5 @@
<!-- file: docs/validation/023-V0_3_6_JOB_API_BACKFILL.md -->
<!-- version: 14 -->
<!-- version: 15 -->
# Validation v0.3.6 — Job API et premier backfill RAW
@@ -113,7 +113,7 @@ Aucune entrée absolue, traversée, avec séparateur inversé ou lien symbolique
- [X] Nombre de candidats entre 1 et 10 000.
- [X] Concurrence d'hydratation entre 1 et 64.
- [X] `min_context_slot` transmis sans en changer le sens.
- [ ] Checkpoint rejeté si son JobId ou son fingerprint de scope diffère ; test `pre.008` matérialisé, gate opérateur à rejouer.
- [ ] Checkpoint rejeté si son JobId ou son fingerprint de scope diffère ; canarie corrigée par `pre.008-fix.001`, gate opérateur du fix à rejouer.
- [X] Aucun défaut d'application silencieux dans la bibliothèque.
## 8. Pagination, ordre et déduplication
@@ -175,7 +175,7 @@ Aucune entrée absolue, traversée, avec séparateur inversé ou lien symbolique
## 12. Concurrence, frontière et checkpoint
`pre.008` matérialise un checkpoint opaque caller-owned, sans table Store ni promesse de reprise crash-safe. `BackfillRequest::with_checkpoint` valide `JobId` et fingerprint avant usage. L'exécuteur utilise une collection `FuturesUnordered` strictement bornée par `hydration_concurrency`, réconcilie les fins hors ordre par index stable et draine les futures déjà admises après la première erreur fatale. Les tests couvrent frontier contiguë, Missing, conflit, reprise Before/Latest/Explicit et protection After lorsque l'ancre n'est pas atteinte ; ils restent à exécuter dans le gate opérateur.
`pre.008` matérialise un checkpoint opaque caller-owned, sans table Store ni promesse de reprise crash-safe. `BackfillRequest::with_checkpoint` valide `JobId` et fingerprint avant usage. L'exécuteur utilise une collection `FuturesUnordered` strictement bornée par `hydration_concurrency`, réconcilie les fins hors ordre par index stable et draine les futures déjà admises après la première erreur fatale. Le gate opérateur confirme format, audits et `cargo check`, mais la compilation des tests échoue en `E0618`/`E0282` parce qu'une liaison locale `request` masque le helper homonyme dans la canarie checkpoint. `pre.008-fix.001` renomme uniquement cette liaison en `primary_request`; le gate du fix reste à rejouer.
- [ ] Nombre d'hydratations en vol borné par la requête.
- [ ] Aucune file de candidats ou notifications non bornée.
@@ -207,7 +207,7 @@ Aucune entrée absolue, traversée, avec séparateur inversé ou lien symbolique
- [X] Versions/features auditées : aucune nouvelle version externe ; `sha2`, `futures-util` et `tokio` réutilisent les entrées workspace existantes. `futures-util` devient un détail normal privé de `pre.008`, Tokio reste dev-only.
- [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] `cargo clippy --workspace --all-targets` warning-free sur `pre.007` ; le gate `pre.008` reste à rejouer.
- [X] `cargo clippy --workspace --all-targets` warning-free sur `pre.007` ; `pre.008` atteint la compilation des tests puis échoue sur le shadowing corrigé par `pre.008-fix.001`.
- [ ] `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).