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>
25 lines
2.1 KiB
Markdown
25 lines
2.1 KiB
Markdown
---
|
|
name: ticket4-overlay-composition-leafview
|
|
description: 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.
|
|
metadata:
|
|
type: reference
|
|
---
|
|
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 `overlay` de 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]]. |