Capitalise les notes durables produites pendant le sprint UI rework et les tickets livrés depuis. Commit séparé du code : `.ideai/memory/` est le store durable versionné, il ne doit jamais être mélangé aux commits de feature. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2.8 KiB
2.8 KiB
name, description, metadata
| name | description | metadata | ||
|---|---|---|---|---|
| ticket18-picker-delivered-devfrontend | memory note ticket18-picker-delivered-devfrontend |
|
Lot B / #18 — TicketPicker livré (DevFrontend)
Branche feature/ticket-picker-popup (base develop d97abb1). vitest vert : 53 fichiers / 515 tests, dont 8 nouveaux (TicketPicker.test.tsx) + 29 tickets.test.tsx inchangés (valide la non-régression du listing après extraction). tsc --noEmit clean.
Fichiers
- Créés :
shared/ui/zIndex.ts,features/tickets/TicketFacetsBar.tsx,features/tickets/useTicketSearch.ts,features/tickets/TicketPicker.tsx,features/tickets/TicketPicker.test.tsx. - Modifiés :
shared/index.ts(export zIndex),features/tickets/index.ts(barrel),features/tickets/TicketsPanel.tsx(consommeTicketFacetsBar).
Écarts de contrat à trancher (signalés à Main)
- Emplacement TicketPicker : placé sous
features/tickets/, PASshared/ui, car il dépend du domaine ticket + gateways DI (shared/ui = design system pur). Conforme à tous les autres overlays (SprintManager, MemoryEditor…). SeulzIndex.ts(niveau design-system) est dans shared/ui. TicketPickerResult.id/number:ticket_list/TicketSummaryne portent NIidNInumber. Résolus par unticket_readunique à la sélection (useTicketSearch.resolve).numberserait dérivable du ref maisidexige la lecture. → contrat{ref,id,number,title,status,priority}respecté sans nouveau endpoint. Écart backend candidat : ajouter id/number au summary (dette basse).zIndex.tsprovisoire : lot A (#16) introduit le canonique en parallèle. Valeurs alignées sur l'échelle figée (menuDropdown=40, floatingWindow=50, floatingWindowNested=60, toast=70). À réconcilier au merge (garder un seul module). Picker monté àfloatingWindowNested=60.
Notes d'impl
- G3-bis respecté :
cursortraité en token opaque (jamais construit/incrémenté ; relayé verbatim vialoadMore). excludeRefsfiltré client-side après réception de page.useTicketSearchléger (pas de groupement sprint, pas de souscription events, debounce 200ms) — ne réutilise pasuseTickets.TicketFacetsBar= recherche + facettes statut/priorité (labels aria préservés :search tickets,filter status …,filter priority …,clear filters). Le select assignee reste dansTicketsPanel(hors périmètre picker).- Focus-trap inline (Tab cycling + Escape + restore focus) car aucun util partagé n'existe ; G5 respecté (montage niveau chrome par le consommateur #17/#19).
selectionMode:"multi"câblé de façon extensible (footer réservé) mais non actif en V1.
QA repasse derrière. Consommateurs #17 (link) et #19 (sprint) importent TicketPicker depuis @/features/tickets.