Francisco Solla
02c1e4f36b
feat(OPS71): Fase 2 — remover arquivos do fluxo Forgejo (workflows/scripts/specs) pós-validação do GitHub Actions
...
14 arquivos removidos: .forgejo/workflows/* (6), forgejo-pr-automerge.mjs,
forgejo-dispatch.mjs, ci-classify-production.mjs, lib/dockerignore.mjs,
lib/branch-protection.mjs + 3 specs órfãs. Consumidores ajustados:
test-affected-core (HIGH_RISK_EXACT), ciSkipInvariants (re-ancorado no
deploy.yml dispatch-only — deploy nunca automático), comentários com
referência morta (gate-ci, github-pr-automerge, agent-pr-ready-automerge).
Docs: AGENTS.md, runbook (rollback via git history), README (era GitHub).
Tracker intocado (forgejo-api/agent-*/issue-transition ficam).
2026-08-20 00:20:10 +00:00
Francisco Solla
9504c7ccf6
ops(OPS65): CI do main em janela de 30 min (gate .dockerignore fail-open) + matar agent-pool
...
CI (PR) / checks (pull_request) Successful in 8m4s
Promote plan-issue Related on main merge / plan-issue-ready (pull_request) Has been skipped
Main merge flips claimed issues to done + in-prod / issue-done (pull_request) Successful in 13m48s
PR Ready + auto-merge / ready-automerge (pull_request) Successful in 52m5s
- ci.yml: on push removido → schedule */30 + workflow_dispatch (fundido com a
estrutura de job único sequencial do OPS62 X1)
- job gate (host, main-only, sem pnpm): revision do container rodando no
homeserver (label org.opencontainers.image.revision — o compose pode mentir
após rollback falho) + diff + classificador .dockerignore
- fail-open: revision desconhecida → suite roda (verde); incapaz de classificar
→ run vermelho (nunca blackout silencioso); deploy duplo-gated
(needs: [checks, gate] + if explícito)
- deploy-homeserver.sh: guard 'already deployed' idempotente (mesma revision)
- agent-pool.yml removido; pool dormente (144 pnpm install/dia no tick */10)
- specs: dockerignoreMatch, ciClassifyProduction (incl. git-diff com repo
scratch e exit codes), pins ciSkipInvariants/deployScript; HIGH_RISK_EXACT
- docs: runbook (janela/gate/verificação ao vivo/falhas), AGENTS.md,
AGENT-OPS.md (tabela X1 fundida), skills pool dormente, changelog OPS65
- impl plan aprovado; intenção marcada entregue
2026-08-18 21:08:12 -03:00
Francisco Solla
ee31aeee4f
fix(OPS62): services por nome na rede do job — Forgejo 9 não expande expressões em ports
...
Achado ao vivo (run 730): a expressão ${{ 5433 + (github.run_id % 100) }} no
ports do service não é avaliada pelo Forgejo 9 — o literal ia ao runner e o
job falhava em 1s. E portas fixas colidiriam entre runs concorrentes (o job
único segura os services pelo run inteiro). Correção: services sem publish
host, alcançados por nome na rede do job (postgres-int/postgres-build:5432)
— solução canônica do Actions, mata a colisão de raiz. Guards fail-closed
(LOCAL_HOSTS + assertTestDatabase) admitem os nomes dos services (hosts
internos do runner; hosts remotos continuam rejeitados); pins novos em
localHosts.unit.spec.ts e ciSkipInvariants (sem ports:, URLs por nome).
2026-08-18 23:26:13 +00:00
Francisco Solla
12a4fe1005
chore(OPS62): CI fail-fast estrutural — job único checks sequencial (X1)
...
ci-pr.yml e ci.yml deixam de ter jobs irmãos: 1 job 'checks' com steps em
série (guards → lint → format → typecheck → knip → cycles → unit → int →
build → e2e). Step vermelho interrompe o job, o run falha e o slot é
liberado — sem API de cancel (Forgejo 9.0.3 não tem), sem watchdog, sem
upgrade do Forgejo. Skips do ci-scope.mjs viram step id 'scope'; e2e em 1
processo com PLAYWRIGHT_WORKERS=4 (substitui 2 shards × 2 workers); 2
services Postgres por run com portas host derivadas do run_id (runs
concorrentes não colidem); contexto 'CI (PR) / checks' preservado (job id
checks — contrato do automerger OPS61); deploy OPS53 gated em needs checks.
Plumbing morto removido (e2eShardConfig/e2e_shards). Docs: AGENT-OPS,
TESTING.md, changelog. Impl: docs/plans/ops62-ci-fail-fast-forgejo-impl.md
(a intenção watchdog+upgrade fica como histórico do gate).
2026-08-18 23:26:13 +00:00
Francisco Solla
4f7de670f5
fix(OPS61): merge do safety net com FORGEJO_API_TOKEN — 409 PushRejected do hook pre-receive
...
CI (PR) / scope (pull_request) Successful in 35s
CI (PR) / lint (pull_request) Successful in 45s
CI (PR) / docs-guards (pull_request) Successful in 8s
CI (PR) / plans-only-closes (pull_request) Successful in 7s
CI (PR) / format (pull_request) Successful in 54s
CI (PR) / typecheck (pull_request) Successful in 31s
CI (PR) / knip (pull_request) Successful in 32s
CI (PR) / cycles (pull_request) Successful in 32s
CI (PR) / unit (pull_request) Successful in 55s
CI (PR) / int (pull_request) Successful in 2m46s
CI (PR) / build (pull_request) Has been skipped
CI (PR) / e2e (1) (pull_request) Has been skipped
CI (PR) / e2e (2) (pull_request) Has been skipped
CI (PR) / checks (pull_request) Successful in 1s
CI / deploy homeserver (teqo-1313) (push) Blocked by required conditions
CI / static (push) Waiting to run
CI / int (push) Waiting to run
CI / build (push) Waiting to run
CI / e2e (1) (push) Waiting to run
CI / e2e (2) (push) Waiting to run
CI / checks (push) Blocked by required conditions
PR Ready + auto-merge / ready-automerge (pull_request) Successful in 21m31s
Main merge flips claimed issues to done + in-prod / issue-done (pull_request) Successful in 12s
Promote plan-issue Related on main merge / plan-issue-ready (pull_request) Has been skipped
Agent pool supervisor / tick (pull_request) Successful in 28s
O merge POST faz um push para main; o hook pre-receive do Forgejo rejeita o
push quando o usuário do token não tem write no repo — o GITHUB_TOKEN nativo
age como o usuário sistema do Actions. Por isso nenhum auto-merge funcionou
(o CLI morria no 409; runs 'success' eram leituras de PR já mergeada
manualmente). O workflow do safety net agora injeta o mesmo PAT dos pós-merge.
2026-08-18 18:07:55 -03:00
Francisco Solla
ac11afecf3
ops(OPS61): flip de issues pós-merge com PAT + gate do rollup checks + branch protection real no Forgejo
...
- issue-done/plan-issue-ready: env FORGEJO_API_TOKEN (GITHUB_TOKEN 403 em
Issues) + fork guard (checkout de fork roda script do fork com o PAT — RCE)
- forgejo-issue-transition: falha de flip vira exit 1 (job vermelho, nunca
skip silencioso)
- waitForChecks: exige o rollup CI (PR) / checks presente+verde (raça PR #52 :
snapshot com jobs não-agendados parecia verde); mergeable=false só conta
como conflito após a cascata assentar; timeouts 30→45min (CLI) e 40→55min
(workflow)
- configure-branch-protection: contexto real CI (PR) / checks* (Forgejo casa
por glob contra 'CI (PR) / checks (pull_request)'; literal 'checks' nunca
casaria), idempotente GET→POST/PATCH, verificação pós-aplicação; decisão
pura em scripts/lib/branch-protection.mjs
- docs honestas (AGENT-OPS, agent-pr-workflow.mdc, CUTOVER-MAIN-ONLY, README)
- testes: raça do rollup/rollup failure/mergeable pré-settle +
branchProtection create/update/noop + glob real
2026-08-18 17:45:54 -03:00
Francisco Solla
7b8e37e162
fix(ops OPS57): simplify — veto de draft vale em conversão mid-run; CLI valida base main; docs sem mecanismo fantasma
CI / static (push) Successful in 4m6s
CI / int (push) Successful in 4m17s
CI / build (push) Successful in 5m23s
CI / e2e (1) (push) Successful in 9m28s
CI / e2e (2) (push) Has been cancelled
CI / deploy homeserver (teqo-1313) (push) Has been cancelled
CI / checks (push) Has been cancelled
2026-08-18 15:24:21 +00:00
Francisco Solla
87a81c29fd
chore(ops OPS57): alargar o gatilho do forgejo-pr-automerge para todas as PRs same-repo (draft não-cursor/* = veto)
CI (PR) / scope (pull_request) Successful in 41s
PR Ready + auto-merge / ready-automerge (pull_request) Successful in 1m20s
CI (PR) / docs-guards (pull_request) Successful in 10s
CI (PR) / plans-only-closes (pull_request) Successful in 9s
CI (PR) / typecheck (pull_request) Has been skipped
CI (PR) / knip (pull_request) Has been skipped
CI (PR) / cycles (pull_request) Has been skipped
CI (PR) / unit (pull_request) Has been skipped
Main merge flips claimed issues to done + in-prod / issue-done (pull_request) Successful in 16s
Promote plan-issue Related on main merge / plan-issue-ready (pull_request) Has been skipped
CI (PR) / lint (pull_request) Successful in 1m5s
Agent pool supervisor / tick (pull_request) Successful in 43s
CI (PR) / format (pull_request) Successful in 1m19s
CI / static (push) Successful in 3m39s
CI / int (push) Successful in 3m57s
CI (PR) / int (pull_request) Has been skipped
CI (PR) / build (pull_request) Has been skipped
CI (PR) / e2e (1) (pull_request) Has been skipped
CI (PR) / e2e (2) (pull_request) Has been skipped
CI (PR) / checks (pull_request) Successful in 2s
CI / build (push) Successful in 5m14s
CI / e2e (1) (push) Successful in 7m58s
CI / e2e (2) (push) Successful in 6m27s
CI / checks (push) Successful in 2s
CI / deploy homeserver (teqo-1313) (push) Successful in 4m44s
2026-08-18 11:50:48 -03:00
Francisco Solla
4285358915
ops(OPS57): worktrees migrados para ~/.worktrees/teqo
...
CI / static (push) Successful in 1m53s
CI / int (push) Successful in 2m3s
CI / build (push) Successful in 2m43s
CI / e2e (1) (push) Successful in 4m18s
CI / checks (push) Successful in 2s
CI / e2e (2) (push) Successful in 3m40s
CI / deploy homeserver (teqo-1313) (push) Successful in 4m56s
- .forgejo/worktree.env: WORKTREES_ROOT=~/.worktrees/teqo (C113/plans/work
órfãos movidos com git worktree move; pasta antiga removida)
- O roteador global expande o ~ na exportação das chaves do env file
2026-08-18 09:33:42 +00:00
Francisco Solla
ff14cef653
ops(OPS55): worktree respeita WORKTREES_ROOT do .forgejo/worktree.env
...
- worktree.mjs: WORKTREES_ROOT = env ?? fallback (~/.cursor/worktrees/teqo)
- .forgejo/worktree.env novo: FORGEJO_REPOSITORY=fsolla/teqo + root atual
(migração para ~/.worktrees/teqo fica para quando as sessões opencode
ativas nos worktrees antigos fecharem — OPS52/OPS53/PUB5)
Roteador global (~/.config/shell/worktree.sh) exporta as chaves do arquivo
por projeto; iara-pwa já usa o mesmo mecanismo.
2026-08-18 01:53:27 +00:00
Francisco Solla
6a3f61f968
ops(OPS53): etapa de deploy no CI para o homeserver (teqo-1313)
...
Job deploy em ci.yml (runs-on host na workstation) streama
scripts/deploy-homeserver.sh para o homeserver via SSH: build dos stages
runner+migrator com secrets do teqo-1313.env, push no registry local,
migrate pelo serviço de maintenance antes do rollout, up + smoke. Zero
secrets novos no Forgejo; HEAD guard + flock; rollback automático com
backup do compose; runbook docs/ops/teqo-1313-deploy.md; invariantes
unit do script (bash -n + estrutura).
2026-08-18 00:50:41 +00:00
Francisco Solla
b5c97ec6ff
fix(OPS50): prettier em ci.yml
Agent PR Ready + auto-merge / ready-automerge (pull_request) Has been skipped
CI (PR) / docs-guards (pull_request) Successful in 10s
CI (PR) / plans-only-closes (pull_request) Successful in 7s
CI (PR) / scope (pull_request) Successful in 32s
CI (PR) / lint (pull_request) Successful in 42s
CI (PR) / format (pull_request) Successful in 49s
CI (PR) / typecheck (pull_request) Successful in 31s
CI (PR) / knip (pull_request) Successful in 32s
CI (PR) / cycles (pull_request) Successful in 33s
CI (PR) / unit (pull_request) Successful in 46s
CI (PR) / build (pull_request) Has been skipped
CI (PR) / e2e (1) (pull_request) Has been skipped
CI (PR) / e2e (2) (pull_request) Has been skipped
CI (PR) / int (pull_request) Successful in 1m37s
CI (PR) / checks (pull_request) Successful in 1s
Promote plan-issue Related on main merge / plan-issue-ready (pull_request) Has been skipped
Main merge flips claimed issues to done + in-prod / issue-done (pull_request) Successful in 12s
Agent pool supervisor / tick (pull_request) Successful in 26s
CI / static (push) Successful in 2m1s
CI / int (push) Successful in 2m8s
CI / build (push) Successful in 2m50s
CI / e2e (1) (push) Successful in 4m20s
CI / e2e (2) (push) Successful in 3m36s
CI / checks (push) Successful in 1s
2026-08-17 13:25:17 -03:00
Francisco Solla
f151376641
ops(OPS50): remove deploy Vercel do pipeline — produção é self-hosted no homeserver (jorgesolla1313.com.br); ci.yml vira verificador puro (sem deploy/requeue), apaga vercel-promote.yml, scripts/tests/vercel.json e secrets VERCEL_*
Agent PR Ready + auto-merge / ready-automerge (pull_request) Has been skipped
CI (PR) / docs-guards (pull_request) Successful in 7s
CI (PR) / plans-only-closes (pull_request) Successful in 7s
CI (PR) / scope (pull_request) Successful in 32s
CI (PR) / lint (pull_request) Successful in 40s
CI (PR) / format (pull_request) Failing after 47s
CI (PR) / typecheck (pull_request) Successful in 31s
CI (PR) / knip (pull_request) Successful in 32s
CI (PR) / cycles (pull_request) Successful in 32s
CI (PR) / unit (pull_request) Successful in 46s
CI (PR) / int (pull_request) Has been skipped
CI (PR) / build (pull_request) Has been skipped
CI (PR) / e2e (1) (pull_request) Has been skipped
CI (PR) / e2e (2) (pull_request) Has been skipped
CI (PR) / checks (pull_request) Failing after 1s
2026-08-17 13:17:17 -03:00
Francisco Solla
09db71f95e
fix(ci OPS50): push workflow (ci.yml) ganha o mesmo fix do PR workflow — .env.test.local com a URL do serviço (vitest/playwright recarregam .env.test por cima) e VITEST_MAX_WORKERS=4 no int
Agent PR Ready + auto-merge / ready-automerge (pull_request) Has been skipped
CI (PR) / docs-guards (pull_request) Successful in 6s
CI (PR) / plans-only-closes (pull_request) Successful in 6s
CI (PR) / scope (pull_request) Successful in 42s
CI (PR) / typecheck (pull_request) Has been skipped
CI (PR) / knip (pull_request) Has been skipped
CI (PR) / cycles (pull_request) Has been skipped
CI (PR) / unit (pull_request) Has been skipped
CI (PR) / lint (pull_request) Successful in 50s
CI (PR) / format (pull_request) Successful in 57s
CI (PR) / int (pull_request) Has been skipped
CI (PR) / build (pull_request) Has been skipped
CI (PR) / e2e (1) (pull_request) Has been skipped
CI (PR) / e2e (2) (pull_request) Has been skipped
CI (PR) / checks (pull_request) Successful in 1s
Promote plan-issue Related on main merge / plan-issue-ready (pull_request) Has been skipped
Main merge flips claimed issues to done + in-prod / issue-done (pull_request) Successful in 24s
Agent pool supervisor / tick (pull_request) Failing after 36s
CI / static (push) Successful in 1m54s
CI / int (push) Successful in 1m59s
CI / build (push) Successful in 2m45s
CI / e2e (1) (push) Successful in 5m4s
CI / e2e (2) (push) Successful in 4m9s
CI / checks (push) Successful in 1s
CI / deploy (push) Failing after 26s
CI / requeue (push) Successful in 6s
2026-08-17 11:56:15 -03:00
Francisco Solla
ac664093d2
fix(ci OPS50): build e2e em .next-e2e (o webServer do playwright serve esse dir desde 7ca0efc9 — os workflows ainda buildavam em .next/e2e e o 'next start' não achava o bundle) + invariante unit passa a pinar os workflows
Agent PR Ready + auto-merge / ready-automerge (pull_request) Has been skipped
CI (PR) / docs-guards (pull_request) Successful in 6s
CI (PR) / plans-only-closes (pull_request) Successful in 6s
CI (PR) / scope (pull_request) Successful in 41s
CI (PR) / lint (pull_request) Successful in 49s
CI (PR) / format (pull_request) Successful in 1m0s
CI (PR) / typecheck (pull_request) Successful in 34s
CI (PR) / knip (pull_request) Successful in 34s
CI (PR) / cycles (pull_request) Successful in 33s
CI (PR) / unit (pull_request) Successful in 47s
CI (PR) / build (pull_request) Has been skipped
CI (PR) / int (pull_request) Successful in 2m0s
CI (PR) / e2e (2) (pull_request) Successful in 4m23s
CI (PR) / e2e (1) (pull_request) Successful in 4m33s
CI (PR) / checks (pull_request) Successful in 1s
Promote plan-issue Related on main merge / plan-issue-ready (pull_request) Has been skipped
Main merge flips claimed issues to done + in-prod / issue-done (pull_request) Successful in 24s
Agent pool supervisor / tick (pull_request) Failing after 1m3s
CI / int (push) Failing after 1m22s
CI / static (push) Successful in 2m1s
CI / build (push) Successful in 2m36s
CI / e2e (1) (push) Failing after 9m2s
CI / e2e (2) (push) Failing after 8m37s
CI / checks (push) Failing after 1s
CI / deploy (push) Has been skipped
CI / requeue (push) Successful in 7s
2026-08-17 11:33:01 -03:00
Francisco Solla
b51f745f66
fix(ci OPS50): matrix estática [1,2] no e2e (Forgejo não passa job results à expansão de matrix — fromJson(needs.*) vira shard vazio) e VITEST_MAX_WORKERS=4 no int (8 CPUs do runner × pool-10 estoura os 100 clients do Postgres do serviço)
Agent PR Ready + auto-merge / ready-automerge (pull_request) Has been skipped
CI (PR) / docs-guards (pull_request) Successful in 6s
CI (PR) / plans-only-closes (pull_request) Successful in 6s
CI (PR) / scope (pull_request) Successful in 31s
CI (PR) / lint (pull_request) Successful in 40s
CI (PR) / format (pull_request) Successful in 57s
CI (PR) / typecheck (pull_request) Successful in 33s
CI (PR) / knip (pull_request) Successful in 33s
CI (PR) / cycles (pull_request) Successful in 34s
CI (PR) / unit (pull_request) Successful in 45s
CI (PR) / build (pull_request) Has been skipped
CI (PR) / int (pull_request) Successful in 1m58s
CI (PR) / e2e (1) (pull_request) Failing after 3m8s
CI (PR) / e2e (2) (pull_request) Failing after 3m11s
CI (PR) / checks (pull_request) Failing after 1s
2026-08-17 04:17:56 -03:00
Francisco Solla
6b9c04820b
fix(ci OPS50): vitest/playwright recarregam .env.test por cima do env do job — gravar DATABASE_URL do serviço em .env.test.local (camada que vence)
Agent PR Ready + auto-merge / ready-automerge (pull_request) Has been skipped
CI (PR) / scope (pull_request) Successful in 30s
CI (PR) / format (pull_request) Successful in 54s
CI (PR) / docs-guards (pull_request) Successful in 6s
CI (PR) / plans-only-closes (pull_request) Successful in 6s
CI (PR) / lint (pull_request) Successful in 38s
CI (PR) / typecheck (pull_request) Successful in 30s
CI (PR) / knip (pull_request) Successful in 32s
CI (PR) / cycles (pull_request) Successful in 31s
CI (PR) / unit (pull_request) Successful in 43s
CI (PR) / build (pull_request) Has been skipped
CI (PR) / int (pull_request) Failing after 1m25s
CI (PR) / e2e (pull_request) Failing after 2m54s
CI (PR) / checks (pull_request) Failing after 1s
2026-08-17 03:56:29 -03:00
Francisco Solla
f20305759a
OPS50: port CI e scripts de agentes do GitHub para o Forgejo
...
Workflows nativos em .forgejo/workflows/ (ci, ci-pr, agent-pool,
automerge, issue-transition, plan-issue, vercel-promote, archive),
removendo .github/workflows e .github/actions. Runner Forgejo v13 com
services Postgres por porta + DB_HOST via gateway do bridge. Libs de
agente sobre o novo cliente forgejo-api.mjs (zero dependências,
GITHUB_SERVER_URL/FORGEJO_API_URL), helpers de workflow plain-Node.
pnpm issue corrigido (await em função sync) e validado ao vivo. Testes:
forgejoApi.unit.spec.ts novo, pin do matrix do ci.yml atualizado.
Closes #1 (parte 1 — docs/issues/pool seguem na parte 2)
2026-08-16 23:32:20 -03:00
Francisco Solla
94204cfb5e
spike(OPS50): probe gateway com octetos na ordem certa
Spike — forgejo-runner v13 node24 actions + gateway / probe (push) Successful in 12s
2026-08-16 22:43:15 -03:00
Francisco Solla
d2a658891c
spike(OPS50): fix name yaml (dois-pontos)
Spike — forgejo-runner v13 node24 actions + gateway / probe (push) Failing after 1m32s
2026-08-16 22:40:12 -03:00
Francisco Solla
5f0e84b513
spike(OPS50): node24 actions + gateway no forgejo-runner v13
2026-08-16 22:38:23 -03:00
Francisco Solla
9506251cb4
spike(OPS50): probe gateway via /proc/net/route
Spike — service postgres via gateway do bridge / probe (push) Failing after 37s
2026-08-16 22:29:42 -03:00
Francisco Solla
ef7ae55f2e
spike(OPS50): probe gateway do bridge
Spike — service postgres via gateway do bridge / probe (push) Failing after 5s
2026-08-16 22:28:12 -03:00
Francisco Solla
c8ca121e15
spike(OPS50): probe v2
Spike — service postgres em porta própria / probe (push) Failing after 5s
2026-08-16 22:24:54 -03:00
Francisco Solla
890e1609cf
spike(OPS50): probe de alias do service postgres
2026-08-16 22:22:39 -03:00
Francisco Solla
d34f723db8
spike(OPS50): probe de service postgres em porta própria no runner
Spike — service postgres em porta própria / probe (push) Failing after 45s
2026-08-16 22:20:07 -03:00