docs(m7): backfill changelog + testing-m7 for the two post-merge UX fixes

User feedback flagged that the doc didn't reflect the two hotfixes shipped
after the M7 PR:
- evidence whitelist surfaced in the dropzone + OS picker pre-filter
- executed_at override fixed in non-UTC timezones (no more time-snap)

Added a CHANGELOG entry per fix and a §3.5 in tasks/testing-m7.md walking
through the timezone semantics of the datetime-local input. spec.md is
left untouched — these are UX/implementation fixes, not contract changes.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Knacky
2026-05-15 09:51:23 +02:00
parent cfcc06cf14
commit 5030f4bd83
2 changed files with 32 additions and 2 deletions

View File

@@ -75,11 +75,29 @@ Rapport HTML : `e2e/playwright-report/`.
- Bouton **Save blue fields** (analogue à la zone red).
- **Evidence dropzone** :
- Drag & drop ou bouton **Pick files** (multi-fichiers).
- Limite côté client à 25 MB/file (garde-fou UX), refus serveur stricte
à 25 MB.
- Sous la dropzone, la liste des extensions acceptées est affichée :
`Accepted: .png · .jpg · .jpeg · .pdf · .txt · .log · .json · .csv · .evtx · .zip · max 25 MB / file`
(testid `evidence-allowed-formats`).
- Le sélecteur OS est pré-filtré via l'attribut `accept` — pas de "All files".
- Un drag&drop d'une extension hors-liste est rejeté côté client avec
le message d'erreur en rouge ; le serveur re-vérifie quoi qu'il
arrive (`unsupported_extension` / `too_large`).
- Limite : **25 MB / fichier** (côté client = garde-fou UX, côté serveur =
stricte avec stream cap chunk-par-chunk).
- Table récap : nom · taille · uploader · `sha256[:12]…` · link download +
bouton soft-delete.
### 3.5 Override executed-at — pièges timezone
- Le toggle **Override executed-at timestamp** affiche un input
`datetime-local` qui parle en **heure locale du navigateur** (ex.
Europe/Paris UTC+2). L'état local du composant garde la valeur sous
forme `YYYY-MM-DDTHH:MM` ; la conversion en UTC ISO n'a lieu qu'au
submit. Donc si tu tapes `10:30` à Paris, le serveur reçoit
`08:30:00+00:00` — c'est attendu.
- Le polling activity (15 s) ne re-sync l'état local **que** sur changement
d'identité du test (`useEffect([test.id])`) — une frappe en cours n'est
jamais écrasée par un refetch.
### 3.4 Indicateur d'activité
- À l'arrivée sur la page, le polling `GET /missions/<id>/activity` démarre