Agentes de IA

Documentation Agent e Knowledge Center

Como a documentação viva é gerada do código, conferida no CI, pontuada e consultada por pessoas e agentes (ADR-0010).

Os três agentes desta página se apresentam como "da Radhr AI" (sem "da Witbiz") desde 12/10/2026 — só a frase de identidade mudou; gatilhos, entradas e validações seguem iguais.

A documentação da Radhr AI não é escrita depois: ela é gerada e conferida a partir do código a cada versão e servida dentro do próprio Radar, em /radar/conhecimento. A decisão está no ADR-0010 e o desenho completo em docs/radar/living-documentation.md.

Como a base nasce

  1. npm run docs:gerar (em _source/novo) roda scripts/conhecimento.mjs.
  2. O extrator lê o código: rotas Hono (com o prefixo das montagens, parâmetros, query, campos do formulário, respostas e códigos de erro lidos do handler), o SQL (db/schema.sql + migrações em ordem: colunas, tipos, obrigatoriedade, padrão, FK, valores do check, comentários de fim de linha, índices, restrições, RLS), os agentes de IA (todo chamarClaude/registrarChamadaIA com rótulo e os objetos Analise<…>: arquivo, modelo, versão do prompt, max_tokens e um hash dos literais longos, que é onde moram os prompts), eventos (registrarEvento), crons (wrangler.jsonc × scheduled), cadeias da fila, ferramentas do Copiloto, segredos do Env e o comentário de topo de cada módulo.
  3. Lê os documentos: docs/conhecimento/** (com front matter e cobre), ADRs, CONTEXT.md (glossário), docs/radar/* (roadmap/arquitetura), docs/produto/* e docs/operacao/*.
  4. Calcula a assinatura estrutural de cada item e compara com docs/conhecimento/_gerado/assinaturas.json: o que é novo, alterado ou removido entra no changelog (_gerado/mudancas.json) com categoria e impacto heurístico, e a data da mudança fica registrada por item.
  5. Escreve src/conhecimento/base.gerada.ts, que vai no bundle do Worker. A documentação publicada é sempre a da versão publicada do código.

Portão no CI

O teste test/conhecimento.test.ts roda o extrator em modo de verificação: se o código mudou e a base não foi regenerada, o CI fica vermelho com a mensagem "rode npm run docs:gerar". O mesmo teste exige que as nove áreas funcionais tenham documento com as sete seções, que todo agente e toda tabela tenham documento escrito e que nenhum cobre aponte para item que não existe mais.

Desde a fase 4, test/conhecimento-fase4.test.ts também reprova o CI quando o Living Documentation Score fica abaixo da meta de 90 (META_SCORE em src/conhecimento/saude.ts) ou quando algum documento está desatualizado. Mudou o comportamento de algo que um documento cobre? O mesmo PR revisa o documento e atualiza o revisado_em.

Documento desatualizado

Um documento escrito fica desatualizado quando qualquer item do seu cobre mudou depois do revisado_em. O painel e a página do documento mostram quais itens mudaram e quando. Resolver = revisar o texto, atualizar revisado_em, npm run docs:gerar, commit.

Living Documentation Score

Média ponderada de cinco coberturas — funcional 25% (áreas com as sete seções), IA 25% (agentes, cadeias, ferramentas), técnica 20% (telas, módulos, jobs, eventos, segredos), banco 15% e APIs 15%. Item com documento escrito vale 1; item que só tem comentário no código vale ½. Do resultado saem 3 pontos por documento desatualizado (até 20) e 2 por referência órfã (até 10). Risco baixo com score ≥ 85 e nenhum desatualizado; médio ≥ 65; alto abaixo. Código em src/conhecimento/indice.ts.

Assistente de documentação

docs_assistente (src/conhecimento/agente.ts, função perguntar).

Smart Changelog

docs_changelog (resumirMudancas).

Rascunho de documentação

docs_rascunho (rascunhar).

Documentação como contexto dos agentes

A ferramenta consultar_documentacao do Copiloto usa a mesma busca, com as mesmas fontes autorizadas de quem pergunta. O prompt do Copiloto manda consultá-la antes de explicar como a Radhr AI funciona e dizer "a documentação não cobre" em vez de supor.

**Fase 1 — contextoDocumental(area)** (src/conhecimento/contexto.ts): os agentes do funil recebem no system prompt a seção "Regras de negócio" do documento funcional da área (até 3.500 caracteres, cortada em parágrafos), com a versão do documento — Proposal Strategist (propostas), motor de risco e Expansion Opportunity Agent (clientes), Scope Builder, Scope Validator e Change Request Analyzer (escopos). A versão do documento entra no hash de entrada das análises idempotentes (risco, expansão, estratégia): documento revisado → análise refeita na próxima leitura. As regras que o código valida continuam no código e prevalecem; a documentação dá ao modelo o porquê. — src/conhecimento/contexto.ts, src/expansao.ts, src/risco.ts, src/estrategia.ts, src/escopo.ts, src/mudancas.ts

Agente no PR (fase 1)

scripts/docs-agente.mjs, rodado pelo workflow .github/workflows/docs-agente.yml a cada pull request que toca código, banco ou docs/conhecimento:

  1. regenera a base e lê as mudanças do inventário do dia e os documentos afetados (documentosAfetados: cobrem um item mudado no PR ou um item que mudou depois do revisado_em);
  2. lê o diff do PR contra a base (git diff origin/<base>...HEAD, até 60 mil caracteres), os fatos do inventário dos itens (fatosDosItens) e o documento;
  3. pede ao modelo (DOCS_MODELO, padrão claude-sonnet-5; prompt docs-pr-v1) um patch por documento — até 8 edições {secao, trecho_atual, novo_texto, motivo}; interpretarEdicoes descarta trecho que não existe no documento;
  4. publica um comentário no PR (marcado <!-- docs-agente -->, atualizado a cada push) com os itens mudados, cada documento afetado e as edições em formato diff, mais o revisado_em a colocar.

Nunca faz commit: um humano aplica, atualiza revisado_em e roda npm run docs:gerar. Sem o segredo ANTHROPIC_API_KEY no repositório, o comentário só lista o que revisar. O extrator ainda emite avisos de convenção no CI (::warning::): rota nova sem comentário de uma linha acima do handler e coluna nova sem -- o que é na migração.

OpenAPI e Postman

/radar/conhecimento/openapi.json (OpenAPI 3.1) e /radar/conhecimento/postman.json (coleção v2.1) são gerados do inventário de rotas em src/conhecimento/openapi.ts: parâmetros de caminho e query, corpo (JSON nas APIs e webhooks; formulário com _csrf nas ações com sessão), respostas por tipo e erros, esquemas de segurança (cookie da sessão, assinatura HMAC do provedor), a fonte no código e o documento escrito que cobre cada operação. Por padrão só o contrato público (/api, /pp, /c, /portal, /d, /p, /planos e as APIs da Radhr AI); ?internas=1 inclui telas e ações. Só a Witbiz (organização 1) baixa. Mudança em rota pública continua com impacto alto no changelog.

Edição na Radhr AI, versões e fila de revisão (fase 2)

Migração 0029 (doc_documentos, doc_versoes, doc_perguntas, doc_revisoes; RLS). O repositório continua sendo a fonte; a Radhr AI guarda versões por cima dele.

Fica para a fase 2b: busca híbrida com embeddings (doc_trechos, Voyage) — depende da chave — e a edição de documentos pela própria organização (fase 3).

Registro dos agentes na página de IA

/radar/conhecimento/ia mostra, ao lado do inventário de cada agente, o registro dos últimos 30 dias na organização (src/agentes-registro.ts): chamadas, custo, análises gravadas e quantas caíram na regra. O admin da Witbiz vê outra organização com ?org=<id>.

Documentação da organização e "O que é isto?" (fase 3)

Sem a 0038, os documentos da organização funcionam; só os guias não entram na ajuda das telas.

A documentação que se sustenta sozinha (fase 4)

O score da semana é gravado no evento docs_saude_semanal só no envio de segunda; a prévia não grava.

Os números saem de doc_perguntas (metricasDeUso, função pura): toda pergunta do assistente e toda consulta do Copiloto (com ou sem fonte) é registrada lá. Nenhuma organização vê perguntas de outra.

Roteiro de treinamento

docs_treinamento (roteiroDeTreinamento em src/conhecimento/saude.ts).

Quem vê o quê

Organização 1 (Witbiz) vê tudo. Outras organizações veem o funcional, o glossário e os próprios documentos (seção organizacao, fase 3), na busca, no assistente e no Copiloto; banco, APIs, IA, técnica, decisões e roadmap respondem 403. Documento de uma organização nunca aparece para outra, nem para a Witbiz.

Revisado em 12/10/2026 · ← Toda a documentação