135 lines
4.3 KiB
Markdown
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.
|