teqo-backup/docs/plans/plan-issue-lifecycle-ready.md
Francisco Ignácio Fontoura Solla 896d957497 chore: migrate .cursor/ references to .agents/ folder
Replace all project-local .cursor/ path references with .agents/ across
rules, skills, environment config, hooks, and ignore files. Keep Cursor
editor paths (~/.cursor/, window.cursor, CURSOR_API_KEY) and vendored
Impeccable editor-hook paths unchanged.
2026-08-05 00:09:09 -03:00

83 lines
5.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Ciclo de vida do plan-issue — colaboração fechada antes de claim
Status: em execução (impl em andamento)
Atualizado em: 2026-08-02
Issue: #292
Priority: P1
Model: cursor-grok-4.5-medium
Impeccable: A — N/A (processo/skills + tooling do paradigma; sem UI)
Appetite: ~0,5–1 dia eng; um outcome verificável
Responsável: —
## Intenção
Enquanto se colabora no `/plan-issue`, o agente às vezes registra Issues e abre o PR de planos **antes** do lote estar fechado. Como `agent:register` nasce com label `ready`, o pool (ou outro claim) pode pegar a Issue — e o humano ainda está mudando a intenção. Pior: a ordem atual (Issue `ready` → depois PR do plano) permite claim **antes** do plano existir em `main`; o link de plano hoje é só _warn_, não bloqueio.
Queremos um ciclo em que colaborar é barato de reverter, e só vira trabalho claimável quando a intenção está confirmada **e** o plano de intenção está em `main`.
## Persona e fluxo
- **Persona / contexto:** humano moldando um lote com o agente; pool autônomo rodando em paralelo.
- **Job principal:** fechar intenção sem medo de que o pool já esteja executando a versão errada.
- **Fluxo desejado:**
1. Explorar / fatiar / rascunhar planos locais (`Issue: —`).
2. Overview do lote (gate) → iterar até o humano **confirmar explicitamente**.
3. Só então: registrar Issues **ainda não claimáveis**, commit + PR dos planos (`Related #N`), merge em `main`.
4. Só então: Issues passam a `ready` e entram na fila.
- **Anti-goals de produto:** não inventar um segundo tracker fora do GitHub; não exigir revisão humana no PR de planos além do auto-merge já existente; não travar chores sem plano (`agent:file-miss`, débitos triviais).
### Esboço de fluxo (B/C/D)
Omitido — superfície A (processo).
## Objetivo e aceite
- Colaborar no lote **não** cria Issue no GitHub nem PR até confirmação explícita do humano após o overview.
- Issue nascida de `plan-issue` com plano **não** é claimável (`ready`) enquanto o plano de intenção não estiver em `main`.
- Depois do plano em `main`, a Issue fica claimável sem passo humano extra opaco (promote determinístico no fim do registro / pós-merge).
- Chores/specs sem `--plan` continuam podendo nascer `ready` (comportamento atual preservado onde não há plano).
- Critério verificável: com pool ligado, uma Issue recém-registrada com plano linkado **não** aparece na fila elegível até o promote pós-plano-em-`main`.
## Dados (intenção)
- **Vou apresentar dados?** Não
- **Decisões desbloqueadas:** N/A — processo do paradigma, não métrica de campanha.
- **Forma:** _adiada ao plano de implementação_
## Direção no codebase (hipótese)
- **Áreas prováveis:** `.agents/skills/plan-issue/` (SKILL + checklist Passo 5/6), `scripts/agent-register.mjs`, elegibilidade do pool (`scripts/lib/agent-pool-eligibility.mjs` + pins em `tests/unit/agentPoolEligibility.unit.spec.ts`), menção curta em `docs/AGENT-OPS.md` / skill `agent-pool` se o contrato de labels mudar.
- **Precedente a olhar:** gate Passo 5 já escrito na skill (hoje só soft); `needs:consent` / `requirements-changed` como “não claimar”; OPS12 `plans-only-closes` (`Related #N`).
- **Risco de acoplamento:** fila `ready` é o contrato compartilhado de `agent:claim` e do pool — mudar o momento do flip afeta os dois.
## Dependências
- Nenhuma dura. Soft: pool ativo torna a race visível; o contrato vale mesmo com pool parado.
## Fora de escopo
- Reescrever o paradigm inteiro / bipartir plan-exec.
- UI de board / segundo estado visual no GitHub Projects.
- Exigir plano em arquivo para **toda** Issue (chores body-only continuam ok).
- Safety net Action “no merge de `docs/plans/**` promove Issues” — nice-to-have; v1 pode ser o próprio Passo 6 pós-merge do PR de planos.
## Rabbit holes de produto
- **Novo label `spec`/`planning`.** Se alguém “só completar”: proliferação de estados. **Corte neste item:** reusar `blocked` (ou um `needs:*` já no vocabulário de gate humano) até o promote → `ready`; só criar label nova se `blocked` confundir demais com dep bloqueada.
- **Verificar blob do plano no tick do pool (IO no GitHub a cada 10 min).** **Corte neste item:** preferir “não nasce `ready` até promote”; checagem de arquivo em `main` só se o promote sozinho não fechar o buraco.
- **Frase mágica rígida demais.** **Corte:** confirmação explícita após o overview (ex. “confirma o lote” / “pode registrar”); não exigir token cerimonial único se o humano já disse claramente para registrar.
## Questões em aberto (produto)
- **Enquanto espera o plano em `main`, a Issue fica com qual label?** **Opções:** A) `blocked` (já exclui claim/pool) · B) novo `needs:plan` no conjunto human-gate · C) sem Issue até o plano mergear (inverte ordem; complica `Related #N`). **Recomendação:** A — register com `--plan` implica não-`ready` (`blocked`); promote `blocked`→`ready` quando o plano estiver em `main`. _(assumido — validar)_
- **Quem promove para `ready`?** **Opções:** A) fim do Passo 6 na mesma sessão (após merge do PR de planos) · B) Action no merge de `docs/plans/**` · C) sempre humano. **Recomendação:** A no v1; B fora de escopo salvo se A falhar na prática. _(assumido — validar)_
- **Confirmção do gate:** basta overview + “pode registrar”, ou o agente pode registrar se o humano só disser “ok” ambíguo no meio da edição? **Opções:** A) só após overview apresentado + OK explícito ao lote · B) qualquer “ok” conta. **Recomendação:** A. _(assumido — validar)_
## Referências
- GitHub Issue #292
- `.agents/skills/plan-issue/SKILL.md` (Passo 5 gate / Passo 6 register)
- `scripts/agent-register.mjs` (default `ready`)
- `scripts/lib/agent-pool-eligibility.mjs` (`issueHasPlanLink` = warn)
- `docs/AGENT-OPS.md`
- `.agents/skills/agent-pool/SKILL.md`