# Tao conversation : la conception

Tâche Tao #172, étape 2. Ce document est à valider par Tom avant tout code. Il s'appuie sur l'audit `docs/tao-v2/audit-rerun.md`, dont la section 3 donne les chiffres « avant ».

Il a été confronté au code par une relecture contradictoire (Athéna, Opus 5.5 xhigh). Ses six objections bloquantes sont intégrées ici, et la section 8 dit ce qu'elles ont changé.

Maquette cliquable et animée : https://paf-studio-code-tom-tao-v2-rerun.paf-studio.dev/conversation/ (données d'exemple). Aperçu iPhone : `…/conversation/mobile.html`. Visuels générés avec GPT Image 2.5 Sunburst : `docs/tao-v2/conversation/visuels/bureau.png` et `iphone.png` (à partir de la maquette), et `notifications.png` (les notifications sur l'écran verrouillé).

**Le style visuel** reprend celui de `vercel/chatbot`, demandé par Tom le 03/11. Ce dépôt est sous licence Apache-2.0 : on peut s'en inspirer, et en reprendre du code avec mention de la licence. Le Harness étant en Vue, ses principes seront réécrits ; une attribution n'est ajoutée que si du code est repris tel quel.

**La mise en page.**
- La conversation est une colonne centrée, et la liste des tâches une colonne à gauche qu'on peut replier ; sur mobile, elle devient un tiroir.
- Tao parle sans bulle, à côté d'une petite icône ; ton message est une bulle discrète à droite.
- **Aucune boîte encadrée** : une demande ouverte est une surface douce, marquée d'un trait jaune à gauche et de « En attente de toi ». Une fois tranchée, elle se replie en une ligne de reçu.

**Les animations.**
- Les messages arrivent en fondu montant, sur une courbe « ressort ».
- Pendant que Tao réfléchit, un texte scintille, puis sa réponse s'écrit mot à mot.
- Les réponses rapides apparaissent en cascade, et le compte à rebours d'un lancement est un anneau qui se remplit.

**Les éléments flottants.**
- La pastille « N en attente » flotte au-dessus du champ de saisie, avec un léger flou.
- Le champ de saisie s'éclaire quand il est actif.
- L'index s'ouvre en fenêtre sur bureau, et en feuille qui monte du bas sur mobile.

Le jaune du Harness ne sert que d'accent.

## Ce que Tom a précisé le 03/11, dans le terminal

- **Les discussions.** « J'aimerais bien aller sur le Harness et pas rajouter une surcouche Tao. » La liste des tâches mène tout droit à la discussion du Harness, et Tao ne la recopie pas.
- **Plus de cases à cocher.** « Je ne veux pas avoir à cocher des cartes, je veux vraiment que ça me tienne au courant. »
- **Le canal.** Te tenir au courant passe **d'abord par des notifications**, sur ton téléphone et ton navigateur. La conversation reste sur la page Tao.
- **Sans réponse de ta part.** L'agent **continue sans toi après 20 minutes**.
- **« Mets en pause X ».** L'agent finit son étape puis s'arrête ; sa session reste ouverte.
- **« Je verrai après ».** La demande est mise de côté **jusqu'à ce que tu la redemandes**, ou jusqu'à une heure que tu donnes. Tao fait **chaque matin le récap** de toutes les tâches en cours.
- **Clore une tâche** doit être simple, pour qu'il n'y ait pas des centaines de tâches finies en même temps.

## En bref

Le Tao actuel ne change pas et reste le défaut. Chacun peut passer en **mode conversation** dans ses Réglages, et revenir en arrière d'un clic.

1. **Tao te tient au courant par notifications**, regroupées, avec un bouton quand une réponse tient en un mot (« A », « Plus tard », « Pause », « Clore »). Un toucher t'amène au bon endroit : la carte dans la conversation, ou la discussion dans le Harness.
2. **Seul ce qui t'attend vraiment remonte.**
   - Une question qu'un agent dépasse de lui-même, ou à laquelle Tao répond, ne t'arrive plus : environ 81 % des questions se réglaient sans toi.
   - Sans réponse au bout de 20 min, l'agent continue sans toi, et rien n'est décidé à ta place.
   - Ce qui a vieilli est rangé à part.
3. **Tu parles, sans cocher.**
   - « Mets en pause Covalba », « reprends Covalba ».
   - « Je verrai après », « rappelle-le-moi à 17 h ».
   - « Ferme Covalba », « ferme tout ce qui est fini ».
   - « Le B », « lance un agent sur… ».
4. **Un récap chaque matin** : tâches en cours, ce que tu as laissé de côté, ce qui s'est fini la veille (à fermer d'un mot).
5. **Les discussions s'ouvrent dans le Harness.** Les cartes encore nécessaires sont dans le fil de la conversation Tao, sans liste « À traiter » ni « Propositions à cocher ».

