teqo-backup/docs/plans/ops71-worktree-fix-sem-arg-driverless.md
Francisco Solla e17aee0b3b Related #1226
2026-09-20 16:33:39 -03:00

3.7 KiB

Tornar worktree fix (sem argumento) driverless, espelhando plan

Status: rascunho Atualizado em: 2026-09-20 Issue: #1226 Priority: P2 Impeccable: A — N/A Design UI: N/A Appetite: ~0,5 dia eng; um outcome verificável Responsável: —

Intenção

pnpm worktree fix sem argumento hoje abre a sessão e auto-envia a string vazia como mensagem do usuário, resultando em um prompt vazio para o agente. O plan (sem bag) já é driverless — abre a sessão sem mensagem, esperando o humano digitar o contexto. O fix deve espelhar esse comportamento: sem argumento → sessão aberta, nenhuma mensagem automática.

Persona e fluxo

  • Persona / contexto: dev que identificou um bug e quer diagnosticar interativamente (campo/mesa, terminal)
  • Job principal: Abrir uma sessão fix sem bag sem que o agente receba uma mensagem vazia
  • Fluxo desejado: pnpm worktree fix → sessão abre, prompt vazio → humano digita o contexto do bug
  • Anti-goals de produto: Não quebrar pnpm worktree fix "descrição do bug" — o caso com argumento continua funcionando como hoje

Esboço de fluxo

fix (sem arg) → sessão aberta, prompt vazio → humano digita
fix (com arg)  → sessão aberta, argumento sanitizado auto-enviado (como hoje)
plan (sem arg) → sessão aberta, prompt vazio (referência — sem mudança)

Objetivo e aceite

  • pnpm worktree fix (sem argumento) abre sessão driverless — nenhuma mensagem automática enviada
  • pnpm worktree fix "descrição" continua funcionando como hoje (argumento sanitizado → mensagem auto-enviada)
  • pnpm worktree fix --auto (sem argumento) lança erro alto explicando que --auto exige um bag
  • Testes unitários atualizados cobrem o novo comportamento

Dados (intenção)

  • Vou apresentar dados? N/A — feature de tooling interna, sem métrica de produto
  • Decisões desbloqueadas: Executor — comportamento driverless do fix sem bag
  • Forma: adiada ao plano de implementação

Dados da decisão (literais)

  • if (purpose === 'plan' && !sanitized) return null — padrão existente em scripts/lib/agent-session.mjs:212
  • Nova linha: if (purpose === 'fix' && !sanitized) return null — posição imediatamente abaixo, antes do auto check

Direção no codebase (hipótese)

  • Áreas prováveis: scripts/lib/agent-session.mjs (purposeInvocation), scripts/lib/worktree.mjs (assertSkillAutoSupported), tests/unit/agentSession.unit.spec.ts, tests/unit/worktree.unit.spec.ts
  • Precedente a olhar: OPS119 — plan sem bag driverless (linha 212 do agent-session.mjs)
  • Risco de acoplamento: Baixo — mudança pontual em lógica de sanitização de argumento, não toca collections/negócio

Dependências

  • OPS119 (referência de padrão já implementado para plan)

Fora de escopo

  • Mudar comportamento de plan sem bag (já é driverless)
  • Alterar new ou next (fora do escopo desta issue)

Rabbit holes de produto

  • Refatorar sanitização unificada. Se alguém "só completar" a limpeza: explosão de escopo. Corte neste item: adicionar apenas a linha if (purpose === 'fix' && !sanitized) return null, sem refatorar o bloco fix || plan.

Questões em aberto (produto)

  • Nenhuma — comportamento espelhado do plan já validado em produção (OPS119).

Referências

  • scripts/lib/agent-session.mjs:208-217 — purposeInvocation, bloco fix || plan
  • scripts/lib/worktree.mjs:142 — assertSkillAutoSupported, lógica de --auto
  • tests/unit/agentSession.unit.spec.ts:243-252 — testes de fix com/san bag
  • tests/unit/worktree.unit.spec.ts:599-604 — testes de assertSkillAutoSupported
  • AGENTS.md — convenção de sessões driverless (OPS119)