7.3 KiB
Delta 0.3.6-pre.010 — hardening et canaries externes
Base requise
0.3.6-pre.009-fix.002 appliquée
workspace.package.version = 0.3.6-pre.9.fix.2
Le gate opérateur fourni pour cette base est intégralement vert :
cargo fmt --all PASS
python3 scripts/audit_rust_workspace_rules.py PASS / clean
python3 scripts/audit_markdown_tables.py ... PASS / clean (264 tables / 157 fichiers)
cargo check --workspace PASS
cargo clippy --workspace --all-targets PASS / aucun warning
cargo test -p ksp-job-backfill-lib PASS
unitaires 47 PASS
dependency_boundary 2 PASS
public_api 6 PASS
release_completeness 2 PASS
pre.009-fix.002 ne modifiait aucune dépendance ni feature, donc aucun arbre Cargo supplémentaire n'était requis pour ce fix.
Objectif
Matérialiser exclusivement le hardening pre.010 du plan 027 : fermer les scénarios adversariaux, les firewalls de dépendances, la sécurité des surfaces Debug, la visibilité/import crate-root et l'API externe du premier vertical Backfill RAW.
La tranche ne modifie aucun code de production, n'élargit aucune API, n'ajoute aucune dépendance et ne change aucune feature. Le smoke live PostgreSQL/Devnet reste conditionnel à un environnement explicitement configuré et n'est pas inventé dans l'environnement d'assemblage.
Canaries adversariales et erreurs stables
La nouvelle suite tests/hardening.rs vérifie depuis l'extérieur de la crate :
- les neuf codes d'erreur publics Backfill, leur domaine
job_backfill, leur code exact et leur unicité ; - une signature Base58 hostile contenant
0, rejetée avecERROR_CODE_BACKFILL_SIGNATURE_INVALID; - une borne
page_size = 0, rejetée avecERROR_CODE_BACKFILL_REQUEST_INVALIDet contextefield=page_size; - un fingerprint identique pour deux JobId/rôles Transport différents mais un même réseau/scope ;
- un fingerprint différent lorsque le réseau logique change.
La canarie confirme donc que l'identité sémantique du scope reste indépendante du JobId et du rôle Transport, tout en restant sensible au réseau.
Sécurité des surfaces publiques
Les canaries externes vérifient :
BackfillSignatureetBackfillScopeFingerprintrestent redacted enDebug;BackfillRequestne rend pas la signature brute d'un scope explicite ;BackfillJobHandles'appuie sur leDebugredacted deJobNotificationet ne rend pas le payload snapshot ;- la façade
src/lib.rsn'expose aucunpub mod, type Tokio/Futures, détail Serde/SHA, backend Store, Reqwest ou Tonic.
Aucune URL, credential, provider, endpoint ni payload RAW n'est ajouté à l'API publique.
Runtime externe
Le handle public est exercé sans seam privée :
BackfillJobRuntime::new
BackfillJobRuntime::handle
BackfillJobHandle::snapshots
JobSnapshotSource::current
BackfillJobHandle::cancel
La canarie impose :
- état initial
JobState::Created; - snapshot initial
BackfillJobPhase::Created; - première annulation acceptée ;
- token observable comme demandé ;
- seconde annulation rejetée idempotemment.
Les races, waits RPC et drainage Store restent couverts par les unit tests pre.009-fix.002; pre.010 ajoute ici la preuve par la surface publique externe.
Firewalls de dépendances
La surface normale de ksp-job-backfill-lib est vérifiée exactement :
futures-util
ksp-core-lib
ksp-job-api
ksp-logging-lib
ksp-onchain-transport-lib
ksp-store-lib (default-features = false)
serde_json.workspace
sha2.workspace
tokio (macros + sync)
La seule dev-dependency reste Tokio avec le runtime de test.
La suite refuse explicitement ksp-store-api et ksp-store-postgres-lib. Elle vérifie en outre qu'aucune des couches basses suivantes ne dépend de ksp-job-api ni de ksp-job-backfill-lib :
ksp-core-lib
ksp-logging-lib
ksp-onchain-transport-lib
ksp-store-api
ksp-store-lib
ksp-store-postgres-lib
Cela ferme la canarie de retour de dépendance vers Job sans modifier le graphe.
Visibilité et chemins crate-root
Une canarie source dédiée protège la correction pre.009-fix.001/fix.002 :
BackfillRuntimeControletTerminalClaimrestent privés et absents du crate-root ;- les items partagés contrôlés ont leurs
implviacrate::Item; - aucun
crate::module::Itemn'est admis dans les modules Backfill contrôlés ; - la construction du fingerprint passe par
crate::BackfillScopeFingerprint::from_bytes(bytes); - le constructeur tuple inaccessible
crate::BackfillScopeFingerprint(bytes)reste interdit.
Cette canarie est volontairement limitée à ksp-job-backfill-lib afin de verrouiller la crate active sans introduire un nouvel audit global qui signalerait rétroactivement des surfaces historiques hors mission v0.3.6.
Tests matérialisés
Aucun unit test n'est ajouté : le total reste 47 unitaires.
La tranche ajoute 9 canaries dans tests/hardening.rs et 1 canarie de complétude, portant l'intégration de 10 à 20 canaries :
dependency_boundary 2
public_api 6
release_completeness 3
hardening 9
Total attendu au gate :
47 unitaires
20 canaries d'intégration
Fichiers ajoutés
crates/ksp-job-backfill-lib/tests/hardening.rs
deltas/0.3.6/pre.010.md
Fichiers modifiés
Cargo.toml
crates/ksp-job-backfill-lib/tests/release_completeness.rs
docs/plans/027-V0_3_6_JOB_API_BACKFILL_PLAN.md
docs/validation/023-V0_3_6_JOB_API_BACKFILL.md
Aucune suppression. Aucun manifeste de dépendances de crate n'est modifié.
Versions d'en-tête
Cargo.toml 410 -> 411
crates/ksp-job-backfill-lib/tests/release_completeness.rs 7 -> 9
docs/plans/027-V0_3_6_JOB_API_BACKFILL_PLAN.md 20 -> 23
docs/validation/023-V0_3_6_JOB_API_BACKFILL.md 20 -> 23
La nouvelle canarie tests/hardening.rs a été révisée pendant le hardening et est livrée à version: 4. Le présent delta commence à version: 1.
Version workspace
workspace.package.version = 0.3.6-pre.10
delivery = 0.3.6-pre.010
Validations d'assemblage
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
python3 -m unittest scripts.tests.test_audit_markdown_tables
L'environnement d'assemblage ne fournit ni Cargo, ni Rustc, ni Rustfmt. La compilation, Clippy et les 47 + 20 tests Rust restent donc à exécuter par l'opérateur.
Gate opérateur demandé
Aucune dépendance ni feature ne change dans pre.010; aucun cargo tree n'est demandé pour cette tranche.
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
Résultat attendu : 47 unitaires + 20 canaries d'intégration, sans warning Clippy.