# Delta `0.3.2-pre.009` — hardening, completeness et dependency matrix ## Base exacte Cette tranche s'applique sur `0.3.2-pre.008`. Le 29 août 2026, le gate `pre.008` est entièrement vert : audits Rust/Markdown, workspace check/Clippy, tests `ksp-store-postgres-lib`, façade avec et sans feature PostgreSQL et compilation `--no-default-features` passent. Le gate PostgreSQL réel opt-in passe également sur **PostgreSQL 17** avec bootstrap initial/idempotent/concurrent, mismatch/recovery checksum, rollback transactionnel, health `Ready`, fermeture bornée et cleanup contrôlé. ## Objet Durcir et figer la fondation Store/PostgreSQL avant le gate technique final sans modifier le code de production, les migrations ou les dépendances runtime. ## Canari façade Nouveau fichier : ```text crates/ksp-store-lib/tests/hardening_completeness.rs ``` Il vérifie : ```text 5 modules privés exacts 84 exports crate-root exacts manifest runtime exact feature postgres par défaut exacte backend PostgreSQL toujours optionnel aucune dépendance physique PostgreSQL dans la façade canary secret redacted dans StoreSettings/Debug URI malformed rejetée avant I/O code ConfigInvalid avec postgres / BackendNotCompiled sans feature aucun canary dans Display/Debug Error aucune lecture Config/env/PG*/.pgpass aucun Pool/Client/Row/Statement/SQL physique dans la façade ``` Le même test est conçu pour passer sous le feature set par défaut et sous `--no-default-features`. ## Canari backend PostgreSQL Nouveau fichier : ```text crates/ksp-store-postgres-lib/tests/hardening_completeness.rs ``` Il vérifie : ```text 5 modules privés exacts 7 exports bridge exacts 9 dépendances physiques exactes du manifest URI malformed rejetée avant I/O URI > 4096 octets rejetée avant I/O hostaddr sans host rejeté sous VerifyFull options= libpq rejeté canary password/URI absent de Debug/error backend PostgresBackendError limité structurellement à kind + phase statique PoolError::Backend(_) abandonne explicitement l'erreur remote aucun rendu d'erreur externe dans runtime/migration/health aucune lecture env/KSP/KSPB/PG*/.pgpass aucun sslrootcert/sslcert/sslkey/.postgresql implicite aucune capability PostgreSQL RawTransaction/RawAccount V000 reste strictement metadata-only ``` Les cas hostiles sont tous forcés avant le premier `.await` physique et n'exigent donc aucun PostgreSQL réel. ## Non-régression Store API `ksp-store-api` n'est pas modifié. Le gate `pre.009` rejoue explicitement ses tests, notamment `tests/external_backend.rs`, afin de confirmer qu'un backend externe peut toujours implémenter les dix capabilities RAW sans dépendre de `ksp-store-lib` ou de PostgreSQL. ## Documentation de suivi Le plan et la matrice validation sont réconciliés avec : ```text gates pre.006/pre.007 verts pre.008 live vert sur PostgreSQL 17 scope exact des canaris pre.009 statuts hardening matérialisés mais non encore exécutés commande de dependency matrix ciblée ``` ## Fichiers ajoutés ```text crates/ksp-store-lib/tests/hardening_completeness.rs crates/ksp-store-postgres-lib/tests/hardening_completeness.rs deltas/0.3.2/pre.009.md ``` ## Fichiers modifiés ```text Cargo.toml docs/plans/023-V0_3_2_STORE_POSTGRES_FOUNDATION_PLAN.md docs/validation/019-V0_3_2_STORE_POSTGRES_FOUNDATION.md ``` ## Fichiers supprimés Aucun. ## Version ```text workspace.package.version = 0.3.2-pre.9 ``` Aucun `src/**`, migration, Config, README/USAGE, CHANGELOG ou ROADMAP n'est modifié dans cette tranche. ## Validations exécutées dans l'environnement de génération ```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.2 contrôle statique de la version et du payload contrôle statique des exports/manifests attendus contrôle des chaînes interdites no-env/no-business ``` Cargo/rustc/rustfmt ne sont pas disponibles dans l'environnement de génération. ## Gate opérateur ```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.2 cargo check --workspace cargo clippy --workspace --all-targets cargo test -p ksp-store-api cargo test -p ksp-store-postgres-lib cargo test -p ksp-store-lib cargo test -p ksp-store-lib --no-default-features cargo test -p ksp-config-lib cargo check -p ksp-store-lib --no-default-features cargo tree -p ksp-store-lib --edges normal cargo tree -p ksp-store-lib -e features cargo tree -p ksp-store-postgres-lib --edges normal cargo tree --duplicates ``` Le smoke PostgreSQL réel n'a pas besoin d'être rejoué dans `pre.009` si aucun code runtime/migration n'a changé ; il sera rejoué au gate technique final `pre.010`. ## Questions ouvertes Aucune question fonctionnelle nouvelle. Tout échec des nouveaux canaris doit produire un correctif `pre.009-fix.NNN` avant `pre.010`. ## Suite Après gate vert : `0.3.2-pre.010` — gate technique final sans nouveau développement fonctionnel.