Skip to content

feat(characters): conséquences conditionnelles sur les actions (#148, PR 4/4) - #169

Merged
RebelliousSmile merged 1 commit into
mainfrom
claude/plan-derniere-issue-l94t6x
Jul 21, 2026
Merged

feat(characters): conséquences conditionnelles sur les actions (#148, PR 4/4)#169
RebelliousSmile merged 1 commit into
mainfrom
claude/plan-derniere-issue-l94t6x

Conversation

@RebelliousSmile

Copy link
Copy Markdown
Owner

Dernière PR de #148 — volet ⑤ conséquences conditionnelles. Ferme l'issue.

Pourquoi

Point ⑤ : « pour les actions, pour la conséquence, plusieurs résultats selon des conditions (de 7 à 9, choisis une option) ». Action.outcome ne portait qu'un seul texte.

Décisions (validées) : condition en texte libre (aucune validation de plage — cohérent avec « Suddenly n'évalue rien ») ; édition inline des lignes en v1 (comme le reste de l'éditeur depuis PR 2).

Changements

  • Modèle ActionOutcome (enfant de Action, related_name="outcomes") : trigger (texte libre, ex. « 7-9 »), text (le résultat), order. Non destructifAction.outcome reste le résultat simple/base ; ActionOutcome ajoute la liste « choisir selon condition ». Migration 0023, aucune migration de données.
  • Éditeur (trait_set.html) : sous chaque action, la liste des conséquences avec ajout + édition inline + suppression — même patron HTMX que le reste (swap du bloc #set-<pk>). Vues action_outcome_create / action_outcome_edit / action_outcome_delete, 3 routes.
  • Actions transverses (trait_set=None) restent read-only : l'endpoint est set-scoped (404 sinon) ; leurs conséquences éventuelles s'affichent en lecture seule.
  • Affichage read-only sur la fiche publique + le bloc transverse. Préfetch actions__outcomes (anti-N+1).

Tests & vérification

  • Création (avec/sans trigger), text requis (422), édition inline (GET form + POST), suppression, action transverse → 404, étranger → 403, rendu sur la fiche publique.
  • manage.py check · makemigrations --check = No changes · pytest (35 traits + i18n) · ruff check . + ruff format --check . · mypy suddenly/ · design lint.
  • i18n fr/en (msgids sur une ligne fr).

#148 — récap des 4 PR

  1. Tags + background/secrets + colonnes desktop (feat(characters): tags, background & secrets sur la fiche + colonnes desktop (#148, PR 1/3) #166)
  2. Édition des traits/actions existants (feat(characters): éditer les traits/actions existants (#148, PR 2/4) #167)
  3. Création identity-first / traits par ligne (feat(characters): création identity-first, traits par ligne (#148, PR 3/4) #168)
  4. Conséquences conditionnelles (cette PR)

Closes #148

🤖 Generated with Claude Code


Generated by Claude Code

PR 4 (dernière) de #148 — ⑤ conséquences conditionnelles. Une action
pouvait porter un seul résultat (Action.outcome) ; l'issue demande
plusieurs résultats choisis par une condition (« de 7 à 9 »).

- Nouveau modèle enfant ActionOutcome (trigger texte libre + text +
  order), non destructif : Action.outcome reste le résultat simple/base,
  ActionOutcome ajoute la liste « choisir selon condition ». Migration
  0023, aucune migration de données.
- Éditeur : ajout + édition inline + suppression des conséquences sous
  chaque action (swap du bloc #set-<pk>, patron PR 2). Set-scoped only —
  les actions transverses restent read-only.
- Affichage read-only sur la fiche + le bloc transverse. Préfetch
  actions__outcomes (anti-N+1).
- trigger en texte libre, aucune validation de plage (Suddenly n'évalue
  rien). Tests (CRUD + transverse 404 + étranger 403 + fiche) ; i18n.

Ferme #148.

Closes #148

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YBRFVUtmBW3YSP8Yd2uNpB
@RebelliousSmile
RebelliousSmile merged commit ed6a4b2 into main Jul 21, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Amélioration de la fiche de personnage

2 participants