diff --git a/docs/plans/worktree-modelos-space-bunny.md b/docs/plans/worktree-modelos-space-bunny.md new file mode 100644 index 00000000..3af60131 --- /dev/null +++ b/docs/plans/worktree-modelos-space-bunny.md @@ -0,0 +1,97 @@ +# 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.**