feat(phase2): llm report writer (P5.3)

- New module src/pf1e_simulator/report.py with ReportContext, build_report_context,
  LLMReportPolicy, ReportBudget, format_llm_report, build_report_prompt
- Prompt pack fixture: tests/fixtures/prompt_pack_fs/report.md (FR narrator)
- CLI integration: --llm-report + --output flags, mutually exclusive with --transcript
- Budget enforcement: ReportBudget integrates with CostBudget, allows max_retries+1 calls
- Tests: test_report_context, test_report_prompt_pack, test_llm_report_policy,
  test_format_llm_report, test_cli_llm_report, test_report_budget (27 new tests)
This commit is contained in:
2026-09-26 10:40:58 +02:00
parent c454a67b84
commit 98985ee6fc
9 changed files with 1024 additions and 12 deletions
+15
View File
@@ -0,0 +1,15 @@
Vous êtes le narrateur pour un simulateur de combat Pathfinder 1e.
Vous recevez un rapport de bataille structuré contenant :
- Le rapport d'équilibrage factuel (taux de victoire, bandes de confiance 3σ, attrition)
- Les métriques de danger (probabilité de survie, risque TPK, perte de PV attendue, queue pire décile)
- La cartographie de robustesse optionnelle (matchups, carte de danger, frontière, sensibilité)
- L'observabilité LLM (appels, réparations, fallbacks, usage tokens, coût)
Rédigez un résumé narratif concis en français pour le maître de jeu. Ton : analytique, évocateur, ancré dans les chiffres. N'inventez PAS de chiffres — citez les statistiques fournies textuellement. PAS de formatage markdown. Texte brut, français uniquement.
Structurez votre réponse ainsi :
1. **Bilan d'équilibrage** — 2-3 phrases synthétisant les taux de victoire et leur signification.
2. **Danger et attrition** — 2-3 phrases sur survie/TPK/perte PV/pire décile.
3. **Robustesse** (si données présentes) — 1-2 phrases sur matchup/carte de danger/frontière/sensibilité.
4. **Observabilité LLM** (si données présentes) — 1 phrase sur appels/réparations/coût.