From cf006a2ba855efbcc7fa72c4721ae1ab7dff4dc0 Mon Sep 17 00:00:00 2001 From: Knacky Date: Sun, 7 Jun 2026 18:38:41 +0200 Subject: [PATCH] =?UTF-8?q?docs(plan):=20sprint=206=20=E2=80=94=20apply=20?= =?UTF-8?q?spec-reviewer=20Pass=201=20fixes=20(1=20BLOCKER=20+=206=20WARN)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixes applied: - BLOCKER §2 : EngagementDetailPage.test.tsx → "nouveau" (n'existe pas encore), pas "existant — adapter". - WARN §1 : "Première ligne du summary" obligatoire pour backend-builder avec le path final EXACT (anti-URL-drift, lesson sprint 5). - WARN §0/§1 : slug avec NFKD-strip pour accents + fallback "unnamed" pour edge case nom 100% non-alphanum. - WARN §2 : ExportEngagementButton les DEUX moitiés ouvrent le dropdown (pas d'action par défaut — différence vs NewSimulationDropdown). - WARN §2 : exports.ts throw Error sur non-2xx pour pipeline toast. - WARN §1 : created_by rendu username-only en MD/CSV (pas la dict). - WARN §1 : PDF généré depuis les DONNÉES (pas depuis le string Markdown). NITs incorporés : - gdk-pixbuf-2.0-0 retiré du set minimal (text-only PDF), avec note pour confirmer via weasyprint --info. - data-testid="export-dropdown" sur le wrapper pour AC-30.1. - AC-29.3 : compter rows via csv.reader, pas file.split. - §0 point 14 : style explicite btn-outline (cohérence header). - Test MITRE-bundle-not-loaded ajouté à test_export_render.py. Plan prêt pour spec-reviewer Pass 2. --- tasks/todo.md | 42 +++++++++++++++++++++++++++++++----------- 1 file changed, 31 insertions(+), 11 deletions(-) diff --git a/tasks/todo.md b/tasks/todo.md index c842216..7d867c4 100644 --- a/tasks/todo.md +++ b/tasks/todo.md @@ -16,11 +16,17 @@ 7. **Markdown** : généré via string templating Python (pas de lib externe). Simple, déterministe, testable par assertion de sous-chaînes. 8. **CSV** : généré via `csv.writer` (stdlib). Une ligne d'en-tête + N lignes simulations. Colonnes : `id, name, status, techniques (joined "|"), tactics (joined "|"), description, commands, prerequisites, executed_at, execution_result, log_source, logs, soc_comment, incident_number, created_at, updated_at`. **Pas de header engagement dans le CSV** (format machine-readable strict) ; l'engagement context sort dans le filename. 9. **PDF** : généré via **WeasyPrint** (Python HTML→PDF, lib mature, qualité de rendu pro, dépendances système cairo/pango/gdk-pixbuf à ajouter au `python:3.12-slim` du Dockerfile). Pipeline : on génère **le même HTML** que pour le Markdown (mais wrappé en `...