From 5acc66bc5c0b02ba7aa55cf3f947e4d68c0c703d Mon Sep 17 00:00:00 2001 From: Benoit Vinceneux <72924097+benoitvx@users.noreply.github.com> Date: Tue, 7 Jul 2026 09:33:42 +0200 Subject: [PATCH] =?UTF-8?q?feat(ux):=20polish=20sortie=20setup=20=E2=80=94?= =?UTF-8?q?=20ASCII=20art=20Phase=20B,=20cle=20Context7,=20print=5Fnext=5F?= =?UTF-8?q?steps=20allege,=20ordre=20final?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 4 retouches UX issues de dogfood (AC-R027..R030) : - ASCII art Albert Code en tete de Phase B - Demande de cle Context7 quand le MCP est choisi sans cle preexistante - print_next_steps alleger : seulement 'albert-code run' + NB skills - Statut GitHub deplace AVANT le ✓ final Ticket T6.12-p, test S37. --- BACKLOG.md | 11 +++++++++++ FEEDBACK.md | 5 +++++ TESTS.md | 11 +++++++++++ lib/phases.sh | 34 ++++++++++++++++++---------------- 4 files changed, 45 insertions(+), 16 deletions(-) diff --git a/BACKLOG.md b/BACKLOG.md index 6ae3df8..917d7cb 100644 --- a/BACKLOG.md +++ b/BACKLOG.md @@ -347,6 +347,17 @@ Option : ajouter un paramètre `install_shim` pour mode "exec" vs "source", ou d **Tâches :** dans `install_shim` (`lib/ui.sh`), avant de skip un shim existant, comparer les 3 premières lignes du fichier existant avec le `shim_content` attendu. Si différent : réécrire. Si identique : skip. **DoD :** après un changement de contenu du shim, `./install.sh` réécrit le fichier (au lieu de « déjà présent »). → `TESTS.md` S36. +### T6.12-p 🟠 Polish UX sortie setup `<- AC-R027 AC-R028 AC-R029 AC-R030` +**But :** 4 retouches UX sur la sortie de `albert-code setup`, issues de dogfood. + +**Tâches :** +1. Afficher l'ASCII art Albert Code au début de Phase B (après le garde-fou PWD = SELF_DIR, avant `title "Phase B …"`). +2. Quand Context7 MCP est choisi, demander la clé API si absente (ni env ni ~/.zshenv) via `prompt_secret`, la persister via `persist_zshenv`. Si vide, avertir que le MCP sera en erreur. +3. Réécrire `print_next_steps()` : seulement `title "Prochaines étapes"` + `info "Lancer Albert Code : albert-code run"` + une ligne NB sans flèche sur les skills. Retirer le bloc VM de base, opencode, « Parle en français », et le statut GitHub. +4. Déplacer le statut GitHub (push/PR configuré ou non) JUSTE AVANT « ✓ Projet configuré. » dans `phase_b()`. + +**DoD :** les 4 retouches visibles en dry-run. L'ASCII art apparaît en Phase B. La clé Context7 est demandée quand on choisit le MCP sans clé préexistante. L'ordre des lignes en fin de Phase B est : statut GitHub → ✓ Projet configuré → Prochaines étapes → albert-code run → NB skills. → `TESTS.md` S37. + ### T6.13 🟡 Bruit de debug « name= » dans sync_skills `<- AC-R026` ✅ implémenté **But :** au boot VM (`runtime/agent-vm.runtime.sh`, sync_skills), des lignes « name= » parasites apparaissent dans la sortie (ex. name=datagouv-apis). Bruit dû aux variables `local name` + `name=$(basename …)` en bash 3.2. **Tâches :** remplacer les déclarations `local name` puis `name="$(basename …)"` par `local name="$(basename …)"` (fusion local+assignation), et idem pour `local ename`, `local resolved`. Supprime la source probable du bruit. diff --git a/FEEDBACK.md b/FEEDBACK.md index d9824dc..a22da7b 100644 --- a/FEEDBACK.md +++ b/FEEDBACK.md @@ -44,6 +44,11 @@ --- +| AC-R027 | 🎛️ | 🟡 | Phase B (setup) commence sans aucun repère visuel — pas d'ASCII art, pas de titre d'étape — alors que Phase A en a. L'utilisateur ne sait pas que la config du projet a commencé. | Dogfood setup 2026-07 | ✅ traité | `BACKLOG.md` T6.12-p | +| AC-R028 | 🎛️ | 🟡 | Context7 MCP coché au setup mais la clé n'est jamais demandée : le MCP apparaît « cassé » au premier lancement (401). L'utilisateur doit l'activer manuellement après coup. | Dogfood setup 2026-07 | ✅ traité | `BACKLOG.md` T6.12-p | +| AC-R029 | 🎛️ | 🟡 | `print_next_steps` est long et encombré : instructions VM de base (déjà faite en Phase A), ligne « Parle en français » (banale), et push GitHub (déjà fait plus haut). Trop de texte tuile finale. | Dogfood setup 2026-07 | ✅ traité | `BACKLOG.md` T6.12-p | +| AC-R030 | 🎛️ | 🟡 | Le statut GitHub (push/PR OK ou non) apparaît après « ✓ Projet configuré. » dans `print_next_steps` — ordre illogique : un statut AVANT le ✅ final. | Dogfood setup 2026-07 | ✅ traité | `BACKLOG.md` T6.12-p | + ## Notes - **AC-R004 (prompt caching)** : à instruire avant tout scaling. Vérifier si Albert API expose du caching sur `chat/completions` ; sinon, arbitrer l'infra d'inférence. vLLM implémente le caching nativement. diff --git a/TESTS.md b/TESTS.md index 2b6e864..6c76839 100644 --- a/TESTS.md +++ b/TESTS.md @@ -275,6 +275,17 @@ et le bloc marqueur a disparu. 5. Vérifier l'email final = `{id}+{login}@users.noreply.github.com`. **Attendu :** pas de fallback « Introuvable automatiquement » avec un PAT valide. L'email dérivé est correct. +## S37 — Polish UX sortie setup (T6.12-p) ☐ +**Préconditions :** dossier projet vierge (hors dépôt albert-code), `HOME` sandboxé. +**Étapes :** +1. Lancer `bash bin/albert-code setup --dry-run` (depuis le dossier projet). +2. Observer la sortie Phase B : ASCII art (« Coder avec l'IA souveraine » / `____`) visible APRÈS le message garde-fou et AVANT « Phase B — Configuration ». +3. Vérifier que `print_next_steps` contient exactement : « Prochaines étapes », « Lancer Albert Code : albert-code run », et une ligne « NB : Les skills sélectionnées se synchronisent automatiquement au démarrage » (sans flèche `→`). +4. Vérifier l'ordre final : (éventuel statut GitHub) → « ✓ Projet configuré. » → (echo) → « Prochaines étapes » → « Lancer Albert Code : albert-code run ». +5. Répéter le setup avec `CONTEXT7_API_KEY` ABSENTE de l'env et de `~/.zshenv`, répondre « oui » au MCP context7 → vérifier qu'un prompt `prompt_secret` est affiché (dry-run : « [dry-run] prompt: Colle ta clé API Context7 ») ; laisser vide → warning « Pas de clé Context7 — le MCP context7 s'affichera en erreur ». +6. Répéter le setup avec `CONTEXT7_API_KEY` déjà dans l'env → vérifier qu'aucun prompt Context7 n'apparaît (le MCP est activé normalement). +**Attendu :** (2) ASCII art présent au début de Phase B. (3) `print_next_steps` raccourci, plus de « Crée la VM de base », plus de « Ouvre la bulle isolée », plus de « Parle en français ». (4) statut GitHub AVANT le ✓ final, pas après. (5) clé demandée, warning si vide. (6) pas de prompt si clé déjà présente. + ## S36 — `install_shim` réécrit un shim obsolète + sortie sync_skills propre (T6.12, T6.13) ☐ **Préconditions :** dossier sandbox `/tmp/ac-test`, `install.sh` disponible. **Étapes (install_shim) :** diff --git a/lib/phases.sh b/lib/phases.sh index e4c4324..6b96be0 100644 --- a/lib/phases.sh +++ b/lib/phases.sh @@ -187,6 +187,8 @@ phase_b() { return 0 fi + banner + echo title "Phase B — Configuration de ce projet" echo @@ -205,6 +207,11 @@ phase_b() { compute_effective_vm_resources echo + if [ -n "${GH_TOKEN:-}" ] || file_contains "$ZSHENV" "GH_TOKEN"; then + ok "Push et PR GitHub configurés depuis la VM." + else + info "Push/PR GitHub non configuré — voir le § Push & PR depuis la VM du README." + fi ok "Projet configuré." echo print_next_steps @@ -575,6 +582,15 @@ scaffold_opencode_json() { [ "$first" = false ] && content=$content',' first=false content=$content'"context7":{"type":"remote","url":"https://mcp.context7.com/mcp","enabled":true,"headers":{"Authorization":"Bearer {env:CONTEXT7_API_KEY}"}}' + if [ -z "${CONTEXT7_API_KEY:-}" ] && ! file_contains "$ZSHENV" "CONTEXT7_API_KEY"; then + local _ctx7_key + _ctx7_key="$(prompt_secret "Colle ta clé API Context7 (https://context7.com/plans) — Entrée pour passer")" + if [ -n "$_ctx7_key" ]; then + persist_zshenv "CONTEXT7_API_KEY" "$_ctx7_key" + else + warn "Pas de clé Context7 — le MCP context7 s'affichera en erreur sans clé." + fi + fi fi if [ "$mcp_playwright" = "true" ]; then [ "$first" = false ] && content=$content',' @@ -727,20 +743,6 @@ scaffold_skills_selection() { # print_next_steps — affiche les prochaines étapes print_next_steps() { title "Prochaines étapes" - local step=1 - if ! base_vm_exists; then - info "%s. Crée la VM de base (une seule fois) : agent-vm setup --disk %s" "$step" "$AC_VM_DISK" - step=$((step + 1)) - fi - info "%s. Ouvre la bulle isolée : agent-vm --cpus %s --memory %s --disk %s opencode" \ - "$step" "$EFF_CPUS" "$EFF_MEM" "$AC_VM_DISK" - step=$((step + 1)) - info "%s. Parle en français à l'assistant." "$step" - echo - info "Les skills se synchronisent automatiquement au démarrage." - if [ -n "${GH_TOKEN:-}" ] || file_contains "$ZSHENV" "GH_TOKEN"; then - ok "Push et PR GitHub configurés depuis la VM." - else - info "Push/PR GitHub non configuré — voir le § Push & PR depuis la VM du README." - fi + info "Lancer Albert Code : albert-code run" + printf ' NB : Les skills sélectionnées se synchronisent automatiquement au démarrage\n' }