docs(plans): planos de débito pós-OPS1 — Fase 2 (remover fluxo Forgejo) e DRY (parseArgs/verify reusable) (Related #20, Related #21)
This commit is contained in:
parent
df3d0d2cb0
commit
c99c257578
2 changed files with 106 additions and 0 deletions
54
docs/plans/ops1-simplify-dry-pos.md
Normal file
54
docs/plans/ops1-simplify-dry-pos.md
Normal file
|
|
@ -0,0 +1,54 @@
|
|||
# Plano: Pós-OPS1 — consolidar parseArgs e extrair cascata `checks` em workflow reutilizável
|
||||
|
||||
Status: rascunho
|
||||
Atualizado em: 2026-08-20
|
||||
Issue: OPS1-DRY (sucessora de #17 OPS1)
|
||||
Priority: P3
|
||||
Appetite: ~1 sessão leve (fill-in)
|
||||
|
||||
## Intenção
|
||||
|
||||
Débitos de DRY encontrados no review do OPS1 (simplify reviewers), que ficaram
|
||||
para trás para não misturar refactor com a migração de CI:
|
||||
|
||||
1. **parseArgs duplicado em 4 scripts.** `scripts/pr.mjs`, `scripts/github-pr-automerge.mjs`
|
||||
e `scripts/configure-branch-protection.mjs` têm cópias locais; `scripts/lib/agent-forgejo.mjs`
|
||||
exporta outro idêntico (flagsWithValue + positional + kebab→camel). Consolidar num
|
||||
`scripts/lib/cli.mjs` único e importar nos 4 — sem tocar a semântica (fail-closed nos
|
||||
flags sem valor, positional, prefixo `--`).
|
||||
2. **Cascata `checks` duplicada em `ci.yml` e no `verify` do `deploy.yml`.** O mesmo
|
||||
fluxo (checkout → setup-bun → install → lint → build → unit → playwright → e2e) em
|
||||
dois arquivos; risco de drift (ex.: esquecer `playwright install` em um dos dois).
|
||||
Extrair numa reusable workflow (`workflow_call`) chamada pelos dois, preservando o
|
||||
nome do job `checks` em `ci.yml` (o required-check literal `checks` não pode mudar).
|
||||
|
||||
## O que NÃO negociar
|
||||
|
||||
- O literal `checks` (required check + auto-merge) — com reusable workflow, o job
|
||||
`checks` fica declarado em `ci.yml` (o check-run `CI / checks` é inalterado).
|
||||
- Comportamento/política do parser (as 3 variantes hoje divergem só em
|
||||
flagsWithValue/positional — unificar com o superset; cada chamador filtra).
|
||||
|
||||
## Fases
|
||||
|
||||
1. `parseArgs` em `cli.mjs` + importar em `pr.mjs`, `github-pr-automerge.mjs`,
|
||||
`configure-branch-protection.mjs`, `agent-forgejo.mjs` (remover as cópias). Gate:
|
||||
`bun run test:unit`.
|
||||
2. Reusable workflow `checks` (workflow_call) + `ci.yml` e `deploy.yml` `verify`
|
||||
passando a usá-la. Gate: `bun run gate` + validação ao vivo (PR → check `checks`).
|
||||
|
||||
## Rabbit holes / fora de escopo
|
||||
|
||||
- Não mudar o comportamento do parser (só mover/consolidar).
|
||||
- Não mesclar DRY com UX.
|
||||
- `agent-forgejo.mjs` (tracker) só troca o parseArgs — nada da lógica de claim.
|
||||
|
||||
## Já resolvido no simplify (não reabrir)
|
||||
|
||||
- Nada do OPS1-DRY foi resolvido — é o próprio conteúdo pós-review diferido.
|
||||
|
||||
## Aceite
|
||||
|
||||
- Zero `parseArgs` duplicado (busca por `const parseArgs` → 1 em cli.mjs).
|
||||
- `ci.yml` e `deploy.yml` `verify` usam o mesmo `workflow_call`; um PR validado mostra
|
||||
o check-run `CI / checks` idêntico.
|
||||
52
docs/plans/remover-fluxo-forgejo.md
Normal file
52
docs/plans/remover-fluxo-forgejo.md
Normal file
|
|
@ -0,0 +1,52 @@
|
|||
# Plano: Pós-OPS1 Fase 2 — remover arquivos do fluxo Forgejo (workflows/scripts mortos)
|
||||
|
||||
Status: rascunho
|
||||
Atualizado em: 2026-08-20
|
||||
Issue: OPS1-F2 (sucessora de #17 OPS1)
|
||||
Priority: P2
|
||||
Appetite: ~1 sessão (remoção + fixups de consumidores + docs)
|
||||
|
||||
## Intenção
|
||||
|
||||
O fluxo GitHub Actions (OPS1, validado ao vivo: PRs #1/#3 no GitHub — CI `checks`
|
||||
verde → auto-merge nativo → flips via API → deploy manual `workflow_dispatch`) é a
|
||||
única via de CI/PR/deploy no repo. Os arquivos do fluxo Forgejo ficam **dormentes**
|
||||
desde o cutover e devem sair do tree — é a Fase 2 prometida no impl plan do OPS1.
|
||||
|
||||
## O que NÃO negociar
|
||||
|
||||
- Tracker no Forgejo (Issues/labels/claims/flips via API): `forgejo-api.mjs`,
|
||||
`agent-*.mjs`, `issue.mjs`, `forgejo-issue-transition.mjs`,
|
||||
`agent-promote-related-on-merge.mjs` **ficam**; `.forgejo/worktree.env` fica
|
||||
(consumido pelo provisionamento de worktree — fora do escopo `workflows/*`).
|
||||
- Desligar o runner do Forgejo é passo manual do runbook (fora do código).
|
||||
- `ci.yml` de main não volta (deploy = dispatch manual).
|
||||
- Nunca fechar o tracker (anti-goal do OPS1).
|
||||
|
||||
## O que remover
|
||||
|
||||
- `.forgejo/workflows/*` (4 arquivos: ci.yml, issue-done-on-main-merge.yml,
|
||||
plan-issue-ready-on-main-merge.yml, agent-pr-ready-automerge.yml).
|
||||
- `scripts/forgejo-pr-automerge.mjs` (poll automerger da era Forgejo — substituído
|
||||
pelo auto-merge nativo + `github-pr-automerge.mjs`).
|
||||
- Doc residuais que descrevem o fluxo Forgejo (varredura por `forgejo-pr-automerge`,
|
||||
`.forgejo/workflows`, "rsync homeserver:" etc.).
|
||||
|
||||
## Rabbit holes / fora de escopo
|
||||
|
||||
- Não deletar scripts do tracker (item NÃO negociar) nem `.forgejo/worktree.env`.
|
||||
- Não editar `docs/plans/*` já congelado (história; a narrativa "dormentes até a
|
||||
Fase 2" permanece).
|
||||
- Rollback continua sendo git history / PR reversível (não manter arquivos).
|
||||
|
||||
## Já resolvido no simplify (não reabrir)
|
||||
|
||||
- Resistência de reverter a Fase 2 foi mudada para "rollback = git history" (o main
|
||||
congelado do Forgejo ainda tem a árvore pré-cutover).
|
||||
|
||||
## Aceite
|
||||
|
||||
- `git grep` por `forgejo-pr-automerge|.forgejo/workflows` em scripts/workflows
|
||||
vivo → zero hits (fora do tracker e do env file).
|
||||
- `bun run gate` limpo; um PR inteiro validado no GitHub depois da remoção
|
||||
(CI + merge + flip).
|
||||
Loading…
Reference in a new issue