158 lines
5.0 KiB
Markdown
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.
|