# Modelos das flags do worktree: `--zen` → Space Bunny Free e `--free` → Space Bunny Alpha Status: rascunho Atualizado em: 2026-09-25 Issue: #1342 Priority: P2 Impeccable: A — N/A sem UI Design UI: N/A — sem UI Appetite: ~0,5 dia, uma troca values-only no mapa fixo Responsável: — ## Intenção Os atalhos de modelo do provisionamento de worktree devem acompanhar os modelos escolhidos para a equipe: Space Bunny Free pelo OpenCode Zen e Space Bunny Alpha pelo OpenRouter. A mudança afeta duas entradas do mesmo mapa, sem alterar o fluxo de seleção nem o contrato dos worktrees. ## Persona e fluxo - **Persona / contexto:** pessoa desenvolvedora ou operadora que cria um worktree e escolhe o modelo da sessão ao digitar a flag. - **Job principal:** usar `--zen` ou `--free` e abrir a sessão no modelo correspondente sem decorar IDs ou consultar o catálogo antes. - **Fluxo desejado:** escolher `next`, `plan`, `new` ou `fix`, informar uma das flags e reconhecer no modelo da sessão o valor fixo associado. - **Anti-goals de produto:** não criar seletor, flag, alias, fallback ou mapa novo; não revisar as outras opções do catálogo; não persistir preferência. ## Objetivo e aceite - `pnpm worktree next|plan|new|fix --zen` abre a sessão em Space Bunny Free pelo OpenCode Zen. - `pnpm worktree next|plan|new|fix --free` abre a sessão em Space Bunny Alpha pelo OpenRouter. - Código, ajuda, comandos, skills e pin unitário que exibem o mapa chegam à mesma associação, sem contrato divergente. - O preset sem flag, as demais flags, o fail-high para flags múltiplas e a variante `max` permanecem inalterados. - Planos e changelogs antigos continuam como registro histórico e não são reescritos. ## Dados (intenção) - **Vou apresentar dados?** Não. É uma troca de configuração, sem métrica ou visualização. - **Decisões desbloqueadas:** a pessoa confia que cada flag abre o modelo que o nome anuncia. - **Forma:** N/A. O formato técnico fica para o plano de implementação. ## Dados da decisão (literais) | Flag | Valor atual | Valor novo | | -------- | ------------------------------------------ | -------------------------------------- | | `--zen` | `opencode/muse-spark-1.3-contributor-free` | `opencode/space-bunny-free` | | `--free` | `openrouter/openrouter/free` | `openrouter/stealth/space-bunny-alpha` | - `--zen` deve mostrar Space Bunny Free do provider OpenCode Zen (`opencode`). - `--free` deve mostrar Space Bunny Alpha do provider OpenRouter (`openrouter`). - Os dois modelos aceitam a variante `max`; `MODEL_VARIANT` continua sendo `max`. ## Direção no codebase (hipótese) - **Áreas prováveis:** `scripts/lib/worktree.mjs`, `scripts/worktree.mjs`, `.agents/shell/worktree.sh`, `.opencode/commands/worktree.md`, `.agents/skills/worktree-next-issue/SKILL.md` e `tests/unit/worktree.unit.spec.ts`. - **Precedente a olhar:** OPS112 trocou `--zen` no mesmo mapa; OPS100 introduziu `--free`; OPS127 aplica `max` à sessão e permanece ortogonal. - **Risco de acoplamento:** `WORKTREE_MODEL_MAP` é o owner do contrato. Alterações paralelas, aliases ou exceções por purpose criariam dois caminhos para a mesma escolha. ## Dependências - Nenhuma. ## Fora de escopo - Mudar o preset sem flag, o parser, a precedência ou o guardrail at-most-one. - Revisar `cheap`, `pro`, `go`, `alibaba` ou `glm`, adicionar aliases ou configurar fallback. - Alterar `MODEL_VARIANT`, o ciclo de sessões ou a forma como o modelo é transportado. - Tocar schema, migration, Payload, Consent, URL pública ou UI. - Editar planos e changelogs históricos. ## Rabbit holes de produto - **Criar um mapa paralelo.** Isso faria duas fontes dizerem qual modelo cada flag abre. **Corte:** manter o mapa existente como único owner. - **Adicionar aliases para os modelos antigos.** O pedido é uma troca direta, não uma política de compatibilidade. **Corte:** os valores antigos saem sem alias. - **Reescrever o cardápio inteiro.** Isso mistura a troca pedida com outra decisão sobre o catálogo. **Corte:** mudar somente `zen` e `free`. ## Questões em aberto (produto) - Nenhuma. Os providers, os nomes e os IDs foram definidos no pedido e conferidos no catálogo local. ## Referências - `scripts/lib/worktree.mjs:55-81` (owner do mapa e da resolução) - `scripts/worktree.mjs:22-30` e `scripts/worktree.mjs:992-996` (docblock e ajuda derivada) - `.agents/shell/worktree.sh:23-28` (documentação viva do launcher) - `.opencode/commands/worktree.md:7` (comando `/worktree`) - `.agents/skills/worktree-next-issue/SKILL.md:32-34` (contrato do lançamento) - `tests/unit/worktree.unit.spec.ts:469-523` (pin do mapa e das flags) - `docs/changelog/2026-09-15-ops112.md` (precedente de `--zen`) - `docs/changelog/2026-08-27-ops100.md` (precedente de `--free`) - `AGENTS.md` e `AGENTS-infra.md` (convenções do projeto) - Design UI: N/A, sem UI. ## Self-score (shaping) 1. **Fatia:** 5/5. As duas flags formam um único outcome verificável. 2. **Apetite:** 5/5. A troca cabe em ~0,5 dia sem ampliar o mecanismo. 3. **Persona e aceite:** 5/5. Quem usa, o que precisa alcançar e as garantias preservadas estão explícitos. 4. **Direção no codebase:** 5/5. Os caminhos são hipóteses para a implementação, não um desenho técnico fechado. 5. **Decisões de engenharia:** 5/5. O plano fixa apenas intenção, literais, guardrails e limites. **Total: 5/5.**