- ci-pr.yml: infra e2e (cache/install/build-for-e2e + DB prep) só quando selected — diff high-risk não queima minutos à toa; comentários corrigidos - engineering-standards.mdc + TESTING.md: política OPS72 (era OPS59/ci.yml stale) - execution-pipeline/agent-work-issue: mecanismo real da #72 (CI roda famílias em paralelo, não sequencial) + ressalva do diff high-risk no pool - changelog/impl plan: verificação verdadeira (suíte full local + triagem dos flakes)
4.9 KiB
4.9 KiB
Pipeline de execução compartilhada (work-issue / agent-work-issue)
Mecânica comum de execução → fechamento das duas skills do fluxo (humano e workers do pool). O corpo mora aqui; cada skill declara os deltas do seu ator e referencia este material — nenhuma é "base" da outra.
Executar
Ordem:
- Schema/server — migrations (
payload-migrations), utilities, actions, testes de domínio. Invariantes do engineering-brief. - UI — se Impeccable B/C/D: shape → craft → critique → polish. Tokens
data-theme='campaign'; shells existentes. - E2E local afetado (OPS72, discricionário) — antes do push, rode localmente os e2e que você criou + os da mesma superfície afetada (você decide quais). Ver §E2E local afetado.
- Gates —
pnpm gate:fastna iteração; entrega compnpm push(nãogit pushnu).
Tracer bullet cedo se o item for grande. Inclua o *-impl.md no commit da
entrega.
E2E local afetado (OPS72)
Política de e2e: local = discricionário, CI/PR = blast radius, main = full antes do deploy.
- O que rodar: os specs e2e que o diff criou (novos
.e2e.spec.ts) + os da mesma superfície trabalhada (oE2E_AFFECTED_MANIFESTmapeiasrc/→ specs; a mecânica do CI é a mesma). É discricionário: você decide quais rodar — não é um gate mecânico e não está nogate:push. - Ferramenta:
pnpm test:e2e:affected(espelho local do classifier: modonone/selected/fullconforme o diff; rodamigrate+db:seed:minimalantes). Alternativa para specs diretas:pnpm test:e2e --no-deps -- tests/e2e/<spec>.e2e.spec.ts(ou--no-deps --project=<família>). - CI/PR: roda só o blast radius detectado (
ci-scope.mjs, modoselected) — nuncafull. Diff high-risk (schema/lockfile/harness) classificafull→ o PR não roda e2e: o full fica para overifydo deploy manual (antes de publicar) e, nesse mesmo diff, o espelho local roda full. - Limitação da #72 (S3-FOLLOWUP): e2e local com
--no-deps+ projetos paralelos (--project=a --project=b) colide noseedTestUser(delete + create concorrentes nosbeforeAll→ValidationError: emaile falhas fantasma). Use--workers=1ou a cadeia padrão de projetos. Só afeta o local: no CI/prod mode a cadeia de deps dos projects é descartada (as famílias rodam em paralelo) e os runs selecionados filtram por arquivo — quase sempre uma família — então o seed não colide.
/simplify + débitos
- Rode o comando
/simplifycompleto (3 reviewers paralelos via Task, read-only) no diff da sessão. - Aplique fixes pontuais que preservem comportamento.
- Rode
capture-review-debtsno modo do ator (ver deltas). Nunca edite a Issuein-progressatual para absorver débitos.
Fechar em main
- Branch do ator (ver deltas) — nunca crie branch nova fora dela.
- Changelog da entrega (OPS44): escreva
docs/changelog/<data>-<id>.md(ex.2026-08-13-ops44.md) — uma entrada curta no formato do agregado — e rodepnpm changelog:buildpara regenerardocs/CHANGELOG-AGENTS.md(insert-only: entradas históricas nunca mudam; o diff será só a entrada nova + o agregado). Rodepnpm changelog:checkpara confirmar. pnpm push -u origin HEAD— origin é o GitHub (OPS71; o tracker de Issues continua no Forgejo por API).- PR no GitHub via
GITHUB_TOKEN=<PAT> node scripts/github-pr.mjs --head <branch> --title "<id> — <título>" --body-file <arquivo>— Ready (nunca draft; o script não tem flag draft), basemain, body comCloses #<N>(ouRelated #Nem plans-only). Em Cursor Cloud:ManagePullRequestcomdraft: false. - O safety net
agent-pr-ready-automerge.ymlarma o auto-merge nativo do GitHub (enablePullRequestAutoMerge, rebase) — o servidor mergea quando o required checkCI (PR) / checksfica verde; nada a armar. - No merge, o workflow
issue-done-on-main-merge.ymlflipadone/in-prodno Forgejo (lê o body do PR via API do GitHub, escreve no tracker porFORGEJO_API_TOKEN). Comente na Issue o desfecho em uma linha.
Deltas por ator
| Ator | Branch | UI | capture-review-debts |
Cloud |
|---|---|---|---|---|
Humano (work-issue) |
<Code>-<slug> (worktree; nunca crie branch nova na sessão) |
shape → craft → critique → polish | autônomo — decide o destino dos achados (registrar/absorver/deferir/descartar) pela triage da skill; sem pausa para o humano | n/a (máquina do humano) |
Pool (agent-work-issue) |
agent/<id>-<slug> (worktrees Cursor podem já ter criado) |
shape → craft → critique → polish (harden/optimize só sob gatilho) | autônomo — só expensive_lock com score ≥4 (Issues novas com depends); score ≤3 / cheap_polish / defer_trigger → defer no *-impl.md ou descarte |
ManagePullRequest com draft: false; Prep Cloud no Passo 0 |