Notes du chantier #4 relancé sur develop, commit séparé du code (convention d'usage) : - ticket4-restart-on-develop-ebd992e: baseline de redémarrage. - ticket4-overlay-composition-leafview: décision de composition de l'overlay dans le layout (LeafView). - ticket4-announcements-frontend-f1f2f3: cadrage de la surface frontend F1-F3. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2.1 KiB
name, description, metadata
| name | description | metadata | ||
|---|---|---|---|---|
| ticket4-overlay-composition-leafview | Règle de composition des deux voiles plein-cellule de LeafView (write-portal injection PTY vs F3 annonces busy) — exclusion mutuelle avec priorité F3, arbitrée pour éviter le double voile. |
|
Arbitrage layout Architect 2026-07-04 (branche feature/agent-live-announcements, base develop ebd992e, 481 tests verts).
Problème vérifié : LeafView héberge DEUX voiles plein-cellule inset:0 dans le même conteneur relatif :
- write-portal (LayoutGrid.tsx:841, zIndex:4, rgba(0,0,0,0.45), « Un agent est en train de parler… ») = délégation injectée dans le PTY de l'agent (§20.3, flag
overlayde useWritePortal). - F3 TargetAnnouncementsOverlay (z-20, bg-canvas/85, « …en train de LUI parler… » + réflexions) = agent busy (agentBusyChanged mediator). Ils rendent le MÊME événement depuis deux signaux et montent ENSEMBLE sur le chemin d'injection inter-agent (overlay+busy) → double voile empilé + bannières dupliquées = rendu cassé, chemin nominal.
Décision (DevFrontend, layout, zéro backend) : exclusion mutuelle, un seul voile à la fois, priorité F3 :
- busy(agent) → F3 seul ; voile write-portal gated
agentId!=null && overlay && !busyActive. - sinon overlay → write-portal seul (repli fenêtre sans busy).
- jamais les deux. Sécurité : on ne touche que le visuel ; la suspension des frappes (portal.isSuspended(), TerminalView.tsx:182) reste ; F3 est pointer-events-none.
Couplage point 3 : F3 DOIT rendre la bannière sur busy même à 0 annonce (déjà: if(!active) return null, TargetAnnouncementsOverlay.tsx:56), car F3 absorbe le voile write-portal — une garde « ≥1 annonce » rouvrirait le trou d'indication. Pas de garde.
F2 (point 4) : filtre requester==id de ligne suffit en V1 (isolation fil partagé) ; ticketId optionnel dormant. F3 hébergement (point 1) : conteneur LeafView validé (pas de ConversationCell sur develop).
Liens : ticket4-restart-on-develop-ebd992e, ticket4-f3-overlay-driven-by-agentbusychanged, inter-agent-live-context-shared-per-agent.