{
 "repo": "melgarafael/DeskcommCRM",
 "branches_remotas": [
  "cal/w0-schema",
  "cal/w1-api",
  "cal/w1-google",
  "cal/w1-ui",
  "cal/w2-agendas",
  "cal/w2-mcp",
  "chore/deps-major-bumps",
  "ci/e2e-serial",
  "ci/rebalancear-partes-do-e2e",
  "debug/mfa-reset",
  "docs/changelog-agenda",
  "docs/living-system-audit",
  "docs/living-system-doctrine",
  "ecc-tools/DeskcommCRM-1783368833211",
  "feat/agenda-grade-interativa",
  "feat/atualizar-pela-ui",
  "feat/calendario-vivo",
  "feat/casos-vivos",
  "feat/crm-vivo",
  "feat/ia-360-w2-reter",
  "feat/ia-360-w3-escalar",
  "feat/inbox-multimodal",
  "feat/marca-o-que-faltou",
  "feat/marketplace-de-extensoes",
  "feat/operacao-visivel",
  "feat/radar-assumir",
  "feat/skills-embutidas",
  "feat/whatsapp-connections",
  "fix/192-ddl-separado-do-runtime",
  "fix/218-fiacao-da-central",
  "fix/237-zod-nos-webhooks-de-canal",
  "fix/265-tipo-de-fonte-de-conhecimento",
  "fix/274-marca-logo-instavel",
  "fix/agenda-producao",
  "fix/agente-mudo",
  "fix/ai-invocations-sem-agente",
  "fix/chave-da-instalacao-no-chat",
  "fix/ci-timeline-query-env",
  "fix/e2e-429-gotrue",
  "fix/o-fluxo-publicado-nao-abre-vazio",
  "fix/oauth-callback-alcancavel",
  "fix/reset-password-mfa",
  "fix/service-role-key-formato-novo",
  "fv/gatilhos",
  "integracao/triagem-17set-37-agenda-p2",
  "integracao/triagem-17set-37-canais",
  "integracao/triagem-18set-canais",
  "main",
  "pr-346",
  "pr121",
  "pr126",
  "pr127",
  "qa/lote-12",
  "qa/w2-fontes-defasadas-cego",
  "rebase-52",
  "release/1.35.0",
  "release/consolida-1.5.0",
  "release/v1.1.0",
  "resgate/237-zod-nos-webhooks-de-canal",
  "resolve-51",
  "test/179-onboarding-fresco-no-ci",
  "test/239-rede-visual-antes-do-tailwind4",
  "test/sent-via-cabe-na-constraint",
  "tmp-api",
  "tmp-g2",
  "tmp-sch",
  "tmp-ui",
  "tmp-ui2",
  "tmp-verify",
  "tri37/agenda-p2-nova",
  "triagem/1066-auditoria-da-primeira-batida",
  "triagem/1114-onda1",
  "triagem/1135-forward-fix",
  "triagem/275",
  "triagem/322",
  "triagem/326",
  "triagem/327",
  "triagem/327b",
  "triagem/466-invariante",
  "triagem/714-smtp-atualizado",
  "triagem/762-reconciliado",
  "triagem/799-reconciliado",
  "triagem/965-recorte-google-ads",
  "triagem/c202-demandas",
  "triagem/dossie-vermelho",
  "triagem/doutrina-auth-de-servidor",
  "triagem/followup-janela-nao-mata-enrollment",
  "triagem/hook-migration-ignora-a-main",
  "triagem/lote-12-g1",
  "triagem/lote-12-g2",
  "triagem/lote-12-g3",
  "triagem/lote-12-g4",
  "triagem/lote-12-g5",
  "triagem/lote-12-g6",
  "triagem/lote-e-consertos",
  "triagem/pr198-testes-de-borda",
  "triagem/pr201-reprodutor",
  "triagem/recorte-928-atualizado",
  "triagem/resgate-803-risco",
  "triagem/resgate-gyanu2507",
  "triagem/waha-54-reconciliado",
  "triagem/wconf-194-200",
  "triagem/wconf-194-201",
  "voz/fundacao"
 ],
 "branches_locais": [
  "arq/pr111-modelo",
  "backup-rsky",
  "baseline-main",
  "c865",
  "cal/w0-schema",
  "cal/w1-api",
  "cal/w1-google",
  "cal/w1-ui",
  "cal/w2-agendas",
  "cal/w2-historico",
  "cal/w2-mcp",
  "ceptico386",
  "ceptico400",
  "chore/credito-do-automatikpg",
  "chore/deps-major-bumps",
  "chore/fragmento-403",
  "chore/mailmap-credito-do-contribuidor",
  "chore/manutencao-issues",
  "chore/o-que-a-1-10-0-prometeu",
  "chore/pin-pnpm",
  "chore/release-1-11-0",
  "chore/reposicionamento-branding",
  "chore/vercel-ts-sai",
  "chore/vitest-security",
  "chore/worktree-sync",
  "chore/zod4-assess",
  "ci/a-acolhida-sai-sozinha",
  "ci/e2e-expand",
  "ci/e2e-serial",
  "ci/e2e-smoke",
  "ci/rebalancear-as-partes-do-e2e",
  "ci/rebalancear-partes-do-e2e",
  "conserto-1072",
  "credito/628",
  "debug/mfa-reset",
  "docs/a-triagem-aprende-com-a-fila",
  "docs/cal-ponte-agendamento-followup",
  "docs/catalogo-espanhol-coberto",
  "docs/changelog-agenda",
  "docs/changelog-respondi",
  "docs/ci-e2e-sync",
  "docs/decisoes-do-dono-credito-e-fork",
  "docs/doutrina-packaging",
  "docs/doutrina-sistema-vivo-manual",
  "docs/e2e-obrigatorio",
  "docs/evidencia-antigravity",
  "docs/evidencia-claim-do-followup",
  "docs/fragmento-da-agenda",
  "docs/fragmento-do-mfa",
  "docs/fragmento-do-validador-da-openrouter",
  "docs/fragmentos-das-contribuicoes",
  "docs/living-system-audit",
  "docs/living-system-doctrine",
  "docs/o-espelho-tambem-mentia",
  "docs/o-pr-de-fork-esta-no-lugar-certo",
  "docs/plataforma-extensoes-20260914",
  "docs/protocolo-claim",
  "docs/prova-vps-1.6.0",
  "docs/readme-roadmap",
  "docs/release-1-2-1",
  "docs/release-chega-na-lp",
  "docs/triagem-corta-release",
  "docs/triagem-o-conflito-que-o-typecheck-pega",
  "docs/vercel-nao-hospeda-o-crm",
  "e2e/reproduz-webhooks",
  "edita/release-1.20.0",
  "extracao/418-duplicados",
  "extracao/418-importar-leads",
  "extracao/418-lote",
  "extracao/418-relatorio",
  "extracao/418-tarefas",
  "feat/agenda-grade-interativa",
  "feat/atualizar-pela-ui",
  "feat/calendario-vivo",
  "feat/canais-oficial",
  "feat/casos-vivos",
  "feat/casos-vivos-numero-interno",
  "feat/catalogo-de-produtos",
  "feat/comunidade-360",
  "feat/comunidade-360-entrega",
  "feat/comunidade-360-integracao",
  "feat/comunidade-360-waha",
  "feat/conversa-vira-lead",
  "feat/coordinated-upgrade",
  "feat/crm-vivo",
  "feat/disciplina-de-release",
  "feat/extensoes-declarativas",
  "feat/extensoes-declarativas-20260914",
  "feat/fila-de-leads-por-atendente",
  "feat/followup-flows",
  "feat/followup-vivo",
  "feat/hostgator-selfhost",
  "feat/i18n-espanhol",
  "feat/ia-360-mcp",
  "feat/ia-360-w2-reter",
  "feat/ia-360-w3-escalar",
  "feat/ia-360-w5-evoluir",
  "feat/ia-agenda-de-verdade",
  "feat/idade-do-numero",
  "feat/inbox-multimodal",
  "feat/indice-de-atrito",
  "feat/instalador-marca-comunidade",
  "feat/marca-do-produto",
  "feat/marca-o-que-faltou",
  "feat/marca-propria",
  "feat/marketplace-de-extensoes",
  "feat/navegacao-agrupada",
  "feat/operacao-visivel",
  "feat/painel-de-administracao",
  "feat/provedores-de-ia",
  "feat/radar-assumir",
  "feat/radar-de-risco",
  "feat/rag-completo",
  "feat/release-do-github-automatica",
  "feat/roteador-escolhe-modelo",
  "feat/skills-embutidas",
  "feat/teto-de-orcamento-real",
  "feat/webhooks-historico-e-agente",
  "fix/1041-baseline-nao-refaz-o-que-ja-esta-certo",
  "fix/192-ddl-separado-do-runtime",
  "fix/194-colisao",
  "fix/196-identidade-de-mensagem-e-rajada",
  "fix/200-isconfigured",
  "fix/201-instalador",
  "fix/236-credencial-por-organizacao",
  "fix/237-zod-nos-webhooks-de-canal",
  "fix/238-uma-engine-de-pdf",
  "fix/260-indice-do-claim-da-fila",
  "fix/261-poda-da-fila-e-do-audit",
  "fix/265-tipo-de-fonte-de-conhecimento",
  "fix/274-marca-logo-instavel",
  "fix/290-webhook-waha-recusa-deixa-rastro",
  "fix/420-adaptador-do-sweep",
  "fix/435-objeto-nao-comunicativo",
  "fix/887-prelude-acl-de-tabelas",
  "fix/a-agenda-nao-mente-sobre-id-de-contato",
  "fix/a-busca-do-catalogo-nao-corta-cego",
  "fix/a-busca-do-inbox-acha-pelo-contato",
  "fix/a-instalacao-configura-a-url-dos-emails",
  "fix/a-main-volta-ao-verde",
  "fix/a-tela-le-a-mesma-capacidade-do-motor",
  "fix/abas-derivam-do-comando",
  "fix/ach-03-conclusao-dependia-do-modelo",
  "fix/agenda-formulario-rolagem",
  "fix/agenda-lote-2",
  "fix/agenda-producao",
  "fix/agenda-semana-sem-vaga",
  "fix/agenda-ui-e-ver-na-agenda",
  "fix/agente-mudo",
  "fix/agente-mudo-deixa-rastro",
  "fix/agente-pausado-nao-atende",
  "fix/ai-invocations-agent-nullable",
  "fix/alertas-de-seguranca-github",
  "fix/allowlist-de-jornada-encolhe",
  "fix/aquecimento-aceita-a-data-de-hoje",
  "fix/aritmetica-de-infinity",
  "fix/auth-getuser-erro-mudo",
  "fix/aviso-sem-chave-preposicao",
  "fix/chave-da-instalacao-no-chat",
  "fix/chave-openai-do-env",
  "fix/ci-timeline-query-env",
  "fix/claude-md-contagem-specs",
  "fix/comunidade-agenda-final",
  "fix/contagem-do-painel-derivada",
  "fix/credenciais-de-ia-voltam-a-ser-lidas-por-manager",
  "fix/cron-conserta-na-primeira-passada",
  "fix/drain-ate-esvaziar",
  "fix/duas-portas-de-vazamento",
  "fix/e2e-429-gotrue",
  "fix/e2e-a-classe-inteira-da-primeira-org",
  "fix/e2e-automacao-nao-depende-do-relogio",
  "fix/e2e-cobertura-ci",
  "fix/e2e-de-automacao-nao-depende-do-relogio",
  "fix/e2e-em-paralelo",
  "fix/e2e-sentry-off",
  "fix/e2e-teto-de-login-por-ip",
  "fix/e2e-troca-de-org-espera-a-transicao",
  "fix/editor-de-agente-salva-o-cadastro",
  "fix/falha-silenciosa-rastro",
  "fix/gateway-replay-guard",
  "fix/google-volta-e-provider",
  "fix/grade-contaminacao-entre-specs",
  "fix/guarda-da-release-nao-exige-diretorio-vazio",
  "fix/guias-alcance-e-yaml",
  "fix/handoff-avisa-o-lead",
  "fix/harness-fiel-ao-supabase",
  "fix/heranca-de-provider-nos-pontos-auxiliares",
  "fix/imagens-ok-permissions",
  "fix/importar-leads-usa-o-raio-do-produto",
  "fix/inbox-realtime-token-do-socket",
  "fix/inbox-tempo-real-fora-do-gate",
  "fix/install-detecta-copia-irma",
  "fix/install-secret-paste-guard",
  "fix/invite-accept-rls",
  "fix/issues-64-66",
  "fix/issues-triadas",
  "fix/janela-domingo-liberado-por-padrao",
  "fix/jmpo-138",
  "fix/jmpo-138-admin",
  "fix/jmpo-138-admin-canais",
  "fix/jmpo-140-traefik-host",
  "fix/kit-baseline-grant-reaberto",
  "fix/kit-baseline-retry-e-duplicatas",
  "fix/lgpd-anonimizacao-retoma",
  "fix/limiar-de-sentimento-vem-do-agente-da-conversa",
  "fix/manifest-linha-orfa-do-merge",
  "fix/marca-logo-memo-e-regua",
  "fix/migrations-nnnn-0068",
  "fix/namespace-derivado-com-ancora",
  "fix/notificacoes-corrida-na-hidratacao",
  "fix/numero-que-nao-e-atributo-nao-zera-a-busca",
  "fix/o-agente-enxerga-os-compromissos-do-contato",
  "fix/o-agente-so-indexa-um-material",
  "fix/o-canal-stable-move-junto",
  "fix/o-changelog-cabe-na-tela-do-operador",
  "fix/o-checkpoint-declara-o-referencial",
  "fix/o-count-ausente-nao-vira-catalogo-inteiro",
  "fix/o-eco-do-proprio-envio-nao-cala-a-ia",
  "fix/o-fluxo-publicado-nao-abre-vazio",
  "fix/o-prompt-editado-e-o-que-o-motor-executa",
  "fix/o-titulo-do-fragmento-quebrava-o-yaml",
  "fix/o-ultimo-nnnn-nao-e-o-ultimo-arquivo",
  "fix/o-verify-para-de-morrer-de-relogio",
  "fix/oauth-callback-alcancavel",
  "fix/opt-out-e-knobs-decorativos",
  "fix/pausar-agente-cala-em-todos-os-caminhos",
  "fix/planilha-em-latin-1-nao-entra-corrompida",
  "fix/preco-da-planilha-nao-multiplica-por-dez",
  "fix/producao-schema-e-diagnostico",
  "fix/protecao-de-envio-aceita-data-em-branco",
  "fix/provedores-de-ia-forward",
  "fix/rascunho-superado-nao-e-regravado",
  "fix/regua-do-agora-borda",
  "fix/relatorio-seguranca-comunidade",
  "fix/release-140-forward",
  "fix/reset-password-mfa",
  "fix/schedule-followup-guard",
  "fix/segurar-acervo-do-whatsapp-ate-decisao-999",
  "fix/service-role-key-formato-novo",
  "fix/silencio-infinito-do-worker",
  "fix/sistema-vivo-operador",
  "fix/standalone-perde-swc-helpers",
  "fix/sync-google-dois-sentidos",
  "fix/tag-so-do-pr-de-release",
  "fix/test-db-vaza-volume",
  "fix/teto-de-relogio-nas-chamadas-ao-waha",
  "fix/triagem-202",
  "fix/troca-de-org-nao-termina",
  "fix/u6c-achados",
  "fix/uuid-de-modelo-nao-vira-filtro",
  "fix/versao-publicada-vem-do-ponteiro",
  "fix/voz-audio-uma-perna",
  "fix/voz-chamada-sem-conexao",
  "fix/voz-configuracao-vps",
  "fix/voz-consentimento",
  "fix/webhooks-secret-encryption",
  "fix/webhooks-spec-tag-no-title",
  "fix/whatsapp-desconecta-e-401",
  "fix/worker-ocioso-egress",
  "fusion-ai-sdk7-engine",
  "fusion-main-reconcile",
  "fusion-vendaval-rescue",
  "fv/contrato",
  "fv/fila",
  "fv/gatilhos",
  "fv/motor",
  "fv/motor-stop-catraca",
  "fv/vocabulario",
  "gov/G1",
  "gov/G2",
  "gov/G3",
  "gov/G4",
  "gov/G5",
  "gov/G6",
  "gov/setup",
  "hotfix/voz-hg-vps-1.23",
  "integra/rodada-set06",
  "integra/w0",
  "integracao/triagem-12set",
  "integracao/triagem-14set",
  "integracao/triagem-14set-l2",
  "integracao/triagem-14set-l3",
  "integracao/triagem-14set-l4",
  "integracao/triagem-14set-l5",
  "integracao/triagem-15set-l10",
  "integracao/triagem-15set-l12",
  "integracao/triagem-16set-l13",
  "integracao/triagem-16set-l14",
  "integracao/triagem-17set-37-agenda",
  "integracao/triagem-17set-37-canais",
  "integracao/triagem-17set-37-canais-b",
  "integracao/triagem-17set-37-desbloqueio",
  "integracao/triagem-17set-37a",
  "integracao/triagem-17set-37a-b",
  "integracao/triagem-17set-37a-c",
  "integracao/triagem-17set-37b",
  "integracao/triagem-18set-canais",
  "integration/all-to-main",
  "integration/comunidade-main-final",
  "l37desbloq",
  "lote-w4",
  "maestro/pr113-aditivo",
  "main",
  "main-check",
  "merge-vendaval-fusion-import",
  "p1010",
  "p1120",
  "p1125",
  "p1127",
  "pp1120",
  "pp1127",
  "pp849",
  "pp939",
  "pr-1072-conserto",
  "pr-108-head",
  "pr-327",
  "pr-335",
  "pr-337",
  "pr-338",
  "pr-340",
  "pr-345",
  "pr-346",
  "pr-352",
  "pr-354",
  "pr-406",
  "pr-418",
  "pr-428",
  "pr-465",
  "pr-474-head",
  "pr-492",
  "pr-493",
  "pr-494",
  "pr-495",
  "pr-497",
  "pr-497-t",
  "pr-498",
  "pr-499",
  "pr-500",
  "pr-501",
  "pr-504",
  "pr-505",
  "pr-508",
  "pr-517",
  "pr-517-t",
  "pr-518",
  "pr-520",
  "pr-521",
  "pr-521-local",
  "pr-522",
  "pr-523",
  "pr-524",
  "pr-526",
  "pr-547",
  "pr-659",
  "pr-660",
  "pr-663",
  "pr-664",
  "pr-666",
  "pr-672",
  "pr-679",
  "pr-681",
  "pr-682",
  "pr-688",
  "pr-705",
  "pr-714",
  "pr-716",
  "pr-717",
  "pr-718",
  "pr-719",
  "pr-720",
  "pr-725",
  "pr-726",
  "pr-727",
  "pr-730",
  "pr-731",
  "pr-732",
  "pr-733",
  "pr-735",
  "pr-736",
  "pr-737",
  "pr-738",
  "pr-739",
  "pr1008",
  "pr1017",
  "pr1017x",
  "pr1038-check",
  "pr1070",
  "pr108-jmpo",
  "pr1088",
  "pr109",
  "pr110",
  "pr110-jmpo",
  "pr1105",
  "pr1107",
  "pr1107f",
  "pr1107n",
  "pr111-jmpo",
  "pr1117",
  "pr112",
  "pr113",
  "pr113-jmpo",
  "pr114-jmpo",
  "heads/pr1143",
  "pr1143b",
  "pr1160",
  "pr121",
  "pr126",
  "pr127",
  "pr138",
  "pr140",
  "pr159",
  "pr321-cetico",
  "pr322-cetico-check",
  "pr322-check",
  "pr322-medicao",
  "pr322-medida",
  "pr345-ro",
  "pr345-tmp",
  "pr345b",
  "pr345c",
  "pr345d",
  "pr345f",
  "pr345g",
  "pr345head",
  "heads/pr352",
  "pr352-ro",
  "pr352-tmp",
  "pr352-triage",
  "pr375",
  "pr375-ro",
  "pr375-tmp",
  "pr375-triage",
  "pr375v",
  "pr379",
  "pr379-tmp",
  "pr379v",
  "pr380-tmp",
  "pr380-verify",
  "pr386-tmp",
  "pr386-triagem",
  "pr388-check",
  "pr388-ro",
  "pr388-tmp",
  "pr390-refute",
  "pr390-ro",
  "pr390-tmp",
  "pr395-cetico",
  "pr395-tmp",
  "pr395-triagem",
  "pr396-tmp",
  "pr397",
  "pr397-readonly",
  "pr400-check",
  "pr400-ro",
  "pr400-tmp",
  "pr400-triagem",
  "pr400-verify",
  "pr401-tmp",
  "pr403-tmp",
  "pr406",
  "pr406-tmp",
  "pr410-tmp",
  "pr415",
  "pr416",
  "pr417",
  "pr417b",
  "pr418",
  "pr420",
  "pr420b",
  "pr421-head",
  "pr423-head",
  "pr424-head",
  "pr425-head",
  "pr432",
  "pr438",
  "pr441c",
  "pr442",
  "pr465",
  "pr466",
  "pr468",
  "pr469",
  "pr471",
  "pr473",
  "pr475",
  "pr477",
  "pr485",
  "pr487",
  "pr495-check",
  "pr495-rede",
  "pr499",
  "pr500",
  "pr501-local",
  "pr502",
  "pr503",
  "pr507",
  "pr513",
  "pr518",
  "pr556",
  "pr559",
  "pr569head",
  "pr612-head",
  "pr622-head",
  "pr628",
  "pr628-head",
  "pr631h",
  "pr643h",
  "pr644-head",
  "pr645h",
  "pr657",
  "pr660h",
  "pr664",
  "pr671",
  "pr683",
  "pr695",
  "pr696",
  "pr706",
  "pr711",
  "pr726",
  "pr734",
  "pr849",
  "pr865",
  "pr92-readonly",
  "pr92-verify",
  "previa-556",
  "previa-6",
  "previa/278",
  "previa/466",
  "previa/657",
  "previa/679-682",
  "previa/731",
  "previa/733",
  "previa/737",
  "previa/quatro",
  "preview/main-menu",
  "probe/integracao-12set",
  "prov939",
  "q1042",
  "q1047",
  "q1051",
  "qa/lote-10",
  "qa/lote-12",
  "qa/lote1-14set",
  "qa/vps-experience",
  "qa/vps-zero",
  "qa/w2-fontes-defasadas-cego",
  "rebase-52",
  "recon/682-sobre-o-stack",
  "recon/fusion-on-main",
  "reconcile/crm-vivo",
  "reconciliacao/643",
  "reconciliacao/645",
  "reconciliacao/664",
  "reconciliacao/671",
  "reconciliacao/695",
  "reconciliacao/696",
  "reconciliacao/706",
  "reconciliacao/726",
  "release/1.2.0",
  "release/1.6.0",
  "release/consolida-1.5.0",
  "release/v1.1.0",
  "release/v1.3.0",
  "resgate/660-pecas",
  "resgate/rafaesky",
  "resolve-51",
  "revisao-333",
  "test/179-onboarding-fresco-no-ci",
  "test/239-rede-visual-antes-do-tailwind4",
  "test/545-isolamento-compromissos-e-credenciais",
  "test/crmv5w-escritor-real-do-score",
  "test/gate-env-vazia-no-exemplo",
  "test/gatilho-dos-jobs-de-entrega",
  "test/guardas-dos-8-defeitos",
  "test/invariante-do-backoff-da-fila",
  "test/numero-de-jornada-unico",
  "test/rede-da-fiacao-do-rascunho",
  "test/sent-via-cabe-na-constraint",
  "test/webpush-jornada-pela-tela",
  "tmp-api",
  "tmp-g2",
  "tmp-sch",
  "tmp-ui",
  "tmp-ui2",
  "tmp-verify",
  "tri-w538",
  "heads/tri/566",
  "tri37/1036",
  "tri37/1037",
  "tri37/1049",
  "tri37/1061",
  "tri37/1066",
  "tri37/1067-repro",
  "tri37/1069",
  "tri37/849-recorte",
  "tri37/939",
  "tri37/agenda-p2-nova",
  "tri466-medicao",
  "tri912b/previa-719",
  "tri912b/previa-720",
  "triagem/1042-conserto",
  "triagem/1047-conserto",
  "triagem/1051-conserto",
  "triagem/1054-conserto",
  "triagem/1058-comportamento",
  "triagem/1066-auditoria-da-primeira-batida",
  "triagem/1079-conflito",
  "triagem/1079-conserto",
  "triagem/1114-onda1",
  "triagem/1133-conserto",
  "triagem/1134-conserto",
  "triagem/1135-forward-fix",
  "triagem/263",
  "triagem/263b",
  "triagem/266",
  "triagem/267",
  "triagem/268",
  "triagem/270",
  "triagem/271",
  "triagem/271b",
  "triagem/273",
  "triagem/273b",
  "triagem/275",
  "triagem/282",
  "triagem/283",
  "triagem/283b",
  "triagem/284",
  "triagem/295",
  "triagem/302",
  "triagem/305",
  "triagem/313",
  "triagem/314",
  "triagem/318",
  "triagem/320",
  "triagem/321",
  "triagem/322",
  "triagem/322b",
  "triagem/326",
  "triagem/326b",
  "triagem/326c",
  "triagem/327",
  "triagem/327b",
  "triagem/337",
  "triagem/338",
  "triagem/340",
  "triagem/345-reconciliado",
  "triagem/346",
  "triagem/406-reconciliado",
  "triagem/465-cor",
  "triagem/465-encerramento",
  "triagem/465-health",
  "triagem/465-marca",
  "triagem/465-recorte",
  "triagem/466-invariante",
  "triagem/474-previa",
  "triagem/518-meta-ads",
  "triagem/552-mensagem-de-nao-encontrado",
  "triagem/556-zona-de-perigo",
  "triagem/565-moeda-da-organizacao",
  "triagem/569-resolved-at",
  "triagem/570-fragmento-do-fuso",
  "triagem/571-split-de-valor",
  "triagem/588-cadastro-sem-confirmacao-de-email",
  "triagem/631-rotulo-de-origem",
  "triagem/643-teste-caminho-producao",
  "triagem/645-typecheck",
  "triagem/657-claim",
  "triagem/659-cerca-do-logo",
  "triagem/661-guarda-post-sem-proxy",
  "triagem/671-padrao-preserva-llm",
  "triagem/682-reconciliado",
  "triagem/683-crontab",
  "triagem/683-sentry-tracing",
  "triagem/705-reconciliado",
  "triagem/714-smtp-atualizado",
  "triagem/714-smtp-como-opcao",
  "triagem/762-reconciliado",
  "triagem/781-isolamento",
  "triagem/799-reconciliado",
  "triagem/965-recorte-google-ads",
  "triagem/983-consertos",
  "triagem/agenda-ocupacao-nao-e-acionavel",
  "triagem/c202-demandas",
  "triagem/cerca-le-cliente-injetado",
  "triagem/conta-de-n-vias",
  "triagem/dossie-vermelho",
  "triagem/doutrina-auth-de-servidor",
  "triagem/evolucao-08set",
  "triagem/evolucao-11set",
  "triagem/evolucao-14set",
  "triagem/evolucao-14set-b",
  "triagem/evolucao-14set-c",
  "triagem/evolucao-da-skill",
  "triagem/hook-migration-ignora-a-main",
  "triagem/instrumentos",
  "triagem/licoes-74-77",
  "triagem/lote-12-g1",
  "triagem/lote-12-g2",
  "triagem/lote-12-g3",
  "triagem/lote-12-g4",
  "triagem/lote-12-g5",
  "triagem/lote-12-g6",
  "triagem/lote-e-consertos",
  "triagem/lote-extensoes-37",
  "triagem/p189-reprodutor",
  "triagem/p194-reprodutor",
  "triagem/pr-1053-prosa",
  "triagem/pr-556-recorte",
  "triagem/pr1088-conserto",
  "triagem/pr188-reconciliacao",
  "triagem/pr198-testes-de-borda",
  "triagem/pr199-filtro-de-tag",
  "triagem/pr201-reprodutor",
  "triagem/pr559-preview",
  "triagem/pr559-preview2",
  "triagem/previa-716",
  "triagem/previa-717",
  "triagem/previa-718",
  "triagem/prova-de-tela-agenda-17set",
  "triagem/proveniencia-939",
  "triagem/recorte-1008-resolve-api-token",
  "triagem/recorte-928",
  "triagem/recorte-928-atualizado",
  "triagem/resgate-803-risco",
  "triagem/resgate-gyanu2507",
  "triagem/travas-de-suporte-na-instalacao",
  "triagem/tw4-345",
  "triagem/types-node-22",
  "triagem/waha-54-reconciliado",
  "triagem/wconf-194-200",
  "triagem/wconf-194-201",
  "v1079",
  "v963",
  "varredura/afirmacoes-de-estado",
  "vendaval-fusion",
  "verifica/334",
  "verificacao",
  "voz/completa",
  "voz/desligar",
  "voz/fundacao",
  "voz/som",
  "wip/operacao-visivel-2026-07-28",
  "worktree-agent-a22f0d14cc6917f27",
  "worktree-agent-a28aaeead5de5e10d",
  "worktree-agent-a2ad72cede05d0f6f",
  "worktree-wf_0ab394a6-387-1",
  "worktree-wf_0ab394a6-387-2",
  "worktree-wf_11ab4c12-e06-1",
  "worktree-wf_6b6fd204-90b-2",
  "worktree-wf_6b6fd204-90b-3",
  "worktree-wf_6b6fd204-90b-5",
  "worktree-wf_6b6fd204-90b-6",
  "worktree-wf_739c1243-6b0-1",
  "worktree-wf_739c1243-6b0-2",
  "worktree-wf_739c1243-6b0-3",
  "worktree-wf_7b3d25f1-e38-1",
  "worktree-wf_7b3d25f1-e38-2",
  "worktree-wf_7b3d25f1-e38-3",
  "worktree-wf_7bf9b89a-b3d-1",
  "worktree-wf_7bf9b89a-b3d-2",
  "worktree-wf_7bf9b89a-b3d-3",
  "worktree-wf_7bf9b89a-b3d-4",
  "worktree-wf_7bf9b89a-b3d-5",
  "worktree-wf_9148ee27-a20-1",
  "worktree-wf_9148ee27-a20-2",
  "worktree-wf_983b38b1-f96-1",
  "worktree-wf_9d790ccf-8a8-1",
  "worktree-wf_9d790ccf-8a8-2",
  "worktree-wf_b43cac81-8dd-1",
  "worktree-wf_b43cac81-8dd-2",
  "z1051",
  "z865"
 ],
 "nossos": {
  "prs": [
   {
    "body": "Recorte do PR **#928**, de **@cabindaferreira**. O trabalho é dele; a triagem fatiou, atualizou contra a `main` e renumerou.\n## A pergunta que eu mandei medir primeiro\nA decisão do dono sobre este PR (`Decisão PRs - rafael/25`) foi **\"(x) (a) localização por organização, como issue de desenho\"** → issue **#1033** → entregue pelo **#1135**, mesclado hoje. Então a primeira coisa a medir era: **o recorte virou redundante?**\n**Não.** A #1033 entregou o *seam* de localização por organização; o recorte é o **conteúdo**. Medido tema a tema, cada sonda com controle positivo:\n**78% do recorte (746 de 960 linhas) continua valendo por si**, com os dois maiores temas intactos. E o recorte **já importa** o helper canônico `moedaDaOrganizacao` da `main` — sem duplicar o que a #1033 trouxe.\n## O que saiu, e por quê\n## Um item que NÃO entrou, e é dívida declarada\n## Renumeração\n## NÃO MEDIDO",
    "createdAt": "2026-09-18T12:45:47Z",
    "headRefName": "triagem/recorte-928-atualizado",
    "mergedAt": null,
    "number": 1177,
    "state": "OPEN",
    "title": "feat(rag/crm): CSV no acervo, moeda da organização no funil e Angola — recorte do #928, no crédito de @cabindaferreira"
   },
   {
    "body": "Recorte do PR **#714**, de **@betoarts**. O trabalho é dele; a triagem fatiou, atualizou contra a `main` e renumerou.\n## A decisão do dono, que autoriza o recorte\n## Ainda faz sentido? Medido, não deduzido\n## O conflito e a renumeração\n## Um defeito que o recorte já carregava, e não era do merge\n## Sabotagem — previu 6, mediu 6, nomeados um a um\n## Gates\n## NÃO MEDIDO / dívida declarada",
    "createdAt": "2026-09-18T12:45:16Z",
    "headRefName": "triagem/714-smtp-atualizado",
    "mergedAt": null,
    "number": 1176,
    "state": "OPEN",
    "title": "feat(email): SMTP como transporte da instalação — recorte do #714, no crédito de @betoarts"
   },
   {
    "body": "Conserto de um furo que está na `main` **hoje**, e que a triagem declarou por escrito ser da casa ao revisar o PR #1134 de @joaopaulomirandamatias: *\"um bloqueador de comportamento que **não é seu**, e eu digo desde já de quem é: da casa.\"*\nSai como PR próprio, e não na branch dele, por uma razão medida: **o conserto não depende de uma linha do #1134.** Ele cita zero ocorrências de `send_window`, `msAteAJanelaAbrir` e `lerJanelaDeFollowup`, e toca só arquivos que já existem na `main`.\n## O defeito\nespera real com a anti-ban .... 33 h      medida com decidePacing da main, SEM o #1134\n**As 33 h foram medidas rodando a função, não um modelo dela** — o que prova que o furo é alcançável hoje, sem o PR. Com a faixa por agente que o #1134 propõe, a mesma conta vai a 63 h no padrão de fábrica e a 159 h se o operador escolher um único dia da semana.\n## Por que não é subir o teto\n## DoD 13 — a peça não é ilha\n## Gates\n## NÃO MEDIDO",
    "createdAt": "2026-09-18T12:10:33Z",
    "headRefName": "triagem/followup-janela-nao-mata-enrollment",
    "mergedAt": null,
    "number": 1171,
    "state": "OPEN",
    "title": "fix(followup): esperar a janela abrir deixa de matar o enrollment"
   },
   {
    "body": "## O problema: a cerca reprova código correto, e o caso é novo\nEla acusa o **PR #1017** (@webtecnica), e o código dele está **certo**:\n**Não é furo antigo, é caso novo chegando.** Medido em `origin/main`: **21 arquivos** já recebem o cliente por parâmetro, e os quatro que tocam `organizations` (`first-publication.ts`, `pos-entrada.ts`, `export-collector.ts`, `routing/worker.ts`) **apenas `.select()`** — e a cerca só olha mutações. O #1017 é o **primeiro a mutar** assim.\n## Por que ensinar a cerca, e não usar a lista de liberados\n## A prova é de TIPO, nunca de nome\n## As provas, nos dois sentidos\n**Aceita o correto:** com o arquivo do #1017 na árvore, a cerca de `origin/main` dá `1 failed | 3 passed`; com este conserto, `6 passed`, exit 0.\n**Continua reprovando o que ela existe para pegar** — três sabotagens com arquivos **reais**, uma por vez, com o arquivo do #1017 presente em todas:\nA segunda linha é a que separa prova de tipo de prova de nome, e é a razão de este PR ser aceitável. Nas três, o arquivo do #1017 **seguiu aceito** (`grep -c padrao-da-organizacao` nos logs = 0).\n## Dois CONTROLES novos: a sabotagem virou gate\n## O que este PR NÃO resolve (issue à parte)",
    "createdAt": "2026-09-18T05:27:08Z",
    "headRefName": "triagem/cerca-le-cliente-injetado",
    "mergedAt": "2026-09-18T09:24:37Z",
    "number": 1156,
    "state": "MERGED",
    "title": "test(seguranca): a cerca de organizations passa a ler o cliente admin injetado — pelo TIPO, não pelo nome"
   }
  ],
  "issues": [
   {
    "body": "Levantado durante o recorte do PR #714 (SMTP como opção de e-mail, decisão 24 do dono), pelo próprio terminal que montou o recorte — e **deixado como dívida nomeada de propósito**, porque criar arquivo em `tests/invariants/**` não é coisa que se faz de passagem.\n## O que existe e o que falta\n## Por que isso importa mais aqui do que na média\n## O que escrever\n## Por que não foi escrito junto\n## NÃO MEDIDO",
    "createdAt": "2026-09-17T21:45:17Z",
    "number": 1113,
    "state": "OPEN",
    "title": "A tabela de configuração de SMTP nasce sem o invariante de \"server-side only\" que as três irmãs têm"
   },
   {
    "body": "Observação levantada durante o recorte do PR #714 (SMTP como opção de envio, decisão 24 do dono). **Não é furo do recorte** — é uma ponta que o recorte deixa visível e que precisa de decisão antes de virar código.\n## O que existe hoje\n1107:# O bloco final (APP_NAME, SUPPORT_EMAIL, RESEND_*) fica por último de\n1636:  printf '# E-mail transacional. RESEND_FROM_EMAIL tem de ser de um domínio\\n'\n## Por que isto não foi \"consertado\" junto\n1. **A decisão do dono na issue #1034** diz que todo Liga/Desliga de configuração geral tem espaço na tela de admin, **sem precisar ir nos `.env`**. Acrescentar cinco perguntas de SMTP ao instalador vai na direção contrária.\n## A escolha, em uma frase\nArgumento para deixar como está: é coerente com a #1034, e o caminho pela tela existe e é melhor (a senha fica cifrada no banco, não em texto no `.env`).\nArgumento para mexer: primeira impressão. Quem instala e não configura e-mail nenhum não consegue convidar a equipe, e o produto não avisa **na hora da instalação** que existe um segundo caminho. O mínimo — que não contraria a #1034 — seria o instalador **dizer**, ao pular a Resend, que há SMTP configurável em Configurações depois. É texto, não pergunta.\n## NÃO MEDIDO",
    "createdAt": "2026-09-17T21:25:59Z",
    "number": 1110,
    "state": "OPEN",
    "title": "O instalador só conhece a Resend, e o SMTP entra como segunda opção de e-mail"
   },
   {
    "body": "**Achado medido no recorte do PR #928**, em `origin/main` `491a726a3`.\n## O problema\n**Medido:** ao montar o recorte do #928, quatro frases novas chegaram à tela sem entrada em espanhol e **o gate passou verde**. Sabotagem feita de propósito para conferir: tirar o `t()` da mensagem nova da rota — previsto vermelho, **deu verde**. O `t()` ali é disciplina de quem escreve, não mecanismo.\n## Por que não basta tirar `\"api\"` de `PASTAS_IGNORADAS`\n## Direções\n## Enquanto isso\nAs quatro frases do recorte do #928 já entraram no dicionário, com um comentário ao lado dizendo que o gate não alcança aquele caminho — para quem vier depois não presumir cobertura que não existe.\n## Não medido",
    "createdAt": "2026-09-17T00:38:12Z",
    "number": 1046,
    "state": "OPEN",
    "title": "O gate de espanhol não alcança frase que chega à tela por rota de API"
   },
   {
    "body": "## Por que isto não é preferência\n## O padrão já existe — esta issue completa, não inventa\n## Escopo — o que a regra alcança\n### Onda 1 — Liga/Desliga de comportamento (é isto que a regra pede)\n- [ ] **auto-cadastro com aprovação** (PR #714, decisão (d) do dono) — nasce direto aqui, desligado, em `platform_settings`, com controle em `/admin/cadastro`.\n### Onda 2 — prazos e retenção — **proposta da triagem, ainda sem decisão do dono**\n### Onda 3 — identidade e contato — **proposta da triagem, ainda sem decisão do dono**\n## Fora do escopo, e por quê\n## Onde a tela fica\n## Definition of Done desta issue\n## NÃO MEDIDO",
    "createdAt": "2026-09-16T23:27:11Z",
    "number": 1034,
    "state": "OPEN",
    "title": "Configuração da instalação tem tela, não .env (Liga/Desliga em /admin)"
   },
   {
    "body": "## O problema, medido\n## O que já está decidido\n## Escopo proposto\n3. **Documento do contato.** O validador passa a vir do perfil. Regra adotada do #928, e ela é a parte boa daquele PR:\n   recorte do #928, porque o dono o listou entre o que entra já e porque é vazamento de hoje. O que pertence a esta\n## O que NÃO entra\n  pontos) é o **recorte do #928**, não esta issue.\n## Riscos\n  errada, ou o artigo errado, é pior do que não citar artigo nenhum. O #928 acertou a postura: cita nome e número da lei\n## Direções de teste\n## Contexto\nVeio do **PR #928** de @cabindaferreira, que usa o DeskcommCRM em Angola e adaptou a instalação dele. O PR trocava o\nverificador. O que era genérico do #928 já foi separado num recorte próprio, com a autoria dele.",
    "createdAt": "2026-09-16T23:25:49Z",
    "number": 1033,
    "state": "CLOSED",
    "title": "Localização por organização: documento do contato, lei e prazo de privacidade (decisão 25-a)"
   },
   {
    "body": "O #848 criou o ator `api_token` com o argumento *\"o audit não pode mentir sobre quem agiu\"*. O audit ficou certo (`actor_type: \"api_token\"`), mas outras colunas de autoria usam o binário `user ? user : ai`, e o token cai em \"ai\":\n## Consequência\n## Por que não foi consertado no #848\n## Decisão pedida\n## Aceite\n## NÃO MEDIDO",
    "createdAt": "2026-09-15T04:07:54Z",
    "number": 866,
    "state": "OPEN",
    "title": "Integração por token de servidor é registrada como \"IA\" na conversa e na agenda"
   },
   {
    "body": "Achado triando o PR #631 (@lucasa15) — e o interessante é que **o conserto óbvio é uma armadilha medida**.\n## O estado\n# controle positivo: 'external_device' aparece 7×\n## Por que o conserto óbvio quebra o produto\n## O que fazer\nEnquanto isso não acontece, o PR #631 deixa de anunciar o rótulo \"Automação\" (o ramo morto sai), para o texto que o operador lê não prometer o que a tela não entrega.",
    "createdAt": "2026-09-08T21:45:51Z",
    "number": 652,
    "state": "OPEN",
    "title": "A automação se apresenta como IA: nada grava sent_via='automation', e o conserto óbvio duplica a mensagem na conversa (do PR #631, @lucasa15)"
   },
   {
    "body": "Achado triando o PR #631 (@lucasa15). A guarda existe **exatamente** para esta classe e não estava ligada nesta coluna.\n## O buraco\n# controle positivo — a sonda está viva, o invariante cobre ≥9 outras colunas:\n## O conserto\nIrmã: #564 (nenhum gate reprova `.rpc()` para função que o schema não declara).",
    "createdAt": "2026-09-08T21:45:29Z",
    "number": 650,
    "state": "CLOSED",
    "title": "Catraca: messages.sent_via ficou fora do invariante de vocabulário banco×TypeScript — 6 valores no banco, 3 no tipo (do PR #631, @lucasa15)"
   }
  ]
 },
 "pr:1017": {
  "author": {
   "id": "MDQ6VXNlcjc1NTU2MjQy",
   "is_bot": false,
   "login": "webtecnica",
   "name": ""
  },
  "createdAt": "2026-09-16T21:00:51Z",
  "headRefName": "fix/1007-onboarding-chave-openai",
  "headRefOid": "489f7aae7c199e3ef0cf87e6172f1858861f8121",
  "number": 1017,
  "state": "OPEN"
 },
 "comentarios:1017": [
  {
   "id": 5704443318,
   "autor": "vercel[bot]",
   "quando": "2026-09-16T21:00:55Z",
   "texto": "@webtecnica is attempting to deploy a commit to the **rafael-maudibrasil's projects** Team on [Vercel](https://vercel.com).\n\nA member of the Team first needs to [authorize it](https://vercel.com/git/authorize?team=rafael-maudibrasil's%20projects&slug=rafael-maudibrasils-projects&teamId=team_CsA6wVAM2V1CcrKPsDo6VGHO&type=github&job=%7B%22headInfo%22%3A%7B%22sha%22%3A%2204f0daeb4a9677c7cc84188218d3a566e5bd2020%22%7D%2C%22id%22%3A%22QmTp1X3hPyCkwGn8evqy3mmerrb7csgr7XuWvpuryTgzMu%22%2C%22org%22%3A%22melgarafael%22%2C%22prId%22%3A1017%2C%22repo%22%3A%22DeskcommCRM%22%7D).\n\n",
   "onde": "conversa"
  },
  {
   "id": 5704443481,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-16T21:00:56Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / Security Evidence:04f0daeb4a9677c7cc84188218d3a566e5bd2020 -->\n## ECC Tools / Security Evidence\n\nCommit: `04f0daeb4a9677c7cc84188218d3a566e5bd2020`\n\n**Security scanner evidence required** (action_required)\n\nDetected 1 security-sensitive predictive risk signal(s) without scanner evidence.\n\nMode: enforce\n\nFindings:\n- **Security-sensitive changes may ship without scanner evidence**: The PR touches billing, secrets, auth, webhooks, agent, or CI-sensitive surfaces without adding obvious security scanner, code scanning, or security-focused validation evidence. (1 security-sensitive paths changed; 0 security scanner or security-focused validation artifacts changed)\n\nTouched security-sensitive paths:\n- `lib/ai/agents/first-publication.ts`\n\nExpected evidence:\n- Security scanner, code scanning, secret scanning, dependency/security review, or focused security regression output.\n- SARIF/code-scanning upload or equivalent pass/fail gate for the changed surface.\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5704443688,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-16T21:00:57Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / PR Risk Taxonomy:04f0daeb4a9677c7cc84188218d3a566e5bd2020 -->\n## ECC Tools / PR Risk Taxonomy\n\nCommit: `04f0daeb4a9677c7cc84188218d3a566e5bd2020`\n\n**PR taxonomy review recommended** (neutral)\n\nDetected 3 PR taxonomy bucket(s): Security Evidence, CI/CD Recommendation, Cost/Token Risk.\n\nScanned 6 changed file(s).\n\n\n\nRoadmap taxonomy buckets:\n\n\n\n### Security Evidence\nSecurity-sensitive changes should carry explicit scanner, code-scanning, or focused regression evidence.\n\nSignals:\n- Security-sensitive changes may ship without scanner evidence\n- 0 security-sensitive path(s) changed\n\nPaths:\n- `.changes/onboarding-chave-colada-em-outro-provedor.md`\n- `app/actions/onboarding/createDefaultAgent.ts`\n- `app/onboarding/setup-ai/_form.tsx`\n\n### CI/CD Recommendation\nCI, dependency, coverage, and contract signals should be routed into follow-up checks or verification work.\n\nSignals:\n- 1 CI or workflow path(s) changed\n\nPaths:\n- `tests/unit/onboarding-agente-nao-publicado.test.ts`\n\n### Cost/Token Risk\nAI routing, usage, and token-budget changes should include budget or usage-limit evidence.\n\nSignals:\n- 1 cost/token path(s) changed\n\nPaths:\n- `lib/ai/agents/first-publication.ts`\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5704443884,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-16T21:00:58Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / Reference Set Readiness:04f0daeb4a9677c7cc84188218d3a566e5bd2020 -->\n## ECC Tools / Reference Set Readiness\n\nCommit: `04f0daeb4a9677c7cc84188218d3a566e5bd2020`\n\n**Reference set readiness gaps detected** (neutral)\n\nReference evidence present for 0/7 areas (0%) across 6 changed file(s).\n\nThis check is based on files changed in this PR. Repository-level readiness is still reported by `/ecc-tools analyze` comments and generated manifests.\n\n| Area | Status | Evidence / Next Step |\n| --- | --- | --- |\n| Deep analyzer corpus | Missing | Add analyzer fixture, golden, benchmark, or reference-set files that can catch analyzer regressions. |\n| RAG/evaluator comparison | Missing | Add retrieval or evaluator reference-set comparison fixtures with expected ranking behavior. |\n| PR salvage/review corpus | Missing | Add stale-PR, review-thread, reopen-flow, or salvage reference cases for queue cleanup automation. |\n| Discussion triage corpus | Missing | Add public discussion triage fixtures, golden cases, or reference sets for informational, answered, and no-response classifications. |\n| Harness compatibility | Missing | Add cross-harness, adapter-compliance, or harness-audit evidence for Claude, Codex, OpenCode, Zed, dmux, and agent surfaces. |\n| Security evidence | Missing | Attach security evidence such as SBOMs, SARIF, audit reports, or AgentShield evidence packs. |\n| CI failure-mode evidence | Missing | Add captured CI failure logs, dry-run fixtures, or troubleshooting docs for common workflow failure modes. |\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5704444200,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-16T21:00:59Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / Hosted Promotion Readiness:04f0daeb4a9677c7cc84188218d3a566e5bd2020 -->\n## ECC Tools / Hosted Promotion Readiness\n\nCommit: `04f0daeb4a9677c7cc84188218d3a566e5bd2020`\n\n**Hosted promotion readiness passed** (success)\n\nNo hosted promotion evidence gaps detected across 6 changed file(s); 0 corpus scenarios had matching evidence.\n\nThis check compares PR file changes against the evaluator/RAG promotion corpus in `src/analyzers/fixtures/evaluator-rag-corpus.ts`.\nHosted output scoring inspected 0 completed cached hosted job results.\n\nNo evaluator corpus scenarios matched this PR.\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5704450851,
   "autor": "webtecnica",
   "quando": "2026-09-16T21:01:33Z",
   "texto": "**Qual das duas opções eu implementei — e a que fica de fora**\n\nA triagem apontou duas escolhas de desenho e disse que a resposta seria registrada na issue. Implementei a **estreita**, e vale dizer exatamente o que isso significa antes da sua resposta:\n\n- **O que este PR faz:** na hora de publicar, se ninguém tem chave utilizável para o provedor da instalação, a publicação **adota** a credencial validada mais recente da organização — de qualquer provedor — e leva **provedor + modelo + credencial juntos**. O `settings.llm` da organização **não muda**: a chave passa a valer para publicar **este** atendente.\n- **O que fica de fora (a opção larga):** a chave colada virar o provedor da organização. Isso mexe em `settings.llm` e é o que corrigiria também a prova de crédito (`lib/instalacao/retrato.ts:87-92` → `app/api/v1/system/instalacao/route.ts:71-87` → `_inteligencia.tsx:199-202`), que **continua com o recorte atual** — filtra credencial pelo provedor da organização e segue dizendo \"não consegui testar o crédito\" para quem colou OpenAI.\n\nSe a sua resposta for a **larga**, sigo com ela num segundo PR; este continua válido como está (é o caminho que tira o atendente do rascunho). Se for a **estreita**, aqui está o conserto inteiro.\n\n**O teste que fica vermelho — confirmado, e ele não depende da escolha:** com `lib/ai/agents/first-publication.ts` de volta ao `HEAD`, a suíte fica com **2 vermelhos (os dois casos novos) e 27 verdes**. Com o conserto, 34/34.\n\n**O caso vizinho que você marcou como não medido ficou coberto como mensagem:** *\"com o provedor certo, clicar em 'Criar e continuar' logo depois de guardar a chave\"*. Com a chave do provedor certo ainda não confirmada (`validated_at` nulo), a publicação continua não publicando — mas a resposta passa a nomear esse provedor em `chave_em_verificacao`, e a tela diz que falta a confirmação, em vez de pedir para colar de novo uma chave que já está lá. É o caso 3 do teste.\n\n**O que não medi:** `test:db` e `test:e2e` (sem Docker nem Supabase CLI na máquina de onde este PR saiu) — a suíte unit completa e o build estão rodando e eu comento o resultado aqui.\n",
   "onde": "conversa"
  },
  {
   "id": 5704489617,
   "autor": "github-actions[bot]",
   "quando": "2026-09-16T21:04:51Z",
   "texto": "<!-- triagem-de-pr:v1:pass=1 -->\nRecebido, @webtecnica — obrigado por isto.\n\nDuas coisas que vão parecer erro seu e não são:\n\n- O check **Vercel** vermelho (\"Authorization required to deploy\") é esperado em PR de fork. A\n  `main` faz deploy de produção e a Vercel se recusa a construir código de fora, o que está\n  certo. **Ele não entra no gate de merge.**\n- No primeiro PR de quem nunca contribuiu aqui, os workflows ficam **parados esperando\n  liberação** — política do GitHub, não sua. Enquanto isso o PR parece não ter check nenhum\n  (nem o `gh pr checks` mostra os que estão nesse estado). Quem tria libera; você não precisa\n  fazer nada.\n\nUm mantenedor vai revisar de verdade — rodando os gates e reproduzindo o comportamento, não só\nlendo o diff — e responde aqui **em até um dia útil**, com a medição junto, nunca com um \"acho\nque\".\n\nEsta mensagem é automática e não diz nada sobre o seu PR: ela é sobre o processo. O que vem\ndepois é pessoa.\n",
   "onde": "conversa"
  },
  {
   "id": 5704785039,
   "autor": "webtecnica",
   "quando": "2026-09-16T21:28:40Z",
   "texto": "✅ Suíte completa + build verdes no head deste PR.\n\n**Testes** (`vitest run`, suíte inteira)\n- `Test Files  911 passed (911)`\n- `Tests  9292 passed | 1 expected fail (9293)`\n- duração: 718,81s\n\n**Build** (`pnpm build`): concluído sem erro.\n\nGate rodado fora do cgroup do gateway (systemd `gates-dk1007-full`) — head `04f0daeb4a9677c7cc84188218d3a566e5bd2020`.\n\nResumo do conserto: a chave colada publica o atendente sem mexer no `settings.llm` da organização (variante estreita); a tela passa a pedir confirmação quando a chave do provedor certo ainda não foi confirmada, em vez de mandar colar de novo. A variante larga (prova de crédito em `retrato.ts`) fica para um PR seguinte, se você preferir — este aqui não conflita com ela.\n",
   "onde": "conversa"
  },
  {
   "id": 5705804333,
   "autor": "melgarafael",
   "quando": "2026-09-16T23:06:59Z",
   "texto": "<!-- triagem-de-issues:v1:decisao-1007 -->\n**Segurar até o ajuste — decisão de produto registrada na #1007.**\n\nO dono do produto decidiu que a escolha de provedor no onboarding **vale para a empresa inteira**. Este PR conserta a publicação por outro caminho (adotar a credencial validada mais recente de qualquer provedor) e deixa `organizations.settings.llm.provider` em `anthropic`, então a prova de crédito do wizard e os demais pontos de IA continuam apontando para um provedor que ninguém escolheu.\n\nO que a decisão pede, as três armadilhas que eu medi na `main` (`491a726a3`) e o que segue valendo estão em https://github.com/melgarafael/DeskcommCRM/issues/1007#issuecomment-5705800919.\n\nRótulo `triagem:decisao` posto para a fila de PRs ler no passo do merge. @webtecnica, quando o ajuste estiver de pé eu tiro o rótulo.",
   "onde": "conversa"
  },
  {
   "id": 5708197365,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-17T03:52:10Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / Security Evidence:07ac239032056b3a88885572e074f55c150087d0 -->\n## ECC Tools / Security Evidence\n\nCommit: `07ac239032056b3a88885572e074f55c150087d0`\n\n**Security scanner evidence required** (action_required)\n\nDetected 1 security-sensitive predictive risk signal(s) without scanner evidence.\n\nMode: enforce\n\nFindings:\n- **Security-sensitive changes may ship without scanner evidence**: The PR touches billing, secrets, auth, webhooks, agent, or CI-sensitive surfaces without adding obvious security scanner, code scanning, or security-focused validation evidence. (1 security-sensitive paths changed; 0 security scanner or security-focused validation artifacts changed)\n\nTouched security-sensitive paths:\n- `lib/ai/agents/first-publication.ts`\n\nExpected evidence:\n- Security scanner, code scanning, secret scanning, dependency/security review, or focused security regression output.\n- SARIF/code-scanning upload or equivalent pass/fail gate for the changed surface.\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5708197460,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-17T03:52:11Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / PR Risk Taxonomy:07ac239032056b3a88885572e074f55c150087d0 -->\n## ECC Tools / PR Risk Taxonomy\n\nCommit: `07ac239032056b3a88885572e074f55c150087d0`\n\n**PR taxonomy review recommended** (neutral)\n\nDetected 3 PR taxonomy bucket(s): Security Evidence, CI/CD Recommendation, Cost/Token Risk.\n\nScanned 10 changed file(s).\n\n\n\nRoadmap taxonomy buckets:\n\n\n\n### Security Evidence\nSecurity-sensitive changes should carry explicit scanner, code-scanning, or focused regression evidence.\n\nSignals:\n- Security-sensitive changes may ship without scanner evidence\n- 0 security-sensitive path(s) changed\n\nPaths:\n- `.changes/onboarding-chave-colada-em-outro-provedor.md`\n- `app/actions/onboarding/chaveDaIa.ts`\n- `app/actions/onboarding/createDefaultAgent.ts`\n\n### CI/CD Recommendation\nCI, dependency, coverage, and contract signals should be routed into follow-up checks or verification work.\n\nSignals:\n- 2 CI or workflow path(s) changed\n\nPaths:\n- `tests/unit/onboarding-agente-nao-publicado.test.ts`\n- `tests/unit/onboarding-chave-da-ia-vale-para-a-empresa.test.ts`\n\n### Cost/Token Risk\nAI routing, usage, and token-budget changes should include budget or usage-limit evidence.\n\nSignals:\n- 2 cost/token path(s) changed\n\nPaths:\n- `lib/ai/agents/first-publication.ts`\n- `lib/ai/pontos/padrao-da-organizacao.ts`\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5708197561,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-17T03:52:12Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / Reference Set Readiness:07ac239032056b3a88885572e074f55c150087d0 -->\n## ECC Tools / Reference Set Readiness\n\nCommit: `07ac239032056b3a88885572e074f55c150087d0`\n\n**Reference set readiness gaps detected** (neutral)\n\nReference evidence present for 0/7 areas (0%) across 10 changed file(s).\n\nThis check is based on files changed in this PR. Repository-level readiness is still reported by `/ecc-tools analyze` comments and generated manifests.\n\n| Area | Status | Evidence / Next Step |\n| --- | --- | --- |\n| Deep analyzer corpus | Missing | Add analyzer fixture, golden, benchmark, or reference-set files that can catch analyzer regressions. |\n| RAG/evaluator comparison | Missing | Add retrieval or evaluator reference-set comparison fixtures with expected ranking behavior. |\n| PR salvage/review corpus | Missing | Add stale-PR, review-thread, reopen-flow, or salvage reference cases for queue cleanup automation. |\n| Discussion triage corpus | Missing | Add public discussion triage fixtures, golden cases, or reference sets for informational, answered, and no-response classifications. |\n| Harness compatibility | Missing | Add cross-harness, adapter-compliance, or harness-audit evidence for Claude, Codex, OpenCode, Zed, dmux, and agent surfaces. |\n| Security evidence | Missing | Attach security evidence such as SBOMs, SARIF, audit reports, or AgentShield evidence packs. |\n| CI failure-mode evidence | Missing | Add captured CI failure logs, dry-run fixtures, or troubleshooting docs for common workflow failure modes. |\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5708197730,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-17T03:52:13Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / Hosted Promotion Readiness:07ac239032056b3a88885572e074f55c150087d0 -->\n## ECC Tools / Hosted Promotion Readiness\n\nCommit: `07ac239032056b3a88885572e074f55c150087d0`\n\n**Hosted promotion readiness passed** (success)\n\nNo hosted promotion evidence gaps detected across 10 changed file(s); 0 corpus scenarios had matching evidence.\n\nThis check compares PR file changes against the evaluator/RAG promotion corpus in `src/analyzers/fixtures/evaluator-rag-corpus.ts`.\nHosted output scoring inspected 0 completed cached hosted job results.\n\nNo evaluator corpus scenarios matched this PR.\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5708212668,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-17T03:54:18Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / Security Evidence:d3c415e682cce63ed7d78ee62abf5f72aa2c1e0c -->\n## ECC Tools / Security Evidence\n\nCommit: `d3c415e682cce63ed7d78ee62abf5f72aa2c1e0c`\n\n**Security scanner evidence required** (action_required)\n\nDetected 1 security-sensitive predictive risk signal(s) without scanner evidence.\n\nMode: enforce\n\nFindings:\n- **Security-sensitive changes may ship without scanner evidence**: The PR touches billing, secrets, auth, webhooks, agent, or CI-sensitive surfaces without adding obvious security scanner, code scanning, or security-focused validation evidence. (1 security-sensitive paths changed; 0 security scanner or security-focused validation artifacts changed)\n\nTouched security-sensitive paths:\n- `lib/ai/agents/first-publication.ts`\n\nExpected evidence:\n- Security scanner, code scanning, secret scanning, dependency/security review, or focused security regression output.\n- SARIF/code-scanning upload or equivalent pass/fail gate for the changed surface.\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5708212771,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-17T03:54:19Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / PR Risk Taxonomy:d3c415e682cce63ed7d78ee62abf5f72aa2c1e0c -->\n## ECC Tools / PR Risk Taxonomy\n\nCommit: `d3c415e682cce63ed7d78ee62abf5f72aa2c1e0c`\n\n**PR taxonomy review recommended** (neutral)\n\nDetected 3 PR taxonomy bucket(s): Security Evidence, CI/CD Recommendation, Cost/Token Risk.\n\nScanned 10 changed file(s).\n\n\n\nRoadmap taxonomy buckets:\n\n\n\n### Security Evidence\nSecurity-sensitive changes should carry explicit scanner, code-scanning, or focused regression evidence.\n\nSignals:\n- Security-sensitive changes may ship without scanner evidence\n- 0 security-sensitive path(s) changed\n\nPaths:\n- `.changes/onboarding-chave-colada-em-outro-provedor.md`\n- `app/actions/onboarding/chaveDaIa.ts`\n- `app/actions/onboarding/createDefaultAgent.ts`\n\n### CI/CD Recommendation\nCI, dependency, coverage, and contract signals should be routed into follow-up checks or verification work.\n\nSignals:\n- 2 CI or workflow path(s) changed\n\nPaths:\n- `tests/unit/onboarding-agente-nao-publicado.test.ts`\n- `tests/unit/onboarding-chave-da-ia-vale-para-a-empresa.test.ts`\n\n### Cost/Token Risk\nAI routing, usage, and token-budget changes should include budget or usage-limit evidence.\n\nSignals:\n- 2 cost/token path(s) changed\n\nPaths:\n- `lib/ai/agents/first-publication.ts`\n- `lib/ai/pontos/padrao-da-organizacao.ts`\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5708212878,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-17T03:54:20Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / Reference Set Readiness:d3c415e682cce63ed7d78ee62abf5f72aa2c1e0c -->\n## ECC Tools / Reference Set Readiness\n\nCommit: `d3c415e682cce63ed7d78ee62abf5f72aa2c1e0c`\n\n**Reference set readiness gaps detected** (neutral)\n\nReference evidence present for 0/7 areas (0%) across 10 changed file(s).\n\nThis check is based on files changed in this PR. Repository-level readiness is still reported by `/ecc-tools analyze` comments and generated manifests.\n\n| Area | Status | Evidence / Next Step |\n| --- | --- | --- |\n| Deep analyzer corpus | Missing | Add analyzer fixture, golden, benchmark, or reference-set files that can catch analyzer regressions. |\n| RAG/evaluator comparison | Missing | Add retrieval or evaluator reference-set comparison fixtures with expected ranking behavior. |\n| PR salvage/review corpus | Missing | Add stale-PR, review-thread, reopen-flow, or salvage reference cases for queue cleanup automation. |\n| Discussion triage corpus | Missing | Add public discussion triage fixtures, golden cases, or reference sets for informational, answered, and no-response classifications. |\n| Harness compatibility | Missing | Add cross-harness, adapter-compliance, or harness-audit evidence for Claude, Codex, OpenCode, Zed, dmux, and agent surfaces. |\n| Security evidence | Missing | Attach security evidence such as SBOMs, SARIF, audit reports, or AgentShield evidence packs. |\n| CI failure-mode evidence | Missing | Add captured CI failure logs, dry-run fixtures, or troubleshooting docs for common workflow failure modes. |\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5708213077,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-17T03:54:21Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / Hosted Promotion Readiness:d3c415e682cce63ed7d78ee62abf5f72aa2c1e0c -->\n## ECC Tools / Hosted Promotion Readiness\n\nCommit: `d3c415e682cce63ed7d78ee62abf5f72aa2c1e0c`\n\n**Hosted promotion readiness passed** (success)\n\nNo hosted promotion evidence gaps detected across 10 changed file(s); 0 corpus scenarios had matching evidence.\n\nThis check compares PR file changes against the evaluator/RAG promotion corpus in `src/analyzers/fixtures/evaluator-rag-corpus.ts`.\nHosted output scoring inspected 0 completed cached hosted job results.\n\nNo evaluator corpus scenarios matched this PR.\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5708216216,
   "autor": "webtecnica",
   "quando": "2026-09-17T03:54:48Z",
   "texto": "@melgarafael — a decisão está implementada neste PR: a escolha do onboarding passou a valer para a empresa inteira.\n\n**Onde ela é gravada**: no passo em que a chave é guardada (`app/actions/onboarding/chaveDaIa.ts` → `lib/ai/pontos/padrao-da-organizacao.ts`), como você pediu. Grava o PAR — provedor e o modelo curado do catálogo **desse** provedor — porque o `default_model` semeado pelo gatilho é um id que o endpoint do outro provedor não conhece.\n\nAs três armadilhas que você mediu ficaram cada uma com caso próprio: (1) o par, não só o provedor; (2) admin client com o org id da sessão — e o dublê do client de sessão **lança**, para que voltar a ele deixe o teste vermelho em vez de verde por vacuidade; (3) zero linhas no PostgREST voltando como sucesso: o passo confere e separa \"gravado\" de \"não gravou\". Somei a quarta que aparece no caminho: `settings` é jsonb compartilhado (marca, MFA, estado do wizard, e `params`/`enabled_models` dentro do `llm`) — a escrita é merge nos dois níveis, e a sabotagem que tira o merge deixa 1 vermelho.\n\n**O fallback da publicação saiu** — você deixou a escolha comigo, e ele seria uma segunda semântica: poria o atendente num provedor em que a empresa não está, e o provedor da versão vence o da organização em `resolveOrgLlmConfig`. O que ficou dele: quando não há chave utilizável, a publicação continua distinguindo \"não achei chave\" de \"a chave colada ainda não foi confirmada\" — agora procurando o provedor da empresa, que é o provedor da chave colada depois desta decisão.\n\n**Medido**: fail-first (passo de volta ao `HEAD~1` → 6 vermelhos de 6), sabotagens dirigidas (provedor sem modelo → 3 vermelhos; sem merge no `llm` → 1 vermelho), restauro byte-exato por sha256, 31/31 em 5 arquivos, `pnpm typecheck` rc=0, eslint 0 erros, e o fragmento de release reescrito para contar a decisão.\n\n**O que não medi**: `test:db`/`test:e2e` (não há Docker nem Supabase CLI aqui) e a tela — a prova de crédito que você apontou como o segundo sintoma deve parar de mentir sem ajuste próprio, e não rodei o fluxo em tela. O detalhamento está no corpo do PR.\n",
   "onde": "conversa"
  },
  {
   "id": 5724003461,
   "autor": "melgarafael",
   "quando": "2026-09-18T02:07:07Z",
   "texto": "<!-- triagem-de-pr:v1:pass=10 -->\n@webtecnica — **a decisão do dono saiu e este PR está de acordo com ela**, então ele deixa de esperar: tirei o `triagem:decisao`. A resposta dele à #1007 foi **(a) vale para a empresa inteira**, que é exatamente o que o título e o corpo daqui implementam.\n\n**Vou trazer a `main` para dentro desta branch** (commit de merge novo — sem `--force`, sem rebase). Se for continuar nela, dê `git pull` antes.\n\nPor que: o `verify` está vermelho e a base deste PR é `de55029e6`, com **224 commits** da `main` de distância — medido por `git rev-list --count de55029e6..origin/main`. Antes de cobrar qualquer coisa de você eu precisava separar o que é do PR do que é idade da base, e não dá para separar sem rodar contra a árvore de hoje.\n\n**O que eu conferi no seu código, e por que ele passa no ponto mais perigoso.** A escrita em `organizations.settings` é onde este conserto podia estragar coisa alheia em silêncio, e as três armadilhas estão tratadas no arquivo, não só no texto do PR:\n\n- **client admin, não o de sessão** — `organizations` tem `orgs_write_platform_admin` como única policy de escrita, então um UPDATE pelo client de sessão casa zero linhas e o PostgREST devolve **sucesso**. Você usou o admin com o org id da sessão, como no gêmeo em `app/api/v1/ai/providers/route.ts`;\n- **merge de jsonb nos dois níveis** — `{ ...settingsAtuais, llm: { ...llmAtual, ... } }`. Um `update({ settings: { llm } })` ingênuo apagaria `branding`, `security` e o estado do wizard sem erro nenhum;\n- **zero linhas ≠ gravado** — o passo relê com `.select(\"settings\")` e separa os dois desfechos, em vez de confiar no ausência de erro.\n\nE gostei do dublê do client de sessão **lançar** no teste: é o que faz voltar atrás ficar vermelho, em vez de ficar verde por vacuidade. Prova que distingue antes de depois é o que separa teste de enfeite.\n\nO **Vercel** vermelho não é seu e não entra no gate — a `main` não é mais publicada lá.\n\nQuando o CI fechar contra a `main` de hoje, o que sobrar de vermelho é do PR, e eu volto com isso nomeado. Se fechar verde, ele entra.\n",
   "onde": "conversa"
  },
  {
   "id": 5724061836,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-18T02:13:04Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / Security Evidence:65b22cd1c20ebd43f5ffdc08918ab06a929cdc16 -->\n## ECC Tools / Security Evidence\n\nCommit: `65b22cd1c20ebd43f5ffdc08918ab06a929cdc16`\n\n**Security scanner evidence required** (action_required)\n\nDetected 1 security-sensitive predictive risk signal(s) without scanner evidence.\n\nMode: enforce\n\nFindings:\n- **Security-sensitive changes may ship without scanner evidence**: The PR touches billing, secrets, auth, webhooks, agent, or CI-sensitive surfaces without adding obvious security scanner, code scanning, or security-focused validation evidence. (1 security-sensitive paths changed; 0 security scanner or security-focused validation artifacts changed)\n\nTouched security-sensitive paths:\n- `lib/ai/agents/first-publication.ts`\n\nExpected evidence:\n- Security scanner, code scanning, secret scanning, dependency/security review, or focused security regression output.\n- SARIF/code-scanning upload or equivalent pass/fail gate for the changed surface.\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5724062166,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-18T02:13:07Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / PR Risk Taxonomy:65b22cd1c20ebd43f5ffdc08918ab06a929cdc16 -->\n## ECC Tools / PR Risk Taxonomy\n\nCommit: `65b22cd1c20ebd43f5ffdc08918ab06a929cdc16`\n\n**PR taxonomy review recommended** (neutral)\n\nDetected 3 PR taxonomy bucket(s): Security Evidence, CI/CD Recommendation, Cost/Token Risk.\n\nScanned 10 changed file(s).\n\n\n\nRoadmap taxonomy buckets:\n\n\n\n### Security Evidence\nSecurity-sensitive changes should carry explicit scanner, code-scanning, or focused regression evidence.\n\nSignals:\n- Security-sensitive changes may ship without scanner evidence\n- 0 security-sensitive path(s) changed\n\nPaths:\n- `.changes/onboarding-chave-colada-em-outro-provedor.md`\n- `app/actions/onboarding/chaveDaIa.ts`\n- `app/actions/onboarding/createDefaultAgent.ts`\n\n### CI/CD Recommendation\nCI, dependency, coverage, and contract signals should be routed into follow-up checks or verification work.\n\nSignals:\n- 2 CI or workflow path(s) changed\n\nPaths:\n- `tests/unit/onboarding-agente-nao-publicado.test.ts`\n- `tests/unit/onboarding-chave-da-ia-vale-para-a-empresa.test.ts`\n\n### Cost/Token Risk\nAI routing, usage, and token-budget changes should include budget or usage-limit evidence.\n\nSignals:\n- 2 cost/token path(s) changed\n\nPaths:\n- `lib/ai/agents/first-publication.ts`\n- `lib/ai/pontos/padrao-da-organizacao.ts`\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5724062386,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-18T02:13:09Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / Reference Set Readiness:65b22cd1c20ebd43f5ffdc08918ab06a929cdc16 -->\n## ECC Tools / Reference Set Readiness\n\nCommit: `65b22cd1c20ebd43f5ffdc08918ab06a929cdc16`\n\n**Reference set readiness gaps detected** (neutral)\n\nReference evidence present for 0/7 areas (0%) across 10 changed file(s).\n\nThis check is based on files changed in this PR. Repository-level readiness is still reported by `/ecc-tools analyze` comments and generated manifests.\n\n| Area | Status | Evidence / Next Step |\n| --- | --- | --- |\n| Deep analyzer corpus | Missing | Add analyzer fixture, golden, benchmark, or reference-set files that can catch analyzer regressions. |\n| RAG/evaluator comparison | Missing | Add retrieval or evaluator reference-set comparison fixtures with expected ranking behavior. |\n| PR salvage/review corpus | Missing | Add stale-PR, review-thread, reopen-flow, or salvage reference cases for queue cleanup automation. |\n| Discussion triage corpus | Missing | Add public discussion triage fixtures, golden cases, or reference sets for informational, answered, and no-response classifications. |\n| Harness compatibility | Missing | Add cross-harness, adapter-compliance, or harness-audit evidence for Claude, Codex, OpenCode, Zed, dmux, and agent surfaces. |\n| Security evidence | Missing | Attach security evidence such as SBOMs, SARIF, audit reports, or AgentShield evidence packs. |\n| CI failure-mode evidence | Missing | Add captured CI failure logs, dry-run fixtures, or troubleshooting docs for common workflow failure modes. |\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5724062720,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-18T02:13:11Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / Hosted Promotion Readiness:65b22cd1c20ebd43f5ffdc08918ab06a929cdc16 -->\n## ECC Tools / Hosted Promotion Readiness\n\nCommit: `65b22cd1c20ebd43f5ffdc08918ab06a929cdc16`\n\n**Hosted promotion readiness passed** (success)\n\nNo hosted promotion evidence gaps detected across 10 changed file(s); 0 corpus scenarios had matching evidence.\n\nThis check compares PR file changes against the evaluator/RAG promotion corpus in `src/analyzers/fixtures/evaluator-rag-corpus.ts`.\nHosted output scoring inspected 0 completed cached hosted job results.\n\nNo evaluator corpus scenarios matched this PR.\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5725609441,
   "autor": "melgarafael",
   "quando": "2026-09-18T05:27:52Z",
   "texto": "<!-- triagem-de-pr:v1:pass=14 -->\n@webtecnica — **o `verify` vermelho deste PR era a nossa cerca reprovando o seu código correto. O conserto é nosso e já está no PR #1156.**\n\nA cerca `escrita-em-organizations-usa-cliente-admin` acusava:\n\n```\n{ \"arquivo\": \"lib/ai/pontos/padrao-da-organizacao.ts\", \"cliente\": \"p\", \"linha\": 113, \"metodo\": \"update\" }\n```\n\nE o seu código está certo: `p.admin.from(\"organizations\").update(...)`, com `admin: ReturnType<typeof createAdminClient>` tipado no arquivo. O que a cerca não conseguia ver:\n\n- `raizDaCadeia` devolve o **identificador-raiz** — para `p.admin.from(...)` ela devolve `\"p\"` e a propriedade se perde;\n- `nomesDoClienteAdmin` só coleta `const x = createAdminClient()` **no mesmo arquivo**. Cliente que chega **por parâmetro**, como o seu, nunca entrava nesse conjunto.\n\n**E você não esbarrou num furo velho: você é o primeiro caso.** Medido: 21 arquivos já recebem o cliente por parâmetro, mas os quatro que tocam `organizations` apenas **leem** — e a cerca só olha mutações. O seu é o primeiro a **gravar** assim. Não havia como você saber.\n\n**O que nós fizemos, em vez de te pedir para contornar:** ensinamos a cerca, com a prova sendo **de tipo e nunca de nome** — aceitar qualquer `x.admin` deixaria alguém batizar um cliente de sessão de `admin` e passar por baixo dela. E provamos nos dois sentidos: ela passa a aceitar o seu caso, **e continua reprovando** um parâmetro tipado como cliente de sessão num arquivo que importa a fábrica admin e tem um tipo admin legítimo. Esse cenário é o que separa as duas coisas.\n\n**A alternativa que nós recusamos** foi te pôr na lista de exceções da cerca. Ela existe para exceção **de conteúdo**; o seu caso é limitação **de análise** — e cada item nessa lista é um pedaço de proteção que ninguém revisa depois. Você teria ficado desbloqueado, e a próxima pessoa com o mesmo padrão bateria na mesma pedra.\n\n**O que falta aqui:** o #1156 precisa entrar antes deste PR ficar verde. E há dois pontos do seu PR que eu ainda não medi e não vou fingir que medi — as duas falhas em `tests/unit/onboarding-agente-nao-publicado.test.ts` (`expected [] to have a length of 1` e `expected undefined to be 'openai'`), que são do **seu** arquivo de teste e apareceram depois de eu trazer a `main` de hoje para dentro. Isso é incompatibilidade real com a árvore atual, não cerca. Vou olhar, mas se você reconhecer a causa de cara, me diga — a sua base estava 224 commits atrás e você conhece o desenho melhor do que eu.\n",
   "onde": "conversa"
  },
  {
   "id": 5725706644,
   "autor": "melgarafael",
   "quando": "2026-09-18T05:40:53Z",
   "texto": "<!-- triagem-de-pr:v1:pass=15 -->\n@webtecnica — **medimos as duas falhas do `verify` e a resposta é boa para você: o código está certo e os dois testes estão obsoletos.** Eles descrevem o comportamento que a decisão do dono **proibiu**, e o seu código obedece a decisão. O teste ficou para trás do código, dentro do mesmo PR.\n\n**A causa, com as suas próprias palavras no diff.** Em `lib/ai/agents/first-publication.ts:187-195` a busca da chave pendente está presa ao provedor **da organização**, e o comentário logo acima explica por quê: *\"A busca é do provedor DA ORGANIZAÇÃO porque, depois da decisão, é esse o provedor da chave colada no wizard\"*. E trinta linhas antes, `:150-155`, você escreveu o argumento inteiro: *\"Publicar por adoção seria uma segunda semântica, e pior: poria o ATENDENTE num provedor em que a EMPRESA não está… que é exatamente o que a decisão proíbe.\"*\n\n**Agora o que os dois casos que falham esperam.** O primeiro (`:868-890`) monta uma organização em `anthropic`, uma credencial de **`openai`**, e espera que **publique** com `provider: \"openai\"` — com o comentário *\"O conserto adota a credencial validada que existe\"*. É exatamente o que o seu código recusa fazer, de propósito. O segundo cai pelo mesmo motivo: espera `chave_em_verificacao === \"openai\"` numa org `anthropic`, e o campo vem `undefined` **corretamente**, porque só é emitido quando há pendência no provedor da org.\n\nOs dois foram escritos para a versão anterior do próprio PR — a de \"adota a credencial que existir\" —, de **antes** de o dono responder *\"(a) a IA escolhida no onboarding vale para a empresa inteira\"*. Você acertou o código na decisão nova e esqueceu dois testes na antiga. **É o erro na direção boa**, e é por isso que ele aparece como vermelho em vez de virar defeito em produção.\n\n**O que eu pediria, e é pequeno.** Duas opções, e a segunda é melhor:\n\n- **(a)** apagar os dois casos;\n- **(b)** **invertê-los**, para medirem o que a decisão determina: org em `anthropic` + credencial `openai` → **não** publica; e o aviso nomeia o provedor **da organização**. Assim eles deixam de ser buraco e passam a ser **guarda da decisão** — no dia em que alguém \"consertar\" isso voltando a adotar a credencial que existe, o teste reprova e explica por quê.\n\nSe você preferir que a gente faça, é só dizer uma palavra aqui — mas o teste é seu e a inversão é uma afirmação sobre o comportamento, então eu prefiro que saia da sua mão.\n\n**Nada mais espera você neste PR.** O outro bloqueador era a nossa cerca de escrita em `organizations` acusando o seu `p.admin` — conserto nosso, no **#1156**, que precisa entrar antes deste ficar verde de todo modo. Então você tem tempo.\n\nCrédito da medição: outra sessão nossa rodou o arquivo isolado no seu head (`2 failed | 27 passed`) e rastreou até os dois comentários acima. Eu havia suposto que o arquivo era novo seu — não é, ele já existe na `main` e o seu PR acrescenta 132 linhas a ele. A correção é dela.\n",
   "onde": "conversa"
  },
  {
   "id": 5729366776,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-18T11:31:33Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / Security Evidence:e120c5d38079aff5a48bcc73dbed00975a379cb5 -->\n## ECC Tools / Security Evidence\n\nCommit: `e120c5d38079aff5a48bcc73dbed00975a379cb5`\n\n**Security scanner evidence required** (action_required)\n\nDetected 1 security-sensitive predictive risk signal(s) without scanner evidence.\n\nMode: enforce\n\nFindings:\n- **Security-sensitive changes may ship without scanner evidence**: The PR touches billing, secrets, auth, webhooks, agent, or CI-sensitive surfaces without adding obvious security scanner, code scanning, or security-focused validation evidence. (1 security-sensitive paths changed; 0 security scanner or security-focused validation artifacts changed)\n\nTouched security-sensitive paths:\n- `lib/ai/agents/first-publication.ts`\n\nExpected evidence:\n- Security scanner, code scanning, secret scanning, dependency/security review, or focused security regression output.\n- SARIF/code-scanning upload or equivalent pass/fail gate for the changed surface.\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5729367024,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-18T11:31:34Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / PR Risk Taxonomy:e120c5d38079aff5a48bcc73dbed00975a379cb5 -->\n## ECC Tools / PR Risk Taxonomy\n\nCommit: `e120c5d38079aff5a48bcc73dbed00975a379cb5`\n\n**PR taxonomy review recommended** (neutral)\n\nDetected 3 PR taxonomy bucket(s): Security Evidence, CI/CD Recommendation, Cost/Token Risk.\n\nScanned 10 changed file(s).\n\n\n\nRoadmap taxonomy buckets:\n\n\n\n### Security Evidence\nSecurity-sensitive changes should carry explicit scanner, code-scanning, or focused regression evidence.\n\nSignals:\n- Security-sensitive changes may ship without scanner evidence\n- 0 security-sensitive path(s) changed\n\nPaths:\n- `.changes/onboarding-chave-colada-em-outro-provedor.md`\n- `app/actions/onboarding/chaveDaIa.ts`\n- `app/actions/onboarding/createDefaultAgent.ts`\n\n### CI/CD Recommendation\nCI, dependency, coverage, and contract signals should be routed into follow-up checks or verification work.\n\nSignals:\n- 2 CI or workflow path(s) changed\n\nPaths:\n- `tests/unit/onboarding-agente-nao-publicado.test.ts`\n- `tests/unit/onboarding-chave-da-ia-vale-para-a-empresa.test.ts`\n\n### Cost/Token Risk\nAI routing, usage, and token-budget changes should include budget or usage-limit evidence.\n\nSignals:\n- 2 cost/token path(s) changed\n\nPaths:\n- `lib/ai/agents/first-publication.ts`\n- `lib/ai/pontos/padrao-da-organizacao.ts`\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5729367252,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-18T11:31:35Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / Reference Set Readiness:e120c5d38079aff5a48bcc73dbed00975a379cb5 -->\n## ECC Tools / Reference Set Readiness\n\nCommit: `e120c5d38079aff5a48bcc73dbed00975a379cb5`\n\n**Reference set readiness gaps detected** (neutral)\n\nReference evidence present for 0/7 areas (0%) across 10 changed file(s).\n\nThis check is based on files changed in this PR. Repository-level readiness is still reported by `/ecc-tools analyze` comments and generated manifests.\n\n| Area | Status | Evidence / Next Step |\n| --- | --- | --- |\n| Deep analyzer corpus | Missing | Add analyzer fixture, golden, benchmark, or reference-set files that can catch analyzer regressions. |\n| RAG/evaluator comparison | Missing | Add retrieval or evaluator reference-set comparison fixtures with expected ranking behavior. |\n| PR salvage/review corpus | Missing | Add stale-PR, review-thread, reopen-flow, or salvage reference cases for queue cleanup automation. |\n| Discussion triage corpus | Missing | Add public discussion triage fixtures, golden cases, or reference sets for informational, answered, and no-response classifications. |\n| Harness compatibility | Missing | Add cross-harness, adapter-compliance, or harness-audit evidence for Claude, Codex, OpenCode, Zed, dmux, and agent surfaces. |\n| Security evidence | Missing | Attach security evidence such as SBOMs, SARIF, audit reports, or AgentShield evidence packs. |\n| CI failure-mode evidence | Missing | Add captured CI failure logs, dry-run fixtures, or troubleshooting docs for common workflow failure modes. |\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5729367549,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-18T11:31:37Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / Hosted Promotion Readiness:e120c5d38079aff5a48bcc73dbed00975a379cb5 -->\n## ECC Tools / Hosted Promotion Readiness\n\nCommit: `e120c5d38079aff5a48bcc73dbed00975a379cb5`\n\n**Hosted promotion readiness passed** (success)\n\nNo hosted promotion evidence gaps detected across 10 changed file(s); 0 corpus scenarios had matching evidence.\n\nThis check compares PR file changes against the evaluator/RAG promotion corpus in `src/analyzers/fixtures/evaluator-rag-corpus.ts`.\nHosted output scoring inspected 0 completed cached hosted job results.\n\nNo evaluator corpus scenarios matched this PR.\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5729432786,
   "autor": "webtecnica",
   "quando": "2026-09-18T11:37:47Z",
   "texto": "Feito o (b): os dois casos foram **invertidos**, não apagados. Agora eles guardam a decisão — a IA escolhida no onboarding vale para a empresa inteira — e reprovam se alguém \"consertar\" isso voltando a adotar a credencial que existir.\n\nSó teste mudou (nada de produção): `tests/unit/onboarding-agente-nao-publicado.test.ts`\n\n1. **`#1007: chave colada em OUTRO provedor NÃO publica — vale o provedor DA ORGANIZAÇÃO`** — org em `anthropic` + credencial validada de `openai`: não publica, o bloqueio acusa `\"chave\"`, o `provider` segue `anthropic` e a credencial do outro provedor não é oferecida nem como pendência.\n2. **`#1007: chave colada e ainda NÃO confirmada — o aviso nomeia o provedor DA ORGANIZAÇÃO`** — as duas metades: `chave_em_verificacao` fica `undefined` quando a pendência é de outro provedor (nomeá-la era o defeito antigo) e continua nomeando a pendência do provedor da empresa.\n3. O caso de controle (`com chave da INSTALAÇÃO o provedor dela segue vencendo`) ficou como estava.\n\nCada caso leva um comentário curto dizendo o porquê, para quem for \"consertar\" ler antes de reprovar.\n\n**Medições** (worktree `/root/workspace/wt-dk1007`, head `e120c5d38079aff5a48bcc73dbed00975a379cb5`):\n\n- `pnpm exec vitest run tests/unit/onboarding-agente-nao-publicado.test.ts` → rc=0\n  `Test Files  1 passed (1)` / `Tests  29 passed (29)`\n- `pnpm typecheck` → rc=0, sem saída\n\nProva de que viraram guarda: com uma sabotagem **temporária e não commitada** (devolver a busca de credencial ao \"qualquer provedor\" em `first-publication.ts`), os dois casos invertidos reprovam — `Tests  3 failed | 26 passed (29)`, rc=1. Restaurado em seguida, árvore limpa, nada disso foi commitado.\n\n**Não medido:** suíte completa, e2e, lint e CI. Nota de ambiente: o primeiro `pnpm typecheck` neste worktree deu rc=2 com 4 erros de módulo não resolvido em `lib/extensions/*` (`ipaddr.js`, `jsonc-parser`) — era `node_modules` desatualizado em relação ao `package.json`, não o PR; um `pnpm install --frozen-lockfile` (rc=0, árvore limpa) resolveu e o typecheck fechou verde.\n",
   "onde": "conversa"
  },
  {
   "id": 5729535734,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-18T11:47:49Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / Security Evidence:489f7aae7c199e3ef0cf87e6172f1858861f8121 -->\n## ECC Tools / Security Evidence\n\nCommit: `489f7aae7c199e3ef0cf87e6172f1858861f8121`\n\n**Security scanner evidence required** (action_required)\n\nDetected 1 security-sensitive predictive risk signal(s) without scanner evidence.\n\nMode: enforce\n\nFindings:\n- **Security-sensitive changes may ship without scanner evidence**: The PR touches billing, secrets, auth, webhooks, agent, or CI-sensitive surfaces without adding obvious security scanner, code scanning, or security-focused validation evidence. (1 security-sensitive paths changed; 0 security scanner or security-focused validation artifacts changed)\n\nTouched security-sensitive paths:\n- `lib/ai/agents/first-publication.ts`\n\nExpected evidence:\n- Security scanner, code scanning, secret scanning, dependency/security review, or focused security regression output.\n- SARIF/code-scanning upload or equivalent pass/fail gate for the changed surface.\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5729535968,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-18T11:47:50Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / PR Risk Taxonomy:489f7aae7c199e3ef0cf87e6172f1858861f8121 -->\n## ECC Tools / PR Risk Taxonomy\n\nCommit: `489f7aae7c199e3ef0cf87e6172f1858861f8121`\n\n**PR taxonomy review recommended** (neutral)\n\nDetected 3 PR taxonomy bucket(s): Security Evidence, CI/CD Recommendation, Cost/Token Risk.\n\nScanned 10 changed file(s).\n\n\n\nRoadmap taxonomy buckets:\n\n\n\n### Security Evidence\nSecurity-sensitive changes should carry explicit scanner, code-scanning, or focused regression evidence.\n\nSignals:\n- Security-sensitive changes may ship without scanner evidence\n- 0 security-sensitive path(s) changed\n\nPaths:\n- `.changes/onboarding-chave-colada-em-outro-provedor.md`\n- `app/actions/onboarding/chaveDaIa.ts`\n- `app/actions/onboarding/createDefaultAgent.ts`\n\n### CI/CD Recommendation\nCI, dependency, coverage, and contract signals should be routed into follow-up checks or verification work.\n\nSignals:\n- 2 CI or workflow path(s) changed\n\nPaths:\n- `tests/unit/onboarding-agente-nao-publicado.test.ts`\n- `tests/unit/onboarding-chave-da-ia-vale-para-a-empresa.test.ts`\n\n### Cost/Token Risk\nAI routing, usage, and token-budget changes should include budget or usage-limit evidence.\n\nSignals:\n- 2 cost/token path(s) changed\n\nPaths:\n- `lib/ai/agents/first-publication.ts`\n- `lib/ai/pontos/padrao-da-organizacao.ts`\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5729536166,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-18T11:47:51Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / Reference Set Readiness:489f7aae7c199e3ef0cf87e6172f1858861f8121 -->\n## ECC Tools / Reference Set Readiness\n\nCommit: `489f7aae7c199e3ef0cf87e6172f1858861f8121`\n\n**Reference set readiness gaps detected** (neutral)\n\nReference evidence present for 0/7 areas (0%) across 10 changed file(s).\n\nThis check is based on files changed in this PR. Repository-level readiness is still reported by `/ecc-tools analyze` comments and generated manifests.\n\n| Area | Status | Evidence / Next Step |\n| --- | --- | --- |\n| Deep analyzer corpus | Missing | Add analyzer fixture, golden, benchmark, or reference-set files that can catch analyzer regressions. |\n| RAG/evaluator comparison | Missing | Add retrieval or evaluator reference-set comparison fixtures with expected ranking behavior. |\n| PR salvage/review corpus | Missing | Add stale-PR, review-thread, reopen-flow, or salvage reference cases for queue cleanup automation. |\n| Discussion triage corpus | Missing | Add public discussion triage fixtures, golden cases, or reference sets for informational, answered, and no-response classifications. |\n| Harness compatibility | Missing | Add cross-harness, adapter-compliance, or harness-audit evidence for Claude, Codex, OpenCode, Zed, dmux, and agent surfaces. |\n| Security evidence | Missing | Attach security evidence such as SBOMs, SARIF, audit reports, or AgentShield evidence packs. |\n| CI failure-mode evidence | Missing | Add captured CI failure logs, dry-run fixtures, or troubleshooting docs for common workflow failure modes. |\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5729536450,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-18T11:47:53Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / Hosted Promotion Readiness:489f7aae7c199e3ef0cf87e6172f1858861f8121 -->\n## ECC Tools / Hosted Promotion Readiness\n\nCommit: `489f7aae7c199e3ef0cf87e6172f1858861f8121`\n\n**Hosted promotion readiness passed** (success)\n\nNo hosted promotion evidence gaps detected across 10 changed file(s); 0 corpus scenarios had matching evidence.\n\nThis check compares PR file changes against the evaluator/RAG promotion corpus in `src/analyzers/fixtures/evaluator-rag-corpus.ts`.\nHosted output scoring inspected 0 completed cached hosted job results.\n\nNo evaluator corpus scenarios matched this PR.\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5729575148,
   "autor": "webtecnica",
   "quando": "2026-09-18T11:51:42Z",
   "texto": "Trouxe a `main` para dentro — ela andou depois do meu push, e o CI testa a branch, não o merge. Head agora: `489f7aae7` (merge novo, sem `--force` e sem rebase; conflito: nenhum).\n\nRégua refeita no head mesclado: `pnpm exec vitest run tests/unit/onboarding-agente-nao-publicado.test.ts` → `Test Files 1 passed (1)` · `Tests 29 passed (29)` — os dois casos invertidos continuam verdes. `pnpm typecheck` → rc=0, sem erro.\n\nNão medido: a suíte cheia, `test:db` e `e2e`.\n",
   "onde": "conversa"
  }
 ],
 "commits:1017": [
  {
   "sha": "04f0daeb4a9677c7cc84188218d3a566e5bd2020",
   "quando": "2026-09-16T21:00:37Z",
   "autor": "webtecnica"
  },
  {
   "sha": "c8c3b66b9903d841962c5c8125998ca35da0578f",
   "quando": "2026-09-17T03:25:09Z",
   "autor": "webtecnica"
  },
  {
   "sha": "07ac239032056b3a88885572e074f55c150087d0",
   "quando": "2026-09-17T03:52:03Z",
   "autor": "webtecnica"
  },
  {
   "sha": "d3c415e682cce63ed7d78ee62abf5f72aa2c1e0c",
   "quando": "2026-09-17T03:54:12Z",
   "autor": "webtecnica"
  },
  {
   "sha": "65b22cd1c20ebd43f5ffdc08918ab06a929cdc16",
   "quando": "2026-09-18T02:07:18Z",
   "autor": "Pessoa"
  },
  {
   "sha": "e120c5d38079aff5a48bcc73dbed00975a379cb5",
   "quando": "2026-09-18T11:31:25Z",
   "autor": "webtecnica"
  },
  {
   "sha": "489f7aae7c199e3ef0cf87e6172f1858861f8121",
   "quando": "2026-09-18T11:47:41Z",
   "autor": "webtecnica"
  }
 ],
 "a_frente:pr1017": 0,
 "a_frente:pr1017x": 0,
 "pr:1058": {
  "author": {
   "id": "MDQ6VXNlcjc1NTU2MjQy",
   "is_bot": false,
   "login": "webtecnica",
   "name": ""
  },
  "createdAt": "2026-09-17T03:26:07Z",
  "headRefName": "feat/1034-comportamento-da-instalacao-em-tela",
  "headRefOid": "48e45de72f0c527b3201bf5cc637848adecf076f",
  "number": 1058,
  "state": "OPEN"
 },
 "comentarios:1058": [
  {
   "id": 5708002269,
   "autor": "vercel[bot]",
   "quando": "2026-09-17T03:26:11Z",
   "texto": "@webtecnica is attempting to deploy a commit to the **rafael-maudibrasil's projects** Team on [Vercel](https://vercel.com).\n\nA member of the Team first needs to [authorize it](https://vercel.com/git/authorize?team=rafael-maudibrasil's%20projects&slug=rafael-maudibrasils-projects&teamId=team_CsA6wVAM2V1CcrKPsDo6VGHO&type=github&job=%7B%22headInfo%22%3A%7B%22sha%22%3A%22bb11d05840de53b322457b04fdbf3e9e5eb4dbce%22%7D%2C%22id%22%3A%22QmRTZEeLjHiAjrPzZ6b2gVcd2oashuS4ryM8DwnqtRh1dC%22%2C%22org%22%3A%22melgarafael%22%2C%22prId%22%3A1058%2C%22repo%22%3A%22DeskcommCRM%22%7D).\n\n",
   "onde": "conversa"
  },
  {
   "id": 5708002580,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-17T03:26:12Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / Security Evidence:bb11d05840de53b322457b04fdbf3e9e5eb4dbce -->\n## ECC Tools / Security Evidence\n\nCommit: `bb11d05840de53b322457b04fdbf3e9e5eb4dbce`\n\n**Security evidence gate passed** (success)\n\nNo security-sensitive scanner-evidence gap detected.\n\nMode: enforce\n\nScanned 22 changed file(s). No missing scanner-evidence signal was detected.\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5708002754,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-17T03:26:13Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / PR Risk Taxonomy:bb11d05840de53b322457b04fdbf3e9e5eb4dbce -->\n## ECC Tools / PR Risk Taxonomy\n\nCommit: `bb11d05840de53b322457b04fdbf3e9e5eb4dbce`\n\n**PR taxonomy review recommended** (neutral)\n\nDetected 3 PR taxonomy bucket(s): Security Evidence, CI/CD Recommendation, Cost/Token Risk.\n\nScanned 22 changed file(s).\n\n\n\nRoadmap taxonomy buckets:\n\n\n\n### Security Evidence\nSecurity-sensitive changes should carry explicit scanner, code-scanning, or focused regression evidence.\n\nSignals:\n- 1 security-sensitive path(s) changed\n\nPaths:\n- `lib/waha/webhook-auth.ts`\n\n### CI/CD Recommendation\nCI, dependency, coverage, and contract signals should be routed into follow-up checks or verification work.\n\nSignals:\n- Async job or webhook changes may ship without reliability coverage\n- User-facing UI changes may ship without browser coverage\n- 1 CI or workflow path(s) changed\n\nPaths:\n- `lib/instalacao/comportamento.test.ts`\n- `app/actions/settings/updateComportamento.ts`\n- `app/admin/(protected)/sistema/_form.tsx`\n- `app/admin/(protected)/sistema/page.tsx`\n- `components/admin/AdminSidebar.tsx`\n- `components/ai/BudgetCard.tsx`\n- `lib/agent-engine/agent/turn-knobs.ts`\n- `lib/agent-engine/edge/llm/run-model-call.ts`\n\n### Cost/Token Risk\nAI routing, usage, and token-budget changes should include budget or usage-limit evidence.\n\nSignals:\n- Cost or token-risk changes may ship without budget evidence\n- 3 cost/token path(s) changed\n\nPaths:\n- `components/ai/BudgetCard.tsx`\n- `lib/agent-engine/edge/llm/run-model-call.ts`\n- `lib/ai/budget/check.ts`\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5708002928,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-17T03:26:15Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / Reference Set Readiness:bb11d05840de53b322457b04fdbf3e9e5eb4dbce -->\n## ECC Tools / Reference Set Readiness\n\nCommit: `bb11d05840de53b322457b04fdbf3e9e5eb4dbce`\n\n**Reference set readiness gaps detected** (neutral)\n\nReference evidence present for 1/7 areas (14%) across 22 changed file(s).\n\nThis check is based on files changed in this PR. Repository-level readiness is still reported by `/ecc-tools analyze` comments and generated manifests.\n\n| Area | Status | Evidence / Next Step |\n| --- | --- | --- |\n| Deep analyzer corpus | Missing | Add analyzer fixture, golden, benchmark, or reference-set files that can catch analyzer regressions. |\n| RAG/evaluator comparison | Missing | Add retrieval or evaluator reference-set comparison fixtures with expected ranking behavior. |\n| PR salvage/review corpus | Missing | Add stale-PR, review-thread, reopen-flow, or salvage reference cases for queue cleanup automation. |\n| Discussion triage corpus | Missing | Add public discussion triage fixtures, golden cases, or reference sets for informational, answered, and no-response classifications. |\n| Harness compatibility | Missing | Add cross-harness, adapter-compliance, or harness-audit evidence for Claude, Codex, OpenCode, Zed, dmux, and agent surfaces. |\n| Security evidence | Present | `lib/audit/actions.ts` |\n| CI failure-mode evidence | Missing | Add captured CI failure logs, dry-run fixtures, or troubleshooting docs for common workflow failure modes. |\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5708002946,
   "autor": "github-actions[bot]",
   "quando": "2026-09-17T03:26:15Z",
   "texto": "<!-- triagem-de-pr:v1:pass=1 -->\nRecebido, @webtecnica — obrigado por isto.\n\nDuas coisas que vão parecer erro seu e não são:\n\n- O check **Vercel** vermelho (\"Authorization required to deploy\") é esperado em PR de fork. A\n  `main` faz deploy de produção e a Vercel se recusa a construir código de fora, o que está\n  certo. **Ele não entra no gate de merge.**\n- No primeiro PR de quem nunca contribuiu aqui, os workflows ficam **parados esperando\n  liberação** — política do GitHub, não sua. Enquanto isso o PR parece não ter check nenhum\n  (nem o `gh pr checks` mostra os que estão nesse estado). Quem tria libera; você não precisa\n  fazer nada.\n\nUm mantenedor vai revisar de verdade — rodando os gates e reproduzindo o comportamento, não só\nlendo o diff — e responde aqui **em até um dia útil**, com a medição junto, nunca com um \"acho\nque\".\n\nEsta mensagem é automática e não diz nada sobre o seu PR: ela é sobre o processo. O que vem\ndepois é pessoa.\n",
   "onde": "conversa"
  },
  {
   "id": 5708003156,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-17T03:26:16Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / Hosted Promotion Readiness:bb11d05840de53b322457b04fdbf3e9e5eb4dbce -->\n## ECC Tools / Hosted Promotion Readiness\n\nCommit: `bb11d05840de53b322457b04fdbf3e9e5eb4dbce`\n\n**Hosted promotion readiness passed** (success)\n\nNo hosted promotion evidence gaps detected across 22 changed file(s); 0 corpus scenarios had matching evidence.\n\nThis check compares PR file changes against the evaluator/RAG promotion corpus in `src/analyzers/fixtures/evaluator-rag-corpus.ts`.\nHosted output scoring inspected 0 completed cached hosted job results.\n\nNo evaluator corpus scenarios matched this PR.\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5722169431,
   "autor": "melgarafael",
   "quando": "2026-09-17T22:39:37Z",
   "texto": "<!-- triagem-de-pr:v1:pass=10 -->\nObrigado, @webtecnica — o desenho está certo e alinhado com o que o dono do produto pediu (Liga/Desliga de configuração geral na tela de admin, com o `.env` como piso). Medi três defeitos, todos com conserto delimitado, e fiz os três; explico cada um com a medição, porque dois deles ninguém tinha como ver pelo CI.\n\n**O que ele faz, na minha leitura:** as quatro chaves de comportamento da instalação (proteção de gasto de IA, exigir assinatura nas entregas do canal, divulgação de pagamento, conferência de promessa) passam a viver no banco, editáveis em **Admin › Comportamento**, com o `.env` como piso e auditoria de quem mudou.\n\n**O que eu medi, e o que consertei** (main `7168961ad`, head `bb11d0584`):\n\n1. **O CI parou no typecheck e nada mais rodou.** `lib/i18n/dicionario.ts:2047` acrescenta `\"Desligada\"`, que já existia na linha 1088 → `TS1117`. Com isso, `verify`, `build`, `e2e` e as imagens ficaram vermelhos e a suíte unitária **nunca rodou** neste head. Conserto: removi a entrada duplicada; a tela passa a usar a que já existia.\n\n2. **As colunas novas não chegariam a quem já instalou.** No baseline, as quatro colunas e as duas restrições entraram *dentro* do `create table if not exists public.platform_settings`. Essa tabela existe desde a **v1.25.0** (medido: `git show v1.25.0:supabase/baseline.sql | grep -c 'create table if not exists public.platform_settings'` → 1), e o `update.sh` re-aplica o baseline num banco que já tem a tabela: o `create` vira no-op e as colunas nunca nascem. A migration `0265` está certa; o espelho no baseline é que faltava. Conserto: acrescentei o bloco `-- ---- comportamento da instalação (migration 0265) ----` com `alter table ... add column if not exists`, as restrições e os comentários. Prova, num Postgres descartável (pg17), no caminho que o cliente percorre — instalar a v1.31.1 e depois re-aplicar o baseline novo, como o `update.sh` faz: com o baseline do seu head, `select` das quatro colunas em `platform_settings` devolve **0**; com o conserto, devolve **4** (`divulgacao_de_pagamento`, `exigir_assinatura_no_webhook`, `orcamento_de_ia`, `promessa_semantica`).\n   Isso é dívida **nossa** também: `tests/unit/apendice-do-baseline-nao-diverge-da-cadeia.test.ts` compara só corpo de função, e o `pnpm test:db` aplica o mesmo baseline duas vezes — nenhum dos dois exercita \"baseline antigo → baseline novo\", que é o caminho do cliente.\n\n3. **A escolha da tela não valia para a entrada de mensagens depois que o app reinicia.** O portão do webhook (`lib/waha/webhook-auth.ts:66`) lê uma memória de processo, e nenhum caminho das rotas `app/api/v1/webhooks/waha/route.ts` e `.../[token]/route.ts` carregava a linha do banco — só a própria tela de Comportamento e a de uso de IA faziam isso. Efeito: com \"exigir assinatura\" ligado na tela, depois de todo reinício (inclusive o do `update.sh`) as entregas voltavam a ser aceitas sem assinatura até alguém abrir uma dessas telas; e no sentido contrário, com o `.env` exigindo e a tela desligando, a ingestão ficava cortada. A tela e o `.env.example` prometem o contrário. Conserto: as duas rotas (e o worker, no boot) passam a carregar a linha antes do portão, e escrevi um teste de **rota** que começa com a memória vazia — o estado de um processo recém-subido, que é exatamente onde o defeito mora. Prova: com o conserto, o arquivo novo passa (4 casos). Sabotando — devolvendo as duas rotas à versão anterior ao conserto —, **3 dos 4 casos reprovam**, nos dois sentidos (tela exige e `.env` não; tela dispensa e `.env` exige). Árvore restaurada e conferida depois.\n\nTambém juntei cada parágrafo do fragmento numa linha só (o gate reprova ênfase que atravessa quebra de linha).\n\n**Não medido:** a instalação NOVA com o baseline consertado (o meu script de prova aplicou as colunas extras de `auth.users` só no primeiro banco descartável, então essa rodada morreu por limite do instrumento, não por defeito — e é exatamente o que o `pnpm test:db` do CI cobre, aplicando o baseline em instalação e em atualização); `typecheck`, suíte completa, `build` e `e2e` (a máquina esteve em carga acima de 50 a tarde inteira, e número medido assim não vale — o CI do PR os cobre); a tela `/admin/sistema` aberta num navegador; e o efeito do \"avisar\" de ponta a ponta no modelo.\n\n**Aviso, como manda a regra da casa:** os quatro consertos estão commitados aqui e **ainda não empurrados**. Vou empurrá-los na sua branch (`feat/1034-comportamento-da-instalacao-em-tela`) na retomada de amanhã, avisando aqui de novo antes — a janela de trabalho de hoje fechou e eu não deixo uma rodada de CI sem ninguém olhando. Nada de `--force`, nada de rebase, nada de reescrever os seus commits: commit novo por cima. Se preferir fazer você mesmo, me diga e eu não empurro — as medições acima são tudo o que você precisa, e o crédito de cada conserto fica em commit separado do seu trabalho.\n\n**Duas coisas que não são bloqueador e ficam com você:**\n- O corpo diz \"Fecha #1034\", mas a Onda 1 tem seis itens e este PR entrega quatro (fora: `NUVEMSHOP_ENABLED` e o auto-cadastro do #714, com motivo escrito). Sugiro `Refs #1034` para a issue não fechar com o resto pendente.\n- A tela de camadas da organização (`app/api/v1/ai/guardrail-layers/route.ts:52`) continua lendo o padrão direto do ambiente; depois deste PR, ela pode divergir do que o dono salvou na tela. Não é regressão sua — é um segundo leitor que ninguém migrou.\n\n**Uma pergunta ao dono do produto**, que eu já escrevi para ele e não trava este PR: desligar pela tela uma proteção da instalação (assinatura do canal, teto de gasto) deve exigir sessão com verificação em duas etapas, como já exige desligar o próprio fator? Enquanto ele não responde, o PR entra como está.\n",
   "onde": "conversa"
  },
  {
   "id": 5723943222,
   "autor": "webtecnica",
   "quando": "2026-09-18T02:01:18Z",
   "texto": "**Pode empurrar — e obrigado pelas três medições.** Respondendo na ordem:\n\n**1. Empurre os seus na minha branch** (`feat/1034-comportamento-da-instalacao-em-tela`). Não toco nela até você avisar aqui; commit novo por cima, sem `--force` e sem rebase, como você propôs — e o crédito separado é o certo: os defeitos eram do meu desenho, os consertos são seus. As medições que você anexou são justamente a parte que eu não tinha como ver: o baseline de quem **já instalou** (a `create table if not exists` desde a v1.25.0) e o estado de processo recém-subido com memória vazia. Meus testes cobriam só o segundo.\n\n**2. Corpo ajustado:** `Fecha #1034` → `Refs #1034`, feito agora. A Onda 1 tem seis itens e este PR entrega quatro; a issue não deve fechar com `NUVEMSHOP_ENABLED` e o auto-cadastro do #714 pendentes — os motivos já estão escritos no corpo.\n\n**3. O segundo leitor eu pego.** `app/api/v1/ai/guardrail-layers/route.ts:52` continuar lendo o padrão direto do ambiente depois deste PR é dívida com data marcada: a tela passa a ser a fonte e ele fica no `.env` — a instalação que o dono desligou na tela continua com a camada ligada nesse caminho. Faço num PR próprio, pequeno, sobre a `main`, **fora deste** (não misturo escopo nem crédito). Se preferir que eu abra issue antes, me diga.\n\n**4. Sobre a `main` nesta branch — ela está `DIRTY`** (a base andou e o merge está pendente). Escolha sua, as duas cabem no \"nada de `--force`, nada de rebase\":\n\n- **(a)** eu trago a `main` para dentro por commit de merge **antes** de você empurrar — você empurra sobre uma branch já em dia; ou\n- **(b)** você empurra os seus commits primeiro e eu trago a `main` depois.\n\nNão mexo em nada até você dizer qual. Na pergunta ao dono do produto eu não entro — é decisão dele, e o PR entra como está, como você combinou.\n",
   "onde": "conversa"
  },
  {
   "id": 5724751814,
   "autor": "melgarafael",
   "quando": "2026-09-18T03:32:11Z",
   "texto": "<!-- triagem-de-pr:v1:pass=11 -->\n@webtecnica — **escolha (a): traga a `main` para dentro primeiro.** E vou ser transparente sobre o prazo e sobre a procedência dos quatro commits, porque você está esperando sem tocar na branch e merece saber exatamente o que vai receber.\n\n**Por que (a) e não (b).** Se empurrarmos primeiro numa branch `DIRTY`, os nossos consertos nascem sobre uma árvore fora de dia e o conflito aparece **depois**, misturado com o seu merge — e aí fica difícil dizer qual lado quebrou o quê. Com a `main` dentro antes, os nossos quatro commits são medidos contra a árvore que de fato vai recebê-los. Além disso o merge é seu, na sua branch, e é mais limpo assim para o histórico.\n\n**A procedência, que eu não vou esconder:** os quatro commits existem, mas foram escritos por **outra sessão nossa, que encerrou a janela** — estão numa branch local (`triagem/1058-comportamento`, `aaf23bc37`) e nunca foram empurrados. Medi que eles estão lá:\n\n```\naaf23bc37 docs(release): o fragmento do comportamento da instalação sem quebra de linha\n1747229a9 fix(waha): o portão do webhook lê a escolha da tela desde o primeiro pedido\n6a4a52d8f fix(baseline): as colunas de comportamento chegam a quem já instalou\na7db956be fix(i18n): a tela de Comportamento usa a entrada \"Desligada\" que já existia\n```\n\n**Eu não vou empurrar isso na sua branch com base na descrição deles.** A regra da casa, paga caro antes, é que commit de sessão encerrada se retoma **pelo diff, nunca pelo relato** — quem escreveu não está mais aqui para responder por uma decisão implícita, e \"confiei no texto do commit\" é como se perde trabalho. Vou reler os quatro contra a sua árvore com a `main` dentro e só então empurro, com o crédito separado como você propôs (o desenho é seu, os consertos são nossos).\n\n**Prazo honesto:** não é esta madrugada. A máquina está com carga **83 para 11 CPUs** e a fila do GitHub Actions com **76 esperando e 5 rodando** — nesse estado, gate pesado produz vermelho falso, e vermelho falso custa mais que espera, porque manda a gente caçar defeito que não existe. Empurrar quatro commits não relidos, num PR que toca o comportamento da instalação de quem já instalou, é a pior hora possível. Assim que a fila girar e eu reler o diff, eu volto aqui antes de empurrar.\n\n**Item 2 (o `Refs #1034`): certo, e obrigado.** Fechar a issue com quatro dos seis itens da Onda 1 faria o `NUVEMSHOP_ENABLED` e o auto-cadastro desaparecerem do radar sem ninguém decidir nada.\n\n**Item 3: PR próprio, e não precisa de issue antes.** A doutrina do projeto é explícita em não cobrar issue por formalidade quando o conserto é pequeno e bem explicado — e o seu está: `app/api/v1/ai/guardrail-layers/route.ts:52` continuar lendo o padrão do ambiente **depois** que a tela passou a ser a fonte é dívida com data marcada, e o efeito é concreto (a instalação que o dono desligou na tela segue com a camada ligada por aquele caminho). Abra o PR direto, pequeno, sobre a `main`. Se você quiser a issue de todo modo para deixar rastro, ela não atrapalha — mas não é ela que libera o trabalho.\n\n**Uma coisa que eu preciso dizer sobre este PR, e que não é sua:** ele está com `build-and-size`, `verify`, `e2e` e `imagens-ok` vermelhos ao mesmo tempo, e a base está atrás. Quatro obrigatórios vermelhos de uma vez quase nunca são quatro defeitos — é a árvore. Depois do seu merge da `main`, o que sobrar de vermelho passa a ser informação; agora não é.\n",
   "onde": "conversa"
  },
  {
   "id": 5729347463,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-18T11:29:40Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / Security Evidence:3b7db3e2cd35fc843b2c0581331cd81fad40c15c -->\n## ECC Tools / Security Evidence\n\nCommit: `3b7db3e2cd35fc843b2c0581331cd81fad40c15c`\n\n**Security evidence gate passed** (success)\n\nNo security-sensitive scanner-evidence gap detected.\n\nMode: enforce\n\nScanned 22 changed file(s). No missing scanner-evidence signal was detected.\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5729347664,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-18T11:29:41Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / PR Risk Taxonomy:3b7db3e2cd35fc843b2c0581331cd81fad40c15c -->\n## ECC Tools / PR Risk Taxonomy\n\nCommit: `3b7db3e2cd35fc843b2c0581331cd81fad40c15c`\n\n**PR taxonomy review recommended** (neutral)\n\nDetected 3 PR taxonomy bucket(s): Security Evidence, CI/CD Recommendation, Cost/Token Risk.\n\nScanned 22 changed file(s).\n\n\n\nRoadmap taxonomy buckets:\n\n\n\n### Security Evidence\nSecurity-sensitive changes should carry explicit scanner, code-scanning, or focused regression evidence.\n\nSignals:\n- 1 security-sensitive path(s) changed\n\nPaths:\n- `lib/waha/webhook-auth.ts`\n\n### CI/CD Recommendation\nCI, dependency, coverage, and contract signals should be routed into follow-up checks or verification work.\n\nSignals:\n- Async job or webhook changes may ship without reliability coverage\n- User-facing UI changes may ship without browser coverage\n- 1 CI or workflow path(s) changed\n\nPaths:\n- `lib/instalacao/comportamento.test.ts`\n- `app/actions/settings/updateComportamento.ts`\n- `app/admin/(protected)/sistema/_form.tsx`\n- `app/admin/(protected)/sistema/page.tsx`\n- `components/admin/AdminSidebar.tsx`\n- `components/ai/BudgetCard.tsx`\n- `lib/agent-engine/agent/turn-knobs.ts`\n- `lib/agent-engine/edge/llm/run-model-call.ts`\n\n### Cost/Token Risk\nAI routing, usage, and token-budget changes should include budget or usage-limit evidence.\n\nSignals:\n- Cost or token-risk changes may ship without budget evidence\n- 3 cost/token path(s) changed\n\nPaths:\n- `components/ai/BudgetCard.tsx`\n- `lib/agent-engine/edge/llm/run-model-call.ts`\n- `lib/ai/budget/check.ts`\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5729347838,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-18T11:29:42Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / Reference Set Readiness:3b7db3e2cd35fc843b2c0581331cd81fad40c15c -->\n## ECC Tools / Reference Set Readiness\n\nCommit: `3b7db3e2cd35fc843b2c0581331cd81fad40c15c`\n\n**Reference set readiness gaps detected** (neutral)\n\nReference evidence present for 1/7 areas (14%) across 22 changed file(s).\n\nThis check is based on files changed in this PR. Repository-level readiness is still reported by `/ecc-tools analyze` comments and generated manifests.\n\n| Area | Status | Evidence / Next Step |\n| --- | --- | --- |\n| Deep analyzer corpus | Missing | Add analyzer fixture, golden, benchmark, or reference-set files that can catch analyzer regressions. |\n| RAG/evaluator comparison | Missing | Add retrieval or evaluator reference-set comparison fixtures with expected ranking behavior. |\n| PR salvage/review corpus | Missing | Add stale-PR, review-thread, reopen-flow, or salvage reference cases for queue cleanup automation. |\n| Discussion triage corpus | Missing | Add public discussion triage fixtures, golden cases, or reference sets for informational, answered, and no-response classifications. |\n| Harness compatibility | Missing | Add cross-harness, adapter-compliance, or harness-audit evidence for Claude, Codex, OpenCode, Zed, dmux, and agent surfaces. |\n| Security evidence | Present | `lib/audit/actions.ts` |\n| CI failure-mode evidence | Missing | Add captured CI failure logs, dry-run fixtures, or troubleshooting docs for common workflow failure modes. |\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5729348116,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-18T11:29:44Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / Hosted Promotion Readiness:3b7db3e2cd35fc843b2c0581331cd81fad40c15c -->\n## ECC Tools / Hosted Promotion Readiness\n\nCommit: `3b7db3e2cd35fc843b2c0581331cd81fad40c15c`\n\n**Hosted promotion readiness passed** (success)\n\nNo hosted promotion evidence gaps detected across 22 changed file(s); 0 corpus scenarios had matching evidence.\n\nThis check compares PR file changes against the evaluator/RAG promotion corpus in `src/analyzers/fixtures/evaluator-rag-corpus.ts`.\nHosted output scoring inspected 0 completed cached hosted job results.\n\nNo evaluator corpus scenarios matched this PR.\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5729510222,
   "autor": "webtecnica",
   "quando": "2026-09-18T11:45:23Z",
   "texto": "Main trazida para dentro da branch: merge de `origin/main` (`ed42ad119`) **sem conflito** → `3b7db3e2cd35fc843b2c0581331cd81fad40c15c`, já empurrado no fork (sem force). A `main` avançou 595 arquivos desde o ponto de fork; 6 deles se sobrepõem aos nossos 22 (`.env.example`, `lib/env.ts`, `lib/audit/actions.ts`, `lib/i18n/dicionario.ts`, `supabase/baseline.sql`, `supabase/migrations/MANIFEST.md`) e o merge resolveu os seis sozinho (estratégia `ort`, zero marcadores de conflito). O diff do PR contra a `main` segue sendo só os 22 arquivos da branch.\n\nMedido no head mesclado, depois de refazer o `pnpm install --frozen-lockfile` aqui (a `main` trouxe `ipaddr.js` e `jsonc-parser`, que faltavam no `node_modules` local):\n\n- `pnpm typecheck` → **rc=2, 1 erro**: `lib/i18n/dicionario.ts(2084,3): error TS1117: An object literal cannot have multiple properties with the same name.` É a duplicata de `\"Desligada\"` (`Desligada:` sem aspas na linha 1100, que já existia na `main`, e `\"Desligada\":` na 2084, do nosso desenho): ela **já vinha do nosso commit** `bb11d0584` (onde eram as linhas 1088 e 2047) — o merge não a criou. Numa cópia limpa do head sem essas 3 linhas o typecheck fecha **0 erros (rc=0)**, e é por essa mesma linha que o `verify` (passo *Typecheck*) e o `build-and-size` (passo *Build*) estão vermelhos agora. Ou seja: o vermelho é exatamente o que o seu `a7db956be` corrige.\n- Teste próprio do PR: `pnpm exec vitest run lib/instalacao/comportamento.test.ts` → **8 passed (8)**, rc=0.\n\nOs quatro commits são esperados — **pode empurrar**. O crédito fica como você propôs: o desenho é nosso, os consertos são seus.\n",
   "onde": "conversa"
  },
  {
   "id": 5729589246,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-18T11:52:57Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / Security Evidence:48e45de72f0c527b3201bf5cc637848adecf076f -->\n## ECC Tools / Security Evidence\n\nCommit: `48e45de72f0c527b3201bf5cc637848adecf076f`\n\n**Security evidence gate passed** (success)\n\nNo security-sensitive scanner-evidence gap detected.\n\nMode: enforce\n\nScanned 22 changed file(s). No missing scanner-evidence signal was detected.\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5729589493,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-18T11:52:59Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / PR Risk Taxonomy:48e45de72f0c527b3201bf5cc637848adecf076f -->\n## ECC Tools / PR Risk Taxonomy\n\nCommit: `48e45de72f0c527b3201bf5cc637848adecf076f`\n\n**PR taxonomy review recommended** (neutral)\n\nDetected 3 PR taxonomy bucket(s): Security Evidence, CI/CD Recommendation, Cost/Token Risk.\n\nScanned 22 changed file(s).\n\n\n\nRoadmap taxonomy buckets:\n\n\n\n### Security Evidence\nSecurity-sensitive changes should carry explicit scanner, code-scanning, or focused regression evidence.\n\nSignals:\n- 1 security-sensitive path(s) changed\n\nPaths:\n- `lib/waha/webhook-auth.ts`\n\n### CI/CD Recommendation\nCI, dependency, coverage, and contract signals should be routed into follow-up checks or verification work.\n\nSignals:\n- Async job or webhook changes may ship without reliability coverage\n- User-facing UI changes may ship without browser coverage\n- 1 CI or workflow path(s) changed\n\nPaths:\n- `lib/instalacao/comportamento.test.ts`\n- `app/actions/settings/updateComportamento.ts`\n- `app/admin/(protected)/sistema/_form.tsx`\n- `app/admin/(protected)/sistema/page.tsx`\n- `components/admin/AdminSidebar.tsx`\n- `components/ai/BudgetCard.tsx`\n- `lib/agent-engine/agent/turn-knobs.ts`\n- `lib/agent-engine/edge/llm/run-model-call.ts`\n\n### Cost/Token Risk\nAI routing, usage, and token-budget changes should include budget or usage-limit evidence.\n\nSignals:\n- Cost or token-risk changes may ship without budget evidence\n- 3 cost/token path(s) changed\n\nPaths:\n- `components/ai/BudgetCard.tsx`\n- `lib/agent-engine/edge/llm/run-model-call.ts`\n- `lib/ai/budget/check.ts`\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5729589711,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-18T11:53:00Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / Reference Set Readiness:48e45de72f0c527b3201bf5cc637848adecf076f -->\n## ECC Tools / Reference Set Readiness\n\nCommit: `48e45de72f0c527b3201bf5cc637848adecf076f`\n\n**Reference set readiness gaps detected** (neutral)\n\nReference evidence present for 1/7 areas (14%) across 22 changed file(s).\n\nThis check is based on files changed in this PR. Repository-level readiness is still reported by `/ecc-tools analyze` comments and generated manifests.\n\n| Area | Status | Evidence / Next Step |\n| --- | --- | --- |\n| Deep analyzer corpus | Missing | Add analyzer fixture, golden, benchmark, or reference-set files that can catch analyzer regressions. |\n| RAG/evaluator comparison | Missing | Add retrieval or evaluator reference-set comparison fixtures with expected ranking behavior. |\n| PR salvage/review corpus | Missing | Add stale-PR, review-thread, reopen-flow, or salvage reference cases for queue cleanup automation. |\n| Discussion triage corpus | Missing | Add public discussion triage fixtures, golden cases, or reference sets for informational, answered, and no-response classifications. |\n| Harness compatibility | Missing | Add cross-harness, adapter-compliance, or harness-audit evidence for Claude, Codex, OpenCode, Zed, dmux, and agent surfaces. |\n| Security evidence | Present | `lib/audit/actions.ts` |\n| CI failure-mode evidence | Missing | Add captured CI failure logs, dry-run fixtures, or troubleshooting docs for common workflow failure modes. |\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5729590029,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-18T11:53:02Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / Hosted Promotion Readiness:48e45de72f0c527b3201bf5cc637848adecf076f -->\n## ECC Tools / Hosted Promotion Readiness\n\nCommit: `48e45de72f0c527b3201bf5cc637848adecf076f`\n\n**Hosted promotion readiness passed** (success)\n\nNo hosted promotion evidence gaps detected across 22 changed file(s); 0 corpus scenarios had matching evidence.\n\nThis check compares PR file changes against the evaluator/RAG promotion corpus in `src/analyzers/fixtures/evaluator-rag-corpus.ts`.\nHosted output scoring inspected 0 completed cached hosted job results.\n\nNo evaluator corpus scenarios matched this PR.\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5729620162,
   "autor": "webtecnica",
   "quando": "2026-09-18T11:55:59Z",
   "texto": "A `main` andou de novo depois do meu merge, então trouxe de novo — head agora `48e45de72` (merge novo, sem `--force` e sem rebase; conflito: **nenhum**, a árvore fecha sozinha).\n\nEstado do head, medido agora: `pnpm typecheck` → **rc=2**, com **um** erro — o mesmo de antes, e o mesmo que o seu `a7db956be` conserta:\n\n```\nlib/i18n/dicionario.ts(2084,3): error TS1117: An object literal cannot have multiple properties with the same name.\n```\n\nÉ a duplicata `Desligada:` / `\"Desligada\":`, que nasceu na `bb11d0584`; o merge não a criou nem tocou nela — deixei o arquivo como está justamente para não competir com o seu commit.\n\nA base está atualizada: **pode empurrar os quatro** — eu releio e não toco em nada deles.\n",
   "onde": "conversa"
  }
 ],
 "commits:1058": [
  {
   "sha": "bb11d05840de53b322457b04fdbf3e9e5eb4dbce",
   "quando": "2026-09-17T03:25:34Z",
   "autor": "webtecnica"
  },
  {
   "sha": "3b7db3e2cd35fc843b2c0581331cd81fad40c15c",
   "quando": "2026-09-18T11:29:11Z",
   "autor": "webtecnica"
  },
  {
   "sha": "48e45de72f0c527b3201bf5cc637848adecf076f",
   "quando": "2026-09-18T11:52:42Z",
   "autor": "webtecnica"
  }
 ],
 "a_frente:triagem/1058-comportamento": 4,
 "substituta:triagem/1058-comportamento": null,
 "pr:1067": {
  "author": {
   "id": "MDQ6VXNlcjc1NTU2MjQy",
   "is_bot": false,
   "login": "webtecnica",
   "name": ""
  },
  "createdAt": "2026-09-17T14:32:44Z",
  "headRefName": "fix/652-automacao-nao-se-apresenta-como-ia",
  "headRefOid": "34be972512d8de7fc25c632ce5fde4878ea793e8",
  "number": 1067,
  "state": "OPEN"
 },
 "comentarios:1067": [
  {
   "id": 5716135509,
   "autor": "vercel[bot]",
   "quando": "2026-09-17T14:32:48Z",
   "texto": "@webtecnica is attempting to deploy a commit to the **rafael-maudibrasil's projects** Team on [Vercel](https://vercel.com).\n\nA member of the Team first needs to [authorize it](https://vercel.com/git/authorize?team=rafael-maudibrasil's%20projects&slug=rafael-maudibrasils-projects&teamId=team_CsA6wVAM2V1CcrKPsDo6VGHO&type=github&job=%7B%22headInfo%22%3A%7B%22sha%22%3A%2211c8636196025258321f479917fc545ffc47861e%22%7D%2C%22id%22%3A%22QmeDYUKe1XedFfSBudQKdK9ymyi5oLK9Ume1BLcguxYfuU%22%2C%22org%22%3A%22melgarafael%22%2C%22prId%22%3A1067%2C%22repo%22%3A%22DeskcommCRM%22%7D).\n\n",
   "onde": "conversa"
  },
  {
   "id": 5716136059,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-17T14:32:50Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / Security Evidence:11c8636196025258321f479917fc545ffc47861e -->\n## ECC Tools / Security Evidence\n\nCommit: `11c8636196025258321f479917fc545ffc47861e`\n\n**Security evidence gate passed** (success)\n\nNo security-sensitive scanner-evidence gap detected.\n\nMode: enforce\n\nScanned 19 changed file(s). No missing scanner-evidence signal was detected.\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5716136306,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-17T14:32:52Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / PR Risk Taxonomy:11c8636196025258321f479917fc545ffc47861e -->\n## ECC Tools / PR Risk Taxonomy\n\nCommit: `11c8636196025258321f479917fc545ffc47861e`\n\n**PR taxonomy review recommended** (neutral)\n\nDetected 2 PR taxonomy bucket(s): Security Evidence, CI/CD Recommendation.\n\nScanned 19 changed file(s).\n\n\n\nRoadmap taxonomy buckets:\n\n\n\n### Security Evidence\nSecurity-sensitive changes should carry explicit scanner, code-scanning, or focused regression evidence.\n\nSignals:\n- 1 security-sensitive path(s) changed\n\nPaths:\n- `lib/agent-engine/edge/crm/session-reconciler.ts`\n\n### CI/CD Recommendation\nCI, dependency, coverage, and contract signals should be routed into follow-up checks or verification work.\n\nSignals:\n- API contract changes may ship without integration coverage\n- API implementation changes may ship without contract artifact updates\n- User-facing UI changes may ship without browser coverage\n- 6 CI or workflow path(s) changed\n\nPaths:\n- `lib/agent-engine/edge/crm/session-reconciler.test.ts`\n- `tests/invariants/vocabulario-banco-x-typescript.test.ts`\n- `tests/unit/atrito-par-eficiencia-dano.test.ts`\n- `tests/unit/automacao-carimbo-de-origem.test.ts`\n- `tests/unit/eco-do-envio-nao-silencia-o-bot.test.ts`\n- `tests/unit/rotulo-de-origem-tem-emissor.test.ts`\n- `app/api/v1/messages/_handler.ts`\n- `app/api/v1/metrics/atrito/route.ts`\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5716136550,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-17T14:32:53Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / Reference Set Readiness:11c8636196025258321f479917fc545ffc47861e -->\n## ECC Tools / Reference Set Readiness\n\nCommit: `11c8636196025258321f479917fc545ffc47861e`\n\n**Reference set readiness gaps detected** (neutral)\n\nReference evidence present for 0/7 areas (0%) across 19 changed file(s).\n\nThis check is based on files changed in this PR. Repository-level readiness is still reported by `/ecc-tools analyze` comments and generated manifests.\n\n| Area | Status | Evidence / Next Step |\n| --- | --- | --- |\n| Deep analyzer corpus | Missing | Add analyzer fixture, golden, benchmark, or reference-set files that can catch analyzer regressions. |\n| RAG/evaluator comparison | Missing | Add retrieval or evaluator reference-set comparison fixtures with expected ranking behavior. |\n| PR salvage/review corpus | Missing | Add stale-PR, review-thread, reopen-flow, or salvage reference cases for queue cleanup automation. |\n| Discussion triage corpus | Missing | Add public discussion triage fixtures, golden cases, or reference sets for informational, answered, and no-response classifications. |\n| Harness compatibility | Missing | Add cross-harness, adapter-compliance, or harness-audit evidence for Claude, Codex, OpenCode, Zed, dmux, and agent surfaces. |\n| Security evidence | Missing | Attach security evidence such as SBOMs, SARIF, audit reports, or AgentShield evidence packs. |\n| CI failure-mode evidence | Missing | Add captured CI failure logs, dry-run fixtures, or troubleshooting docs for common workflow failure modes. |\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5716136909,
   "autor": "github-actions[bot]",
   "quando": "2026-09-17T14:32:54Z",
   "texto": "<!-- triagem-de-pr:v1:pass=1 -->\nRecebido, @webtecnica — obrigado por isto.\n\nDuas coisas que vão parecer erro seu e não são:\n\n- O check **Vercel** vermelho (\"Authorization required to deploy\") é esperado em PR de fork. A\n  `main` faz deploy de produção e a Vercel se recusa a construir código de fora, o que está\n  certo. **Ele não entra no gate de merge.**\n- No primeiro PR de quem nunca contribuiu aqui, os workflows ficam **parados esperando\n  liberação** — política do GitHub, não sua. Enquanto isso o PR parece não ter check nenhum\n  (nem o `gh pr checks` mostra os que estão nesse estado). Quem tria libera; você não precisa\n  fazer nada.\n\nUm mantenedor vai revisar de verdade — rodando os gates e reproduzindo o comportamento, não só\nlendo o diff — e responde aqui **em até um dia útil**, com a medição junto, nunca com um \"acho\nque\".\n\nEsta mensagem é automática e não diz nada sobre o seu PR: ela é sobre o processo. O que vem\ndepois é pessoa.\n",
   "onde": "conversa"
  },
  {
   "id": 5716137021,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-17T14:32:55Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / Hosted Promotion Readiness:11c8636196025258321f479917fc545ffc47861e -->\n## ECC Tools / Hosted Promotion Readiness\n\nCommit: `11c8636196025258321f479917fc545ffc47861e`\n\n**Hosted promotion readiness passed** (success)\n\nNo hosted promotion evidence gaps detected across 19 changed file(s); 0 corpus scenarios had matching evidence.\n\nThis check compares PR file changes against the evaluator/RAG promotion corpus in `src/analyzers/fixtures/evaluator-rag-corpus.ts`.\nHosted output scoring inspected 0 completed cached hosted job results.\n\nNo evaluator corpus scenarios matched this PR.\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5716542775,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-17T15:00:49Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / Security Evidence:5cf293be6e1deb9dae180723fde05d3d8a2f9adc -->\n## ECC Tools / Security Evidence\n\nCommit: `5cf293be6e1deb9dae180723fde05d3d8a2f9adc`\n\n**Security evidence gate passed** (success)\n\nNo security-sensitive scanner-evidence gap detected.\n\nMode: enforce\n\nScanned 20 changed file(s). No missing scanner-evidence signal was detected.\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5716543081,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-17T15:00:51Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / PR Risk Taxonomy:5cf293be6e1deb9dae180723fde05d3d8a2f9adc -->\n## ECC Tools / PR Risk Taxonomy\n\nCommit: `5cf293be6e1deb9dae180723fde05d3d8a2f9adc`\n\n**PR taxonomy review recommended** (neutral)\n\nDetected 2 PR taxonomy bucket(s): Security Evidence, CI/CD Recommendation.\n\nScanned 20 changed file(s).\n\n\n\nRoadmap taxonomy buckets:\n\n\n\n### Security Evidence\nSecurity-sensitive changes should carry explicit scanner, code-scanning, or focused regression evidence.\n\nSignals:\n- 1 security-sensitive path(s) changed\n\nPaths:\n- `lib/agent-engine/edge/crm/session-reconciler.ts`\n\n### CI/CD Recommendation\nCI, dependency, coverage, and contract signals should be routed into follow-up checks or verification work.\n\nSignals:\n- API contract changes may ship without integration coverage\n- API implementation changes may ship without contract artifact updates\n- User-facing UI changes may ship without browser coverage\n- 7 CI or workflow path(s) changed\n\nPaths:\n- `components/inbox/MessageBubble.test.tsx`\n- `lib/agent-engine/edge/crm/session-reconciler.test.ts`\n- `tests/invariants/vocabulario-banco-x-typescript.test.ts`\n- `tests/unit/atrito-par-eficiencia-dano.test.ts`\n- `tests/unit/automacao-carimbo-de-origem.test.ts`\n- `tests/unit/eco-do-envio-nao-silencia-o-bot.test.ts`\n- `tests/unit/rotulo-de-origem-tem-emissor.test.ts`\n- `app/api/v1/messages/_handler.ts`\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5716543363,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-17T15:00:52Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / Reference Set Readiness:5cf293be6e1deb9dae180723fde05d3d8a2f9adc -->\n## ECC Tools / Reference Set Readiness\n\nCommit: `5cf293be6e1deb9dae180723fde05d3d8a2f9adc`\n\n**Reference set readiness gaps detected** (neutral)\n\nReference evidence present for 0/7 areas (0%) across 20 changed file(s).\n\nThis check is based on files changed in this PR. Repository-level readiness is still reported by `/ecc-tools analyze` comments and generated manifests.\n\n| Area | Status | Evidence / Next Step |\n| --- | --- | --- |\n| Deep analyzer corpus | Missing | Add analyzer fixture, golden, benchmark, or reference-set files that can catch analyzer regressions. |\n| RAG/evaluator comparison | Missing | Add retrieval or evaluator reference-set comparison fixtures with expected ranking behavior. |\n| PR salvage/review corpus | Missing | Add stale-PR, review-thread, reopen-flow, or salvage reference cases for queue cleanup automation. |\n| Discussion triage corpus | Missing | Add public discussion triage fixtures, golden cases, or reference sets for informational, answered, and no-response classifications. |\n| Harness compatibility | Missing | Add cross-harness, adapter-compliance, or harness-audit evidence for Claude, Codex, OpenCode, Zed, dmux, and agent surfaces. |\n| Security evidence | Missing | Attach security evidence such as SBOMs, SARIF, audit reports, or AgentShield evidence packs. |\n| CI failure-mode evidence | Missing | Add captured CI failure logs, dry-run fixtures, or troubleshooting docs for common workflow failure modes. |\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5716544555,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-17T15:00:57Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / Hosted Promotion Readiness:5cf293be6e1deb9dae180723fde05d3d8a2f9adc -->\n## ECC Tools / Hosted Promotion Readiness\n\nCommit: `5cf293be6e1deb9dae180723fde05d3d8a2f9adc`\n\n**Hosted promotion readiness passed** (success)\n\nNo hosted promotion evidence gaps detected across 20 changed file(s); 0 corpus scenarios had matching evidence.\n\nThis check compares PR file changes against the evaluator/RAG promotion corpus in `src/analyzers/fixtures/evaluator-rag-corpus.ts`.\nHosted output scoring inspected 0 completed cached hosted job results.\n\nNo evaluator corpus scenarios matched this PR.\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5716998299,
   "autor": "webtecnica",
   "quando": "2026-09-17T15:30:24Z",
   "texto": "## Gate completo verde — rodada 2, head `5cf293be`\n\nA rodada 1 **não** estava verde, e os dois vermelhos eram reais:\n\n- `components/inbox/MessageBubble.test.tsx` prendia a invariante antiga (\"nada grava esse valor\", ou seja, o balão *não* podia nomear a automação);\n- o comentário novo do `_handler.ts` nomeava o provider de canal, e o `lint:channels` reprova exatamente isso.\n\nOs dois foram corrigidos em `5cf293be`: o caso do balão passou a afirmar o **rótulo próprio** da automação (o motor passou a gravar esse valor — é o que a issue #652 pede) e o comentário passou a falar da ingestão do canal, sem nome de provider.\n\nRodada 2, árvore limpa:\n\n- `typecheck`=0 · `lint`=0 · **`lint:channels`=0** · `lint:role-rank`=0 · `release:conferir`=0\n- `test:unit`=0 — **950 arquivos, 9581 passed + 1 expected fail**\n- CI neste head: `verify` **pass**, `build-and-size` pass, `a-tag-veio-da-main` pass; `invariants-majors` (15 e 17) e as três partes do `e2e` rodando agora.\n\nO que este gate **não** prova: nada aqui tocou banco. O eco do envio e o resgate da fila têm prova unitária neste PR; a prova contra Postgres de verdade é a suíte de invariantes do CI, que segue em andamento.\n",
   "onde": "conversa"
  },
  {
   "id": 5717041592,
   "autor": "melgarafael",
   "quando": "2026-09-17T15:33:18Z",
   "texto": "<!-- triagem-de-pr:v1:pass=9 -->\n@webtecnica, medi o #1067 no head `5cf293be6`, contra a `main` `58187f0cc`, e conferi de novo contra a `main` `7168961ad`: a prévia do merge continua limpa, e nada do que está abaixo muda. A intenção está certa e segue a decisão da #652: o balão e o painel param de dizer \"IA\" para mensagem que ninguém escreveu. Encontrei três ajustes, e cada um vem com a medição. Os dois últimos só aparecem quando este PR se cruza com outros PRs abertos, e você não tinha como enxergar isso da sua branch.\n\n**O que o PR faz, na minha leitura:** o envio feito por regra, follow-up de texto fixo e lembrete de agenda passa a gravar `sent_via='automation'`. O eco dessa mensagem deixa de silenciar o bot, o redrive passa a incluir essa classe, e o Índice de Atrito ganha a linha \"Mensagens enviadas por automação\". A migration é a 0272.\n\n**Já está bom (não mexa):**\n- O comentário que citava o provider saiu no `5cf293be6`: `pnpm lint:channels` → exit 0 nesse head.\n- A tripla da migration está completa, o corpo da função na migration é idêntico ao do baseline, e o `revoke` cobre as duas origens (`public` e `anon`).\n- Os testes do PR leem a linha gravada, não o símbolo.\n- O fragmento está no formato certo.\n- A 0272 fica com esse número no lote (alocação conferida entre os lotes de hoje).\n\n### 1. A \"Mensagem escrita pela IA\" passa a sair como automação\n\n`lib/automation/actions/send-ai-message.ts:158` chama o handler com `actor: { type: \"webhook_source\" }`, o mesmo ator das ações de template. Como `origemDaMensagem` (`app/api/v1/messages/_handler.ts:150-154`) decide só pelo tipo do ator, o texto que o agente escreveu é carimbado `automation`. A decisão da #652 é por autoria (\"nem pessoa nem IA\"), então essa linha deveria continuar `ai`. Na `main` ela sai `ai`, porque lá todo ator que não é pessoa grava `ai` (linha 548).\n\nMedi executando a ação registrada, com o `sendMessageHandler` real e um fake do banco no molde do seu `automacao-carimbo-de-origem.test.ts`. Só o modelo e as guardas foram simulados:\n\n```\nhead 5cf293be6 → exit=1  Tests 1 failed | 1 passed (2)\n  × send_ai_message grava sent_via='ai'\n    expected 'automation' to be 'ai'\n  ✓ CONTROLE: send_whatsapp_message chega ao mesmo INSERT\nsó o _handler.ts da main → exit=0  Tests 2 passed (2)\n```\n\nO teste está no bloco abaixo, e pode entrar no PR como está. O desenho do conserto é seu. Duas opções que vejo: um campo explícito de origem no contexto do handler, que `origemDaMensagem` consulta antes do tipo do ator; ou a ação passar a se identificar como o agente, o que mexe em auditoria e atividade. Se preferir outro caminho, eu meço o seu.\n\n<details><summary><code>tests/unit/mensagem-escrita-pela-ia-segue-ia.test.ts</code></summary>\n\n```ts\n/**\n * A MENSAGEM ESCRITA PELA IA SEGUE IA — mesmo quando uma regra a dispara (#652).\n *\n * ─── O que este teste protege ────────────────────────────────────────────────\n *\n * A decisão do mantenedor na #652 (16/09/2026) classifica `messages.sent_via`\n * por AUTORIA: `'automation'` é a mensagem que \"não foi escrita nem por pessoa\n * nem pela IA\" — template fixo de regra, texto fixo de follow-up, lembrete de\n * agenda. A ação `send_ai_message` (\"Mensagem escrita pela IA\",\n * `lib/automation/actions/send-ai-message.ts`) é disparada por uma regra, mas o\n * TEXTO é escrito por um agente publicado (`gerarAbordagemDeFormulario`). Pela\n * decisão, a linha é da IA.\n *\n * O risco é silencioso: a ação chama `sendMessageHandler` com\n * `actor: { type: \"webhook_source\" }` — o MESMO ator das ações de template —, e\n * um carimbo decidido só pelo tipo do ator reclassifica a mensagem da IA como\n * automação sem conflito de merge, sem erro de tipo e sem teste vermelho: o\n * balão passa a dizer \"Automação\" e a mensagem sai de `envios_por_ia`.\n *\n * ─── Por que merece catraca ──────────────────────────────────────────────────\n *\n * O teste executa a AÇÃO registrada (não a função de decisão) e lê a LINHA que o\n * handler real insere num fake do banco — é a coluna que a tela e a métrica\n * leem. O que é dublado são as guardas e o modelo, que não decidem o carimbo;\n * `sendMessageHandler` e `origemDaMensagem` rodam de verdade.\n *\n * Anti-vacuidade: o caso de controle executa `send_whatsapp_message` (template,\n * mesmo ator) pelo mesmo caminho e exige que a linha exista — sem ele, uma ação\n * que nunca chegasse ao INSERT deixaria o caso principal vermelho pelo motivo\n * errado, e um fake quebrado não seria distinguível do defeito.\n */\nimport type { SupabaseClient } from \"@supabase/supabase-js\";\nimport { afterEach, describe, expect, it, vi } from \"vitest\";\n\nimport type { ActionCtx } from \"@/lib/automation/types\";\n\nconst ORG = \"11111111-1111-4111-8111-111111111111\";\nconst CONV = \"22222222-2222-4222-8222-222222222222\";\nconst CONTACT = \"33333333-3333-4333-8333-333333333333\";\nconst SESSION = \"44444444-4444-4444-8444-444444444444\";\nconst AGENTE = \"66666666-6666-4666-8666-666666666666\";\nconst BARE = \"3EB0ABCDEF0123456789\";\n\nconst FRONTEIRA = {\n  organization_id: ORG,\n  contact_id: CONTACT,\n  conversation_id: CONV,\n  service_revision: 1,\n  demanda_id: null,\n  demanda_revision: null,\n};\n\n// ─── O modelo: a chamada paga. O texto que ele \"escreve\" é o dado da ação. ───\nvi.mock(\"@/lib/agent-engine/agent/abordagem-de-formulario\", () => ({\n  gerarAbordagemDeFormulario: vi.fn(async () => ({ ok: true, texto: \"Oi Thiago, vi seu formulário.\" })),\n}));\nvi.mock(\"@/lib/agent-engine/db/request-pool\", () => ({ getRequestPool: () => ({}) }));\nvi.mock(\"@/lib/automation/dados-do-formulario\", () => ({\n  dadosDoFormularioDoContexto: vi.fn(async () => ({ dados: {}, origem: null, veioDeFormulario: false })),\n}));\n\n// ─── Guardas que não decidem o carimbo ───\nvi.mock(\"@/lib/ai/elegibilidade/consulta-pre-go-live\", () => ({\n  decidirPreGoLiveDoCanalViaSupabase: vi.fn(async () => ({ permite: true })),\n}));\nvi.mock(\"@/lib/ai/elegibilidade/autorizacao\", () => ({ autorizarContatoParaIA: vi.fn(async () => {}) }));\nvi.mock(\"@/lib/atendimento/origem-automacao\", () => ({\n  serviceForAutomation: vi.fn(async () => FRONTEIRA),\n}));\nvi.mock(\"@/lib/atendimento/origem\", async (importOriginal) => ({\n  ...(await importOriginal<typeof import(\"@/lib/atendimento/origem\")>()),\n  assertServiceBoundarySupabase: vi.fn(async () => {}),\n}));\nvi.mock(\"@/lib/agenda/efeito\", async (importOriginal) => ({\n  ...(await importOriginal<typeof import(\"@/lib/agenda/efeito\")>()),\n  assertAgendaEffectSupabase: vi.fn(async () => {}),\n}));\nvi.mock(\"@/lib/automation/throttle\", () => ({\n  espacarEnvio: vi.fn(async () => {}),\n  checkDailyLimit: vi.fn(async () => ({ allowed: true })),\n}));\nvi.mock(\"@/lib/automation/desfecho-do-envio\", () => ({\n  reportarEnvio: vi.fn(async (_ctx: unknown, type: string) => ({ type, status: \"success\", detail: {} })),\n}));\nvi.mock(\"@/lib/supabase/admin\", () => ({\n  createAdminClient: () => ({ storage: { from: () => ({ createSignedUrl: vi.fn() }) } }),\n}));\nvi.mock(\"@/lib/audit\", () => ({ audit: vi.fn(async () => {}) }));\n\nimport { getAction } from \"@/lib/automation/actions\";\nimport \"@/lib/automation/actions/send-ai-message\";\nimport \"@/lib/automation/actions/send-whatsapp\";\n\ntype Row = Record<string, unknown>;\n\n/** Fake do banco no molde de `automacao-carimbo-de-origem.test.ts`: o INSERT guarda a linha. */\nfunction makeSupabase() {\n  const mensagens: Row[] = [];\n  const conversa: Row = {\n    id: CONV,\n    organization_id: ORG,\n    contact_id: CONTACT,\n    channel_session_id: SESSION,\n    is_group: false,\n    group_chat_id: null,\n    contacts: { phone_number: \"+5531999998888\", wa_identity: null, wa_lid: null, is_blocked: false },\n    channel_sessions: { provider: \"waha\", waha_session_name: \"default\", status: \"WORKING\", archived_at: null, metadata: {} },\n  };\n  const encadeavel = (valor: unknown) => {\n    const q: Record<string, unknown> = {};\n    const mesmo = () => q;\n    for (const m of [\"select\", \"eq\", \"neq\", \"in\", \"is\", \"gte\", \"lte\", \"lt\", \"or\", \"order\", \"limit\"]) q[m] = mesmo;\n    q.maybeSingle = async () => ({ data: valor, error: null });\n    q.single = async () => ({ data: valor, error: null });\n    q.then = (ok: (v: unknown) => unknown) => Promise.resolve({ data: valor, error: null }).then(ok);\n    return q;\n  };\n  const filtravel = (aplicar: (filtros: Array<(r: Row) => boolean>) => unknown) => {\n    const filtros: Array<(r: Row) => boolean> = [];\n    const q: Record<string, unknown> = {\n      eq(c: string, v: unknown) { filtros.push((r) => r[c] === v); return q; },\n      neq(c: string, v: unknown) { filtros.push((r) => r[c] !== v); return q; },\n      in(c: string, vs: unknown[]) { filtros.push((r) => vs.includes(r[c])); return q; },\n      select: () => ({ single: async () => aplicar(filtros), maybeSingle: async () => aplicar(filtros) }),\n      then: (ok: (v: unknown) => unknown) => Promise.resolve(aplicar(filtros)).then(ok),\n    };\n    return q;\n  };\n  const from = (tabela: string) => {\n    if (tabela === \"conversations\") return { select: () => encadeavel(conversa), update: () => encadeavel(null) };\n    if (tabela === \"channel_sessions\") return { select: () => encadeavel({ metadata: {} }) };\n    if (tabela !== \"messages\") return { select: () => encadeavel(null), update: () => encadeavel(null) };\n    return {\n      insert: (linha: Row) => {\n        const nova: Row = { id: `msg-${mensagens.length + 1}`, ...linha };\n        mensagens.push(nova);\n        const devolver = () => ({ data: { ...nova }, error: null });\n        return { select: () => ({ single: async () => devolver(), maybeSingle: async () => devolver() }) };\n      },\n      update: (patch: Row) =>\n        filtravel((filtros) => {\n          const alvos = mensagens.filter((r) => filtros.every((f) => f(r)));\n          alvos.forEach((r) => Object.assign(r, patch));\n          return { data: alvos[0] ? { ...alvos[0] } : null, error: null };\n        }),\n      delete: () =>\n        filtravel((filtros) => {\n          for (const alvo of mensagens.filter((r) => filtros.every((f) => f(r)))) mensagens.splice(mensagens.indexOf(alvo), 1);\n          return { error: null };\n        }),\n    };\n  };\n  const client = { from, rpc: async () => ({ data: null, error: null }) };\n  return { supabase: client as unknown as SupabaseClient, mensagens };\n}\n\nfunction ctxDaRegra(admin: SupabaseClient): ActionCtx {\n  return {\n    admin,\n    organizationId: ORG,\n    ruleId: \"regra-formulario\",\n    ruleName: \"Lead do formulário\",\n    event: { id: \"evento-1\" } as unknown as ActionCtx[\"event\"],\n    context: { contact: { id: CONTACT, phone_number: \"+5531999998888\", is_blocked: false } },\n    requestId: \"req-652-ia\",\n  };\n}\n\nfunction wahaRespondendo() {\n  vi.stubEnv(\"WAHA_API_BASE_URL\", \"http://localhost:3030\");\n  vi.stubEnv(\"WAHA_API_KEY\", \"test-key\");\n  vi.stubGlobal(\"fetch\", vi.fn(async () => new Response(JSON.stringify({ id: { id: BARE } }), { status: 200 })));\n}\n\nafterEach(() => {\n  vi.unstubAllEnvs();\n  vi.unstubAllGlobals();\n});\n\ndescribe(\"a mensagem escrita pela IA numa regra de automação\", () => {\n  it(\"⭐ send_ai_message grava sent_via='ai' — a autoria é da IA, não da regra\", async () => {\n    wahaRespondendo();\n    const { supabase, mensagens } = makeSupabase();\n\n    const resultado = await getAction(\"send_ai_message\")!.execute(ctxDaRegra(supabase), {\n      channel_session_id: SESSION,\n      agent_id: AGENTE,\n      instruction: \"Cumprimente o lead pelo nome.\",\n    });\n\n    expect(mensagens, `a ação não chegou ao INSERT: ${JSON.stringify(resultado)}`).toHaveLength(1);\n    expect(mensagens[0]?.body).toBe(\"Oi Thiago, vi seu formulário.\");\n    expect(\n      mensagens[0]?.sent_via,\n      \"a mensagem ESCRITA PELA IA foi carimbada como automação — a decisão da #652 é por autoria\",\n    ).toBe(\"ai\");\n  });\n\n  it(\"CONTROLE: send_whatsapp_message (template da regra) chega ao mesmo INSERT\", async () => {\n    wahaRespondendo();\n    const { supabase, mensagens } = makeSupabase();\n\n    const resultado = await getAction(\"send_whatsapp_message\")!.execute(ctxDaRegra(supabase), {\n      channel_session_id: SESSION,\n      template: \"Oi, recebemos seu formulário.\",\n    });\n\n    expect(mensagens, `o controle não chegou ao INSERT: ${JSON.stringify(resultado)}`).toHaveLength(1);\n    expect(mensagens[0]?.sent_via).not.toBeUndefined();\n  });\n});\n```\n</details>\n\n### 2. `SentVia` e o par do invariante já chegam pelo #1043\n\nA decisão da #652 pediu esse par no invariante, e ele continua necessário. Acontece que o #1043 (@joaopaulomirandamatias, #650) declara o mesmo `export type SentVia` e acrescenta o mesmo par `sent_via` em `tests/invariants/vocabulario-banco-x-typescript.test.ts`. Ele também troca o campo para `sent_via: SentVia`, que aqui continua com a union inline (`lib/types/messaging.ts:90`). O merge dos dois é limpo no git, mas o código resultante quebra:\n\n```\nt=$(git merge-tree --write-tree <head-1067> <head-1043> | head -1)\ngit show $t:lib/types/messaging.ts | grep -c 'export type SentVia'                          → 2   (TS2300)\ngit show $t:tests/invariants/vocabulario-banco-x-typescript.test.ts | grep -c 'coluna: \"sent_via\"' → 2\n```\n\n(`tsc --noEmit --strict` no `messaging.ts` mesclado → `TS2300: Duplicate identifier 'SentVia'`, exit 2; no `messaging.ts` só deste PR → exit 0.)\n\nO #1043 está previsto para entrar antes, num lote que já está montado. O pedido é tirar deste PR a declaração de `SentVia` e o par no invariante, que chegam por ele. O resto do PR não depende dos dois. Se o #1043 não entrar, eu te aviso aqui e o par volta para este PR.\n\n### 3. A 0272 recria `fn_atrito_metrics` sem o filtro que o seu #1057 acrescenta\n\nO #1057 (também seu) põe `and coalesce(lost_reason, '') <> 'moved_to_another_pipeline'` dentro de `fn_atrito_metrics` na 0266 (`20260916120000_0266_…sql:217`). A 0272 deste PR faz `drop function` + `create` a partir da definição anterior, sem esse filtro (0 ocorrências no arquivo). Nos dois caminhos de instalação, uma das duas mudanças some em silêncio, e qual delas some não depende de quem entra primeiro:\n\n- **Cadeia de migrations (0266 → 0272):** o filtro some.\n- **Baseline (o que o `install.sh`/`update.sh` aplica):** este PR edita o bloco antigo, na linha ~10327, e o #1057 acrescenta um bloco novo no fim, na linha ~26300. Na árvore mesclada o bloco do #1057 vem por último e vence, então `por_automacao`/`envios_por_automacao` somem da função instalada:\n\n```\nt=$(git merge-tree --write-tree <head-1057> <head-1067> | head -1)   # rc=0, sem conflito\ngit show $t:supabase/baseline.sql | grep -n \"create or replace function public.fn_atrito_metrics\\|por_automacao\\|moved_to_another_pipeline\"   # saída recortada às linhas de fn_atrito_metrics\n10327: create or replace function public.fn_atrito_metrics(   ← bloco com por_automacao (este PR)\n10462: ... as por_automacao,\n26300: create or replace function public.fn_atrito_metrics(   ← bloco do #1057, sem por_automacao, é o último\n26462: ... <> 'moved_to_another_pipeline'\n```\n\nO #1057 está no lote da Agenda e deve entrar antes. O pedido é a 0272 partir da definição da 0266, com o filtro, e o baseline levar a função final num bloco de apêndice depois do bloco da 0266, em vez de editar o bloco antigo. O terminal que cuida do #1057 também está avisado.\n\n### Sobre o #1024\n\nO #1024 (também seu, #866) e este PR conflitam em 8 arquivos, no mesmo contrato de `sent_via` (`git merge-tree` dos dois heads → rc=1). A ordem que proponho é **este PR primeiro, e o #1024 depois, trazendo este**. O motivo é que, sozinho, o #1024 tira o envio por token de \"Mensagens enviadas pelo agente\" e não o põe em número nenhum, enquanto o número novo nasce aqui. No #1024 eu deixo o detalhe com a medição. Se preferir juntar os dois num PR só, também serve: me diga aqui.\n\n**NÃO MEDIDO:**\n- `pnpm test:unit` completo: não rodei localmente. O `verify` do CI passou no `5cf293be6`, e a sua rodada 2 declara 950 arquivos verdes. Os `invariants` e o `e2e` desse head ainda estavam rodando quando escrevi.\n- O controle do item 1 trocou só o `_handler.ts` pela versão da `main`, não a árvore inteira. A ação e as guardas dela são idênticas na `main` e no PR (diff vazio).\n- O `pnpm typecheck` do projeto inteiro com o #1043 mesclado. Medi o `tsc` só no arquivo mesclado.\n- O balão \"Automação\" e o número novo no painel, pela tela. Isso roda no lote, depois dos ajustes.\n- Envio real com o WAHA (eco chegando antes do ack) e o redrive com o canal caindo e voltando.\n- Se o redrive de uma mensagem `automation` presa em `queued` respeita a janela de envio do canal. É só suspeita, não pedido.\n- Efeito no painel para períodos antigos: a automação antiga continua gravada como `ai`, sem backfill.\n\nSeu PR fez a gente enxergar que a autoria de uma mensagem, hoje, se decide pelo tipo do ator, e que isso não basta para a regra da #652. Obrigado.\n",
   "onde": "conversa"
  },
  {
   "id": 5717184595,
   "autor": "melgarafael",
   "quando": "2026-09-17T15:43:44Z",
   "texto": "<!-- triagem-de-pr:v1:pass=10 -->\nCorreção de um número no meu parecer acima: o #1024 e este PR têm **8 arquivos em comum**, e o `git merge-tree` dos dois heads acusa conflito em **5** deles (`_handler.ts`, `MessageBubble.tsx`, `session-reconciler.ts`, `desfecho-do-envio.ts`, `lib/waha/ingest.ts`). Os outros 3 se mesclam sozinhos. A ordem proposta continua a mesma, e o detalhe da métrica do token está no #1024.",
   "onde": "conversa"
  },
  {
   "id": 5724429902,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-18T02:51:00Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / Security Evidence:0520cd850609f158a3fd2a97b66b6d62065ad967 -->\n## ECC Tools / Security Evidence\n\nCommit: `0520cd850609f158a3fd2a97b66b6d62065ad967`\n\n**Security evidence gate passed** (success)\n\nNo security-sensitive scanner-evidence gap detected.\n\nMode: enforce\n\nScanned 20 changed file(s). No missing scanner-evidence signal was detected.\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5724430014,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-18T02:51:01Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / PR Risk Taxonomy:0520cd850609f158a3fd2a97b66b6d62065ad967 -->\n## ECC Tools / PR Risk Taxonomy\n\nCommit: `0520cd850609f158a3fd2a97b66b6d62065ad967`\n\n**PR taxonomy review recommended** (neutral)\n\nDetected 2 PR taxonomy bucket(s): Security Evidence, CI/CD Recommendation.\n\nScanned 20 changed file(s).\n\n\n\nRoadmap taxonomy buckets:\n\n\n\n### Security Evidence\nSecurity-sensitive changes should carry explicit scanner, code-scanning, or focused regression evidence.\n\nSignals:\n- 1 security-sensitive path(s) changed\n\nPaths:\n- `lib/agent-engine/edge/crm/session-reconciler.ts`\n\n### CI/CD Recommendation\nCI, dependency, coverage, and contract signals should be routed into follow-up checks or verification work.\n\nSignals:\n- API contract changes may ship without integration coverage\n- API implementation changes may ship without contract artifact updates\n- User-facing UI changes may ship without browser coverage\n- 7 CI or workflow path(s) changed\n\nPaths:\n- `components/inbox/MessageBubble.test.tsx`\n- `lib/agent-engine/edge/crm/session-reconciler.test.ts`\n- `tests/invariants/vocabulario-banco-x-typescript.test.ts`\n- `tests/unit/atrito-par-eficiencia-dano.test.ts`\n- `tests/unit/automacao-carimbo-de-origem.test.ts`\n- `tests/unit/eco-do-envio-nao-silencia-o-bot.test.ts`\n- `tests/unit/rotulo-de-origem-tem-emissor.test.ts`\n- `app/api/v1/messages/_handler.ts`\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5724430103,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-18T02:51:02Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / Reference Set Readiness:0520cd850609f158a3fd2a97b66b6d62065ad967 -->\n## ECC Tools / Reference Set Readiness\n\nCommit: `0520cd850609f158a3fd2a97b66b6d62065ad967`\n\n**Reference set readiness gaps detected** (neutral)\n\nReference evidence present for 0/7 areas (0%) across 20 changed file(s).\n\nThis check is based on files changed in this PR. Repository-level readiness is still reported by `/ecc-tools analyze` comments and generated manifests.\n\n| Area | Status | Evidence / Next Step |\n| --- | --- | --- |\n| Deep analyzer corpus | Missing | Add analyzer fixture, golden, benchmark, or reference-set files that can catch analyzer regressions. |\n| RAG/evaluator comparison | Missing | Add retrieval or evaluator reference-set comparison fixtures with expected ranking behavior. |\n| PR salvage/review corpus | Missing | Add stale-PR, review-thread, reopen-flow, or salvage reference cases for queue cleanup automation. |\n| Discussion triage corpus | Missing | Add public discussion triage fixtures, golden cases, or reference sets for informational, answered, and no-response classifications. |\n| Harness compatibility | Missing | Add cross-harness, adapter-compliance, or harness-audit evidence for Claude, Codex, OpenCode, Zed, dmux, and agent surfaces. |\n| Security evidence | Missing | Attach security evidence such as SBOMs, SARIF, audit reports, or AgentShield evidence packs. |\n| CI failure-mode evidence | Missing | Add captured CI failure logs, dry-run fixtures, or troubleshooting docs for common workflow failure modes. |\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5724430263,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-18T02:51:04Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / Hosted Promotion Readiness:0520cd850609f158a3fd2a97b66b6d62065ad967 -->\n## ECC Tools / Hosted Promotion Readiness\n\nCommit: `0520cd850609f158a3fd2a97b66b6d62065ad967`\n\n**Hosted promotion readiness passed** (success)\n\nNo hosted promotion evidence gaps detected across 20 changed file(s); 0 corpus scenarios had matching evidence.\n\nThis check compares PR file changes against the evaluator/RAG promotion corpus in `src/analyzers/fixtures/evaluator-rag-corpus.ts`.\nHosted output scoring inspected 0 completed cached hosted job results.\n\nNo evaluator corpus scenarios matched this PR.\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5724990329,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-18T04:05:53Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / Security Evidence:2d565af4e008acd9357309ece8e92a6b5b864e25 -->\n## ECC Tools / Security Evidence\n\nCommit: `2d565af4e008acd9357309ece8e92a6b5b864e25`\n\n**Security evidence gate passed** (success)\n\nNo security-sensitive scanner-evidence gap detected.\n\nMode: enforce\n\nScanned 19 changed file(s). No missing scanner-evidence signal was detected.\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5724990462,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-18T04:05:54Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / PR Risk Taxonomy:2d565af4e008acd9357309ece8e92a6b5b864e25 -->\n## ECC Tools / PR Risk Taxonomy\n\nCommit: `2d565af4e008acd9357309ece8e92a6b5b864e25`\n\n**PR taxonomy review recommended** (neutral)\n\nDetected 2 PR taxonomy bucket(s): Security Evidence, CI/CD Recommendation.\n\nScanned 19 changed file(s).\n\n\n\nRoadmap taxonomy buckets:\n\n\n\n### Security Evidence\nSecurity-sensitive changes should carry explicit scanner, code-scanning, or focused regression evidence.\n\nSignals:\n- 1 security-sensitive path(s) changed\n\nPaths:\n- `lib/agent-engine/edge/crm/session-reconciler.ts`\n\n### CI/CD Recommendation\nCI, dependency, coverage, and contract signals should be routed into follow-up checks or verification work.\n\nSignals:\n- API contract changes may ship without integration coverage\n- API implementation changes may ship without contract artifact updates\n- User-facing UI changes may ship without browser coverage\n- 7 CI or workflow path(s) changed\n\nPaths:\n- `components/inbox/MessageBubble.test.tsx`\n- `lib/agent-engine/edge/crm/session-reconciler.test.ts`\n- `tests/invariants/vocabulario-banco-x-typescript.test.ts`\n- `tests/unit/atrito-par-eficiencia-dano.test.ts`\n- `tests/unit/automacao-carimbo-de-origem.test.ts`\n- `tests/unit/eco-do-envio-nao-silencia-o-bot.test.ts`\n- `tests/unit/rotulo-de-origem-tem-emissor.test.ts`\n- `app/api/v1/messages/_handler.ts`\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5724990575,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-18T04:05:55Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / Reference Set Readiness:2d565af4e008acd9357309ece8e92a6b5b864e25 -->\n## ECC Tools / Reference Set Readiness\n\nCommit: `2d565af4e008acd9357309ece8e92a6b5b864e25`\n\n**Reference set readiness gaps detected** (neutral)\n\nReference evidence present for 0/7 areas (0%) across 19 changed file(s).\n\nThis check is based on files changed in this PR. Repository-level readiness is still reported by `/ecc-tools analyze` comments and generated manifests.\n\n| Area | Status | Evidence / Next Step |\n| --- | --- | --- |\n| Deep analyzer corpus | Missing | Add analyzer fixture, golden, benchmark, or reference-set files that can catch analyzer regressions. |\n| RAG/evaluator comparison | Missing | Add retrieval or evaluator reference-set comparison fixtures with expected ranking behavior. |\n| PR salvage/review corpus | Missing | Add stale-PR, review-thread, reopen-flow, or salvage reference cases for queue cleanup automation. |\n| Discussion triage corpus | Missing | Add public discussion triage fixtures, golden cases, or reference sets for informational, answered, and no-response classifications. |\n| Harness compatibility | Missing | Add cross-harness, adapter-compliance, or harness-audit evidence for Claude, Codex, OpenCode, Zed, dmux, and agent surfaces. |\n| Security evidence | Missing | Attach security evidence such as SBOMs, SARIF, audit reports, or AgentShield evidence packs. |\n| CI failure-mode evidence | Missing | Add captured CI failure logs, dry-run fixtures, or troubleshooting docs for common workflow failure modes. |\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5724990773,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-18T04:05:56Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / Hosted Promotion Readiness:2d565af4e008acd9357309ece8e92a6b5b864e25 -->\n## ECC Tools / Hosted Promotion Readiness\n\nCommit: `2d565af4e008acd9357309ece8e92a6b5b864e25`\n\n**Hosted promotion readiness passed** (success)\n\nNo hosted promotion evidence gaps detected across 19 changed file(s); 0 corpus scenarios had matching evidence.\n\nThis check compares PR file changes against the evaluator/RAG promotion corpus in `src/analyzers/fixtures/evaluator-rag-corpus.ts`.\nHosted output scoring inspected 0 completed cached hosted job results.\n\nNo evaluator corpus scenarios matched this PR.\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5725679527,
   "autor": "webtecnica",
   "quando": "2026-09-18T05:37:13Z",
   "texto": "A régua pegou DOIS defeitos aqui, e os dois estão consertados no head final:\n\n**1. A duplicata de `SentVia`.** A branch e a main fecharam a MESMA lacuna (a #650) em pontos diferentes de `lib/types/messaging.ts`; o merge textual manteve as duas e o `tsc` acusou `TS2300`. Ficou a declaração da main (a mesma união, seis membros) e o diff desse arquivo contra a main agora é vazio — o que este PR traz de próprio é o resto (o rótulo de origem e o emissor).\n\n**2. A catraca do dublê.** O arquivo novo que o PR traz (`tests/unit/automacao-carimbo-de-origem.test.ts`) montava o próprio `makeSupabase`, e a catraca `send-message-handler-nao-ganha-novo-duble` reprova exatamente isso: dublê por arquivo mede o dublê, não o handler. O caso foi portado para `tests/helpers/duble-do-handler.ts` (`capturas.inserts.messages`) sem perder asserção nenhuma — as três continuam olhando a LINHA gravada, que é o dado sob teste.\n\nNúmeros do head final:\n\n```\ntypecheck=0\nfocados2=0\nunit3=0\n```\n",
   "onde": "conversa"
  },
  {
   "id": 5727584429,
   "autor": "melgarafael",
   "quando": "2026-09-18T08:49:45Z",
   "texto": "Os dois consertos do head final conferem. O que sobrou é **um só, e é cerca, não defeito** — o `verify` morreu num único caso, de 10018:\n\n```\nFAIL tests/unit/send-message-handler-nao-ganha-novo-duble.test.ts\nAssertionError: Novo dublê local de sendMessageHandler: automacao-carimbo-de-origem.test.ts.\n                Use tests/helpers/duble-do-handler.ts\n- Expected  []\n+ Received  [\"automacao-carimbo-de-origem.test.ts\"]\n```\n\nO seu `tests/unit/automacao-carimbo-de-origem.test.ts` monta um dublê próprio de `sendMessageHandler`; a cerca existe para que exista **um** dublê, senão cada teste passa a afirmar contra uma imitação diferente do mesmo handler e o conjunto para de significar alguma coisa. Trocar pelo `tests/helpers/duble-do-handler.ts` deve resolver sem tocar no mérito do PR.\n\n**Contexto da medição:** `Test Files 1 failed | 997 passed`, `Tests 1 failed | 10016 passed`, rodada de 04:21Z. Os outros quatro obrigatórios estão verdes e o PR está `MERGEABLE`.\n\nSe preferir, eu empurro esse ajuste na sua branch (commit novo, sem force, no seu crédito) — não fiz agora porque você estava mexendo aqui há pouco e não quero atropelar o seu trabalho. Diga e eu faço.\n\n**Não medi:** se o dublê compartilhado cobre exatamente o que o seu local cobria. Se ele não cobrir, a resposta certa é estender o compartilhado, não voltar ao local — e aí a cerca virou uma pergunta boa em vez de um obstáculo.",
   "onde": "conversa"
  },
  {
   "id": 5729325431,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-18T11:27:33Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / Security Evidence:5b4b06ce2320e763a7a3c201c4f84db8546cecaa -->\n## ECC Tools / Security Evidence\n\nCommit: `5b4b06ce2320e763a7a3c201c4f84db8546cecaa`\n\n**Security evidence gate passed** (success)\n\nNo security-sensitive scanner-evidence gap detected.\n\nMode: enforce\n\nScanned 19 changed file(s). No missing scanner-evidence signal was detected.\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5729325575,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-18T11:27:34Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / PR Risk Taxonomy:5b4b06ce2320e763a7a3c201c4f84db8546cecaa -->\n## ECC Tools / PR Risk Taxonomy\n\nCommit: `5b4b06ce2320e763a7a3c201c4f84db8546cecaa`\n\n**PR taxonomy review recommended** (neutral)\n\nDetected 2 PR taxonomy bucket(s): Security Evidence, CI/CD Recommendation.\n\nScanned 19 changed file(s).\n\n\n\nRoadmap taxonomy buckets:\n\n\n\n### Security Evidence\nSecurity-sensitive changes should carry explicit scanner, code-scanning, or focused regression evidence.\n\nSignals:\n- 1 security-sensitive path(s) changed\n\nPaths:\n- `lib/agent-engine/edge/crm/session-reconciler.ts`\n\n### CI/CD Recommendation\nCI, dependency, coverage, and contract signals should be routed into follow-up checks or verification work.\n\nSignals:\n- API contract changes may ship without integration coverage\n- API implementation changes may ship without contract artifact updates\n- User-facing UI changes may ship without browser coverage\n- 7 CI or workflow path(s) changed\n\nPaths:\n- `components/inbox/MessageBubble.test.tsx`\n- `lib/agent-engine/edge/crm/session-reconciler.test.ts`\n- `tests/invariants/vocabulario-banco-x-typescript.test.ts`\n- `tests/unit/atrito-par-eficiencia-dano.test.ts`\n- `tests/unit/automacao-carimbo-de-origem.test.ts`\n- `tests/unit/eco-do-envio-nao-silencia-o-bot.test.ts`\n- `tests/unit/rotulo-de-origem-tem-emissor.test.ts`\n- `app/api/v1/messages/_handler.ts`\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5729325749,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-18T11:27:35Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / Reference Set Readiness:5b4b06ce2320e763a7a3c201c4f84db8546cecaa -->\n## ECC Tools / Reference Set Readiness\n\nCommit: `5b4b06ce2320e763a7a3c201c4f84db8546cecaa`\n\n**Reference set readiness gaps detected** (neutral)\n\nReference evidence present for 0/7 areas (0%) across 19 changed file(s).\n\nThis check is based on files changed in this PR. Repository-level readiness is still reported by `/ecc-tools analyze` comments and generated manifests.\n\n| Area | Status | Evidence / Next Step |\n| --- | --- | --- |\n| Deep analyzer corpus | Missing | Add analyzer fixture, golden, benchmark, or reference-set files that can catch analyzer regressions. |\n| RAG/evaluator comparison | Missing | Add retrieval or evaluator reference-set comparison fixtures with expected ranking behavior. |\n| PR salvage/review corpus | Missing | Add stale-PR, review-thread, reopen-flow, or salvage reference cases for queue cleanup automation. |\n| Discussion triage corpus | Missing | Add public discussion triage fixtures, golden cases, or reference sets for informational, answered, and no-response classifications. |\n| Harness compatibility | Missing | Add cross-harness, adapter-compliance, or harness-audit evidence for Claude, Codex, OpenCode, Zed, dmux, and agent surfaces. |\n| Security evidence | Missing | Attach security evidence such as SBOMs, SARIF, audit reports, or AgentShield evidence packs. |\n| CI failure-mode evidence | Missing | Add captured CI failure logs, dry-run fixtures, or troubleshooting docs for common workflow failure modes. |\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5729325999,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-18T11:27:36Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / Hosted Promotion Readiness:5b4b06ce2320e763a7a3c201c4f84db8546cecaa -->\n## ECC Tools / Hosted Promotion Readiness\n\nCommit: `5b4b06ce2320e763a7a3c201c4f84db8546cecaa`\n\n**Hosted promotion readiness passed** (success)\n\nNo hosted promotion evidence gaps detected across 19 changed file(s); 0 corpus scenarios had matching evidence.\n\nThis check compares PR file changes against the evaluator/RAG promotion corpus in `src/analyzers/fixtures/evaluator-rag-corpus.ts`.\nHosted output scoring inspected 0 completed cached hosted job results.\n\nNo evaluator corpus scenarios matched this PR.\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5729331279,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-18T11:28:07Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / Security Evidence:30d276d4cc3175b33178260823ff6e958fe6fd1a -->\n## ECC Tools / Security Evidence\n\nCommit: `30d276d4cc3175b33178260823ff6e958fe6fd1a`\n\n**Security evidence gate passed** (success)\n\nNo security-sensitive scanner-evidence gap detected.\n\nMode: enforce\n\nScanned 19 changed file(s). No missing scanner-evidence signal was detected.\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5729331493,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-18T11:28:08Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / PR Risk Taxonomy:30d276d4cc3175b33178260823ff6e958fe6fd1a -->\n## ECC Tools / PR Risk Taxonomy\n\nCommit: `30d276d4cc3175b33178260823ff6e958fe6fd1a`\n\n**PR taxonomy review recommended** (neutral)\n\nDetected 2 PR taxonomy bucket(s): Security Evidence, CI/CD Recommendation.\n\nScanned 19 changed file(s).\n\n\n\nRoadmap taxonomy buckets:\n\n\n\n### Security Evidence\nSecurity-sensitive changes should carry explicit scanner, code-scanning, or focused regression evidence.\n\nSignals:\n- 1 security-sensitive path(s) changed\n\nPaths:\n- `lib/agent-engine/edge/crm/session-reconciler.ts`\n\n### CI/CD Recommendation\nCI, dependency, coverage, and contract signals should be routed into follow-up checks or verification work.\n\nSignals:\n- API contract changes may ship without integration coverage\n- API implementation changes may ship without contract artifact updates\n- User-facing UI changes may ship without browser coverage\n- 7 CI or workflow path(s) changed\n\nPaths:\n- `components/inbox/MessageBubble.test.tsx`\n- `lib/agent-engine/edge/crm/session-reconciler.test.ts`\n- `tests/invariants/vocabulario-banco-x-typescript.test.ts`\n- `tests/unit/atrito-par-eficiencia-dano.test.ts`\n- `tests/unit/automacao-carimbo-de-origem.test.ts`\n- `tests/unit/eco-do-envio-nao-silencia-o-bot.test.ts`\n- `tests/unit/rotulo-de-origem-tem-emissor.test.ts`\n- `app/api/v1/messages/_handler.ts`\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5729331700,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-18T11:28:09Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / Reference Set Readiness:30d276d4cc3175b33178260823ff6e958fe6fd1a -->\n## ECC Tools / Reference Set Readiness\n\nCommit: `30d276d4cc3175b33178260823ff6e958fe6fd1a`\n\n**Reference set readiness gaps detected** (neutral)\n\nReference evidence present for 0/7 areas (0%) across 19 changed file(s).\n\nThis check is based on files changed in this PR. Repository-level readiness is still reported by `/ecc-tools analyze` comments and generated manifests.\n\n| Area | Status | Evidence / Next Step |\n| --- | --- | --- |\n| Deep analyzer corpus | Missing | Add analyzer fixture, golden, benchmark, or reference-set files that can catch analyzer regressions. |\n| RAG/evaluator comparison | Missing | Add retrieval or evaluator reference-set comparison fixtures with expected ranking behavior. |\n| PR salvage/review corpus | Missing | Add stale-PR, review-thread, reopen-flow, or salvage reference cases for queue cleanup automation. |\n| Discussion triage corpus | Missing | Add public discussion triage fixtures, golden cases, or reference sets for informational, answered, and no-response classifications. |\n| Harness compatibility | Missing | Add cross-harness, adapter-compliance, or harness-audit evidence for Claude, Codex, OpenCode, Zed, dmux, and agent surfaces. |\n| Security evidence | Missing | Attach security evidence such as SBOMs, SARIF, audit reports, or AgentShield evidence packs. |\n| CI failure-mode evidence | Missing | Add captured CI failure logs, dry-run fixtures, or troubleshooting docs for common workflow failure modes. |\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5729331993,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-18T11:28:11Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / Hosted Promotion Readiness:30d276d4cc3175b33178260823ff6e958fe6fd1a -->\n## ECC Tools / Hosted Promotion Readiness\n\nCommit: `30d276d4cc3175b33178260823ff6e958fe6fd1a`\n\n**Hosted promotion readiness passed** (success)\n\nNo hosted promotion evidence gaps detected across 19 changed file(s); 0 corpus scenarios had matching evidence.\n\nThis check compares PR file changes against the evaluator/RAG promotion corpus in `src/analyzers/fixtures/evaluator-rag-corpus.ts`.\nHosted output scoring inspected 0 completed cached hosted job results.\n\nNo evaluator corpus scenarios matched this PR.\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5729335503,
   "autor": "webtecnica",
   "quando": "2026-09-18T11:28:30Z",
   "texto": "O ajuste que você pediu está no head `30d276d4c` — e a cerca fica verde.\n\n**O que entrou.** `tests/unit/automacao-carimbo-de-origem.test.ts` deixou de montar dublê próprio de `sendMessageHandler` e passou a usar `tests/helpers/duble-do-handler.ts` (1 arquivo, +48/−114). As três asserções que ele já fazia continuam exatamente as mesmas — mudou a origem da imitação, não o mérito.\n\n**Medido no head final** (`rc=0`):\n\n```\n ✓ tests/unit/send-message-handler-nao-ganha-novo-duble.test.ts (3 tests)  28ms\n ✓ tests/unit/automacao-carimbo-de-origem.test.ts               (3 tests)  12ms\n Test Files  2 passed (2)\n      Tests  6 passed (6)\n```\n\nE a suíte inteira na véspera, no head `5b4b06ce2`: `Test Files 988 passed (988)` · `Tests 9952 passed | 1 expected fail (9953)`. A única vermelha era exatamente esta.\n\n**Sobre a ressalva que você deixou:** o dublê compartilhado cobre o que o local cobria — as três asserções passam sem asserção nova, e a cerca acusa o **arquivo**, não o dublê em si. Se aparecer caso que ele não cubra, estendo o compartilhado, como você sugeriu — não volto ao local.\n\nTambém trouxe a `main` para dentro (commit de merge `30d276d4c`, sem `--force`, sem rebase): a branch estava 206 commits atrás e o CI testa a branch, não o merge. Pode re-medir.\n",
   "onde": "conversa"
  },
  {
   "id": 5729494409,
   "autor": "melgarafael",
   "quando": "2026-09-18T11:43:46Z",
   "texto": "<!-- triagem-de-pr:v1:pass=10 -->\nRemedi tudo no head `30d276d4c`, contra a `main` de hoje (`ed42ad119`). O quadro mudou, porque o **#1043 e o #1057 entraram na `main`** desde ontem — um dos meus três pedidos caiu sozinho, e outro ficou **pior**.\n\n**Resolvido, e não é mais assunto:** `export type SentVia` existe uma vez só na árvore mesclada (o #1043 entrou e você adotou o símbolo em `sent_via: SentVia`). O `TS2300` que eu tinha medido não acontece mais.\n\n**1. Continua: a \"Mensagem escrita pela IA\" sai como automação.** `origemDaMensagem` (`app/api/v1/messages/_handler.ts:150-154`) ainda decide só pelo tipo do ator, e `lib/automation/actions/send-ai-message.ts:158` ainda chama com `actor: { type: \"webhook_source\" }`. Rodei o mesmo teste de ontem neste head:\n\n```\npnpm vitest run tests/unit/mensagem-escrita-pela-ia-segue-ia.test.ts   → exit 1\nTests 1 failed | 1 passed (2)\n  × send_ai_message grava sent_via='ai' — a autoria é da IA, não da regra\n    expected 'automation' to be 'ai'\n```\n\n**2. Agora duplicado no invariante.** O #1043 entrou trazendo o par `sent_via`, e este PR acrescenta o mesmo par de novo. Medido na prévia do merge com a `main` de hoje:\n\n```\ngit show <árvore-mesclada>:tests/invariants/vocabulario-banco-x-typescript.test.ts | grep -c 'coluna: \"sent_via\"'\n→ 2      (na main sozinha: 1)\n```\n\nO pedido é tirar o bloco daqui — ele já está na `main`, e com isso este PR também deixa de modificar `tests/invariants/`.\n\n**3. Piorou: a 0272 apaga um filtro que agora está em produção.** O **#1057 foi mergeado hoje às 08:51**, então `fn_atrito_metrics` na `main` já tem `coalesce(lost_reason,'') <> 'moved_to_another_pipeline'`. A 0272 deste PR continua com **zero** ocorrências desse filtro e faz `drop function` + `create`. Na prévia do merge, o baseline fica com dois blocos da mesma função:\n\n```\n10362: create or replace function public.fn_atrito_metrics(   ← bloco deste PR, com por_automacao (10497)\n26322: create or replace function public.fn_atrito_metrics(   ← bloco do #1057, com o filtro (26484), e é o ÚLTIMO\n```\n\nQuem instala aplica o arquivo inteiro, então o último vence: **`por_automacao` some da função instalada**. E na cadeia de migrations o inverso: a 0272 roda depois da 0266 e **apaga o filtro**. Nos dois caminhos alguma coisa se perde em silêncio.\n\nO conserto é a 0272 partir da definição que já está na `main` (com o filtro) e o baseline levar a função final num bloco de apêndice **depois** do bloco do #1057, em vez de editar o bloco antigo.\n\n**NÃO MEDIDO:** a suíte completa e o `typecheck` deste head — a máquina da triagem não conclui nenhum dos dois desde ontem, por saturação; quem decide é o `verify` do CI. E a prova pela tela do balão e do painel continua pendente.\n",
   "onde": "conversa"
  },
  {
   "id": 5729589973,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-18T11:53:01Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / Security Evidence:34be972512d8de7fc25c632ce5fde4878ea793e8 -->\n## ECC Tools / Security Evidence\n\nCommit: `34be972512d8de7fc25c632ce5fde4878ea793e8`\n\n**Security evidence gate passed** (success)\n\nNo security-sensitive scanner-evidence gap detected.\n\nMode: enforce\n\nScanned 19 changed file(s). No missing scanner-evidence signal was detected.\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5729590272,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-18T11:53:03Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / PR Risk Taxonomy:34be972512d8de7fc25c632ce5fde4878ea793e8 -->\n## ECC Tools / PR Risk Taxonomy\n\nCommit: `34be972512d8de7fc25c632ce5fde4878ea793e8`\n\n**PR taxonomy review recommended** (neutral)\n\nDetected 2 PR taxonomy bucket(s): Security Evidence, CI/CD Recommendation.\n\nScanned 19 changed file(s).\n\n\n\nRoadmap taxonomy buckets:\n\n\n\n### Security Evidence\nSecurity-sensitive changes should carry explicit scanner, code-scanning, or focused regression evidence.\n\nSignals:\n- 1 security-sensitive path(s) changed\n\nPaths:\n- `lib/agent-engine/edge/crm/session-reconciler.ts`\n\n### CI/CD Recommendation\nCI, dependency, coverage, and contract signals should be routed into follow-up checks or verification work.\n\nSignals:\n- API contract changes may ship without integration coverage\n- API implementation changes may ship without contract artifact updates\n- User-facing UI changes may ship without browser coverage\n- 7 CI or workflow path(s) changed\n\nPaths:\n- `components/inbox/MessageBubble.test.tsx`\n- `lib/agent-engine/edge/crm/session-reconciler.test.ts`\n- `tests/invariants/vocabulario-banco-x-typescript.test.ts`\n- `tests/unit/atrito-par-eficiencia-dano.test.ts`\n- `tests/unit/automacao-carimbo-de-origem.test.ts`\n- `tests/unit/eco-do-envio-nao-silencia-o-bot.test.ts`\n- `tests/unit/rotulo-de-origem-tem-emissor.test.ts`\n- `app/api/v1/messages/_handler.ts`\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5729590483,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-18T11:53:04Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / Reference Set Readiness:34be972512d8de7fc25c632ce5fde4878ea793e8 -->\n## ECC Tools / Reference Set Readiness\n\nCommit: `34be972512d8de7fc25c632ce5fde4878ea793e8`\n\n**Reference set readiness gaps detected** (neutral)\n\nReference evidence present for 0/7 areas (0%) across 19 changed file(s).\n\nThis check is based on files changed in this PR. Repository-level readiness is still reported by `/ecc-tools analyze` comments and generated manifests.\n\n| Area | Status | Evidence / Next Step |\n| --- | --- | --- |\n| Deep analyzer corpus | Missing | Add analyzer fixture, golden, benchmark, or reference-set files that can catch analyzer regressions. |\n| RAG/evaluator comparison | Missing | Add retrieval or evaluator reference-set comparison fixtures with expected ranking behavior. |\n| PR salvage/review corpus | Missing | Add stale-PR, review-thread, reopen-flow, or salvage reference cases for queue cleanup automation. |\n| Discussion triage corpus | Missing | Add public discussion triage fixtures, golden cases, or reference sets for informational, answered, and no-response classifications. |\n| Harness compatibility | Missing | Add cross-harness, adapter-compliance, or harness-audit evidence for Claude, Codex, OpenCode, Zed, dmux, and agent surfaces. |\n| Security evidence | Missing | Attach security evidence such as SBOMs, SARIF, audit reports, or AgentShield evidence packs. |\n| CI failure-mode evidence | Missing | Add captured CI failure logs, dry-run fixtures, or troubleshooting docs for common workflow failure modes. |\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5729590786,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-18T11:53:06Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / Hosted Promotion Readiness:34be972512d8de7fc25c632ce5fde4878ea793e8 -->\n## ECC Tools / Hosted Promotion Readiness\n\nCommit: `34be972512d8de7fc25c632ce5fde4878ea793e8`\n\n**Hosted promotion readiness passed** (success)\n\nNo hosted promotion evidence gaps detected across 19 changed file(s); 0 corpus scenarios had matching evidence.\n\nThis check compares PR file changes against the evaluator/RAG promotion corpus in `src/analyzers/fixtures/evaluator-rag-corpus.ts`.\nHosted output scoring inspected 0 completed cached hosted job results.\n\nNo evaluator corpus scenarios matched this PR.\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5729620405,
   "autor": "webtecnica",
   "quando": "2026-09-18T11:56:01Z",
   "texto": "A `main` andou depois do meu push, então trouxe de novo — head agora `34be97251` (merge novo, sem `--force` e sem rebase; conflito: nenhum).\n\nRégua refeita no head mesclado:\n\n- `pnpm typecheck` → rc=0, sem erro nenhum\n- focados (`pnpm test:unit` dos arquivos de teste da branch + as duas guardas) → `Test Files 6 passed (6)` · `Tests 71 passed (71)`\n\nO dublê compartilhado entra por esse caminho mesmo — nada do que você pediu foi tocado no merge.\n",
   "onde": "conversa"
  }
 ],
 "commits:1067": [
  {
   "sha": "11c8636196025258321f479917fc545ffc47861e",
   "quando": "2026-09-17T14:31:58Z",
   "autor": "webtecnica"
  },
  {
   "sha": "5cf293be6e1deb9dae180723fde05d3d8a2f9adc",
   "quando": "2026-09-17T15:00:33Z",
   "autor": "webtecnica"
  },
  {
   "sha": "0520cd850609f158a3fd2a97b66b6d62065ad967",
   "quando": "2026-09-18T02:50:53Z",
   "autor": "webtecnica"
  },
  {
   "sha": "2d565af4e008acd9357309ece8e92a6b5b864e25",
   "quando": "2026-09-18T04:05:45Z",
   "autor": "webtecnica"
  },
  {
   "sha": "5b4b06ce2320e763a7a3c201c4f84db8546cecaa",
   "quando": "2026-09-18T05:16:02Z",
   "autor": "webtecnica"
  },
  {
   "sha": "30d276d4cc3175b33178260823ff6e958fe6fd1a",
   "quando": "2026-09-18T11:28:00Z",
   "autor": "webtecnica"
  },
  {
   "sha": "34be972512d8de7fc25c632ce5fde4878ea793e8",
   "quando": "2026-09-18T11:52:46Z",
   "autor": "webtecnica"
  }
 ],
 "a_frente:tri37/1067-repro": 1,
 "substituta:tri37/1067-repro": null,
 "pr:1134": {
  "author": {
   "id": "MDQ6VXNlcjM3OTg3MDc0",
   "is_bot": false,
   "login": "joaopaulomirandamatias",
   "name": "João Paulo"
  },
  "createdAt": "2026-09-17T23:14:02Z",
  "headRefName": "feat/EPIC-13-followup-own-window",
  "headRefOid": "5755aa0b1243613349fba615a2cca5b1b05160b6",
  "number": 1134,
  "state": "OPEN"
 },
 "comentarios:1134": [
  {
   "id": 5722464179,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-17T23:14:07Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / Security Evidence:ef6e791558cca981446faaeddec2c83fba20493d -->\n## ECC Tools / Security Evidence\n\nCommit: `ef6e791558cca981446faaeddec2c83fba20493d`\n\n**Security scanner evidence required** (action_required)\n\nDetected 1 security-sensitive predictive risk signal(s) without scanner evidence.\n\nMode: enforce\n\nFindings:\n- **Security-sensitive changes may ship without scanner evidence**: The PR touches billing, secrets, auth, webhooks, agent, or CI-sensitive surfaces without adding obvious security scanner, code scanning, or security-focused validation evidence. (5 security-sensitive paths changed; 0 security scanner or security-focused validation artifacts changed)\n\nTouched security-sensitive paths:\n- `app/app/ai/agents/[id]/_components/AgentForm.tsx`\n- `app/app/ai/agents/[id]/_components/FollowupWindowEditor.tsx`\n\nExpected evidence:\n- Security scanner, code scanning, secret scanning, dependency/security review, or focused security regression output.\n- SARIF/code-scanning upload or equivalent pass/fail gate for the changed surface.\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5722464282,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-17T23:14:08Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / PR Risk Taxonomy:ef6e791558cca981446faaeddec2c83fba20493d -->\n## ECC Tools / PR Risk Taxonomy\n\nCommit: `ef6e791558cca981446faaeddec2c83fba20493d`\n\n**PR taxonomy review recommended** (neutral)\n\nDetected 3 PR taxonomy bucket(s): Security Evidence, CI/CD Recommendation, Cost/Token Risk.\n\nScanned 7 changed file(s).\n\n\n\nRoadmap taxonomy buckets:\n\n\n\n### Security Evidence\nSecurity-sensitive changes should carry explicit scanner, code-scanning, or focused regression evidence.\n\nSignals:\n- Security-sensitive changes may ship without scanner evidence\n- 0 security-sensitive path(s) changed\n\nPaths:\n- `.changes/janela-propria-followup-agente.md`\n- `app/app/ai/agents/[id]/_components/AgentForm.tsx`\n- `app/app/ai/agents/[id]/_components/FollowupWindowEditor.tsx`\n\n### CI/CD Recommendation\nCI, dependency, coverage, and contract signals should be routed into follow-up checks or verification work.\n\nSignals:\n- 1 CI or workflow path(s) changed\n\nPaths:\n- `tests/unit/janela-propria-de-followup.test.ts`\n\n### Cost/Token Risk\nAI routing, usage, and token-budget changes should include budget or usage-limit evidence.\n\nSignals:\n- 3 cost/token path(s) changed\n\nPaths:\n- `app/app/ai/agents/[id]/_components/AgentForm.tsx`\n- `app/app/ai/agents/[id]/_components/FollowupWindowEditor.tsx`\n- `lib/ai/agents/validation.ts`\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5722464386,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-17T23:14:09Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / Reference Set Readiness:ef6e791558cca981446faaeddec2c83fba20493d -->\n## ECC Tools / Reference Set Readiness\n\nCommit: `ef6e791558cca981446faaeddec2c83fba20493d`\n\n**Reference set readiness gaps detected** (neutral)\n\nReference evidence present for 0/7 areas (0%) across 7 changed file(s).\n\nThis check is based on files changed in this PR. Repository-level readiness is still reported by `/ecc-tools analyze` comments and generated manifests.\n\n| Area | Status | Evidence / Next Step |\n| --- | --- | --- |\n| Deep analyzer corpus | Missing | Add analyzer fixture, golden, benchmark, or reference-set files that can catch analyzer regressions. |\n| RAG/evaluator comparison | Missing | Add retrieval or evaluator reference-set comparison fixtures with expected ranking behavior. |\n| PR salvage/review corpus | Missing | Add stale-PR, review-thread, reopen-flow, or salvage reference cases for queue cleanup automation. |\n| Discussion triage corpus | Missing | Add public discussion triage fixtures, golden cases, or reference sets for informational, answered, and no-response classifications. |\n| Harness compatibility | Missing | Add cross-harness, adapter-compliance, or harness-audit evidence for Claude, Codex, OpenCode, Zed, dmux, and agent surfaces. |\n| Security evidence | Missing | Attach security evidence such as SBOMs, SARIF, audit reports, or AgentShield evidence packs. |\n| CI failure-mode evidence | Missing | Add captured CI failure logs, dry-run fixtures, or troubleshooting docs for common workflow failure modes. |\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5722464617,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-17T23:14:10Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / Hosted Promotion Readiness:ef6e791558cca981446faaeddec2c83fba20493d -->\n## ECC Tools / Hosted Promotion Readiness\n\nCommit: `ef6e791558cca981446faaeddec2c83fba20493d`\n\n**Hosted promotion readiness passed** (success)\n\nNo hosted promotion evidence gaps detected across 7 changed file(s); 0 corpus scenarios had matching evidence.\n\nThis check compares PR file changes against the evaluator/RAG promotion corpus in `src/analyzers/fixtures/evaluator-rag-corpus.ts`.\nHosted output scoring inspected 0 completed cached hosted job results.\n\nNo evaluator corpus scenarios matched this PR.\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5722471404,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-17T23:15:01Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / Security Evidence:581cd4d5fd267743ad1a8a67fcf95631f7ad9d31 -->\n## ECC Tools / Security Evidence\n\nCommit: `581cd4d5fd267743ad1a8a67fcf95631f7ad9d31`\n\n**Security evidence gate passed** (success)\n\nNo security-sensitive scanner-evidence gap detected.\n\nMode: enforce\n\nScanned 8 changed file(s). No missing scanner-evidence signal was detected.\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5722471537,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-17T23:15:02Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / PR Risk Taxonomy:581cd4d5fd267743ad1a8a67fcf95631f7ad9d31 -->\n## ECC Tools / PR Risk Taxonomy\n\nCommit: `581cd4d5fd267743ad1a8a67fcf95631f7ad9d31`\n\n**PR taxonomy review recommended** (neutral)\n\nDetected 2 PR taxonomy bucket(s): CI/CD Recommendation, Cost/Token Risk.\n\nScanned 8 changed file(s).\n\n\n\nRoadmap taxonomy buckets:\n\n\n\n### CI/CD Recommendation\nCI, dependency, coverage, and contract signals should be routed into follow-up checks or verification work.\n\nSignals:\n- 2 CI or workflow path(s) changed\n\nPaths:\n- `tests/unit/janela-propria-de-followup.test.ts`\n- `tests/unit/security-followup-window-tenant-boundary.test.ts`\n\n### Cost/Token Risk\nAI routing, usage, and token-budget changes should include budget or usage-limit evidence.\n\nSignals:\n- 3 cost/token path(s) changed\n\nPaths:\n- `app/app/ai/agents/[id]/_components/AgentForm.tsx`\n- `app/app/ai/agents/[id]/_components/FollowupWindowEditor.tsx`\n- `lib/ai/agents/validation.ts`\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5722471651,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-17T23:15:02Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / Reference Set Readiness:581cd4d5fd267743ad1a8a67fcf95631f7ad9d31 -->\n## ECC Tools / Reference Set Readiness\n\nCommit: `581cd4d5fd267743ad1a8a67fcf95631f7ad9d31`\n\n**Reference set readiness gaps detected** (neutral)\n\nReference evidence present for 1/7 areas (14%) across 8 changed file(s).\n\nThis check is based on files changed in this PR. Repository-level readiness is still reported by `/ecc-tools analyze` comments and generated manifests.\n\n| Area | Status | Evidence / Next Step |\n| --- | --- | --- |\n| Deep analyzer corpus | Missing | Add analyzer fixture, golden, benchmark, or reference-set files that can catch analyzer regressions. |\n| RAG/evaluator comparison | Missing | Add retrieval or evaluator reference-set comparison fixtures with expected ranking behavior. |\n| PR salvage/review corpus | Missing | Add stale-PR, review-thread, reopen-flow, or salvage reference cases for queue cleanup automation. |\n| Discussion triage corpus | Missing | Add public discussion triage fixtures, golden cases, or reference sets for informational, answered, and no-response classifications. |\n| Harness compatibility | Missing | Add cross-harness, adapter-compliance, or harness-audit evidence for Claude, Codex, OpenCode, Zed, dmux, and agent surfaces. |\n| Security evidence | Present | `tests/unit/security-followup-window-tenant-boundary.test.ts` |\n| CI failure-mode evidence | Missing | Add captured CI failure logs, dry-run fixtures, or troubleshooting docs for common workflow failure modes. |\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5722471882,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-17T23:15:04Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / Hosted Promotion Readiness:581cd4d5fd267743ad1a8a67fcf95631f7ad9d31 -->\n## ECC Tools / Hosted Promotion Readiness\n\nCommit: `581cd4d5fd267743ad1a8a67fcf95631f7ad9d31`\n\n**Hosted promotion readiness passed** (success)\n\nNo hosted promotion evidence gaps detected across 8 changed file(s); 0 corpus scenarios had matching evidence.\n\nThis check compares PR file changes against the evaluator/RAG promotion corpus in `src/analyzers/fixtures/evaluator-rag-corpus.ts`.\nHosted output scoring inspected 0 completed cached hosted job results.\n\nNo evaluator corpus scenarios matched this PR.\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5723120179,
   "autor": "github-actions[bot]",
   "quando": "2026-09-18T00:26:02Z",
   "texto": "<!-- triagem-de-pr:v1:pass=1 -->\nRecebido, @joaopaulomirandamatias — obrigado por isto.\n\nUma coisa vai parecer erro seu e não é:\n\n- No primeiro PR de quem nunca contribuiu aqui, os workflows ficam **parados esperando\n  liberação** — política do GitHub, não sua. Enquanto isso o PR parece não ter check nenhum\n  (nem o `gh pr checks` mostra os que estão nesse estado). Quem tria libera; você não precisa\n  fazer nada.\n\nQuando eles rodarem, o que trava o merge são só os checks marcados **Required** aqui no seu\npróprio PR — é essa lista que vale, não qualquer outro vermelho que apareça. No terminal,\n`gh pr checks <número> --required` mostra os obrigatórios que **já reportaram**, e só esses:\nenquanto um deles não rodou, ele não aparece ali. Se um reprovar, a saída dele diz o que\nfalta; se não estiver claro, comente aqui — não feche o PR.\n\nUm mantenedor vai revisar de verdade — rodando os gates e reproduzindo o comportamento, não só\nlendo o diff — e responde aqui **em até um dia útil**, com a medição junto, nunca com um \"acho\nque\".\n\nEsta mensagem é automática e não diz nada sobre o seu PR: ela é sobre o processo. O que vem\ndepois é pessoa.\n",
   "onde": "conversa"
  },
  {
   "id": 5724785642,
   "autor": "melgarafael",
   "quando": "2026-09-18T03:37:03Z",
   "texto": "<!-- triagem-de-pr:v1:pass=10 -->\n**Encaminhamento: aguardar autor.** Um check obrigatório está vermelho e a causa é sua — é uma linha. Junto com isso, um bloqueador de comportamento que **não é seu**, e eu digo desde já de quem é: da casa. A parte que fica com você nele é pequena e está nomeada no fim do item 1.\n\nAntes disso, o que você acertou e não é pouco: a faixa mora no lugar certo (`ai_agent_versions.followup`, jsonb que já existe — `git show origin/main:supabase/baseline.sql | grep -n \"add column if not exists followup jsonb\"` → linha 7320), então \"sem migration\" é verdade e não precisa de apêndice no baseline nem linha no MANIFEST. `lerJanelaDeFollowup` delega a matemática de calendário para `lerJanelaDeAtendimento` em vez de duplicá-la, e o fuso não é input da faixa — os dois são exatamente a decisão que evita o terceiro relógio, e a sua prova de segurança prende isso. A consulta do worker une enrollment, agente e versão publicada por `organization_id` explícito, sem apoiar em RLS, que é o que a doutrina exige de quem usa acesso de servidor. E a catraca no call-site real (`lib/agent-engine/agent/followup-turn.ts` lido por `indexOf`) é o tipo de teste que sobrevive a refactor. Seu \"O que NÃO medi\" também poupou meu tempo: usei ele como ponto de partida.\n\n---\n\n## 1. O adiamento estoura o orçamento do dead-man do motor de fluxo — e esse furo já é da main\n\n### O mecanismo\n\nSeu portão reagenda o job e retorna **sem chamar `completeFollowupTurn`**. Isso copia corretamente o caminho `'deferred'` da janela anti-ban. O outro lado da corda é que, enquanto o turno não fecha, o motor de fluxo fica rechecando o nó de ação — e tem um teto.\n\n```\ngit show origin/main:lib/followup/node-handlers.ts | sed -n '108,132p;680,695p'\n```\n\n```\nexport const ACTION_RECHECK_MS = 5 * 60_000;\nexport const ACTION_RECHECK_MAX_MS = 60 * 60_000;\nexport const MAX_ACTION_RECHECKS = 14;\n...\nif ((actionRecheckCount ?? 0) >= MAX_ACTION_RECHECKS) {\n  return { kind: \"dead\", reason: \"action_turn_never_completed\" };\n}\n```\n\nCada recheck grava um evento no nó e incrementa o contador, então o orçamento é de tempo, não de tentativas:\n\n```\ngit show origin/main:lib/followup/engine.ts | sed -n '186,187p;419,424p;626p'\nnode -e 'const a=n=>Math.min(300000*2**Math.max(0,n),3600000);\nlet t=300000,c=1; while(c<14){t+=a(c);c+=1;} console.log((t/3600000).toFixed(2))'\n11.25\n```\n\n**11,25 h.** O comentário do próprio arquivo diz o mesmo — \"cobre ~11h\" — e diz por quê: o número subiu de 5 para 14 depois de um incidente medido em 2026-08-18 em que enrollments morriam com `action_turn_never_completed` enquanto o turno só esperava a janela anti-ban.\n\nQuando ele dispara, `markDead` grava `status='dead'` **e abre um aviso na Central** dizendo \"Um fluxo de follow-up parou de tentar\" (`git show origin/main:lib/followup/engine.ts | sed -n '268,300p'`). Nada cancela o cron job pendente — não há uma linha de `cron_jobs` em `lib/followup/` (`git grep -n \"cron_jobs\" origin/main -- lib/followup/` só acha leitura de retorno). Então na abertura o job dispara, `runFlowDrivenTurn` envia **antes** de chamar `complete` (`followup-turn.ts:363`), e só depois `completeTurnForEnrollment` vira no-op, porque o guard positivo recusa quem não está `active`/`waiting_reply` (`git show origin/main:lib/followup/turn-bridge.ts | sed -n '88p'`). Cliente recebe, fluxo não continua, dossiê diz que o turno nunca completou. (`MAX_STEPS = 80` não salva: o de 14 chega muito antes.)\n\n### De quem é o furo: da casa, não seu\n\nAqui eu corrijo o que eu mesmo ia escrever. A tentação era dizer \"a anti-ban fecha ≈9h, cabe no orçamento; a sua faixa é livre, não cabe\". **Isso é falso**, e eu medi antes de te cobrar. A janela anti-ban não é fixa: as horas e o domingo são knobs por canal, editáveis na tela.\n\n```\ngit grep -n \"allow_sunday\\|window_start_hour\" origin/main -- components/connections/AntiBanSheet.tsx\ngit show origin/main:lib/ai/pacing-knobs.ts | sed -n '113,116p'\n```\n\n```\ncomponents/connections/AntiBanSheet.tsx:272:  checked={form.allow_sunday}\ncomponents/connections/AntiBanSheet.tsx:233:  value={form.window_start_hour}\nwindow_start_hour: z.number().int().min(0).max(KNOB_BOUNDS.hourLastStart)  // 23\nwindow_end_hour:   z.number().int().min(1).max(KNOB_BOUNDS.hourEnd)        // 24\n```\n\nCom isso, na main de hoje, sem uma linha sua:\n\n| configuração suportada na main | fecha por | orçamento |\n|---|---|---|\n| 7h-22h com `allow_sunday=false`, sábado 22h | **33 h** | 11,25 h |\n| horas estreitadas para 9h-18h, qualquer noite | **15 h** | 11,25 h |\n\nE não é hipótese de laboratório: `git show origin/main:lib/ai/pacing-knobs.ts | sed -n '250,256p'` registra, medido em produção, que instalações reais carregam `allow_sunday=false` como override congelado. O caminho é literalmente o mesmo que o seu — `chain.code === 'outside_window'` → `rescheduleReentry` → `return \"deferred\"`, e `runFlowDrivenTurn` retorna sem completar (`git show origin/main:lib/agent-engine/agent/followup-turn.ts | sed -n '360,370p;605,622p'`) —, e o gate anti-ban está na mesma cadeia do envio de fluxo (`git grep -n \"decidePacing\" origin/main -- lib/agent-engine/guardrails/before-send.ts` → linha 599).\n\nEntão: **o defeito é do motor de fluxo, é anterior ao seu PR, e não tinha issue aberta** (`gh issue list --search \"action_turn_never_completed OR MAX_ACTION_RECHECKS in:title,body\" --state all` → `[]`). A casa vai abrir a issue e consertar o dead-man — isso não é trabalho seu, e eu não vou te pedir para redesenhar o motor num PR de feature.\n\n### O que fica com você, e por que ainda segura o merge\n\nO que o seu PR muda é a **probabilidade**: o anti-ban só passa dos 11,25h se alguém mexer num knob; a sua faixa passa no **padrão de fábrica**.\n\n```\ngh pr diff 1134 -- 'app/app/ai/agents/[id]/_components/FollowupWindowEditor.tsx'\n# const DEFAULT_WINDOW = { start: \"09:00\", end: \"18:00\", weekdays: [1, 2, 3, 4, 5] }\n```\n\n```\nnode -e 'const ms=(d,m,w,i)=>{for(let o=0;o<=7;o++){const x=(d+o)%7;if(!w.includes(x))continue;\nif(o===0&&m>=i)continue;const r=o*1440+i-m;if(r>0)return r/60;}return null;};\nconsole.log(ms(5,1080,[1,2,3,4,5],540), ms(6,600,[1,2,3,4,5],540), ms(1,1080,[1],540));'\n63 47 159\n```\n\nSexta 18:00 → segunda 09:00 = **63 h** com o padrão que o seu editor propõe; sábado 10:00 → segunda 09:00 = 47 h (o caso do seu próprio teste); e como `msAteAJanelaAbrir` varre `offset <= 7`, um operador que escolha um único dia da semana chega a **159 h**. Quem ligar a faixa e aceitar o padrão perde os enrollments de todo fim de semana, com um aviso na Central dizendo que o fluxo desistiu quando ele estava obedecendo.\n\nDuas saídas, e a escolha é sua:\n\n- **A que eu prefiro, e que não depende da casa:** decidir a janela no lado do **fluxo**, em `lib/followup/node-handlers.ts`, no nó `action`, **antes** do `enqueue_turn` — faixa fechada devolve `wait`/`recheck` com `next_eval_at` na próxima abertura e **não** enfileira job. Aí o adiamento custa zero rechecks, o dossiê fica honesto, e a sua feature não depende do conserto do dead-man para ser correta. É mais trabalho, mas é o desenho certo e resolve na raiz.\n- **A mais barata:** manter o portão no worker e **esperar o conserto do dead-man** da casa, que vai junto com a issue acima. Nesse caminho o seu PR fica pronto para merge e entra depois — e você não paga pela dívida.\n\nMe diga qual você quer. Se for a segunda, eu ligo este PR à issue do motor e ele não fica esperando você.\n\n**Ressalva de honestidade:** o mecanismo eu medi por leitura do caminho (as constantes, o `occupancyEventCount` em `engine.ts:626`, o call site do nó `action`, `markDead`, o guard de `completeTurnForEnrollment`) mais a aritmética acima. **Não executei o motor** para ver o enrollment morrer. Se você rodar e a sua medição discordar da minha, mande o número — eu remeço antes de insistir.\n\n## 2. O vermelho é seu, e é de uma linha\n\n`e2e-parte (2)` reprovou num caso só, consequência direta da mudança de contrato:\n\n```\ngh run view 35285963779 --log-failed | sed 's/\\x1b\\[[0-9;]*m//g' | grep -aE \"followup-builder|deep equality|send_window|941 \\||passed\"\n```\n\n```\n✘ 95 [chromium] › tests/e2e/followup-builder.spec.ts:865:7 › admin vincula um fluxo publicado ao agente...\n  Error: expect(received).toEqual(expected) // deep equality\n  +   \"send_window\": null,\n  > 941 | expect(created.version.followup).toEqual({ enabled: false, flow_pointer_ids: [] });\n1 failed · 127 passed (21.4m)\n```\n\nO `.default({ ..., send_window: null })` acrescenta uma chave à resposta da API para **toda** versão existente, e essa asserção de igualdade profunda é a guarda que registra o contrato. Ela é a única com essa forma no repo (`git grep -n \"version.followup\" origin/main -- tests/`), e atualizá-la é a decisão certa — é um campo aditivo com `null`. Faça isso no mesmo PR, de propósito, para o diff dizer que a mudança de forma foi escolhida e não atropelada.\n\nOs outros quatro obrigatórios estão verdes no seu head, todos reportando em `581cd4d5`: `verify`, `build-and-size`, `invariants`, `imagens-ok` (`gh pr checks 1134 --required --json name,state`; o agregador `e2e` nasceu da matriz — partes 1 e 3 verdes, parte 2 vermelha, `gh run view 35285963779 --json jobs`).\n\n## 3. Falta prova pela tela de um controle de tela (DoD 12)\n\nVocê declarou isso no corpo, e eu registro como pendência, não como cobrança: o PR acrescenta um controle novo de UI e não há spec que o dirija pelo navegador. O molde já está escrito na vizinhança — `tests/e2e/followup-builder.spec.ts:865` (\"admin vincula um fluxo publicado ao agente, salva, e a persistência é provada via API\"). Falta o caso irmão: ligar a faixa, escolher horário e dias, salvar, e provar a persistência pela API. Convém que seja nessa spec, porque você vai precisar tocá-la de todo jeito — é ela que está vermelha.\n\n## 4. Menores\n\n- **O rótulo empresta um sentido oposto.** O editor mostra `{t(\"Follow-up\")} · {t(\"Só atender em horário de funcionamento\")}`, e essa chave é a do horário de **inbound** (`git show origin/main:lib/i18n/dicionario.ts | sed -n '1074p'` → `{ es: \"Solo atender en horario de funcionamiento\" }`). A sua faixa não decide quando o agente *atende*; decide quando ele *envia*. A #490 nasceu justamente da confusão entre as duas coisas — o texto na tela é contrato com quem configurou. Chave nova, algo como \"Só enviar follow-up nestes horários\", pede uma linha em `dicionario.ts`; se você não fala espanhol, manda assim e diz isso na descrição, que é o que a própria mensagem do gate orienta.\n- **`lib/ai/agents/validation.ts` perdeu a quebra de linha final** (`\\ No newline at end of file` no diff). Não reprova gate, é ruído.\n- **A branch está atrás da main** — e eu não escrevo o número porque ele vence entre a minha medição e a sua leitura (o do meu rascunho já venceu). Meça e atualize: `git fetch origin && git rev-list --count HEAD..origin/main && git merge origin/main`. Sem conflito quando eu olhei.\n- **Contrato com dois leitores.** `lerJanelaDeFollowup` estreita o jsonb à mão em vez de reusar `followupSendWindowSchema` na leitura. Não há vazamento — o `timezone` da linha nunca é lido, e é isso que a sua prova de segurança prende —, mas vale considerar parsear com o mesmo schema na leitura.\n- **Uma consulta extra por job.** `followupPublicadoDoEnrollment` roda em todo `purpose === 'send_message'`, inclusive quando não há faixa. Barato; só anotando.\n\n## 5. A fronteira que você deixou aberta: registrada, e não é sua para decidir\n\nSobre `schedule_followup` ficar fora da faixa — seu argumento está certo: esses jobs não têm enrollment nem agente pinado, e escolher o dono da promessa é decisão de produto que a issue deixou aberta. Você fez o certo em não resolver isso por conta própria dentro deste PR. Registrei para o dono decidir separadamente: o operador da #490 escreveu \"a janela de follow up só dispara entre 07h e 20h\", e é plausível que o modelo mental dele inclua a promessa da IA. Isso **não** bloqueia esta fatia.\n\n---\n\n**O que eu não medi**, para você não construir sobre o que não foi verificado: não rodei suíte nenhuma nesta máquina (a triagem proíbe — quem mediu foi o CI do seu PR, no head exato `581cd4d5`); não executei o motor para observar a morte do enrollment; não abri navegador nem medi nada do editor por ferramenta; não testei horário de verão (você também declarou que não); não exercitei com WAHA/Redis/worker reais nem em banco fresco estilo VPS; não medi o custo do round-trip extra; e não verifiquei se algum consumidor externo da API depende da forma exata do objeto `followup` — só medi o único teste do repo que a prende.\n\nNão vou prometer prazo nem revisão. O estado é este: o desenho está certo, o vermelho é de uma linha, e o item 1 é dívida da casa que a sua feature torna alcançável por padrão — com duas saídas nomeadas, uma delas sem trabalho novo para você.\n",
   "onde": "conversa"
  },
  {
   "id": 5725460806,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-18T05:07:58Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / Security Evidence:5755aa0b1243613349fba615a2cca5b1b05160b6 -->\n## ECC Tools / Security Evidence\n\nCommit: `5755aa0b1243613349fba615a2cca5b1b05160b6`\n\n**Security evidence gate passed** (success)\n\nNo security-sensitive scanner-evidence gap detected.\n\nMode: enforce\n\nScanned 9 changed file(s). No missing scanner-evidence signal was detected.\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5725460938,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-18T05:07:59Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / PR Risk Taxonomy:5755aa0b1243613349fba615a2cca5b1b05160b6 -->\n## ECC Tools / PR Risk Taxonomy\n\nCommit: `5755aa0b1243613349fba615a2cca5b1b05160b6`\n\n**PR taxonomy review recommended** (neutral)\n\nDetected 2 PR taxonomy bucket(s): CI/CD Recommendation, Cost/Token Risk.\n\nScanned 9 changed file(s).\n\n\n\nRoadmap taxonomy buckets:\n\n\n\n### CI/CD Recommendation\nCI, dependency, coverage, and contract signals should be routed into follow-up checks or verification work.\n\nSignals:\n- 3 CI or workflow path(s) changed\n\nPaths:\n- `tests/e2e/followup-builder.spec.ts`\n- `tests/unit/janela-propria-de-followup.test.ts`\n- `tests/unit/security-followup-window-tenant-boundary.test.ts`\n\n### Cost/Token Risk\nAI routing, usage, and token-budget changes should include budget or usage-limit evidence.\n\nSignals:\n- 3 cost/token path(s) changed\n\nPaths:\n- `app/app/ai/agents/[id]/_components/AgentForm.tsx`\n- `app/app/ai/agents/[id]/_components/FollowupWindowEditor.tsx`\n- `lib/ai/agents/validation.ts`\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5725461112,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-18T05:08:00Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / Reference Set Readiness:5755aa0b1243613349fba615a2cca5b1b05160b6 -->\n## ECC Tools / Reference Set Readiness\n\nCommit: `5755aa0b1243613349fba615a2cca5b1b05160b6`\n\n**Reference set readiness gaps detected** (neutral)\n\nReference evidence present for 1/7 areas (14%) across 9 changed file(s).\n\nThis check is based on files changed in this PR. Repository-level readiness is still reported by `/ecc-tools analyze` comments and generated manifests.\n\n| Area | Status | Evidence / Next Step |\n| --- | --- | --- |\n| Deep analyzer corpus | Missing | Add analyzer fixture, golden, benchmark, or reference-set files that can catch analyzer regressions. |\n| RAG/evaluator comparison | Missing | Add retrieval or evaluator reference-set comparison fixtures with expected ranking behavior. |\n| PR salvage/review corpus | Missing | Add stale-PR, review-thread, reopen-flow, or salvage reference cases for queue cleanup automation. |\n| Discussion triage corpus | Missing | Add public discussion triage fixtures, golden cases, or reference sets for informational, answered, and no-response classifications. |\n| Harness compatibility | Missing | Add cross-harness, adapter-compliance, or harness-audit evidence for Claude, Codex, OpenCode, Zed, dmux, and agent surfaces. |\n| Security evidence | Present | `tests/unit/security-followup-window-tenant-boundary.test.ts` |\n| CI failure-mode evidence | Missing | Add captured CI failure logs, dry-run fixtures, or troubleshooting docs for common workflow failure modes. |\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5725461333,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-18T05:08:01Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / Hosted Promotion Readiness:5755aa0b1243613349fba615a2cca5b1b05160b6 -->\n## ECC Tools / Hosted Promotion Readiness\n\nCommit: `5755aa0b1243613349fba615a2cca5b1b05160b6`\n\n**Hosted promotion readiness passed** (success)\n\nNo hosted promotion evidence gaps detected across 9 changed file(s); 0 corpus scenarios had matching evidence.\n\nThis check compares PR file changes against the evaluator/RAG promotion corpus in `src/analyzers/fixtures/evaluator-rag-corpus.ts`.\nHosted output scoring inspected 0 completed cached hosted job results.\n\nNo evaluator corpus scenarios matched this PR.\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5729794753,
   "autor": "melgarafael",
   "quando": "2026-09-18T12:11:29Z",
   "texto": "**O bloqueador que eu declarei ser da casa saiu — no PR #1171**, e não na sua branch. Explico a escolha, porque ela importa.\n\nQuando fui empurrar o conserto aqui, medi e descobri que **ele não depende de uma linha do seu PR**: zero ocorrências de `send_window`, `msAteAJanelaAbrir` e `lerJanelaDeFollowup`, e toca só arquivos que já existem na `main`. Ou seja, **o furo está na `main` hoje**, sem você — e a prova é numérica:\n\n```\norçamento do dead-man ......... 11,25 h   (MAX_ACTION_RECHECKS = 14, na main)\nespera real com a anti-ban .... 33 h      medida rodando decidePacing da MAIN\n```\n\nAs 33 h foram medidas **executando a função**, não estimando. Com a sua faixa por agente a conta vai a 63 h no padrão de fábrica e 159 h com um único dia da semana — o seu PR **aumenta a probabilidade**, não cria o defeito.\n\nEntão o conserto é da casa e sai sozinho, e o seu PR fica livre para ser julgado pelo que ele é.\n\n**E preciso te contar um quase-acidente, porque ele quase te custou trabalho.** A branch que a triagem preparou foi construída sobre a `main` em vez de sobre o seu PR. Quando tentei empurrar, o git **recusou por não ser fast-forward** — e essa recusa evitou que eu apagasse **doze commits seus**:\n\n```\n5755aa0b1  test(EPIC-13): spec do follow-up conhece o shape novo com send_window\n581cd4d5f  test(security): prova isolamento da janela de follow-up\nef6e79155  fix(EPIC-13): deixa escopo da janela explícito na tela\nd2a584bb8  chore(release): registra janela própria de follow-up\n877307922  test(i18n): mantém dias da janela visíveis ao gate\n   … e mais sete\n```\n\nNada foi perdido, e nada foi forçado — a política de nunca usar `--force` na branch de contribuidor é exatamente o que transformou isso num susto em vez de num estrago. Estou registrando o caso para a triagem conferir a **linhagem** antes de empurrar, e não só o nome da branch.\n\n**O que fica com você:** a escolha de desenho que o parecer te fez (redesenhar no nó `action` **ou** esperar o conserto da casa) deixou de ser uma escolha — a casa entregou. Quando o #1171 entrar na `main`, traga-a para dentro e o seu PR deve ficar verde sem mais nada.",
   "onde": "conversa"
  }
 ],
 "commits:1134": [
  {
   "sha": "c6f9406a0b544c84927d51d35aa4de850f7520de",
   "quando": "2026-09-17T23:04:56Z",
   "autor": "joaopaulomirandamatias"
  },
  {
   "sha": "ee698140f72960fc305bff96f63062c35cf6549e",
   "quando": "2026-09-17T23:05:12Z",
   "autor": "joaopaulomirandamatias"
  },
  {
   "sha": "103a6421ad9589371af192110ccb61f2fa20130a",
   "quando": "2026-09-17T23:05:33Z",
   "autor": "joaopaulomirandamatias"
  },
  {
   "sha": "27b200911bfd739989416a05a9fded1841373d59",
   "quando": "2026-09-17T23:06:10Z",
   "autor": "joaopaulomirandamatias"
  },
  {
   "sha": "1a0438c735678fd6dc1048fb66b436d23ab41716",
   "quando": "2026-09-17T23:07:53Z",
   "autor": "joaopaulomirandamatias"
  },
  {
   "sha": "3b32972cf7d53bc4370ab60e08766699f5e060fd",
   "quando": "2026-09-17T23:09:34Z",
   "autor": "joaopaulomirandamatias"
  },
  {
   "sha": "0e5f75b4eb1b8358d61d7a42935ca1dfc75e1641",
   "quando": "2026-09-17T23:10:24Z",
   "autor": "joaopaulomirandamatias"
  },
  {
   "sha": "87730792221e5d61d3fcc75b52c43104d27e61b2",
   "quando": "2026-09-17T23:10:55Z",
   "autor": "joaopaulomirandamatias"
  },
  {
   "sha": "d2a584bb84fffdaab6d04cea79ce4510840bb377",
   "quando": "2026-09-17T23:11:35Z",
   "autor": "joaopaulomirandamatias"
  },
  {
   "sha": "ef6e791558cca981446faaeddec2c83fba20493d",
   "quando": "2026-09-17T23:12:12Z",
   "autor": "joaopaulomirandamatias"
  },
  {
   "sha": "581cd4d5fd267743ad1a8a67fcf95631f7ad9d31",
   "quando": "2026-09-17T23:14:56Z",
   "autor": "joaopaulomirandamatias"
  },
  {
   "sha": "5755aa0b1243613349fba615a2cca5b1b05160b6",
   "quando": "2026-09-18T05:07:51Z",
   "autor": "joaopaulomirandamatias"
  }
 ],
 "a_frente:triagem/1134-conserto": 0,
 "pr:714": {
  "author": {
   "id": "MDQ6VXNlcjQzNDI4MTg4",
   "is_bot": false,
   "login": "betoarts",
   "name": "Humberto Moura Neto DEV"
  },
  "createdAt": "2026-09-11T19:30:53Z",
  "headRefName": "main",
  "headRefOid": "836952ec57d472adbf2722bccc8a6d134942dcf0",
  "number": 714,
  "state": "OPEN"
 },
 "comentarios:714": [
  {
   "id": 5639639134,
   "autor": "vercel[bot]",
   "quando": "2026-09-11T19:30:58Z",
   "texto": "@betoarts is attempting to deploy a commit to the **rafael-maudibrasil's projects** Team on [Vercel](https://vercel.com).\n\nA member of the Team first needs to [authorize it](https://vercel.com/git/authorize?team=rafael-maudibrasil's%20projects&slug=rafael-maudibrasils-projects&teamId=team_CsA6wVAM2V1CcrKPsDo6VGHO&type=github&job=%7B%22headInfo%22%3A%7B%22sha%22%3A%22838e093df1dfeae538260a9dbf83a4e2bc50f729%22%7D%2C%22id%22%3A%22QmWbquSa7apUCCBoir6LQyc3UoqNTznkobP8NXPizDoX2t%22%2C%22org%22%3A%22melgarafael%22%2C%22prId%22%3A714%2C%22repo%22%3A%22DeskcommCRM%22%7D).\n\n",
   "onde": "conversa"
  },
  {
   "id": 5639639188,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-11T19:30:58Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / Security Evidence:838e093df1dfeae538260a9dbf83a4e2bc50f729 -->\n## ECC Tools / Security Evidence\n\nCommit: `838e093df1dfeae538260a9dbf83a4e2bc50f729`\n\n**Security evidence gate passed** (success)\n\nNo security-sensitive scanner-evidence gap detected.\n\nMode: enforce\n\nScanned 10 changed file(s). No missing scanner-evidence signal was detected.\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5639639361,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-11T19:30:59Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / PR Risk Taxonomy:838e093df1dfeae538260a9dbf83a4e2bc50f729 -->\n## ECC Tools / PR Risk Taxonomy\n\nCommit: `838e093df1dfeae538260a9dbf83a4e2bc50f729`\n\n**PR taxonomy review recommended** (neutral)\n\nDetected 2 PR taxonomy bucket(s): Install Manifest Integrity, CI/CD Recommendation.\n\nScanned 10 changed file(s).\n\n\n\nRoadmap taxonomy buckets:\n\n\n\n### Install Manifest Integrity\nInstall manifests, plugin metadata, and shipped skills should stay synchronized with user-facing setup guidance.\n\nSignals:\n- 1 install or manifest path(s) changed\n\nPaths:\n- `package.json`\n\n### CI/CD Recommendation\nCI, dependency, coverage, and contract signals should be routed into follow-up checks or verification work.\n\nSignals:\n- Regression coverage may lag behind the diff\n- Runtime config changes may ship without example or template updates\n- Dependency or CI drift could surface after merge\n- 1 CI or workflow path(s) changed\n\nPaths:\n- `package.json`\n- `docker-compose.local.yml`\n- `scripts/local-env.sh`\n- `scripts/local-stack.sh`\n- `scripts/local-supabase.sh`\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5639639518,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-11T19:31:00Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / Reference Set Readiness:838e093df1dfeae538260a9dbf83a4e2bc50f729 -->\n## ECC Tools / Reference Set Readiness\n\nCommit: `838e093df1dfeae538260a9dbf83a4e2bc50f729`\n\n**Reference set readiness gaps detected** (neutral)\n\nReference evidence present for 0/7 areas (0%) across 10 changed file(s).\n\nThis check is based on files changed in this PR. Repository-level readiness is still reported by `/ecc-tools analyze` comments and generated manifests.\n\n| Area | Status | Evidence / Next Step |\n| --- | --- | --- |\n| Deep analyzer corpus | Missing | Add analyzer fixture, golden, benchmark, or reference-set files that can catch analyzer regressions. |\n| RAG/evaluator comparison | Missing | Add retrieval or evaluator reference-set comparison fixtures with expected ranking behavior. |\n| PR salvage/review corpus | Missing | Add stale-PR, review-thread, reopen-flow, or salvage reference cases for queue cleanup automation. |\n| Discussion triage corpus | Missing | Add public discussion triage fixtures, golden cases, or reference sets for informational, answered, and no-response classifications. |\n| Harness compatibility | Missing | Add cross-harness, adapter-compliance, or harness-audit evidence for Claude, Codex, OpenCode, Zed, dmux, and agent surfaces. |\n| Security evidence | Missing | Attach security evidence such as SBOMs, SARIF, audit reports, or AgentShield evidence packs. |\n| CI failure-mode evidence | Missing | Add captured CI failure logs, dry-run fixtures, or troubleshooting docs for common workflow failure modes. |\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5639639663,
   "autor": "github-actions[bot]",
   "quando": "2026-09-11T19:31:01Z",
   "texto": "<!-- triagem-de-pr:v1:pass=1 -->\nRecebido, @betoarts — obrigado por isto.\n\nDuas coisas que vão parecer erro seu e não são:\n\n- O check **Vercel** vermelho (\"Authorization required to deploy\") é esperado em PR de fork. A\n  `main` faz deploy de produção e a Vercel se recusa a construir código de fora, o que está\n  certo. **Ele não entra no gate de merge.**\n- No primeiro PR de quem nunca contribuiu aqui, os workflows ficam **parados esperando\n  liberação** — política do GitHub, não sua. Enquanto isso o PR parece não ter check nenhum\n  (nem o `gh pr checks` mostra os que estão nesse estado). Quem tria libera; você não precisa\n  fazer nada.\n\nUm mantenedor vai revisar de verdade — rodando os gates e reproduzindo o comportamento, não só\nlendo o diff — e responde aqui **em até um dia útil**, com a medição junto, nunca com um \"acho\nque\".\n\nEsta mensagem é automática e não diz nada sobre o seu PR: ela é sobre o processo. O que vem\ndepois é pessoa.\n",
   "onde": "conversa"
  },
  {
   "id": 5639639809,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-11T19:31:02Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / Hosted Promotion Readiness:838e093df1dfeae538260a9dbf83a4e2bc50f729 -->\n## ECC Tools / Hosted Promotion Readiness\n\nCommit: `838e093df1dfeae538260a9dbf83a4e2bc50f729`\n\n**Hosted promotion readiness passed** (success)\n\nNo hosted promotion evidence gaps detected across 10 changed file(s); 0 corpus scenarios had matching evidence.\n\nThis check compares PR file changes against the evaluator/RAG promotion corpus in `src/analyzers/fixtures/evaluator-rag-corpus.ts`.\nHosted output scoring inspected 0 completed cached hosted job results.\n\nNo evaluator corpus scenarios matched this PR.\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5642050062,
   "autor": "melgarafael",
   "quando": "2026-09-12T00:08:34Z",
   "texto": "<!-- triagem-de-pr:v1:pass=1 -->\nRecebido — obrigado.\n\nDuas coisas que vão parecer erro seu e não são:\n\n- O check **Vercel** vermelho (\"Authorization required to deploy\") é esperado em PR de fork. A `main` faz deploy de produção e a Vercel se recusa a construir código de fora, o que está certo. **Ele não entra no gate de merge.**\n- Os workflows ficam parados esperando liberação no primeiro PR de quem nunca contribuiu — política do GitHub, não sua. **Acabei de liberar**, o CI já está rodando.\n\nUm aviso útil: a `main` andou **doze PRs hoje** e a **v1.19.0 saiu**. Se o seu ficar com conflito por causa disso, **o conserto é do nosso lado** — não precisa correr atrás. O mesmo vale para número de migration colidido e fragmento de release faltando.\n\nVou revisar de verdade — rodando os gates e reproduzindo o comportamento, não só lendo o diff — e volto com o resultado. Se eu achar algo, venho com a medição junto, nunca com um \"acho que\".",
   "onde": "conversa"
  },
  {
   "id": 5642776573,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-12T02:11:13Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / Security Evidence:879dd329f5d2b883917250a4eeba588c70d91e1f -->\n## ECC Tools / Security Evidence\n\nCommit: `879dd329f5d2b883917250a4eeba588c70d91e1f`\n\n**Security scanner evidence required** (action_required)\n\nDetected 1 security-sensitive predictive risk signal(s) without scanner evidence.\n\nMode: enforce\n\nFindings:\n- **Security-sensitive changes may ship without scanner evidence**: The PR touches billing, secrets, auth, webhooks, agent, or CI-sensitive surfaces without adding obvious security scanner, code scanning, or security-focused validation evidence. (2 security-sensitive paths changed; 0 security scanner or security-focused validation artifacts changed)\n\nTouched security-sensitive paths:\n- `lib/auth/issue-invite.test.ts`\n- `lib/auth/issue-invite.ts`\n\nExpected evidence:\n- Security scanner, code scanning, secret scanning, dependency/security review, or focused security regression output.\n- SARIF/code-scanning upload or equivalent pass/fail gate for the changed surface.\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5642776645,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-12T02:11:14Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / PR Risk Taxonomy:879dd329f5d2b883917250a4eeba588c70d91e1f -->\n## ECC Tools / PR Risk Taxonomy\n\nCommit: `879dd329f5d2b883917250a4eeba588c70d91e1f`\n\n**PR taxonomy review recommended** (neutral)\n\nDetected 6 PR taxonomy bucket(s): Security Evidence, Harness Drift, Install Manifest Integrity, CI/CD Recommendation, Cost/Token Risk, Agent Config Review.\n\nScanned 55 changed file(s).\n\n\n\nRoadmap taxonomy buckets:\n\n\n\n### Security Evidence\nSecurity-sensitive changes should carry explicit scanner, code-scanning, or focused regression evidence.\n\nSignals:\n- Auth or permission changes may ship without security regression coverage\n- Security-sensitive changes may ship without scanner evidence\n- 2 security-sensitive path(s) changed\n\nPaths:\n- `lib/auth/issue-invite.test.ts`\n- `lib/auth/issue-invite.ts`\n\n### Harness Drift\nHarness-facing changes can drift across Claude Code, Codex, OpenCode, and shared adapter surfaces.\n\nSignals:\n- 1 harness-facing path(s) changed\n\nPaths:\n- `AGENTS.md`\n\n### Install Manifest Integrity\nInstall manifests, plugin metadata, and shipped skills should stay synchronized with user-facing setup guidance.\n\nSignals:\n- 2 install or manifest path(s) changed\n\nPaths:\n- `package.json`\n- `pnpm-lock.yaml`\n\n### CI/CD Recommendation\nCI, dependency, coverage, and contract signals should be routed into follow-up checks or verification work.\n\nSignals:\n- API contract changes may ship without integration coverage\n- Async job or webhook changes may ship without reliability coverage\n- User-facing UI changes may ship without browser coverage\n- 4 CI or workflow path(s) changed\n\nPaths:\n- `lib/auth/issue-invite.test.ts`\n- `lib/instalacao/ambiente.test.ts`\n- `package.json`\n- `pnpm-lock.yaml`\n- `app/actions/onboarding/sendOnboardingInvites.ts`\n- `app/actions/settings/smtp.ts`\n- `app/api/v1/team/invite/route.ts`\n- `app/app/settings/resend/_form.tsx`\n\n### Cost/Token Risk\nAI routing, usage, and token-budget changes should include budget or usage-limit evidence.\n\nSignals:\n- Cost or token-risk changes may ship without budget evidence\n- 0 cost/token path(s) changed\n\nPaths:\n- `.changes/smtp-completo.md`\n- `.env.example`\n- `.env.hostgator.example`\n\n### Agent Config Review\nAgent, command, skill, MCP, and local instruction changes should be reviewed as executable agent configuration.\n\nSignals:\n- 1 agent-config path(s) changed\n\nPaths:\n- `AGENTS.md`\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5642776720,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-12T02:11:14Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / Reference Set Readiness:879dd329f5d2b883917250a4eeba588c70d91e1f -->\n## ECC Tools / Reference Set Readiness\n\nCommit: `879dd329f5d2b883917250a4eeba588c70d91e1f`\n\n**Reference set readiness gaps detected** (neutral)\n\nReference evidence present for 0/7 areas (0%) across 55 changed file(s).\n\nThis check is based on files changed in this PR. Repository-level readiness is still reported by `/ecc-tools analyze` comments and generated manifests.\n\n| Area | Status | Evidence / Next Step |\n| --- | --- | --- |\n| Deep analyzer corpus | Missing | Add analyzer fixture, golden, benchmark, or reference-set files that can catch analyzer regressions. |\n| RAG/evaluator comparison | Missing | Add retrieval or evaluator reference-set comparison fixtures with expected ranking behavior. |\n| PR salvage/review corpus | Missing | Add stale-PR, review-thread, reopen-flow, or salvage reference cases for queue cleanup automation. |\n| Discussion triage corpus | Missing | Add public discussion triage fixtures, golden cases, or reference sets for informational, answered, and no-response classifications. |\n| Harness compatibility | Missing | Add cross-harness, adapter-compliance, or harness-audit evidence for Claude, Codex, OpenCode, Zed, dmux, and agent surfaces. |\n| Security evidence | Missing | Attach security evidence such as SBOMs, SARIF, audit reports, or AgentShield evidence packs. |\n| CI failure-mode evidence | Missing | Add captured CI failure logs, dry-run fixtures, or troubleshooting docs for common workflow failure modes. |\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5642776834,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-12T02:11:16Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / Hosted Promotion Readiness:879dd329f5d2b883917250a4eeba588c70d91e1f -->\n## ECC Tools / Hosted Promotion Readiness\n\nCommit: `879dd329f5d2b883917250a4eeba588c70d91e1f`\n\n**Hosted promotion readiness passed** (success)\n\nNo hosted promotion evidence gaps detected across 55 changed file(s); 0 corpus scenarios had matching evidence.\n\nThis check compares PR file changes against the evaluator/RAG promotion corpus in `src/analyzers/fixtures/evaluator-rag-corpus.ts`.\nHosted output scoring inspected 0 completed cached hosted job results.\n\nNo evaluator corpus scenarios matched this PR.\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5642776978,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-12T02:11:18Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / PR Config Audit:879dd329f5d2b883917250a4eeba588c70d91e1f -->\n## ECC Tools / PR Config Audit\n\nCommit: `879dd329f5d2b883917250a4eeba588c70d91e1f`\n\n**No changed-config issues detected** (success)\n\nScanned 2 config file(s) present at this commit across 2 changed config path(s) and found no issues in the supported security rules.\n\nChanged config files:\n- AGENTS.md\n- CLAUDE.md\n\n\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5642777087,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-12T02:11:19Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / PR Harness Audit:879dd329f5d2b883917250a4eeba588c70d91e1f -->\n## ECC Tools / PR Harness Audit\n\nCommit: `879dd329f5d2b883917250a4eeba588c70d91e1f`\n\n**No harness issues detected** (success)\n\nScanned 2 changed config file(s) and found no harness issues.\n\nChanged config files:\n- AGENTS.md\n- CLAUDE.md\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5642800897,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-12T02:16:06Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / Security Evidence:c126dad0addcad304dff1a15db672899f0628570 -->\n## ECC Tools / Security Evidence\n\nCommit: `c126dad0addcad304dff1a15db672899f0628570`\n\n**Security scanner evidence required** (action_required)\n\nDetected 1 security-sensitive predictive risk signal(s) without scanner evidence.\n\nMode: enforce\n\nFindings:\n- **Security-sensitive changes may ship without scanner evidence**: The PR touches billing, secrets, auth, webhooks, agent, or CI-sensitive surfaces without adding obvious security scanner, code scanning, or security-focused validation evidence. (2 security-sensitive paths changed; 0 security scanner or security-focused validation artifacts changed)\n\nTouched security-sensitive paths:\n- `lib/auth/issue-invite.test.ts`\n- `lib/auth/issue-invite.ts`\n\nExpected evidence:\n- Security scanner, code scanning, secret scanning, dependency/security review, or focused security regression output.\n- SARIF/code-scanning upload or equivalent pass/fail gate for the changed surface.\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5642800981,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-12T02:16:06Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / PR Risk Taxonomy:c126dad0addcad304dff1a15db672899f0628570 -->\n## ECC Tools / PR Risk Taxonomy\n\nCommit: `c126dad0addcad304dff1a15db672899f0628570`\n\n**PR taxonomy review recommended** (neutral)\n\nDetected 6 PR taxonomy bucket(s): Security Evidence, Harness Drift, Install Manifest Integrity, CI/CD Recommendation, Cost/Token Risk, Agent Config Review.\n\nScanned 55 changed file(s).\n\n\n\nRoadmap taxonomy buckets:\n\n\n\n### Security Evidence\nSecurity-sensitive changes should carry explicit scanner, code-scanning, or focused regression evidence.\n\nSignals:\n- Auth or permission changes may ship without security regression coverage\n- Security-sensitive changes may ship without scanner evidence\n- 2 security-sensitive path(s) changed\n\nPaths:\n- `lib/auth/issue-invite.test.ts`\n- `lib/auth/issue-invite.ts`\n\n### Harness Drift\nHarness-facing changes can drift across Claude Code, Codex, OpenCode, and shared adapter surfaces.\n\nSignals:\n- 1 harness-facing path(s) changed\n\nPaths:\n- `AGENTS.md`\n\n### Install Manifest Integrity\nInstall manifests, plugin metadata, and shipped skills should stay synchronized with user-facing setup guidance.\n\nSignals:\n- 2 install or manifest path(s) changed\n\nPaths:\n- `package.json`\n- `pnpm-lock.yaml`\n\n### CI/CD Recommendation\nCI, dependency, coverage, and contract signals should be routed into follow-up checks or verification work.\n\nSignals:\n- API contract changes may ship without integration coverage\n- Async job or webhook changes may ship without reliability coverage\n- User-facing UI changes may ship without browser coverage\n- 4 CI or workflow path(s) changed\n\nPaths:\n- `lib/auth/issue-invite.test.ts`\n- `lib/instalacao/ambiente.test.ts`\n- `package.json`\n- `pnpm-lock.yaml`\n- `app/actions/onboarding/sendOnboardingInvites.ts`\n- `app/actions/settings/smtp.ts`\n- `app/api/v1/team/invite/route.ts`\n- `app/app/settings/resend/_form.tsx`\n\n### Cost/Token Risk\nAI routing, usage, and token-budget changes should include budget or usage-limit evidence.\n\nSignals:\n- Cost or token-risk changes may ship without budget evidence\n- 0 cost/token path(s) changed\n\nPaths:\n- `.changes/smtp-completo.md`\n- `.env.example`\n- `.env.hostgator.example`\n\n### Agent Config Review\nAgent, command, skill, MCP, and local instruction changes should be reviewed as executable agent configuration.\n\nSignals:\n- 1 agent-config path(s) changed\n\nPaths:\n- `AGENTS.md`\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5642801052,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-12T02:16:07Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / Reference Set Readiness:c126dad0addcad304dff1a15db672899f0628570 -->\n## ECC Tools / Reference Set Readiness\n\nCommit: `c126dad0addcad304dff1a15db672899f0628570`\n\n**Reference set readiness gaps detected** (neutral)\n\nReference evidence present for 0/7 areas (0%) across 55 changed file(s).\n\nThis check is based on files changed in this PR. Repository-level readiness is still reported by `/ecc-tools analyze` comments and generated manifests.\n\n| Area | Status | Evidence / Next Step |\n| --- | --- | --- |\n| Deep analyzer corpus | Missing | Add analyzer fixture, golden, benchmark, or reference-set files that can catch analyzer regressions. |\n| RAG/evaluator comparison | Missing | Add retrieval or evaluator reference-set comparison fixtures with expected ranking behavior. |\n| PR salvage/review corpus | Missing | Add stale-PR, review-thread, reopen-flow, or salvage reference cases for queue cleanup automation. |\n| Discussion triage corpus | Missing | Add public discussion triage fixtures, golden cases, or reference sets for informational, answered, and no-response classifications. |\n| Harness compatibility | Missing | Add cross-harness, adapter-compliance, or harness-audit evidence for Claude, Codex, OpenCode, Zed, dmux, and agent surfaces. |\n| Security evidence | Missing | Attach security evidence such as SBOMs, SARIF, audit reports, or AgentShield evidence packs. |\n| CI failure-mode evidence | Missing | Add captured CI failure logs, dry-run fixtures, or troubleshooting docs for common workflow failure modes. |\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5642801181,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-12T02:16:09Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / Hosted Promotion Readiness:c126dad0addcad304dff1a15db672899f0628570 -->\n## ECC Tools / Hosted Promotion Readiness\n\nCommit: `c126dad0addcad304dff1a15db672899f0628570`\n\n**Hosted promotion readiness passed** (success)\n\nNo hosted promotion evidence gaps detected across 55 changed file(s); 0 corpus scenarios had matching evidence.\n\nThis check compares PR file changes against the evaluator/RAG promotion corpus in `src/analyzers/fixtures/evaluator-rag-corpus.ts`.\nHosted output scoring inspected 0 completed cached hosted job results.\n\nNo evaluator corpus scenarios matched this PR.\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5642801311,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-12T02:16:10Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / PR Config Audit:c126dad0addcad304dff1a15db672899f0628570 -->\n## ECC Tools / PR Config Audit\n\nCommit: `c126dad0addcad304dff1a15db672899f0628570`\n\n**No changed-config issues detected** (success)\n\nScanned 2 config file(s) present at this commit across 2 changed config path(s) and found no issues in the supported security rules.\n\nChanged config files:\n- AGENTS.md\n- CLAUDE.md\n\n\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5642801413,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-12T02:16:11Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / PR Harness Audit:c126dad0addcad304dff1a15db672899f0628570 -->\n## ECC Tools / PR Harness Audit\n\nCommit: `c126dad0addcad304dff1a15db672899f0628570`\n\n**No harness issues detected** (success)\n\nScanned 2 changed config file(s) and found no harness issues.\n\nChanged config files:\n- AGENTS.md\n- CLAUDE.md\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5647564681,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-12T17:37:44Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / Security Evidence:48183ec426201b5000c422634dc4eb392a1e9190 -->\n## ECC Tools / Security Evidence\n\nCommit: `48183ec426201b5000c422634dc4eb392a1e9190`\n\n**Security evidence gate passed** (success)\n\nNo security-sensitive scanner-evidence gap detected.\n\nMode: enforce\n\nScanned 81 changed file(s). No missing scanner-evidence signal was detected.\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5647564761,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-12T17:37:45Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / PR Risk Taxonomy:48183ec426201b5000c422634dc4eb392a1e9190 -->\n## ECC Tools / PR Risk Taxonomy\n\nCommit: `48183ec426201b5000c422634dc4eb392a1e9190`\n\n**PR taxonomy review recommended** (neutral)\n\nDetected 6 PR taxonomy bucket(s): Security Evidence, Harness Drift, Install Manifest Integrity, CI/CD Recommendation, Cost/Token Risk, Agent Config Review.\n\nScanned 81 changed file(s).\n\n\n\nRoadmap taxonomy buckets:\n\n\n\n### Security Evidence\nSecurity-sensitive changes should carry explicit scanner, code-scanning, or focused regression evidence.\n\nSignals:\n- Auth or permission changes may ship without security regression coverage\n- 8 security-sensitive path(s) changed\n\nPaths:\n- `app/actions/auth/signUp.test.ts`\n- `app/actions/auth/signUp.ts`\n- `app/auth/confirm/route.ts`\n- `components/auth/SignupForm.tsx`\n- `lib/auth/issue-invite.test.ts`\n- `lib/auth/issue-invite.ts`\n- `lib/auth/registration-requests.ts`\n- `lib/auth/schemas.ts`\n\n### Harness Drift\nHarness-facing changes can drift across Claude Code, Codex, OpenCode, and shared adapter surfaces.\n\nSignals:\n- 1 harness-facing path(s) changed\n\nPaths:\n- `AGENTS.md`\n\n### Install Manifest Integrity\nInstall manifests, plugin metadata, and shipped skills should stay synchronized with user-facing setup guidance.\n\nSignals:\n- 2 install or manifest path(s) changed\n\nPaths:\n- `package.json`\n- `pnpm-lock.yaml`\n\n### CI/CD Recommendation\nCI, dependency, coverage, and contract signals should be routed into follow-up checks or verification work.\n\nSignals:\n- API contract changes may ship without integration coverage\n- Async job or webhook changes may ship without reliability coverage\n- User-facing UI changes may ship without browser coverage\n- 7 CI or workflow path(s) changed\n\nPaths:\n- `app/actions/auth/signUp.test.ts`\n- `lib/auth/issue-invite.test.ts`\n- `lib/instalacao/ambiente.test.ts`\n- `package.json`\n- `pnpm-lock.yaml`\n- `tests/unit/agenda-google-config.test.ts`\n- `tests/unit/agenda-google-connect-route.test.ts`\n- `app/(public)/signup/page.tsx`\n\n### Cost/Token Risk\nAI routing, usage, and token-budget changes should include budget or usage-limit evidence.\n\nSignals:\n- Cost or token-risk changes may ship without budget evidence\n- 0 cost/token path(s) changed\n\nPaths:\n- `.changes/aprovacao-cadastros.md`\n- `.changes/smtp-completo.md`\n- `.env.example`\n\n### Agent Config Review\nAgent, command, skill, MCP, and local instruction changes should be reviewed as executable agent configuration.\n\nSignals:\n- 1 agent-config path(s) changed\n\nPaths:\n- `AGENTS.md`\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5647564829,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-12T17:37:46Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / Reference Set Readiness:48183ec426201b5000c422634dc4eb392a1e9190 -->\n## ECC Tools / Reference Set Readiness\n\nCommit: `48183ec426201b5000c422634dc4eb392a1e9190`\n\n**Reference set readiness gaps detected** (neutral)\n\nReference evidence present for 1/7 areas (14%) across 81 changed file(s).\n\nThis check is based on files changed in this PR. Repository-level readiness is still reported by `/ecc-tools analyze` comments and generated manifests.\n\n| Area | Status | Evidence / Next Step |\n| --- | --- | --- |\n| Deep analyzer corpus | Missing | Add analyzer fixture, golden, benchmark, or reference-set files that can catch analyzer regressions. |\n| RAG/evaluator comparison | Missing | Add retrieval or evaluator reference-set comparison fixtures with expected ranking behavior. |\n| PR salvage/review corpus | Missing | Add stale-PR, review-thread, reopen-flow, or salvage reference cases for queue cleanup automation. |\n| Discussion triage corpus | Missing | Add public discussion triage fixtures, golden cases, or reference sets for informational, answered, and no-response classifications. |\n| Harness compatibility | Missing | Add cross-harness, adapter-compliance, or harness-audit evidence for Claude, Codex, OpenCode, Zed, dmux, and agent surfaces. |\n| Security evidence | Present | `lib/audit/actions.ts` |\n| CI failure-mode evidence | Missing | Add captured CI failure logs, dry-run fixtures, or troubleshooting docs for common workflow failure modes. |\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5647564934,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-12T17:37:47Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / Hosted Promotion Readiness:48183ec426201b5000c422634dc4eb392a1e9190 -->\n## ECC Tools / Hosted Promotion Readiness\n\nCommit: `48183ec426201b5000c422634dc4eb392a1e9190`\n\n**Hosted promotion readiness passed** (success)\n\nNo hosted promotion evidence gaps detected across 81 changed file(s); 0 corpus scenarios had matching evidence.\n\nThis check compares PR file changes against the evaluator/RAG promotion corpus in `src/analyzers/fixtures/evaluator-rag-corpus.ts`.\nHosted output scoring inspected 0 completed cached hosted job results.\n\nNo evaluator corpus scenarios matched this PR.\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5647565050,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-12T17:37:49Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / PR Config Audit:48183ec426201b5000c422634dc4eb392a1e9190 -->\n## ECC Tools / PR Config Audit\n\nCommit: `48183ec426201b5000c422634dc4eb392a1e9190`\n\n**No changed-config issues detected** (success)\n\nScanned 2 config file(s) present at this commit across 2 changed config path(s) and found no issues in the supported security rules.\n\nChanged config files:\n- AGENTS.md\n- CLAUDE.md\n\n\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5647565202,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-12T17:37:50Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / PR Harness Audit:48183ec426201b5000c422634dc4eb392a1e9190 -->\n## ECC Tools / PR Harness Audit\n\nCommit: `48183ec426201b5000c422634dc4eb392a1e9190`\n\n**No harness issues detected** (success)\n\nScanned 2 changed config file(s) and found no harness issues.\n\nChanged config files:\n- AGENTS.md\n- CLAUDE.md\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5647997181,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-12T18:56:26Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / Security Evidence:86fc3a140a5bfa3d822bfdeb1107971a03adae0e -->\n## ECC Tools / Security Evidence\n\nCommit: `86fc3a140a5bfa3d822bfdeb1107971a03adae0e`\n\n**Security evidence gate passed** (success)\n\nNo security-sensitive scanner-evidence gap detected.\n\nMode: enforce\n\nScanned 81 changed file(s). No missing scanner-evidence signal was detected.\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5647997283,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-12T18:56:27Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / PR Risk Taxonomy:86fc3a140a5bfa3d822bfdeb1107971a03adae0e -->\n## ECC Tools / PR Risk Taxonomy\n\nCommit: `86fc3a140a5bfa3d822bfdeb1107971a03adae0e`\n\n**PR taxonomy review recommended** (neutral)\n\nDetected 6 PR taxonomy bucket(s): Security Evidence, Harness Drift, Install Manifest Integrity, CI/CD Recommendation, Cost/Token Risk, Agent Config Review.\n\nScanned 81 changed file(s).\n\n\n\nRoadmap taxonomy buckets:\n\n\n\n### Security Evidence\nSecurity-sensitive changes should carry explicit scanner, code-scanning, or focused regression evidence.\n\nSignals:\n- Auth or permission changes may ship without security regression coverage\n- 8 security-sensitive path(s) changed\n\nPaths:\n- `app/actions/auth/signUp.test.ts`\n- `app/actions/auth/signUp.ts`\n- `app/auth/confirm/route.ts`\n- `components/auth/SignupForm.tsx`\n- `lib/auth/issue-invite.test.ts`\n- `lib/auth/issue-invite.ts`\n- `lib/auth/registration-requests.ts`\n- `lib/auth/schemas.ts`\n\n### Harness Drift\nHarness-facing changes can drift across Claude Code, Codex, OpenCode, and shared adapter surfaces.\n\nSignals:\n- 1 harness-facing path(s) changed\n\nPaths:\n- `AGENTS.md`\n\n### Install Manifest Integrity\nInstall manifests, plugin metadata, and shipped skills should stay synchronized with user-facing setup guidance.\n\nSignals:\n- 2 install or manifest path(s) changed\n\nPaths:\n- `package.json`\n- `pnpm-lock.yaml`\n\n### CI/CD Recommendation\nCI, dependency, coverage, and contract signals should be routed into follow-up checks or verification work.\n\nSignals:\n- API contract changes may ship without integration coverage\n- Async job or webhook changes may ship without reliability coverage\n- User-facing UI changes may ship without browser coverage\n- 7 CI or workflow path(s) changed\n\nPaths:\n- `app/actions/auth/signUp.test.ts`\n- `lib/auth/issue-invite.test.ts`\n- `lib/instalacao/ambiente.test.ts`\n- `package.json`\n- `pnpm-lock.yaml`\n- `tests/unit/agenda-google-config.test.ts`\n- `tests/unit/agenda-google-connect-route.test.ts`\n- `app/(public)/signup/page.tsx`\n\n### Cost/Token Risk\nAI routing, usage, and token-budget changes should include budget or usage-limit evidence.\n\nSignals:\n- Cost or token-risk changes may ship without budget evidence\n- 0 cost/token path(s) changed\n\nPaths:\n- `.changes/aprovacao-cadastros.md`\n- `.changes/smtp-completo.md`\n- `.env.example`\n\n### Agent Config Review\nAgent, command, skill, MCP, and local instruction changes should be reviewed as executable agent configuration.\n\nSignals:\n- 1 agent-config path(s) changed\n\nPaths:\n- `AGENTS.md`\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5647997378,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-12T18:56:28Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / Reference Set Readiness:86fc3a140a5bfa3d822bfdeb1107971a03adae0e -->\n## ECC Tools / Reference Set Readiness\n\nCommit: `86fc3a140a5bfa3d822bfdeb1107971a03adae0e`\n\n**Reference set readiness gaps detected** (neutral)\n\nReference evidence present for 1/7 areas (14%) across 81 changed file(s).\n\nThis check is based on files changed in this PR. Repository-level readiness is still reported by `/ecc-tools analyze` comments and generated manifests.\n\n| Area | Status | Evidence / Next Step |\n| --- | --- | --- |\n| Deep analyzer corpus | Missing | Add analyzer fixture, golden, benchmark, or reference-set files that can catch analyzer regressions. |\n| RAG/evaluator comparison | Missing | Add retrieval or evaluator reference-set comparison fixtures with expected ranking behavior. |\n| PR salvage/review corpus | Missing | Add stale-PR, review-thread, reopen-flow, or salvage reference cases for queue cleanup automation. |\n| Discussion triage corpus | Missing | Add public discussion triage fixtures, golden cases, or reference sets for informational, answered, and no-response classifications. |\n| Harness compatibility | Missing | Add cross-harness, adapter-compliance, or harness-audit evidence for Claude, Codex, OpenCode, Zed, dmux, and agent surfaces. |\n| Security evidence | Present | `lib/audit/actions.ts` |\n| CI failure-mode evidence | Missing | Add captured CI failure logs, dry-run fixtures, or troubleshooting docs for common workflow failure modes. |\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5647997483,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-12T18:56:30Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / Hosted Promotion Readiness:86fc3a140a5bfa3d822bfdeb1107971a03adae0e -->\n## ECC Tools / Hosted Promotion Readiness\n\nCommit: `86fc3a140a5bfa3d822bfdeb1107971a03adae0e`\n\n**Hosted promotion readiness passed** (success)\n\nNo hosted promotion evidence gaps detected across 81 changed file(s); 0 corpus scenarios had matching evidence.\n\nThis check compares PR file changes against the evaluator/RAG promotion corpus in `src/analyzers/fixtures/evaluator-rag-corpus.ts`.\nHosted output scoring inspected 0 completed cached hosted job results.\n\nNo evaluator corpus scenarios matched this PR.\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5647997653,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-12T18:56:32Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / PR Config Audit:86fc3a140a5bfa3d822bfdeb1107971a03adae0e -->\n## ECC Tools / PR Config Audit\n\nCommit: `86fc3a140a5bfa3d822bfdeb1107971a03adae0e`\n\n**No changed-config issues detected** (success)\n\nScanned 2 config file(s) present at this commit across 2 changed config path(s) and found no issues in the supported security rules.\n\nChanged config files:\n- AGENTS.md\n- CLAUDE.md\n\n\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5647997771,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-12T18:56:33Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / PR Harness Audit:86fc3a140a5bfa3d822bfdeb1107971a03adae0e -->\n## ECC Tools / PR Harness Audit\n\nCommit: `86fc3a140a5bfa3d822bfdeb1107971a03adae0e`\n\n**No harness issues detected** (success)\n\nScanned 2 changed config file(s) and found no harness issues.\n\nChanged config files:\n- AGENTS.md\n- CLAUDE.md\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5703725433,
   "autor": "melgarafael",
   "quando": "2026-09-16T20:01:39Z",
   "texto": "<!-- triagem-de-pr:v1:pass=10 -->\n@betoarts — medido de ponta a ponta, e você merece a resposta completa: este PR estava rotulado \"aguardando decisão\" desde 12/09 **sem nunca ter recebido um veredito**, e isso é falha nossa. Aqui está.\n\n**O que ele faz, na minha leitura:** troca a Resend por SMTP configurável (tabela `platform_smtp_settings` + tela), acrescenta auto-cadastro com aprovação (`registration_requests`), limita o nome de sessão do WAHA e traz uma stack local com Postgres para desenvolvimento.\n\n**O que está bom:** a ideia central do SMTP é forte — hoje o instalador pede \"chave da Resend\", o que obriga quem instala a criar conta num SaaS e verificar domínio; SMTP aceita o e-mail que a pessoa já tem na hospedagem. Isso serve a **qualquer** instalação, que é o critério desta casa.\n\n**Dois bloqueadores, e o primeiro é de exposição de dados:**\n\n**1. A tela pública de cadastro lista todas as empresas da instalação.** Em `app/(public)/signup/page.tsx` o PR chama `createAdminClient()` (service role) e faz `from(\"organizations\").select(\"id, display_name\")` — o resultado vai para o HTML de uma rota **sem autenticação**. Qualquer visitante anônimo de `/signup` recebe a carteira de clientes daquela instalação; numa instalação de revendedor, isso é a lista de clientes dele, de graça. Não é mecânico de consertar: a escolha \"entrar numa empresa existente\" precisa de outro desenho — código de convite da organização, domínio do e-mail, ou uma chave `aceita_pedidos_de_entrada` por empresa.\n\n**2. Todo auto-cadastro passa a ter o e-mail confirmado pelo servidor, sem prova de posse.** No ramo sem convite, o cadastro marca o e-mail como confirmado — então alguém se cadastra com o endereço de outra pessoa e o sistema trata como verificado.\n\n**Mais onze achados menores**, do `pnpm test:unit` quebrando (um teste da árvore importa símbolos que o PR deixou de exportar) a uma migration que remove uma tabela que nunca existiu, e ao `lib/email/resend.ts` virando um shim que existe só para satisfazer um portão. Posso listá-los um a um se você for retomar — não os despejo aqui para não afogar o que decide.\n\n**E há três perguntas que não são suas nem minhas: são do dono do produto.** Escrevi um documento de decisão para ele, com a minha recomendação:\n1. trocar Resend por SMTP é decisão de produto (a troca **seca** o caminho antigo e toda instalação existente sente);\n2. auto-cadastro com aprovação muda o produto de **todas** as instalações — recomendei entrar como chave desligada por padrão;\n3. a tela pública não pode listar empresas — isso não é decisão, é o bloqueador 1.\n\n**NÃO MEDIDO:** não executei o SMTP contra um servidor real, nem a stack local do PR; o CI do seu head não roda porque o PR conflita com a `main` (é por isso que PR conflitante fica sem check — não é você).\n\n**Enquanto a decisão não vem, o PR fica aberto** e eu não o deixo apodrecer. Se você quiser adiantar, o caminho mais curto é tirar a listagem pública de empresas e a confirmação automática de e-mail: eles bloqueiam independentemente de qualquer resposta do dono.",
   "onde": "conversa"
  },
  {
   "id": 5704207331,
   "autor": "melgarafael",
   "quando": "2026-09-16T20:41:42Z",
   "texto": "<!-- triagem-de-pr:v1:pass=decisao -->\n@betoarts — **a primeira resposta do dono do produto chegou, e ela é boa para o seu PR: opção (a).**\n\n> **O SMTP entra, e a Resend continua funcionando.** Quem já instalou com a Resend não mexe em nada; quem instala a partir de agora pode escolher o e-mail que já tem na hospedagem.\n\nO que isso muda no PR, concretamente:\n\n1. **O caminho da Resend não seca.** Hoje o PR remove a configuração dela (e a migration `retira_configuracao_resend` derruba até uma tabela que nunca existiu). Com a (a), os dois caminhos convivem: SMTP quando configurado, Resend quando é o que a instalação tem.\n2. **Com isso o fragmento deixa de ser `exige_acao`** — ninguém que atualiza precisa editar nada —, e a versão deixa de ser major. Vira capacidade nova.\n3. **`lib/email/resend.ts` volta a ser o cliente de verdade**, e não um shim que existe só para satisfazer um portão.\n\nA segunda pergunta ao dono (auto-cadastro com aprovação: chave desligada por padrão, ligada para todos, ou fora) **ainda não foi respondida**, e continua separada. E os dois bloqueadores do parecer anterior seguem valendo independentemente de qualquer resposta: a tela pública não pode listar as empresas da instalação, e o cadastro não pode confirmar e-mail sem prova de posse.\n\n**Uma sugestão de caminho, se fizer sentido para você:** o SMTP com a Resend convivendo é a parte que já está decidida e serve a toda instalação — ela pode sair sozinha, num PR menor, enquanto o auto-cadastro espera. Se quiser, eu monto esse recorte a partir da sua branch, com os seus commits creditados. As migrations precisam ser renumeradas para `0265`+ no padrão do repo, e isso é trabalho nosso, não seu.",
   "onde": "conversa"
  },
  {
   "id": 5704459740,
   "autor": "betoarts",
   "quando": "2026-09-16T21:02:20Z",
   "texto": "Sim — mas depende do ponto de vista:\n\n- Como está agora: não afeta o código de produção, porque o PR está aberto e não mergeado.\n- Se esse PR for mergeado em main: sim, ele terá impacto real no app.\n\nO que ele muda:\n- fluxo de cadastro/registro:\n  - agora cria aprovação de criação de empresa ou entrada em empresa existente\n  - adiciona tabela registration_requests\n  - muda redirecionamentos e páginas de “aguardando aprovação”\n- migração de e-mail:\n  - troca Resend por SMTP\n  - adiciona SMTP_HOST, SMTP_PORT, SMTP_SECURITY, etc.\n  - altera comportamento de convites e LGPD\n- ambiente/local:\n  - instala stack local para Ubuntu/VM\n  - novos scripts docker-compose.local.yml e scripts/local-*\n- banco:\n  - novas migrations e tabela platform_smtp_settings\n  - registra a necessidade de rodar migrations / baseline\n- UX e segurança:\n  - mudanças no OAuth do Google (callback local/localhost)\n  - impacto em redirects e ambiente local\n\nEntão, em resumo:\n- Não afeta ninguém “agora” enquanto estiver só no PR.\n- Se entrar em main, afetará autenticação, cadastro, e-mail e setup de ambiente. É uma mudança substancial, não só documentação.\n\nObservação importante: o PR está marcado como mergeable: false / dirty, ou seja, há conflitos ou estado de merge quebrado. Isso sugere que ainda não está pronto para entrar.\n\nSe você quiser, eu também posso te dizer:\n- “quais partes são breaking changes”\n- “quais partes são só infra/local”\n- ou “se esse PR vai quebrar meu fluxo atual de login/cadastro” em termos mais específicos para o seu ambiente.\n\nFoi somente uma sugestão o que pudermos fazer o - [ ] merge teria que passar por um análise ",
   "onde": "conversa"
  },
  {
   "id": 5706024332,
   "autor": "melgarafael",
   "quando": "2026-09-16T23:27:12Z",
   "texto": "<!-- triagem-de-pr:v1:pass=10:decisao-do-dono -->\n\n@betoarts — **a segunda resposta do dono chegou. É a (d): o auto-cadastro entra, como chave da instalação, desligada por padrão.**\n\nAntes do conteúdo, um reconhecimento que você merece: das últimas duas respostas suas, a que importa é esta — você mesmo apontou que o PR está `dirty` e se ofereceu para separar o que é infra do que é breaking. É a leitura certa, e é a que vamos seguir.\n\n**O que a (d) muda no seu PR, concretamente:**\n\n**1. O auto-cadastro precisa de uma chave, e hoje ele não tem nenhuma.** No head atual (`86fc3a1`) o fluxo é incondicional: `app/actions/auth/signUp.ts` e `lib/auth/registration-requests.ts` não consultam configuração nenhuma. Com a (d) ele só funciona quando a instalação ligar — e nasce desligado.\n\n**2. E o lugar dessa chave já existe — isso é boa notícia para você, porque é menos trabalho, não mais.** Depois que você abriu o PR, a `main` ganhou a tabela `public.platform_settings` (migration `0253`) e a tela `/admin/cadastro`, que decide **exatamente este assunto**: quem pode criar conta nesta instalação. Hoje ela tem dois valores, `aberto` e `so_convite`. Você não precisa criar tabela nem tela: precisa entrar na que já está lá. A forma exata é conversa nossa com você — um terceiro valor no mesmo campo é a hipótese mais simples, mas ela torna impossível ter `aberto` e auto-cadastro ao mesmo tempo, e isso é consequência de produto que ninguém decidiu ainda. O que está decidido é o efeito: nasce desligado e se liga pela tela.\n\nUma medição para você olhar ao rebasear: no head do seu PR não há nenhuma consulta à política nova — `grep -cE 'modoDeCadastro|platform_settings|signup_mode'` em `app/actions/auth/signUp.ts` devolve **0** —, e ela nasceu depois da sua branch (o seu merge-base é anterior à migration `0253`). A guarda que existe hoje na `main` é `signUp.ts:125`, e ela precisa continuar valendo depois do merge. **Não medi o resultado do merge**, porque o PR conflita com a `main` hoje.\n\n**3. As suas telas estão certas na ideia e no lugar errado.** Você não deixou a configuração no `.env` — construiu tela para ela, e isso é a decisão certa. Só que `app/app/settings/resend` e `app/app/settings/cadastros` estão sob `/app/**`, que é a área de uma **empresa**, e o assunto das duas é a **instalação**. Tanto que você precisou inventar `platformOnly: true` no catálogo do tenant para escondê-las (`lib/navigation/catalogo.ts:44,585,595` e `lib/navigation/interface.ts:43,47`) — sinal de que elas pedem outra raiz. Essa raiz é `/admin`, que tem navegação própria e já abriga `/admin/marca`, `/admin/google` e `/admin/meta`. (As duas travam em `is_platform_admin`, então **não há furo de permissão** — é colocação, não segurança.)\n\nA aprovação de **entrada numa empresa existente** é a exceção: essa é mesmo do tenant, e você já a pôs no lugar certo, em `app/app/team/page.tsx`, atrás de `isAdmin`.\n\n**4. Os dois bloqueadores continuam de pé — conferi no head `86fc3a1`, não estou repetindo de memória:**\n\n- `app/(public)/signup/page.tsx:42-45` ainda lista as empresas da instalação para visitante anônimo. Vi que você acrescentou `.eq(\"status\",\"active\")`, e agradeço o cuidado — mas ele filtra as inativas, e é a carteira **ativa** que vaza.\n- `app/actions/auth/signUp.ts:167` ainda marca `email_confirm: true` no cadastro sem convite.\n\n**5. E um terceiro, da mesma família, que eu não tinha publicado — é justo que você saiba antes de retomar:** o PR também passa a marcar `email_confirm: true` no ramo **do convite** (`signUp.ts:212-213`). Na `main` isso não existe em lugar nenhum (`grep -c email_confirm` na `main` devolve `0`). Seu comentário argumenta que o convite é uma credencial HMAC e por isso dispensa o segundo e-mail — o argumento tem pé, e não estou dizendo que está errado. Estou dizendo que é uma proteção existente sendo afrouxada, e isso precisa de decisão própria, não de carona no PR do SMTP.\n\n**O caminho que eu recomendo, e que casa com o que você mesmo propôs:**\n\n- **Agora:** o SMTP sai sozinho, num PR menor, com a Resend convivendo (decisão 1 = (a), já respondida). É a parte que serve a toda instalação e não depende de mais nada. Se quiser, eu monto o recorte a partir da sua branch com os seus commits creditados — a renumeração das migrations para o padrão `<timestamp>_<NNNN>_<slug>` é trabalho nosso.\n- **Depois:** o auto-cadastro volta como um PR próprio, ligado a `platform_settings` e à tela `/admin/cadastro`, sem a listagem pública de empresas e sem confirmação automática de e-mail.\n\n**NÃO MEDIDO:** continuo sem ter executado o SMTP contra um servidor real nem a stack local do seu PR; e o CI do seu head segue sem rodar porque o PR conflita com a `main`.\n\n",
   "onde": "conversa"
  },
  {
   "id": 5714704566,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-17T12:55:53Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / Security Evidence:22b6547dc82cbe49c5fca95675dc909c7f9350f3 -->\n## ECC Tools / Security Evidence\n\nCommit: `22b6547dc82cbe49c5fca95675dc909c7f9350f3`\n\n**Security evidence gate passed** (success)\n\nNo security-sensitive scanner-evidence gap detected.\n\nMode: enforce\n\nScanned 110 changed file(s). No missing scanner-evidence signal was detected.\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5714704749,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-17T12:55:54Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / PR Risk Taxonomy:22b6547dc82cbe49c5fca95675dc909c7f9350f3 -->\n## ECC Tools / PR Risk Taxonomy\n\nCommit: `22b6547dc82cbe49c5fca95675dc909c7f9350f3`\n\n**PR taxonomy review recommended** (neutral)\n\nDetected 6 PR taxonomy bucket(s): Security Evidence, Harness Drift, Install Manifest Integrity, CI/CD Recommendation, Cost/Token Risk, Agent Config Review.\n\nScanned 110 changed file(s).\n\n\n\nRoadmap taxonomy buckets:\n\n\n\n### Security Evidence\nSecurity-sensitive changes should carry explicit scanner, code-scanning, or focused regression evidence.\n\nSignals:\n- Auth or permission changes may ship without security regression coverage\n- 8 security-sensitive path(s) changed\n\nPaths:\n- `app/actions/auth/signUp.test.ts`\n- `app/actions/auth/signUp.ts`\n- `app/auth/confirm/route.ts`\n- `components/auth/SignupForm.tsx`\n- `lib/auth/issue-invite.test.ts`\n- `lib/auth/issue-invite.ts`\n- `lib/auth/registration-requests.ts`\n- `lib/auth/schemas.ts`\n\n### Harness Drift\nHarness-facing changes can drift across Claude Code, Codex, OpenCode, and shared adapter surfaces.\n\nSignals:\n- 1 harness-facing path(s) changed\n\nPaths:\n- `AGENTS.md`\n\n### Install Manifest Integrity\nInstall manifests, plugin metadata, and shipped skills should stay synchronized with user-facing setup guidance.\n\nSignals:\n- 2 install or manifest path(s) changed\n\nPaths:\n- `package.json`\n- `pnpm-lock.yaml`\n\n### CI/CD Recommendation\nCI, dependency, coverage, and contract signals should be routed into follow-up checks or verification work.\n\nSignals:\n- Async job or webhook changes may ship without reliability coverage\n- 10 CI or workflow path(s) changed\n\nPaths:\n- `app/actions/auth/signUp.test.ts`\n- `lib/api/client.test.ts`\n- `lib/auth/issue-invite.test.ts`\n- `lib/instalacao/ambiente.test.ts`\n- `package.json`\n- `pnpm-lock.yaml`\n- `tests/e2e/marca-logo.spec.ts`\n- `tests/unit/agenda-google-config.test.ts`\n\n### Cost/Token Risk\nAI routing, usage, and token-budget changes should include budget or usage-limit evidence.\n\nSignals:\n- Cost or token-risk changes may ship without budget evidence\n- 7 cost/token path(s) changed\n\nPaths:\n- `app/api/v1/ai/credentials/[id]/revalidate/route.ts`\n- `app/app/ai/agents/[id]/_components/TestPanel.tsx`\n- `app/app/ai/agents/_components/AgentRowMenu.tsx`\n- `app/app/ai/credentials/_components/CredentialCard.tsx`\n- `app/app/ai/credentials/_components/CredentialsList.tsx`\n- `app/app/ai/credentials/page.tsx`\n- `lib/ai/credenciais/guardar.ts`\n\n### Agent Config Review\nAgent, command, skill, MCP, and local instruction changes should be reviewed as executable agent configuration.\n\nSignals:\n- 1 agent-config path(s) changed\n\nPaths:\n- `AGENTS.md`\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5714704962,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-17T12:55:55Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / Reference Set Readiness:22b6547dc82cbe49c5fca95675dc909c7f9350f3 -->\n## ECC Tools / Reference Set Readiness\n\nCommit: `22b6547dc82cbe49c5fca95675dc909c7f9350f3`\n\n**Reference set readiness gaps detected** (neutral)\n\nReference evidence present for 1/7 areas (14%) across 110 changed file(s).\n\nThis check is based on files changed in this PR. Repository-level readiness is still reported by `/ecc-tools analyze` comments and generated manifests.\n\n| Area | Status | Evidence / Next Step |\n| --- | --- | --- |\n| Deep analyzer corpus | Missing | Add analyzer fixture, golden, benchmark, or reference-set files that can catch analyzer regressions. |\n| RAG/evaluator comparison | Missing | Add retrieval or evaluator reference-set comparison fixtures with expected ranking behavior. |\n| PR salvage/review corpus | Missing | Add stale-PR, review-thread, reopen-flow, or salvage reference cases for queue cleanup automation. |\n| Discussion triage corpus | Missing | Add public discussion triage fixtures, golden cases, or reference sets for informational, answered, and no-response classifications. |\n| Harness compatibility | Missing | Add cross-harness, adapter-compliance, or harness-audit evidence for Claude, Codex, OpenCode, Zed, dmux, and agent surfaces. |\n| Security evidence | Present | `lib/audit/actions.ts` |\n| CI failure-mode evidence | Missing | Add captured CI failure logs, dry-run fixtures, or troubleshooting docs for common workflow failure modes. |\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5714705303,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-17T12:55:57Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / Hosted Promotion Readiness:22b6547dc82cbe49c5fca95675dc909c7f9350f3 -->\n## ECC Tools / Hosted Promotion Readiness\n\nCommit: `22b6547dc82cbe49c5fca95675dc909c7f9350f3`\n\n**Hosted promotion readiness passed** (success)\n\nNo hosted promotion evidence gaps detected across 110 changed file(s); 0 corpus scenarios had matching evidence.\n\nThis check compares PR file changes against the evaluator/RAG promotion corpus in `src/analyzers/fixtures/evaluator-rag-corpus.ts`.\nHosted output scoring inspected 0 completed cached hosted job results.\n\nNo evaluator corpus scenarios matched this PR.\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5714705763,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-17T12:55:59Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / PR Config Audit:22b6547dc82cbe49c5fca95675dc909c7f9350f3 -->\n## ECC Tools / PR Config Audit\n\nCommit: `22b6547dc82cbe49c5fca95675dc909c7f9350f3`\n\n**No changed-config issues detected** (success)\n\nScanned 2 config file(s) present at this commit across 2 changed config path(s) and found no issues in the supported security rules.\n\nChanged config files:\n- AGENTS.md\n- CLAUDE.md\n\n\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5714706134,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-17T12:56:01Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / PR Harness Audit:22b6547dc82cbe49c5fca95675dc909c7f9350f3 -->\n## ECC Tools / PR Harness Audit\n\nCommit: `22b6547dc82cbe49c5fca95675dc909c7f9350f3`\n\n**No harness issues detected** (success)\n\nScanned 2 changed config file(s) and found no harness issues.\n\nChanged config files:\n- AGENTS.md\n- CLAUDE.md\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5715446342,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-17T13:48:15Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / Security Evidence:c3c99696b6ff68a886faadad5a786f76002b77c6 -->\n## ECC Tools / Security Evidence\n\nCommit: `c3c99696b6ff68a886faadad5a786f76002b77c6`\n\n**Security evidence gate passed** (success)\n\nNo security-sensitive scanner-evidence gap detected.\n\nMode: enforce\n\nScanned 113 changed file(s). No missing scanner-evidence signal was detected.\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5715446697,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-17T13:48:16Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / PR Risk Taxonomy:c3c99696b6ff68a886faadad5a786f76002b77c6 -->\n## ECC Tools / PR Risk Taxonomy\n\nCommit: `c3c99696b6ff68a886faadad5a786f76002b77c6`\n\n**PR taxonomy review recommended** (neutral)\n\nDetected 6 PR taxonomy bucket(s): Security Evidence, Harness Drift, Install Manifest Integrity, CI/CD Recommendation, Cost/Token Risk, Agent Config Review.\n\nScanned 113 changed file(s).\n\n\n\nRoadmap taxonomy buckets:\n\n\n\n### Security Evidence\nSecurity-sensitive changes should carry explicit scanner, code-scanning, or focused regression evidence.\n\nSignals:\n- Auth or permission changes may ship without security regression coverage\n- 8 security-sensitive path(s) changed\n\nPaths:\n- `app/actions/auth/signUp.test.ts`\n- `app/actions/auth/signUp.ts`\n- `app/auth/confirm/route.ts`\n- `components/auth/SignupForm.tsx`\n- `lib/auth/issue-invite.test.ts`\n- `lib/auth/issue-invite.ts`\n- `lib/auth/registration-requests.ts`\n- `lib/auth/schemas.ts`\n\n### Harness Drift\nHarness-facing changes can drift across Claude Code, Codex, OpenCode, and shared adapter surfaces.\n\nSignals:\n- 1 harness-facing path(s) changed\n\nPaths:\n- `AGENTS.md`\n\n### Install Manifest Integrity\nInstall manifests, plugin metadata, and shipped skills should stay synchronized with user-facing setup guidance.\n\nSignals:\n- 2 install or manifest path(s) changed\n\nPaths:\n- `package.json`\n- `pnpm-lock.yaml`\n\n### CI/CD Recommendation\nCI, dependency, coverage, and contract signals should be routed into follow-up checks or verification work.\n\nSignals:\n- Async job or webhook changes may ship without reliability coverage\n- 10 CI or workflow path(s) changed\n\nPaths:\n- `app/actions/auth/signUp.test.ts`\n- `lib/api/client.test.ts`\n- `lib/auth/issue-invite.test.ts`\n- `lib/instalacao/ambiente.test.ts`\n- `package.json`\n- `pnpm-lock.yaml`\n- `tests/e2e/marca-logo.spec.ts`\n- `tests/unit/agenda-google-config.test.ts`\n\n### Cost/Token Risk\nAI routing, usage, and token-budget changes should include budget or usage-limit evidence.\n\nSignals:\n- Cost or token-risk changes may ship without budget evidence\n- 7 cost/token path(s) changed\n\nPaths:\n- `app/api/v1/ai/credentials/[id]/revalidate/route.ts`\n- `app/app/ai/agents/[id]/_components/TestPanel.tsx`\n- `app/app/ai/agents/_components/AgentRowMenu.tsx`\n- `app/app/ai/credentials/_components/CredentialCard.tsx`\n- `app/app/ai/credentials/_components/CredentialsList.tsx`\n- `app/app/ai/credentials/page.tsx`\n- `lib/ai/credenciais/guardar.ts`\n\n### Agent Config Review\nAgent, command, skill, MCP, and local instruction changes should be reviewed as executable agent configuration.\n\nSignals:\n- 1 agent-config path(s) changed\n\nPaths:\n- `AGENTS.md`\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5715447106,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-17T13:48:18Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / Reference Set Readiness:c3c99696b6ff68a886faadad5a786f76002b77c6 -->\n## ECC Tools / Reference Set Readiness\n\nCommit: `c3c99696b6ff68a886faadad5a786f76002b77c6`\n\n**Reference set readiness gaps detected** (neutral)\n\nReference evidence present for 1/7 areas (14%) across 113 changed file(s).\n\nThis check is based on files changed in this PR. Repository-level readiness is still reported by `/ecc-tools analyze` comments and generated manifests.\n\n| Area | Status | Evidence / Next Step |\n| --- | --- | --- |\n| Deep analyzer corpus | Missing | Add analyzer fixture, golden, benchmark, or reference-set files that can catch analyzer regressions. |\n| RAG/evaluator comparison | Missing | Add retrieval or evaluator reference-set comparison fixtures with expected ranking behavior. |\n| PR salvage/review corpus | Missing | Add stale-PR, review-thread, reopen-flow, or salvage reference cases for queue cleanup automation. |\n| Discussion triage corpus | Missing | Add public discussion triage fixtures, golden cases, or reference sets for informational, answered, and no-response classifications. |\n| Harness compatibility | Missing | Add cross-harness, adapter-compliance, or harness-audit evidence for Claude, Codex, OpenCode, Zed, dmux, and agent surfaces. |\n| Security evidence | Present | `lib/audit/actions.ts` |\n| CI failure-mode evidence | Missing | Add captured CI failure logs, dry-run fixtures, or troubleshooting docs for common workflow failure modes. |\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5715447604,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-17T13:48:19Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / Hosted Promotion Readiness:c3c99696b6ff68a886faadad5a786f76002b77c6 -->\n## ECC Tools / Hosted Promotion Readiness\n\nCommit: `c3c99696b6ff68a886faadad5a786f76002b77c6`\n\n**Hosted promotion readiness passed** (success)\n\nNo hosted promotion evidence gaps detected across 113 changed file(s); 0 corpus scenarios had matching evidence.\n\nThis check compares PR file changes against the evaluator/RAG promotion corpus in `src/analyzers/fixtures/evaluator-rag-corpus.ts`.\nHosted output scoring inspected 0 completed cached hosted job results.\n\nNo evaluator corpus scenarios matched this PR.\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5715448082,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-17T13:48:21Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / PR Config Audit:c3c99696b6ff68a886faadad5a786f76002b77c6 -->\n## ECC Tools / PR Config Audit\n\nCommit: `c3c99696b6ff68a886faadad5a786f76002b77c6`\n\n**No changed-config issues detected** (success)\n\nScanned 2 config file(s) present at this commit across 2 changed config path(s) and found no issues in the supported security rules.\n\nChanged config files:\n- AGENTS.md\n- CLAUDE.md\n\n\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5715448510,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-17T13:48:23Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / PR Harness Audit:c3c99696b6ff68a886faadad5a786f76002b77c6 -->\n## ECC Tools / PR Harness Audit\n\nCommit: `c3c99696b6ff68a886faadad5a786f76002b77c6`\n\n**No harness issues detected** (success)\n\nScanned 2 changed config file(s) and found no harness issues.\n\nChanged config files:\n- AGENTS.md\n- CLAUDE.md\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5715768586,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-17T14:09:55Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / Security Evidence:70bf61ce73d5714fa19c1c7ce7a2700181a9b876 -->\n## ECC Tools / Security Evidence\n\nCommit: `70bf61ce73d5714fa19c1c7ce7a2700181a9b876`\n\n**Security evidence gate passed** (success)\n\nNo security-sensitive scanner-evidence gap detected.\n\nMode: enforce\n\nScanned 113 changed file(s). No missing scanner-evidence signal was detected.\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5715768909,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-17T14:09:56Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / PR Risk Taxonomy:70bf61ce73d5714fa19c1c7ce7a2700181a9b876 -->\n## ECC Tools / PR Risk Taxonomy\n\nCommit: `70bf61ce73d5714fa19c1c7ce7a2700181a9b876`\n\n**PR taxonomy review recommended** (neutral)\n\nDetected 6 PR taxonomy bucket(s): Security Evidence, Harness Drift, Install Manifest Integrity, CI/CD Recommendation, Cost/Token Risk, Agent Config Review.\n\nScanned 113 changed file(s).\n\n\n\nRoadmap taxonomy buckets:\n\n\n\n### Security Evidence\nSecurity-sensitive changes should carry explicit scanner, code-scanning, or focused regression evidence.\n\nSignals:\n- Auth or permission changes may ship without security regression coverage\n- 8 security-sensitive path(s) changed\n\nPaths:\n- `app/actions/auth/signUp.test.ts`\n- `app/actions/auth/signUp.ts`\n- `app/auth/confirm/route.ts`\n- `components/auth/SignupForm.tsx`\n- `lib/auth/issue-invite.test.ts`\n- `lib/auth/issue-invite.ts`\n- `lib/auth/registration-requests.ts`\n- `lib/auth/schemas.ts`\n\n### Harness Drift\nHarness-facing changes can drift across Claude Code, Codex, OpenCode, and shared adapter surfaces.\n\nSignals:\n- 1 harness-facing path(s) changed\n\nPaths:\n- `AGENTS.md`\n\n### Install Manifest Integrity\nInstall manifests, plugin metadata, and shipped skills should stay synchronized with user-facing setup guidance.\n\nSignals:\n- 2 install or manifest path(s) changed\n\nPaths:\n- `package.json`\n- `pnpm-lock.yaml`\n\n### CI/CD Recommendation\nCI, dependency, coverage, and contract signals should be routed into follow-up checks or verification work.\n\nSignals:\n- Async job or webhook changes may ship without reliability coverage\n- 10 CI or workflow path(s) changed\n\nPaths:\n- `app/actions/auth/signUp.test.ts`\n- `lib/api/client.test.ts`\n- `lib/auth/issue-invite.test.ts`\n- `lib/instalacao/ambiente.test.ts`\n- `package.json`\n- `pnpm-lock.yaml`\n- `tests/e2e/marca-logo.spec.ts`\n- `tests/unit/agenda-google-config.test.ts`\n\n### Cost/Token Risk\nAI routing, usage, and token-budget changes should include budget or usage-limit evidence.\n\nSignals:\n- Cost or token-risk changes may ship without budget evidence\n- 7 cost/token path(s) changed\n\nPaths:\n- `app/api/v1/ai/credentials/[id]/revalidate/route.ts`\n- `app/app/ai/agents/[id]/_components/TestPanel.tsx`\n- `app/app/ai/agents/_components/AgentRowMenu.tsx`\n- `app/app/ai/credentials/_components/CredentialCard.tsx`\n- `app/app/ai/credentials/_components/CredentialsList.tsx`\n- `app/app/ai/credentials/page.tsx`\n- `lib/ai/credenciais/guardar.ts`\n\n### Agent Config Review\nAgent, command, skill, MCP, and local instruction changes should be reviewed as executable agent configuration.\n\nSignals:\n- 1 agent-config path(s) changed\n\nPaths:\n- `AGENTS.md`\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5715769210,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-17T14:09:57Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / Reference Set Readiness:70bf61ce73d5714fa19c1c7ce7a2700181a9b876 -->\n## ECC Tools / Reference Set Readiness\n\nCommit: `70bf61ce73d5714fa19c1c7ce7a2700181a9b876`\n\n**Reference set readiness gaps detected** (neutral)\n\nReference evidence present for 1/7 areas (14%) across 113 changed file(s).\n\nThis check is based on files changed in this PR. Repository-level readiness is still reported by `/ecc-tools analyze` comments and generated manifests.\n\n| Area | Status | Evidence / Next Step |\n| --- | --- | --- |\n| Deep analyzer corpus | Missing | Add analyzer fixture, golden, benchmark, or reference-set files that can catch analyzer regressions. |\n| RAG/evaluator comparison | Missing | Add retrieval or evaluator reference-set comparison fixtures with expected ranking behavior. |\n| PR salvage/review corpus | Missing | Add stale-PR, review-thread, reopen-flow, or salvage reference cases for queue cleanup automation. |\n| Discussion triage corpus | Missing | Add public discussion triage fixtures, golden cases, or reference sets for informational, answered, and no-response classifications. |\n| Harness compatibility | Missing | Add cross-harness, adapter-compliance, or harness-audit evidence for Claude, Codex, OpenCode, Zed, dmux, and agent surfaces. |\n| Security evidence | Present | `lib/audit/actions.ts` |\n| CI failure-mode evidence | Missing | Add captured CI failure logs, dry-run fixtures, or troubleshooting docs for common workflow failure modes. |\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5715769676,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-17T14:09:59Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / Hosted Promotion Readiness:70bf61ce73d5714fa19c1c7ce7a2700181a9b876 -->\n## ECC Tools / Hosted Promotion Readiness\n\nCommit: `70bf61ce73d5714fa19c1c7ce7a2700181a9b876`\n\n**Hosted promotion readiness passed** (success)\n\nNo hosted promotion evidence gaps detected across 113 changed file(s); 0 corpus scenarios had matching evidence.\n\nThis check compares PR file changes against the evaluator/RAG promotion corpus in `src/analyzers/fixtures/evaluator-rag-corpus.ts`.\nHosted output scoring inspected 0 completed cached hosted job results.\n\nNo evaluator corpus scenarios matched this PR.\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5715770217,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-17T14:10:01Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / PR Config Audit:70bf61ce73d5714fa19c1c7ce7a2700181a9b876 -->\n## ECC Tools / PR Config Audit\n\nCommit: `70bf61ce73d5714fa19c1c7ce7a2700181a9b876`\n\n**No changed-config issues detected** (success)\n\nScanned 2 config file(s) present at this commit across 2 changed config path(s) and found no issues in the supported security rules.\n\nChanged config files:\n- AGENTS.md\n- CLAUDE.md\n\n\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5715770614,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-17T14:10:03Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / PR Harness Audit:70bf61ce73d5714fa19c1c7ce7a2700181a9b876 -->\n## ECC Tools / PR Harness Audit\n\nCommit: `70bf61ce73d5714fa19c1c7ce7a2700181a9b876`\n\n**No harness issues detected** (success)\n\nScanned 2 changed config file(s) and found no harness issues.\n\nChanged config files:\n- AGENTS.md\n- CLAUDE.md\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5716085829,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-17T14:29:36Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / Security Evidence:0f900a9a104955248e0c29e1c79332c9008d3c0d -->\n## ECC Tools / Security Evidence\n\nCommit: `0f900a9a104955248e0c29e1c79332c9008d3c0d`\n\n**Security evidence gate passed** (success)\n\nNo security-sensitive scanner-evidence gap detected.\n\nMode: enforce\n\nScanned 114 changed file(s). No missing scanner-evidence signal was detected.\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5716086076,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-17T14:29:37Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / PR Risk Taxonomy:0f900a9a104955248e0c29e1c79332c9008d3c0d -->\n## ECC Tools / PR Risk Taxonomy\n\nCommit: `0f900a9a104955248e0c29e1c79332c9008d3c0d`\n\n**PR taxonomy review recommended** (neutral)\n\nDetected 6 PR taxonomy bucket(s): Security Evidence, Harness Drift, Install Manifest Integrity, CI/CD Recommendation, Cost/Token Risk, Agent Config Review.\n\nScanned 114 changed file(s).\n\n\n\nRoadmap taxonomy buckets:\n\n\n\n### Security Evidence\nSecurity-sensitive changes should carry explicit scanner, code-scanning, or focused regression evidence.\n\nSignals:\n- Auth or permission changes may ship without security regression coverage\n- 8 security-sensitive path(s) changed\n\nPaths:\n- `app/actions/auth/signUp.test.ts`\n- `app/actions/auth/signUp.ts`\n- `app/auth/confirm/route.ts`\n- `components/auth/SignupForm.tsx`\n- `lib/auth/issue-invite.test.ts`\n- `lib/auth/issue-invite.ts`\n- `lib/auth/registration-requests.ts`\n- `lib/auth/schemas.ts`\n\n### Harness Drift\nHarness-facing changes can drift across Claude Code, Codex, OpenCode, and shared adapter surfaces.\n\nSignals:\n- 1 harness-facing path(s) changed\n\nPaths:\n- `AGENTS.md`\n\n### Install Manifest Integrity\nInstall manifests, plugin metadata, and shipped skills should stay synchronized with user-facing setup guidance.\n\nSignals:\n- 2 install or manifest path(s) changed\n\nPaths:\n- `package.json`\n- `pnpm-lock.yaml`\n\n### CI/CD Recommendation\nCI, dependency, coverage, and contract signals should be routed into follow-up checks or verification work.\n\nSignals:\n- Async job or webhook changes may ship without reliability coverage\n- 10 CI or workflow path(s) changed\n\nPaths:\n- `app/actions/auth/signUp.test.ts`\n- `lib/api/client.test.ts`\n- `lib/auth/issue-invite.test.ts`\n- `lib/instalacao/ambiente.test.ts`\n- `package.json`\n- `pnpm-lock.yaml`\n- `tests/e2e/marca-logo.spec.ts`\n- `tests/unit/agenda-google-config.test.ts`\n\n### Cost/Token Risk\nAI routing, usage, and token-budget changes should include budget or usage-limit evidence.\n\nSignals:\n- Cost or token-risk changes may ship without budget evidence\n- 7 cost/token path(s) changed\n\nPaths:\n- `app/api/v1/ai/credentials/[id]/revalidate/route.ts`\n- `app/app/ai/agents/[id]/_components/TestPanel.tsx`\n- `app/app/ai/agents/_components/AgentRowMenu.tsx`\n- `app/app/ai/credentials/_components/CredentialCard.tsx`\n- `app/app/ai/credentials/_components/CredentialsList.tsx`\n- `app/app/ai/credentials/page.tsx`\n- `lib/ai/credenciais/guardar.ts`\n\n### Agent Config Review\nAgent, command, skill, MCP, and local instruction changes should be reviewed as executable agent configuration.\n\nSignals:\n- 1 agent-config path(s) changed\n\nPaths:\n- `AGENTS.md`\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5716086347,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-17T14:29:38Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / Reference Set Readiness:0f900a9a104955248e0c29e1c79332c9008d3c0d -->\n## ECC Tools / Reference Set Readiness\n\nCommit: `0f900a9a104955248e0c29e1c79332c9008d3c0d`\n\n**Reference set readiness gaps detected** (neutral)\n\nReference evidence present for 1/7 areas (14%) across 114 changed file(s).\n\nThis check is based on files changed in this PR. Repository-level readiness is still reported by `/ecc-tools analyze` comments and generated manifests.\n\n| Area | Status | Evidence / Next Step |\n| --- | --- | --- |\n| Deep analyzer corpus | Missing | Add analyzer fixture, golden, benchmark, or reference-set files that can catch analyzer regressions. |\n| RAG/evaluator comparison | Missing | Add retrieval or evaluator reference-set comparison fixtures with expected ranking behavior. |\n| PR salvage/review corpus | Missing | Add stale-PR, review-thread, reopen-flow, or salvage reference cases for queue cleanup automation. |\n| Discussion triage corpus | Missing | Add public discussion triage fixtures, golden cases, or reference sets for informational, answered, and no-response classifications. |\n| Harness compatibility | Missing | Add cross-harness, adapter-compliance, or harness-audit evidence for Claude, Codex, OpenCode, Zed, dmux, and agent surfaces. |\n| Security evidence | Present | `lib/audit/actions.ts` |\n| CI failure-mode evidence | Missing | Add captured CI failure logs, dry-run fixtures, or troubleshooting docs for common workflow failure modes. |\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5716086689,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-17T14:29:40Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / Hosted Promotion Readiness:0f900a9a104955248e0c29e1c79332c9008d3c0d -->\n## ECC Tools / Hosted Promotion Readiness\n\nCommit: `0f900a9a104955248e0c29e1c79332c9008d3c0d`\n\n**Hosted promotion readiness passed** (success)\n\nNo hosted promotion evidence gaps detected across 114 changed file(s); 0 corpus scenarios had matching evidence.\n\nThis check compares PR file changes against the evaluator/RAG promotion corpus in `src/analyzers/fixtures/evaluator-rag-corpus.ts`.\nHosted output scoring inspected 0 completed cached hosted job results.\n\nNo evaluator corpus scenarios matched this PR.\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5716087046,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-17T14:29:41Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / PR Config Audit:0f900a9a104955248e0c29e1c79332c9008d3c0d -->\n## ECC Tools / PR Config Audit\n\nCommit: `0f900a9a104955248e0c29e1c79332c9008d3c0d`\n\n**No changed-config issues detected** (success)\n\nScanned 2 config file(s) present at this commit across 2 changed config path(s) and found no issues in the supported security rules.\n\nChanged config files:\n- AGENTS.md\n- CLAUDE.md\n\n\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5716087397,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-17T14:29:43Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / PR Harness Audit:0f900a9a104955248e0c29e1c79332c9008d3c0d -->\n## ECC Tools / PR Harness Audit\n\nCommit: `0f900a9a104955248e0c29e1c79332c9008d3c0d`\n\n**No harness issues detected** (success)\n\nScanned 2 changed config file(s) and found no harness issues.\n\nChanged config files:\n- AGENTS.md\n- CLAUDE.md\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5716966922,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-17T15:28:22Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / Security Evidence:783a0a9dcca9eb5265ea33b334fa503c7d1318b2 -->\n## ECC Tools / Security Evidence\n\nCommit: `783a0a9dcca9eb5265ea33b334fa503c7d1318b2`\n\n**Security evidence gate passed** (success)\n\nNo security-sensitive scanner-evidence gap detected.\n\nMode: enforce\n\nScanned 129 changed file(s). No missing scanner-evidence signal was detected.\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5716967218,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-17T15:28:23Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / PR Risk Taxonomy:783a0a9dcca9eb5265ea33b334fa503c7d1318b2 -->\n## ECC Tools / PR Risk Taxonomy\n\nCommit: `783a0a9dcca9eb5265ea33b334fa503c7d1318b2`\n\n**PR taxonomy review recommended** (neutral)\n\nDetected 6 PR taxonomy bucket(s): Security Evidence, Harness Drift, Install Manifest Integrity, CI/CD Recommendation, Cost/Token Risk, Agent Config Review.\n\nScanned 129 changed file(s).\n\n\n\nRoadmap taxonomy buckets:\n\n\n\n### Security Evidence\nSecurity-sensitive changes should carry explicit scanner, code-scanning, or focused regression evidence.\n\nSignals:\n- Auth or permission changes may ship without security regression coverage\n- 8 security-sensitive path(s) changed\n\nPaths:\n- `app/actions/auth/signUp.test.ts`\n- `app/actions/auth/signUp.ts`\n- `app/auth/confirm/route.ts`\n- `components/auth/SignupForm.tsx`\n- `lib/auth/issue-invite.test.ts`\n- `lib/auth/issue-invite.ts`\n- `lib/auth/registration-requests.ts`\n- `lib/auth/schemas.ts`\n\n### Harness Drift\nHarness-facing changes can drift across Claude Code, Codex, OpenCode, and shared adapter surfaces.\n\nSignals:\n- 1 harness-facing path(s) changed\n\nPaths:\n- `AGENTS.md`\n\n### Install Manifest Integrity\nInstall manifests, plugin metadata, and shipped skills should stay synchronized with user-facing setup guidance.\n\nSignals:\n- 2 install or manifest path(s) changed\n\nPaths:\n- `package.json`\n- `pnpm-lock.yaml`\n\n### CI/CD Recommendation\nCI, dependency, coverage, and contract signals should be routed into follow-up checks or verification work.\n\nSignals:\n- Async job or webhook changes may ship without reliability coverage\n- 11 CI or workflow path(s) changed\n\nPaths:\n- `app/actions/auth/signUp.test.ts`\n- `lib/api/client.test.ts`\n- `lib/auth/issue-invite.test.ts`\n- `lib/instalacao/ambiente.test.ts`\n- `package.json`\n- `pnpm-lock.yaml`\n- `tests/e2e/marca-logo.spec.ts`\n- `tests/unit/agenda-google-config.test.ts`\n\n### Cost/Token Risk\nAI routing, usage, and token-budget changes should include budget or usage-limit evidence.\n\nSignals:\n- Cost or token-risk changes may ship without budget evidence\n- 7 cost/token path(s) changed\n\nPaths:\n- `app/api/v1/ai/credentials/[id]/revalidate/route.ts`\n- `app/app/ai/agents/[id]/_components/TestPanel.tsx`\n- `app/app/ai/agents/_components/AgentRowMenu.tsx`\n- `app/app/ai/credentials/_components/CredentialCard.tsx`\n- `app/app/ai/credentials/_components/CredentialsList.tsx`\n- `app/app/ai/credentials/page.tsx`\n- `lib/ai/credenciais/guardar.ts`\n\n### Agent Config Review\nAgent, command, skill, MCP, and local instruction changes should be reviewed as executable agent configuration.\n\nSignals:\n- 1 agent-config path(s) changed\n\nPaths:\n- `AGENTS.md`\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5716967553,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-17T15:28:25Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / Reference Set Readiness:783a0a9dcca9eb5265ea33b334fa503c7d1318b2 -->\n## ECC Tools / Reference Set Readiness\n\nCommit: `783a0a9dcca9eb5265ea33b334fa503c7d1318b2`\n\n**Reference set readiness gaps detected** (neutral)\n\nReference evidence present for 1/7 areas (14%) across 129 changed file(s).\n\nThis check is based on files changed in this PR. Repository-level readiness is still reported by `/ecc-tools analyze` comments and generated manifests.\n\n| Area | Status | Evidence / Next Step |\n| --- | --- | --- |\n| Deep analyzer corpus | Missing | Add analyzer fixture, golden, benchmark, or reference-set files that can catch analyzer regressions. |\n| RAG/evaluator comparison | Missing | Add retrieval or evaluator reference-set comparison fixtures with expected ranking behavior. |\n| PR salvage/review corpus | Missing | Add stale-PR, review-thread, reopen-flow, or salvage reference cases for queue cleanup automation. |\n| Discussion triage corpus | Missing | Add public discussion triage fixtures, golden cases, or reference sets for informational, answered, and no-response classifications. |\n| Harness compatibility | Missing | Add cross-harness, adapter-compliance, or harness-audit evidence for Claude, Codex, OpenCode, Zed, dmux, and agent surfaces. |\n| Security evidence | Present | `lib/audit/actions.ts` |\n| CI failure-mode evidence | Missing | Add captured CI failure logs, dry-run fixtures, or troubleshooting docs for common workflow failure modes. |\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5716967938,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-17T15:28:27Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / Hosted Promotion Readiness:783a0a9dcca9eb5265ea33b334fa503c7d1318b2 -->\n## ECC Tools / Hosted Promotion Readiness\n\nCommit: `783a0a9dcca9eb5265ea33b334fa503c7d1318b2`\n\n**Hosted promotion readiness passed** (success)\n\nNo hosted promotion evidence gaps detected across 129 changed file(s); 0 corpus scenarios had matching evidence.\n\nThis check compares PR file changes against the evaluator/RAG promotion corpus in `src/analyzers/fixtures/evaluator-rag-corpus.ts`.\nHosted output scoring inspected 0 completed cached hosted job results.\n\nNo evaluator corpus scenarios matched this PR.\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5716968501,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-17T15:28:29Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / PR Config Audit:783a0a9dcca9eb5265ea33b334fa503c7d1318b2 -->\n## ECC Tools / PR Config Audit\n\nCommit: `783a0a9dcca9eb5265ea33b334fa503c7d1318b2`\n\n**No changed-config issues detected** (success)\n\nScanned 2 config file(s) present at this commit across 2 changed config path(s) and found no issues in the supported security rules.\n\nChanged config files:\n- AGENTS.md\n- CLAUDE.md\n\n\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5716969060,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-17T15:28:31Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / PR Harness Audit:783a0a9dcca9eb5265ea33b334fa503c7d1318b2 -->\n## ECC Tools / PR Harness Audit\n\nCommit: `783a0a9dcca9eb5265ea33b334fa503c7d1318b2`\n\n**No harness issues detected** (success)\n\nScanned 2 changed config file(s) and found no harness issues.\n\nChanged config files:\n- AGENTS.md\n- CLAUDE.md\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5717623664,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-17T16:15:25Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / Security Evidence:dd48f650e0cc7b32a8c00a05118e48c1389ff619 -->\n## ECC Tools / Security Evidence\n\nCommit: `dd48f650e0cc7b32a8c00a05118e48c1389ff619`\n\n**Security evidence gate passed** (success)\n\nNo security-sensitive scanner-evidence gap detected.\n\nMode: enforce\n\nScanned 130 changed file(s). No missing scanner-evidence signal was detected.\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5717623873,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-17T16:15:26Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / PR Risk Taxonomy:dd48f650e0cc7b32a8c00a05118e48c1389ff619 -->\n## ECC Tools / PR Risk Taxonomy\n\nCommit: `dd48f650e0cc7b32a8c00a05118e48c1389ff619`\n\n**PR taxonomy review recommended** (neutral)\n\nDetected 6 PR taxonomy bucket(s): Security Evidence, Harness Drift, Install Manifest Integrity, CI/CD Recommendation, Cost/Token Risk, Agent Config Review.\n\nScanned 130 changed file(s).\n\n\n\nRoadmap taxonomy buckets:\n\n\n\n### Security Evidence\nSecurity-sensitive changes should carry explicit scanner, code-scanning, or focused regression evidence.\n\nSignals:\n- Auth or permission changes may ship without security regression coverage\n- 8 security-sensitive path(s) changed\n\nPaths:\n- `app/actions/auth/signUp.test.ts`\n- `app/actions/auth/signUp.ts`\n- `app/auth/confirm/route.ts`\n- `components/auth/SignupForm.tsx`\n- `lib/auth/issue-invite.test.ts`\n- `lib/auth/issue-invite.ts`\n- `lib/auth/registration-requests.ts`\n- `lib/auth/schemas.ts`\n\n### Harness Drift\nHarness-facing changes can drift across Claude Code, Codex, OpenCode, and shared adapter surfaces.\n\nSignals:\n- 1 harness-facing path(s) changed\n\nPaths:\n- `AGENTS.md`\n\n### Install Manifest Integrity\nInstall manifests, plugin metadata, and shipped skills should stay synchronized with user-facing setup guidance.\n\nSignals:\n- 2 install or manifest path(s) changed\n\nPaths:\n- `package.json`\n- `pnpm-lock.yaml`\n\n### CI/CD Recommendation\nCI, dependency, coverage, and contract signals should be routed into follow-up checks or verification work.\n\nSignals:\n- Async job or webhook changes may ship without reliability coverage\n- 11 CI or workflow path(s) changed\n\nPaths:\n- `app/actions/auth/signUp.test.ts`\n- `lib/api/client.test.ts`\n- `lib/auth/issue-invite.test.ts`\n- `lib/instalacao/ambiente.test.ts`\n- `package.json`\n- `pnpm-lock.yaml`\n- `tests/e2e/marca-logo.spec.ts`\n- `tests/unit/agenda-google-config.test.ts`\n\n### Cost/Token Risk\nAI routing, usage, and token-budget changes should include budget or usage-limit evidence.\n\nSignals:\n- Cost or token-risk changes may ship without budget evidence\n- 7 cost/token path(s) changed\n\nPaths:\n- `app/api/v1/ai/credentials/[id]/revalidate/route.ts`\n- `app/app/ai/agents/[id]/_components/TestPanel.tsx`\n- `app/app/ai/agents/_components/AgentRowMenu.tsx`\n- `app/app/ai/credentials/_components/CredentialCard.tsx`\n- `app/app/ai/credentials/_components/CredentialsList.tsx`\n- `app/app/ai/credentials/page.tsx`\n- `lib/ai/credenciais/guardar.ts`\n\n### Agent Config Review\nAgent, command, skill, MCP, and local instruction changes should be reviewed as executable agent configuration.\n\nSignals:\n- 1 agent-config path(s) changed\n\nPaths:\n- `AGENTS.md`\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5717624076,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-17T16:15:27Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / Reference Set Readiness:dd48f650e0cc7b32a8c00a05118e48c1389ff619 -->\n## ECC Tools / Reference Set Readiness\n\nCommit: `dd48f650e0cc7b32a8c00a05118e48c1389ff619`\n\n**Reference set readiness gaps detected** (neutral)\n\nReference evidence present for 1/7 areas (14%) across 130 changed file(s).\n\nThis check is based on files changed in this PR. Repository-level readiness is still reported by `/ecc-tools analyze` comments and generated manifests.\n\n| Area | Status | Evidence / Next Step |\n| --- | --- | --- |\n| Deep analyzer corpus | Missing | Add analyzer fixture, golden, benchmark, or reference-set files that can catch analyzer regressions. |\n| RAG/evaluator comparison | Missing | Add retrieval or evaluator reference-set comparison fixtures with expected ranking behavior. |\n| PR salvage/review corpus | Missing | Add stale-PR, review-thread, reopen-flow, or salvage reference cases for queue cleanup automation. |\n| Discussion triage corpus | Missing | Add public discussion triage fixtures, golden cases, or reference sets for informational, answered, and no-response classifications. |\n| Harness compatibility | Missing | Add cross-harness, adapter-compliance, or harness-audit evidence for Claude, Codex, OpenCode, Zed, dmux, and agent surfaces. |\n| Security evidence | Present | `lib/audit/actions.ts` |\n| CI failure-mode evidence | Missing | Add captured CI failure logs, dry-run fixtures, or troubleshooting docs for common workflow failure modes. |\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5717624562,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-17T16:15:29Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / Hosted Promotion Readiness:dd48f650e0cc7b32a8c00a05118e48c1389ff619 -->\n## ECC Tools / Hosted Promotion Readiness\n\nCommit: `dd48f650e0cc7b32a8c00a05118e48c1389ff619`\n\n**Hosted promotion readiness passed** (success)\n\nNo hosted promotion evidence gaps detected across 130 changed file(s); 0 corpus scenarios had matching evidence.\n\nThis check compares PR file changes against the evaluator/RAG promotion corpus in `src/analyzers/fixtures/evaluator-rag-corpus.ts`.\nHosted output scoring inspected 0 completed cached hosted job results.\n\nNo evaluator corpus scenarios matched this PR.\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5717624988,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-17T16:15:31Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / PR Config Audit:dd48f650e0cc7b32a8c00a05118e48c1389ff619 -->\n## ECC Tools / PR Config Audit\n\nCommit: `dd48f650e0cc7b32a8c00a05118e48c1389ff619`\n\n**No changed-config issues detected** (success)\n\nScanned 2 config file(s) present at this commit across 2 changed config path(s) and found no issues in the supported security rules.\n\nChanged config files:\n- AGENTS.md\n- CLAUDE.md\n\n\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5717625305,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-17T16:15:32Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / PR Harness Audit:dd48f650e0cc7b32a8c00a05118e48c1389ff619 -->\n## ECC Tools / PR Harness Audit\n\nCommit: `dd48f650e0cc7b32a8c00a05118e48c1389ff619`\n\n**No harness issues detected** (success)\n\nScanned 2 changed config file(s) and found no harness issues.\n\nChanged config files:\n- AGENTS.md\n- CLAUDE.md\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5718434643,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-17T17:17:05Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / Security Evidence:6d20197773212a0f05f2deddf968fe120020f1fc -->\n## ECC Tools / Security Evidence\n\nCommit: `6d20197773212a0f05f2deddf968fe120020f1fc`\n\n**Security evidence gate passed** (success)\n\nNo security-sensitive scanner-evidence gap detected.\n\nMode: enforce\n\nScanned 131 changed file(s). No missing scanner-evidence signal was detected.\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5718434871,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-17T17:17:06Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / PR Risk Taxonomy:6d20197773212a0f05f2deddf968fe120020f1fc -->\n## ECC Tools / PR Risk Taxonomy\n\nCommit: `6d20197773212a0f05f2deddf968fe120020f1fc`\n\n**PR taxonomy review recommended** (neutral)\n\nDetected 6 PR taxonomy bucket(s): Security Evidence, Harness Drift, Install Manifest Integrity, CI/CD Recommendation, Cost/Token Risk, Agent Config Review.\n\nScanned 131 changed file(s).\n\n\n\nRoadmap taxonomy buckets:\n\n\n\n### Security Evidence\nSecurity-sensitive changes should carry explicit scanner, code-scanning, or focused regression evidence.\n\nSignals:\n- Auth or permission changes may ship without security regression coverage\n- 8 security-sensitive path(s) changed\n\nPaths:\n- `app/actions/auth/signUp.test.ts`\n- `app/actions/auth/signUp.ts`\n- `app/auth/confirm/route.ts`\n- `components/auth/SignupForm.tsx`\n- `lib/auth/issue-invite.test.ts`\n- `lib/auth/issue-invite.ts`\n- `lib/auth/registration-requests.ts`\n- `lib/auth/schemas.ts`\n\n### Harness Drift\nHarness-facing changes can drift across Claude Code, Codex, OpenCode, and shared adapter surfaces.\n\nSignals:\n- 1 harness-facing path(s) changed\n\nPaths:\n- `AGENTS.md`\n\n### Install Manifest Integrity\nInstall manifests, plugin metadata, and shipped skills should stay synchronized with user-facing setup guidance.\n\nSignals:\n- 2 install or manifest path(s) changed\n\nPaths:\n- `package.json`\n- `pnpm-lock.yaml`\n\n### CI/CD Recommendation\nCI, dependency, coverage, and contract signals should be routed into follow-up checks or verification work.\n\nSignals:\n- Async job or webhook changes may ship without reliability coverage\n- 11 CI or workflow path(s) changed\n\nPaths:\n- `app/actions/auth/signUp.test.ts`\n- `lib/api/client.test.ts`\n- `lib/auth/issue-invite.test.ts`\n- `lib/instalacao/ambiente.test.ts`\n- `package.json`\n- `pnpm-lock.yaml`\n- `tests/e2e/marca-logo.spec.ts`\n- `tests/unit/agenda-google-config.test.ts`\n\n### Cost/Token Risk\nAI routing, usage, and token-budget changes should include budget or usage-limit evidence.\n\nSignals:\n- Cost or token-risk changes may ship without budget evidence\n- 7 cost/token path(s) changed\n\nPaths:\n- `app/api/v1/ai/credentials/[id]/revalidate/route.ts`\n- `app/app/ai/agents/[id]/_components/TestPanel.tsx`\n- `app/app/ai/agents/_components/AgentRowMenu.tsx`\n- `app/app/ai/credentials/_components/CredentialCard.tsx`\n- `app/app/ai/credentials/_components/CredentialsList.tsx`\n- `app/app/ai/credentials/page.tsx`\n- `lib/ai/credenciais/guardar.ts`\n\n### Agent Config Review\nAgent, command, skill, MCP, and local instruction changes should be reviewed as executable agent configuration.\n\nSignals:\n- 1 agent-config path(s) changed\n\nPaths:\n- `AGENTS.md`\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5718435086,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-17T17:17:07Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / Reference Set Readiness:6d20197773212a0f05f2deddf968fe120020f1fc -->\n## ECC Tools / Reference Set Readiness\n\nCommit: `6d20197773212a0f05f2deddf968fe120020f1fc`\n\n**Reference set readiness gaps detected** (neutral)\n\nReference evidence present for 1/7 areas (14%) across 131 changed file(s).\n\nThis check is based on files changed in this PR. Repository-level readiness is still reported by `/ecc-tools analyze` comments and generated manifests.\n\n| Area | Status | Evidence / Next Step |\n| --- | --- | --- |\n| Deep analyzer corpus | Missing | Add analyzer fixture, golden, benchmark, or reference-set files that can catch analyzer regressions. |\n| RAG/evaluator comparison | Missing | Add retrieval or evaluator reference-set comparison fixtures with expected ranking behavior. |\n| PR salvage/review corpus | Missing | Add stale-PR, review-thread, reopen-flow, or salvage reference cases for queue cleanup automation. |\n| Discussion triage corpus | Missing | Add public discussion triage fixtures, golden cases, or reference sets for informational, answered, and no-response classifications. |\n| Harness compatibility | Missing | Add cross-harness, adapter-compliance, or harness-audit evidence for Claude, Codex, OpenCode, Zed, dmux, and agent surfaces. |\n| Security evidence | Present | `lib/audit/actions.ts` |\n| CI failure-mode evidence | Missing | Add captured CI failure logs, dry-run fixtures, or troubleshooting docs for common workflow failure modes. |\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5718435542,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-17T17:17:09Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / Hosted Promotion Readiness:6d20197773212a0f05f2deddf968fe120020f1fc -->\n## ECC Tools / Hosted Promotion Readiness\n\nCommit: `6d20197773212a0f05f2deddf968fe120020f1fc`\n\n**Hosted promotion readiness passed** (success)\n\nNo hosted promotion evidence gaps detected across 131 changed file(s); 0 corpus scenarios had matching evidence.\n\nThis check compares PR file changes against the evaluator/RAG promotion corpus in `src/analyzers/fixtures/evaluator-rag-corpus.ts`.\nHosted output scoring inspected 0 completed cached hosted job results.\n\nNo evaluator corpus scenarios matched this PR.\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5718435970,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-17T17:17:11Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / PR Config Audit:6d20197773212a0f05f2deddf968fe120020f1fc -->\n## ECC Tools / PR Config Audit\n\nCommit: `6d20197773212a0f05f2deddf968fe120020f1fc`\n\n**No changed-config issues detected** (success)\n\nScanned 2 config file(s) present at this commit across 2 changed config path(s) and found no issues in the supported security rules.\n\nChanged config files:\n- AGENTS.md\n- CLAUDE.md\n\n\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5718436439,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-17T17:17:13Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / PR Harness Audit:6d20197773212a0f05f2deddf968fe120020f1fc -->\n## ECC Tools / PR Harness Audit\n\nCommit: `6d20197773212a0f05f2deddf968fe120020f1fc`\n\n**No harness issues detected** (success)\n\nScanned 2 changed config file(s) and found no harness issues.\n\nChanged config files:\n- AGENTS.md\n- CLAUDE.md\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5718813860,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-17T17:47:47Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / Security Evidence:e5d30e62f1140f08b5cbb3431d8d310aef41aa89 -->\n## ECC Tools / Security Evidence\n\nCommit: `e5d30e62f1140f08b5cbb3431d8d310aef41aa89`\n\n**Security evidence gate passed** (success)\n\nNo security-sensitive scanner-evidence gap detected.\n\nMode: enforce\n\nScanned 132 changed file(s). No missing scanner-evidence signal was detected.\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5718814237,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-17T17:47:49Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / PR Risk Taxonomy:e5d30e62f1140f08b5cbb3431d8d310aef41aa89 -->\n## ECC Tools / PR Risk Taxonomy\n\nCommit: `e5d30e62f1140f08b5cbb3431d8d310aef41aa89`\n\n**PR taxonomy review recommended** (neutral)\n\nDetected 6 PR taxonomy bucket(s): Security Evidence, Harness Drift, Install Manifest Integrity, CI/CD Recommendation, Cost/Token Risk, Agent Config Review.\n\nScanned 132 changed file(s).\n\n\n\nRoadmap taxonomy buckets:\n\n\n\n### Security Evidence\nSecurity-sensitive changes should carry explicit scanner, code-scanning, or focused regression evidence.\n\nSignals:\n- Auth or permission changes may ship without security regression coverage\n- 8 security-sensitive path(s) changed\n\nPaths:\n- `app/actions/auth/signUp.test.ts`\n- `app/actions/auth/signUp.ts`\n- `app/auth/confirm/route.ts`\n- `components/auth/SignupForm.tsx`\n- `lib/auth/issue-invite.test.ts`\n- `lib/auth/issue-invite.ts`\n- `lib/auth/registration-requests.ts`\n- `lib/auth/schemas.ts`\n\n### Harness Drift\nHarness-facing changes can drift across Claude Code, Codex, OpenCode, and shared adapter surfaces.\n\nSignals:\n- 1 harness-facing path(s) changed\n\nPaths:\n- `AGENTS.md`\n\n### Install Manifest Integrity\nInstall manifests, plugin metadata, and shipped skills should stay synchronized with user-facing setup guidance.\n\nSignals:\n- 2 install or manifest path(s) changed\n\nPaths:\n- `package.json`\n- `pnpm-lock.yaml`\n\n### CI/CD Recommendation\nCI, dependency, coverage, and contract signals should be routed into follow-up checks or verification work.\n\nSignals:\n- Async job or webhook changes may ship without reliability coverage\n- 11 CI or workflow path(s) changed\n\nPaths:\n- `app/actions/auth/signUp.test.ts`\n- `lib/api/client.test.ts`\n- `lib/auth/issue-invite.test.ts`\n- `lib/instalacao/ambiente.test.ts`\n- `package.json`\n- `pnpm-lock.yaml`\n- `tests/e2e/marca-logo.spec.ts`\n- `tests/unit/agenda-google-config.test.ts`\n\n### Cost/Token Risk\nAI routing, usage, and token-budget changes should include budget or usage-limit evidence.\n\nSignals:\n- Cost or token-risk changes may ship without budget evidence\n- 7 cost/token path(s) changed\n\nPaths:\n- `app/api/v1/ai/credentials/[id]/revalidate/route.ts`\n- `app/app/ai/agents/[id]/_components/TestPanel.tsx`\n- `app/app/ai/agents/_components/AgentRowMenu.tsx`\n- `app/app/ai/credentials/_components/CredentialCard.tsx`\n- `app/app/ai/credentials/_components/CredentialsList.tsx`\n- `app/app/ai/credentials/page.tsx`\n- `lib/ai/credenciais/guardar.ts`\n\n### Agent Config Review\nAgent, command, skill, MCP, and local instruction changes should be reviewed as executable agent configuration.\n\nSignals:\n- 1 agent-config path(s) changed\n\nPaths:\n- `AGENTS.md`\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5718814527,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-17T17:47:50Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / Reference Set Readiness:e5d30e62f1140f08b5cbb3431d8d310aef41aa89 -->\n## ECC Tools / Reference Set Readiness\n\nCommit: `e5d30e62f1140f08b5cbb3431d8d310aef41aa89`\n\n**Reference set readiness gaps detected** (neutral)\n\nReference evidence present for 1/7 areas (14%) across 132 changed file(s).\n\nThis check is based on files changed in this PR. Repository-level readiness is still reported by `/ecc-tools analyze` comments and generated manifests.\n\n| Area | Status | Evidence / Next Step |\n| --- | --- | --- |\n| Deep analyzer corpus | Missing | Add analyzer fixture, golden, benchmark, or reference-set files that can catch analyzer regressions. |\n| RAG/evaluator comparison | Missing | Add retrieval or evaluator reference-set comparison fixtures with expected ranking behavior. |\n| PR salvage/review corpus | Missing | Add stale-PR, review-thread, reopen-flow, or salvage reference cases for queue cleanup automation. |\n| Discussion triage corpus | Missing | Add public discussion triage fixtures, golden cases, or reference sets for informational, answered, and no-response classifications. |\n| Harness compatibility | Missing | Add cross-harness, adapter-compliance, or harness-audit evidence for Claude, Codex, OpenCode, Zed, dmux, and agent surfaces. |\n| Security evidence | Present | `lib/audit/actions.ts` |\n| CI failure-mode evidence | Missing | Add captured CI failure logs, dry-run fixtures, or troubleshooting docs for common workflow failure modes. |\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5718814902,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-17T17:47:52Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / Hosted Promotion Readiness:e5d30e62f1140f08b5cbb3431d8d310aef41aa89 -->\n## ECC Tools / Hosted Promotion Readiness\n\nCommit: `e5d30e62f1140f08b5cbb3431d8d310aef41aa89`\n\n**Hosted promotion readiness passed** (success)\n\nNo hosted promotion evidence gaps detected across 132 changed file(s); 0 corpus scenarios had matching evidence.\n\nThis check compares PR file changes against the evaluator/RAG promotion corpus in `src/analyzers/fixtures/evaluator-rag-corpus.ts`.\nHosted output scoring inspected 0 completed cached hosted job results.\n\nNo evaluator corpus scenarios matched this PR.\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5718815300,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-17T17:47:54Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / PR Config Audit:e5d30e62f1140f08b5cbb3431d8d310aef41aa89 -->\n## ECC Tools / PR Config Audit\n\nCommit: `e5d30e62f1140f08b5cbb3431d8d310aef41aa89`\n\n**No changed-config issues detected** (success)\n\nScanned 2 config file(s) present at this commit across 2 changed config path(s) and found no issues in the supported security rules.\n\nChanged config files:\n- AGENTS.md\n- CLAUDE.md\n\n\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5718815592,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-17T17:47:56Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / PR Harness Audit:e5d30e62f1140f08b5cbb3431d8d310aef41aa89 -->\n## ECC Tools / PR Harness Audit\n\nCommit: `e5d30e62f1140f08b5cbb3431d8d310aef41aa89`\n\n**No harness issues detected** (success)\n\nScanned 2 changed config file(s) and found no harness issues.\n\nChanged config files:\n- AGENTS.md\n- CLAUDE.md\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5719006844,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-17T18:03:57Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / Security Evidence:606f11262a600649d35763b42c5575faa5fdb020 -->\n## ECC Tools / Security Evidence\n\nCommit: `606f11262a600649d35763b42c5575faa5fdb020`\n\n**Security evidence gate passed** (success)\n\nNo security-sensitive scanner-evidence gap detected.\n\nMode: enforce\n\nScanned 135 changed file(s). No missing scanner-evidence signal was detected.\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5719007092,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-17T18:03:58Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / PR Risk Taxonomy:606f11262a600649d35763b42c5575faa5fdb020 -->\n## ECC Tools / PR Risk Taxonomy\n\nCommit: `606f11262a600649d35763b42c5575faa5fdb020`\n\n**PR taxonomy review recommended** (neutral)\n\nDetected 6 PR taxonomy bucket(s): Security Evidence, Harness Drift, Install Manifest Integrity, CI/CD Recommendation, Cost/Token Risk, Agent Config Review.\n\nScanned 135 changed file(s).\n\n\n\nRoadmap taxonomy buckets:\n\n\n\n### Security Evidence\nSecurity-sensitive changes should carry explicit scanner, code-scanning, or focused regression evidence.\n\nSignals:\n- Auth or permission changes may ship without security regression coverage\n- 8 security-sensitive path(s) changed\n\nPaths:\n- `app/actions/auth/signUp.test.ts`\n- `app/actions/auth/signUp.ts`\n- `app/auth/confirm/route.ts`\n- `components/auth/SignupForm.tsx`\n- `lib/auth/issue-invite.test.ts`\n- `lib/auth/issue-invite.ts`\n- `lib/auth/registration-requests.ts`\n- `lib/auth/schemas.ts`\n\n### Harness Drift\nHarness-facing changes can drift across Claude Code, Codex, OpenCode, and shared adapter surfaces.\n\nSignals:\n- 1 harness-facing path(s) changed\n\nPaths:\n- `AGENTS.md`\n\n### Install Manifest Integrity\nInstall manifests, plugin metadata, and shipped skills should stay synchronized with user-facing setup guidance.\n\nSignals:\n- 2 install or manifest path(s) changed\n\nPaths:\n- `package.json`\n- `pnpm-lock.yaml`\n\n### CI/CD Recommendation\nCI, dependency, coverage, and contract signals should be routed into follow-up checks or verification work.\n\nSignals:\n- Async job or webhook changes may ship without reliability coverage\n- 12 CI or workflow path(s) changed\n\nPaths:\n- `app/actions/auth/signUp.test.ts`\n- `app/api/v1/ai/agents/[id]/versions/[vid]/test/route.test.ts`\n- `lib/api/client.test.ts`\n- `lib/auth/issue-invite.test.ts`\n- `lib/instalacao/ambiente.test.ts`\n- `package.json`\n- `pnpm-lock.yaml`\n- `tests/e2e/marca-logo.spec.ts`\n\n### Cost/Token Risk\nAI routing, usage, and token-budget changes should include budget or usage-limit evidence.\n\nSignals:\n- Cost or token-risk changes may ship without budget evidence\n- 9 cost/token path(s) changed\n\nPaths:\n- `app/api/v1/ai/agents/[id]/versions/[vid]/test/route.test.ts`\n- `app/api/v1/ai/agents/[id]/versions/[vid]/test/route.ts`\n- `app/api/v1/ai/credentials/[id]/revalidate/route.ts`\n- `app/app/ai/agents/[id]/_components/TestPanel.tsx`\n- `app/app/ai/agents/_components/AgentRowMenu.tsx`\n- `app/app/ai/credentials/_components/CredentialCard.tsx`\n- `app/app/ai/credentials/_components/CredentialsList.tsx`\n- `app/app/ai/credentials/page.tsx`\n\n### Agent Config Review\nAgent, command, skill, MCP, and local instruction changes should be reviewed as executable agent configuration.\n\nSignals:\n- 1 agent-config path(s) changed\n\nPaths:\n- `AGENTS.md`\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5719007295,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-17T18:03:59Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / Reference Set Readiness:606f11262a600649d35763b42c5575faa5fdb020 -->\n## ECC Tools / Reference Set Readiness\n\nCommit: `606f11262a600649d35763b42c5575faa5fdb020`\n\n**Reference set readiness gaps detected** (neutral)\n\nReference evidence present for 1/7 areas (14%) across 135 changed file(s).\n\nThis check is based on files changed in this PR. Repository-level readiness is still reported by `/ecc-tools analyze` comments and generated manifests.\n\n| Area | Status | Evidence / Next Step |\n| --- | --- | --- |\n| Deep analyzer corpus | Missing | Add analyzer fixture, golden, benchmark, or reference-set files that can catch analyzer regressions. |\n| RAG/evaluator comparison | Missing | Add retrieval or evaluator reference-set comparison fixtures with expected ranking behavior. |\n| PR salvage/review corpus | Missing | Add stale-PR, review-thread, reopen-flow, or salvage reference cases for queue cleanup automation. |\n| Discussion triage corpus | Missing | Add public discussion triage fixtures, golden cases, or reference sets for informational, answered, and no-response classifications. |\n| Harness compatibility | Missing | Add cross-harness, adapter-compliance, or harness-audit evidence for Claude, Codex, OpenCode, Zed, dmux, and agent surfaces. |\n| Security evidence | Present | `lib/audit/actions.ts` |\n| CI failure-mode evidence | Missing | Add captured CI failure logs, dry-run fixtures, or troubleshooting docs for common workflow failure modes. |\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5719007757,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-17T18:04:02Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / Hosted Promotion Readiness:606f11262a600649d35763b42c5575faa5fdb020 -->\n## ECC Tools / Hosted Promotion Readiness\n\nCommit: `606f11262a600649d35763b42c5575faa5fdb020`\n\n**Hosted promotion readiness passed** (success)\n\nNo hosted promotion evidence gaps detected across 135 changed file(s); 0 corpus scenarios had matching evidence.\n\nThis check compares PR file changes against the evaluator/RAG promotion corpus in `src/analyzers/fixtures/evaluator-rag-corpus.ts`.\nHosted output scoring inspected 0 completed cached hosted job results.\n\nNo evaluator corpus scenarios matched this PR.\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5719008160,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-17T18:04:04Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / PR Config Audit:606f11262a600649d35763b42c5575faa5fdb020 -->\n## ECC Tools / PR Config Audit\n\nCommit: `606f11262a600649d35763b42c5575faa5fdb020`\n\n**No changed-config issues detected** (success)\n\nScanned 2 config file(s) present at this commit across 2 changed config path(s) and found no issues in the supported security rules.\n\nChanged config files:\n- AGENTS.md\n- CLAUDE.md\n\n\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5719008579,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-17T18:04:06Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / PR Harness Audit:606f11262a600649d35763b42c5575faa5fdb020 -->\n## ECC Tools / PR Harness Audit\n\nCommit: `606f11262a600649d35763b42c5575faa5fdb020`\n\n**No harness issues detected** (success)\n\nScanned 2 changed config file(s) and found no harness issues.\n\nChanged config files:\n- AGENTS.md\n- CLAUDE.md\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5719352161,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-17T18:32:20Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / Security Evidence:836952ec57d472adbf2722bccc8a6d134942dcf0 -->\n## ECC Tools / Security Evidence\n\nCommit: `836952ec57d472adbf2722bccc8a6d134942dcf0`\n\n**Security evidence gate passed** (success)\n\nNo security-sensitive scanner-evidence gap detected.\n\nMode: enforce\n\nScanned 135 changed file(s). No missing scanner-evidence signal was detected.\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5719352385,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-17T18:32:21Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / PR Risk Taxonomy:836952ec57d472adbf2722bccc8a6d134942dcf0 -->\n## ECC Tools / PR Risk Taxonomy\n\nCommit: `836952ec57d472adbf2722bccc8a6d134942dcf0`\n\n**PR taxonomy review recommended** (neutral)\n\nDetected 6 PR taxonomy bucket(s): Security Evidence, Harness Drift, Install Manifest Integrity, CI/CD Recommendation, Cost/Token Risk, Agent Config Review.\n\nScanned 135 changed file(s).\n\n\n\nRoadmap taxonomy buckets:\n\n\n\n### Security Evidence\nSecurity-sensitive changes should carry explicit scanner, code-scanning, or focused regression evidence.\n\nSignals:\n- Auth or permission changes may ship without security regression coverage\n- 8 security-sensitive path(s) changed\n\nPaths:\n- `app/actions/auth/signUp.test.ts`\n- `app/actions/auth/signUp.ts`\n- `app/auth/confirm/route.ts`\n- `components/auth/SignupForm.tsx`\n- `lib/auth/issue-invite.test.ts`\n- `lib/auth/issue-invite.ts`\n- `lib/auth/registration-requests.ts`\n- `lib/auth/schemas.ts`\n\n### Harness Drift\nHarness-facing changes can drift across Claude Code, Codex, OpenCode, and shared adapter surfaces.\n\nSignals:\n- 1 harness-facing path(s) changed\n\nPaths:\n- `AGENTS.md`\n\n### Install Manifest Integrity\nInstall manifests, plugin metadata, and shipped skills should stay synchronized with user-facing setup guidance.\n\nSignals:\n- 2 install or manifest path(s) changed\n\nPaths:\n- `package.json`\n- `pnpm-lock.yaml`\n\n### CI/CD Recommendation\nCI, dependency, coverage, and contract signals should be routed into follow-up checks or verification work.\n\nSignals:\n- Async job or webhook changes may ship without reliability coverage\n- 12 CI or workflow path(s) changed\n\nPaths:\n- `app/actions/auth/signUp.test.ts`\n- `app/api/v1/ai/agents/[id]/versions/[vid]/test/route.test.ts`\n- `lib/api/client.test.ts`\n- `lib/auth/issue-invite.test.ts`\n- `lib/instalacao/ambiente.test.ts`\n- `package.json`\n- `pnpm-lock.yaml`\n- `tests/e2e/marca-logo.spec.ts`\n\n### Cost/Token Risk\nAI routing, usage, and token-budget changes should include budget or usage-limit evidence.\n\nSignals:\n- Cost or token-risk changes may ship without budget evidence\n- 9 cost/token path(s) changed\n\nPaths:\n- `app/api/v1/ai/agents/[id]/versions/[vid]/test/route.test.ts`\n- `app/api/v1/ai/agents/[id]/versions/[vid]/test/route.ts`\n- `app/api/v1/ai/credentials/[id]/revalidate/route.ts`\n- `app/app/ai/agents/[id]/_components/TestPanel.tsx`\n- `app/app/ai/agents/_components/AgentRowMenu.tsx`\n- `app/app/ai/credentials/_components/CredentialCard.tsx`\n- `app/app/ai/credentials/_components/CredentialsList.tsx`\n- `app/app/ai/credentials/page.tsx`\n\n### Agent Config Review\nAgent, command, skill, MCP, and local instruction changes should be reviewed as executable agent configuration.\n\nSignals:\n- 1 agent-config path(s) changed\n\nPaths:\n- `AGENTS.md`\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5719352611,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-17T18:32:22Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / Reference Set Readiness:836952ec57d472adbf2722bccc8a6d134942dcf0 -->\n## ECC Tools / Reference Set Readiness\n\nCommit: `836952ec57d472adbf2722bccc8a6d134942dcf0`\n\n**Reference set readiness gaps detected** (neutral)\n\nReference evidence present for 1/7 areas (14%) across 135 changed file(s).\n\nThis check is based on files changed in this PR. Repository-level readiness is still reported by `/ecc-tools analyze` comments and generated manifests.\n\n| Area | Status | Evidence / Next Step |\n| --- | --- | --- |\n| Deep analyzer corpus | Missing | Add analyzer fixture, golden, benchmark, or reference-set files that can catch analyzer regressions. |\n| RAG/evaluator comparison | Missing | Add retrieval or evaluator reference-set comparison fixtures with expected ranking behavior. |\n| PR salvage/review corpus | Missing | Add stale-PR, review-thread, reopen-flow, or salvage reference cases for queue cleanup automation. |\n| Discussion triage corpus | Missing | Add public discussion triage fixtures, golden cases, or reference sets for informational, answered, and no-response classifications. |\n| Harness compatibility | Missing | Add cross-harness, adapter-compliance, or harness-audit evidence for Claude, Codex, OpenCode, Zed, dmux, and agent surfaces. |\n| Security evidence | Present | `lib/audit/actions.ts` |\n| CI failure-mode evidence | Missing | Add captured CI failure logs, dry-run fixtures, or troubleshooting docs for common workflow failure modes. |\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5719352953,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-17T18:32:24Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / Hosted Promotion Readiness:836952ec57d472adbf2722bccc8a6d134942dcf0 -->\n## ECC Tools / Hosted Promotion Readiness\n\nCommit: `836952ec57d472adbf2722bccc8a6d134942dcf0`\n\n**Hosted promotion readiness passed** (success)\n\nNo hosted promotion evidence gaps detected across 135 changed file(s); 0 corpus scenarios had matching evidence.\n\nThis check compares PR file changes against the evaluator/RAG promotion corpus in `src/analyzers/fixtures/evaluator-rag-corpus.ts`.\nHosted output scoring inspected 0 completed cached hosted job results.\n\nNo evaluator corpus scenarios matched this PR.\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5719353382,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-17T18:32:26Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / PR Config Audit:836952ec57d472adbf2722bccc8a6d134942dcf0 -->\n## ECC Tools / PR Config Audit\n\nCommit: `836952ec57d472adbf2722bccc8a6d134942dcf0`\n\n**No changed-config issues detected** (success)\n\nScanned 2 config file(s) present at this commit across 2 changed config path(s) and found no issues in the supported security rules.\n\nChanged config files:\n- AGENTS.md\n- CLAUDE.md\n\n\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5719353719,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-17T18:32:27Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / PR Harness Audit:836952ec57d472adbf2722bccc8a6d134942dcf0 -->\n## ECC Tools / PR Harness Audit\n\nCommit: `836952ec57d472adbf2722bccc8a6d134942dcf0`\n\n**No harness issues detected** (success)\n\nScanned 2 changed config file(s) and found no harness issues.\n\nChanged config files:\n- AGENTS.md\n- CLAUDE.md\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5721343042,
   "autor": "melgarafael",
   "quando": "2026-09-17T21:17:08Z",
   "texto": "<!-- triagem-de-pr:v1:pass=10 -->\n@betoarts — este PR sai do limbo hoje, e com notícia boa: **a metade que o dono aprovou está sendo construída agora**, a partir do seu trabalho e com a sua autoria nos commits. Vou te dizer exatamente o que entra, o que não entra, e o que fica para depois.\n\nPrimeiro, o reconhecimento que você merece: você seguiu o PR mexendo, e o seu último comentário — *\"ainda não está pronto para entrar\"*, dito por você mesmo, antes de qualquer um de nós dizer — é o tipo de honestidade que torna uma revisão barata. Você também ofereceu separar o que é breaking do que é infraestrutura. É exatamente o que vai acontecer.\n\n## O que entra: SMTP como OPÇÃO, com a Resend intacta\n\nA decisão do dono é a alternativa (a): **os dois caminhos convivem**. Nas palavras dele, *\"quem tem Resend não mexe em nada\"*. Isso muda uma peça do seu desenho: no seu head, `lib/email/resend.ts` vira um re-export de cinco linhas, a dependência sai do `package.json` e as chaves saem da validação de ambiente. No recorte, a Resend fica de pé como está, e entra **uma peça nova** que o PR não tem: um roteador que usa SMTP quando há SMTP configurado e cai na Resend quando não há. Sem essa peça, \"conviver\" não existe em código.\n\nEntram também: a resolução de configuração com banco na frente e `.env` como piso; a ação que grava, com a senha cifrada; a migration (renumerada para **0277**, porque os números do seu conjunto já estão ocupados na `main` de hoje); o bloco correspondente no apêndice do `baseline.sql`, que é o arquivo que o self-hoster aplica de verdade; e os seus três casos de teste novos.\n\nCom três acréscimos nossos, e eu prefiro te dizer do que você descobrir depois:\n\n1. **Os quatro casos de teste que o PR apagou voltam** — entre eles o que distingue \"domínio não verificado\" de \"falha de envio\". Eles cobrem a Resend, que continua existindo.\n2. **A tela vai para a área de admin da instalação**, não para \"Sua empresa\". Configuração de SMTP é da instalação inteira, e o dono foi explícito: *\"tudo que é Liga/Desliga de configuração geral deve ter espaço na tela de admin, sem precisar ir nos `.env`\"* (issue #1034). Com isso, a exceção que o PR precisou inventar na navegação deixa de ser necessária.\n3. **Espanhol para as frases novas da tela.** Medido: as frases novas da tela estão sem tradução no dicionário. Frase nova na tela exige espanhol aqui.\n\n## O que não entra, e por quê\n\n**Três bloqueadores, e nenhum deles é negociável:**\n\n- **A tela pública de cadastro não pode listar as empresas da instalação.** Quem instala este produto para revender tem a carteira de clientes dele ali; essa lista não pode ser servida a qualquer visitante.\n- **Confirmar e-mail sem prova de posse não entra** — nem por código, nem por configuração do servidor de autenticação. Se o endereço não foi provado, ele não é da pessoa que se cadastrou, e isso vale igual no caminho do convite.\n- **A marca da instalação e a marca de uma empresa são escopos separados.** Um administrador de uma empresa não pode trocar a tela de login de todas as outras.\n\n**E três coisas que não são bloqueador, só não são deste PR:**\n\n- **O auto-cadastro** foi aprovado, mas na alternativa (d): nasce **desligado**, e quem administra liga **pela tela** `/admin/cadastro` — que já existe no produto, com a migration 0253. É a segunda fatia, e ela vem depois desta.\n- **A mudança no caminho de confirmação** hoje obriga aprovação manual em qualquer instalação, inclusive num consultório de uma pessoa só. E **a remoção do formulário de `/get-started`** tira a saída de quem ficou sem empresa — é um beco que a `main` já pagou caro para consertar.\n- **A stack local, os três instaladores, o motor de IA, o OAuth com localhost, o limite de nome de sessão do WAHA, a reativação de membro, a troca de credenciais no perfil, a capa do README.** São mais de mil linhas só nos instaladores. Cada um é um PR próprio — e alguns são bons: **o limite de nome de sessão do WAHA parece conserto real**, e o seu conserto de hoje do estado da execução de agente (`error` → `failed`, que deixava o preview preso) também. Se você abrir esses dois pequenos a partir da `main`, eu triago no mesmo dia.\n\n## O que acontece agora\n\nUm terminal nosso está montando o recorte com a sua autoria. Quando fechar, ele vai para a `main` num PR de lote, e este PR aqui fica como a origem do trabalho. Você não precisa fazer nada — mas se quiser acompanhar ou discordar de alguma escolha do recorte, é só dizer aqui.\n\nUma observação sobre o ritmo, que é nossa culpa e não sua: este PR ficou dias esperando decisão enquanto a `main` andava, e agora tem 20 arquivos em conflito. Nenhum deles é do que entra — mas o custo existiu, e ele é o motivo de estarmos fechando isto hoje.\n\n## NÃO MEDIDO\n\n- **Nada do SMTP foi exercitado contra servidor real** — nem a verificação da conexão, nem 465 contra 587, nem o mapeamento de erro de rede. Importa porque SMTP que falha calado é convite que nunca chega.\n- **A cifra da senha não foi testada numa instalação fresca.** Se a chave de cifra não estiver disponível, a tela grava host e remetente e descarta a senha — o modo de falha mais confuso possível.\n- **Nenhuma suíte rodou contra o seu head**, e a prévia de merge não foi compilada. O que eu afirmo acima sobre conflito e sobre arquivos vem de leitura e de `git merge-tree`, não de build.\n- **Não medi se existe gate que pegue o item de marca.** Ele fica de fora por decisão, não porque algum teste o reprove.\n",
   "onde": "conversa"
  },
  {
   "id": 5721399839,
   "autor": "melgarafael",
   "quando": "2026-09-17T21:21:40Z",
   "texto": "Duas correções do meu comentário anterior, as duas de medida, e eu prefiro corrigir do que deixar número errado num texto que alguém vai ler depois.\n\n**1. O motivo do número da migration.** Eu escrevi \"renumerada para 0277, porque os números do seu conjunto já estão ocupados\". Não é isso: as suas cinco migrations **não têm número de sequência** — elas vêm só com o timestamp:\n\n```console\n$ git diff --name-only $(git merge-base origin/main refs/tri/714) refs/tri/714 -- supabase/migrations/\nsupabase/migrations/20260911022958_limitar_nome_sessao_waha.sql\nsupabase/migrations/20260911123411_configuracao_resend_e_ativacao_membros.sql\nsupabase/migrations/20260912004410_smtp_email_configuration.sql\nsupabase/migrations/20260912010000_retira_configuracao_resend.sql\nsupabase/migrations/20260912115014_solicitacoes_de_cadastro.sql\n```\n\nO padrão do repositório é `<timestamp>_<NNNN>_<slug>.sql`, e o `NNNN` é o que dá a ordem legível. A `main` está em `0274` hoje, e o `0277` é um número livre alocado para o recorte. Nada de errado com o seu arquivo — só faltava a metade do nome.\n\n**2. O número de conflitos envelheceu enquanto eu escrevia.** Eu disse \"20 arquivos em conflito\". Medido agora, contra a `main` `c21e0e3ee`:\n\n```console\n$ git merge-tree --write-tree origin/main refs/tri/714 | grep -c \"^CONFLICT\"\n22\n```\n\nSão **22**. A diferença não é sua: a `main` andou três vezes hoje (`a87bc45f8` → `52e387dbc` → `939b83f01` → `c21e0e3ee`), e é exatamente por isso que número sem SHA não compara. Continua valendo o que importa: **nenhum dos arquivos em conflito é do que entra no recorte.**\n\nO resto do comentário anterior segue de pé — inclusive a migration `0253` e a tela `/admin/cadastro`, que eu conferi que existem mesmo na `main` de hoje.",
   "onde": "conversa"
  },
  {
   "id": 5730186261,
   "autor": "melgarafael",
   "quando": "2026-09-18T12:46:22Z",
   "texto": "@betoarts — **o recorte do seu trabalho está no PR #1176, no seu crédito.**\n\nE devo uma explicação desconfortável: **ele estava pronto desde ontem e nunca foi empurrado.** A branch existia no disco, com 34 arquivos e +1656 linhas, e nunca chegou ao remoto. Não foi decisão, foi esquecimento nosso — o trabalho ficou represado enquanto você esperava.\n\n**A decisão do dono já tinha saído** e é o que autoriza o recorte: **SMTP entra e a Resend continua funcionando**, com **chave por instalação, desligada por padrão**. E isso está honrado no código: o singleton nasce vazio, vazio significa \"segue pela Resend\", e as sete `SMTP_*` são `optional().default()` — nenhuma instalação existente muda ao atualizar.\n\n**Medi se ainda fazia sentido**, porque a `main` andou 332 commits desde que você abriu. Faz, inteiro — e a verificação que mais importa: **zero SMTP na `main`**, e todos os emissores de e-mail (convite de equipe, onboarding, export de LGPD, alarme de SLA) passam pelo roteador que o seu PR introduz. Nenhum emissor novo escapou.\n\n**Um defeito que o recorte já carregava, e que não era do merge:** o `typecheck` estava vermelho desde ontem, e a razão é instrutiva — quem mediu rodou `tsc --noEmit` **sem** `-p`, e o script do repositório usa `tsconfig.typecheck.json`, que inclui `tests/`. O verde menor. Consertado sem mudança de runtime.\n\n**O que fica em aberto, declarado:** `lib/database.types.ts` não recebeu `platform_smtp_settings` — regenerar exige banco vivo e o Docker desta máquina está fora. Não quebra nada hoje; é dívida de contrato. E o `test:db` não rodou pelo mesmo motivo.\n\nSe você discordar de algo no recorte, diga — o #1176 é discutível como qualquer PR.",
   "onde": "conversa"
  }
 ],
 "commits:714": [
  {
   "sha": "a04263e44cf8a187cc68eb5efc796890b3257f19",
   "quando": "2026-09-11T11:53:12Z",
   "autor": "betoarts"
  },
  {
   "sha": "559a283ed4c07352245ec5612ed72d6685d1ee65",
   "quando": "2026-09-11T12:14:38Z",
   "autor": "betoarts"
  },
  {
   "sha": "8ca8c6837bddd01b77478fc5eaeece3604528cce",
   "quando": "2026-09-11T12:23:24Z",
   "autor": "betoarts"
  },
  {
   "sha": "838e093df1dfeae538260a9dbf83a4e2bc50f729",
   "quando": "2026-09-11T12:26:10Z",
   "autor": "betoarts"
  },
  {
   "sha": "879dd329f5d2b883917250a4eeba588c70d91e1f",
   "quando": "2026-09-12T02:11:07Z",
   "autor": "betoarts"
  },
  {
   "sha": "c126dad0addcad304dff1a15db672899f0628570",
   "quando": "2026-09-12T02:15:59Z",
   "autor": "betoarts"
  },
  {
   "sha": "48183ec426201b5000c422634dc4eb392a1e9190",
   "quando": "2026-09-12T17:37:38Z",
   "autor": "betoarts"
  },
  {
   "sha": "86fc3a140a5bfa3d822bfdeb1107971a03adae0e",
   "quando": "2026-09-12T18:56:20Z",
   "autor": "betoarts"
  },
  {
   "sha": "ae39797910a851affbecb42c8d3949f2f1b37b8e",
   "quando": "2026-09-17T12:37:59Z",
   "autor": "betoarts"
  },
  {
   "sha": "22b6547dc82cbe49c5fca95675dc909c7f9350f3",
   "quando": "2026-09-17T12:54:03Z",
   "autor": "betoarts"
  },
  {
   "sha": "c3c99696b6ff68a886faadad5a786f76002b77c6",
   "quando": "2026-09-17T13:48:07Z",
   "autor": "betoarts"
  },
  {
   "sha": "8926e752a6868d5091ff212df01f5fbc7394ae3f",
   "quando": "2026-09-17T14:05:44Z",
   "autor": "betoarts"
  },
  {
   "sha": "70bf61ce73d5714fa19c1c7ce7a2700181a9b876",
   "quando": "2026-09-17T14:09:48Z",
   "autor": "betoarts"
  },
  {
   "sha": "0f900a9a104955248e0c29e1c79332c9008d3c0d",
   "quando": "2026-09-17T14:29:30Z",
   "autor": "betoarts"
  },
  {
   "sha": "783a0a9dcca9eb5265ea33b334fa503c7d1318b2",
   "quando": "2026-09-17T15:28:12Z",
   "autor": "betoarts"
  },
  {
   "sha": "dd48f650e0cc7b32a8c00a05118e48c1389ff619",
   "quando": "2026-09-17T16:15:18Z",
   "autor": "betoarts"
  },
  {
   "sha": "6d20197773212a0f05f2deddf968fe120020f1fc",
   "quando": "2026-09-17T17:16:57Z",
   "autor": "betoarts"
  },
  {
   "sha": "e5d30e62f1140f08b5cbb3431d8d310aef41aa89",
   "quando": "2026-09-17T17:47:40Z",
   "autor": "betoarts"
  },
  {
   "sha": "606f11262a600649d35763b42c5575faa5fdb020",
   "quando": "2026-09-17T18:03:20Z",
   "autor": "betoarts"
  },
  {
   "sha": "836952ec57d472adbf2722bccc8a6d134942dcf0",
   "quando": "2026-09-17T18:32:13Z",
   "autor": "betoarts"
  }
 ],
 "a_frente:pr-714": 0,
 "a_frente:triagem/714-smtp-como-opcao": 0,
 "pr:928": {
  "author": {
   "id": "MDQ6VXNlcjY0NTM0MDkw",
   "is_bot": false,
   "login": "cabindaferreira",
   "name": "João Ferreira"
  },
  "createdAt": "2026-09-15T19:02:54Z",
  "headRefName": "fix/pdf-base-conhecimento-napi-rs-canvas",
  "headRefOid": "8be94cd9ca40210bca270b68ffb56955d5df3cbe",
  "number": 928,
  "state": "OPEN"
 },
 "comentarios:928": [
  {
   "id": 5686449214,
   "autor": "vercel[bot]",
   "quando": "2026-09-15T19:02:58Z",
   "texto": "@cabindaferreira is attempting to deploy a commit to the **rafael-maudibrasil's projects** Team on [Vercel](https://vercel.com).\n\nA member of the Team first needs to [authorize it](https://vercel.com/git/authorize?team=rafael-maudibrasil's%20projects&slug=rafael-maudibrasils-projects&teamId=team_CsA6wVAM2V1CcrKPsDo6VGHO&type=github&job=%7B%22headInfo%22%3A%7B%22sha%22%3A%228be94cd9ca40210bca270b68ffb56955d5df3cbe%22%7D%2C%22id%22%3A%22QmbD7LbyEBu13tR2PwHfTvTSs8oWmX2LZUXE3dBjBBYkcv%22%2C%22org%22%3A%22melgarafael%22%2C%22prId%22%3A928%2C%22repo%22%3A%22DeskcommCRM%22%7D).\n\n",
   "onde": "conversa"
  },
  {
   "id": 5686449553,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-15T19:02:59Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / Security Evidence:8be94cd9ca40210bca270b68ffb56955d5df3cbe -->\n## ECC Tools / Security Evidence\n\nCommit: `8be94cd9ca40210bca270b68ffb56955d5df3cbe`\n\n**Security scanner evidence required** (action_required)\n\nDetected 1 security-sensitive predictive risk signal(s) without scanner evidence.\n\nMode: enforce\n\nFindings:\n- **Security-sensitive changes may ship without scanner evidence**: The PR touches billing, secrets, auth, webhooks, agent, or CI-sensitive surfaces without adding obvious security scanner, code scanning, or security-focused validation evidence. (3 security-sensitive paths changed; 0 security scanner or security-focused validation artifacts changed)\n\nTouched security-sensitive paths:\n- `app/api/v1/webhooks/in/[token]/route.ts`\n- `lib/mcp/tools/leads.ts`\n\nExpected evidence:\n- Security scanner, code scanning, secret scanning, dependency/security review, or focused security regression output.\n- SARIF/code-scanning upload or equivalent pass/fail gate for the changed surface.\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5686449833,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-15T19:03:00Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / PR Risk Taxonomy:8be94cd9ca40210bca270b68ffb56955d5df3cbe -->\n## ECC Tools / PR Risk Taxonomy\n\nCommit: `8be94cd9ca40210bca270b68ffb56955d5df3cbe`\n\n**PR taxonomy review recommended** (neutral)\n\nDetected 3 PR taxonomy bucket(s): Security Evidence, CI/CD Recommendation, Cost/Token Risk.\n\nScanned 75 changed file(s).\n\n\n\nRoadmap taxonomy buckets:\n\n\n\n### Security Evidence\nSecurity-sensitive changes should carry explicit scanner, code-scanning, or focused regression evidence.\n\nSignals:\n- Security-sensitive changes may ship without scanner evidence\n- 1 security-sensitive path(s) changed\n\nPaths:\n- `app/api/v1/webhooks/in/[token]/route.ts`\n\n### CI/CD Recommendation\nCI, dependency, coverage, and contract signals should be routed into follow-up checks or verification work.\n\nSignals:\n- API implementation changes may ship without contract artifact updates\n- Runtime config changes may ship without example or template updates\n- Async job or webhook changes may ship without reliability coverage\n- 10 CI or workflow path(s) changed\n\nPaths:\n- `app/api/v1/products/route.test.ts`\n- `lib/ai/anonymize/index.test.ts`\n- `lib/contacts/csv.test.ts`\n- `lib/schemas/contacts.test.ts`\n- `tests/e2e/moeda-da-organizacao.spec.ts`\n- `tests/unit/documento-ingest-repassa-erro-do-pdf.test.ts`\n- `tests/unit/i18n-a-data-segue-o-idioma.test.ts`\n- `tests/unit/lgpd-pdf-controlador.test.tsx`\n\n### Cost/Token Risk\nAI routing, usage, and token-budget changes should include budget or usage-limit evidence.\n\nSignals:\n- 8 cost/token path(s) changed\n\nPaths:\n- `app/api/v1/ai/knowledge/sources/upload/route.ts`\n- `components/ai/NovoMaterialDialog.tsx`\n- `lib/ai/anonymize/index.test.ts`\n- `lib/ai/anonymize/index.ts`\n- `lib/ai/rag/extractors/csv.ts`\n- `lib/ai/rag/extractors/pdf.ts`\n- `lib/ai/rag/ingest/documento.ts`\n- `lib/ai/rag/tipos-de-fonte.ts`\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5686450156,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-15T19:03:01Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / Reference Set Readiness:8be94cd9ca40210bca270b68ffb56955d5df3cbe -->\n## ECC Tools / Reference Set Readiness\n\nCommit: `8be94cd9ca40210bca270b68ffb56955d5df3cbe`\n\n**Reference set readiness gaps detected** (neutral)\n\nReference evidence present for 1/7 areas (14%) across 75 changed file(s).\n\nThis check is based on files changed in this PR. Repository-level readiness is still reported by `/ecc-tools analyze` comments and generated manifests.\n\n| Area | Status | Evidence / Next Step |\n| --- | --- | --- |\n| Deep analyzer corpus | Missing | Add analyzer fixture, golden, benchmark, or reference-set files that can catch analyzer regressions. |\n| RAG/evaluator comparison | Present | `tests/unit/rag-csv-extractor.test.ts` |\n| PR salvage/review corpus | Missing | Add stale-PR, review-thread, reopen-flow, or salvage reference cases for queue cleanup automation. |\n| Discussion triage corpus | Missing | Add public discussion triage fixtures, golden cases, or reference sets for informational, answered, and no-response classifications. |\n| Harness compatibility | Missing | Add cross-harness, adapter-compliance, or harness-audit evidence for Claude, Codex, OpenCode, Zed, dmux, and agent surfaces. |\n| Security evidence | Missing | Attach security evidence such as SBOMs, SARIF, audit reports, or AgentShield evidence packs. |\n| CI failure-mode evidence | Missing | Add captured CI failure logs, dry-run fixtures, or troubleshooting docs for common workflow failure modes. |\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5686450694,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-15T19:03:03Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / Hosted Promotion Readiness:8be94cd9ca40210bca270b68ffb56955d5df3cbe -->\n## ECC Tools / Hosted Promotion Readiness\n\nCommit: `8be94cd9ca40210bca270b68ffb56955d5df3cbe`\n\n**Hosted promotion readiness passed** (success)\n\nNo hosted promotion evidence gaps detected across 75 changed file(s); 0 corpus scenarios had matching evidence.\n\nThis check compares PR file changes against the evaluator/RAG promotion corpus in `src/analyzers/fixtures/evaluator-rag-corpus.ts`.\nHosted output scoring inspected 0 completed cached hosted job results.\n\nNo evaluator corpus scenarios matched this PR.\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5686450844,
   "autor": "github-actions[bot]",
   "quando": "2026-09-15T19:03:03Z",
   "texto": "<!-- triagem-de-pr:v1:pass=1 -->\nRecebido, @cabindaferreira — obrigado por isto.\n\nDuas coisas que vão parecer erro seu e não são:\n\n- O check **Vercel** vermelho (\"Authorization required to deploy\") é esperado em PR de fork. A\n  `main` faz deploy de produção e a Vercel se recusa a construir código de fora, o que está\n  certo. **Ele não entra no gate de merge.**\n- No primeiro PR de quem nunca contribuiu aqui, os workflows ficam **parados esperando\n  liberação** — política do GitHub, não sua. Enquanto isso o PR parece não ter check nenhum\n  (nem o `gh pr checks` mostra os que estão nesse estado). Quem tria libera; você não precisa\n  fazer nada.\n\nUm mantenedor vai revisar de verdade — rodando os gates e reproduzindo o comportamento, não só\nlendo o diff — e responde aqui **em até um dia útil**, com a medição junto, nunca com um \"acho\nque\".\n\nEsta mensagem é automática e não diz nada sobre o seu PR: ela é sobre o processo. O que vem\ndepois é pessoa.\n",
   "onde": "conversa"
  },
  {
   "id": 5705344270,
   "autor": "melgarafael",
   "quando": "2026-09-16T22:15:16Z",
   "texto": "<!-- triagem-de-pr:v1:pass=10 -->\nOlá, @cabindaferreira! Obrigado pelo #928, e desculpe a demora: a acolhida prometia resposta em um dia útil, e esse prazo passou.\n\nO PR junta quatro coisas de natureza diferente, então a resposta vai por partes.\n\n### 1. PDF na imagem (`Dockerfile` + terceiro glob no `next.config.ts`)\n\nO erro que você viu (`DOMMatrix is not defined`) é real **na versão do pdf.js em que a sua branch está**, e medimos por que ele não aparece na versão atual:\n\n- **A sua branch trava o `pdfjs-dist@6.2.108`** (`pnpm-lock.yaml:4530` do PR; a base do PR está 908 commits atrás). Nessa versão, o módulo cria um `DOMMatrix` **no import** (`const SCALE_MATRIX = new DOMMatrix();`, `legacy/build/pdf.mjs:16713`), e sem o `@napi-rs/canvas` a extração quebra antes de ler o arquivo.\n- **A `main` está no `6.3.289`**, e nessa versão o `DOMMatrix` só é usado para desenhar a página. Na imagem publicada **`ghcr.io/melgarafael/deskcommcrm:1.29.0`** (digest `sha256:aaca272073f6…`):\n  - o seu diagnóstico de resolução procede: carregando o `@napi-rs/canvas` a partir do caminho que o pdf.js empacotado usa (`/app/node_modules/.pnpm/pdfjs-dist@6.3.289/node_modules/pdfjs-dist/legacy/build/pdf.mjs`), o resultado é **`MODULE_NOT_FOUND`**;\n  - mas, no chunk do pdf.js da imagem, a única construção de `DOMMatrix` sem argumento é preguiçosa (`#rM??=new DOMMatrix`, dentro do traçado de linha, não no topo do módulo), e a mesma biblioteca `6.3.289`, rodada no Node da imagem (v22.23.2) **sem** o canvas, **extraiu o texto** do nosso PDF de teste com três avisos (`Cannot polyfill DOMMatrix`, `Path2D` e `standardFontDataUrl`).\n\n**Não medido:** a extração pelo chunk do Next (rodamos a biblioteca solta), PDFs além do nosso arquivo de teste, e a imagem do **worker**, que é quem lê o PDF que chega pelo WhatsApp.\n\nPor isso a pergunta: **o erro apareceu numa imagem oficial (qual versão?) ou numa imagem construída da sua branch?** Se foi numa oficial de agora, mande a mensagem exata e a gente reproduz. Nesse caso, o conserto do `Dockerfile` entra junto com um passo na verificação da imagem que carregue o canvas de verdade. Se foi na sua branch, a atualização para a `main` resolve, e os links simbólicos só calariam os avisos.\n\nOs commits `b78eee53` e `4e4f6612` repetem o que já está na `main`: o seu #758 (`0a550df61`, v1.22.0) e um ajuste nosso por cima (`263e734d6`). No recorte eles somem, junto com o fragmento que repete aquele anúncio.\n\n### 2. A mensagem de erro do PDF (`b1a44675`): entra\n\nParar de dizer \"o PDF é só imagem escaneada\" quando o defeito é da instalação está certo. Um ajuste nosso por cima: a mensagem que agora chega à tela manda rodar `pnpm install`, e quem usa a imagem Docker não tem como fazer isso. O texto passa a dizer o que essa pessoa consegue fazer.\n\n### 3. CSV no acervo (`ff0fe151`): entra\n\nÉ genérico e útil para qualquer nicho. Dois ajustes mecânicos, feitos por nós:\n- o número `0218` da migration já está ocupado na `main`, então ela é renumerada;\n- a mensagem do Excel na rota de upload passa por `t()`, como a `main` já faz ali.\n\n### 4. A adaptação para Angola (`c1909035`): não entra como está\n\nA adaptação é boa para a sua instalação. O problema é que o PR a aplica a **todas** as instalações:\n- `MOEDA_PADRAO = \"AOA\"` e `FUSO_PADRAO = \"Africa/Luanda\"`, com as migrations 0219/0220 no apêndice do baseline: na próxima atualização, **toda VPS brasileira** passa a criar organização, lead e pedido em Kz, e agenda em Luanda;\n- o campo `cpf` passa a ser validado por `isValidNif` (`lib/schemas/contacts.ts:19,59`, `/^\\d{9,10}$/`), então **um CPF válido, como `52998224725`, que a `main` testa como válido, passa a ser recusado** com \"NIF inválido\";\n- a página de privacidade e o **PDF de acesso aos dados** passam a citar a Lei 22/11 em toda instalação. Esse PDF responde a um direito legal do titular, então a lei que ele cita não pode mudar para quem está no Brasil.\n\n**O que dessa parte entra no recorte, com a sua autoria**, porque não muda o padrão de ninguém:\n- `AOA` em `MOEDAS_SERVIDAS` e `Africa/Luanda` nos fusos oferecidos;\n- o padrão do NIF no anonimizador, que fecha um vazamento real de dado pessoal para a IA;\n- o total da coluna do funil usando a moeda dos leads (`StageColumn.tsx`).\n\nUm aviso honesto: só isso não basta para o seu funil sair em Kz. Na `main`, o lead nasce com `\"BRL\"` fixo (`components/kanban/NewLeadDialog.tsx:127`, `app/api/v1/leads/_handler.ts:317`), e a moeda da organização só é usada nos produtos. É um defeito da `main` para qualquer moeda que não seja o real, e ele entra no recorte usando a moeda da organização.\n\nDocumento fiscal e lei **por país** (CPF ou NIF no contato, LGPD ou Lei 22/11 no texto legal) é pergunta de produto, e foi para o mantenedor. **Não estou recusando: quem decide isso não sou eu.** Até a resposta, o #928 fica aberto com essa parte como destino.\n\n### Como segue\n\nA gente monta o recorte (itens 2, 3 e o que entra do 4) numa branch nossa. Cada commit que é trabalho seu sai com você como autor. Você não precisa refazer nada. Do seu lado, só a pergunta do item 1.\n",
   "onde": "conversa"
  },
  {
   "id": 5706016549,
   "autor": "melgarafael",
   "quando": "2026-09-16T23:26:27Z",
   "texto": "<!-- triagem-de-pr:v1:pass=10:decisao-do-dono -->\n@cabindaferreira, voltando com a decisão do mantenedor sobre a parte de país.\n\n**A resposta foi sim — e foi maior que o seu PR.** Documento fiscal e lei de proteção de dados passam a ser **por organização**: cada organização escolhe o país dela e vê o documento, a lei e o prazo daquele país, inclusive quando duas organizações de países diferentes dividem a mesma instalação. Isso virou uma issue de desenho própria, com escopo, riscos e direções de teste: **#1033**.\n\n### O que entra JÁ, no recorte, com a sua autoria\n\nCinco coisas, e três delas vieram da sua parte de Angola:\n\n1. **CSV como material do acervo** (o seu `ff0fe151`), com a migration renumerada e a mensagem do Excel passando por `t()`;\n2. **a mensagem de erro do PDF que para de culpar o arquivo** (o seu `b1a44675`), com a redação ajustada para quem roda a imagem Docker;\n3. **`AOA` na lista de moedas servidas** — hoje `lib/money.ts:223` serve só `[\"BRL\",\"MXN\",\"USD\"]`, então você não consegue escolher Kz na tela;\n4. **`Africa/Luanda` nos fusos oferecidos** — hoje `lib/tempo/fusos.ts:33` e `app/app/settings/tenant/_form.tsx:25-31` não têm Luanda (`git grep -in 'Luanda' origin/main -- lib app` devolve zero);\n5. **o padrão do NIF no filtro que esconde dado pessoal antes de mandar conversa para a IA.** Você achou um vazamento real e nós remedimos, rodando as regex da `main` no Node: `003862011LA042` e `541712345` passam **intactos** para o modelo; `52998224725` vira `[cpf]` (controle). Esse conserto não espera a issue.\n\nJunto vai o total da coluna do funil respeitando a moeda dos leads (`StageColumn.tsx`), que é defeito da `main` para qualquer moeda fora do real.\n\nUm ajuste, também medido: o comentário do anonimizador afirma que o NIF só numérico \"não vaza\" porque cai no padrão de telefone. Para 9 dígitos isso não se confirma — `541712345` passa sem redação, porque o padrão de telefone exige 10 ou mais. A frase é corrigida junto com o conserto.\n\n### O que a issue #1033 leva\n\nA **generalização por país**: onde o país mora (coluna na organização, `null` = Brasil), um resolvedor único no formato do que já existe (`lib/legal/operador.ts`), o validador de documento vindo do perfil, a lei citada no PDF e na página de privacidade, e o **prazo** — que o seu PR não tocava e nós achamos medindo: o contador de dias úteis dos pedidos de privacidade usa feriado brasileiro por escrito (`lib/lgpd/sla.ts`, com Tiradentes e Carnaval listados até 2030). Trocar a lei sem trocar o calendário entregaria um documento prometendo prazo que o sistema não cumpre.\n\nUma regra que ficou registrada na issue veio de você, do comentário do seu validador: **não inventar dígito verificador** para documento cujo checksum não é público. Vale para todo país novo.\n\n### O que continua fora\n\nMudar o padrão de moeda, fuso, documento e lei de **todas** as instalações. Não é recusa do seu caso: as migrations 0219/0220 chegariam por atualização a toda VPS brasileira, e o PDF de acesso aos dados responde a um direito legal do titular. A issue resolve o seu caso sem esse preço.\n\nDo seu lado, continua de pé só a pergunta do item 1 do parecer anterior: o erro de PDF apareceu numa imagem oficial (qual versão?) ou numa imagem construída da sua branch?\n\n**Não medido:** nenhum gate rodou neste PR (ele está em conflito com a `main`, e sem ref de merge o CI não é criado); nada foi executado em banco nem em tela.\n",
   "onde": "conversa"
  },
  {
   "id": 5730186451,
   "autor": "melgarafael",
   "quando": "2026-09-18T12:46:23Z",
   "texto": "@cabindaferreira — **o recorte do seu trabalho está no PR #1177, no seu crédito.**\n\nPrimeiro a parte que é falha nossa: **ele estava pronto desde ontem e nunca foi empurrado.** A branch existia no disco e não chegou ao remoto. O trabalho ficou represado enquanto você esperava.\n\n**A primeira coisa que eu mandei medir foi se ele ainda fazia sentido**, porque a decisão do dono sobre o seu PR virou a issue #1033, e ela **já foi entregue** hoje por outro PR. A resposta é que **não virou redundante**: aquela entrega trouxe o *encaixe* de localização por organização; o seu PR é o **conteúdo**. Medido tema a tema, com controle em cada sonda:\n\n| o que você traz | ainda falta na `main`? |\n|---|---|\n| CSV como material de conhecimento (251 linhas) | **sim** — a pasta de extratores só tem markdown e PDF |\n| Funil respeita a moeda da organização (334 linhas) | **sim** — ainda há `formatBRL` e `\"BRL\"` em duro em duas telas |\n| Kwanza e o fuso de Luanda (49 linhas) | **sim** — `AOA` e `Luanda` têm zero ocorrências |\n\n**78% do recorte continua valendo por si**, e ele já usa o helper canônico da `main` em vez de duplicar.\n\n**Um commit seu virou redundante, e vale contar como:** o que repassava a causa do erro de PDF à tela. A `main` consertou **o mesmo defeito** um dia depois, com remédio diferente — uma frase para a pessoa, a causa para o log —, medido numa instalação real. Duas pessoas acharam o mesmo defeito sem combinar; isso confirma que ele era real, e a versão da `main` prevalece só por ter chegado primeiro.\n\n**Um item ficou de fora e eu não vou deixar isso calado:** o **padrão do BI/NIF angolano no anonimizador**. Ele **não** é redundante — o cabeçalho do próprio arquivo na `main` diz que esse padrão deveria estar lá. Saiu porque a API do anonimizador mudou e o teste que o acompanhava exercitava a versão antiga; entregá-lo assim afirmaria algo falso, inclusive numa nota de release. **Volta como PR próprio, contra a API atual.**\n\nSe discordar de algum recorte, diga — o #1177 é discutível como qualquer PR.",
   "onde": "conversa"
  }
 ],
 "commits:928": [
  {
   "sha": "b78eee539da3e5939f741d578cd683fdbbbb23c7",
   "quando": "2026-09-14T14:26:37Z",
   "autor": "cabindaferreira"
  },
  {
   "sha": "ff0fe151fcb43a960941afff3c9069c384412f32",
   "quando": "2026-09-15T13:27:18Z",
   "autor": "cabindaferreira"
  },
  {
   "sha": "b1a446756d10ef4c139d2c23ce1fb0847b3d5f09",
   "quando": "2026-09-15T13:33:32Z",
   "autor": "cabindaferreira"
  },
  {
   "sha": "c1909035629dc494b3f7df394fe1d32634ebe131",
   "quando": "2026-09-15T15:43:12Z",
   "autor": "cabindaferreira"
  },
  {
   "sha": "4e4f6612ea2a77472a9f4f606ca61d47a648f83e",
   "quando": "2026-09-15T15:56:18Z",
   "autor": "cabindaferreira"
  },
  {
   "sha": "8be94cd9ca40210bca270b68ffb56955d5df3cbe",
   "quando": "2026-09-15T17:54:38Z",
   "autor": "cabindaferreira"
  }
 ],
 "a_frente:triagem/recorte-928": 0,
 "pr:1025": {
  "author": {
   "id": "U_kgDOErCIIw",
   "is_bot": false,
   "login": "automatikpg-ux",
   "name": ""
  },
  "createdAt": "2026-09-16T22:38:26Z",
  "headRefName": "google-ads-conversion-upload",
  "headRefOid": "d217af8f15920f682219da706ed05958bcdef33a",
  "number": 1025,
  "state": "OPEN"
 },
 "comentarios:1025": [
  {
   "id": 5705562435,
   "autor": "vercel[bot]",
   "quando": "2026-09-16T22:38:30Z",
   "texto": "@melgarafael is attempting to deploy a commit to the **rafael-maudibrasil's projects** Team on [Vercel](https://vercel.com).\n\nA member of the Team first needs to [authorize it](https://vercel.com/git/authorize?team=rafael-maudibrasil's%20projects&slug=rafael-maudibrasils-projects&teamId=team_CsA6wVAM2V1CcrKPsDo6VGHO&type=github&job=%7B%22headInfo%22%3A%7B%22sha%22%3A%22d217af8f15920f682219da706ed05958bcdef33a%22%7D%2C%22id%22%3A%22QmbaaJMM73RvEvFWUhd4FieJzzGcGy5ZuUqe1tNis81SsJ%22%2C%22org%22%3A%22melgarafael%22%2C%22prId%22%3A1025%2C%22repo%22%3A%22DeskcommCRM%22%7D).\n\n",
   "onde": "conversa"
  },
  {
   "id": 5705562669,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-16T22:38:32Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / Security Evidence:d217af8f15920f682219da706ed05958bcdef33a -->\n## ECC Tools / Security Evidence\n\nCommit: `d217af8f15920f682219da706ed05958bcdef33a`\n\n**Security scanner evidence required** (action_required)\n\nDetected 1 security-sensitive predictive risk signal(s) without scanner evidence.\n\nMode: enforce\n\nFindings:\n- **Security-sensitive changes may ship without scanner evidence**: The PR touches billing, secrets, auth, webhooks, agent, or CI-sensitive surfaces without adding obvious security scanner, code scanning, or security-focused validation evidence. (3 security-sensitive paths changed; 0 security scanner or security-focused validation artifacts changed)\n\nTouched security-sensitive paths:\n- `lib/auth/public-paths.ts`\n- `lib/plataformas-de-anuncio/google/oauth.ts`\n\nExpected evidence:\n- Security scanner, code scanning, secret scanning, dependency/security review, or focused security regression output.\n- SARIF/code-scanning upload or equivalent pass/fail gate for the changed surface.\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5705562814,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-16T22:38:33Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / PR Risk Taxonomy:d217af8f15920f682219da706ed05958bcdef33a -->\n## ECC Tools / PR Risk Taxonomy\n\nCommit: `d217af8f15920f682219da706ed05958bcdef33a`\n\n**PR taxonomy review recommended** (neutral)\n\nDetected 3 PR taxonomy bucket(s): Security Evidence, CI/CD Recommendation, Cost/Token Risk.\n\nScanned 25 changed file(s).\n\n\n\nRoadmap taxonomy buckets:\n\n\n\n### Security Evidence\nSecurity-sensitive changes should carry explicit scanner, code-scanning, or focused regression evidence.\n\nSignals:\n- Auth or permission changes may ship without security regression coverage\n- Security-sensitive changes may ship without scanner evidence\n- 2 security-sensitive path(s) changed\n\nPaths:\n- `lib/auth/public-paths.ts`\n- `lib/plataformas-de-anuncio/google/token.ts`\n\n### CI/CD Recommendation\nCI, dependency, coverage, and contract signals should be routed into follow-up checks or verification work.\n\nSignals:\n- API contract changes may ship without integration coverage\n- API implementation changes may ship without contract artifact updates\n- User-facing UI changes may ship without browser coverage\n- 2 CI or workflow path(s) changed\n\nPaths:\n- `tests/unit/conversoes-de-anuncio.test.ts`\n- `tests/unit/google-ads-conversoes.test.ts`\n- `app/actions/settings/updateGoogleAdsConnection.ts`\n- `app/api/v1/plataformas-de-anuncio/google/callback/route.ts`\n- `app/api/v1/plataformas-de-anuncio/google/connect/route.ts`\n- `app/app/settings/conversoes/_formGoogle.tsx`\n- `app/app/settings/conversoes/page.tsx`\n- `lib/auth/public-paths.ts`\n\n### Cost/Token Risk\nAI routing, usage, and token-budget changes should include budget or usage-limit evidence.\n\nSignals:\n- Cost or token-risk changes may ship without budget evidence\n- 1 cost/token path(s) changed\n\nPaths:\n- `lib/plataformas-de-anuncio/google/token.ts`\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5705562976,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-16T22:38:34Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / Reference Set Readiness:d217af8f15920f682219da706ed05958bcdef33a -->\n## ECC Tools / Reference Set Readiness\n\nCommit: `d217af8f15920f682219da706ed05958bcdef33a`\n\n**Reference set readiness gaps detected** (neutral)\n\nReference evidence present for 0/7 areas (0%) across 25 changed file(s).\n\nThis check is based on files changed in this PR. Repository-level readiness is still reported by `/ecc-tools analyze` comments and generated manifests.\n\n| Area | Status | Evidence / Next Step |\n| --- | --- | --- |\n| Deep analyzer corpus | Missing | Add analyzer fixture, golden, benchmark, or reference-set files that can catch analyzer regressions. |\n| RAG/evaluator comparison | Missing | Add retrieval or evaluator reference-set comparison fixtures with expected ranking behavior. |\n| PR salvage/review corpus | Missing | Add stale-PR, review-thread, reopen-flow, or salvage reference cases for queue cleanup automation. |\n| Discussion triage corpus | Missing | Add public discussion triage fixtures, golden cases, or reference sets for informational, answered, and no-response classifications. |\n| Harness compatibility | Missing | Add cross-harness, adapter-compliance, or harness-audit evidence for Claude, Codex, OpenCode, Zed, dmux, and agent surfaces. |\n| Security evidence | Missing | Attach security evidence such as SBOMs, SARIF, audit reports, or AgentShield evidence packs. |\n| CI failure-mode evidence | Missing | Add captured CI failure logs, dry-run fixtures, or troubleshooting docs for common workflow failure modes. |\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5705563181,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-16T22:38:35Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / Hosted Promotion Readiness:d217af8f15920f682219da706ed05958bcdef33a -->\n## ECC Tools / Hosted Promotion Readiness\n\nCommit: `d217af8f15920f682219da706ed05958bcdef33a`\n\n**Hosted promotion readiness passed** (success)\n\nNo hosted promotion evidence gaps detected across 25 changed file(s); 0 corpus scenarios had matching evidence.\n\nThis check compares PR file changes against the evaluator/RAG promotion corpus in `src/analyzers/fixtures/evaluator-rag-corpus.ts`.\nHosted output scoring inspected 0 completed cached hosted job results.\n\nNo evaluator corpus scenarios matched this PR.\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5705595173,
   "autor": "github-actions[bot]",
   "quando": "2026-09-16T22:42:15Z",
   "texto": "<!-- triagem-de-pr:v1:pass=1 -->\nRecebido, @automatikpg-ux — obrigado por isto.\n\nDuas coisas que vão parecer erro seu e não são:\n\n- O check **Vercel** vermelho (\"Authorization required to deploy\") é esperado em PR de fork. A\n  `main` faz deploy de produção e a Vercel se recusa a construir código de fora, o que está\n  certo. **Ele não entra no gate de merge.**\n- No primeiro PR de quem nunca contribuiu aqui, os workflows ficam **parados esperando\n  liberação** — política do GitHub, não sua. Enquanto isso o PR parece não ter check nenhum\n  (nem o `gh pr checks` mostra os que estão nesse estado). Quem tria libera; você não precisa\n  fazer nada.\n\nUm mantenedor vai revisar de verdade — rodando os gates e reproduzindo o comportamento, não só\nlendo o diff — e responde aqui **em até um dia útil**, com a medição junto, nunca com um \"acho\nque\".\n\nEsta mensagem é automática e não diz nada sobre o seu PR: ela é sobre o processo. O que vem\ndepois é pessoa.\n",
   "onde": "conversa"
  },
  {
   "id": 5705691683,
   "autor": "automatikpg-ux",
   "quando": "2026-09-16T22:53:43Z",
   "texto": "Pronto pra revisão — checklist completo no corpo do PR: `typecheck`, `lint`, testes unitários da feature + i18n, e `pnpm test:db` (baseline install/update idempotente + 1692 testes de invariantes, incluindo isolamento RLS) todos verdes.",
   "onde": "conversa"
  },
  {
   "id": 5724757538,
   "autor": "melgarafael",
   "quando": "2026-09-18T03:33:02Z",
   "texto": "<!-- triagem-de-pr:v1:pass=10 -->\n**Veredito: reparo delimitado.** A arquitetura está certa — este é um irmão fiel de `lib/agenda/google/*`, e as três armadilhas do OAuth do Google estão cobertas com teste cada uma. São cinco consertos, e só um deles é conceitual: a versão da API fixada no transporte está desativada, então nenhuma conversão sairia.\n\n### Comece por aqui: o PR está conflitando, e isso desliga o CI\n\n```console\n$ gh pr view 1025 --json mergeable,mergeStateStatus\nCONFLICTING / DIRTY\n\n$ git merge-tree --write-tree --name-only origin/main d217af8f\nsupabase/baseline.sql\n```\n\nUm arquivo só, e é o conflito mais previsível do repo: você acrescentou seu bloco no fim do apêndice do `baseline.sql` e a `main` acrescentou os dela no mesmo lugar. Resolve mantendo **os dois** blocos (o apêndice é aditivo e idempotente por construção — nada ali se substitui).\n\nIsto vem primeiro por um motivo prático: enquanto o PR conflita, o GitHub não consegue calcular o merge ref, e sem merge ref o run do `pull_request` **não nasce**. Se você empurrar os outros consertos antes de resolver o conflito, não vai aparecer CI nenhum — e o silêncio lê como \"ainda rodando\". Faça `git fetch origin && git merge origin/main` primeiro.\n\n### O que NÃO é seu\n\n- O **Vercel** vermelho é política de fork, como o recado automático já disse. Não entra no gate.\n- **O número da migration virou conflito e você não errou nada.** Você escolheu `0263` e ele ERA livre — e a prova disso não é minha, é do seu próprio CI. O `verify` tem um step que mede colisão de número **contra a `main` do remoto, com fetch fresco na hora**:\n\n  ```console\n  $ gh run view 35158654348 --log | grep -a \"migration(ões) nova\"\n  OK — 1 migration(ões) nova(s) com NNNN/timestamp livres contra 'origin/main'.\n  ```\n\n  Esse OK é de 2026-09-16T22:44:29Z e é uma medição contra a main viva daquele instante, não contra o seu fork point. Depois disso a `main` andou e tomou o número:\n\n  ```console\n  $ git rev-list --count e1f5e7ac..origin/main\n  425\n  $ git ls-tree --name-only origin/main -- supabase/migrations/ | grep _0263_\n  supabase/migrations/20260915193743_0263_etapa_de_perda_grava_o_motivo.sql\n  ```\n\n  Renumere para **acima do máximo**, e troque o timestamp junto (renumerar só o NNNN é o que fabrica colisão de timestamp):\n\n  ```console\n  $ git ls-tree --name-only origin/main -- supabase/migrations/ | grep -oE '_[0-9]{4}_' | tr -d _ | sort -n | tail -1\n  0274\n  ```\n\n  0265–0270 e 0272 estão vazios, mas podem estar segurados por outros PRs abertos — `0275` é o seguro. Renumere nos três lugares da tripla (arquivo, rótulo do bloco no `baseline.sql`, linha do MANIFEST). Depois do merge da `main`, esse mesmo step vai conferir para você e, se colidir, imprime o próximo livre.\n\n### O que segura o merge: `VERSAO_DA_API = \"v17\"` não existe mais\n\n`lib/plataformas-de-anuncio/google/conversions.ts:54` fixa `v17`. Medido hoje, com controle negativo (`v99`) para provar que a sonda distingue:\n\n```console\n$ for v in v17 v21 v22 v26 v27 v99; do\n    echo \"$v -> $(curl -s -o /dev/null -w '%{http_code}' -m 12 -X POST \\\n      \"https://googleads.googleapis.com/$v/customers/1234567890:uploadClickConversions\" \\\n      -H 'content-type: application/json' -d '{}')\"\n  done\nv17 -> 404\nv21 -> 404\nv22 -> 401\nv26 -> 401\nv27 -> 404\nv99 -> 404\n```\n\nO `401 UNAUTHENTICATED` é a API respondendo \"falta credencial\" — o caminho existe. O `404` do `v17` vem com corpo **HTML** (`<title>Error 404 (Not Found)!!1</title>`), ou seja a URL não chega à API. Janela viva hoje: **v22 a v26**. Não afirmo quando o `v17` saiu nem qual é a política de janela do Google — medi o estado de hoje.\n\nIsso tem duas consequências no seu caminho de erro, e a segunda sobrevive ao bump. Segui a cadeia até o efeito visível, não só até a função:\n\n1. `classificaErro(404, …)` → 404 não é `>= 500`, não é `RESOURCE_EXHAUSTED`/`UNAVAILABLE`/429 → **`permanente`**. E `permanente`, em `lib/conversoes/envio.handler.ts`, cai em `registra(\"error\", \"recusado_pela_plataforma\", resultado.detalhe)` e retorna sem `retry_at`. Toda venda entra no livro-razão como erro definitivo, sem nova tentativa.\n2. O corpo é HTML, então `JSON.parse` lança e o `catch` faz `corpoErro = { message: texto.slice(0, 400) }`. Esse `detalhe` é o que vai para o livro-razão e aparece na tela, em \"Vendas que não foram reportadas\" — **400 caracteres de HTML do Google como explicação ao operador.** Mesmo com a versão certa, resposta não-JSON merece um motivo legível em vez do blob.\n\nUm detalhe sobre o bump: a casa guarda versão de provider num módulo só, com catraca — `lib/graph-version.ts` mais `tests/unit/versao-da-graph-num-lugar-so.test.ts`, que reprova o segundo literal. Essa catraca cobre só `graph.facebook.com`, então o seu `\"v17\"` inline passou por ela sem ser visto (`git grep -n v17 d217af8f -- lib tests` acha só as suas duas linhas em `conversions.ts`). Se você puser a versão do Google no mesmo formato, o próximo bump fica de uma linha por construção.\n\nE o que eu não consigo verificar daqui: **só você tem como provar que o payload de `uploadClickConversions` ainda serve em v22+** — não temos developer token do Google Ads, e eu não exercitei a API viva. Formato do corpo, `conversionValue` em unidade de moeda (`valorCentavos / 100`) e a dedup por `orderId` eu li, não provei. Se você rodar um envio real contra a versão nova e colar o resultado, isso fecha o único item que a nossa máquina não alcança.\n\n### O `verify` vermelho é seu, e é uma linha\n\n```\nFAIL tests/unit/branding.test.ts > catraca de host de terceiro no código que embarca\n  googleads.googleapis.com  →  lib/plataformas-de-anuncio/google/conversions.ts\n  expected [ 'googleads.googleapis.com' ] to deeply equal []\n```\n\nA catraca pede que todo host de fornecedor seja declarado em `HOSTS_DECLARADOS` com categoria e motivo — `graph.facebook.com`, `oauth2.googleapis.com` e `accounts.google.com` já estão lá, seus vizinhos naturais. Uma entrada `categoria: \"FORNECEDOR\"` resolve.\n\nEla já existia antes da sua branch (`git show e1f5e7ac:tests/unit/branding.test.ts | grep -c HOSTS_DECLARADOS` → `7`), então não é gate novo te alcançando. O que provavelmente escondeu: `pnpm test:unit` roda `vitest run` **sem caminho** — alcança o repo inteiro, 916 arquivos. Rodar o recorte dos arquivos que você escreveu dá um verde menor sem avisar que é menor. Fora este caso, sua suíte está verde de verdade: `Test Files 1 failed | 915 passed (916)`, `Tests 1 failed | 9374 passed | 1 expected fail (9376)`.\n\nUm efeito colateral que vale saber: o step seguinte do `verify` é `Kit self-host (bash)` (`pnpm test:shell`), e ele ficou `skipped` — step posterior a um que falhou não roda. Ou seja, o gate do kit **ainda não te mediu**; ele entra em cena quando esta linha entrar.\n\n### O fragmento promete um comportamento que o código não tem\n\n`.changes/google-ads-conversion-upload.md` diz \"sem elas, o botão de conectar simplesmente não aparece\". O card é renderizado sem condição nenhuma:\n\n```console\n$ git show d217af8f:app/app/settings/conversoes/page.tsx | grep -n FormularioDeConversoesGoogle\n 48:import { FormularioDeConversoesGoogle } from \"./_formGoogle\";\n126:      <FormularioDeConversoesGoogle estado={estadoGoogle} idioma={idioma} />\n```\n\nConferi também dentro do componente, não só a chamada: a única condição em `_formGoogle.tsx` é `if (!estado.temRefreshToken)` (linha 73), e é justamente o ramo que **mostra** o botão \"Conectar com Google\". Numa instalação sem as variáveis, o botão aparece, o clique vai ao `/connect`, e ele volta com `?erro=google_ads_nao_configurado` — o caminho existe e está traduzido, mas é pior do que o que você projetou.\n\nE as duas funções que você escreveu para exatamente isso estão órfãs:\n\n```console\n$ git grep -n -E \"googleAdsEstaConfigurado|faltaParaConectarOGoogleAds\" d217af8f -- . | grep -v google/config.ts\n(vazio)\n```\n\n`faltaParaConectarOGoogleAds()` tem até o comentário \"para a tela dizer exatamente o que falta\" — e nenhuma tela pergunta. O conserto que eu escolheria é o que o seu próprio `config.ts` descreve: condicionar o card e, sem as variáveis, dizer o que falta pelo nome. Aí o fragmento fica verdadeiro sem trocar de texto.\n\n### Duas afirmações de estado ficaram para trás (DoD 16)\n\nA doutrina: `docs/doctrine/restricao-de-canal.md:150` ainda diz que `google_ads` está \"**declarado sem transporte**\", e o PR não toca o arquivo (`gh pr diff 1025 --name-only | grep -c restricao-de-canal` → `0`).\n\nE uma em **código**, que é a mais fácil de passar batido, porque mora num arquivo que o PR não abre:\n\n```console\n$ git show origin/main:lib/conversoes/envio.handler.ts | sed -n '131,134p'\n    // `google_ads` cai aqui, e é o desfecho CERTO — não um bug. A lacuna é\n    // anterior: sem extrator de `gclid` não há clique capturado para reportar.\n    await registra(\"skipped\", \"plataforma_sem_transporte\");\n    return ok(\"skipped\", \"plataforma_sem_transporte\");\n\n$ gh pr diff 1025 --name-only | grep -cE \"lib/conversoes/\"\n0\n```\n\nCom o seu PR, nenhuma plataforma do vocabulário cai mais nesse ramo — ele fica como mecanismo para a próxima, o que está certo, mas o comentário afirma o contrário e nomeia o `google_ads`. Mesma coisa, em menor escala, no racional de `app/actions/settings/updateAdPlatformConnection.ts:61-64` (\"`google_ads` fica FORA do enum de propósito: aceitar o cadastro de uma plataforma sem transporte…\") — a decisão de manter aquela action só para `meta_ads` continua certa, já que a sua é separada; é o *porquê* escrito que venceu.\n\nDois menores, se estiver mexendo: `lib/env.ts:320` comenta \"migration 0254\" (número do seu fork, não existe aqui), e `lerEstadoDaConexaoGoogle` desestrutura só o `data` e descarta o `error` do Supabase — num clone cujo baseline não recebeu o apêndice, a tela diria \"não conectado\" para sempre sem dizer por quê.\n\n### O que você acertou, e não foi por sorte\n\n- `organization_id` nunca vem do body: na server action vem de `resolveActiveOrg`, no callback vem do `state` assinado. Admin client sempre com filtro explícito (`.eq(\"organization_id\", …).eq(\"platform\", \"google_ads\")`).\n- A catraca da issue #144 está respeitada — `update` com `.select(\"id\")` e checagem de zero linhas, devolvendo \"conecte com o Google primeiro\" em vez de sucesso silencioso. Você nomeou a issue no comentário.\n- A ordem do callback (`error` → `state` → `code` → cifra → upsert) está certa e documentada: nunca gasta o `code` de uso único antes de validar o `state`. E o callback audita (`lib/audit`), como o irmão da Agenda.\n- A linha nova de `PUBLIC_PATHS` está ancorada com `$`, respeitando o aviso que já estava ali — e o `/connect` não é público: passa por `requireRole(\"admin\")`, mesmo piso da conexão da Meta.\n- A cifra é a mesma que a Meta já usa em produção (`bytea` + `fn_encrypt_oauth`/`fn_decrypt_oauth`), não uma nova.\n- O endpoint mora em `lib/plataformas-de-anuncio/`, não em `lib/conversoes/` — lado certo da cerca de canal.\n- A tripla de schema está completa: migration versionada + apêndice idempotente e rotulado no `baseline.sql` + linha no MANIFEST.\n- **Você migrou o teste que afirmava o contrário, inclusive a mudança de contrato.** `tests/unit/conversoes-de-anuncio.test.ts` não só deixou de esperar `null` no registry: você percebeu que o motivo gravado no livro-razão muda de `plataforma_sem_transporte` para `sem_conexao` e ajustou as duas asserções. Conferi que `sem_conexao` já tem mensagem legível em `lib/conversoes/estado-da-conexao.ts:137`, então não sobrou código cru na tela. Esse é o tipo de detalhe que quase sempre escapa.\n- E você preservou o `null` do registry como **mecanismo** em vez de apagá-lo, reescrevendo o comentário para explicar isso. Era o ponto mais fácil de errar no PR inteiro.\n\n### Ordem sugerida\n\n1. `git fetch origin && git merge origin/main`, resolvendo `supabase/baseline.sql` com os dois blocos.\n2. Renumerar a migration para `0275` (arquivo + timestamp novo + rótulo no baseline + MANIFEST).\n3. Declarar `googleads.googleapis.com` em `HOSTS_DECLARADOS`.\n4. Subir a versão da API para a janela viva — de preferência num lugar só, como a casa faz com a Graph — e dar mensagem legível quando o corpo do erro não for JSON.\n5. Condicionar o card às variáveis (ou corrigir o fragmento), e atualizar as duas afirmações de estado.\n6. Rodar `pnpm test:unit` **sem caminho** antes de empurrar.\n\n### O que eu não medi\n\nNão rodei suíte local nenhuma (máquina sob carga) — os números acima vêm do CI do seu próprio head, `d217af8f`, e do step de colisão desse mesmo run. Não exercitei o OAuth nem um upload real. Não descobri quando o `v17` foi desativado, só que hoje ele responde 404 e v22–v26 respondem. E não provei nada pela tela: o PR adiciona card, botão e sete mensagens de erro novas, e não traz spec e2e nem evidência visual — a doutrina de QA Visual pede isso, e é o item que ainda falta depois de todo o resto.\n",
   "onde": "conversa"
  }
 ],
 "commits:1025": [
  {
   "sha": "d217af8f15920f682219da706ed05958bcdef33a",
   "quando": "2026-09-16T22:37:55Z",
   "autor": "melgarafael"
  }
 ],
 "pr:1168": {
  "author": {
   "id": "MDQ6VXNlcjk4MjM1OA==",
   "is_bot": false,
   "login": "chiliec",
   "name": "Vladimir Babin"
  },
  "createdAt": "2026-09-18T11:43:20Z",
  "headRefName": "chore/gitignore-marcas-do-kit",
  "headRefOid": "39a9c550dc52aa581b1513165b7dc777abf57e4c",
  "number": 1168,
  "state": "OPEN"
 },
 "comentarios:1168": [
  {
   "id": 5729490756,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-18T11:43:25Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / Security Evidence:39a9c550dc52aa581b1513165b7dc777abf57e4c -->\n## ECC Tools / Security Evidence\n\nCommit: `39a9c550dc52aa581b1513165b7dc777abf57e4c`\n\n**Security evidence gate passed** (success)\n\nNo security-sensitive scanner-evidence gap detected.\n\nMode: enforce\n\nScanned 1 changed file(s). No missing scanner-evidence signal was detected.\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5729490899,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-18T11:43:25Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / PR Risk Taxonomy:39a9c550dc52aa581b1513165b7dc777abf57e4c -->\n## ECC Tools / PR Risk Taxonomy\n\nCommit: `39a9c550dc52aa581b1513165b7dc777abf57e4c`\n\n**PR taxonomy clear** (success)\n\nScanned 1 changed file(s). No taxonomy bucket signals were detected.\n\nScanned 1 changed file(s).\n\nNo PR taxonomy bucket signals were detected.\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5729491049,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-18T11:43:26Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / Reference Set Readiness:39a9c550dc52aa581b1513165b7dc777abf57e4c -->\n## ECC Tools / Reference Set Readiness\n\nCommit: `39a9c550dc52aa581b1513165b7dc777abf57e4c`\n\n**Reference set readiness gaps detected** (neutral)\n\nReference evidence present for 0/7 areas (0%) across 1 changed file(s).\n\nThis check is based on files changed in this PR. Repository-level readiness is still reported by `/ecc-tools analyze` comments and generated manifests.\n\n| Area | Status | Evidence / Next Step |\n| --- | --- | --- |\n| Deep analyzer corpus | Missing | Add analyzer fixture, golden, benchmark, or reference-set files that can catch analyzer regressions. |\n| RAG/evaluator comparison | Missing | Add retrieval or evaluator reference-set comparison fixtures with expected ranking behavior. |\n| PR salvage/review corpus | Missing | Add stale-PR, review-thread, reopen-flow, or salvage reference cases for queue cleanup automation. |\n| Discussion triage corpus | Missing | Add public discussion triage fixtures, golden cases, or reference sets for informational, answered, and no-response classifications. |\n| Harness compatibility | Missing | Add cross-harness, adapter-compliance, or harness-audit evidence for Claude, Codex, OpenCode, Zed, dmux, and agent surfaces. |\n| Security evidence | Missing | Attach security evidence such as SBOMs, SARIF, audit reports, or AgentShield evidence packs. |\n| CI failure-mode evidence | Missing | Add captured CI failure logs, dry-run fixtures, or troubleshooting docs for common workflow failure modes. |\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5729491310,
   "autor": "ecc-tools[bot]",
   "quando": "2026-09-18T11:43:28Z",
   "texto": "<!-- ecc-tools:pr-audit:ECC Tools / Hosted Promotion Readiness:39a9c550dc52aa581b1513165b7dc777abf57e4c -->\n## ECC Tools / Hosted Promotion Readiness\n\nCommit: `39a9c550dc52aa581b1513165b7dc777abf57e4c`\n\n**Hosted promotion readiness passed** (success)\n\nNo hosted promotion evidence gaps detected across 1 changed file(s); 0 corpus scenarios had matching evidence.\n\nThis check compares PR file changes against the evaluator/RAG promotion corpus in `src/analyzers/fixtures/evaluator-rag-corpus.ts`.\nHosted output scoring inspected 0 completed cached hosted job results.\n\nNo evaluator corpus scenarios matched this PR.\n\nCheck publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.",
   "onde": "conversa"
  },
  {
   "id": 5729557451,
   "autor": "melgarafael",
   "quando": "2026-09-18T11:49:57Z",
   "texto": "@chiliec — bem-vindo, e obrigado. Duas coisas.\n\n**1. O seu CI não tinha começado, e não era a fila.** Os quatro workflows estavam parados em `action_required`: a política do GitHub segura a execução no primeiro PR de um contribuidor até um mantenedor autorizar. **Acabei de aprovar os quatro** e eles estão rodando.\n\nO que torna isso traiçoeiro é como aparece: `gh pr checks` responde **\"no checks reported\"**, que lê exatamente como *\"ainda não começou\"*. Só olhando por outro caminho aparece:\n\n```\ngh run list --commit <head>  →  4 runs, todos  event=pull_request  conclusion=action_required\n```\n\nVarri a fila hoje e são **110 runs** parados assim no repositório, o mais antigo de 29 de agosto. Você é o segundo caso que eu destravo hoje. A falha é nossa, de processo, não sua.\n\n**2. Sobre o conteúdo: você consertou uma coisa que nós mesmos já tínhamos reconhecido como falha da casa.**\n\n`.update.lock` e `.deskcomm-site-url-avisado` são marcas de execução do kit, e elas **já vazaram** para o diff de outro contribuidor — a triagem escreveu no PR dele que os dois artefatos \"entraram sem querer\" e que isso era problema nosso. Ninguém tinha fechado o buraco no `.gitignore`. Você fechou, com quatro linhas e um comentário que diz **por quê** — que é o padrão deste arquivo, onde cada bloco explica a razão dele.\n\nLi o diff inteiro antes de aprovar (são 4 linhas; não aprovo execução de código de terceiro sem ler). Nada a ajustar da minha parte.\n\nQuando os cinco obrigatórios fecharem, ele entra.",
   "onde": "conversa"
  },
  {
   "id": 5729658095,
   "autor": "github-actions[bot]",
   "quando": "2026-09-18T11:59:27Z",
   "texto": "<!-- triagem-de-pr:v1:pass=1 -->\nRecebido, @chiliec — obrigado por isto.\n\nUma coisa vai parecer erro seu e não é:\n\n- No primeiro PR de quem nunca contribuiu aqui, os workflows ficam **parados esperando\n  liberação** — política do GitHub, não sua. Enquanto isso o PR parece não ter check nenhum\n  (nem o `gh pr checks` mostra os que estão nesse estado). Quem tria libera; você não precisa\n  fazer nada.\n\nQuando eles rodarem, o que trava o merge são só os checks marcados **Required** aqui no seu\npróprio PR — é essa lista que vale, não qualquer outro vermelho que apareça. No terminal,\n`gh pr checks <número> --required` mostra os obrigatórios que **já reportaram**, e só esses:\nenquanto um deles não rodou, ele não aparece ali. Se um reprovar, a saída dele diz o que\nfalta; se não estiver claro, comente aqui — não feche o PR.\n\nUm mantenedor vai revisar de verdade — rodando os gates e reproduzindo o comportamento, não só\nlendo o diff — e responde aqui **em até um dia útil**, com a medição junto, nunca com um \"acho\nque\".\n\nEsta mensagem é automática e não diz nada sobre o seu PR: ela é sobre o processo. O que vem\ndepois é pessoa.\n",
   "onde": "conversa"
  }
 ],
 "commits:1168": [
  {
   "sha": "39a9c550dc52aa581b1513165b7dc777abf57e4c",
   "quando": "2026-09-18T11:43:01Z",
   "autor": "chiliec"
  }
 ]
}