Files
IdeA/.ideai/memory/b8-in-app-trigger-run-in-background.md
Blomios ebd992e41a docs(memory): notes projet tâches de fond, tickets V1 et checkpoints ticket #1
Capitalise la mémoire projet accumulée pendant les chantiers B7/B8
(tâches de fond first-class), le système de tickets V1 et le ticket #1 :
design, cadrages d'archi, checkpoints d'avancement et verdicts QA/frontend.
Mise à jour de l'index MEMORY.md.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-04 00:21:43 +02:00

2.6 KiB

name, description, metadata
name description metadata
b8-in-app-trigger-run-in-background Arbitrage de l'écart de périmètre
type
reference

B8 — Déclencheur in-app (FIGÉ Architecture, 2026-07-03)

Suite de b8-command-runner-pty-framing et b8-arbitration-outcomes. Constat : le consommateur B8 (runner PTY → sink → inbox → wake) est livré (8cac147) mais SANS producteur — spawn_background_command (commands.rs:2586) n'est appelé par personne. #1 n'a donc aucun déclencheur réel.

Décision

  • Retenu : outil MCP agent idea_run_in_background (surface principale, fermante). Chemin humain UI (bouton panel F2) = secondaire optionnel, wake_policy=RecordOnly. Promotion auto d'une commande PTY longue : REJETÉE (pas d'owner/intention, heuristique fragile, change la sémantique de write_terminal).
  • Pourquoi (a) : toute la machinerie (WakeOwner, inbox, AgentWakePort) est agent-centrée ; seul un agent déclarant explicitement une tâche de fond exerce la boucle bout-en-bout.

Contrat idea_run_in_background

Params : label(req), command(req), args[], cwd?(déf=project root), deadline_ms?. owner = identité handshake du demandeur (non paramètre, non usurpable, rejet si absente) ; project = contexte du demandeur ; record_only NON exposé côté agent → WakeOwner forcé. Retour SYNCHRONE {taskId,state} ; le résultat arrive plus tard en InboxItem::BackgroundCompletion (fire-and-forget-avec-tracking, distinct d'idea_ask_agent synchrone).

Frontière — ZÉRO nouveau port/adapter

  • Domaine : variante OrchestratorCommand::RunInBackground (domain/orchestrator.rs).
  • Adapter MCP : décl outil + map_tool_call (mcp/tools.rs), comme idea_ask_agent.
  • Exécution : handler route vers use case EXISTANT application::SpawnBackgroundCommand (déjà en composition root state.rs), owner=requester, WakeOwner. Suivre le MÊME dispatch qu'AskAgent pour atteindre la couche app ; ne pas ré-router par commande Tauri front.

Lots

  • BE-1 : variante enum + outil + mapping + tests mapping.
  • BE-2 : handler RunInBackground → SpawnBackgroundCommand (rejet si demandeur absent).
  • FE-1 (secondaire) : formulaire création dans panel F2 → spawn_background_command record_only.
  • QA T1 : agent appelle idea_run_in_background(sh -c 'sleep 8; echo done'), finit son tour → owner ré-invoqué avec exit+résumé. T3 cancel/retry sur ce taskId (retry session-scoped, pas reboot — dette ticket B).

Branche

Tient sur feature/background-tasks-first-class (additif, réutilise la boucle figée). Rien à préparer côté Git.