teqo-backup/docs/plans/worktree-modelos-go-zen.md

6.6 KiB

Modelos padrão do worktree: --go → DeepSeek V4.1 Flash e --zen → Muse Spark 1.3 Free

Status: rascunho Atualizado em: 2026-09-15 Issue: #1048 Priority: P2 Impeccable: A — N/A sem UI Rascunho UI: N/A — sem UI Appetite: ~0,5 dia eng — 2 valores do mapa + textos + pin Responsável: —

Intenção

Com o lançamento do DeepSeek V4.1 Flash (2026-09-10), ele virou também o modelo mais vantajoso no OpenCode Go — hoje pnpm worktree … --go abre a sessão em opencode-go/hy3, e o humano quer a flag apontando para o V4.1 Flash. Na mesma passada, --zen deve abrir no "Muse Spark 1.3 Free" em vez do atual opencode-go/ox-alpha-free. São dois valores do mapa fixo de flags: nada de mecanismo, cardápio ou preset.

Persona e fluxo

  • Persona / contexto: mantenedor/agente abrindo worktrees de Issue no terminal, escolhendo o modelo com uma flag no momento da invocação.
  • Job principal: abrir a sessão já no modelo desejado com um único flag, sem editar config nem decorar ID.
  • Fluxo desejado: pnpm worktree next|plan|new|fix --go (ou --zen) → claim/provisionamento como hoje → diretiva launch … --model <novo ID> → sessão nasce no modelo certo; footer confirma modelo/provider.
  • Anti-goals de produto: não vira seletor de modelos nem flag nova; não muda o preset sem flag; não mexe nas outras flags; não persiste preferência.

Objetivo e aceite

  • pnpm worktree next|plan|new|fix --go abre a sessão em opencode-go/deepseek-v4.1-flash; --zen abre em opencode/muse-spark-1.3-contributor-free.
  • Superfícies que citam o mapa saem sincronizadas na mesma entrega (código, docblocks/help, shell, command, skill, pin unitário) — sem contrato divergente.
  • Sem flag, o preset deepseek/deepseek-flash permanece byte a byte; cheap/pro/alibaba/glm/free e o fail-high at-most-one intactos.
  • Guardrail: nenhuma menção a --variant volta à diretiva; config global da máquina fora do repo.

Dados (intenção)

  • Vou apresentar dados? Não — tooling de dev, sem métrica de produto.
  • Decisões desbloqueadas: dev/agente confia que --go/--zen apontam para os modelos correntes, sem consultar o catálogo antes de cada invocação.
  • Forma: N/A — item config-only.

Dados da decisão (literais)

Flag Valor hoje Valor novo
--go opencode-go/hy3 opencode-go/deepseek-v4.1-flash
--zen opencode-go/ox-alpha-free opencode/muse-spark-1.3-contributor-free
  • Preset sem flag (intocado): deepseek/deepseek-flash (OPENCODE_PRESET_MODEL; override OPENCODE_WORKTREE_MODEL).
  • IDs verificados no catálogo local (opencode models, 2026-09-15): opencode-go tem deepseek-v4.1-flash ("DeepSeek V4.1 Flash"); o -free do Muse Spark só existe no provider opencode (OpenCode Zen) — opencode-go só tem muse-spark-1.3-contributor (sem free); logo --zen passa a apontar para o provider opencode, coerente com o nome da flag.
  • Chaves intocadas do mapa: cheap=cheapestinference/deepseek-v4-flash, pro=deepseek/deepseek-v4-pro, alibaba=alibaba-token-plan/deepseek-v4-flash, glm=opencode-go/glm-5.3-flash, free=openrouter/openrouter/free.

Superfícies a sincronizar (caminho, não linha)

  • scripts/lib/worktree.mjs — WORKTREE_MODEL_MAP (dono do mapa) + docblock do mapa (nota OPS112).
  • scripts/worktree.mjs — docblock (o help interpola o mapa e se atualiza sozinho).
  • .agents/shell/worktree.sh — docblock da função (lista de IDs e nota histórica do --go).
  • .opencode/commands/worktree.md — bloco do next.
  • .agents/skills/worktree-next-issue/SKILL.md — prosa do default-go e do launch (manter a história OPS93/95 e ajustar os valores correntes).
  • tests/unit/worktree.unit.spec.ts — pin toEqual do mapa.
  • .agents/skills/local-database/SKILL.md — cita o mapa sem IDs: confirmar que nada muda.
  • Nova entrada docs/changelog/2026-09-15-ops112.md (histórico existente não se edita).

Direção no codebase (hipótese)

  • Áreas prováveis: scripts/lib/worktree.mjs (fonte única), textos que o citam (acima) e o pin unitário.
  • Precedente a olhar: OPS95 (docs/plans/worktree-flags-modelo-correcao.md — values-only em 2 chaves + sync + pin), OPS100 (--glm/--free), OPS101 (preset canônico).
  • Risco de acoplamento: scripts/worktree.mjs está em HIGH_RISK_EXACT (scripts/lib/test-affected-core.mjs) → diff nele dispara unit/int full + e2e curado no PR; scripts/lib/worktree.mjs não é high-risk. Sem DB, migration, access, UI ou e2e novo.

Dependências

  • Nenhuma.

Fora de escopo

  • Preset sem flag (deepseek/deepseek-flash) e override OPENCODE_WORKTREE_MODEL.
  • Demais flags do mapa (cheap/pro/alibaba/glm/free) e o mecanismo fail-high at-most-one.
  • Reintroduzir --variant/variantes na diretiva (OPS95) ou mexer na config global da máquina.
  • Editar docs históricos/congelados (docs/plans/* anteriores, changelogs, HISTORY).

Rabbit holes de produto

  • Revisar o cardápio inteiro. Se alguém "só completar": re-checar preço/capacidade e reescrever todas as chaves. Corte neste item: só go e zen.
  • Sincronização parcial. Atualizar código e esquecer shell/command/skill/pin → contrato divergente (histórico OPS24/OPS95). Corte: todas as superfícies acima na mesma entrega.
  • Trocar o preset "de brinde". O V4.1 Flash já é o preset; qualquer mudança nele fica fora.

Questões em aberto (produto)

  • Nenhuma — a única dúvida (o --zen apontar para o provider opencode/Zen, não opencode-go) foi resolvida na exploração: o ID do catálogo com o nome "Muse Spark 1.3 Free" é opencode/muse-spark-1.3-contributor-free, coerente com o nome da flag.

Referências

  • docs/plans/worktree-flags-modelo-correcao.md (OPS95 — precedente de correção values-only + sync)
  • docs/plans/worktree-modelo-canonico-deepseek-flash.md (OPS101 — preset canônico; não mexer)
  • scripts/lib/worktree.mjs (mapa/preset — fonte única), tests/unit/worktree.unit.spec.ts (pin)
  • scripts/lib/test-affected-core.mjs (HIGH_RISK_EXACT de scripts/worktree.mjs)

Self-score (shaping ≥4)

  1. Um outcome verificável? Sim — flags resolvem para os IDs novos. 2. Appetite declarado e cabe? Sim — 2 valores + textos + pin. 3. Persona/job/aceite claros? Sim. 4. Direção é hipótese? Sim — caminhos sem contrato técnico. 5. Zero decisão dura de engenharia? Sim — valores literais são produto (IDs pedidos). Total: 5/5.