v0.3.2-pre.006
This commit is contained in:
143
deltas/0.3.2/pre.006.md
Normal file
143
deltas/0.3.2/pre.006.md
Normal file
@@ -0,0 +1,143 @@
|
||||
<!-- file: deltas/0.3.2/pre.006.md -->
|
||||
<!-- version: 1 -->
|
||||
|
||||
# Delta `0.3.2-pre.006` — migration/bootstrap PostgreSQL foundation
|
||||
|
||||
## 1. Base
|
||||
|
||||
Base exacte : `0.3.2-pre.005-fix.001`.
|
||||
|
||||
Le gate opérateur du 29 août 2026 est entièrement vert : audits Rust/Markdown, workspace check/Clippy, tests `ksp-store-postgres-lib`, tests `ksp-store-lib` avec et sans feature PostgreSQL et compilation `--no-default-features` passent. Les versions physiques réellement résolues observées sont `tokio-postgres 0.7.18`, `deadpool-postgres 0.14.2` et `tokio-postgres-rustls 0.14.0`.
|
||||
|
||||
## 2. Objet
|
||||
|
||||
Matérialiser le moteur privé de migration/bootstrap de la fondation PostgreSQL, sans aucune persistence métier :
|
||||
|
||||
```text
|
||||
ksp_store_schema_migrations uniquement
|
||||
sentinel version 0
|
||||
nom bootstrap immuable
|
||||
SHA-256 du SQL exact
|
||||
advisory transaction lock borné
|
||||
statement timeout transaction-local
|
||||
transaction unique
|
||||
validation metadata/history
|
||||
newer-runtime guard
|
||||
rollback du run courant
|
||||
```
|
||||
|
||||
## 3. Dépendance SHA-256
|
||||
|
||||
`sha2 ^0.11` devient une dépendance workspace explicite et une dépendance directe de `ksp-store-postgres-lib`, car le backend calcule lui-même le checksum persistant.
|
||||
|
||||
Le digest SHA-256 est encodé explicitement en 64 caractères hex minuscules ; aucune dépendance de codec hex supplémentaire n'est ajoutée.
|
||||
|
||||
## 4. Migration bootstrap embarquée
|
||||
|
||||
La seule ressource SQL de production ajoutée est :
|
||||
|
||||
```text
|
||||
crates/ksp-store-postgres-lib/migrations/V000__bootstrap.sql
|
||||
```
|
||||
|
||||
Elle crée uniquement :
|
||||
|
||||
```text
|
||||
ksp_store_schema_migrations
|
||||
```
|
||||
|
||||
avec les champs minimaux :
|
||||
|
||||
```text
|
||||
version BIGINT PRIMARY KEY
|
||||
name TEXT NOT NULL
|
||||
checksum TEXT NOT NULL
|
||||
applied_at TIMESTAMPTZ NOT NULL
|
||||
```
|
||||
|
||||
Aucune table/index RAW, CORE, DECODE ou SPECIALIZED n'est introduit.
|
||||
|
||||
## 5. Algorithme runtime
|
||||
|
||||
Après la première acquisition physique déjà introduite en `pre.005`, le backend conserve ce client dédié et exécute :
|
||||
|
||||
```text
|
||||
begin transaction
|
||||
pg_try_advisory_xact_lock($1) en polling borné
|
||||
set_config('statement_timeout', $1, true)
|
||||
probe metadata
|
||||
si absente et auto_migrate=false -> migration_pending sans DDL
|
||||
si absente et auto_migrate=true -> V000 + sentinel dans la même transaction
|
||||
si présente -> vérification forme minimale + PK version
|
||||
load history ordered
|
||||
missing/divergence -> migration mismatch
|
||||
version > 0 -> schema newer
|
||||
commit unique
|
||||
```
|
||||
|
||||
L'ensemble du bootstrap est aussi borné par `migration_timeout`. Une sortie avant `commit()` droppe la transaction ; le rollback PostgreSQL implicite protège DDL et history du run courant.
|
||||
|
||||
Les colonnes obligatoires de metadata sont vérifiées sans interdire des colonnes supplémentaires futures. Cela permet à un ancien runtime de lire une history plus récente et de produire `schema_newer` plutôt qu'un faux mismatch de forme.
|
||||
|
||||
## 6. Erreurs façade
|
||||
|
||||
Le bridge backend ajoute :
|
||||
|
||||
```text
|
||||
MigrationFailed
|
||||
MigrationMismatch
|
||||
SchemaNewer
|
||||
```
|
||||
|
||||
La façade mappe vers :
|
||||
|
||||
```text
|
||||
store.postgres_migration_failed
|
||||
store.postgres_migration_mismatch
|
||||
store.postgres_schema_newer
|
||||
```
|
||||
|
||||
Aucun texte serveur, SQL, URI ou credential n'est propagé.
|
||||
|
||||
## 7. Tests/canaris
|
||||
|
||||
Les tests unitaires sans serveur couvrent :
|
||||
|
||||
```text
|
||||
checksum exact/stable du V000
|
||||
absence de schéma métier dans le SQL
|
||||
sentinel valide
|
||||
sentinel missing
|
||||
nom/checksum divergent
|
||||
history plus récente
|
||||
bridge backend étendu
|
||||
frontière dépendances + sha2 direct
|
||||
```
|
||||
|
||||
La concurrence réelle, l'idempotence réelle et le rollback injecté restent au test PostgreSQL opt-in de `pre.008`.
|
||||
|
||||
## 8. Version
|
||||
|
||||
```text
|
||||
workspace.package.version = 0.3.2-pre.6
|
||||
```
|
||||
|
||||
## 9. 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-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
|
||||
cargo tree -p ksp-store-postgres-lib --edges normal
|
||||
cargo tree -p ksp-store-lib --edges normal
|
||||
```
|
||||
|
||||
## 10. Suite
|
||||
|
||||
Après gate propre, `pre.007` ferme la composition end-to-end et ajoute la projection health/readiness sûre, sans ouvrir encore les tables RAW métier.
|
||||
Reference in New Issue
Block a user