v0.3.2-pre.010
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
<!-- file: docs/plans/023-V0_3_2_STORE_POSTGRES_FOUNDATION_PLAN.md -->
|
||||
<!-- version: 11 -->
|
||||
<!-- version: 12 -->
|
||||
|
||||
# Plan `0.3.2` — Store/PostgreSQL runtime foundation
|
||||
|
||||
@@ -1117,7 +1117,48 @@ cargo tree --duplicates
|
||||
|
||||
### `pre.010` — Gate technique final
|
||||
|
||||
Workspace/clippy/tests, targeted tests, PostgreSQL live gate, graphes Cargo finaux. Aucun développement fonctionnel nouveau.
|
||||
Base requise : `0.3.2-pre.009` avec hardening/completeness entièrement vert. Le gate opérateur `pre.009` du 29 août 2026 confirme les audits Rust/Markdown, workspace check/Clippy, Store API, backend PostgreSQL, façade avec et sans feature, Config, graphes Cargo et `cargo test --workspace`.
|
||||
|
||||
Cette tranche ne modifie aucun code de production, test fonctionnel, migration, Config ou dépendance runtime. Elle synchronise uniquement la version de prerelease et prépare le gate technique final.
|
||||
|
||||
Gate final attendu :
|
||||
|
||||
```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-api
|
||||
cargo test -p ksp-store-postgres-lib
|
||||
cargo test -p ksp-store-lib
|
||||
cargo test -p ksp-store-lib --no-default-features
|
||||
cargo test -p ksp-config-lib
|
||||
cargo check -p ksp-store-lib --no-default-features
|
||||
cargo test --workspace
|
||||
cargo tree -p ksp-store-lib --edges normal
|
||||
cargo tree -p ksp-store-lib -e features
|
||||
cargo tree -p ksp-store-postgres-lib --edges normal
|
||||
cargo tree --duplicates
|
||||
```
|
||||
|
||||
Le smoke PostgreSQL réel est ensuite rejoué sur une base dédiée où `ksp_store_schema_migrations` est absente avant démarrage :
|
||||
|
||||
```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
|
||||
```
|
||||
|
||||
Comme `pre.004` a réellement modifié les resources de packaging desktop pour `std.store`, le gate final rejoue aussi :
|
||||
|
||||
```bash
|
||||
(cd crates/ksp-app-config-desk && cargo tauri build)
|
||||
(cd crates/ksp-app-solprices-desk && cargo tauri build)
|
||||
(cd crates/ksp-app-wallet-desk && cargo tauri build)
|
||||
```
|
||||
|
||||
Aucun développement fonctionnel nouveau n'est autorisé dans `pre.010`. Tout défaut découvert ouvre un `pre.010-fix.NNN` avant la réconciliation documentaire.
|
||||
|
||||
### `pre.011` — Réconciliation documentaire finale
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<!-- file: docs/validation/019-V0_3_2_STORE_POSTGRES_FOUNDATION.md -->
|
||||
<!-- version: 11 -->
|
||||
<!-- version: 12 -->
|
||||
|
||||
# Validation `0.3.2` — Store/PostgreSQL runtime foundation
|
||||
|
||||
@@ -84,6 +84,8 @@ Le gate opérateur de `pre.007`, fourni le 29 août 2026, est entièrement vert
|
||||
|
||||
Le gate `pre.008` du 29 août 2026 est doublement vert : le gate déterministe passe intégralement puis `postgres_foundation_live` passe sur **PostgreSQL 17**. La preuve réelle couvre bootstrap initial/idempotent/concurrent, mismatch/recovery checksum, rollback transactionnel, health `Ready`, fermeture bornée et cleanup de la metadata possédée par le test. Cette base est l'entrée effective de `pre.009`.
|
||||
|
||||
Le gate opérateur de `pre.009`, fourni le 29 août 2026, est entièrement vert : audits Rust/Markdown, workspace check/Clippy, `ksp-store-api`, backend PostgreSQL, façade avec et sans feature, Config, compilation `--no-default-features`, graphes/features/duplicates et `cargo test --workspace` passent. Les canaris hardening/completeness ajoutés par `pre.009` sont donc validés. Cette base est l'entrée effective de `pre.010`.
|
||||
|
||||
## 3. Frontières Cargo
|
||||
|
||||
### V32-DEP-001 — Façade -> API
|
||||
@@ -116,7 +118,7 @@ Preuves : manifest scanner + cargo tree.
|
||||
|
||||
Le canari source de `pre.002` interdit explicitement la dépendance inverse ; le `cargo tree` opérateur confirme l'absence de cycle. La frontière sera durcie à nouveau en `pre.009`.
|
||||
|
||||
Statut : `PASS pre.002 opérateur / MATÉRIALISÉ pre.009 / TODO gate opérateur`.
|
||||
Statut : `PASS pre.002 opérateur / PASS pre.009 opérateur`.
|
||||
|
||||
### V32-DEP-004 — Feature PostgreSQL
|
||||
|
||||
@@ -146,7 +148,7 @@ consumer ordinaire -> ksp-store-postgres-lib
|
||||
|
||||
Matérialisé par `pre.005` : les types physiques nécessaires sont publics uniquement dans la crate backend pour la frontière inter-crates et ne sont jamais réexportés par `ksp-store-lib`; `Pool/Client/Row/Statement` restent absents de sa crate-root.
|
||||
|
||||
Statut : `PASS pre.005-fix.001 opérateur / MATÉRIALISÉ pre.009 / TODO gate opérateur`.
|
||||
Statut : `PASS pre.005-fix.001 opérateur / PASS pre.009 opérateur`.
|
||||
|
||||
### V32-DEP-006 — `ksp-store-api` non régressé
|
||||
|
||||
@@ -158,7 +160,7 @@ exports/capabilities existants conservés
|
||||
aucun type backend ajouté pour PostgreSQL
|
||||
```
|
||||
|
||||
Statut : `MATÉRIALISÉ pre.009 / TODO gate opérateur puis gate final` — le canari backend externe de `ksp-store-api` est rejoué sans modification de la crate.
|
||||
Statut : `PASS pre.009 opérateur / TODO revalidation pre.010` — le canari backend externe de `ksp-store-api` est rejoué sans modification de la crate.
|
||||
|
||||
## 4. Public API et settings
|
||||
|
||||
@@ -176,7 +178,7 @@ Critère : `Postgres` reste un backend connu sans feature et `Store::open` écho
|
||||
|
||||
Matérialisé par `pre.003` : le test `feature_mismatch` appelle réellement `Store::open` sous `--no-default-features` et exige `store.backend_not_compiled`.
|
||||
|
||||
Statut : `PASS pre.003-fix.001 opérateur / MATÉRIALISÉ pre.009 / TODO gate opérateur`.
|
||||
Statut : `PASS pre.003-fix.001 opérateur / PASS pre.009 opérateur`.
|
||||
|
||||
### V32-API-003 — Aucun type backend physique public
|
||||
|
||||
@@ -189,7 +191,7 @@ rustls::*
|
||||
PostgresBackend / Pool / Client / Row / Statement
|
||||
```
|
||||
|
||||
Statut : `MATÉRIALISÉ pre.009 / TODO gate opérateur`.
|
||||
Statut : `PASS pre.009 opérateur`.
|
||||
|
||||
### V32-API-004 — Réexports Store API
|
||||
|
||||
@@ -197,7 +199,7 @@ Critère : un consumer de `ksp-store-lib` accède aux contrats Store API utiles
|
||||
|
||||
`pre.003` réexporte explicitement les 60 symboles crate-root acquis de `ksp-store-api` depuis `ksp-store-lib`, sans glob et sans réexport backend.
|
||||
|
||||
Statut : `PASS pre.003-fix.001 opérateur / MATÉRIALISÉ pre.009 exact exports / TODO gate opérateur`.
|
||||
Statut : `PASS pre.003-fix.001 opérateur / PASS pre.009 opérateur exact exports`.
|
||||
|
||||
### V32-API-005 — Lifecycle
|
||||
|
||||
@@ -281,7 +283,7 @@ PG*
|
||||
|
||||
`pre.004` renforce aussi le canari d'ownership avec les nouveaux filenames Store ; `pre.004-fix.001` conserve cette frontière tout en ajoutant le réseau au contrat `StoreSettings`. Store/backend restent sans dépendance Config et sans lecture KSP/KSPB.
|
||||
|
||||
Statut : `PASS pre.004-fix.001 opérateur / MATÉRIALISÉ pre.009 / TODO gate opérateur`.
|
||||
Statut : `PASS pre.004-fix.001 opérateur / PASS pre.009 opérateur`.
|
||||
|
||||
### V32-CONFIG-004 — Adapter Config -> Store
|
||||
|
||||
@@ -314,7 +316,7 @@ Critère : chaque connection future tokio-postgres est pilotée par le manager r
|
||||
|
||||
`pre.005` délègue la création/recycle des connexions au `Manager` Deadpool retenu ; aucun `tokio::spawn` KSP n'est introduit dans Store. La preuve de non-régression détaillée reste au hardening.
|
||||
|
||||
Statut : `PASS pre.005-fix.001 opérateur / MATÉRIALISÉ pre.009 / TODO gate opérateur`.
|
||||
Statut : `PASS pre.005-fix.001 opérateur / PASS pre.009 opérateur`.
|
||||
|
||||
### V32-POOL-003 — Open failure safe
|
||||
|
||||
@@ -374,7 +376,7 @@ Statut : `PASS pre.005-fix.001 opérateur`.
|
||||
|
||||
Critère : backend ne lit pas `sslrootcert`, `sslcert`, `sslkey`, `.postgresql/*` ou autre fichier implicite hors settings KSP.
|
||||
|
||||
Statut : `MATÉRIALISÉ pre.009 / TODO gate opérateur`.
|
||||
Statut : `PASS pre.009 opérateur`.
|
||||
|
||||
## 8. Migration/bootstrap
|
||||
|
||||
@@ -444,7 +446,7 @@ aucun identifier physique user-configurable en 0.3.2
|
||||
|
||||
`pre.006` garde le DDL versionné sous `include_str!` et toutes les values variables des requêtes de contrôle (`lock key`, `statement_timeout`, history values) passent par paramètres. Les noms physiques sont des constantes KSP, jamais des settings.
|
||||
|
||||
Statut : `PASS pre.006 opérateur / MATÉRIALISÉ pre.009 hardening / TODO gate opérateur`.
|
||||
Statut : `PASS pre.006 opérateur / PASS pre.009 opérateur hardening`.
|
||||
|
||||
### V32-MIG-007 — No business capability
|
||||
|
||||
@@ -456,7 +458,7 @@ Critères :
|
||||
0 repository RAW métier
|
||||
```
|
||||
|
||||
Statut : `MATÉRIALISÉ pre.009 / TODO gate opérateur puis gate final`.
|
||||
Statut : `PASS pre.009 opérateur / TODO revalidation pre.010`.
|
||||
|
||||
## 9. Health/readiness
|
||||
|
||||
@@ -482,7 +484,7 @@ Critère : un health failure n'expose pas server error string, query text ou cre
|
||||
|
||||
Le backend ne conserve que `PostgresBackendErrorKind`; la façade mappe vers un `ErrorCode` KSP optionnel. Le snapshot public ne contient aucune string serveur, URI, SQL, host, user, database ou handle.
|
||||
|
||||
Statut : `PASS pre.007 opérateur / MATÉRIALISÉ pre.009 hardening / TODO gate opérateur`.
|
||||
Statut : `PASS pre.007 opérateur / PASS pre.009 opérateur hardening`.
|
||||
|
||||
## 10. PostgreSQL integration réelle
|
||||
|
||||
@@ -554,7 +556,7 @@ Attendu : rejet borné sans echo.
|
||||
|
||||
`pre.009` ajoute un test d'intégration backend qui force avant I/O : URI malformed, URI > 4096 octets, `hostaddr` sans identité sous `VerifyFull` et `options=` libpq. Chaque cas contient un canary secret et exige une erreur `ConfigInvalid` avec phase statique seulement.
|
||||
|
||||
Statut : `MATÉRIALISÉ pre.009 / TODO gate opérateur`.
|
||||
Statut : `PASS pre.009 opérateur`.
|
||||
|
||||
### V32-SEC-002 — Secret canary
|
||||
|
||||
@@ -570,7 +572,7 @@ health snapshots
|
||||
|
||||
`pre.009` injecte des canaris distincts dans la façade et le backend. Les settings Debug doivent afficher `<redacted>`; les erreurs pré-I/O publiques/backend ne doivent contenir aucun canary. Les snapshots health restent couverts par les canaris déterministes de `pre.007`.
|
||||
|
||||
Statut : `MATÉRIALISÉ pre.009 / TODO gate opérateur`.
|
||||
Statut : `PASS pre.009 opérateur`.
|
||||
|
||||
### V32-SEC-003 — Timeouts hostiles
|
||||
|
||||
@@ -578,19 +580,19 @@ Cas : zéro, inversion, dépassement bornes pour pool/connect/migration/close.
|
||||
|
||||
Les bornes backend-neutral décidées en `pre.001` sont matérialisées et couvertes par tests unitaires en `pre.003`. `pre.005` applique physiquement `connect/wait/create/recycle/shutdown`; `pre.006` applique physiquement `migration_timeout` et `migration_lock_timeout`.
|
||||
|
||||
Statut : `PASS pre.003-fix.001 opérateur` pour les bornes backend-neutral / `PASS pre.005-fix.001 opérateur` pour pool/connect/shutdown / `PASS pre.006 opérateur` pour migration / `MATÉRIALISÉ pre.009` hardening / `TODO gate opérateur`.
|
||||
Statut : `PASS pre.003-fix.001 opérateur` pour les bornes backend-neutral / `PASS pre.005-fix.001 opérateur` pour pool/connect/shutdown / `PASS pre.006 opérateur` pour migration / `PASS pre.009 opérateur` hardening`.
|
||||
|
||||
### V32-SEC-004 — Feature mismatch avant I/O
|
||||
|
||||
`pre.003` matérialise un canari d'intégration compilé avec et sans `postgres`. Sans feature, `Store::open` retourne le code stable `store.backend_not_compiled` avant tout chemin backend physique.
|
||||
|
||||
Statut : `PASS pre.003-fix.001 opérateur / MATÉRIALISÉ pre.009 / TODO gate opérateur`.
|
||||
Statut : `PASS pre.003-fix.001 opérateur / PASS pre.009 opérateur`.
|
||||
|
||||
### V32-SEC-005 — Server error sanitization
|
||||
|
||||
Un serveur/test double qui renvoie un message contenant un canary ne doit pas le faire traverser l'erreur publique.
|
||||
|
||||
Statut : bridge de sanitization matérialisé en `pre.005`; `pre.009` ajoute un canari structurel prouvant que `PostgresBackendError` ne peut retenir que `kind + phase` statiques et que `PoolError::Backend(_)` abandonne le texte remote. `TODO gate opérateur`.
|
||||
Statut : bridge de sanitization matérialisé en `pre.005`; `pre.009` ajoute un canari structurel prouvant que `PostgresBackendError` ne peut retenir que `kind + phase` statiques et que `PoolError::Backend(_)` abandonne le texte remote. `PASS pre.009 opérateur`.
|
||||
|
||||
## 12. Hardening/completeness `pre.009`
|
||||
|
||||
@@ -615,9 +617,28 @@ V000 metadata-only
|
||||
compatibilité backend externe ksp-store-api rejouée au gate
|
||||
```
|
||||
|
||||
Statut global `pre.009` : `MATÉRIALISÉ / TODO gate opérateur`.
|
||||
Statut global `pre.009` : `PASS opérateur` — tests ciblés, canaris hardening, Config, graphes et `cargo test --workspace` verts.
|
||||
|
||||
## 13. Gates Rust/workspace
|
||||
## 13. Gate technique final `pre.010`
|
||||
|
||||
`pre.010` ne contient aucun développement fonctionnel. Il doit revalider sur la version `0.3.2-pre.10` :
|
||||
|
||||
```text
|
||||
audits Rust/Markdown
|
||||
workspace check + Clippy
|
||||
Store API
|
||||
backend PostgreSQL
|
||||
façade default + no-default-features
|
||||
Config std.store
|
||||
cargo test --workspace
|
||||
graphes normal/features/duplicates
|
||||
PostgreSQL live foundation
|
||||
3 builds Tauri avec resources std.store packagées
|
||||
```
|
||||
|
||||
Statut global `pre.010` : `MATÉRIALISÉ / TODO gate opérateur`.
|
||||
|
||||
## 14. Gates Rust/workspace
|
||||
|
||||
À chaque tranche applicable :
|
||||
|
||||
@@ -644,7 +665,7 @@ cargo tree -p ksp-store-postgres-lib --edges normal
|
||||
cargo tree --duplicates
|
||||
```
|
||||
|
||||
Gate PostgreSQL réel `pre.008` après les gates déterministes :
|
||||
Gate PostgreSQL réel `pre.010` après les gates déterministes :
|
||||
|
||||
```bash
|
||||
read -rsp "Dedicated PostgreSQL URI: " KSP_PG_TEST_URI; echo
|
||||
@@ -658,13 +679,16 @@ Gate technique final :
|
||||
|
||||
```bash
|
||||
cargo test --workspace
|
||||
(cd crates/ksp-app-config-desk && cargo tauri build)
|
||||
(cd crates/ksp-app-solprices-desk && cargo tauri build)
|
||||
(cd crates/ksp-app-wallet-desk && cargo tauri build)
|
||||
```
|
||||
|
||||
Les builds Tauri ne sont requis que si `pre.004` modifie réellement les resources/packaging desktop de manière justifiant cette preuve, puis au gate final si la matrice de packaging l'exige.
|
||||
Les trois builds Tauri sont requis au gate final parce que `pre.004` a réellement ajouté les resources `std.store` au packaging desktop.
|
||||
|
||||
Statut global : `TODO` jusqu'aux preuves de chaque tranche.
|
||||
Statut global : `TODO gate opérateur pre.010`.
|
||||
|
||||
## 14. Critères de fermeture
|
||||
## 15. Critères de fermeture
|
||||
|
||||
La matrice ne peut passer en finale que si tous les critères applicables sont `PASS` et que :
|
||||
|
||||
|
||||
Reference in New Issue
Block a user