11 KiB
Conta de teste dos agentes no ambiente de staging
Status: rascunho
Atualizado em: 2026-09-17
Issue: #1126
Priority: P2
Impeccable: A — N/A sem UI
Design UI: N/A — sem UI
Appetite: ~0,5 dia eng; um outcome verificável — o agente de work-issue consegue fazer login em staging e exercer a feature que acabou de entregar.
Responsável: —
Intenção
O fluxo work-issue passou a fechar com uma verificação funcional em staging (OPS121): depois do merge, o agente abre https://staging.jorgesolla1313.com.br e testa só a funcionalidade entregue. Na prática o agente trava na porta: ele tenta as credenciais do seed mínimo (pnpm db:seed:minimal) e elas não existem no staging, porque o banco de staging não é alimentado por esse seed. Resultado: o passo de verificação que devia pegar defeito real vira beco sem saída, e o loop merge→verificação não fecha.
Este item cria uma conta de teste dedicada e sintética no ambiente de staging, com credenciais que o agente consegue usar no momento do teste, para que o passo do OPS121 seja executável — sem dar ao agente acesso ao DATABASE_URL de staging/produção e sem criar um segundo mecanismo de autenticação.
Premissa corrigida no gate (2026-09-17): o banco de staging é uma cópia do banco de produção — e não o seed sintético que docs/AGENT-OPS.md:10 e docs/ops/teqo-1313-deploy.md:191 afirmam. Isso torna o item um assunto de PII/LGPD: a conta é sintética e o acesso existe só para verificar a entrega, mas qualquer credencial de staging deixa de poder ser commitada e o agente não pode exportar/registrar dado real.
Persona e fluxo
- Persona / contexto: agente executor (
work-issue) na máquina do humano, logo após o merge, com o browser apontando para staging; humano presente mas não pilotando. - Job principal: entrar em staging e exercer a feature recém-entregue para confirmar que ela funciona no ambiente real.
- Fluxo desejado: merge verde → aguardar o run de staging → abrir
/campanha/login→ entrar com a conta de teste documentada → testar a feature → registrar o desfecho (ou abrir Issue do defeito). - Anti-goals de produto: não é automação de login/e2e contra staging (fora de escopo no OPS103); não é segundo fluxo de autenticação; não é conta por feature/papel; não dá ao agente o banco de staging/produção nem
ALLOW_REMOTE_DB.
Objetivo e aceite
- Existe uma conta de teste sintética e exclusiva de staging que o agente usa no passo do OPS121.
- A conta é criada/atualizada de forma idempotente e restrita a staging — nunca roda contra produção nem contra o banco local.
- O agente não recebe
DATABASE_URLde staging/produção nemALLOW_REMOTE_DB; o acesso é só pela aplicação (login). - A credencial não é commitada (staging tem PII real): vive no ambiente do homeserver e é fornecida/liberada no momento do teste, pelo caminho documentado no passo de verificação; nunca vira segredo do GitHub nem entra no env do agente por padrão.
- Guardrails de PII/LGPD: a conta acessa a aplicação, nunca o banco; o agente não exporta, grava ou cola em Issue/PR dado real visto em staging (só o desfecho do teste); a criação da conta não toca dados de terceiros nem altera os dados copiados.
Dados (intenção)
- Vou apresentar dados? Não — é item de operação/credencial; nenhum número ou agregado é exibido.
- Decisões desbloqueadas: o agente decide se a feature entregue passou na verificação em staging; a coordenação decide se staging pode receber uma conta de teste e com que papel.
- Forma: adiada ao plano de implementação — restrição de produto: sem dashboard de acesso, sem auditoria de login nova.
Dados da decisão (literais)
- ID reservado: OPS125; kind chore; prio P2; slug
ops125-conta-de-teste-agentes-staging; sem UI (Impeccable A). - Ambiente-alvo:
https://staging.jorgesolla1313.com.br(noindex); containerteqo-staging; DBteqo_staging(cópia da produção, com PII real — confirmado no gate); porta127.0.0.1:1314; bucketteqo-media-staging. Tela de login:/campanha/login. - Tipo de identidade:
campaignUser(auth de campanha; login por email), nãousersdo admin — o fluxo de teste em/campanhausa a sessãocampaign-token. - Papel assumido:
coordinator("Coordenador Geral") — unrestricted, único caminho para o agente alcançar qualquer feature staff que o OPS121 precise testar (candidateé o equivalente;advisor/communicator/leadersão escopados e bloqueariam a maioria dos testes). O preço é ver dados reais; mitigado pela credencial não-commitada e pela regra de não-exportar. (assumido — validar com produto; ver questão de papel abaixo) - Identidade assumida: nome
Agente de Teste (staging), emailagente-teste@teqo.invalid(mesmo espaço.invaliddo seed sintético). (assumido — validar com produto) - Credencial: sintética e não commitada; vive no ambiente do homeserver (junto do
~/stack/teqo-staging.env, que nunca vira GitHub secret) e é liberada ao agente no run pelo humano. (assumido — o mecanismo exato é do plano de implementação) - Proibido como literal:
DATABASE_URLde staging/produção,ALLOW_REMOTE_DB=true, segredo de staging como GitHub secret, senha de staging em arquivo versionado. - Precedente de criação:
scripts/seed-minimal.mjs+scripts/lib/seed-minimal-manifest.mjs(upsert idempotente por email/username,.invalid, senha sintética) — referência de forma, não reusar o script (ele é local-only por guard e pina dados que colidiriam com a cópia real).
Direção no codebase (hipótese)
- Áreas prováveis:
src/collections/CampaignUser.ts(roles/auth),src/app/(campaign)/campanha/actions/auth.ts+login/(login por email),scripts/seed-minimal.mjs/scripts/lib/seed-minimal-manifest.mjs(precedente),.agents/skills/work-issue/execution-pipeline.md(§Verificação pós-deploy staging) edocs/ops/teqo-1313-deploy.md(bootstrap de staging). - Precedente a olhar: OPS121 (#1079, passo de verificação pós-deploy) e OPS103 (
docs/plans/ops103-staging-homeserver.md) — donos do staging e dos seus limites;scripts/assert-local-database.mjsescripts/lib/cli.mjs(requiresWriteConfirm) — donos dos guards de escrita. - Risco de acoplamento: não transformar isto em mudança do povoamento de staging (decisão do OPS103); não regredir os guards de banco; não acoplar o passo OPS121 a um segredo que o agente não alcança.
Dependências
- OPS121 (#1079) — o passo de verificação em staging que precisa do login (dono do contexto).
- OPS103 (staging no homeserver) — dono do banco/ambiente; este item só adiciona a conta.
- Nenhuma dura.
Fora de escopo
- Mudar a origem dos dados de staging (cópia de prod vs seed sintético) — decisão do OPS103, não deste item.
- Corrigir nos docs a afirmação de que staging é sintético (
docs/AGENT-OPS.md:10,docs/ops/teqo-1313-deploy.md:191,docs/plans/ops103-staging-homeserver.md:52): destino OPS103 (dono do ambiente), não este lote de conta de teste. - Conta por papel (advisor/leader/communicator) ou por feature; e2e automatizado de login contra staging.
- Qualquer escrita em produção, no admin (
users) ou em dados de terceiros.
Rabbit holes de produto
- "Já que vamos mexer, roda o seed mínimo inteiro no staging." Se alguém "só completar": pina municípios/objetos/Consent e pode colidir com os dados reais de staging. Corte neste item: só a conta de teste.
- "Cria uma conta para cada papel." Se alguém "só completar": N credenciais para manter e documentar. Corte neste item: uma conta
coordinator; papéis específicos só com evidência. - "Deixa o agente conectar direto no banco de staging para criar a conta." Se alguém "só completar": viola o guardrail "agente nunca recebe
DATABASE_URLde staging/prod". Corte neste item: criação por bootstrap no homeserver; o agente só faz login.
Questões em aberto (produto)
- De onde vêm os dados de staging? Resolvido no gate (2026-09-17): cópia do DB de produção, com PII real — os docs commitados (
docs/AGENT-OPS.md:10;docs/ops/teqo-1313-deploy.md:191;docs/plans/ops103-staging-homeserver.md:52) estão desatualizados e a correção deles tem destino (ver Fora de escopo). Consequência travada: credencial não commitada; regra de não-exportar PII; criação da conta só por bootstrap no homeserver. - Com que papel? Opções: A)
coordinator(unrestricted; alcança qualquer feature, mas vê dado real) | B)candidate(unrestricted, equivalente para acesso) | C) papel escopado por feature. Recomendação: A nesta fatia — C bloquearia a maioria dos testes e exigiria uma conta por item; B não muda a exposição. Se produto exigir menor exposição, C vira item próprio com a lista de features. (assumido — validar com produto) - Quando a credencial é liberada? Opções: A) o humano fornece no run de verificação (OPS121) | B) o agente lê de um arquivo gitignored do worktree provisionado. Recomendação: A — nenhum segredo de staging passa a existir no env do agente por padrão; B só se o atrito do passo manual justificar.
- Quem cria a conta? Opções: A) script idempotente de bootstrap no homeserver, restrito a staging por guard | B) criação manual de admin. Recomendação: A — repetível e auditável; manual não sobrevive a recriação do banco.
Referências
- GitHub Issue: #1126
- Design UI (gate): N/A — sem UI
- Planos irmãos:
ops121-verificacao-pos-deploy-staging-work-issue.md(OPS121/#1079),ops103-staging-homeserver.md(OPS103) - Arquivos-chave (pista, não contrato):
src/collections/CampaignUser.ts,src/app/(campaign)/campanha/actions/auth.ts,src/app/(campaign)/campanha/login/,scripts/seed-minimal.mjs,scripts/lib/seed-minimal-manifest.mjs,.agents/skills/work-issue/execution-pipeline.md,docs/ops/teqo-1313-deploy.md,docs/AGENT-OPS.md - Testes a olhar:
tests/unit/seedMinimalManifest.unit.spec.ts,tests/int/campaignAuth.int.spec.ts(se existir),tests/e2e/campaignE2EFixtures.ts AGENTS.md/AGENTS-campaign.md(auth de campanha) /AGENTS-infra.md(staging/deploy) /docs/AGENT-OPS.md(tabela de ambientes)
Self-score (shaping)
4/5 — (1) fatia = um outcome verificável (o agente loga em staging e testa a entrega); (2) appetite de ~0,5 dia comporta a conta + o caminho de credencial; (3) persona, job e aceite em linguagem de produto; (4) direção no codebase é hipótese; (5) zero decisão dura de engenharia — mecanismo de criação, papel e guarda ficam para o plano de implementação. Ressalva: staging tem PII real (confirmado no gate), então a credencial não é commitada e a regra de não-exportar é guardrail de aceite, não detalhe.