Feature #1553
openFeature #1513: Implémenter des agents conversationnels spécialisés pour la qualification des demandes sur claude code
Frontend: per-mode required-field checklist and security warning banner
0%
docs/superpowers/specs/2026-08-03-specialized-intake-agents-design.md
Description
**Surface:** frontend (`src/`, Next.js 16 App Router, Atomic Design, next-intl)
**Depends on:** the selector child (needs the active mode in the UI)
**Blocks:** nothing
The guidance layer: show the client what information helps for the type of request they picked, and warn where a warning is warranted.
**Required-field checklist.** For the active mode, render the slot list from #1549 as a short "what helps" panel near the composer. This is deliberately **static per mode**, not live per-slot state — see decision 6 in the spec. Live tracking needs the model to self-report filled slots (a second marker fighting the streaming guard, or an extra LLM call per turn), and since filing is non-blocking anyway we could not act on the precision. Do not build a tracker here.
**Security warning banner.** When the mode is `security`, show *"⚠️ Ce type de demande sera revu par l'équipe OmDev avant d'être planifié."*
**Reuse, don't reinvent.** #50 already built the warning + tooltip + orange (`#FF9800`) chip pattern in `TicketDraftPanel` for `bf-disagree`. Generalize that component rather than writing a second one; the `Sécurité` marker should render with the same visual grammar.
**Non-blocking is the hard rule** (epic AC #8): nothing here may prevent filing. The only gate on the File button stays `titleEmpty`. An incomplete request must remain fileable.
## Acceptance criteria
- [ ] The checklist renders the active mode's slots, and differs between `bug`, `feature` and `security`.
- [ ] No checklist renders for a null-mode conversation.
- [ ] Required vs optional slots are visually distinguished.
- [ ] The security banner shows for `security` mode only.
- [ ] The `Sécurité` marker renders in `TicketDraftPanel` with the same chip/tooltip grammar as `bf-disagree`, via a **shared** component — a test asserts both markers use it.
- [ ] **Filing stays non-blocking**: with every optional and required slot unaddressed, the File button is still enabled and filing succeeds (explicit test).
- [ ] The checklist does not shift or obscure the message log or composer on a narrow viewport.
- [ ] FR/EN parity in `en.ts` and `fr.ts` with identical ICU placeholders; `tsc` passes.
- [ ] Gates green: `npx vitest run`, `npx tsc --noEmit`, `npx eslint .`, `npm run build` (Node 20.20.2 via nvm). TDD: failing test first.
No data to display