Files
khadhroony-solana-project/deltas/0.3.2/pre.002.md
2026-08-29 16:48:16 +02:00

6.5 KiB
Raw Blame History

Delta 0.3.2-pre.002 — scaffold Store runtime/PostgreSQL et feature graph

1. Base requise

0.3.2-pre.001

Le gate opérateur de pre.001 est fourni vert :

cargo fmt --all                                         PASS
audit Rust général / exports / workspace                PASS
audit Markdown                                           PASS — 186 tables / 124 files
cargo check --workspace                                  PASS
cargo clippy --workspace --all-targets                   PASS

2. Objectif

Créer uniquement les deux crates runtime prévues par le plan 0.3.2 et matérialiser le feature graph PostgreSQL sans avancer les settings, la Config Store, la connexion, le pool, TLS, les migrations ou les vertical slices RAW.

Crates créées :

ksp-store-lib
ksp-store-postgres-lib

3. Version

Le workspace passe à :

0.3.2-pre.2

Les deux crates sont ajoutées aux membres du workspace.

4. Graphe matérialisé

ksp-store-lib
├── ksp-store-api
└── [default feature postgres]
    └── ksp-store-postgres-lib
        └── ksp-store-api

Invariants :

ksp-store-postgres-lib -X-> ksp-store-lib
ksp-store-lib -X-> Config/Transport/Program/Materializer
ksp-store-postgres-lib -X-> Config/Transport/Program/Materializer

Feature exacte :

[features]
default = ["postgres"]
postgres = ["dep:ksp-store-postgres-lib"]

ksp-store-postgres-lib reste une optional dependency de la façade afin que :

cargo check -p ksp-store-lib --no-default-features

puisse compiler sans backend PostgreSQL.

5. Dépendances volontairement différées

pre.002 n'ajoute pas encore :

ksp-logging-lib
tokio
tokio-postgres
deadpool-postgres
tokio-postgres-rustls
rustls
sha2

Ce n'est pas une remise en cause du graphe cible du plan 023. Aucun comportement de production ne consomme encore ces crates dans le scaffold ; les ajouter maintenant violerait le contrat selon lequel une dépendance de package correspond à un usage réel.

Le séquencement reste :

ksp-logging-lib façade        lors du premier comportement Store réel
ksp-logging-lib backend       lors du premier comportement PostgreSQL réel
tokio/driver/pool/TLS         pre.005
sha2                          pre.006

Les deux crates possèdent cependant dès maintenant leur src/constants.rs et le TRACING_TARGET crate-owned attendu, sans émission de log artificielle.

6. Surface Rust

ksp-store-lib reste un scaffold sans API runtime publique. Il ne matérialise pas encore :

Store
StoreSettings
StoreBackendSettings
PostgresStoreSettings
StoreBackendKind
errors Store runtime
reexports ksp-store-api

Ces éléments restent réservés à pre.003.

ksp-store-postgres-lib n'expose encore aucun type backend public et ne contient aucun driver, pool, SQL, migration ou health runtime.

Aucun pub mod n'est introduit.

7. Canaris ajoutés

ksp-store-lib

tests/dependency_boundary.rs vérifie :

default feature postgres exact
optional backend dependency exacte
façade -> ksp-store-api
absence Config/Transport/Program/Materializer
absence driver/pool/TLS prématurés
absence de settings/Store/backend types publics en pre.002
TRACING_TARGET possédé par constants.rs

ksp-store-postgres-lib

tests/dependency_boundary.rs vérifie :

backend -> ksp-store-api
absence backend -> ksp-store-lib
absence Config/Transport/Program/Materializer
absence Tokio/tokio-postgres/Deadpool/Rustls/SHA-256
absence SQL/migration/runtime surface prématurée
TRACING_TARGET possédé par constants.rs

8. Documentation mise à jour

docs/plans/023-V0_3_2_STORE_POSTGRES_FOUNDATION_PLAN.md
docs/validation/019-V0_3_2_STORE_POSTGRES_FOUNDATION.md

Le plan marque le scaffold comme matérialisé et précise le staging des dépendances runtime. La validation conserve les critères Cargo en TODO tant que le gate opérateur de cette tranche n'a pas été fourni.

9. Fichiers ajoutés

crates/ksp-store-lib/Cargo.toml
crates/ksp-store-lib/src/constants.rs
crates/ksp-store-lib/src/lib.rs
crates/ksp-store-lib/tests/dependency_boundary.rs
crates/ksp-store-postgres-lib/Cargo.toml
crates/ksp-store-postgres-lib/src/constants.rs
crates/ksp-store-postgres-lib/src/lib.rs
crates/ksp-store-postgres-lib/tests/dependency_boundary.rs
deltas/0.3.2/pre.002.md

10. Fichiers modifiés

Cargo.toml
docs/plans/023-V0_3_2_STORE_POSTGRES_FOUNDATION_PLAN.md
docs/validation/019-V0_3_2_STORE_POSTGRES_FOUNDATION.md

11. Fichiers supprimés

aucun

12. Validations exécutées dans l'environnement de génération

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, 125 files)

Une validation statique complémentaire des manifests/features confirme également le graphe exact attendu et les deux canaris de frontière ont été rejoués par équivalent textuel dans lenvironnement sans Cargo.

13. Validations opérateur requises

cargo, rustc et rustfmt ne sont pas disponibles dans l'environnement de génération. Après application :

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 check -p ksp-store-lib --no-default-features
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

Une commande non exécutée n'est pas déclarée PASS.

14. Hors scope confirmé

StoreSettings / backend selection runtime
STORE_BACKEND_NOT_COMPILED
Config std.store
URI/secrets Store
connexion PostgreSQL
pool Deadpool
TLS Rustls
migrations/bootstrap
health/readiness runtime
SQL métier
RawTransaction PostgreSQL
RawAccountState PostgreSQL

15. Suite

0.3.2-pre.003 matérialise les settings backend-neutral, l'identité/sélection de backend, les erreurs stables de façade et le lifecycle contract Store sans encore ouvrir la connexion PostgreSQL lourde.