4.3 KiB
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 :
crates/ksp-store-postgres-lib/tests/postgres_foundation_live.rs
Le test est #[ignore] et :
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 :
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 :
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 :
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 :
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
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 :
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.