v0.3.3-pre.012
This commit is contained in:
14
CHANGELOG.md
14
CHANGELOG.md
@@ -1,8 +1,20 @@
|
||||
<!-- file: CHANGELOG.md -->
|
||||
<!-- version: 20 -->
|
||||
<!-- version: 21 -->
|
||||
|
||||
# Changelog KSP
|
||||
|
||||
## 0.3.3 — Store/PostgreSQL RawTransaction vertical slice — 2026-08-30
|
||||
|
||||
`0.3.3` complète la première vertical slice RAW physique sur le couple `ksp-store-lib` / `ksp-store-postgres-lib` sans modifier les contrats backend-agnostic acquis dans `ksp-store-api`. `PostgresBackend` et la façade `Store` implémentent désormais les six capabilities `RawTransactionRead`, `RawTransactionWrite`, `RawTransactionObservationRead`, `RawTransactionObservationWrite`, `RawTransactionRetentionRead` et `RawTransactionRetentionWrite`. Une base PostgreSQL reste liée à un unique `RawNetworkId` par `ksp_store_identity`; le mauvais réseau est refusé avant I/O, les slots `u64` sont conservés exactement en `NUMERIC(20,0)`, et la migration logique V001 reste découpée en ressources tables/contraintes/indexes avec vérification de compatibilité du schéma effectif.
|
||||
|
||||
La persistence canonique utilise une transaction PostgreSQL unique pour `RawTransaction + observation`, tente l'insert sous contrainte d'unicité puis compare le contenu réel sous verrou en cas de collision : contenu identique -> idempotence, divergence -> `store_api.raw_conflict`. Les observations supplémentaires conservent leur provenance complète et ne créent jamais implicitement un canonical absent. La lecture reconstruit `Full` depuis le payload chaud et `Archived` depuis la relation archive ; `Purged` reste un tombstone minimal. La navigation est une keyset stricte `(slot, signature)` ASC/DESC sans `OFFSET`, avec cursor V1 opaque de 109 octets lié au réseau, à la direction, aux bornes et à la dernière clé. Aucun plafond métier de batch n'est introduit : seule la borne physique PostgreSQL de `LIMIT requested + 1` est appliquée.
|
||||
|
||||
La rétention physique supportée est `Full -> Archived -> Purged`, sérialisée par `FOR UPDATE`, avec outcomes `Applied`, `AlreadyAtTarget` et `ExpectedStateMismatch`. Le mode normal respecte le tombstone après purge ; `ForceRehydrate` reste explicite et atomique. `Compacted` demeure volontairement non supporté physiquement et retourne `store.postgres_retention_compaction_unsupported` plutôt que de présenter TOAST ou une compression implicite comme contrat KSP. Les erreurs backend sont réduites à des classes/phases statiques puis projetées vers des codes Store/API stables, sans URI, SQL, SQLSTATE, bind ni texte serveur.
|
||||
|
||||
La preuve PostgreSQL réelle a conduit à durcir l'introspection de schéma PostgreSQL 17 : canonicalisation ciblée des CHECK numériques reconstruits par le catalogue, conservation des littéraux texte, restauration des helpers de classification de schéma et distinction d'un drift d'une migration déjà enregistrée lorsque `schema_autoupdate=false`. Les ressources SQL V000/V001 et leurs checksums sont restés inchangés pendant ces corrections (`V000 d29068b8c13b9dc0cc9ef6aaadd0fa12d41e0fe4c56541a1118c4bfc846a1450`, `V001 31488cda2f08f3f46c4cdbdbb6c18c243662fada02eac4487040c8735d72cc51`).
|
||||
|
||||
Le gate technique final `pre.011` passe audits Rust/Markdown, `cargo check --workspace`, Clippy all-targets, les tests ciblés Store/API/PostgreSQL/Config, les tests et checks façade avec `--no-default-features`, `cargo test --workspace` et les graphes Cargo. Le live `postgres_raw_transaction_live` est ensuite rejoué avec succès sur **PostgreSQL 17**, couvrant bootstrap/drift-repair, atomicité, concurrence identique/divergente, rollback sur collision et annulation, pagination/cursor, rétention/races, ForceRehydrate et réouverture durable. Aucun build Tauri supplémentaire n'est requis : `0.3.3` ne change ni resources applicatives ni packaging desktop. `RawAccountState` PostgreSQL et la complétude RAW restent réservés à `0.3.4`.
|
||||
|
||||
## 0.3.2 — Store/PostgreSQL runtime foundation — 2026-08-30
|
||||
|
||||
`0.3.2` introduit ensemble `ksp-store-lib` et `ksp-store-postgres-lib` comme fondation runtime/backend PostgreSQL au-dessus des contrats backend-agnostic de `ksp-store-api`, sans encore implémenter de capability RAW métier. La façade `Store` conserve un backend connu `Postgres` activé par défaut via Cargo feature, reste compilable avec `--no-default-features`, lie chaque instance à exactement un `RawNetworkId` et n'expose aucun `Pool`, `Client`, `Row`, `Statement`, driver ou SQL physique. `ksp-config-lib` possède désormais `std.store` avec trois targets nommés `devnet`, `mainnet` et `testnet`, chacun associé à un réseau explicite et à une URI PostgreSQL Secret indépendante ; Store/backend ne lisent directement ni `.env`, ni `KSP_*`, ni `PG*`, ni `.pgpass`.
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
# file: Cargo.toml
|
||||
# version: 361
|
||||
# version: 362
|
||||
|
||||
[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.3-pre.11"
|
||||
version = "0.3.3-pre.12"
|
||||
edition = "2024"
|
||||
license = "MIT"
|
||||
repository = "https://git.sasedev.com/Sasedev/khadhroony-solana-project"
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<!-- file: ROADMAP.md -->
|
||||
<!-- version: 95 -->
|
||||
<!-- version: 96 -->
|
||||
|
||||
# Roadmap KSP
|
||||
|
||||
@@ -95,7 +95,7 @@ RAW -> STRUCTURAL -> DECODED -> DOMAIN
|
||||
|
||||
- [X] `0.3.1` — `ksp-store-api` stable : modèles N1 RAW backend-agnostic `RawTransaction` et `RawAccountState` avec observations, provenance, payload/hash/timestamps bornés, 10 capabilities object-safe, queries cursorisées sans plafond métier arbitraire, outcomes idempotence/conflit et lifecycle logique rétention/tombstone/force-rehydrate ; aucun backend physique, Config, runtime Store, notification dédiée ni surface STRUCTURAL/DECODED/DOMAIN.
|
||||
- [X] `0.3.2` — `ksp-store-lib` + `ksp-store-postgres-lib` stables comme fondation runtime/backend PostgreSQL : feature `postgres` par défaut, `Store` lié à un unique `RawNetworkId`, Config `std.store` avec targets/bases `devnet`/`mainnet`/`testnet`, pool Deadpool borné, `tokio-postgres`, TLS Rustls `Disabled`/`VerifyFull`, moteur de migrations privé `V000` + SHA-256/advisory lock, health/readiness portable et close borné. Gate complet + PostgreSQL réel major 17 verts ; aucune table/capability `RawTransaction`/`RawAccountState` métier n'est encore ajoutée.
|
||||
- [ ] `0.3.3` — Étendre le même couple avec la vertical slice PostgreSQL `RawTransaction` complète : les six capabilities transaction/observation/rétention de `ksp-store-api`, persistence acquisition atomique, get/list cursorisé, idempotence/conflit, binding réseau, rétention/tombstone/force-rehydrate, concurrence et rollback validés sur PostgreSQL réel.
|
||||
- [X] `0.3.3` — Vertical slice PostgreSQL `RawTransaction` complète sur `ksp-store-lib` + `ksp-store-postgres-lib` : six capabilities transaction/observation/rétention, V001 physique liée à un réseau, acquisition canonical+observation atomique, idempotence/conflit, get/list keyset cursorisé, archive/purge/tombstone/ForceRehydrate, hardening des erreurs et du schéma, concurrence et rollback validés sur PostgreSQL 17.
|
||||
- [ ] `0.3.4` — Étendre le même couple avec `RawAccountState` + observation, puis fermer la complétude/conformance RAW cross-family, les indexes/migrations physiques nécessaires et le hardening PostgreSQL final.
|
||||
- [ ] `0.3.5` — Étendre `ksp-interface-lib` uniquement avec les modèles passifs/events réellement partagés par les premiers consumers d’acquisition, sans dupliquer les modèles persistants de `ksp-store-api`.
|
||||
- [ ] `0.3.6` — Introduire `ksp-job-api` et un premier job de backfill historique concret consommant `ksp-store-lib`, avec policy/batch-size/progression possédés par le job et non par Store.
|
||||
@@ -113,7 +113,8 @@ RAW -> STRUCTURAL -> DECODED -> DOMAIN
|
||||
- [ ] **REJET ACTUEL** — Yellowstone `Entry` : trop bas niveau et aucune destination replay/decomposition/event métier justifiant un modèle KSP n’est identifiée.
|
||||
- [ ] **TODO** — processing ledger : reprendre l’idée kbot2/kbot3 `stage + processor identity/version + input identity/hash + terminal status`, sans faire d’un `processed: bool` la preuve durable unique ; prévoir force replay/version upgrades lorsque les processors seront ouverts.
|
||||
- [X] lifecycle RAW logique — `RawRetentionState`, tombstone minimal, normal-skip et force-rehydrate sont stabilisés en `0.3.1` pour `RawTransaction`.
|
||||
- [ ] **TODO** — rétention physique : définir plus tard compression/archive backend, critères d’éligibilité fondés sur les preuves de processing et maintenance worker/job ; Store applique une transition demandée mais ne décide pas seul qu’un RAW peut être purgé.
|
||||
- [X] rétention physique `RawTransaction` PostgreSQL — `0.3.3` matérialise `Full -> Archived -> Purged`, tombstone et ForceRehydrate atomiques ; `Compacted` reste explicitement unsupported tant qu’aucune représentation compactée réelle n’existe.
|
||||
- [ ] **TODO** — policy de rétention/compaction : définir les critères d’éligibilité fondés sur les preuves de processing et la maintenance worker/job ; Store applique une transition demandée mais ne décide pas seul qu’un RAW peut être archivé/purgé, et la compaction physique ne sera ajoutée qu’avec un besoin réel.
|
||||
- [X] frontière `ksp-interface-lib` / `ksp-store-api` — ownership documenté et canaris de non-duplication stabilisés en `0.3.1`; les events passifs non persistés restent Interface, les modèles persistants/replayables restent Store API.
|
||||
- [ ] **IDEA** — réauditer la structure de processing/decode/materialization historique kbot2/kbot3 lors de l’ouverture de N2/N3 ; conserver l’isolation instruction/CPI et les statuts terminal/versionnés, sans reprendre automatiquement le schéma SQL historique.
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<!-- file: crates/ksp-store-lib/README.md -->
|
||||
<!-- version: 2 -->
|
||||
<!-- version: 3 -->
|
||||
|
||||
# ksp-store-lib
|
||||
|
||||
@@ -75,7 +75,7 @@ Les credentials restent dans les variables `KSP_SECRET_STORE_*_POSTGRES_URI` ou
|
||||
|
||||
## Surface actuelle et hors périmètre
|
||||
|
||||
Depuis `0.3.3-pre.008`, `Store` implémente les six capabilities transactionnelles acquises dans `ksp-store-api` :
|
||||
Depuis `0.3.3`, `Store` implémente les six capabilities transactionnelles acquises dans `ksp-store-api` :
|
||||
|
||||
```text
|
||||
RawTransactionRead
|
||||
@@ -104,4 +104,6 @@ La vertical slice `RawTransaction` est désormais dispatchée ; `RawAccountState
|
||||
- [`../../config/std.store.json`](../../config/std.store.json) — targets Store committed ;
|
||||
- [`../../docs/architecture/008-DATA_MATERIALIZATION_AND_STORE.md`](../../docs/architecture/008-DATA_MATERIALIZATION_AND_STORE.md) — architecture durable Store ;
|
||||
- [`../../docs/plans/023-V0_3_2_STORE_POSTGRES_FOUNDATION_PLAN.md`](../../docs/plans/023-V0_3_2_STORE_POSTGRES_FOUNDATION_PLAN.md) — plan de fondation ;
|
||||
- [`../../docs/validation/019-V0_3_2_STORE_POSTGRES_FOUNDATION.md`](../../docs/validation/019-V0_3_2_STORE_POSTGRES_FOUNDATION.md) — matrice de validation.
|
||||
- [`../../docs/validation/019-V0_3_2_STORE_POSTGRES_FOUNDATION.md`](../../docs/validation/019-V0_3_2_STORE_POSTGRES_FOUNDATION.md) — validation de fondation ;
|
||||
- [`../../docs/plans/024-V0_3_3_STORE_POSTGRES_RAW_TRANSACTION_PLAN.md`](../../docs/plans/024-V0_3_3_STORE_POSTGRES_RAW_TRANSACTION_PLAN.md) — plan `RawTransaction` ;
|
||||
- [`../../docs/validation/020-V0_3_3_STORE_POSTGRES_RAW_TRANSACTION.md`](../../docs/validation/020-V0_3_3_STORE_POSTGRES_RAW_TRANSACTION.md) — validation `RawTransaction`.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<!-- file: crates/ksp-store-lib/USAGE.md -->
|
||||
<!-- version: 2 -->
|
||||
<!-- version: 3 -->
|
||||
|
||||
# Utilisation de ksp-store-lib
|
||||
|
||||
@@ -218,7 +218,7 @@ Aucun snapshot n'expose URI, host, user, database, SQL, handle backend ou texte
|
||||
|
||||
## 7. Utiliser les capabilities RawTransaction
|
||||
|
||||
Depuis `0.3.3-pre.008`, `Store` implémente directement les six traits `RawTransaction*`. Le consumer importe le trait correspondant puis appelle la méthode sur la façade :
|
||||
Depuis `0.3.3`, `Store` implémente directement les six traits `RawTransaction*`. Le consumer importe le trait correspondant puis appelle la méthode sur la façade :
|
||||
|
||||
```rust
|
||||
use ksp_store_lib::RawTransactionRead;
|
||||
@@ -250,3 +250,12 @@ Les conflits et queries invalides conservent les codes API acquis `store_api.raw
|
||||
## 8. Limite fonctionnelle actuelle
|
||||
|
||||
La façade n'implémente pas encore les capabilities `RawAccount*`. Elles appartiennent à la vertical slice `0.3.4`.
|
||||
|
||||
## 9. Preuve finale `0.3.3`
|
||||
|
||||
La conformance de la façade est verrouillée par les tests publics/hardening avec et sans feature PostgreSQL. Le gate technique final `0.3.3-pre.011` a également rejoué le workspace complet et la preuve PostgreSQL réelle `RawTransaction` sur PostgreSQL 17.
|
||||
|
||||
Références durables :
|
||||
|
||||
- [`../../docs/plans/024-V0_3_3_STORE_POSTGRES_RAW_TRANSACTION_PLAN.md`](../../docs/plans/024-V0_3_3_STORE_POSTGRES_RAW_TRANSACTION_PLAN.md) ;
|
||||
- [`../../docs/validation/020-V0_3_3_STORE_POSTGRES_RAW_TRANSACTION.md`](../../docs/validation/020-V0_3_3_STORE_POSTGRES_RAW_TRANSACTION.md).
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<!-- file: crates/ksp-store-postgres-lib/README.md -->
|
||||
<!-- version: 8 -->
|
||||
<!-- version: 9 -->
|
||||
|
||||
# ksp-store-postgres-lib
|
||||
|
||||
@@ -161,7 +161,7 @@ Le backend verrouille la ligne canonique avec `FOR UPDATE`, valide la forme phys
|
||||
|
||||
Toute transition dont `expected` ou `target` vaut `Compacted` est rejetée avant `pool.get()` avec `RetentionCompactionUnsupported` et le code stable `store.postgres_retention_compaction_unsupported`. PostgreSQL n'utilise pas TOAST comme faux contrat de compaction.
|
||||
|
||||
## Preuve PostgreSQL live `0.3.3-pre.009`
|
||||
## Preuve PostgreSQL live `0.3.3`
|
||||
|
||||
La vertical slice `RawTransaction` possède un test PostgreSQL réel opt-in dédié :
|
||||
|
||||
@@ -171,7 +171,7 @@ postgres_raw_transaction_live
|
||||
|
||||
Il refuse une base où une table KSP gérée existe déjà, lit l’URI dédiée uniquement sur `stdin`, ne l’affiche jamais et nettoie seulement le schéma qu’il a lui-même créé. La preuve couvre bootstrap V000/V001, binding réseau, réparation additive contrôlée, écritures atomiques, concurrence réelle, observations, pagination/cursor, rétention/ForceRehydrate, races et rollback par annulation d’une tâche bloquée sur un verrou PostgreSQL.
|
||||
|
||||
Le test reste `#[ignore]` dans les gates ordinaires. Son exécution réelle et le major PostgreSQL exercé sont enregistrés dans la matrice de validation de la release.
|
||||
Le test reste `#[ignore]` dans les gates ordinaires. Après les corrections de compatibilité catalogue/drift de `pre.009-fix.001..006`, il passe sur PostgreSQL 17 et a été rejoué une seconde fois avec succès au gate technique final `pre.011`. Son exécution réelle et le major exercé sont enregistrés dans la matrice de validation de la release.
|
||||
|
||||
## Hors périmètre actuel
|
||||
|
||||
@@ -188,4 +188,6 @@ La crate ne contient encore :
|
||||
- [`../ksp-store-lib/README.md`](../ksp-store-lib/README.md) — façade runtime destinée aux consumers ;
|
||||
- [`../../docs/architecture/008-DATA_MATERIALIZATION_AND_STORE.md`](../../docs/architecture/008-DATA_MATERIALIZATION_AND_STORE.md) — architecture Store ;
|
||||
- [`../../docs/plans/023-V0_3_2_STORE_POSTGRES_FOUNDATION_PLAN.md`](../../docs/plans/023-V0_3_2_STORE_POSTGRES_FOUNDATION_PLAN.md) — décisions pool/TLS/migrations ;
|
||||
- [`../../docs/validation/019-V0_3_2_STORE_POSTGRES_FOUNDATION.md`](../../docs/validation/019-V0_3_2_STORE_POSTGRES_FOUNDATION.md) — preuves déterministes et PostgreSQL réel.
|
||||
- [`../../docs/validation/019-V0_3_2_STORE_POSTGRES_FOUNDATION.md`](../../docs/validation/019-V0_3_2_STORE_POSTGRES_FOUNDATION.md) — preuves de fondation ;
|
||||
- [`../../docs/plans/024-V0_3_3_STORE_POSTGRES_RAW_TRANSACTION_PLAN.md`](../../docs/plans/024-V0_3_3_STORE_POSTGRES_RAW_TRANSACTION_PLAN.md) — design et séquencement `RawTransaction` ;
|
||||
- [`../../docs/validation/020-V0_3_3_STORE_POSTGRES_RAW_TRANSACTION.md`](../../docs/validation/020-V0_3_3_STORE_POSTGRES_RAW_TRANSACTION.md) — preuves déterministes et PostgreSQL réel `RawTransaction`.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<!-- file: crates/ksp-store-postgres-lib/USAGE.md -->
|
||||
<!-- version: 8 -->
|
||||
<!-- version: 9 -->
|
||||
|
||||
# Utilisation de ksp-store-postgres-lib
|
||||
|
||||
@@ -243,8 +243,9 @@ La tranche ne fournit pas les capabilities `RawAccount*`. Elles appartiennent à
|
||||
Le test `postgres_raw_transaction_live` exige une base PostgreSQL dédiée et vide de toute table KSP gérée. Il lit son URI sur l’entrée standard afin de ne pas contourner Config par une variable d’environnement de test :
|
||||
|
||||
```bash
|
||||
printf '%s\n' '<URI_POSTGRES_DEDIEE>' | cargo test -p ksp-store-postgres-lib --test postgres_raw_transaction_live -- --ignored --nocapture
|
||||
printf '%s\n' '<URI_POSTGRES_DEDIEE>' | cargo test -p ksp-store-postgres-lib --test postgres_raw_transaction_live -- --ignored --nocapture --test-threads=1
|
||||
```
|
||||
|
||||
Le test refuse de démarrer si une table KSP V000/V001 existe déjà. Il ne logge pas l’URI et ne supprime que le schéma qu’il a prouvé absent avant son propre bootstrap.
|
||||
|
||||
Le gate technique final `0.3.3-pre.011` a rejoué cette preuve sur PostgreSQL 17 avec succès. Pour l'inventaire précis des scénarios et des corrections de compatibilité catalogue, voir [`../../docs/validation/020-V0_3_3_STORE_POSTGRES_RAW_TRANSACTION.md`](../../docs/validation/020-V0_3_3_STORE_POSTGRES_RAW_TRANSACTION.md).
|
||||
|
||||
168
deltas/0.3.3/pre.012.md
Normal file
168
deltas/0.3.3/pre.012.md
Normal file
@@ -0,0 +1,168 @@
|
||||
<!-- file: deltas/0.3.3/pre.012.md -->
|
||||
<!-- version: 1 -->
|
||||
|
||||
# Delta `0.3.3-pre.012` — réconciliation documentaire finale RawTransaction
|
||||
|
||||
## 1. Base requise
|
||||
|
||||
Base directe attendue :
|
||||
|
||||
```text
|
||||
0.3.3-pre.011
|
||||
workspace.package.version = 0.3.3-pre.11
|
||||
```
|
||||
|
||||
Le gate technique final `pre.011` du **30 août 2026** est entièrement vert.
|
||||
|
||||
## 2. Résultat du gate technique `pre.011`
|
||||
|
||||
```text
|
||||
audits Rust / export / KSP PASS / clean
|
||||
audit Markdown PASS / clean — 214 tables / 154 fichiers
|
||||
cargo check --workspace PASS
|
||||
cargo clippy --workspace --all-targets PASS
|
||||
tests ciblés Store API / façade / PostgreSQL PASS
|
||||
ksp-config-lib PASS — 128 unit + ownership/public API
|
||||
ksp-store-lib --no-default-features test/check PASS
|
||||
cargo test --workspace PASS
|
||||
graphes Cargo normal/features/duplicates exécutés
|
||||
PostgreSQL RawTransaction live PASS — major 17, 1 test
|
||||
builds Tauri N/A — aucune resource/package desktop modifiée
|
||||
```
|
||||
|
||||
Le replay PostgreSQL final confirme de nouveau bootstrap V000/V001, drift/repair, atomicité, concurrence, rollback, pagination/cursor, rétention/races, ForceRehydrate et réouverture durable.
|
||||
|
||||
## 3. Objectif
|
||||
|
||||
Appliquer la réconciliation documentaire finale de `0.3.3` sans rouvrir la surface technique :
|
||||
|
||||
```text
|
||||
README/USAGE ksp-store-lib
|
||||
README/USAGE ksp-store-postgres-lib
|
||||
index docs global
|
||||
index plans
|
||||
index validations
|
||||
plan 024
|
||||
validation 020
|
||||
CHANGELOG 0.3.3
|
||||
ROADMAP 0.3.3
|
||||
```
|
||||
|
||||
Aucun changement n'est apporté à `src/**`, tests, Config runtime, architectures, règles, manifests de crate, dépendances ou migrations.
|
||||
|
||||
## 4. Version Cargo
|
||||
|
||||
```text
|
||||
0.3.3-pre.11
|
||||
-> 0.3.3-pre.12
|
||||
```
|
||||
|
||||
## 5. Surface stable candidate enregistrée
|
||||
|
||||
La documentation durable fixe désormais :
|
||||
|
||||
```text
|
||||
PostgresBackend + Store implémentent les six RawTransaction*
|
||||
1 base = 1 RawNetworkId via ksp_store_identity
|
||||
slot u64 exact = NUMERIC(20,0)
|
||||
V001 logique = ressources tables/constraints/indexes
|
||||
canonical + acquisition observation atomiques
|
||||
idempotence réelle / divergence = store_api.raw_conflict
|
||||
observations séparées et provenance complète
|
||||
get Full/Archived/Purged + tombstone séparé
|
||||
list keyset (slot, signature), cursor V1 109 bytes, sans OFFSET
|
||||
aucun cap métier Store de batch/page
|
||||
Full -> Archived -> Purged atomique
|
||||
ForceRehydrate explicite
|
||||
Compacted unsupported honnête
|
||||
erreurs physiques redacted et codes stables
|
||||
PostgreSQL >= 15, preuve finale major 17
|
||||
RawAccountState physique reporté à 0.3.4
|
||||
```
|
||||
|
||||
## 6. Rétention et roadmap
|
||||
|
||||
`ROADMAP.md` distingue désormais deux faits :
|
||||
|
||||
- la mécanique physique `RawTransaction` PostgreSQL `Full -> Archived -> Purged` est acquise en `0.3.3` ;
|
||||
- la policy d'éligibilité, la maintenance worker/job et une éventuelle vraie représentation `Compacted` restent futures.
|
||||
|
||||
Store applique une transition demandée ; il ne décide toujours pas seul qu'un RAW peut être archivé ou purgé.
|
||||
|
||||
## 7. Migrations
|
||||
|
||||
Aucune ressource SQL n'est modifiée.
|
||||
|
||||
```text
|
||||
V000 d29068b8c13b9dc0cc9ef6aaadd0fa12d41e0fe4c56541a1118c4bfc846a1450
|
||||
V001 31488cda2f08f3f46c4cdbdbb6c18c243662fada02eac4487040c8735d72cc51
|
||||
```
|
||||
|
||||
Les corrections `pre.009-fix.001..006` ont porté sur le test live, la comparaison du catalogue et la classification du drift, jamais sur les bytes des migrations.
|
||||
|
||||
## 8. Documents relus et volontairement inchangés
|
||||
|
||||
Les architectures Store restent cohérentes et ne sont pas modifiées artificiellement :
|
||||
|
||||
```text
|
||||
docs/architecture/003-COMPONENT_CONTRACTS.md
|
||||
docs/architecture/004-COMPONENT_INVENTORY.md
|
||||
docs/architecture/005-DEPENDENCY_GRAPH.md
|
||||
docs/architecture/008-DATA_MATERIALIZATION_AND_STORE.md
|
||||
docs/architecture/009-ACQUISITION_WORKERS_AND_JOBS.md
|
||||
```
|
||||
|
||||
`ksp-config-lib` README/USAGE restent également inchangés : `0.3.3` n'a modifié ni `std.store`, ni les targets, ni la propriété des secrets.
|
||||
|
||||
## 9. Fichiers ajoutés
|
||||
|
||||
```text
|
||||
deltas/0.3.3/pre.012.md
|
||||
```
|
||||
|
||||
## 10. Fichiers modifiés
|
||||
|
||||
```text
|
||||
Cargo.toml
|
||||
CHANGELOG.md
|
||||
ROADMAP.md
|
||||
crates/ksp-store-lib/README.md
|
||||
crates/ksp-store-lib/USAGE.md
|
||||
crates/ksp-store-postgres-lib/README.md
|
||||
crates/ksp-store-postgres-lib/USAGE.md
|
||||
docs/000-README.md
|
||||
docs/plans/000-README.md
|
||||
docs/plans/024-V0_3_3_STORE_POSTGRES_RAW_TRANSACTION_PLAN.md
|
||||
docs/validation/000-README.md
|
||||
docs/validation/020-V0_3_3_STORE_POSTGRES_RAW_TRANSACTION.md
|
||||
```
|
||||
|
||||
## 11. Fichiers supprimés
|
||||
|
||||
Aucun.
|
||||
|
||||
## 12. Gate 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.3
|
||||
cargo check --workspace
|
||||
cargo clippy --workspace --all-targets
|
||||
cargo test -p ksp-store-api
|
||||
cargo test -p ksp-store-lib
|
||||
cargo test -p ksp-store-postgres-lib
|
||||
cargo test -p ksp-config-lib
|
||||
cargo check -p ksp-store-lib --no-default-features
|
||||
```
|
||||
|
||||
Le replay PostgreSQL et `cargo test --workspace` n'ont pas besoin d'être répétés dans cette tranche purement documentaire : ils constituent la preuve technique finale acquise de `pre.011`.
|
||||
|
||||
## 13. Suite
|
||||
|
||||
Après gate documentaire propre :
|
||||
|
||||
```text
|
||||
0.3.3-pre.013 — préparation de publication + prompt 0.3.4
|
||||
0.3.3-rel.001 — publication stable
|
||||
```
|
||||
File diff suppressed because one or more lines are too long
@@ -1,5 +1,5 @@
|
||||
<!-- file: docs/plans/000-README.md -->
|
||||
<!-- version: 69 -->
|
||||
<!-- version: 70 -->
|
||||
|
||||
# Plans KSP
|
||||
|
||||
@@ -32,6 +32,7 @@ Un plan décrit le périmètre, les décisions déjà acquises, les questions ou
|
||||
- [`021-V0_2_14_PROGRAM_API_PLAN.md`](021-V0_2_14_PROGRAM_API_PLAN.md) — plan historique clôturé de la release stable `0.2.14 — Program API foundation`; il fixe la façade instruction-only ouverte, les enums Recognition/Outcome, `ProgramInstructionDecoder`, l'output associé possédé par l'implémentation, le canari externe avec Program Pubkey non enregistré, le firewall Core/Interface et le report du payload canonique D3, du registry runtime et de `ProgramExecutionPreparer`.
|
||||
- [`022-V0_3_1_STORE_RAW_PLAN.md`](022-V0_3_1_STORE_RAW_PLAN.md) — plan candidat réconcilié de `0.3.1 — Store API RAW foundation`; il fixe `ksp-store-api` seul, les modèles transaction/account + observations, queries/outcomes/capabilities, rétention/tombstone, la frontière event-only/Interface et le report de `ksp-store-lib` + PostgreSQL à `0.3.2`.
|
||||
- [`023-V0_3_2_STORE_POSTGRES_FOUNDATION_PLAN.md`](023-V0_3_2_STORE_POSTGRES_FOUNDATION_PLAN.md) — plan candidat réconcilié de `0.3.2 — Store/PostgreSQL runtime foundation`; il fixe le split façade/backend, `std.store` multi-target réseau-spécifique, tokio-postgres/Deadpool/Rustls, migrations metadata-only, health/readiness, live PostgreSQL et les reports des vertical slices RAW vers `0.3.3`/`0.3.4`.
|
||||
- [`024-V0_3_3_STORE_POSTGRES_RAW_TRANSACTION_PLAN.md`](024-V0_3_3_STORE_POSTGRES_RAW_TRANSACTION_PLAN.md) — plan candidat réconcilié de `0.3.3 — Store/PostgreSQL RawTransaction vertical slice`; il fixe V001, binding réseau, mappings entiers exacts, écritures/observations atomiques, pagination keyset/cursor, rétention/tombstone/ForceRehydrate, hardening et preuve PostgreSQL 17.
|
||||
|
||||
Le `pre.001` de chaque release fonctionnelle peut introduire son propre plan détaillé lorsque la release s'ouvre.
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<!-- file: docs/plans/024-V0_3_3_STORE_POSTGRES_RAW_TRANSACTION_PLAN.md -->
|
||||
<!-- version: 12 -->
|
||||
<!-- version: 13 -->
|
||||
|
||||
# Plan `0.3.3` — Store/PostgreSQL RawTransaction vertical slice
|
||||
|
||||
@@ -36,15 +36,16 @@ Tranches techniques validées :
|
||||
0.3.3-pre.008 + fix.001 — six capabilities PostgreSQL + dispatch façade
|
||||
0.3.3-pre.009 + fix.001..fix.006 — preuve PostgreSQL 17 complète RawTransaction
|
||||
0.3.3-pre.010 + fix.001 — hardening/completeness final de la vertical slice
|
||||
0.3.3-pre.011 — gate technique final + replay PostgreSQL 17
|
||||
```
|
||||
|
||||
Tranche technique courante :
|
||||
Tranche courante :
|
||||
|
||||
```text
|
||||
0.3.3-pre.011 — gate technique final
|
||||
0.3.3-pre.012 — réconciliation documentaire finale
|
||||
```
|
||||
|
||||
Les gates opérateur jusqu'à `pre.010-fix.001` sont verts. `pre.009-fix.006` a aussi passé le live PostgreSQL 17 complet. `pre.011` n'ajoute aucun comportement métier, test fonctionnel, SQL ou migration : elle rejoue la preuve technique globale avant la réconciliation documentaire.
|
||||
Tous les gates techniques jusqu'à `pre.011` sont verts. Le gate final a rejoué audits, workspace check/Clippy, tests ciblés, façade avec `--no-default-features`, `cargo test --workspace`, graphes Cargo et le live `postgres_raw_transaction_live` sur PostgreSQL 17. `pre.012` ne rouvre aucun comportement, SQL, migration ou Config runtime ; elle fige uniquement la documentation durable et l'état de release candidate.
|
||||
|
||||
## 2. Sources et autorité
|
||||
|
||||
@@ -1217,10 +1218,14 @@ Tranche matérialisée sans changement fonctionnel :
|
||||
|
||||
### `0.3.3-pre.012` — réconciliation documentaire
|
||||
|
||||
- plan/validation finalisés ;
|
||||
- docs Store concernées uniquement ;
|
||||
- ROADMAP/CHANGELOG selon workflow de clôture ;
|
||||
- tableaux reformattés RustRover.
|
||||
Tranche matérialisée :
|
||||
|
||||
- résultat réel du gate `pre.011` enregistré, y compris `cargo test --workspace`, graphes Cargo et replay PostgreSQL 17 ;
|
||||
- README/USAGE de `ksp-store-lib` et `ksp-store-postgres-lib` réconciliés avec la surface finale `RawTransaction` ;
|
||||
- indexes docs/plans/validation complétés avec le plan `024` et la validation `020` ;
|
||||
- `CHANGELOG.md` fixe la surface stable candidate `0.3.3` ;
|
||||
- `ROADMAP.md` ferme `0.3.3`, garde `RawAccountState` en `0.3.4` et distingue la rétention physique acquise de la future policy worker/compaction ;
|
||||
- aucun `src/**`, test, Config, architecture, règle, migration ou checksum n'est modifié.
|
||||
|
||||
### `0.3.3-pre.013` — préparation publication
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<!-- file: docs/validation/000-README.md -->
|
||||
<!-- version: 33 -->
|
||||
<!-- version: 34 -->
|
||||
|
||||
# Validations KSP
|
||||
|
||||
@@ -28,3 +28,4 @@ Documents :
|
||||
- [`017-V0_2_14_PROGRAM_API.md`](017-V0_2_14_PROGRAM_API.md) — matrice historique clôturée de la release stable `0.2.14 — Program API foundation` : façade instruction-only ouverte, Recognition/Outcome, trait externe, Program Pubkey non enregistré, hardening adversarial, release completeness et firewall Core/Interface.
|
||||
- [`018-V0_3_1_STORE_RAW.md`](018-V0_3_1_STORE_RAW.md) — matrice candidate finale de `0.3.1 — Store API RAW foundation` : modèles transaction/account, observations, capabilities backend, pagination sans policy executor, outcomes, rétention/tombstone, hardening, gate complet `pre.008` et reports explicites vers `0.3.2+`.
|
||||
- [`019-V0_3_2_STORE_POSTGRES_FOUNDATION.md`](019-V0_3_2_STORE_POSTGRES_FOUNDATION.md) — matrice candidate finale de `0.3.2 — Store/PostgreSQL runtime foundation` : feature graph, settings/Config, pool/TLS, migrations metadata-only, health, hardening, graphes, builds Tauri et preuve PostgreSQL réelle major 17.
|
||||
- [`020-V0_3_3_STORE_POSTGRES_RAW_TRANSACTION.md`](020-V0_3_3_STORE_POSTGRES_RAW_TRANSACTION.md) — matrice candidate finale de `0.3.3 — Store/PostgreSQL RawTransaction vertical slice` : six capabilities backend/façade, V001 et compatibilité schéma, atomicité/idempotence/conflit, keyset/cursor, rétention/races/rehydrate, hardening et replay PostgreSQL 17 final.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<!-- file: docs/validation/020-V0_3_3_STORE_POSTGRES_RAW_TRANSACTION.md -->
|
||||
<!-- version: 23 -->
|
||||
<!-- version: 24 -->
|
||||
|
||||
# Validation `0.3.3` — Store/PostgreSQL RawTransaction vertical slice
|
||||
|
||||
@@ -675,7 +675,7 @@ cap 500/1000 dans Store pagination
|
||||
|
||||
- publication stable.
|
||||
|
||||
## 22. Gate courant `pre.009`
|
||||
## 22. Gate courant `pre.012`
|
||||
|
||||
```bash
|
||||
cargo fmt --all
|
||||
@@ -848,14 +848,21 @@ cargo check -p ksp-store-lib --no-default-features
|
||||
|
||||
### `pre.011` — gate technique final
|
||||
|
||||
- [MATÉRIALISÉ] aucune modification fonctionnelle, SQL, migration, Config runtime, README/USAGE, CHANGELOG/ROADMAP ou prompt ;
|
||||
- [À FAIRE] `cargo fmt --all` + audits Rust/Markdown ;
|
||||
- [À FAIRE] `cargo check --workspace` + `cargo clippy --workspace --all-targets` ;
|
||||
- [À FAIRE] tests ciblés `ksp-store-api`, `ksp-store-lib`, `ksp-store-postgres-lib`, `ksp-config-lib` ;
|
||||
- [À FAIRE] `cargo test -p ksp-store-lib --no-default-features` + `cargo check -p ksp-store-lib --no-default-features` ;
|
||||
- [À FAIRE] `cargo test --workspace` ;
|
||||
- [À FAIRE] graphes Cargo façade/backend/features/duplicates ;
|
||||
- [À FAIRE] replay du live PostgreSQL `postgres_raw_transaction_live` sur URI dédiée ;
|
||||
- [PASS] `cargo fmt --all`, audits Rust/Markdown, `cargo check --workspace` et Clippy all-targets le 2026-08-30 ;
|
||||
- [PASS] tests ciblés `ksp-store-api`, `ksp-store-lib`, `ksp-store-postgres-lib` et `ksp-config-lib` ;
|
||||
- [PASS] `ksp-store-lib` testé et compilé avec `--no-default-features` ;
|
||||
- [PASS] `cargo test --workspace` sur l'ensemble des crates ;
|
||||
- [PASS] graphes Cargo normal/features/duplicates exécutés pour la façade et le backend ;
|
||||
- [PASS] replay `postgres_raw_transaction_live` sur PostgreSQL major 17 : `1 passed`, avec bootstrap/drift-repair, atomicité/concurrence, rollback, pagination, rétention/races, ForceRehydrate et réouverture ;
|
||||
- [N/A] builds Tauri : aucune resource applicative ni packaging desktop n'est modifié par `0.3.3` ;
|
||||
- [INVARIANT] V000/V001 et leurs checksums restent byte-identiques à la preuve live `pre.009-fix.006`.
|
||||
- [PASS] V000/V001 et leurs checksums restent byte-identiques à la preuve live `pre.009-fix.006` ;
|
||||
- [PASS] `pre.011` ferme la preuve technique et autorise la réconciliation documentaire `pre.012`.
|
||||
|
||||
### `pre.012` — réconciliation documentaire finale
|
||||
|
||||
- [MATÉRIALISÉ] README/USAGE Store façade/backend réconciliés ;
|
||||
- [MATÉRIALISÉ] plan `024`, validation `020` et indexes durables finalisés ;
|
||||
- [MATÉRIALISÉ] `CHANGELOG.md` et `ROADMAP.md` alignés sur la surface stable candidate ;
|
||||
- [INVARIANT] aucun code, test, Config runtime, architecture, règle, SQL ou migration n'est rouvert ;
|
||||
- [À FAIRE] gate documentaire/opérateur de `pre.012`.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user