Files
khadhroony-solana-project/deltas/0.3.2/pre.008.md
2026-08-29 21:54:00 +02:00

135 lines
4.3 KiB
Markdown

<!-- file: deltas/0.3.2/pre.008.md -->
<!-- version: 1 -->
# Delta `0.3.2-pre.008` — PostgreSQL integration réelle opt-in
## Base exacte
Cette tranche s'applique sur `0.3.2-pre.007`, dont le gate opérateur du 2026-08-29 est intégralement vert : audits Rust/Markdown, `cargo check --workspace`, Clippy, tests `ksp-store-postgres-lib`, tests `ksp-store-lib` avec et sans feature PostgreSQL, check `--no-default-features` et graphes Cargo.
## Objet
Matérialiser le premier test PostgreSQL réel de la fondation `0.3.2` sans ajouter de comportement de production et sans créer de table métier RAW.
## Changements
### Test live isolé
Nouveau fichier :
```text
crates/ksp-store-postgres-lib/tests/postgres_foundation_live.rs
```
Le test est `#[ignore]` et :
```text
lit une URI PostgreSQL dédiée uniquement depuis stdin
borne l'entrée à 4096 octets
ne lit aucune variable d'environnement
ne loggue/imprime jamais l'URI
refuse PostgreSQL < 15
n'imprime que le major PostgreSQL
refuse de démarrer si ksp_store_schema_migrations existe déjà
```
Le scénario réel couvre :
```text
connexion PostgreSQL
bootstrap initial
health Ready version 0 / pending 0
close explicite borné
réouverture idempotente
reset contrôlé de la metadata possédée par le test
deux bootstrap concurrents
checksum sentinel corrompu -> MigrationMismatch
restore checksum -> recovery Ready
rollback physique du V000 exact après erreur SQL injectée
re-bootstrap après rollback
cleanup final de la seule table metadata possédée par le test
```
### Rollback sans hook de production
Aucun hook `cfg(test)`, feature de test ou API publique supplémentaire n'est ajouté à `ksp-store-postgres-lib`.
Le test inclut le même `migrations/V000__bootstrap.sql`, l'exécute dans une transaction PostgreSQL de test, ajoute un sentinel transitoire, provoque une erreur SQL contrôlée puis droppe la transaction. `tokio-postgres 0.7.18` rollback implicitement une `Transaction` droppée. Le test prouve ensuite l'absence physique de la metadata avant un nouveau bootstrap normal.
### Non-destructivité
Le test ne contient aucun :
```text
DROP DATABASE
DROP SCHEMA
CREATE DATABASE
CREATE SCHEMA
DDL RawTransaction
DDL RawAccountState
SQL CORE/DECODE/SPECIALIZED
```
Les `DROP TABLE` éventuels ciblent uniquement `ksp_store_schema_migrations`, après que le test a prouvé que cette relation n'existait pas avant son démarrage et qu'il en possède donc le cleanup.
## Documentation de suivi
Le plan et la matrice validation sont mis à jour pour :
```text
enregistrer le gate opérateur pre.007 vert
figer la stratégie live réelle de pre.008
remplacer l'idée d'un hook cfg(test) par une injection transactionnelle externe au runtime
marquer les critères live comme matérialisés mais non encore exécutés
ajouter la commande opérateur stdin sans environnement
```
## Hors scope confirmé
Aucun changement de production dans :
```text
ksp-store-lib
ksp-store-postgres-lib/src
ksp-store-api
Config
migrations committed
TLS/pool/runtime
```
Toujours aucun `RawTransaction` ou `RawAccountState` PostgreSQL.
## Validation locale disponible
La génération doit exécuter les audits Python et Markdown. Cargo n'est pas disponible dans l'environnement de génération ; le test live doit donc d'abord être compilé par le gate opérateur puis exécuté explicitement sur un PostgreSQL dédié.
## Gate opérateur déterministe
```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-postgres-lib
cargo test -p ksp-store-lib
cargo test -p ksp-store-lib --no-default-features
cargo check -p ksp-store-lib --no-default-features
```
## Gate PostgreSQL réel opt-in
Sur une database PostgreSQL dédiée dont `ksp_store_schema_migrations` est absente :
```bash
read -rsp "Dedicated PostgreSQL URI: " KSP_PG_TEST_URI; echo
printf '%s\n' "$KSP_PG_TEST_URI" | cargo test -p ksp-store-postgres-lib --test postgres_foundation_live -- --ignored --nocapture --test-threads=1
unset KSP_PG_TEST_URI
```
La variable shell n'est pas exportée ; le test lit uniquement stdin.
## Suite
Si les gates déterministes et live sont verts : `0.3.2-pre.009` — hardening, completeness et dependency matrix.