mirror of
https://github.com/fsolla/teqo.git
synced 2026-11-14 08:53:11 +00:00
Some checks are pending
Deploy / preflight (push) Waiting to run
Deploy / verify (push) Blocked by required conditions
Deploy / deploy staging (teqo-staging) (push) Blocked by required conditions
Deploy / requeue when main advanced (push) Blocked by required conditions
Deploy / deploy production (teqo-1313) (push) Blocked by required conditions
145 lines
14 KiB
Markdown
145 lines
14 KiB
Markdown
# Impl: Modelos das flags do worktree: `--zen` → Space Bunny Free e `--free` → Space Bunny Alpha
|
|
|
|
Status: em execução
|
|
Atualizado em: 2026-09-25
|
|
Issue: #1342
|
|
Intenção: docs/plans/worktree-modelos-space-bunny.md
|
|
Appetite restante: herdado (~0,5 dia)
|
|
|
|
## Leitura da intenção
|
|
|
|
- **Outcome:** `next`, `plan`, `new` e `fix` devem abrir Space Bunny Free pelo OpenCode Zen com `--zen` e Space Bunny Alpha pelo OpenRouter com `--free`; código, ajuda, comandos, skills e pin unitário que apresentam o mapa exibem a mesma associação.
|
|
- **O que NÃO negociar:** `zen: 'opencode/space-bunny-free'` e `free: 'openrouter/stealth/space-bunny-alpha'`; preset sem flag, demais flags, fail-high para múltiplas flags e `MODEL_VARIANT = 'max'` permanecem intactos. Não criar aliases, fallback, seletor, nova flag, mapa paralelo, persistência, migration, schema, UI ou alterações em registros históricos.
|
|
- **O que reavaliar:** nenhuma hipótese de produto precisa ser reaberta. O owner, o transporte compartilhado por todos os propósitos e a ajuda derivada foram confirmados. Só reavaliar a sincronização manual se uma futura evolução exigir gerar documentação do mapa ou surgir outra superfície viva exibindo seus valores.
|
|
|
|
## Abordagem recomendada
|
|
|
|
```mermaid
|
|
flowchart TD
|
|
A[Pin unitário: trocar os dois literais esperados] --> B[Teste direcionado: RED]
|
|
B --> C[Atualizar os dois valores em WORKTREE_MODEL_MAP]
|
|
C --> D[Atualizar o docblock stale do owner]
|
|
D --> E[Teste direcionado: GREEN]
|
|
E --> F[Sincronizar CLI, shell, comando e skill]
|
|
F --> G[Auditar as superfícies vivas do mapa]
|
|
G --> H[Smoke da ajuda sem provisionamento]
|
|
H --> I[pnpm gate:fast]
|
|
I --> J[Novo changelog OPS129]
|
|
J --> K[pnpm push e gates high-risk completos]
|
|
```
|
|
|
|
**Opções consideradas:** A | B | C
|
|
|
|
- **A — Alterar os dois valores no owner, usar o pin unitário existente no fluxo RED/GREEN e sincronizar manualmente as superfícies documentais.**
|
|
- **B — Extrair ou gerar toda a documentação do mapa a partir de `WORKTREE_MODEL_MAP`.**
|
|
- **C — Introduzir aliases, um segundo mapa ou uma camada de compatibilidade entre os IDs antigos e novos.**
|
|
|
|
**Recomendação:** A — porque o problema já tem um owner profundo e um pin exato; duas trocas de strings são o tracer bullet completo, preservam o contrato e cabem no appetite sem criar mecanismo novo. A ajuda já deriva do mapa, enquanto shell, comando e skill precisam apenas receber a associação vigente no mesmo lote.
|
|
|
|
**Rejeitadas:** B — porque transformaria uma troca values-only em refatoração de geração de documentação, ampliaria o risco de formato e manutenção e violaria o limite de um único mapa owner; C — porque preservaria os IDs antigos como semântica de runtime, criaria uma segunda política de escolha e contrariaria a troca direta aprovada. A decisão de manter sincronização manual só deve ser revista se surgirem novas superfícies vivas ou uma necessidade concreta de gerar documentação do mapa.
|
|
|
|
### Decisões de engenharia
|
|
|
|
- **Ownership:** editar `WORKTREE_MODEL_MAP`; não introduzir constantes por provider, aliases ou exceções por propósito.
|
|
- **TDD:** alterar primeiro apenas o `toEqual` do pin existente e observar a falha causada pelos valores antigos; só depois mudar o owner.
|
|
- **Resolução:** reutilizar `resolveWorktreeModel`, `WORKTREE_MODEL_FLAGS` e o allowlist existentes. `next`, `plan`, `new` e `fix` já compartilham a resolução e o transporte; `fix` não ganha caminho especial.
|
|
- **Documentação viva:** sincronizar somente onde os IDs são exibidos. A ajuda de `scripts/worktree.mjs:992-996` já deriva do owner e não recebe literal duplicado.
|
|
- **Transporte:** não alterar `parseModelRef` nem `MODEL_VARIANT`. O parser divide no primeiro slash, portanto `openrouter/stealth/space-bunny-alpha` chega como provider `openrouter` e id `stealth/space-bunny-alpha`.
|
|
- **Histórico:** acrescentar proveniência da OPS129 onde houver notas vivas, sem reescrever os registros de OPS100/OPS112 ou planos antigos.
|
|
|
|
### Componentes / mudanças
|
|
|
|
- **`WORKTREE_MODEL_MAP`** (`scripts/lib/worktree.mjs:43-63`): trocar somente os valores `zen` e `free`; atualizar o docblock stale que ainda identifica `--zen` como Muse Spark 1.3 Free. Chaves, ordem, `WORKTREE_MODEL_FLAGS`, `resolveWorktreeModel`, preset e demais modelos permanecem iguais.
|
|
- **Docblock e ajuda do CLI** (`scripts/worktree.mjs:22-30`, `scripts/worktree.mjs:973-1003`): atualizar os dois IDs no docblock e a proveniência viva. Não editar a interpolação da ajuda, que já mostra `WORKTREE_MODEL_MAP` automaticamente.
|
|
- **Launcher shell** (`.agents/shell/worktree.sh:23-28`): atualizar a associação de `--zen` e `--free`; preservar as linhas de uso que já listam apenas as flags. Acrescentar OPS129 à nota de proveniência sem apagar OPS100/OPS112.
|
|
- **Comando `/worktree`** (`.opencode/commands/worktree.md:7`): atualizar os dois IDs e manter `at-most-one` e os contratos de `cd`/launch intactos.
|
|
- **Skill do worktree** (`.agents/skills/worktree-next-issue/SKILL.md:32-34`): atualizar apenas os IDs e a proveniência na linha 34. A linha 32, que lista flags sem IDs, não precisa mudar.
|
|
- **Pin unitário** (`tests/unit/worktree.unit.spec.ts:469-523`): primeiro mudar os dois valores esperados; manter intactas as provas de flag set, preset, resolução individual, fail-high e diretivas de `next`/`plan`/`new`.
|
|
- **Registro da entrega** (`docs/changelog/2026-09-25-ops129.md`): criar uma entrada curta nova com os dois remaps e as invariantes preservadas; não alterar changelogs anteriores nem o agregado gerado.
|
|
- **Transporte fora da mudança** (`scripts/lib/agent-session.mjs`, `tests/unit/agentSession.unit.spec.ts`): não editar. Os exemplos genéricos de ref com slash e a cobertura de `parseModelRef` não apresentam o mapa; `MODEL_VARIANT` continua `max`.
|
|
- **Migration:** sem migration; não há schema ou Payload.
|
|
- **Access / Consent:** N/A; não há collection, write path, role, helper ou chave LGPD.
|
|
- **UI:** Impeccable A — N/A, sem UI; nenhum designer, shell visual, shape, craft ou polish.
|
|
- **Codebase map:** sem mudança; nenhum módulo muda de camada ou de owner.
|
|
|
|
### Dados → forma
|
|
|
|
- N/A como visualização: não há métrica, série ou comparação para o usuário.
|
|
- A forma técnica escolhida é o dicionário fixo `flag → model reference` já existente. Os valores novos são configuração executável, não conteúdo duplicado de catálogo; somente as superfícies vivas que exibem o mapa recebem a nova associação textual.
|
|
|
|
## Fases verificáveis
|
|
|
|
1. **TDD RED — 20 min**
|
|
- Em `tests/unit/worktree.unit.spec.ts`, alterar primeiro apenas `WORKTREE_MODEL_MAP.zen` e `WORKTREE_MODEL_MAP.free` no `toEqual` para os literais novos.
|
|
- Executar `pnpm test:unit tests/unit/worktree.unit.spec.ts`.
|
|
- Confirmar RED por divergência entre os literais esperados e os antigos no owner. Não alterar owner nem documentação antes de registrar essa falha.
|
|
|
|
2. **Owner e GREEN — 30 min**
|
|
- Trocar em `scripts/lib/worktree.mjs` somente os dois valores do mapa.
|
|
- Atualizar o comentário stale imediatamente acima do mapa para Space Bunny Free e Space Bunny Alpha, preservando a proveniência histórica relevante.
|
|
- Não modificar `WORKTREE_MODEL_FLAGS`, `resolveWorktreeModel`, as outras cinco entradas, o preset ou `MODEL_VARIANT`.
|
|
- Reexecutar `pnpm test:unit tests/unit/worktree.unit.spec.ts` e confirmar GREEN, incluindo as invariantes existentes de preset, fail-high e transporte.
|
|
|
|
3. **Sincronização das superfícies vivas — 45 min**
|
|
- Atualizar os IDs no docblock de `scripts/worktree.mjs`, shell, comando e skill.
|
|
- Manter a ajuda de runtime derivada do mapa; confirmar por inspeção que ela não contém literal próprio.
|
|
- Fazer busca exata dos IDs antigos apenas nos seis arquivos vivos que apresentam o mapa, confirmando que não sobrou associação antiga.
|
|
- Permitir IDs antigos apenas onde são semanticamente corretos: registro histórico, intenção atual, exemplos genéricos de parser e este plano. Não editar `agent-session.mjs`, seu teste, `codebase-map`, `local-database` ou documentos históricos.
|
|
|
|
4. **Smoke e gates — 1 h 15 min**
|
|
- Reexecutar `pnpm test:unit tests/unit/worktree.unit.spec.ts`.
|
|
- Executar `node scripts/worktree.mjs` sem subcomando e validar a saída de uso, conferindo `--zen=opencode/space-bunny-free` e `--free=openrouter/stealth/space-bunny-alpha` sem provisionar worktree ou banco.
|
|
- Executar `pnpm gate:fast` para lint, typecheck e unit completo.
|
|
- Não criar teste e2e: a mudança não introduz fluxo visual nem integração de aplicação. Os arquivos `scripts/worktree.mjs` e `scripts/lib/worktree.mjs` são high-risk; o push deve respeitar a expansão automática para unit/int full e e2e curado, sem editar manifest nem tentar seleção vazia.
|
|
|
|
5. **Changelog e push — 1 h**
|
|
- Criar somente `docs/changelog/2026-09-25-ops129.md`; não rodar `pnpm changelog:build` nem commitar o agregado.
|
|
- Rodar `pnpm changelog:check` e revisar o diff para confirmar que contém apenas o plano, o pin, o owner, as superfícies vivas, a nova entrada e os ajustes documentais necessários.
|
|
- Entregar com `pnpm push -u origin HEAD`; registrar o resultado dos gates high-risk completos.
|
|
- Abrir PR Ready para `main` com `Closes #1342` e deixar o auto-merge nativo aguardar `CI (PR) / checks`.
|
|
|
|
## Rabbit holes / Não escopo (engenharia)
|
|
|
|
- Não criar `WORKTREE_MODEL_MAP` paralelo, mapa por provider, aliases, fallback, seletor, variável de ambiente nova ou persistência da escolha.
|
|
- Não renomear `--zen`/`--free`, adicionar flag, alterar precedência, allowlist ou comportamento para múltiplas flags.
|
|
- Não alterar `cheap`, `pro`, `go`, `alibaba` ou `glm`, nem revisar o restante do catálogo.
|
|
- Não alterar `MODEL_VARIANT`, `parseModelRef`, `buildCreateSessionBody`, ciclo de sessão ou o transporte de headless.
|
|
- Não criar caminho especial para `fix`; allowlist e `cmdNamespaceBranch` já o levam ao mesmo `launchModel`.
|
|
- Não substituir exemplos genéricos de slash em `agent-session.mjs`; eles não exibem o mapa e sua troca seria ruído documental.
|
|
- Não reescrever `docs/plans/worktree-modelos-go-zen.md`, `docs/plans/worktree-launch-honra-flags.md`, `docs/changelog/2026-09-15-ops112.md`, `docs/changelog/2026-08-27-ops100.md` ou a intenção desta Issue.
|
|
- Não adicionar migration, schema, access, Consent, UI, componente, utility, módulo ou abstração.
|
|
- Não atualizar `codebase-map`, manifests de risco ou skills que apenas enumeram flags sem IDs.
|
|
- Não provisionar worktrees reais para o smoke; isso criaria branch, bancos e efeitos externos sem benefício para uma troca de constantes.
|
|
- Não adicionar e2e específico; unit puro, ajuda e gates existentes cobrem a mudança com menor acoplamento.
|
|
|
|
## Riscos e mitigação
|
|
|
|
- **Documentação viva divergir:** limitar a edição às quatro superfícies listadas, atualizar a ajuda por derivação e fazer busca exata nos arquivos-alvo após o lote.
|
|
- **Busca ampla sinalizar falsos positivos:** IDs antigos continuarão legitimamente em histórico, intenção e exemplos genéricos de parser; avaliar o contexto, não exigir zero ocorrências no repositório inteiro.
|
|
- **Ref com slash adicional em `--free`:** `parseModelRef` divide no primeiro slash e preserva `stealth/space-bunny-alpha` como id; o pin e a cobertura genérica existente verificam a associação e a capacidade do parser.
|
|
- **Regressão em `max` ou demais flags:** não tocar no transporte e preservar o `toEqual` completo das sete entradas e as asserções existentes de preset/fail-high.
|
|
- **`fix` ficar sem prova direta no pin de diretiva:** a allowlist já inclui `fix`, e `plan`/`new`/`fix` usam o mesmo `cmdNamespaceBranch`, `resolveLaunchModel` e `printLaunchDirective`; não criar branch de código apenas para duplicar essa prova.
|
|
- **Classificação high-risk ampliar tempo ou suites:** aceitar o cascade oficial, sem bypass, seleção vazia ou alteração do manifest; o push deve produzir full unit/int e e2e curado.
|
|
- **Mudança parecer maior que values-only:** limitar o diff aos literais e à sincronização documental; qualquer novo mecanismo exige revisão da decisão e não cabe nesta entrega.
|
|
|
|
## Aceite de engenharia
|
|
|
|
- [ ] `WORKTREE_MODEL_MAP.zen === 'opencode/space-bunny-free'`.
|
|
- [ ] `WORKTREE_MODEL_MAP.free === 'openrouter/stealth/space-bunny-alpha'`.
|
|
- [ ] `next`, `plan`, `new` e `fix` aceitam `--zen` e `--free` pelo mesmo `resolveWorktreeModel` e transportam o valor resolvido.
|
|
- [ ] Space Bunny Free é associado ao provider `opencode`/OpenCode Zen e Space Bunny Alpha ao provider `openrouter`/OpenRouter.
|
|
- [ ] A ajuda de `node scripts/worktree.mjs` mostra os dois novos valores sem provisionamento.
|
|
- [ ] Docblock do CLI, shell, comando e skill não exibem os IDs antigos como associação vigente.
|
|
- [ ] O pin unitário foi alterado primeiro, houve RED e depois GREEN.
|
|
- [ ] Preset sem flag, outras cinco flags e a lista de flags permanecem idênticos.
|
|
- [ ] Múltiplas flags continuam falhando alto sem adivinhação.
|
|
- [ ] `MODEL_VARIANT` continua `max`; nenhum transporte foi alterado.
|
|
- [ ] Planos, changelogs antigos e exemplos genéricos de parser não foram reescritos.
|
|
- [ ] Nenhum mapa paralelo, alias, fallback, seletor, flag, persistência, migration, schema, access, Consent ou UI foi criado.
|
|
- [ ] `pnpm test:unit tests/unit/worktree.unit.spec.ts` e `pnpm gate:fast` estão verdes.
|
|
- [ ] O smoke da ajuda confirma os dois valores sem efeitos externos.
|
|
- [ ] O push respeita a classificação high-risk e registra unit/int full e e2e curado.
|
|
- [ ] A nova entrada `docs/changelog/2026-09-25-ops129.md` está incluída sem modificar o agregado.
|
|
- [ ] Nenhum manifest ou codebase map foi alterado sem necessidade arquitetural.
|
|
|
|
Self-score decision-quality: 5/5 — as alternativas e rejeições preservam o owner único, a escolha cabe no appetite values-only, os rabbit holes e a busca distinguem superfície viva de histórico, o mecanismo profundo existente é reutilizado e o aceite mantém literalmente as duas associações e todas as invariantes para os quatro comandos.
|