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

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.