teqo/docs/plans/gate-push-local.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

73 lines
4.2 KiB
Markdown

# Gate local DRY — gate:fast / gate:push + pre-push completo
Status: entregue (2026-07-30) — **ampliado 2026-07-30**: `gate:push` → `gate:ci` espelha `ci-pr.yml` com seleção affected (`test-affected` / `e2e-affected` vs `origin/stage`), não suíte full por default.
Atualizado em: 2026-07-30
Issue: —
Priority: P2
Model: cursor-grok-4.5-high
Impeccable: A — N/A (sem superfície UI)
Appetite: ~0,5 dia eng; 2 scripts npm + 1 hook + docs
Responsável: —
## Dados → decisão → apresentação
Dados: N/A — chore de DX.
## Contexto
`.husky/pre-push` é uma linha: `pnpm lint && pnpm format:check && pnpm typecheck`. Mas o fast gate exigido por `.agents/rules/engineering-standards.mdc` (desde 2026-07-30) e por `work-issue` Passo 4.3 é **lint + tsc + test:unit + format:check + check:cycles**. Resultado: agentes e humanos pusham verde no hook e quebram no CI por unit/cycles que nunca rodaram localmente. Não existe pre-commit hook.
Decisão de produto (2026-07-30, brief do lote CI): scripts DRY (`gate:fast`, `gate:push`), divisão pre-commit vs pre-push explícita, escape hatch documentado.
## Objetivos
- `.husky/pre-push` roda o fast gate completo via script npm único (DRY com a documentação).
- `package.json`: `gate:fast` (lint + typecheck + test:unit) e `gate:push` (gate:fast + format:check + check:cycles).
- Escape hatch documentado (`git push --no-verify`), com aviso de que CI repete tudo.
- Docs (`engineering-standards.mdc`, `AGENT-OPS.md`) citam os scripts, não a lista de comandos — uma fonte só.
## Decisões travadas
- **knip fora do pre-push.** _(Revertido 2026-07-30 — `gate:ci` inclui knip para espelhar ci-pr.)_ O grafo do knip é incompleto (não carrega `payload.config.ts`, ledger P3) e é lento para um hook; CI já o roda como erro bloqueante. **Rejeitado na v1:** knip no hook (custo por push + falsos positivos já fichados).
- **Sem pre-commit hook.** A divisão fica: nada no commit (commits intermediários de WIP são legítimos), tudo no push. **Rejeitado:** lint-staged no commit (adiciona toolchain e atrito sem pegar classe de erro que o push não pegue segundos depois).
- **Escape hatch = `--no-verify` nativo, documentado; sem variável mágica própria.** **Rejeitado:** `SKIP_GATE=1` (mais uma convenção para manter; `--no-verify` é o padrão git que todo agente/humano já conhece).
- **Hook chama `pnpm gate:push`, nunca inline de comandos.** Uma fonte de verdade editável em `package.json`. **Rejeitado:** manter a linha de shell no hook (foi o que causou o drift atual).
## Questões em aberto
- **`pnpm format` auto-fix no hook em vez de `format:check`?** **Opções:** A) check falha e o autor roda `pnpm format` | B) hook formata e aborta para re-add. **Recomendação:** A — hook que edita a worktree surpreende; o erro do check já diz o remédio.
## Abordagem proposta
Componentes:
- **`package.json`** — scripts `gate:fast`, `gate:ci` (`scripts/gate-ci.mjs`) e `gate:push` (= `gate:ci`).
- **`.husky/pre-push`** — `pnpm gate:push`.
- **`.agents/rules/engineering-standards.mdc`** — item 3 do "After every change" passa a citar `pnpm gate:fast` / `pnpm gate:push`.
- **`docs/AGENT-OPS.md`** — linha do fast gate local atualizada para os scripts.
- **`.agents/skills/work-issue/SKILL.md`** — Passo 4.3/6.1 cita `pnpm gate:push`.
Sem migration, sem código de app.
## Dependências
Nenhuma de outro plano (independente; pode rodar em paralelo com OPS3/OPS4). Conflito potencial de merge com OPS7 em `AGENT-OPS.md`/`engineering-standards.mdc` — serializar na fila ou aceitar rebase trivial.
## Não escopo
- Mudar o que o CI roda → OPS4/OPS5. Política "CI vermelho = seu problema" → OPS7.
- Husky v9 deprecations / migração de tooling de hooks.
## Rabbit holes
- **"Já que toco hooks, adiciono lint-staged/commitlint".** Toolchain nova para problema que não temos. **Mitigação:** decisão travada; commitlint só se 3 mensagens fora-do-padrão quebrarem automação (nenhuma hoje).
## Adiado com gatilho
Nenhum neste item.
## Referências
- `.husky/pre-push` (linha atual), `package.json` (scripts de gate existentes)
- `.agents/rules/engineering-standards.mdc` — "Gate em duas velocidades"
- `docs/AGENT-OPS.md` — fast gate local; `.agents/skills/work-issue/SKILL.md` — Passo 4.3