**Merge et mise en prod restent à toi** : un clic en deux temps sur la carte, ou une phrase explicite (« merge la #10 »), jamais un simple « oui ». Toujours un clic aussi pour archiver, retirer un lien, arrêter une session ou envoyer quoi que ce soit dehors.

**Objectifs chiffrés pour Tom :**
- de 36 à **15 cartes et lignes au plus par jour** ;
- de 15 à **8 clics au plus par jour dans Tao** ;
- de 28 à **5 lignes ouvertes au plus** ;
- **aucune tâche finie qui traîne plus d'un jour**.

Les décisions qui te reviennent sont en section 1. Chacune a une proposition par défaut : **« ok » les accepte toutes.**

## 1. Les décisions

| | Décision | Proposition par défaut |
|---|---|---|
| D1 | Nom du mode | **« Tao conversation »**, avec un réglage « Classique / Conversation ». « Tao V2 » désigne déjà le chantier du 30/09 |
| D2 | Merge et mise en prod | **Clic en deux temps, comme aujourd'hui**, sur la carte dans le fil. Un « oui » tapé ne merge jamais. Deux chemins restent ouverts, dans les deux modes : « merge la #10 » écrit à Tao (autorisation vérifiée et relayée à l'agent), et l'accord donné au lancement |
| D3 | « Lance un agent sur… » (lot 3) | **Lancement sans carte, avec 30 secondes pour annuler**, comptées à partir de l'affichage. Tout message de ta part suspend le compte. Le plan de ces agents attend **ta** validation : la règle des 20 min (D14) ne s'y applique pas |
| D4 | Qui peut activer le mode | **Chacun**, dans Réglages, en partant du mode classique. Tom l'essaie en premier |
| D5 | Ce qui remonte | **Tout de suite** : une question affichée dans le sélecteur de l'agent, une question que Tao te remonte, un plan, un merge, un blocage, ou tout ce qui concerne une tâche où tu as la main. **Plus tard** : une question d'agent, quand l'agent est au repos dessus depuis 10 min (20 min si son activité est inconnue) sans réponse de Tao |
| D6 | Ce qui a vieilli | **Rangé dans « En suspens »**, hors des compteurs, avec « Rouvrir » : un merge d'une tâche terminée ou d'une session fermée, et une question ou un blocage sans aucun événement depuis 7 jours. **Un merge d'une tâche encore vivante reste compté** : c'est l'état normal d'une PR prête. Au 03/11 midi, 10 lignes sur 32 seraient rangées |
| D7 | Feu vert permanent, repris de Rerun mais vérifié (lot 3) | **Oui.** Exemple : « pour les notes KB de Covalba, ne me demande plus aujourd'hui ». Il est borné à un type de geste, une cible et la journée (ou la tâche), et se retire d'un mot. Jamais pour un geste qui exige un clic |
| D8 | Tes règles quand tu es absent (lot 3) | **Chaque réponse de Tao à un agent cite sa règle** : ta consigne, une leçon, le brief, la KB ou le code. Une réponse sans règle citée est signalée dans le récap du matin (D17) |
| D9 | Réponses rapides (lot 2) | **Oui**, trois boutons au plus sous la carte ouverte la plus récente, tirés de la carte par le serveur. Ce sont des clics : le modèle n'écrit aucune balise |
| D10 | Carte « Ce que j'ai compris » (lot 2) | **Compacte pour une demande simple** (un point, aucune hypothèse) : deux lignes, la reformulation et les lancements. Complète pour plusieurs points ou une ambiguïté |
| D11 | Ordre des lots | **1. Le calme, les nouvelles et tes mots** (serveur) ; **2. Le fil** (interface) ; **3. « Tu dis, Tao fait »** en dernier, après mesure. C'est le plus risqué : il agit à ta place |
| D12 | Envois par Google (Drive, Gmail, Agenda) en mode conversation (lot 3) | **Une carte « Envoi à valider », au clic seulement**, pour tout envoi, invitation, partage notifié ou suppression définitive que Tao ferait par `google_api`. Aujourd'hui, l'attestation `envoi_confirme` est donnée par le modèle lui-même. Un « oui » tapé ne la remplace jamais |
| D13 | Notifications (ta réponse : « notifications d'abord ») | **Une notification par nouvelle qui compte** : question, plan, merge, blocage, livraison, fin de tâche, « l'agent continue sans toi », récap du matin. Les règles actuelles s'appliquent : regroupement sur 2 min, une seule notification « N nouvelles » à partir de 3, heures calmes. Dans Réglages, chaque type se coupe. **Deux boutons au plus** selon le cas (« A », « B », « Plus tard », « Pause », « Clore »). Merge et mise en prod n'ont jamais de bouton : un toucher ouvre la carte. Sur iPhone, où les notifications n'ont pas de bouton, un toucher ouvre la carte |
| D14 | Sans réponse (ta réponse : « il continue sans moi après 20 min ») | Au bout de **20 min** sans réponse à une question, Tao écrit à l'agent : « Tom n'a pas répondu : continue ce qui ne dépend pas de sa réponse, ne tranche pas à sa place. » Remise prouvée. La question reste ouverte pour toi ; elle n'est pas redemandée. **Un plan** sans réponse en 20 min est relu et tranché par Tao, comme aujourd'hui quand tu es absent, sauf pour les lancements sans carte (D3). **Un merge ou un blocage** attend toujours. Le délai se règle dans Réglages |
| D15 | « Mets en pause X » (ta réponse : « l'agent s'arrête ») | L'agent reçoit « Pause demandée par Tom : termine l'étape en cours, puis attends “reprends” » (remise prouvée). **La session reste ouverte.** Pendant la pause, Tao et le pilote se taisent, et les demandes et notifications de la tâche sont tenues. « Reprends X » relance l'agent. La pause se voit dans la liste et dans le récap du matin |
| D16 | « Je verrai après » (ta réponse : « jusqu'à ce que je redemande, ou à une heure dite ») | La demande sort des compteurs **sans échéance**, ou jusqu'à l'heure dite (« à 17 h », « demain »). L'agent est prévenu et continue sans, comme pour D14. « Qu'est-ce que j'ai laissé de côté ? » les liste. Elles reviennent aussi chaque matin dans le récap |
| D17 | Récap du matin | **Chaque jour à 8 h** (heure de La Réunion, réglable) : un message dans la conversation et une notification. Il contient : tâches en cours (étape, qui attend), tâches en pause, ce que tu as laissé de côté, ce qui s'est fini la veille avec « ferme tout ce qui est fini », réponses de Tao aux agents avec leur règle (D8). Il remplace le bloc « Pendant ton absence » |
| D18 | Clore une tâche | **D'un mot ou d'un clic** : « ferme Covalba », « ferme tout ce qui est fini », bouton « Clore » sur la carte ou la notification de fin. Le serveur ferme aussitôt une tâche dont la fin est annoncée, sans PR ouverte ni agent au travail. **Ta phrase ou ton clic sert de preuve**, sans formulaire d'attestation : c'est le mode conversation, le classique garde l'annexe I. Une PR encore ouverte : Tao demande une fois, « merge, ferme sans, ou garde ? ». Une tâche fermée sort des listes actives tout de suite |
| D19 | Discussions des tâches (ta remarque : « aller sur le Harness, pas une surcouche ») | La liste des tâches de la page Tao **ouvre la discussion du Harness** : terminal, en-tête et demandes de la tâche. Tao ne recopie pas la discussion ; il en donne seulement l'état en une ligne |

## 2. Ce que tu verras

### 2.1 Le chat sur bureau (lot 2)

```
┌ Tâches ──────────────┐┌ Conversation ──────────────────────────────── Mode conversation ▾ ┐
│ À TOI (2)            ││  ☀ Récap du matin · 6 en cours, 1 en pause, 2 de côté, 3 finies ▸  │
│  Body Expert · images││                                                                    │
│   question de l'agent││  Toi   18:31  Lance un agent sur le site Covalba pour corriger    │
│  Site avocate        ││               le menu mobile, et note dans la KB que Maxime       │
│   PR #10 à merger    ││               valide les maquettes.                               │
│ EN COURS (3)         ││  Tao   18:31  C'est noté dans la KB de Covalba. Je lance l'agent. │
│  Tao conversation    ││     ✓ Note KB « Maxime valide les maquettes » · Annuler            │
│   étape 2/6          ││     ⏱ Lancement dans 30 s : Covalba · menu mobile (Claude,         │
│  …                   ││        tom/menu-mobile)                       [ Annuler ]          │
│ AU REPOS (2)         ││                                                                    │
│  …                   ││  Tao   18:40  Body Expert : l'agent attend ta réponse depuis 12 min.│
│                      ││     ┌ Question · tâche #162 ─────────────────────────────────────┐ │
│                      ││     │ Garder les photos actuelles ou générer de nouvelles images ?│ │
│                      ││     │ [ A. Garder ]  [ B. Générer ]  [ Autre… ]   défaut : A      │ │
│                      ││     └─────────────────────────────────────────────────────────────┘│
│                      ││  Tao   18:41  Site avocate : la PR #10 est prête.                  │
│                      ││     ┌ Merge à valider · PR #10 ──────────── [ Merger ] puis [ Oui ]┐│
│                      ││     └─────────────────────────────────────────────────────────────┘│
│                      ││                                   ( 2 en attente ↑ )               │
│                      ││  [ Écris à Tao…                                        Envoyer ]   │
└──────────────────────┘└────────────────────────────────────────────────────────────────────┘
```

(La note KB et le lancement sans carte n'arrivent qu'au lot 3. Aux lots 1 et 2, ce sont encore des cartes, mais dans le fil.)

- **Deux colonnes au lieu de trois.** La colonne « À traiter » disparaît. Les tâches gardent leurs groupes (À toi, En cours, En pause, Au repos), et « À toi » suit la règle D5. **Un clic sur une tâche ouvre sa discussion dans le Harness** (D19), pas une vue Tao.
- **En tête du fil, chaque matin, le récap** (D17) remplace « Pendant ton absence ».
- **Chaque carte est en entier sous le message de Tao qui l'a amenée**, sur bureau comme sur mobile : question, compréhension, lancements, cartes d'action. Une fois tranchée, elle devient un reçu d'une ligne (« ✓ Plan validé par toi · 14:41 »).
- **Les demandes des tâches arrivent dans le fil** au moment où elles t'attendent (D5) : plan à valider, question d'agent, merge, blocage. Elles prennent la forme d'une ligne de Tao qui nomme la tâche, avec la carte de la demande. Plusieurs demandes arrivées pendant ton absence se regroupent en un seul bloc, une ligne par tâche, chacune avec ses boutons.
- **La pastille « N en attente ↑ »**, au-dessus du champ, compte ce qui t'attend. Un clic t'amène à la plus ancienne carte ouverte, le suivant à la suivante. Elle disparaît à zéro.
- **L'index « Ce qui t'attend »**, à côté de la pastille, est un sommaire : une ligne par tâche, et une ligne pour la conversation. Un clic amène à la carte dans le fil. Dessous, replié : « En suspens (n) », avec Rouvrir.
- **Les réponses rapides** (D9) : sous la dernière carte ouverte, « Oui », « Non », « Corriger… » ou les choix de la question.
- **Le sélecteur « Mode conversation ▾ »**, en tête du panneau, fait revenir au mode classique d'un clic.

### 2.2 La bulle (les autres pages)

- Deux onglets, **Conversation** et **Tâches**. Le badge compte ce qui t'attend, avec la même règle que la pastille.
- Les cartes sont dans le fil de la bulle, comme sur la page Tao.

### 2.3 Mobile

```
┌───────────────────────────┐
│ Tao          Mode conv. ▾ │
│ ───────────────────────── │
│ Tao 18:40 Body Expert :   │
│ l'agent attend ta réponse │
│ ┌ Question · #162 ──────┐ │
│ │ Garder ou générer ?   │ │
│ │ [A. Garder] [B. Gén.] │ │
│ │ [Autre…]   défaut : A │ │
│ └───────────────────────┘ │
│   ( ● 2 en attente ↑ ) ☰  │
│  (le A) (le B)            │
│ ╭───────────────────────╮ │
│ │ Écris à Tao…        ↑ │ │
│ ╰───────────────────────╯ │
└───────────────────────────┘
 (la carte ouverte est une surface douce à trait jaune, sans cadre ; voir visuels/iphone.png)
```

- **Plus d'onglets en bas : un seul écran, la conversation.** L'icône en haut à gauche, avec le compteur, ouvre en tiroir la liste des tâches et l'agenda. L'onglet « À traiter » disparaît dans ce mode.
- La pastille et l'index fonctionnent comme sur bureau ; l'index monte en feuille du bas.
- Les boutons passent à la ligne au lieu de se serrer. Le champ de saisie est en 16 px, pour qu'iOS ne zoome pas, et respecte la zone de sécurité du bas de l'écran.

### 2.4 Le terminal d'une discussion

- **L'en-tête ne change pas.** Il garde **toutes** les demandes de sa tâche, y compris celles que D5 tient encore hors du fil. C'est là que tu réponds le plus (19 fois sur 28).
- Répondre là met à jour la carte du fil, qui devient un reçu « répondu dans le terminal ».

### 2.5 Réglages et détail d'une tâche

- **Réglages › Tao propose « Classique / Conversation »**, avec une phrase d'explication.
  - Le changement prend effet au tour suivant de Tao, ne coupe aucune session et garde les cartes ouvertes.
  - Au lot 3 s'y ajoute, dessous : tes feux verts en cours (D7) et les leçons de Tao, chacun avec « Retirer ».
- **Le détail d'une tâche** reçoit « En suspens » et « Réglé depuis 24 h ».
- **Les liens qui mènent aujourd'hui à `/tao/a-traiter`** mènent à la carte dans le fil. Ils viennent des demandes, de l'agenda, du détail d'une tâche et de la colonne des tâches.
- **Réglages › Notifications** reçoit un interrupteur par type de nouvelle (D13), le délai « sans réponse » (20 min par défaut, D14) et l'heure du récap (8 h, D17). Les heures calmes existent déjà.

### 2.6 Les notifications (lot 1)

```
┌ iPhone, écran verrouillé ───────────────┐   ┌ Bureau (Chrome) ─────────────────────────┐
│ TAO · maintenant                        │   │ Tao · Body Expert                         │
│ Body Expert attend ta réponse           │   │ Garder les photos ou générer de nouvelles │
│ Garder les photos ou générer ?          │   │ images ? (défaut : A)                     │
│                                         │   │ [ A · Garder ]  [ Plus tard ]             │
│ TAO · il y a 3 min                      │   └───────────────────────────────────────────┘
│ 3 nouvelles : Covalba étape 2/4 ·       │
│ AMI PR #12 prête · La Fée Clochette fini│
└─────────────────────────────────────────┘
```

- **Une notification par nouvelle qui compte (D13)**, regroupées comme aujourd'hui : même tâche en 2 min, une notification « N nouvelles » à partir de trois sujets, heures calmes.
- **Un toucher t'amène au bon endroit** : la carte dans la conversation Tao pour une question, un plan ou un merge ; la discussion du Harness pour une livraison ou une fin de tâche.
- **Boutons, sur bureau et Android** (deux au plus, c'est la limite de Chrome) :
  - question : le choix par défaut, et « Plus tard » ;
  - plan : « Plus tard » ;
  - fin de tâche : « Clore » ;
  - tâche bavarde : « Pause ».
  
  **Merge et mise en prod n'ont jamais de bouton.** Sur iPhone, les notifications web n'ont pas de bouton : le toucher suffit.
- **Un bouton de notification est un clic de Tom.** Il passe par sa session, comme « Retirer » aujourd'hui (`sw.js`), et laisse un reçu dans le fil (« répondu depuis la notification »).

## 3. Les règles

### 3.1 Ce qui remonte : `NeedsTom` (lot 1)

**Le principe.** Le serveur calcule pour chaque demande un drapeau `needsTom` et l'envoie avec elle. Le groupe « À toi » (`display.go`), la pastille, l'index, les badges, la notification unique et le préfixe de Tao (`InboxPrefix`) l'utilisent tous. Le navigateur ne recalcule plus rien. C'est la leçon de Rerun : un seul ensemble de statuts, partagé par tous les écrans.

**Attendent Tom tout de suite :**
- une question affichée dans le sélecteur de l'agent (détectée en 2 min, `selector.go`) ;
- une question que le pilote lui remonte (`tao_ask_tom`) ;
- tout ce qui concerne une tâche où Tom a la main ;
- un plan à valider par Tom ;
- un merge ;
- un blocage ;
- une question ou une carte de Tao dans la conversation.

**Une question d'agent attend Tom plus tard**, si l'agent est au repos dessus depuis 10 min sans réponse de Tao, ou depuis 20 min si son activité est inconnue (pas de transcript lisible). Le balayage de chaque minute écrit alors `surfaced_at` dans `tao_waits`. Cette écriture réveille le flux poussé et la notification unique : sans elle, rien ne bougerait à l'écran.

**Avant ce moment**, la question reste dans l'activité de la tâche (« l'agent demande… ») et dans l'en-tête de son terminal, visible mais hors compteur.

**En suspens (D6)**, hors compteurs, avec sa raison et « Rouvrir » :
- un merge sur une tâche terminée ou une session fermée. Les autres demandes s'y ferment déjà d'elles-mêmes (`waits_sync.go`) ;
- une question ou un blocage sans aucun événement sur la tâche depuis 7 jours.

**Questions d'agents sans tâche** : elles suivent la même règle, et l'agent au repos se lit sur sa discussion.

### 3.2 La table de risque (lot 1 pour la table, lot 3 pour son usage)

Une seule table, côté serveur (`internal/tao/risk.go`), classe chaque geste. Un test refuse tout type de carte ajouté sans classement.

**Les niveaux :**
- **libre** : Tao le fait sans carte et le dit dans le fil ;
- **accord** : carte dans le fil, tranchée par un clic, ou au lot 3 par un « oui » tapé et vérifié ;
- **clic** : seul un clic de Tom le déclenche ;
- **Tom seul (clic)** : comme « clic », et réservé au propriétaire, comme aujourd'hui.

**Une carte à plusieurs étapes** prend le niveau le plus haut de ses étapes.

| Geste | Tao de lui-même | Tom l'a demandé dans son message (lot 3) | « Annuler » |
|---|---|---|---|
| `discussion.rename`, `link.add` | libre | libre | oui |
| `task.archive` | jamais | libre | oui (désarchive) |
| `kb.note` | accord | libre | oui, depuis le journal de la KB |
| `client.update`, `project.update` | accord | libre | oui, si personne n'a modifié la fiche entre-temps |
| `client.create`, `project.create` | accord | libre | non |
| `people.link`, `people.confirm` | accord | libre | oui |
| `scheduled.disable` | accord | libre | non (on le réactive) |
| `branch.create` (publie la branche), `resource.create` (crée un dépôt GitHub, parfois chez un client) | accord | **accord** | – |
| `discussion.resume` (relance un agent sans plan) | accord | **accord** | – |
| `scheduled.create`, `scheduled.update` | accord | accord (la carte montre l'horaire) | – |
| `session.launch`, carte de lancement | accord | **libre avec 30 s pour annuler** (D3) | pendant 30 s |
| `client.stage` (Suivi clients) | accord | accord | – |
| `planning.place`, `learning.compact` | Tom seul (clic) | Tom seul (clic) | – |
| `project.archive`, `link.remove`, `discussion.stop` | clic | clic | – |
| `pr.merge`, `deploy.grant` | Tom seul, clic en deux temps | Tom seul, clic en deux temps (D2) | – |
| `google_api` : envoi, invitation, partage notifié, suppression définitive | clic, carte « Envoi à valider » (D12) | clic (D12) | – |
| `google_api` : lecture, brouillon, écriture dans un document | inchangé | inchangé | – |
| Outils sans carte d'aujourd'hui : `tao_message_agent`, `tao_set_hand`, `tao_task_plan_update`, `tao_learning_add` | inchangés, avec leurs contrôles actuels (extrait mot pour mot, autorisation relayée, refus des ordres de merge) | inchangés | – |
| Coffre, mots de passe | aucun geste de Tao | – | – |

**Une carte proposée par un agent** (`harness_propose_action`) n'est jamais « libre ».

### 3.3 Le « oui » tapé, vérifié par le serveur (lot 3)

**Où.** Dans go-web, avant le tour de Tao (`goTaoChat` / `runTaoTurns`), et non dans le préfixe du tour : seul go-web sait exécuter un geste. L'exécution part en tâche de fond. Elle est idempotente par identifiant de message : « Réessayer » ne refait rien.

**Ce que le navigateur envoie avec ton message.** Un instantané de ce que tu voyais au moment d'envoyer :
- les cartes ouvertes affichées, avec leur version ;
- les cases cochées des lancements ;
- l'heure d'affichage de chaque carte.

Chaque message de la file est jugé seul, sur son propre instantané, avant d'être réuni aux autres.

**Ton message vaut accord pour une carte si toutes ces conditions sont réunies :**
1. Tu es en mode conversation et Tao n'est pas en pause. Un message à un Tao en pause le réveille d'abord : il n'est jamais un accord.
2. Le message est court (60 caractères au plus) et c'est un accord sans réserve : « oui », « ok », « vas-y », « go », « c'est bon ». Un message qui contient « mais », « sauf », « non », « attends » ou « plus tard » n'est jamais un accord.
3. **Une seule carte « accord » est ouverte dans ton instantané** : c'est la plus récente du fil, aucune autre carte d'accord n'est arrivée depuis ton message précédent, et elle est affichée depuis au moins 2 secondes et au plus 30 minutes.
   - Si ton message désigne une carte (« oui pour le plan », « #482 »), c'est celle-là.
   - « oui à tout » vaut pour toutes les cartes d'accord d'une même réponse de Tao, et seulement celles-là.
4. **La dernière réponse de Tao ne pose pas de question en dehors d'une carte.** Si elle en pose une, ton « oui » y répond, à elle et non à la carte.
5. **La carte n'a pas changé depuis ton instantané** : même version, non remplacée, non retirée. Pour la carte « compris et lancé », la version, c'est la liste exacte de ses lancements.
6. La carte n'est ni de niveau « clic », ni « Tom seul (clic) », et ce n'est pas une question à choix : un « oui » ne tranche pas entre A et B.

**Si c'est accordé :**
- go-web exécute exactement comme pour un clic : `ConfirmUnderstanding`, `Confirm`, confirmation d'action, ou réponse à une demande.
- La preuve est gardée dans `tao_consents` : message, extrait, carte, version et instantané.
- La carte devient un reçu « par ton message “oui” ». Tao lit une ligne de préfixe et n'a rien à refaire.
- Un « oui » consommé ne compte pas comme un message sans réponse sur une question ouverte.

**Sinon, rien ne part, et Tao lit pourquoi** (« deux cartes ouvertes », « la carte a changé », « réserve »). Il demande laquelle, ou reformule.

**La décision E9 actuelle** (« un oui ne lance rien ») n'est levée qu'en mode conversation : un « oui » sur la carte « compris et lancé » confirme et lance les lancements cochés dans ton instantané.

### 3.4 Les gestes libres sur ta demande (lot 3)

**La demande se prouve, elle ne se devine pas.** Tao passe l'extrait de ton message (`consigne_tom`). Le serveur vérifie :
- que l'extrait est mot pour mot dans le message du tour (le tour se date à son début, pas à l'appel d'outil : un tour Codex peut durer 20 minutes) ;
- **que l'extrait est un ordre** : ni une question, ni une condition, ni une citation, découpé par `taoguard.ExcerptSentences` ;
- **qu'il nomme le geste et sa cible**, selon une petite grammaire par type : « note dans la KB … » pour `kb.note`, « renomme … », « archive la tâche … ».

Un accord nu (« oui vas-y ») n'est jamais une `consigne_tom` : il ne passe que par le chemin du « oui » (3.3).

**L'exécution.**
- L'outil de Tao marque la carte « à exécuter ».
- Go-web l'exécute seulement si la carte appartient au tour qu'il fait lui-même tourner (`TurnCards`).
- L'outil relit le résultat en base avant que Tao l'annonce. « Rien n'est jamais exécuté par l'outil » reste vrai.

**« Annuler »**
- Le délai est de 10 minutes, écrit en base : il survit à un redémarrage.
- Il vaut pour les gestes réversibles de la table 3.2.
- Un échec s'affiche comme tel et Tao l'explique.

### 3.5 Le lancement en 30 secondes (lot 3, D3)

**Ce qui le déclenche.** Ton message demande de lancer, selon un classificateur d'ordre impératif (« lance un agent sur… »), qui remplace la regex actuelle `DirectLaunchRequested`. Le chemin `lancement_direct` est élargi au mode conversation.

**Le compte à rebours.**
- Il part de **l'affichage** de la ligne « Lancement dans 30 s · Annuler », sur un minuteur de go-web.
- **Tout message de ta part le suspend.** Tao lit ton message, puis relance ou retire.
- Après un redémarrage, le balayage le reprend s'il a moins de 2 minutes de retard le même jour. Sinon il redevient une carte. Près de minuit, il devient une carte, puisque `claim` refuse les cartes de la veille.

**Les garde-fous.**
- Le plan d'un agent lancé ainsi est validé **par toi** (`PlanValidation=tom`), jamais par Tao à ta place.
- L'accord « merge et déploie sans me demander » ne naît que si ta phrase le dit (grammaire `StandingAccord`).

### 3.6 Le feu vert permanent (lot 3, D7)

**L'exemple.** « Pour les notes KB de Covalba, ne me demande plus aujourd'hui. »

**La vérification.** Le serveur vérifie la phrase avec une grammaire d'accord durable, sur le modèle de `taoguard.StandingAccord`. La tournure « ne me demande plus » est acceptée : elle n'est pas une négation de l'ordre.

**Les bornes.** Un seul type de geste, au plus « accord » ; une cible (client, projet ou tâche) ; une durée, jusqu'au soir ou jusqu'à la fin de la tâche.

**Dans sa portée**, le geste devient libre, et chaque usage laisse un reçu.

**L'affichage.**
- Une ligne dans le fil annonce le feu vert : « Feu vert : notes KB pour Covalba jusqu'à ce soir · Retirer ».
- Il se retire aussi d'un mot (« redemande-moi pour les notes ») ou depuis Réglages.

**Jamais pour un geste de niveau « clic » ou « Tom seul ».** L'accord de merge et déploiement pour toute une tâche existe déjà et reste tel quel.

### 3.7 Tes règles quand tu es absent, et le résumé au retour (lot 3, D8)

**Ce qui existe déjà.**
- Le pilote répond aux agents « dans le périmètre confirmé, le brief, la KB ou le code ». Sinon, il te remonte la question (`prompt_task.go`).
- Il lit les leçons (`tao_learning_read`) et tes consignes sur la tâche des dernières 24 h (`prompt_consignes.go`).

**Ce qui change.**
- `tao_agent_reply` reçoit un champ `regle` : consigne datée, leçon, brief, chemin KB ou fichier de code. Le serveur vérifie que la règle existe, pas qu'elle justifie la réponse. Une réponse sans règle reste permise : elle est signalée dans le résumé, sans t'ajouter de question.
- Ces réponses, avec leur règle, figurent dans **le récap du matin** (3.13), qui remplace le bloc « Pendant ton absence » prévu au départ. Dans la journée, les notifications (3.9) te tiennent au courant.

**Ce qui ne change pas.** Le pilote ne lance jamais d'agent, ne merge pas, ne déploie pas et ne relaie aucune autorisation. Si tu as la main, il se tait.

### 3.8 Ce qui ne change pas, dans les deux modes

- Merge et mise en prod validés par Tom ; la garde observe et prévient.
- Aucun envoi externe sans ton accord (D12 renforce ce point en mode conversation) ; `mail_draft` reste un brouillon.
- Remise prouvée dans le transcript de l'agent.
- Main et retrait de 15 minutes.
- Secrets au coffre.
- La revue horaire, les plans en mode plan, l'accord pour toute une tâche.

### 3.9 Les nouvelles et leurs notifications (lot 1, D13)

- **Ce qui existe déjà et que je réutilise.**
  - La file `notify` et son dispatcher : regroupement sur 2 min, déduplication sur 10 min, « N nouvelles » à partir de trois, heures calmes, réessais, expiration.
  - Les livraisons notifiées (`wake.go`) et le service worker (`sw.js`), qui sait déjà envoyer un POST au serveur depuis un bouton.
- **Ce qui s'ajoute, en mode conversation seulement.**
  - Nouveaux types : étape franchie, fin de tâche, « l'agent continue sans toi », récap du matin, rappel d'un « plus tard » à l'heure dite.
  - **Une fin de tâche notifie de nouveau**, avec « Clore ». La décision 6 de Tao V2 l'avait retirée, mais Tom veut être tenu au courant.
  - Un interrupteur par type, dans Réglages.
- **Les boutons.**
  - Le service worker apprend de nouvelles actions (choix, plus tard, pause, clore). Chacune appelle la route serveur du geste avec la version de la demande, comme un clic dans l'interface ; une demande déjà tranchée est refusée avec 409.
  - Merge et mise en prod n'ont jamais de bouton.
  - Le geste est journalisé avec le canal « notification ».
- **Le bruit est borné.** Une tâche en pause ne notifie rien. Pendant les heures calmes, rien ne sonne et tout part ensemble à la fin. Les étapes franchies peuvent se couper seules.

### 3.10 Sans réponse en 20 minutes (lot 1, D14)

- Le balayage de chaque minute repère une question qui t'attend (`needsTom`) depuis 20 min, sans réponse de ta part ni de Tao.
- Il envoie alors à l'agent, une seule fois, un message fixe : « Tom n'a pas répondu depuis 20 min : continue ce qui ne dépend pas de sa réponse ; ne tranche pas à sa place ; la question reste ouverte. » Le message passe par la remise prouvée (`DeliverConfirmed`). La question reste dans tes compteurs, et une notification « l'agent continue sans toi » part.
- **Un plan** sans réponse en 20 min passe à la relecture de Tao (`EffectiveReviewer`), sauf pour un lancement sans carte (D3). **Un merge ou un blocage** n'est jamais concerné.
- Pendant le retrait de 15 min (tu écris à cet agent) ou si tu as la main, la règle attend : tu es déjà avec l'agent.

### 3.11 Pause et reprise (lot 1, D15)

**Comment Tao comprend la demande.** Tu dis « mets en pause Covalba ». Tao passe l'extrait mot pour mot, vérifié comme pour la main (`SetHandFromChat`). Pour ne pas ajouter d'outil au noyau, dont le budget est plein, c'est un paramètre d'un outil de tâche existant (`tao_task_fix`, action « pause » ou « reprise »). Le même geste existe en bouton dans la liste, dans le fil et dans les notifications.

**Ce que fait le serveur.**
- Il note `paused_at` sur la tâche.
- Il envoie à l'agent « Pause demandée par Tom : termine l'étape en cours, puis attends “reprends”. N'ouvre ni PR ni merge pendant la pause. » La remise est prouvée.
- Le pilote se tait, `NeedsTom` ignore la tâche, sauf un merge déjà prêt, qui reste visible, et les notifications de la tâche sont tenues.
- **Aucune session n'est coupée.**

**La reprise.** « Reprends Covalba » envoie « Reprends là où tu t'étais arrêté » et lève la pause. Les demandes tenues reviennent dans le fil, regroupées.

**La pause n'est pas un arrêt.** Arrêter une session reste `discussion.stop`, toujours au clic.

### 3.12 « Je verrai après » (lot 1, D16)

**Les façons de le dire.**
- Une phrase : « je verrai après », « plus tard », « rappelle-le-moi à 17 h », « demain ».
- Le bouton « Plus tard » d'une carte ou d'une notification.

**Ce que fait le serveur.**
- Il note `snoozed_until` sur la demande : vide pour « sans échéance », sinon l'heure dite. Pour ne pas ajouter d'outil, Tao passe par `tao_wait_update`.
- La demande sort des compteurs, de la pastille et des notifications.
- L'agent reçoit le même message que pour D14 : continue sans, ne tranche pas.

**Le retour.**
- À l'heure dite, la demande revient dans le fil, avec une notification.
- Sans heure, elle revient quand tu demandes « qu'est-ce que j'ai laissé de côté ? », et chaque matin dans le récap.
- Une demande mise de côté que l'agent règle lui-même se ferme normalement.

### 3.13 Le récap du matin (lot 1, D17)

**Quand et comment.** Chaque jour à 8 h, heure de La Réunion, réglable, et seulement un jour où tu as des tâches. Le serveur compose le récap à partir des faits, sans modèle, en reprenant `pauseDigest` et la machinerie du tri du matin (`internal/tao/morning`). Il arrive comme un message de Tao, replié, en tête du fil, avec une notification.

**Ce qu'il contient :**
- les tâches en cours, une ligne chacune : étape, qui attend, depuis quand ;
- les tâches en pause ;
- ce que tu as laissé de côté ;
- ce qui s'est fini la veille, avec la réponse rapide « Ferme tout ce qui est fini » ;
- les réponses de Tao aux agents, avec leur règle (D8) ;
- les demandes passées « En suspens ».

**Sa taille.** Dix lignes au plus, puis « voir tout ».

### 3.14 Clore simplement (lot 1, D18)

**Les façons de le faire.**
- Une phrase : « ferme Covalba », « ferme tout ce qui est fini ».
- Le bouton « Clore » de la liste, du fil ou de la notification de fin.

**Ce que vérifie le serveur.** Il reprend les contrôles de l'annexe I, sur une même photographie : plan, demandes, PR, agent au travail.
- **Tout est propre** (fin annoncée, aucune PR ouverte, agent au repos) : la tâche est fermée aussitôt. Ta phrase, vérifiée mot pour mot, ou ton clic sert de preuve dans le journal `completed_by_user`, sans formulaire à remplir.
- **Une PR est encore ouverte** : Tao demande une fois « merge, ferme sans, ou garde ? ». « Ferme sans » ferme la tâche et laisse la PR telle quelle, avec ton motif.
- **L'agent travaille encore** : refus, avec la raison.

**« Ferme tout ce qui est fini »** ferme d'un coup toutes les tâches propres. Il liste celles qu'il n'a pas pu fermer, et pourquoi.

**Ce qui existe déjà.** `tao_task_fix` sait fermer une tâche (`etat=terminee`) sur ta phrase vérifiée mot pour mot. La clôture d'un mot l'étend au lot et à la question sur les PR ouvertes.

**Une tâche fermée** sort des listes actives tout de suite et reste dans « Terminées ». Ce geste ne ferme aucune session, ne merge rien et ne déploie rien. Le mode classique garde l'annexe I telle quelle.

## 4. Les cas de panne

| Cas | Ce qui se passe |
|---|---|
| Deux onglets : clic dans l'un, « oui » dans l'autre | Le premier geste gagne (réservation conditionnelle en base). Le second trouve la carte tranchée et ne fait rien ; Tao le dit en une phrase |
| « oui » tapé pendant que Tao répond (message en file) | Jugé sur son propre instantané, avant la réunion des messages. Une carte arrivée après ton envoi n'est jamais visée |
| « oui » tapé alors que deux cartes d'accord sont ouvertes | Rien ne part. Tao demande laquelle, avec les deux cartes en réponses rapides |
| « oui » après une question posée par Tao en prose | Il répond à la question, pas à la carte |
| « oui » plus de 30 min après l'affichage de la carte | Pas d'accord tapé : il faut cliquer, ou Tao repropose |
| « oui mais… », « vas-y sauf le 2 » | Jamais un accord automatique. Tao lit la réserve et reformule |
| « non » sur la seule carte ouverte | Aucun geste du serveur. Tao retire ou corrige la carte |
| La carte a changé entre l'instantané et l'envoi | Refus ; la carte affiche « a changé, relis-la » |
| Mauvais rattachement constaté | « Annuler » si c'est réversible. Sinon, le lancement s'arrête au plan, que tu valides toi-même. L'accord et son instantané sont journalisés ; tu peux le signaler, et le cas est compté |
| Tao en pause | Ton message le réveille et reçoit d'abord le résumé de pause. Il n'est jamais un accord |
| Tu écris à un agent (retrait de 15 min) | Tao se tait. La demande se tranche dans l'en-tête du terminal, et la carte du fil devient un reçu |
| Tu as la main sur une tâche | Ses demandes te remontent tout de suite (fil et terminal) ; le pilote se tait |
| Moteur de Tao : Codex | Les contrôles sont dans go-web et le serveur, pas dans le moteur. Une question du sélecteur Codex se répond toujours dans le terminal, et la carte le dit |
| Tâche de Nico | Jamais dans le fil de Tom |
| Changement de mode pendant un tour | Il prend effet au tour suivant. Les cartes ouvertes restent valables dans les deux modes |
| Échec d'un geste libre | Reçu « Échec : … » dans le fil, et Tao explique. Rien n'est retenté en silence |
| Question d'agent masquée qui méritait Tom | Elle remonte après 10 min au repos (20 min si l'activité est inconnue). Elle reste visible dans l'en-tête du terminal et dans l'activité, et la revue horaire la relève |
| Un agent attend dans son sélecteur | Détectée à l'écran, la question remonte tout de suite. Son activité peut sembler « au travail », mais ce n'est plus le critère |
| Lancement mal compris | 30 s pour annuler, et tout message suspend le compte. Puis le plan, que tu valides toi-même ; aucun code n'est écrit avant |
| Redémarrage pendant un compte à rebours | Reprise s'il a moins de 2 min de retard, sinon il redevient une carte. Jamais deux lancements |
| Bouton d'une notification sur une demande déjà tranchée (dans un autre onglet, ou par l'agent) | Refus 409 au service worker ; rien ne part. La notification suivante dit ce qui s'est passé |
| Tu réponds 25 min après le message « continue sans toi » | Ta réponse est remise normalement. L'agent l'applique à ce qu'il n'a pas encore fait, et le dit |
| Agent en pause qui ne s'arrête pas (il finit une longue étape) | La pause reste notée et Tao se tait. La liste affiche « pause demandée, étape en cours », et la revue horaire relève un agent qui écrit encore au bout d'une heure |
| « Reprends » sur une tâche dont la session s'est fermée entre-temps | Tao propose de reprendre la discussion (`discussion.resume`, au clic) au lieu d'envoyer un message dans le vide |
| Une demande mise de côté sans échéance est oubliée | Elle revient chaque matin dans le récap, et « qu'est-ce que j'ai laissé de côté ? » la liste toujours |
| « Ferme tout ce qui est fini » alors qu'une tâche a une PR ouverte | Celle-là n'est pas fermée ; Tao la liste avec « merge, ferme sans, ou garde ? » |
| Trop de notifications | Regroupement, interrupteur par type, pause d'une tâche bavarde depuis la notification, heures calmes. Le nombre de notifications par jour est mesuré |

## 5. Les changements : bénéfice, risque, mesure

| Changement | Bénéfice | Risque, et parade | Mesure du succès |
|---|---|---|---|
| Mode par développeur (D1, D4) | Essai sans risque ; Nico garde ce qui lui va | Deux chemins à maintenir. Parade : composants et serveur partagés, mode lu par une seule fonction côté serveur et un seul composable côté navigateur, parcours de base testés dans les deux modes | Le mode classique passe ses tests sans modification |
| `NeedsTom` et « En suspens » (D5, D6) | Le bruit disparaît : environ 81 % des questions se réglaient sans toi | Masquer une vraie demande. Parade : questions du sélecteur remontées tout de suite, délai de 10 ou 20 min, en-tête du terminal complet, revue horaire, « Rouvrir » | Lignes montrées par jour ; lignes ouvertes le soir ; questions remontées puis réglées sans toi |
| Cartes dans le fil, pastille, index (lot 2) | Plus de liste à fouiller ; la décision est à côté de son contexte | Fil long. Parade : reçus d'une ligne, pastille qui saute à la suivante, index | Clics par jour ; délai entre l'apparition d'une demande et ta réponse |
| Réponses rapides, carte compacte (D9, D10) | Un clic au bon endroit, une carte plus courte | Une hypothèse ratée. Parade : carte complète dès qu'il y a ambiguïté | Compréhensions corrigées ou retirées (1 et 10 sur 55 aujourd'hui) |
| « Oui » tapé vérifié (3.3) | Tu réponds sans chercher de bouton | Mauvais rattachement. Parade : instantané, une seule carte, la plus récente, même version, 30 min au plus, aucune réserve, aucune question en prose | Accords tapés, ambigus et refusés par jour ; 0 rattachement signalé comme faux |
| Gestes libres sur demande (3.4) | Moins de cartes pour ce que tu as demandé toi-même | Une demande mal lue. Parade : extrait vérifié, grammaire par type, reçu, « Annuler » | Cartes d'action par jour ; « Annuler » utilisés |
| Lancement en 30 s (D3) | Un message suffit pour lancer | Un lancement non voulu. Parade : 30 s depuis l'affichage, tout message suspend, plan validé par toi | Lancements annulés ; plans corrigés |
| Feu vert permanent (D7) | Une série de gestes du même genre sans carte | Une portée trop large. Parade : un type, une cible, une journée, jamais de geste « clic » | Feux verts posés et retirés ; gestes faits sous feu vert |
| Règles citées et résumé (D8) | Tu sais ce qui a été fait pour toi, et selon quoi | Un résumé trop long. Parade : un bloc replié, cinq lignes, puis « voir tout » | Part des réponses du pilote avec une règle citée |
| Carte « Envoi à valider » (D12) | Un envoi Google ne repose plus sur l'attestation du modèle | Un clic de plus, rare | Envois Google par jour, tous précédés d'un clic |
| Notifications par nouvelle (D13) | Tu es tenu au courant là où tu es, sans ouvrir Tao | Trop de bruit. Parade : regroupement, interrupteurs, heures calmes, pause d'une tâche | Notifications par jour ; part de celles qui sont suivies d'un geste ; types coupés |
| Continue sans toi après 20 min (D14) | Les agents ne restent plus bloqués sur toi | Un agent part dans une mauvaise direction. Parade : il ne tranche rien à ta place, ta réponse arrive ensuite | Questions passées « sans toi » ; temps d'agent bloqué par jour |
| Pause, plus tard (D15, D16) | Tu choisis ce qui t'occupe maintenant | Une demande oubliée. Parade : récap du matin, liste « laissé de côté » | Pauses et « plus tard » par jour ; demandes de côté depuis plus de 7 jours |
| Récap du matin (D17) | Une vue de tout, une fois par jour | Un message de plus. Parade : replié, dix lignes | Lu ou non ; gestes faits depuis le récap |
| Clore d'un mot (D18) | Plus de tâches finies qui traînent | Fermer une tâche avec un travail en cours. Parade : contrôles de l'annexe I, PR ouvertes demandées une fois | Tâches finies non fermées en fin de journée (objectif 0) |

### Objectifs pour Tom en mode conversation

Mesurés sur trois jours actifs après chaque lot, comparés au départ (11 jours, du 20/10 au 03/11), avec la commande `cc --tao-mesures` livrée au lot 1 :

| Indicateur | Avant | Objectif après le lot 2 | Objectif après le lot 3 |
|---|---:|---:|---:|
| Cartes et lignes montrées par jour actif | 36 | ≤ 20 | ≤ 15 |
| Clics dans Tao par jour actif | ≈ 15 (estimé) | ≤ 12 | ≤ 8 |
| Lignes ouvertes en fin de journée | 28 | ≤ 8 | ≤ 5 |
| Merge, mise en prod ou envoi sans ta validation | 0 | 0 | 0 |
| Accords tapés signalés comme faux | – | – | 0 |
| Tâches finies non fermées en fin de journée | à mesurer | ≤ 2 | 0 |
| Notifications envoyées par jour actif (après regroupement) | ≈ 10 (105 en 11 jours ; 644 autres écartées par le regroupement ou la déduplication) | ≤ 25, chacune utile | ≤ 25 |

À partir du lot 1, les clics sont comptés pour de vrai dans un journal des gestes : clic, réponse dans le terminal, accord tapé, geste libre, « Annuler ».

### Parcours courants, en gestes

| Parcours | Aujourd'hui | Mode conversation (lot 3) |
|---|---|---|
| Lancer une tâche simple | 1 message, la carte « compris » confirmée (1 clic), les lancements cochés (1 clic) | 1 message (« lance un agent sur… »), 30 s pour annuler, aucun clic |
| Valider le plan de l'agent | Trouver la ligne dans « À traiter », la déplier, « Valider » (1 à 2 clics), ou dans le terminal | « oui » ou 1 clic sous la carte du plan dans le fil, ou dans le terminal (inchangé) |
| Répondre à un agent | La ligne apparaît même si l'agent continue seul ; 1 clic ou le terminal | N'apparaît que si elle t'attend ; « le B » ou 1 clic, ou le terminal (inchangé) |
| Noter un fait dans la KB | 1 message, puis la carte d'action dans « Propositions à cocher » (1 clic) | 1 message ; reçu « noté », sans clic |
| Merger | « Merger » puis « Oui » (2 clics) dans « À traiter » | 2 clics, sur la carte dans le fil |

## 6. Les lots

Chaque lot fait deux PR, sauf le lot 2. Aucun ne change le mode classique.

**Ce que chaque PR met à jour.**
- `configs/instructions/global-claude.md` et `internal/agent/context.go`. Le contexte est déjà à 7 800 octets sur 7 800 : la ligne du mode s'écrit en compactant une ligne existante, mesurée par le test.
- `tao-protocol.md`.
- Le manuel de Tao :
  - une **annexe P « Mode conversation »**, hors du noyau ;
  - l'annexe C, régénérée.
- Une entrée « Nouveautés ».

**Les règles du mode ne vont pas dans le noyau du manuel.** Le prompt du pilote mesure 49 994 octets pour une limite de 50 000. Elles vivent dans le préfixe du tour (chat) et dans les blocs du tour du pilote.

### Lot 1, le calme, les nouvelles et tes mots (serveur et Réglages, deux PR)

**Lot 1a, le calme.**

- **Le mode.**
  - Colonne `mode` dans `tao_prefs` (avec sa migration) et historique des changements.
  - `POST /api/tao/mode` : pas `PATCH /api/go/preferences`, qui renvoie toutes les préférences et écraserait un mode changé ailleurs.
  - Le mode est lu dans `GET /api/tao/messages` et ajouté à l'empreinte du flux poussé (« pause »).
  - Le choix dans Réglages.
- **`NeedsTom`** (3.1) :
  - drapeau `needsTom` dans `WaitView` ;
  - `surfaced_at` écrit par le balayage de chaque minute ;
  - utilisé en mode conversation par le groupe « À toi » (`display.go`), les compteurs (calculés par le serveur), la notification unique et `InboxPrefix`.
- **« En suspens »** (D6) : rangement d'office avec sa raison, et `POST /api/tao/waits/{id}/reopen` réutilisé.
- **`internal/tao/risk.go`** : la table 3.2, avec un test qui refuse un type non classé. Elle n'est pas encore utilisée pour agir.
- **Mesure.**
  - Journal des gestes `tao_gesture_log` : quel geste, par quel canal, dans quel mode.
  - Commande `cc --tao-mesures`, qui reprend et corrige les requêtes de l'audit (raisons de fermeture).
- **Ce que tu vois** : le réglage ; en mode conversation, des compteurs plus bas, et « En suspens » dans la colonne « À traiter » existante. Le fil arrive au lot 2.
- **Tests Go** :
  - chaque règle de `NeedsTom`, dont le sélecteur, l'activité inconnue et la main à Tom ;
  - « En suspens » ;
  - la table de risque ;
  - la non-régression du mode classique : `Waits`, la notification, `InboxPrefix` identiques.

**Lot 1b, les nouvelles et tes mots.**

- **Notifications par nouvelle (3.9)** :
  - nouveaux types ;
  - interrupteurs par type dans Réglages ;
  - actions du service worker (choix, plus tard, pause, clore), refus 409 sur une demande déjà tranchée ;
  - geste journalisé avec le canal « notification ».
- **Sans réponse en 20 min (3.10)** : balayage, message fixe à l'agent avec remise prouvée, notification, délai réglable.
- **Pause et reprise (3.11)** :
  - `paused_at`, message à l'agent ;
  - pilote, demandes et notifications tenus ;
  - paramètre de `tao_task_fix`.
- **« Je verrai après » (3.12)** : `snoozed_until`, paramètre de `tao_wait_update`, liste « laissé de côté », rappel à l'heure dite.
- **Récap du matin (3.13)** : composé par le serveur, message et notification, heure réglable.
- **Clore simplement (3.14)** :
  - `tao_task_fix etat=terminee`, étendu au lot ;
  - question sur les PR ouvertes ;
  - bouton « Clore » sur la notification de fin.
- **En attendant le lot 2,** ces gestes passent par la conversation actuelle et les notifications.
- **Tests Go** : chaque règle, la remise des messages de pause et de « continue sans toi », les refus 409, la non-régression du mode classique (une seule notification, comme aujourd'hui).

### Lot 2, le fil (interface)

- **`TaoChat.vue`** :
  - cartes complètes sous leur tour, sur bureau aussi (on lève la garde `pageShell`) ;
  - demandes des tâches placées à l'heure de `surfaced_at` ;
  - reçus ;
  - récap du matin replié en tête ;
  - regroupement des demandes arrivées entre deux visites.
- **Liste des tâches (D19)** : un clic ouvre la discussion du Harness ; groupe « En pause » ; boutons « Pause », « Reprendre » et « Clore » au survol, ou sur un appui long sur mobile.
- **Réponses rapides** : « Plus tard », « Mets en pause », « Ferme tout ce qui est fini » quand c'est utile.
- **`TaoProposals.vue`** : interactif, sans renvoi vers « À traiter ». `TaoPendingBlock.vue` n'est plus le seul endroit où l'on coche.
- **La pastille et l'index** : un nouveau composant, plus `TaoInbox.vue` réduit à l'index et à « En suspens ».
- **La mise en page.**
  - `TaoPage.vue` : colonne centrée, colonne des tâches repliable (en tiroir sur mobile, sans onglets en bas), sélecteur de mode.
  - Le style de `vercel/chatbot`, transposé en CSS et en transitions Vue, avec les jetons du Harness : surfaces sans cadre, fondus « ressort », texte scintillant, pastille flottante, mouvement réduit respecté.
  - `TaoBubble.vue` : deux onglets.
  - `taoWaits.ts` : compteurs lus du serveur.
- **Les renvois** : `TaoTasks.vue`, les évènements `tao:reveal-task` et `tao:show-pending`, et les liens vers `/tao/a-traiter` (`TaoRequests.vue`, `TaoAgenda.vue`, `TaoAgendaOptions.vue`, `TaoTaskDetail.vue`) mènent à la carte du fil.
- **Réponses rapides (D9)** et carte compacte (D10).
- **Specs Playwright du mode** : bureau et mobile, pastille, index, reçus, deux onglets, réponses rapides. Les specs `tao-*` existantes passent sans modification en mode classique.

### Lot 3a, « tu dis, Tao fait » (serveur)

- Le « oui » tapé (3.3) : instantané envoyé par le navigateur, jugement dans go-web, `tao_consents`, exécution idempotente.
- Les gestes libres sur demande (3.4) : grammaire par type, exécution par go-web, « Annuler » écrit en base.
- La carte « Envoi à valider » pour `google_api` en mode conversation (D12).
- Les tests des cas de la section 4, un par ligne.

### Lot 3b, l'autonomie bornée

- **Lancement en 30 s (D3)** : classificateur d'ordre, minuteur de go-web, reprise par le balayage, `PlanValidation=tom`.
- **Feu vert permanent (D7)**. S'il faut un outil de plus, le noyau du manuel est compacté d'autant, mesure à l'appui, ou la limite est relevée par une décision écrite dans la PR.
- **Règle citée par le pilote** (champ `regle`), reprise dans le récap du matin (D8, D17).

### Après le lot 3

- Trois jours d'essai par Tom, puis la mesure avec `cc --tao-mesures` et un bilan chiffré comparé à la section 5 (étape 6 du plan).
- Si l'essai déçoit, il suffit de revenir au mode classique : rien n'est perdu.

## 7. Risques qui restent

- **Le jugement du modèle sur une demande explicite.** La grammaire par type et l'extrait réduisent le risque, sans l'annuler. Parades : un reçu immédiat, « Annuler », et une portée limitée à la colonne « libre ».
- **Deux modes à maintenir.** Chaque règle future de Tao doit dire si elle vaut pour un mode ou pour les deux. L'annexe P le rappelle, et les parcours de base sont testés dans les deux modes.
- **Les budgets.** Le prompt du pilote est à 6 octets de sa limite et le contexte injecté est plein. Chaque lot mesure, et compacte avant d'ajouter.
- **La valeur du « oui » tapé est incertaine.** On ne compte aujourd'hui que 2 accords purs dans 162 messages, mais un « oui » ne lance rien aujourd'hui. Le lot 3a ne part qu'après la mesure des lots 1 et 2, et seulement si tu le veux encore.
- **Recouvrement avec la tâche #166.**
  - Son lot 2 touche `cards.go`, `confirm.go`, `actions.go`, `waits_sync.go` et la documentation.
  - Son lot 4 touchera l'affichage de l'activité des agents (`activity.go`, cartes de tâche, en-tête de discussion).
  - Parades : je rebase après chacun de ses merges ; j'écris dans des fichiers et des sections propres (`needs_tom.go`, `risk.go`, `consent.go`, annexe P) ; je préviens son agent avant de toucher un fichier commun.

## 8. Ce que la relecture contradictoire a changé

| Objection | Changement |
|---|---|
| Le préfixe du tour et l'outil de Tao ne savent pas exécuter un geste | Le « oui » et les gestes libres sont exécutés par go-web, hors du tour, de façon idempotente |
| « Montrée avant ton message » ne se calcule pas : file d'attente, cartes en fin de tour, demandes sans réponse de Tao, réveil de pause | Instantané de ce que tu vois, joint à chaque message ; chaque message est jugé seul ; 30 min au plus ; aucun accord si Tao pose une question en prose ; aucun accord au réveil d'une pause |
| Un extrait mot pour mot ne prouve pas une demande | Ordre vérifié (pas une question ni une condition), grammaire par type, accord nu refusé |
| « Au repos depuis 10 min » cachait les questions du sélecteur, qui sont la moitié des réponses de Tom | Le sélecteur remonte tout de suite ; 20 min si l'activité est inconnue ; `surfaced_at` pour réveiller les écrans |
| `google_api` peut envoyer sur la seule attestation du modèle | D12 : une carte « Envoi à valider », au clic |
| 30 s comptées depuis le message, minuteur à la minute, plan validé par Tao en son absence | Comptées depuis l'affichage, minuteur de go-web, tout message suspend, plan validé par Tom |
| Trous dans la table (`discussion.resume`, `resource.create`, `branch.create`, cartes à étapes, outils sans carte, `planning.place`, `learning.compact`) | Table complétée ; rien n'est assoupli pour les types qui exigent un clic aujourd'hui |
| Budgets pleins (prompt du pilote, contexte injecté) | Règles du mode hors du noyau ; compaction mesurée avant tout ajout |
| Chiffres : Tom avait répondu à 28 questions, pas 9 | Audit corrigé : 81 % réglées sans lui, et 19 réponses sur 28 dans le terminal |
| D6 aurait rangé des PR prêtes | Un merge d'une tâche vivante reste compté |
| Le « oui » tapé est le plus risqué pour un usage encore inconnu | D11 : il arrive en dernier, après la mesure |
