From e1fe41902800269abfbf778aa60be169ce35d319 Mon Sep 17 00:00:00 2001 From: SinuS Von SifriduS Date: Sat, 29 Aug 2026 23:44:19 +0200 Subject: [PATCH] v0.3.2-pre.010 --- Cargo.toml | 4 +- deltas/0.3.2/pre.010.md | 125 ++++++++++++++++++ ...3-V0_3_2_STORE_POSTGRES_FOUNDATION_PLAN.md | 45 ++++++- .../019-V0_3_2_STORE_POSTGRES_FOUNDATION.md | 72 ++++++---- 4 files changed, 218 insertions(+), 28 deletions(-) create mode 100644 deltas/0.3.2/pre.010.md diff --git a/Cargo.toml b/Cargo.toml index 6255609..67c075a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,12 +1,12 @@ # file: Cargo.toml -# version: 343 +# version: 344 [workspace] resolver = "3" members = ["crates/ksp-app-config-desk", "crates/ksp-app-solprices-desk", "crates/ksp-app-wallet-desk", "crates/ksp-config-lib", "crates/ksp-core-lib", "crates/ksp-interface-lib", "crates/ksp-logging-lib", "crates/ksp-offchain-transport-lib", "crates/ksp-onchain-transport-lib", "crates/ksp-program-api", "crates/ksp-store-api", "crates/ksp-store-lib", "crates/ksp-store-postgres-lib", "crates/ksp-wallet-lib"] [workspace.package] -version = "0.3.2-pre.9" +version = "0.3.2-pre.10" edition = "2024" license = "MIT" repository = "https://git.sasedev.com/Sasedev/khadhroony-solana-project" diff --git a/deltas/0.3.2/pre.010.md b/deltas/0.3.2/pre.010.md new file mode 100644 index 0000000..e2a2b70 --- /dev/null +++ b/deltas/0.3.2/pre.010.md @@ -0,0 +1,125 @@ + + + +# Delta `0.3.2-pre.010` — gate technique final Store/PostgreSQL + +## Base exacte + +Cette tranche s'applique sur `0.3.2-pre.009`. + +Le gate opérateur `pre.009` du 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 PostgreSQL, Config, compilation `--no-default-features`, graphes Cargo et `cargo test --workspace` passent. + +Le smoke PostgreSQL réel de `pre.008` avait déjà passé sur PostgreSQL 17 ; `pre.010` le rejoue pour la preuve finale. + +## Objectif + +Ouvrir exclusivement le gate technique final de `0.3.2` sans nouveau développement fonctionnel. + +Cette tranche ne modifie aucun : + +```text +src/** +test fonctionnel +migration SQL +Config runtime +manifest de crate +dépendance runtime +README/USAGE +CHANGELOG/ROADMAP +prompt suivant +``` + +## 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 gate PostgreSQL réel est ensuite rejoué sur une database 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 ajouté les resources `std.store` aux trois applications desktop, le gate technique 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) +``` + +## Fichiers ajoutés + +```text +deltas/0.3.2/pre.010.md +``` + +## Fichiers modifiés + +```text +Cargo.toml +docs/plans/023-V0_3_2_STORE_POSTGRES_FOUNDATION_PLAN.md +docs/validation/019-V0_3_2_STORE_POSTGRES_FOUNDATION.md +``` + +## Fichiers supprimés + +Aucun. + +## Version + +```text +workspace.package.version = 0.3.2-pre.10 +``` + +## Décisions + +```text +pre.010 = preuve technique finale uniquement +aucun développement fonctionnel nouveau +PostgreSQL live doit être rejoué +cargo test --workspace est obligatoire +les trois builds Tauri sont rejoués car le packaging std.store a changé en pre.004 +un échec ouvre pre.010-fix.NNN +pre.011 reste la réconciliation documentaire finale +``` + +## Validations exécutées dans l'environnement de génération + +```text +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 +contrôle statique version/payload +``` + +Cargo/rustc/rustfmt ne sont pas disponibles dans l'environnement de génération ; aucun gate Cargo n'est déclaré PASS ici. + +## Validations non exécutées + +Toutes les commandes Cargo et le smoke PostgreSQL réel restent à exécuter par l'opérateur après application de l'overlay. + +## Questions ouvertes + +Aucune. Tout défaut découvert par le gate final doit être corrigé par `pre.010-fix.NNN` avant `pre.011`. + +## Suite + +Après gate final entièrement vert : `0.3.2-pre.011` — réconciliation documentaire finale, README/USAGE des deux crates Store et fermeture de la matrice de validation. diff --git a/docs/plans/023-V0_3_2_STORE_POSTGRES_FOUNDATION_PLAN.md b/docs/plans/023-V0_3_2_STORE_POSTGRES_FOUNDATION_PLAN.md index 148337e..fab2cfb 100644 --- a/docs/plans/023-V0_3_2_STORE_POSTGRES_FOUNDATION_PLAN.md +++ b/docs/plans/023-V0_3_2_STORE_POSTGRES_FOUNDATION_PLAN.md @@ -1,5 +1,5 @@ - + # 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 diff --git a/docs/validation/019-V0_3_2_STORE_POSTGRES_FOUNDATION.md b/docs/validation/019-V0_3_2_STORE_POSTGRES_FOUNDATION.md index a1445b8..f6a2335 100644 --- a/docs/validation/019-V0_3_2_STORE_POSTGRES_FOUNDATION.md +++ b/docs/validation/019-V0_3_2_STORE_POSTGRES_FOUNDATION.md @@ -1,5 +1,5 @@ - + # 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 ``; 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 :