v0.3.4-pre.002-fix.001
This commit is contained in:
168
deltas/0.3.4/pre.002-fix.001.md
Normal file
168
deltas/0.3.4/pre.002-fix.001.md
Normal file
@@ -0,0 +1,168 @@
|
||||
<!-- file: deltas/0.3.4/pre.002-fix.001.md -->
|
||||
<!-- version: 1 -->
|
||||
|
||||
# Delta `0.3.4-pre.002-fix.001` — correction des canaris V002
|
||||
|
||||
## 1. Base
|
||||
|
||||
Base opérateur obligatoire :
|
||||
|
||||
```text
|
||||
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 :
|
||||
|
||||
```text
|
||||
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` :
|
||||
|
||||
```text
|
||||
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 :
|
||||
|
||||
```text
|
||||
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é :
|
||||
|
||||
```text
|
||||
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 :
|
||||
|
||||
```text
|
||||
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 :
|
||||
|
||||
```text
|
||||
crates/ksp-store-postgres-lib/migrations/v002_raw_account_state/**
|
||||
```
|
||||
|
||||
Le checksum V002 intermédiaire reste donc :
|
||||
|
||||
```text
|
||||
30ac87496f1bb3805d816660891d7eab2127c599a636eb40c17ade5926311f55
|
||||
```
|
||||
|
||||
Restent également inchangés :
|
||||
|
||||
```text
|
||||
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
|
||||
|
||||
```text
|
||||
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é :
|
||||
|
||||
```text
|
||||
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 :
|
||||
|
||||
```text
|
||||
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 :
|
||||
|
||||
```text
|
||||
cargo test -p ksp-store-postgres-lib
|
||||
41 passed; 2 failed
|
||||
```
|
||||
|
||||
## 8. Gate opérateur du correctif
|
||||
|
||||
À rejouer après extraction :
|
||||
|
||||
```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.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`.
|
||||
Reference in New Issue
Block a user