docs(OPS129): registra plano dos modelos do worktree

This commit is contained in:
Francisco Solla 2026-09-25 00:35:22 -03:00
parent 796e68a4e7
commit c472c5c0b3

View file

@ -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.**