From fa2c42d5055f14462902257af195de2c24a0aa9a Mon Sep 17 00:00:00 2001 From: Bruno Charest Date: Sun, 23 Aug 2026 23:25:30 -0400 Subject: [PATCH] =?UTF-8?q?docs:=20roadmap=203.1=20=E2=80=94=20bilan=20du?= =?UTF-8?q?=202026-08-23=20(reste=20a=20faire,=20bug=20doctor/runner=20san?= =?UTF-8?q?s=20timeout,=2011=20idees=20neuves)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ROADMAP.md | 118 ++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 112 insertions(+), 6 deletions(-) diff --git a/ROADMAP.md b/ROADMAP.md index 82c7459..fa1f136 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -1,7 +1,13 @@ # 🗺️ ROADMAP agent-manager — vers le « super outil » -> **Version du document : 3.0** · Statut : phases 0 à 3 livrées -> (v0.3.0 → v1.0.1), maintenance v1.0.2 → v1.1.0 +> **Version du document : 3.1** · Statut : phases 0 à 3 livrées +> (v0.3.0 → v1.0.1), maintenance v1.0.2 → v1.1.5 +> +> 🧭 **Bilan du 2026-08-23** : tout le périmètre versionné (J0 → J3, v0.7.0, +> épique v1.1.0) est livré — **0 issue ouverte** sur Gitea. Il reste : +> **1 bug prioritaire** (hang de `cargo test` / `am doctor`, §15.4), +> 3 fonctionnalités P1 jamais découpées en issues (§15.2), des activités de +> release (§15.3) et des idées neuves proposées (§16). > Base : analyse du code **v0.2.7** (Rust, 45+ tests, zéro dépendance runtime) > > ✅ **Phase 0 livrée en v0.3.0 (2026-08-17)** : issues #2 à #16 clôturées, @@ -129,6 +135,8 @@ 9. [Indicateurs de succès (KPI)](#9--indicateurs-de-succès-kpi) 10. [Risques & garde-fous](#10--risques--garde-fous) 11. [Par où commencer](#11--par-où-commencer) +12. [Bilan & reste à faire (2026-08-23)](#15--bilan--reste-à-faire-analyse-du-2026-08-23) +13. [Idées neuves (post-v1.1.5)](#16--idées-neuves-post-v115) --- @@ -358,8 +366,8 @@ consultable, reprenable, archivable. | Fonctionnalité | Effort | Phase | |---|---|---| | Recherche fuzzy dans am search (typos, scoring, « vouliez-vous dire ») | M | P1 | -| am compare a b — tableau côte à côte (méthode, deps, catégorie, activité) | S | P1 | -| am news — dernières releases des agents installés (API GitHub/Gitea, cache) | M | P1 | +| ⬜ am compare a b — tableau côte à côte (méthode, deps, catégorie, activité) — **non livré, sans issue** | S | P1 | +| ⬜ am news — dernières releases des agents installés (API GitHub/Gitea, cache) — **non livré, sans issue** | M | P1 | | Catalogue distant : am catalog update / am catalog add | M | P2 | | am suggest "un agent pour du Python" — tags + usage réel | M | P2 | | am lab — benchmark : même tâche sur N agents, comparaison durée/résultat/coût | L | P2 | @@ -398,7 +406,7 @@ consultable, reprenable, archivable. | Favoris : am favorite / am unfavorite + ⭐ dans am list | S | P1 | | Notes : am note claude-code "utiliser pour …" | S | P1 | | Tags personnels : am tag claude-code python | S | P1 | -| Raccourcis de commandes : settings.shortcuts (i → install, s → start) | S | P1 | +| ⬜ Raccourcis de commandes : settings.shortcuts (i → install, s → start) — **non livré, sans issue** | S | P1 | | Profils d'environnement : am profile dev / prod (env + args + agent par profil) | M | P1 | | Thèmes couleurs du REPL | S | P2 | @@ -532,6 +540,102 @@ aichat -f . "résume les données de ces fichiers JSON" --- +## 15. 🧭 Bilan & reste à faire (analyse du 2026-08-23) + +> Analyse complète du dépôt le 2026-08-23 : code (v1.1.5, commit e637c06), +> historique git, tracker Gitea, artefacts de release. + +### 15.1 ✅ Ce qui est livré + +- **Tout le périmètre versionné** : J0/v0.3.0, J1/v0.4.1, J2/v0.6.0, + v0.7.0 (providers), J3/v1.0.0, épique v1.1.0 (onboarding/copilot) et les + maintenances v1.0.1 → v1.1.5. +- **0 issue ouverte** sur le tracker Gitea (issues #1 → #97 clôturées). +- `main` synchronisé avec `origin/main` ; Cargo.toml/Cargo.lock en + **v1.1.5** ; suite de tests : **455 tests passés, 0 échec** le + 2026-08-23 (23 suites, hors `doctor_test` qui hang — §15.4). +- Vérifié présent dans le code : favoris/notes/tags (#39), dashboard, + monitor, web, serve, lab, sync, migrate, models, sandbox, registry, + ask, ai, setup + rôles copilot, self-update, services, schedule, i18n, + packaging, complétions, man pages. + +### 15.2 ⬜ Fonctionnalités du roadmap NON livrées (jamais découpées en issues) + +| Fonctionnalité | Axe | Effort | Constat dans le code | +|---|---|---|---| +| `am compare a b` — tableau côte à côte | Axe 7 | S | aucune commande `Compare` dans `src/cli.rs` | +| `am news` — dernières releases des agents installés | Axe 7 | M | aucun module, 0 occurrence dans `src/` | +| `settings.shortcuts` — raccourcis REPL (i → install…) | Axe 10 | S | 0 occurrence de `shortcuts` dans `src/` | +| Extensions sœurs Axe 13 (`am summarize`, `am explain`, `am fix`, …) | Axe 13 | M | absentes — voir §13.5 et l'idée N10 (§16) | + +➡️ Suggestion : créer 3 issues Gitea (compare, news, shortcuts) en P1 — +petits efforts à forte valeur, seuls restes des jalons « cockpit ». + +### 15.3 📦 Activités de release / opérations + +| Activité | Détail | +|---|---| +| **Publier la release v1.1.5** | Le commit `e637c06` (fix aichat ≥ 0.30) est sur `main` **sans tag ni release Gitea** → installateurs et `am self-update` servent encore la v1.1.4. Taguer `v1.1.5` pour déclencher `.gitea/workflows/release.yml`. | +| **Compléter les assets v1.1.4** | La release v1.1.4 publiée ne contient **que** `am-windows-x86_64.zip` : binaires Linux (x86_64/aarch64) et macOS absents → les installateurs Linux/macOS retombent sur `cargo install --git`. | +| **Artéfacts `dist/` obsolètes** | Les archives de `dist/` datent de l'ère v0.6.0 (2026-08-19) ; laisser la CI régénérer celles de v1.1.5. | +| **Stash obsolète** | `stash@{0}` « WIP issue #39 : favoris, notes, tags » (2026-08-17 09:12) — la fonctionnalité a été livrée autrement dans v0.4.1 (champs présents dans `src/state.rs`) ; à purger (`git stash drop`) après confirmation. | + +### 15.4 🐛 Bug découvert pendant l'analyse (2026-08-23) — à corriger en priorité + +**`cargo test` se suspend** sur `doctor_test::report_contains_core_checks` +sur cette machine (reproduit 3 fois, dont une exécution > 20 min), et le +même hang peut frapper l'utilisateur final via `am doctor`. + +- **Cause racine** : `SystemRunner::run` (`src/runner.rs`, branche + `capture`) attend `Command::output()` **sans timeout** et sans + protection contre l'héritage des pipes. `am doctor` sonde les outils du + PATH (`ollama ls`, `llama-server --version`, `git --version`…) ; quand + le processus fils engendre un petit-enfant qui conserve les handles + stdout/stderr (cas réel observé : `conhost.exe` alloué pour + `ollama.exe ls` lancé sans console), `output()` attend l'EOF des pipes + **indéfiniment**. +- **Reproduction** : `target\debug\deps\doctor_test-*.exe --nocapture + report_contains_core_checks` → hang > 40 s avec enfants `ollama.exe ls` + + `conhost.exe` sous le processus de test ; l'ancien binaire de test du + 2026-08-21 passait en 2,2 s (déclenchement du conhost non déterministe). +- **Périmètre touché** : tout ce qui passe par `SystemRunner::run` avec + capture — `am doctor` donc, et les sondes d'installation. (`am models`, + `am lab`, les plugins et la sonde externe utilisent déjà `wait_timeout` + et sont immunisés.) +- **Correctif proposé** : aligner `SystemRunner::run` sur le pattern déjà + éprouvé dans `src/models.rs` / `src/lab.rs` / `src/plugins.rs` : spawn + + `wait_timeout` (30 s par défaut, `settings.probe_timeout_secs`) + + drain des pipes avant l'attente + kill de l'arbre à l'expiration — les + commentaires de `lab.rs` et `plugins.rs` documentent exactement ce + deadlock. À compléter par un test de régression (faux binaire qui + engendre un enfant garde-fou). +- **Contournement immédiat** : lancer les suites une à une, sans + `--test doctor_test`. + +--- + +## 16. 💡 Idées neuves (post-v1.1.5) + +> Ajoutées lors de l'analyse du 2026-08-23. Toutes ⬜ (proposées), non +> planifiées. Respectent l'ADN du projet : zéro dépendance runtime, local +> par défaut, contrats `--json` stables. + +| # | Idée | Description | Axe | Effort | Phase | +|---|---|---|---|---|---| +| N1 | ⬜ **`am mcp` — serveur MCP** | Exposer am comme serveur *Model Context Protocol* : les agents (Claude Code, Codex, aichat…) découvrent et pilotent le parc via des outils MCP (`am__list`, `am__stats`, `am__sessions`, `am__start`…). am devient le hub de coopération entre agents. | nouveau | L | P3 | +| N2 | ⬜ **Budgets & alertes de coûts** | Budget par agent/projet avec alertes à seuils (80 % / 100 %) et blocage doux, branché sur le suivi des coûts (#49). | Axe 1 | M | P2 | +| N3 | ⬜ **Webhooks de notification** | Alertes `am watch` / `schedule` / `doctor --watch` vers un webhook (Discord, Slack, n8n, Gotify) en plus du `--notify` local. | Axe 6 | S | P2 | +| N4 | ⬜ **`am test ` — smoke test** | Vérification normalisée post-install/post-update : le binaire répond, ping provider, tâche minimale — généralise le ping de `am setup` à tout le catalogue. | Axe 7 | M | P2 | +| N5 | ⬜ **`am diff` — comparaison de configs** | Diff de config/état entre deux machines ou deux points de sync ; complète `am sync` (#66) et `am migrate` (#68) pour le multi-machine. | Axe 9 | S | P2 | +| N6 | ⬜ **Transcripts de session** | `am sessions transcript ` : export Markdown lisible et partageable d'une session (commandes + sorties), complément de `sessions export` (#53). | Axe 4 | S | P2 | +| N7 | ⬜ **`am doctor --report`** | Rapport de diagnostic complet anonymisé (versions, doctor, événements récents) prêt à joindre à un bug report. | Axe 12 | S | P2 | +| N8 | ⬜ **Catalogue air-gapped** | `am catalog snapshot` : instantané hors-ligne complet du catalogue distant (définitions + binaires) pour machines sans internet. | Axe 7 | M | P3 | +| N9 | ⬜ **Export OpenTelemetry** | Export opt-in du journal `events.jsonl` vers OTLP/Grafana pour les équipes qui ont déjà une pile d'observabilité. | Axe 1 | M | P3 | +| N10 | ⬜ **Épique « Boîte à outils IA »** | Formaliser les commandes sœurs §13.5 sur les rôles copilot aichat (v1.1.0) : `am commit`, `am review`, `am explain`, `am fix`, `am summarize`, `am doc`, `am translate`, `am ask-code`, `am search-web`, `am note`. Une commande = un rôle + un raccourci de prompt, sécurité `--exec` héritée de `am ai`. | Axe 13 | L | P2 → P3 | +| N11 | ⬜ **Suite de tests 100 % hermétique** | `update_policy_test` (> 60 s/test) appelle réellement l'API GitHub via `installers::latest_version` ; prévoir un mode hors-ligne des sondes de version (flag test/offline ou mock), pour une suite rapide et déterministe partout. | Axe 12 | S | P1 | + +--- + ## 8. 🚀 Jalons versionnés | Jalon | Version | Contenu principal | Durée | Critère de sortie | @@ -710,4 +814,6 @@ Phases livrées : 0 (v0.3.0), 1 (v0.4.1), 2 (v0.6.0), v0.7.0 (providers, 2026-08-19), 3 (v1.0.0, #76–#80, 2026-08-20) ; maintenance v1.0.1/v1.0.2 (self-update décompression, REPL), v1.0.3 (détection externe), v1.0.4 (catalogue shell AI, #94 #95), v1.0.5 (commande am ai, #93 #96 #97), -v1.0.6 (installateur Windows accepte l'entrée am-windows-x86_64.exe).* +v1.0.6 (installateur Windows accepte l'entrée am-windows-x86_64.exe), +> v1.1.0 (onboarding/copilot) → v1.1.5 (aichat ≥ 0.30). Bilan & idées +> neuves ajoutés le 2026-08-23 (§15, §16).*