Skip to content

feat(setup): repare les gaps wizard UX W-1 a W-4#107

Merged
Destynova2 merged 6 commits intodevelopfrom
feat/wizard-ux-fixes
Apr 9, 2026
Merged

feat(setup): repare les gaps wizard UX W-1 a W-4#107
Destynova2 merged 6 commits intodevelopfrom
feat/wizard-ux-fixes

Conversation

@Destynova2
Copy link
Copy Markdown
Contributor

Resume

Corrige les 4 gaps UX critiques du wizard detectes avant le sprint.

Commits

  • W-1 e0a8fa6 feat(setup): chaine l'OAuth auto_flow dans le wizard
    Apres le wizard, un nouveau helper chain_auto_flow() (dans src/commands/setup.rs) appelle les fonctions publiques crate::auth::auto_flow::detect_credentials() + run_interactive_flow() pour enclencher immediatement les flows OAuth manquants. Plus besoin de relancer grob auth manuellement apres un cold install. Ne modifie PAS src/auth/auto_flow.rs (pur call-site).

  • W-2 2e8ffa4 feat(setup): rend le fallback provider opt-in
    Le preset perf ne force plus un provider fallback par defaut. Nouveau test snapshot w2_perf_preset_without_fallback. L'utilisateur doit explicitement opt-in via le wizard.

  • W-3 ff45945 feat(setup): permet de saisir un budget cap libre
    Le wizard accepte maintenant une valeur libre pour le budget cap (helper parse_currency + budget_patch), au lieu d'imposer un menu de choix predefinis.

  • W-4 2fd47d7 feat(cli): affiche un hint pour grob -- claude sans exec
    Nouveau guard detect_bare_trailing_cmd dans src/cli/args.rs : quand l'utilisateur tape grob -- claude au lieu de grob exec -- claude, un hint explicite est affiche (8 tests).

Tests locaux

  • cargo test --lib commands::setup:: : 4 ok (W-2 strip_fallback x2, W-3 parse_currency + budget_patch)
  • cargo test --lib cli::args:: : 8 ok (W-4 detect_bare_trailing x8)
  • cargo test --test lib unit::setup_wizard_test : 1 ok (W-1 test_w1_cold_install_chains_to_auto_flow)
  • cargo fmt + cargo clippy --all-features -D warnings : clean
  • prek pre-push (test/doc/audit/deny/doc-coverage) : tous verts

Fichiers touches

Fichier Lignes Role
src/commands/setup.rs +406 W-1/W-2/W-3 core + chain_auto_flow wrapper
src/cli/args.rs +171 W-4 guard + 8 tests
src/main.rs +20 await run_setup_wizard (W-1) + guard detect_bare_trailing (W-4)
tests/unit/setup_wizard_test.rs +64 (nouveau) Integration W-1
tests/unit/mod.rs +1 Declare module setup_wizard_test
src/commands/snapshots/...w2_perf_preset_without_fallback.snap +57 (nouveau) Snapshot W-2

Zone sensible

W-1 n'a pas touche src/auth/auto_flow.rs. Le chainage passe par un wrapper chain_auto_flow() dans src/commands/setup.rs qui importe les fonctions publiques existantes. git diff --stat src/auth/ est vide. Le quorum 3/3 sur la zone sensible src/auth/** ne s'applique donc pas a ce merge.

Post-merge

  • /cli-audit-wizard (seuil 8/10) sera execute apres merge.

commis-ci-fix added 6 commits April 10, 2026 00:22
Apres `grob setup`, l'etape OAuth Anthropic n'etait pas declenchee — un
`grob exec -- claude` ulterieur tombait en 502 "no token" parce que le
token store restait vide. La correction appelle `auth::auto_flow` en
chaine directement a la fin du wizard quand stdin est un TTY, pour que
le cold install (brew → setup → exec) marche sans etape manquante.

Le helper importe la fonction existante sans la modifier (zone sensible
auth 3/3). Non-interactif (CI, tests, pipes) : court-circuit silencieux.
Le wizard forcait un `[[providers]]` OpenRouter herite du preset meme
quand l'utilisateur n'en voulait pas, ce qui declenchait au demarrage
un warning fantome `$OPENROUTER_API_KEY not set — provider 'openrouter'
disabled`. Un nouveau prompt `Aucun / OpenRouter / Gemini / Custom`
est desormais toujours affiche, et choisir `Aucun` retire le provider
fallback et les `[[models.mappings]]` qui le referencaient avant
l'ecriture du fichier.

Un snapshot insta (`w2_perf_preset_without_fallback`) ancre le TOML
resultant pour bloquer toute future regression du stripping, plus un
test unitaire no-op verifie qu'un config sans fallback reste intact.
`--yes` bascule sur `None` pour que le cold install ne ramene plus de
warning tant que l'utilisateur n'a pas saisi la cle.
Les paliers fixes `$50/$200/custom` forcaient l'utilisateur a un choix
pre-decide. Le wizard demande desormais `[1] Illimite / [2] Saisir un
montant` et, sur `[2]`, collecte un montant plus une devise (defaut
USD, avec USD/EUR/GBP reconnus). Le recap affiche la devise choisie
mais le fichier persiste toujours sur `[budget] monthly_limit_usd`
parce que grob ne fait pas de forex.

Deux tests unitaires : `parse_currency` (cases / defaut / inconnu) et
un patch TOML qui garantit que le schema persiste bien
`monthly_limit_usd` + `warn_at_percent`, la cle lue par le serveur MCP.
Intercepte `grob -- <cmd>` avant clap et suggere `grob exec -- <cmd>`
au lieu d'une erreur generique. Retire le raccourci silencieux
trailing_cmd qui masquait l'intention de l'utilisateur.
Le helper qui chaine l'OAuth auto_flow apres le wizard gatait seulement
sur IsTerminal(stdin). Un user qui fait `grob setup --yes` depuis un TTY
(laptop dev, brew install interactif) tombait quand meme dans le flux
OAuth interactif, contraire a la semantique de --yes (skip tous les
prompts). Ajoute un early-return sur flags.yes avant le check TTY.

Review W-1.
Le tableau etait dans l'ordre historique d'ajout dans Commands, ce qui
rend l'audit manuel vs l'enum plus difficile. Tri alphabetique pour
faciliter la verification de sync future.

Review W-4.
@Destynova2 Destynova2 merged commit b8f73e4 into develop Apr 9, 2026
39 checks passed
@Destynova2 Destynova2 deleted the feat/wizard-ux-fixes branch April 9, 2026 22:53
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant