v0.3.2-pre.012
This commit is contained in:
12
CHANGELOG.md
12
CHANGELOG.md
@@ -1,8 +1,18 @@
|
||||
<!-- file: CHANGELOG.md -->
|
||||
<!-- version: 19 -->
|
||||
<!-- version: 20 -->
|
||||
|
||||
# Changelog KSP
|
||||
|
||||
## 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`.
|
||||
|
||||
Le backend de référence utilise `tokio-postgres 0.7.18`, `deadpool-postgres 0.14.2`, `tokio-postgres-rustls 0.14.0`, Rustls 0.23 avec roots système/AWS-LC et des modes TLS KSP limités à `Disabled` et `VerifyFull`. Les URI sont parsées puis normalisées sous la policy typée KSP, le pool et les deadlines connect/wait/create/recycle/shutdown sont bornés, et une ouverture réussie exige une connexion physique puis un bootstrap valide. Le moteur de migrations privé commence par `V000__bootstrap.sql`, enregistre version/nom/SHA-256 dans `ksp_store_schema_migrations`, sérialise les runners par advisory transaction lock borné et refuse checksum mismatch ou schema plus récent sans down automatique. La façade fournit également `runtime_snapshot()` et `health().await` avec une projection portable/redacted de readiness et des compteurs pool sûrs.
|
||||
|
||||
Les canaris de hardening verrouillent 84 exports crate-root côté façade, la frontière backend/Config, l'absence de bypass environnement, la redaction des URI/erreurs, la matrice de features et l'absence de persistence `RawTransaction`/`RawAccountState`. Le gate technique final a été rejoué après `cargo clean` : audits Rust/Markdown, `cargo check --workspace`, Clippy, tests ciblés de toutes les crates, `cargo test --workspace`, graphes Cargo et les trois builds Tauri Linux passent. Le smoke PostgreSQL réel passe sur **PostgreSQL 17** et prouve bootstrap initial/idempotent/concurrent, mismatch/recovery checksum, rollback transactionnel, health `Ready` et fermeture bornée ; la policy de fondation reste PostgreSQL >= 15 sans maximum KSP artificiel.
|
||||
|
||||
`prompts/022-V0_3_3_START_PROMPT.md` ouvre ensuite uniquement la vertical slice PostgreSQL `RawTransaction` complète sur les mêmes crates et la même fondation : six capabilities transaction/observation/rétention, atomicité, idempotence/conflit, get/list cursorisé, tombstone et `ForceRehydrate`. `RawAccountState` PostgreSQL et la complétude RAW restent réservés à `0.3.4`. L'archive historique `khadhroony-bot3_v0.5.3-pre.005-fix010.zip` reste obligatoire au `pre.001` de `0.3.3`, mais seulement pour réauditer l'ancien schéma/repository RAW transaction comme source d'héritage, jamais comme autorité KSP.
|
||||
|
||||
## 0.3.1 — Store API RAW foundation — 2026-08-29
|
||||
|
||||
`0.3.1` introduit `ksp-store-api` comme contrat backend-agnostic de persistence N1 RAW, sans runtime Store ni backend physique. La release stabilise deux familles réellement convergentes : `RawTransaction` avec payload canonique opaque/versionné, identité réseau+signature et observations d’acquisition séparées, puis `RawAccountState` avec bytes complets, identité réseau+pubkey+slot+hash et observations pouvant conserver les enrichissements Yellowstone sans les confondre avec l’état canonique. `TransactionStatusObservation` reste reporté faute de convergence sémantique suffisante entre snapshot HTTP, transition WebSocket et update Yellowstone ; `logsSubscribe`, slot/root/slotsUpdates et vote restent event-only candidats, `RawBlock` reste une idée conditionnelle et Yellowstone `Entry` reste rejeté de la taxonomie active.
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
# file: Cargo.toml
|
||||
# version: 345
|
||||
# version: 346
|
||||
|
||||
[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.11"
|
||||
version = "0.3.2-pre.12"
|
||||
edition = "2024"
|
||||
license = "MIT"
|
||||
repository = "https://git.sasedev.com/Sasedev/khadhroony-solana-project"
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<!-- file: ROADMAP.md -->
|
||||
<!-- version: 94 -->
|
||||
<!-- version: 95 -->
|
||||
|
||||
# Roadmap KSP
|
||||
|
||||
@@ -94,8 +94,8 @@ RAW -> STRUCTURAL -> DECODED -> DOMAIN
|
||||
## 0.3.x — RAW / acquisition persistée
|
||||
|
||||
- [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.
|
||||
- [ ] `0.3.2` — Introduire ensemble `ksp-store-lib` et `ksp-store-postgres-lib` pour la **fondation runtime/backend PostgreSQL uniquement** : façade Store, feature `postgres` par défaut, dispatch des backends compilés, Config `std.store`/secrets, connexion/pool/TLS à réauditer, bootstrap/migrations privés et health/readiness seulement si un contrat portable est réellement justifié. Aucun schéma `RawTransaction`/`RawAccountState` n’est ajouté dans cette slice.
|
||||
- [ ] `0.3.3` — Étendre le même couple `ksp-store-lib` + `ksp-store-postgres-lib` avec la vertical slice PostgreSQL `RawTransaction` complète : persistence/observation atomiques, get/list cursorisé, idempotence/conflit, rétention/tombstone/force-rehydrate, concurrence et rollback validés sur PostgreSQL réel.
|
||||
- [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.
|
||||
- [ ] `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.
|
||||
|
||||
320
deltas/0.3.2/pre.012.md
Normal file
320
deltas/0.3.2/pre.012.md
Normal file
@@ -0,0 +1,320 @@
|
||||
<!-- file: deltas/0.3.2/pre.012.md -->
|
||||
<!-- version: 1 -->
|
||||
|
||||
# Delta `0.3.2-pre.012` — préparation de publication et prompt `0.3.3`
|
||||
|
||||
## 1. Base requise
|
||||
|
||||
Base directe attendue :
|
||||
|
||||
```text
|
||||
0.3.2-pre.011
|
||||
workspace.package.version = 0.3.2-pre.11
|
||||
```
|
||||
|
||||
Le gate opérateur de `pre.011`, exécuté le **30 août 2026**, est entièrement vert :
|
||||
|
||||
```text
|
||||
cargo fmt --all PASS
|
||||
python3 scripts/audit_rust_workspace_rules.py PASS / clean
|
||||
python3 scripts/audit_markdown_tables.py PASS / clean — 186 tables / 142 fichiers
|
||||
cargo check --workspace PASS
|
||||
cargo clippy --workspace --all-targets PASS
|
||||
cargo test -p ksp-store-api PASS
|
||||
cargo test -p ksp-store-lib PASS
|
||||
cargo test -p ksp-store-lib --no-default-features PASS
|
||||
cargo test -p ksp-store-postgres-lib PASS
|
||||
cargo test -p ksp-config-lib PASS — 126 unit tests + ownership/public API
|
||||
cargo check -p ksp-store-lib --no-default-features PASS
|
||||
```
|
||||
|
||||
Le gate technique complet de référence de `pre.010` reste également acquis : il a été rejoué après `cargo clean`, passe `cargo test --workspace`, les graphes Cargo, les trois builds Tauri Linux et le live PostgreSQL sur **major 17**.
|
||||
|
||||
## 2. Objectif
|
||||
|
||||
Dernière prerelease avant `rel.001`, strictement limitée à la préparation de publication minimale définie par `VER-LIFECYCLE-003` :
|
||||
|
||||
```text
|
||||
bump workspace vers 0.3.2-pre.12
|
||||
entrée stable candidate 0.3.2 dans CHANGELOG.md
|
||||
fermeture 0.3.2 et précision de 0.3.3 dans ROADMAP.md
|
||||
création du prompt 0.3.3
|
||||
delta pre.012
|
||||
```
|
||||
|
||||
Aucun code, test, manifest de crate, README/USAGE, plan, validation, architecture, règle, config, schema ou migration n'est rouvert.
|
||||
|
||||
## 3. Version Cargo
|
||||
|
||||
```text
|
||||
0.3.2-pre.11
|
||||
-> 0.3.2-pre.12
|
||||
```
|
||||
|
||||
Le header `Cargo.toml` passe de la version fichier `345` à `346` parce que le fichier est réellement modifié.
|
||||
|
||||
## 4. Changelog `0.3.2`
|
||||
|
||||
`CHANGELOG.md` enregistre la fondation stable candidate réellement livrée :
|
||||
|
||||
```text
|
||||
ksp-store-lib + ksp-store-postgres-lib
|
||||
feature postgres par défaut
|
||||
Store lié à exactement un RawNetworkId
|
||||
Config std.store avec targets devnet/mainnet/testnet et URI Secret séparées
|
||||
tokio-postgres + Deadpool + Rustls
|
||||
TLS Disabled / VerifyFull
|
||||
pool/connect/wait/create/recycle/shutdown bornés
|
||||
V000 bootstrap + ksp_store_schema_migrations
|
||||
history version/name/SHA-256
|
||||
advisory transaction lock
|
||||
health/readiness portable et redacted
|
||||
84 exports crate-root façade au gate hardening
|
||||
aucune capability/table RawTransaction ou RawAccountState métier
|
||||
```
|
||||
|
||||
Il enregistre également le gate technique complet, le live PostgreSQL major 17 et la policy supportée PostgreSQL >= 15.
|
||||
|
||||
## 5. Roadmap
|
||||
|
||||
`ROADMAP.md` :
|
||||
|
||||
```text
|
||||
passe 0.3.2 à [X]
|
||||
remplace les formulations prospectives par la fondation réellement livrée
|
||||
conserve 0.3.3 ouverte comme vertical slice RawTransaction complète
|
||||
précise que 0.3.3 couvre les six capabilities transaction/observation/rétention
|
||||
conserve RawAccountState + complétude RAW pour 0.3.4
|
||||
```
|
||||
|
||||
La séparation durable reste :
|
||||
|
||||
```text
|
||||
Store = persistence/navigation
|
||||
workers/jobs/executors = batch-size, priorité, backlog et policy
|
||||
```
|
||||
|
||||
## 6. Prompt `0.3.3`
|
||||
|
||||
Le nouveau prompt :
|
||||
|
||||
```text
|
||||
prompts/022-V0_3_3_START_PROMPT.md
|
||||
```
|
||||
|
||||
est confronté à :
|
||||
|
||||
```text
|
||||
docs/rules/PROMPT_STRUCTURE.md
|
||||
docs/rules/VERSION_WORKFLOW.md
|
||||
docs/rules/FILE_CONTRACTS.md
|
||||
docs/rules/RULES_KSP.md
|
||||
docs/rules/RULES_DEPENDENCIES.md
|
||||
|
||||
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
|
||||
|
||||
docs/plans/022-V0_3_1_STORE_RAW_PLAN.md
|
||||
docs/validation/018-V0_3_1_STORE_RAW.md
|
||||
docs/plans/023-V0_3_2_STORE_POSTGRES_FOUNDATION_PLAN.md
|
||||
docs/validation/019-V0_3_2_STORE_POSTGRES_FOUNDATION.md
|
||||
|
||||
crates/ksp-store-api/src/**
|
||||
crates/ksp-store-lib/src/**
|
||||
crates/ksp-store-postgres-lib/src/**
|
||||
```
|
||||
|
||||
Il impose une première tranche `pre.001` d'audit/design avant tout SQL métier lourd.
|
||||
|
||||
## 7. Archive historique requise pour la session suivante
|
||||
|
||||
L'archive :
|
||||
|
||||
```text
|
||||
khadhroony-bot3_v0.5.3-pre.005-fix010.zip
|
||||
```
|
||||
|
||||
reste **obligatoire au `0.3.3-pre.001`**, mais sa portée est réduite à l'ancien RAW transaction PostgreSQL :
|
||||
|
||||
```text
|
||||
raw transaction table
|
||||
transaction observations
|
||||
indexes/constraints
|
||||
raw queries
|
||||
raw transaction repository
|
||||
contrats DTO/entity/repository pertinents
|
||||
```
|
||||
|
||||
Elle sert à produire une matrice :
|
||||
|
||||
```text
|
||||
REPRENDRE / REDESSINER / REPORTER / REJETER
|
||||
```
|
||||
|
||||
Elle n'est ni une base de code ni une autorité sur `ksp-store-api` ou l'architecture KSP actuelle.
|
||||
|
||||
## 8. Scope strict du prompt suivant
|
||||
|
||||
`0.3.3` doit implémenter les six capabilities :
|
||||
|
||||
```text
|
||||
RawTransactionRead
|
||||
RawTransactionWrite
|
||||
RawTransactionObservationRead
|
||||
RawTransactionObservationWrite
|
||||
RawTransactionRetentionRead
|
||||
RawTransactionRetentionWrite
|
||||
```
|
||||
|
||||
sur le même couple Store/PostgreSQL, avec notamment :
|
||||
|
||||
```text
|
||||
migration métier à partir de V001
|
||||
atomicité canonical + observation
|
||||
idempotence identical
|
||||
ERROR_CODE_RAW_CONFLICT pour contenu divergent
|
||||
get/list cursorisé
|
||||
network mismatch avant I/O
|
||||
retention/tombstone/ForceRehydrate
|
||||
concurrence/rollback
|
||||
PostgreSQL live gate
|
||||
```
|
||||
|
||||
Le prompt force `pre.001` à fermer plusieurs questions physiques importantes avant code lourd :
|
||||
|
||||
```text
|
||||
binding de la database au RawNetworkId
|
||||
représentation PostgreSQL des u64/u32 sans narrowing
|
||||
ordre total + format du cursor
|
||||
concurrence/idempotence
|
||||
rétention physique honnête pour Full/Compacted/Archived/Purged
|
||||
error mapping SQL sûr
|
||||
```
|
||||
|
||||
Sont explicitement réservés :
|
||||
|
||||
```text
|
||||
0.3.4 -> RawAccountState PostgreSQL + complétude RAW
|
||||
0.3.5 -> Interface events partagés si consumer réel
|
||||
0.3.6 -> Job API + premier backfill
|
||||
0.3.7 -> application backfill/inspection
|
||||
```
|
||||
|
||||
## 9. Prévision souple intégrée au prompt
|
||||
|
||||
Le prompt réserve :
|
||||
|
||||
```text
|
||||
pre.001 audit contrats/kbot3/schema/concurrence/sizing
|
||||
pre.002 migration V001 + schema/indexes
|
||||
pre.003 mapping physique + lectures
|
||||
pre.004 persistence acquisition atomique + observations
|
||||
pre.005 list/query + cursor
|
||||
pre.006 retention/tombstone/ForceRehydrate
|
||||
pre.007 composition façade + conformance six capabilities
|
||||
pre.008 PostgreSQL integration réelle RawTransaction
|
||||
pre.009 hardening/completeness
|
||||
pre.010 gate technique final
|
||||
pre.011 réconciliation documentaire
|
||||
pre.012 préparation de publication
|
||||
rel.001 publication stable
|
||||
```
|
||||
|
||||
La prévision reste souple et doit être recalibrée par `0.3.3-pre.001` selon le budget de 15–20 minutes par tranche intermédiaire.
|
||||
|
||||
## 10. Fichiers ajoutés
|
||||
|
||||
```text
|
||||
prompts/022-V0_3_3_START_PROMPT.md
|
||||
deltas/0.3.2/pre.012.md
|
||||
```
|
||||
|
||||
## 11. Fichiers modifiés
|
||||
|
||||
```text
|
||||
Cargo.toml
|
||||
CHANGELOG.md
|
||||
ROADMAP.md
|
||||
```
|
||||
|
||||
## 12. Fichiers supprimés
|
||||
|
||||
```text
|
||||
aucun
|
||||
```
|
||||
|
||||
## 13. Surfaces explicitement non rouvertes
|
||||
|
||||
```text
|
||||
README.md
|
||||
RULES.md
|
||||
.env.example
|
||||
config/**
|
||||
crates/**
|
||||
docs/**
|
||||
prompts/001..021
|
||||
```
|
||||
|
||||
En particulier :
|
||||
|
||||
```text
|
||||
crates/ksp-store-api/**
|
||||
crates/ksp-store-lib/**
|
||||
crates/ksp-store-postgres-lib/**
|
||||
docs/plans/023-V0_3_2_STORE_POSTGRES_FOUNDATION_PLAN.md
|
||||
docs/validation/019-V0_3_2_STORE_POSTGRES_FOUNDATION.md
|
||||
docs/architecture/**
|
||||
```
|
||||
|
||||
## 14. Validations de préparation
|
||||
|
||||
À exécuter sur l'arbre reconstruit :
|
||||
|
||||
```text
|
||||
audit Rust workspace
|
||||
audit Markdown
|
||||
contrôle exact du payload overlay
|
||||
contrôle versions/file headers
|
||||
contrôle qu'aucun fichier hors lane n'est modifié
|
||||
```
|
||||
|
||||
Aucun résultat Cargo nouveau n'est revendiqué par l'environnement de génération si Cargo n'y est pas disponible.
|
||||
|
||||
## 15. Gate opérateur
|
||||
|
||||
La lane est documentaire/de publication ; le gate ciblé suffit :
|
||||
|
||||
```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-lib
|
||||
cargo test -p ksp-store-postgres-lib
|
||||
cargo test -p ksp-config-lib
|
||||
cargo check -p ksp-store-lib --no-default-features
|
||||
```
|
||||
|
||||
Le live PostgreSQL, les trois builds Tauri et le workspace lourd n'ont pas besoin d'être rejoués dans cette tranche puisque `pre.012` ne touche aucune surface runtime/build/config/dependency.
|
||||
|
||||
## 16. Étape suivante
|
||||
|
||||
Si le gate reste vert :
|
||||
|
||||
```text
|
||||
0.3.2-rel.001
|
||||
```
|
||||
|
||||
La publication stable doit être strictement mécanique :
|
||||
|
||||
```text
|
||||
workspace.package.version = 0.3.2
|
||||
deltas/0.3.2/rel.001.md
|
||||
```
|
||||
|
||||
`rel.001` ne doit rouvrir ni `CHANGELOG.md`, ni `ROADMAP.md`, ni le prompt `0.3.3`, ni aucun autre document/code.
|
||||
1172
prompts/022-V0_3_3_START_PROMPT.md
Normal file
1172
prompts/022-V0_3_3_START_PROMPT.md
Normal file
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user