fix(balance): scope v16 abort guard to convertible accounts (#228) #229
No reviewers
Labels
No labels
autopilot:pending-human
source:analyste
source:defenseur
source:human
source:medic
status:approved
status:blocked
status:in-progress
status:needs-clarification
status:needs-fix
status:ready
status:review
status:triage
type:bug
type:feature
type:infra
type:refactor
type:schema
type:security
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: maximus/Simpl-Resultat#229
Loading…
Reference in a new issue
No description provided.
Delete branch "issue-228-v16-guard-convertible-scope"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Fixes #228
Bug
La garde d'abort de la migration v16 (
_v16_guard) clé sura.symbol IS NOT NULLau lieu de la convertibilité. Un compte sous catégorie simple portant un symbole résiduel (recatégorisation priced→simple ; AccountForm rend le champ symbole inconditionnellement) a des lignesquantity NULLpar construction → elles satisfont le prédicat de garde → la garde insère 0 →CHECK(ok = 1)échoue → toute la migration v16 abort → l'app ne démarre plus pour ce profil (pas de perte de données, blocage de lancement).Fix
JOIN
balance_categories+AND c.asset_type IS NOT NULLdans la sous-requête de garde, dans les 3 copies :Migration { version: 16 }, constV16_SQL, etV16_CORRUPT(test d'abort injecté, gardé statement-équivalent — son abort reste piloté par la ligne convertible). La logique de conversion (steps 1-3) était déjà correcte.Test
Nouveau
migration_v16_leaves_simple_account_with_residual_symbol_intact: seed compte simple + symbole résiduel + ligne qty-NULL → v16 applique sans abort, compte intact (aucun security/holding, qty/value préservés,kindrestesimple,detailed_sinceNULL). Échoue avant le fix (CHECK constraint failed: ok = 1), passe après. Suite complètecargo test: 98 passed, 0 failed.Note — immutabilité des migrations
Modifier v16 en place est sûr et conforme à l'esprit de la règle : v16 n'a jamais été dans une release taggée (v0.9.1 s'arrêtait à v13 ; v14-v16 sont sous [Unreleased], mergées via #219-#227). Aucun profil persistant en prod n'a son checksum. Les profils dev ayant déjà appliqué v16 verront un mismatch checksum SHA-384 → reset du profil dev attendu.
Critères d'acceptation
c.asset_type IS NOT NULL(Migration v16 + V16_SQL)View command line instructions
Checkout
From your project repository, check out a new branch and test the changes.