fix: résultat d'exécution fiable des actions de combat (#77) #82
No reviewers
Labels
No labels
Compat/Breaking
Kind/Bug
Kind/Documentation
Kind/Enhancement
Kind/Feature
Kind/Security
Kind/Testing
Priority
Critical
Priority
High
Priority
Low
Priority
Medium
Reviewed
Confirmed
Reviewed
Duplicate
Reviewed
Invalid
Reviewed
Won't Fix
Status
Abandoned
Status
Blocked
Status
Need More Info
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: jeux/beaulieu-sur-brume#82
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "feature/77-action-result-contract"
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?
Closes #77.
CombatController.execute_action("end_turn")renvoyaittruemême hors tour joueur ou avant le démarrage du combat, alors queplayer_end_turn()ne faisait rien (reproduction confirmée avantstart()). Ce contrat trompait l'UI, les tests et toute future commande générique. Quatrième correctif de l'audit 0.16.0.Changements
scripts/combat_controller.gd:player_end_turn()renvoie désormais unbool— vrai uniquement s'il s'agissait d'un tour joueur et que le tour a été terminé, faux sinon (avantstart(), hors tour joueur, combat fini).execute_action("end_turn")propage ce résultat (plus dereturn trueinconditionnel).attack/dodge/second_wind) renvoyaient déjà le booléen réel de leur action ; un id inconnu ou une action désactivée renvoie faux sans consommer de ressource, en cohérence avecavailable_actions().enabled._on_end_turn) ignore le retour (déjà gardé paris_player_turn).Critères d'acceptation
Tests
Suite GUT complète verte : 289 tests (depuis 284), stable sur plusieurs exécutions.
tests/unit/test_combat_actions.gd: toutes les actions exécutables avantstart()et après fin de combat → faux (avec cohérenceenabled == false) ;end_turnau tour du joueur → vrai ; alternance effective des deux acteurs contrôlables viaplayer_end_turn(); attaque désactivée (héros hors portée) → faux sans consommer l'Action ; id inconnu refusé.execute_action("end_turn") renvoyait true même hors tour joueur ou avant le démarrage, alors que player_end_turn() ne faisait rien — un contrat trompeur pour l'UI et toute commande générique. player_end_turn() renvoie désormais un bool (vrai seulement s'il a réellement terminé un tour joueur) ; execute_action propage ce résultat. Un id inconnu ou une action désactivée ne produit aucun effet ni consommation, en cohérence avec available_actions().enabled. Tests : toutes les actions avant start() / après fin de combat → faux ; end_turn au tour du joueur → vrai et alternance effective entre deux acteurs contrôlables ; attaque sans cible désactivée → faux sans consommer l'Action ; id inconnu refusé. Suite 289 tests, stable. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>