Files
khadhroony-solana-project/deltas/0.3.4/pre.002-fix.001.md

5.0 KiB

Delta 0.3.4-pre.002-fix.001 — correction des canaris V002

1. Base

Base opérateur obligatoire :

0.3.4-pre.002
workspace.package.version = 0.3.4-pre.2

Le gate opérateur du 2026-08-30 est propre sur les audits Rust/Markdown, cargo check --workspace, Clippy all-targets, Store API, Store façade, Config et ksp-store-lib --no-default-features. Il échoue uniquement dans :

cargo test -p ksp-store-postgres-lib

avec 41 tests unitaires backend passants et deux canaris en échec.

2. Version

Ce correctif modifie deux sources Rust de tests. Conformément à VER-ID-007 et VER-ID-010 :

workspace.package.version = 0.3.4-pre.2.fix.1

Aucune version de migration n'est ajoutée ou changée.

3. Défaut 1 — canari SchemaNewer devenu obsolète

Le test historique :

pre_003_fix_001_newer_history_is_rejected_without_down_migration

construisait V000, V001 puis une migration inconnue de version 2. Ce scénario était valide quand V001 était la dernière migration embedded. Depuis pre.002, V002 occupe légitimement la version 2; le même historique représente donc une divergence V002 et doit être classé MigrationMismatch, ce qui explique l'échec observé :

left:  Some(MigrationMismatch)
right: Some(SchemaNewer)

Le canari est recalibré sans modifier validate_history : il construit le préfixe valide V000/V001/V002 avec leurs checksums réels, puis ajoute une migration inconnue de version 3. Le scénario teste à nouveau exactement un historique plus récent que le registry KSP et conserve l'attente SchemaNewer.

4. Défaut 2 — assertion FK sensible au formatage SQL

Le canari :

pre_002_v002_resources_are_exactly_two_tables_plus_base_pk_fk_without_indexes_or_domain_checks

cherchait la FK complète sous forme d'une chaîne contenant un espace entre la clause FOREIGN KEY (...) et REFERENCES. La ressource SQL V002 contient un retour à la ligne à cet endroit, sans différence sémantique PostgreSQL.

La ressource SQL n'est pas réécrite. Le test normalise uniquement les espaces ASCII du SQL embedded avant de vérifier ses fragments obligatoires/interdits. Il continue d'exiger :

  • exactement 5 resources V002 ;
  • les 2 tables ;
  • les 2 PK ;
  • la FK composite avec ON DELETE RESTRICT ;
  • NUMERIC(20,0) pour les champs concernés ;
  • absence d'index, de CHECK de pre.003, de cascade, de BIGSERIAL, de slot BIGINT et de data TEXT.

5. Invariants préservés

Aucune ressource SQL n'est modifiée :

crates/ksp-store-postgres-lib/migrations/v002_raw_account_state/**

Le checksum V002 intermédiaire reste donc :

30ac87496f1bb3805d816660891d7eab2127c599a636eb40c17ade5926311f55

Restent également inchangés :

V000 / V001
registry V002 et ses 5 resources
src/migration.rs
src/schema.rs
ksp-store-api
ksp-store-lib
Config
aucune capability RawAccount* backend/façade
aucun repository raw_account
aucun index/check de pre.003

6. Fichiers modifiés

Cargo.toml
crates/ksp-store-postgres-lib/unit_tests/migration.rs
crates/ksp-store-postgres-lib/unit_tests/schema.rs
docs/plans/025-V0_3_4_STORE_POSTGRES_RAW_ACCOUNT_PLAN.md
docs/validation/021-V0_3_4_STORE_POSTGRES_RAW_ACCOUNT.md

Fichier ajouté :

deltas/0.3.4/pre.002-fix.001.md

Aucun fichier supprimé.

7. Validations déjà fournies par le gate opérateur pre.002

PASS avant le correctif :

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.4
cargo check --workspace
cargo clippy --workspace --all-targets
cargo test -p ksp-store-api
cargo test -p ksp-store-lib
cargo test -p ksp-config-lib
cargo check -p ksp-store-lib --no-default-features

Backend avant correctif :

cargo test -p ksp-store-postgres-lib
41 passed; 2 failed

8. Gate opérateur du correctif

À rejouer après extraction :

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.4
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

Les commandes Cargo post-correctif ne sont pas exécutables dans l'environnement d'assemblage courant faute d'exécutable cargo.

9. Décisions

  • corriger les canaris, pas la production ni V002 ;
  • préserver strictement le checksum de migration ;
  • conserver SchemaNewer pour un historique réellement au-delà de la dernière migration embedded ;
  • rendre l'assertion FK insensible uniquement au whitespace SQL, sans affaiblir le contrat de contenu ;
  • ne pas avancer pre.003.

10. Questions ouvertes

Aucune pour ce correctif. Le passage à pre.003 dépend du gate opérateur vert de pre.002-fix.001.