v0.3.3-pre.009-fix.003

This commit is contained in:
2026-08-30 14:56:51 +02:00
parent 8da04717b6
commit 5e2f959c01
4 changed files with 114 additions and 7 deletions

View File

@@ -1,12 +1,12 @@
# file: Cargo.toml
# version: 356
# version: 357
[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.9.fix.2"
version = "0.3.3-pre.9.fix.3"
edition = "2024"
license = "MIT"
repository = "https://git.sasedev.com/Sasedev/khadhroony-solana-project"

View File

@@ -1,5 +1,5 @@
// file: crates/ksp-store-postgres-lib/src/migration.rs
// version: 5
// version: 6
use sha2::Digest; // rust-rules: trait-import
@@ -329,7 +329,7 @@ async fn ensure_resource(
std::result::Result::Ok(crate::SchemaResourceState::Compatible) => std::result::Result::Ok(()),
std::result::Result::Ok(crate::SchemaResourceState::Missing | crate::SchemaResourceState::Incompatible) => {
log_schema_resource_block(resource.id, "post_apply_incompatible");
std::result::Result::Err(crate::PostgresBackendError::new(crate::PostgresBackendErrorKind::MigrationMismatch, "schema_resource_post_apply"))
std::result::Result::Err(crate::PostgresBackendError::new(crate::PostgresBackendErrorKind::MigrationMismatch, resource.id))
},
std::result::Result::Err(error) => std::result::Result::Err(error),
};

View File

@@ -0,0 +1,105 @@
<!-- file: deltas/0.3.3/pre.009-fix.003.md -->
<!-- version: 1 -->
# Delta `0.3.3-pre.009-fix.003` — ressource V001 post-apply identifiable sans fuite
## 1. Base et constat
Base opérateur :
```text
0.3.3-pre.9.fix.2
```
Le gate standard fourni le 2026-08-30 est entièrement propre : audits Rust/Markdown, `cargo check --workspace`, Clippy all-targets, tests Store/API/backend/Config et `--no-default-features` passent.
Le live PostgreSQL réel atteint PostgreSQL 17 puis échoue pendant `PostgresBackend::open` avec la phase :
```text
schema_resource_post_apply
```
Cette phase prouve qu'une ressource V001 a bien été exécutée mais que l'introspection immédiate la classe ensuite `Missing` ou `Incompatible`. Elle ne permet toutefois pas encore de savoir quelle ressource parmi les 40 est concernée.
## 2. Version
```text
workspace.package.version = 0.3.3-pre.9.fix.3
```
## 3. Diagnostic post-apply exact et secret-safe
Dans `ensure_resource`, le seul chemin `post_apply_incompatible` conserve `MigrationMismatch` mais utilise désormais :
```rust
resource.id
```
comme `PostgresBackendError::phase()`.
`SchemaResource::id` est une chaîne `&'static str` embarquée dans le binaire et contrôlée par KSP, par exemple :
```text
tables/002_ksp_raw_transactions.sql
constraints/006_ck_ksp_raw_transactions_slot.sql
indexes/001_ix_ksp_raw_transactions_slot_signature.sql
```
Elle ne contient aucune URI, valeur de configuration, donnée utilisateur, SQLSTATE, bind, texte serveur ou payload. Le prochain live peut donc identifier exactement la ressource fautive sans affaiblir la redaction.
Les autres phases de migration restent inchangées.
## 4. Pourquoi aucune correction SQL n'est appliquée ici
Le live ne fournit encore que la classification `schema_resource_post_apply`. V000 est déjà acquis sur PostgreSQL 17 et aucune incompatibilité évidente ne justifie de modifier à l'aveugle une ressource V001 ou son comparateur de catalogue.
`fix.003` est donc volontairement diagnostique : la prochaine exécution doit donner l'identifiant exact, puis le correctif suivant pourra cibler le contrat d'introspection ou la ressource concernée avec preuve.
## 5. Invariants
Aucun changement de :
- fichiers SQL V000/V001 ;
- ordre ou nombre des 40 ressources V001 ;
- checksums migrations ;
- Store API / façade ;
- RawTransaction reads/writes/pagination/rétention ;
- cursor ;
- Config ;
- scope `RawAccountState`.
## 6. Fichiers modifiés
```text
Cargo.toml
crates/ksp-store-postgres-lib/src/migration.rs
docs/validation/020-V0_3_3_STORE_POSTGRES_RAW_TRANSACTION.md
deltas/0.3.3/pre.009-fix.003.md
```
Aucune suppression.
## 7. Gate opérateur 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
```
Puis :
```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_raw_transaction_live -- --ignored --nocapture --test-threads=1
unset KSP_PG_TEST_URI
```
Si le post-apply échoue encore, le message doit maintenant exposer uniquement l'identifiant statique de la ressource V001 concernée.

View File

@@ -1,5 +1,5 @@
<!-- file: docs/validation/020-V0_3_3_STORE_POSTGRES_RAW_TRANSACTION.md -->
<!-- version: 16 -->
<!-- version: 17 -->
# Validation `0.3.3` — Store/PostgreSQL RawTransaction vertical slice
@@ -643,8 +643,10 @@ cap 500/1000 dans Store pagination
- gate opérateur `pre.009-fix.001` du 2026-08-30 : `cargo check --workspace`, tests API/façade/backend/Config et `--no-default-features` passent, mais Clippy bloque le test live sur trois closures sans `return` explicite et remonte deux guards redondants ;
- live réel `pre.009-fix.001` avec URI dédiée valide : PostgreSQL 17 est joint, puis l'ouverture backend échoue encore sous l'étiquette trop générique `backend_open` ; aucune conclusion sur le schéma n'est tirée sans phase sûre plus précise ;
- `pre.009-fix.002` corrige uniquement les cinq diagnostics Clippy du test et propage `PostgresBackendError::phase()` vers `LiveFailure` lors de `open_backend`, sans rendre le texte PostgreSQL, l'URI, SQLSTATE ou bind ;
- gate Cargo standard de `pre.009-fix.002` : À EXÉCUTER côté opérateur ;
- test PostgreSQL réel `--ignored` : À RELANCER ; si l'ouverture échoue, la phase statique backend doit désormais identifier l'étape exacte.
- gate Cargo standard de `pre.009-fix.002` du 2026-08-30 : PASS complet, audits/check/Clippy/tests/no-default-features propres ;
- live PostgreSQL réel `pre.009-fix.002` : PostgreSQL 17 joint puis FAIL à `schema_resource_post_apply`, ce qui localise le défaut dans la relecture d'une ressource V001 juste après son application ;
- `pre.009-fix.003` conserve la redaction mais remplace, uniquement pour ce cas post-apply, la phase agrégée par `resource.id`, identifiant embarqué statique et non sensible ; le prochain live doit donc nommer exactement `tables/...`, `constraints/...` ou `indexes/...` ;
- aucune logique SQL/migration n'est modifiée par `fix.003` : il s'agit d'une instrumentation diagnostique sûre avant correction de la ressource réellement fautive.
### `pre.010`