Files
2026-08-29 22:00:20 +02:00

158 lines
5.0 KiB
Markdown

<!-- file: deltas/0.3.2/pre.009.md -->
<!-- version: 1 -->
# 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.