v0.3.2-pre.001

This commit is contained in:
2026-08-29 16:45:14 +02:00
parent 6cc94ebb46
commit 8d4b3b67fb
7 changed files with 1938 additions and 19 deletions

365
deltas/0.3.2/pre.001.md Normal file
View File

@@ -0,0 +1,365 @@
<!-- file: deltas/0.3.2/pre.001.md -->
<!-- version: 1 -->
# Delta `0.3.2-pre.001` — audit Store/PostgreSQL, runtime foundation et réconciliation du graphe
## 1. Base requise
Base directe attendue :
```text
v0.3.1
workspace.package.version = 0.3.1
```
Sources obligatoires réellement disponibles :
```text
khadhroony-solana-project-v0.3.1.zip
khadhroony-bot3_v0.5.3-pre.005-fix010.zip
```
La metadata Git n'est pas incluse dans l'archive KSP ; le tag `v0.3.1` ne peut donc pas être interrogé localement. La version Cargo, `deltas/0.3.1/rel.001.md`, le prompt 021, la présence de `ksp-store-api` et l'absence des deux crates runtime concordent avec la base stable requise.
Commit attendu :
```text
v0.3.2-pre.001
```
Archive overlay attendue :
```text
ksp-general-0.3.2-pre.001.zip
```
## 2. Objectif
Ouvrir `0.3.2` uniquement par le gate prévu :
```text
lecture règles + architecture + 0.3.1
réaudit kbot3 physique ciblé
réaudit PostgreSQL/tokio-postgres/pool/TLS/migrations
brainstorming runtime/backend
threat model
dependency graph exact
Config std.store candidate
integration test strategy
sizing + prévision souple
réconciliation des règles Store contradictoires découvertes
```
Aucune crate runtime, connexion, pool, TLS, migration ou Config Store n'est implémenté dans ce delta.
## 3. Divergence stable découverte
La base stable avait déjà adopté le backend séparé dans le plan `0.3.1` et les architectures 003/004/005, mais conservait l'ancien modèle dans :
```text
KSP-API-006
DEP-STORE-002
docs/architecture/008-DATA_MATERIALIZATION_AND_STORE.md
```
Le prompt 021 demande en plus de relire `DEP-STORE-001..010`, alors que la base ne définissait que `001..008`.
La réconciliation livrée fixe :
```text
ksp-store-lib = façade/runtime commune
ksp-store-postgres-lib = backend physique officiel
backend -> ksp-store-api
backend -X-> ksp-store-lib
consumers ordinaires -> ksp-store-lib
```
`DEP-STORE-009` et `DEP-STORE-010` sont ajoutées pour rendre la frontière normative explicite.
## 4. Décisions du gate
### PostgreSQL/driver
```text
PostgreSQL minimal supporté : 15
PostgreSQL de référence : 18.6
driver : tokio-postgres 0.7.18
```
### Pool
```text
retenu : deadpool-postgres 0.14.x
rejeté : pool KSP maison sans besoin démontré
rejeté : bb8-postgres pour cette fondation, ownership de connection task moins adapté au close KSP
```
### TLS
```text
tokio-postgres-rustls 0.14.x
rustls 0.23
aws-lc-rs
native system roots
modes KSP : Disabled / VerifyFull uniquement
```
### Migrations
```text
moteur KSP privé
SQL embarqué
history table ksp_store_schema_migrations
sentinel version 0
SHA-256
advisory transaction lock borné
run transactionnel
aucun down automatique
aucune table RAW métier
```
`refinery 0.9.2` a été audité mais n'est pas retenu.
### Config
```text
std.store V1 possédé par ksp-config-lib
KSP_SECRET_STORE_POSTGRES_URI
settings typés
aucun serde_json::Value backend_options
aucun env/PG*/.pgpass lu par Store/backend
```
### Health
Un health/readiness portable minimal est retenu pour distinguer Store construit, prêt et fermé sans exposer pool/URI/SQL.
## 5. Graphe cible
```text
ksp-store-lib
├── ksp-store-api
├── ksp-logging-lib
└── [postgres] ksp-store-postgres-lib
ksp-store-postgres-lib
├── ksp-store-api
├── ksp-logging-lib
├── tokio
├── tokio-postgres
├── deadpool-postgres
├── tokio-postgres-rustls
├── rustls
└── sha2
```
Feature :
```text
default = postgres
--no-default-features doit compiler
Postgres connu sans feature -> STORE_BACKEND_NOT_COMPILED avant I/O
```
## 6. Héritage kbot3 ciblé
Surfaces relues : ancien `ks-store`, PostgreSQL, migration resources, health, Config et docs Store.
Résumé :
```text
REPRENDRE façade intentionnelle, pool/timeout bornés, advisory lock, health, SQL privé
REDESSINER crates séparées, tokio-postgres, settings typés, TLS, checksum/history, close, errors
REPORTER 16 tables N1-N3, 240 SQL métier, 79 index, repositories/replay/ledgers
REJETER SQLx, monolithe façade/backend, backend_options JSON, env direct, erreurs backend brutes
```
Le détail est dans le plan 023.
## 7. Threat model
Le plan couvre explicitement :
```text
credential leak URI/Debug/error/log
PG*/.pgpass bypass Config
connection string hostile
connection storm/unbounded pool
hung connect/migration/shutdown
concurrent migration runners
modified migration/checksum
partial migration
SQL/dynamic identifier injection
feature/config mismatch
connection task leaked/dropped
schema history newer than runtime
server error echo
```
## 8. PostgreSQL integration strategy
Le test `#[ignore]` de `pre.008` lira une URI dédiée depuis stdin, refusera une metadata table préexistante, ne créera aucune table métier et ne détruira ni base ni schema.
Il prouvera :
```text
connect >= PostgreSQL 15
bootstrap initial
idempotence
concurrence
checksum mismatch
rollback d'un échec injecté
health ready
close borné
cleanup metadata créée par le test
```
La cible de gate est PostgreSQL 18.6.
## 9. Sizing recalibré
La prévision reste :
```text
pre.001 audit/design/réconciliation normative
pre.002 scaffold + feature graph
pre.003 settings + selection/lifecycle contracts
pre.004 Config std.store
pre.005 connection + deadpool + Rustls
pre.006 migration/bootstrap
pre.007 composition + health/close
pre.008 PostgreSQL integration réelle
pre.009 hardening/completeness/dependency matrix
pre.010 gate technique final
pre.011 réconciliation documentaire finale
pre.012 préparation publication minimale
rel.001 publication stable
```
La release reste clôturable sans absorber `RawTransaction` ou `RawAccountState`.
## 10. Fichiers ajoutés
```text
docs/plans/023-V0_3_2_STORE_POSTGRES_FOUNDATION_PLAN.md
docs/validation/019-V0_3_2_STORE_POSTGRES_FOUNDATION.md
deltas/0.3.2/pre.001.md
```
## 11. Fichiers modifiés
```text
Cargo.toml
docs/rules/RULES_KSP.md
docs/rules/RULES_DEPENDENCIES.md
docs/architecture/008-DATA_MATERIALIZATION_AND_STORE.md
```
## 12. Fichiers supprimés
```text
aucun
```
## 13. Version Cargo
La prerelease non-fix synchronise :
```text
workspace.package.version = 0.3.2-pre.1
```
Aucune crate runtime n'est encore ajoutée ; le changement versionne le gate `pre.001`.
## 14. Baseline opérateur `v0.3.1`
Le journal opérateur fourni à l'ouverture montre notamment :
```text
cargo fmt --all PASS
audit Rust général / exports / workspace PASS
audit Markdown PASS — 186 tables / 138 fichiers
cargo check --workspace PASS
cargo clippy --workspace --all-targets PASS
tests ciblés dont ksp-store-api PASS
cargo test --workspace PASS
builds Tauri SOL Prices/Wallet/Config Desk PASS
cargo tree -p ksp-store-api --edges normal ksp-store-api -> ksp-core-lib
cargo tree --duplicates exécuté
```
Cette preuve de base ne remplace pas le gate après application de `pre.001`.
## 15. Validations après application
Dans lenvironnement de génération du présent overlay, les contrôles suivants ont été réellement exécutés après modification :
```text
python3 scripts/audit_rust_workspace_rules.py
General Rust rule audit: clean
Rust export completeness audit: 0 candidate(s)
KSP workspace Rust rule audit: clean
python3 scripts/audit_markdown_tables.py README.md RULES.md ROADMAP.md CHANGELOG.md docs prompts crates deltas/0.3.2
Markdown table audit: clean (186 tables, 124 files)
```
`cargo` nest pas installé dans lenvironnement de génération. Les commandes suivantes nont donc pas été rejouées ici et ne sont pas déclarées PASS :
```text
cargo fmt --all
cargo check --workspace
cargo clippy --workspace --all-targets
```
Aucun code Rust nest modifié par `pre.001`; le seul changement Cargo est `workspace.package.version`. Le baseline opérateur `v0.3.1` reste vert, mais ne remplace pas le gate opérateur après application.
## 16. Validations non requises dans cette tranche
```text
cargo test -p ksp-store-lib crate encore absente
cargo test -p ksp-store-postgres-lib crate encore absente
PostgreSQL live réservé à pre.008
pool/TLS connection tests réservés à pre.005+
migration runtime tests réservés à pre.006+
```
## 17. Questions ouvertes
Aucune question architecturale ne bloque `pre.002`.
Les détails d'implémentation volontairement réservés aux tranches dédiées sont :
```text
noms Rust exacts des settings/errors
mapping deadpool exact des timeouts
construction rustls root store exacte
DDL final de history metadata
forme finale health snapshots
```
Ils ne rouvrent pas :
```text
tokio-postgres
deadpool-postgres
Rustls VerifyFull/Disabled
migrations KSP-owned
backend crate séparée
Config ownership
absence de RAW métier en 0.3.2
```
## 18. Application et validation opérateur
Après application de l'overlay :
```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
```
Aucun scaffold Store, SQL, migration runtime ou Config `std.store` ne doit être ajouté à ce delta.