--- name: "Flow — que se passe-t-il à la réception d'un roll" title: "Flow roll — séquence marqueur → mirror" path: "docs/system/FLOW-ROLL.md" description: "Séquence mécanique réelle exécutée par une plume à chaque roll/walkie, du marqueur au mirror de clôture. Premier d'une série de docs de flux (@ego 2026-07-08 18:37)." section_type: "doc" version: "1.3.0" lang: "fr" date: "2026-07-25 20:38:30" created_by: "@as5" maintained_by: "@harfang" updated_at: "2026-08-20 17:12:29" updated_by: "@gg46-hwk" tags: ["System", "Session", "Handbook"] --- # Flow — réception d'un `roll` > **Etat 20/08/2026** — monde Agentic · UI stream Grok ON · WF roll v0.2.3 · plume @gg46-hwk. > Source jour : `records/STATUS.md` · onboarding : `docs/system/GETTING_STARTED.md` · WF : `docs/travail/workflows/roll.md`. Workflow sauvegardable (steps + Mermaid) : `docs/travail/workflows/roll.md`. Séquence observée en pratique (session mémoire 2026-07-08, ~17 rolls consécutifs), pas seulement la théorie de `daemon.md` — les deux devraient coïncider, ce doc sert à vérifier qu'ils coïncident vraiment. ## 1. Marqueur de présence (systématique, chaque roll) ``` AGENTIC_RUNTIME={short} bash tools/barr-el-marker.sh # light (défaut · chaque roll REOPEN) AGENTIC_RUNTIME={short} bash tools/barr-el-marker.sh --full # COLD / session-init ``` **2026-08-12** : light = heure · mirror-pending · disque · mail · snip @ego (pas de `du` monde / RAG / counts). Full = métriques historiques. Sans argument — un `roll` walkie n'est pas mirroré en entrée (exemption P-024b/daemon Phase 1 étapes 0a/0b : le message est déjà sur disque côté UI, ou volontairement léger côté headless). Le script, dans l'ordre : 1. **Garde-fou mirror-pending** (P-053, origine 06:06) — pose un flag `records/chat/.mirror-pending/{runtime}.flag`. Si le tour précédent n'a pas fermé son flag (mirror de clôture manqué), avertissement en tête de sortie. 2. **Garde-fou journal** (P-054) — compare `agents/{runtime}/memory/journal.md` d'un appel à l'autre. Nudge non bloquant si non retouché depuis 8 appels. 3. **Garde-fou fil de session** (P-055) — vérifie l'âge de `records/SESSION-THREAD.md`. Nudge non bloquant si non retouché depuis ≥60 minutes (basé sur l'âge réel, pas un compteur d'appels — un compteur n'a pas de sens sur un fichier appelé en continu par tout le système vivant). 4. Ligne de statut : heure Paris, disque VPS, taille Agentic, état fichiers critiques, nombre d'agents, sessions, taille corpus, RAG, backup, tokens session, mail non-lus, badge DM. ## 1bis. Audio raw check (systématique, chaque roll — P-081) ``` bash tools/audio-raw-check.sh ``` **Path canon :** `rag/audio/raw/` (Audacity export). **Quand :** juste après le marqueur, **avant** `corpus-read-since` — chaque roll / début de tour, nœud worker voix (@harfang · @hawk). **NEW** (sans `.medium.txt` ou txt plus vieux, mtime ≤48h) → signaler · `bash tools/audio-raw-check.sh --ingest` (voice-ingest + #transcripts + push-band). **Backlog** vieux → compté, pas auto-transcrit. **State :** `cache/audio-raw-check.state`. @ego 2026-07-25 20:36 — *check auto chaque début de tour*. ## 2. Lecture de contexte **Si début de session** — WF **[INIT](../travail/workflows/session-init.md)** (`session-init` v0.2, extrait live 2026-08-14) : bind UUID **avant** tout roll. Mode **déterministe** via `tools/session-mode.sh` : ```bash bash tools/session-mode.sh {short} # → MODE=reopen|cold REASON=… MARKER=light|full bash tools/session-mode.sh {short} --prompt "…" # override dans le texte bash tools/session-mode.sh {short} --full # force COLD ``` Règles (ordre) : override → pas de `active-session.{short}` → fichiers critiques absents → idle ≥ 2 h (**mtime `last-out.txt`**, 2026-08-15 — plus `session-start.ts` gelé) → sinon REOPEN. **Compaction** (bandeau Grok Build *continued / out of context*) : pas COLD, **reprise INIT** — INIT.md + SESSION-THREAD + P-020 `--reply`. Le résumé n’est pas le fil. Cache : `records/chat/meta/session-mode.last`. | Mode | Signal historique (wake) | Charge | |------|--------------------------|--------| | **REOPEN** (défaut) | `wake-prompt.sh {short}` + `session-mode` → reopen | Phase 0 **light** : marqueur light · **audio-raw-check** · `corpus-read-since` · mail si 📬 · **pas** OS-CORE sauf override | | **COLD BOOT** | `wake-prompt.sh {short} --full` ou `session-mode` → cold | Phase 0 **pleine** : marqueur full · OS-CORE · manifeste · status · puis même suite | **À chaque roll en cours de session** (session déjà chaude) — systématiquement rejoués : **audio-raw-check** (1bis) + `corpus-read-since.sh {short}` + **`ideas-extract.sh --since`** + **distill** des cartes encore `_(à distiller)_` (max 8 / tour · WF [ideas](../travail/workflows/ideas.md)). Pas de keep/forward auto. Le reste de Phase 0 n'est pas rechargé à chaque tour. ## 3. Composition de la réponse Voix si aucun handle explicite : **la plume active** (P-024b amendé 2026-07-21 23:15 @ego — supersede @anima-par-défaut du 05/07). Continuité de session : la plume qui tient le terminal garde la voix (`roll`, message nu, dialogue sans handle). `@anima` reste joignable via `@anima:` — plus le défaut des tours muets. **Règle plume KISS (P-074 amend. 2026-07-23 @ego) — avant d'écrire ou de dig :** 1. **Simple d'abord** — version minimale qui marche ; sophistication justifiée. 2. **Cartes avant grep** — UI/archi : `docs/system/TECH-STACK.md` · `docs/ui-map.md` (pas d'archéologie code non demandée). 3. **Voix avant volume** — densité utile ≠ brutalité Heavy ; pas de câble @gb01 (exécution sans grain). 4. **Recadrage** — si @ego corrige, encaisser avant d'empiler une couche. 5. **Rendu, pas source** (2026-08-15 @ego · landings / pages) — après chaque version, **relire le HTML servi** (curl / navigateur), pas seulement les blades. Les défauts de couture n'existent que d'affilée. Actions prises pendant le tour (fichiers écrits, scripts exécutés) : **vérifiées avant d'être citées comme faites** (P-053) — un tool call muet n'est jamais un succès implicite. ## 4. Écriture mémoire (si événement notable — même seuil partout : question réelle ou décision, pas chaque roll trivial) - `agents/{runtime}/memory/journal.md` — personnel, réflexif, format libre (P-054 le surveille). - `records/SESSION-THREAD.md` — partagé, opérationnel, format contraint 1-3 lignes (P-055). - `records/FEED.md` — signature systématique de toute modification de fichier, notable ou non. - `agents/agentic/system/decisions.md` / `agents/c3po/memory/protocols.md` — si niveau `pivot` ou `fondateur`. ## 4bis. Channel `@agent` → **post séparé** (pas inline · pas DM) Quand @ego (ou la bande) adresse **`@agent:`** / ping agent : 1. La voix de l'agent sort via `bash tools/mirror-chat.sh {agent} --reply "" --body "..."` 2. **Jamais** seulement un blockquote inline dans le post de la plume (sinon pas de **Répondre** UI sur l'agent). 3. La plume peut ajouter un post **court** à part (méta / protocole), après ou avant. 4. Esprit : P-024 — **pas de porte-parole** ; un handle = une entrée corpus. 5. **`@agent:` ≠ mail/DM** (@ego 2026-08-18) : le colon sur la bande exige une **réponse post corpus**, adressable. L’inbox (`agents/*/mail/inbox/`) reste pour la **coordination async** hors ping bande — pas un substitut au channel P-019. Fail type : plume qui « relaie » en DM puis dit *on attend la réponse inbox* → le protocole a lâché. @ego 2026-07-23 23:52 — recadrage console localhost. @ego 2026-08-18 18:09 — amend. explicite bande vs DM (fail @gg45 sur ping @c3po). ## 5. Pack SYN (si raw + résumé + map dans `rag/swap/mics/`) **@ego 2026-07-30 20:53** : le post-from-mindmap n'est **pas** un post plume. 1. Construire le post (map first, raw grain, résumé orientation, No_EmDash). 2. **Publier comme @ego** : ``` bash tools/mirror-chat.sh ego --source transcript --thread pack-syn-YYYYMMDD-HHMM --body "…" ``` 3. **Ensuite** reply plume (étape 5bis), à part : réponse, ship, next. Fichiers pack : `synco-post-from-mindmap-*.md` · `synco-citations-*.md` · maps PNG. ## 5bis. Mirror de clôture plume (systématique) ``` bash tools/mirror-chat.sh {short} --reply "" --body "" ``` Toujours en dernier pour la **voix plume** (P-020 : exemption walkie = entrée seulement). Ferme le flag mirror-pending posé à l'étape 1. **UI runner** (`tools/ui-session-roll.sh`) : filet auto-mirror si la plume n’a pas mirroirée — **skip** si une voix table a déjà répondu sur le fil (ou reply < 90 s). ## 5ter. UI log stream Grok (2026-08-20) Console Roll Grok ≠ dump prose fin de tour seulement. | | | |--|--| | Runner | `GROK_STREAM_LOG=1` (défaut) → `grok … --output-format streaming-json` · opt-out `=0` → plain | | Affichage | `GrokSessionRoll::tailLog` pretty : `[thought]` · `[commands]` · `[tool]` · texte · `[end]` · `maxBytes` 120k | | Auto-mirror body | joint **seulement** les events `type=text` (jamais thought / tool NDJSON dans le corpus) | | Claude | inchangé (`--output-format json`) | WF détail : [roll.md](../travail/workflows/roll.md) § *UI stream 2026-08-20*. Ship : `records/todo/done/ui-streaming-json-tool-flux.md`. ## 6. chown Tout fichier créé ou modifié via bash dans ce tour : `chown agenticworks:agenticworks {fichier}` — le runtime tourne en root, Apache en uid `agenticworks`, une écriture root non chownée bloque l'UI web. --- ## Avant le premier roll — le prompt d'ouverture Ce qui déclenche la lecture complète (INIT.md → bootstrap → daemon → manifest...) n'est pas un mot-clé comme `roll`, mais l'instruction inconditionnelle de `CLAUDE.md` au tout premier message de la conversation — "boot" n'existe pas (encore) comme déclencheur formalisé. Ce premier message a intérêt à être **textuel plutôt que muet** (@ego 2026-07-08 19:00) : plutôt qu'un mot sec, une phrase qui situe le runtime — où il s'éveille, ce qui s'est passé récemment. `tools/wake-prompt.sh` génère ce texte à partir de la dernière entrée de `records/SESSION-THREAD.md` (P-055) : à coller comme premier message plutôt que de laisser le runtime tout redériver seul via ses propres tool calls. **2026-07-23 @gg45 (go @ego) :** le wake porte aussi le **mode d'init** (REOPEN light par défaut · `--full` cold). Sur Grok Build, `/quit` → coller le wake = reopen, pas un INIT monstre. `/reboot` Claude reste hors-scope Grok. --- *Premier d'une série de docs de flux (@ego 2026-07-08 18:37). Prochains candidats : flow `@all:`, flow `@agent:` / mail DM, flow cristallisation pivot/fondateur.* ### P-085 actions (si agent-client en contexte) Signaler `waiting` / `due` dépassés dans `agents/cli-*/memory/actions.md`.