Files
khadhroony-solana-project/deltas/0.3.6/pre.009-fix.001.md

125 lines
6.2 KiB
Markdown

<!-- file: deltas/0.3.6/pre.009-fix.001.md -->
<!-- version: 1 -->
# Delta v0.3.6-pre.009-fix.001
## Base requise
- `0.3.6-pre.9` / livraison `pre.009`.
- Le gate opérateur de `pre.009` confirme `cargo check --workspace` et l'exécution intégrale des 47 tests unitaires + 10 canaries d'intégration.
- Clippy reste non warning-free avec deux réexports `pub(crate)` inutilisés (`BackfillRuntimeControl`, `TerminalClaim`) et une canarie `public_api` dont le paramètre générique n'est pas effectivement utilisé.
- L'inspection de la cause révèle un défaut plus fondamental : plusieurs items `pub`/`pub(crate)` partagés de `ksp-job-backfill-lib` sont encore référencés par nom local depuis leur module propriétaire, contrairement à `RUST-IMPORT-009`; deux helpers runtime n'ont en outre aucune justification de visibilité crate-wide selon `RUST-API-007`.
## Correctif de visibilité et de chemins crate-root
Le correctif ne masque pas les warnings. Il réconcilie toute la crate `ksp-job-backfill-lib` avec les contrats Rust applicables :
- tout item partagé `pub` ou `pub(crate)` réexporté à la racine est référencé via `crate::Item`, y compris depuis son module de déclaration ;
- les implémentations des types partagés utilisent la façade crate-root (`impl crate::Type`, `impl Trait for crate::Type`) ;
- aucun chemin `crate::module::Item` n'est conservé pour une surface partagée ;
- les unit tests attachés à un module continuent d'utiliser `crate::Item` pour les items partagés et `super::Item` pour les items strictement privés.
Cette réconciliation couvre les surfaces déjà présentes de la crate (`BackfillCheckpoint`, discovery, conversion, persistence, bounded execution) afin de ne pas laisser dans le même composant des violations identiques à celles révélées par `pre.009`.
## Visibilité runtime
`BackfillRuntimeControl` et `TerminalClaim` sont utilisés uniquement par `runtime.rs` et ses unit tests attachés. Ils redeviennent donc privés :
```text
BackfillRuntimeControl pub(crate) -> private
TerminalClaim pub(crate) -> private
```
Leurs réexports crate-root sont supprimés. Les unit tests de `runtime.rs` les consomment via `super::BackfillRuntimeControl` et `super::TerminalClaim`, conformément à `RUST-IMPORT-012` et `RUST-API-007`.
Les canaries discovery/execution n'élargissent plus artificiellement cette visibilité pour provoquer une annulation. Elles construisent directement :
```text
JobCancellationToken
watch<bool>
crate::BackfillCancellationSignal
```
puis déclenchent à la fois le token runtime-neutral et le réveil `watch` privé.
`BackfillCancellationSignal` et `BackfillRuntimePublisher` restent `pub(crate)` car ils sont réellement consommés par d'autres modules de production ; leurs implémentations et usages passent par `crate::...`.
## Canary Clippy publique
La canarie `pre_009_concrete_runtime_snapshot_and_control_contracts_are_available_from_crate_root` conserve son assertion générique sur `JobSnapshotSource`, mais le type générique est désormais porté par un argument `PhantomData<T>`. Le paramètre n'est donc plus considéré comme inutilisé par `clippy::extra_unused_type_parameters`.
Aucun contrat public, état Job, sémantique d'annulation, comportement latest-value, frontier/checkpoint, dépendance ou feature ne change.
## Cargo et versions de fichiers
- `workspace.package.version` : `0.3.6-pre.9` -> `0.3.6-pre.9.fix.1`.
- `Cargo.toml` : version d'en-tête `408` -> `409`.
- `src/checkpoint.rs` : `1` -> `2`.
- `src/conversion.rs` : `3` -> `4`.
- `src/discovery.rs` : `4` -> `5`.
- `src/execution.rs` : `2` -> `3`.
- `src/lib.rs` : `5` -> `6`.
- `src/persistence.rs` : `2` -> `3`.
- `src/request.rs` : `3` -> `4`.
- `src/runtime.rs` : `2` -> `3`.
- `tests/public_api.rs` : `6` -> `7`.
- `unit_tests/discovery.rs` : `5` -> `6`.
- `unit_tests/execution.rs` : `2` -> `3`.
- `unit_tests/runtime.rs` : `2` -> `3`.
- plan 027 : `16` -> `17`.
- validation 023 : `16` -> `17`.
## Graphe de dépendances
Aucune dépendance ni feature ne change dans ce fix. Les arbres Cargo ont déjà été inspectés au gate de `pre.009`, puisque cette tranche promouvait Tokio en dépendance normale privée. Ils ne sont donc pas à rejouer pour `pre.009-fix.001` sauf si l'opérateur effectue séparément un `cargo clean` et souhaite revalider le graphe après reconstruction propre.
## Payload
Ajout :
- `deltas/0.3.6/pre.009-fix.001.md`
Modifications :
- `Cargo.toml`
- `crates/ksp-job-backfill-lib/src/checkpoint.rs`
- `crates/ksp-job-backfill-lib/src/conversion.rs`
- `crates/ksp-job-backfill-lib/src/discovery.rs`
- `crates/ksp-job-backfill-lib/src/execution.rs`
- `crates/ksp-job-backfill-lib/src/lib.rs`
- `crates/ksp-job-backfill-lib/src/persistence.rs`
- `crates/ksp-job-backfill-lib/src/request.rs`
- `crates/ksp-job-backfill-lib/src/runtime.rs`
- `crates/ksp-job-backfill-lib/tests/public_api.rs`
- `crates/ksp-job-backfill-lib/unit_tests/discovery.rs`
- `crates/ksp-job-backfill-lib/unit_tests/execution.rs`
- `crates/ksp-job-backfill-lib/unit_tests/runtime.rs`
- `docs/plans/027-V0_3_6_JOB_API_BACKFILL_PLAN.md`
- `docs/validation/023-V0_3_6_JOB_API_BACKFILL.md`
Aucune suppression.
## Validations exécutées à l'assemblage
```text
python3 scripts/audit_rust_workspace_rules.py
python3 scripts/audit_markdown_tables.py README.md RULES.md ROADMAP.md CHANGELOG.md docs prompts crates deltas/0.3.6
```
Un contrôle ciblé supplémentaire vérifie dans `ksp-job-backfill-lib` qu'aucun item réexporté au crate-root n'est encore référencé localement par son nom nu dans son module propriétaire et qu'aucun `crate::module::Item` ne subsiste pour les surfaces partagées.
L'environnement d'assemblage ne fournit ni Cargo, ni Rustc, ni Rustfmt ; le gate Rust du fix reste donc à exécuter par l'opérateur.
## Gate opérateur demandé
```bash
cargo fmt --all
python3 scripts/audit_rust_workspace_rules.py
python3 scripts/audit_markdown_tables.py README.md RULES.md ROADMAP.md CHANGELOG.md docs prompts crates deltas/0.3.6
cargo check --workspace
cargo clippy --workspace --all-targets
cargo test -p ksp-job-backfill-lib
```
Attendu : 47 tests unitaires et 10 canaries d'intégration, sans warning Clippy. Aucun `cargo tree` n'est demandé pour ce fix sans changement de dépendances/features.