O que mudou, e quando
A regra de que nenhum cliente influencia o método só é verificável se toda mudança deixar rastro público e datado. Este é o rastro: 44 mudanças, cada uma com data, motivo e commit.
Como ler este registro
- Este registro é público; o repositório, por enquanto, não. Cada entrada aponta o commit, e o histórico guarda cada versão anterior byte a byte — mas o repositório é fechado neste começo, e essa parte você ainda não consegue conferir sozinho. Preferimos dizer isso a deixar a promessa no ar: o
diffde qualquer entrada daqui é entregue a quem pedir, e a abertura do repositório é o passo seguinte. - Uma trava exige a entrada. Qualquer commit que altere página ou dado sem registro aqui reprova a publicação — não é disciplina pessoal, é verificação automática. Uma mudança feita para favorecer alguém teria de passar por este registro datado, que fica de pé mesmo antes de o repositório abrir.
- Tipos: ferramenta (página ou função nova), dado (mapa alterado), correção (erro corrigido, dito como erro), trava (verificação automática), governança, texto.
07 de setembro de 2026
- Busca quebrada em produção por id duplicado, e a trava que faltava correção
Primeiro teste no domínio real: a busca com JavaScript não mostrava resultado nenhum. Causa: na rodada 39, ao corrigir a ordem de títulos da página, entrou um <h2 id="indice"> antes do bloco JSON que já tinha esse id — e getElementById devolve o primeiro, um título de 15 caracteres. Nenhuma trava, teste ou axe pegou, porque o axe 4.10 não reporta id duplicado em elemento passivo. O título ganhou outro id, a trava [6] passa a reprovar id repetido na mesma página, e o smoke test do DEPLOY.md ganha três verificações que só produção revela: beacon do Web Analytics injetado pela Cloudflare (a CSP bloqueou, como devia), robots.txt reescrito pelo AI Crawl Control, e a própria busca com JavaScript. A mesma trava achou LDO e LOA listadas duas vezes em /prazos, com o mesmo id de linha; ficam só na seção do ciclo do orçamento.
06 de setembro de 2026
- Governança 1.1: a marca é declarada em /etica, e só lá governança
Uma revisão externa do ecossistema apontou que proibir qualquer menção à marca comercial reduzia transparência sem proteção proporcional, que a frase-tese ("quem publica método não deveria lucrar com quem é fiscalizado") condenava o modelo antes de regulá-lo, que vetar ao mantenedor todo uso das ferramentas era incoerente com a licença aberta, e que "declarar publicamente antes de qualquer explicação" expõe terceiros sem apuração. As quatro foram acolhidas. /etica passa a nomear a marca — nesta página e em nenhuma outra, como referência para conferir o vínculo — e a trava [2] confere as duas direções, mais o interruptor do link, que só liga quando o site comercial responder. A tensão é reescrita pelos mecanismos concretos que as regras fecham; o uso comercial do que é público fica permitido nas mesmas condições de qualquer pessoa; a resposta a violação passa a ser conter, preservar, apurar, comunicar e publicar na proporção do fato. E uma correção honesta: /etica dizia que há registro de setores atendidos e de pedidos recusados; ele ainda não existe, e a página agora diz isso. - O repositório nasce fechado, e as páginas passam a dizer isso governança
A decisão anterior, de abrir o repositório, era premissa minha e foi revertida pelo mantenedor: ele nasce privado, como o do extrato.digital. Isso tornava falsas duas afirmações do site — /mudancas dizia que o histórico git é o snapshot que o visitante pode conferir, e /etica prometia verificação sem depender de confiança. Em vez de manter a promessa, as duas páginas passam a declarar a limitação com todas as letras: o que está aberto é o registro público e datado, o histórico existe mas não está legível a terceiros, e o diff de qualquer entrada é entregue a quem pedir. A governança registra a decisão e a consequência. - Clone raso não inventa data de alteração correção
Num clone com um único commit — o padrão de vários serviços de build — o git responde a data desse commit para qualquer arquivo, e o sitemap sairia com a mesma data em todas as 34 páginas: pior que data nenhuma, porque parece certo e ensina o buscador a ignorar o campo. O build passa a detectar repositório raso e omitir a data, e o calendário mantém o carimbo fixo em vez de mudar sozinho a cada publicação. Verificado nos três cenários: histórico completo (datas reais e distintas), clone raso e pasta sem git. - Cabeçalho concatenado pelo Cloudflare, licença e a coerência do repositório público correção
Servindo o dist com o runtime da Cloudflare (wrangler pages dev) antes do primeiro deploy, viu-se que o Pages concatena o valor de um cabeçalho definido em duas regras que casam com a mesma rota: Cache-Control em /* e em /_astro/* virava "max-age=600, must-revalidate, max-age=31536000, immutable" — diretivas contraditórias que anulavam o cache imutável dos assets. Cache-Control sai de /*, o HTML fica com o padrão do Pages e cada caminho define a sua política; a trava [4] passa a reprovar cabeçalho repetido entre regras. Mais: LICENSE (MIT, que o package.json já declarava) e o DEPLOY.md corrigido — dizia para criar o repositório privado, enquanto /mudancas e /etica afirmam ao visitante que o histórico git é auditável.
04 de setembro de 2026
- Itens abertos das auditorias: tipos dos dados, travas testadas e verificação de tipos no CI trava
src/lib/tipos.ts descreve a forma dos quinze arquivos de dado, e os 70 usos de `any` nas páginas e componentes saíram — a verificação de tipos passou de 6 erros para zero, e o HTML gerado ficou idêntico (a única diferença é o dedupe da lista de páginas que citam cada norma, em /base-legal). A página /base-legal deixou de ler o disco com node:fs e passou a usar import.meta.glob, como /busca. A trava dos dados ganhou treze testes que quebram um campo de propósito numa cópia temporária e exigem a reprovação. O CI roda astro-check por npx com versão fixa, sem devDependency. - Auditoria de link preview: favicon.ico e metatags do Twitter trava
og-image (1200×630, PNG, 70 KB), apple-touch-icon (180×180) e as metatags Open Graph conferidas por bytes e dimensão reais. Faltavam /favicon.ico — que clientes legados, Slack e alguns previews pedem pelo caminho fixo — e twitter:title/twitter:description. O .ico (16, 32 e 48 px) foi gerado do próprio favicon.svg, sem dependência nova. - Auditoria de UX: alvos de toque na navegação e no rodapé trava
Grade de 10 páginas × 8 larguras (320 a 3840 px) com Playwright: nenhuma rolagem horizontal, coluna de leitura limitada a 46rem mesmo em 4K, foco visível por teclado, modo escuro legível, Lighthouse móvel 100/100/100/100 nas páginas de ferramenta. O único achado real: links da navegação e do rodapé com 16 px de altura, abaixo dos 24 px mínimos de alvo de toque (WCAG 2.5.8) — agora 30 px. Links dentro de texto corrido e de tabela ficam como estão, que é a exceção prevista pela norma. - Auditoria de engenharia: formatação de data numa fonte só trava
Doze páginas redefiniam a mesma função de formatar data; agora src/lib/formato.ts (dataBR, mesAnoBR, dataHoraBR), com teste, e o HTML gerado ficou byte a byte igual. Tipo explícito no aria-current da navegação (o único erro real de tipos que o astro check apontou; os outros quatro são ausência de @types/node, consequência da regra de dependência única). A busca tolera índice corrompido: fica o índice completo, sem busca. - Auditoria de segurança: quatro endurecimentos trava
gitleaks (26 commits), osv-scanner, trivy e npm audit sem achado. Da revisão manual: os blocos JSON embutidos em <script> (JSON-LD, índice da busca, parâmetros de /agora) passam a escapar '<', para que um título contendo "</script>" nunca feche o bloco; as ações do CI ficam fixadas por SHA de commit, o token do CI vira somente leitura e o Dependabot abre PR semanal; o verificador de canais lê no máximo 2 MB por resposta, para que um host hostil não estoure a memória do runner. - Cabeçalhos endurecidos e a CSP como prova de zero requisição externa trava
A CSP perde o data: (não havia imagem embutida) e fica só com 'self'; entram HSTS com preload, COOP, CORP, X-Frame-Options e cache curto no HTML. A trava [4] passa a exigir esses cabeçalhos, a reprovar qualquer origem além de 'self' na CSP e qualquer script, estilo, imagem ou iframe externo no HTML — a promessa de zero requisição a terceiro vira verificação. npm audit limpo; lockfile com integridade e npm ci no CI. Texto de /cidadao deixa de dizer que o caminho para ineficiência é "eleitoral". Fecha a série de vinte rodadas (21–40). - Auditoria de acessibilidade em 33 páginas × 2 larguras, componentes de tabela e /imprimir trava
axe (WCAG 2.1 AA + boas práticas) em todas as páginas a 1280 e 320 px: uma única violação — ordem de títulos na busca, corrigida; nenhuma página com rolagem horizontal a 320 px; um h1 por página; impressão sem menu e rodapé. As tabelas dos mapas (LAI, tribunais, MP, diários estaduais) viram componentes, uma fonte de markup, e /imprimir junta todos os mapas — inclusive DF e Entorno — com a data de verificação de cada um, para levar ao balcão. - Lacunas declaradas: o que fechou e o que continua aberto dado
MP de Contas: de 7 para 22 confirmados por conteúdo (Amazonas, Bahia, Espírito Santo, Mato Grosso, Mato Grosso do Sul, Pará, Paraíba, Piauí, Rio Grande do Norte, Rondônia, Roraima, Santa Catarina, Sergipe, Pernambuco, Tocantins); o MPC-GO muda para a página do TCM-GO, porque o host anterior não resolve; faltam AC, AL, AP, CE, MA e RJ. Diário de MS: o host anterior morreu; o vivo é a Imprensa Oficial, confirmado pelo título. FAMEM continua não confirmada — agora por verificação de conteúdo, não por suspeita. Capitais: quatro fechadas com a confiança que a fonte permitiu (Rio Branco verificado; Porto Velho e São Luís parciais; Maceió provável); treze seguem não levantadas, e a página passa a contar em vez de dizer "dez". - /entorno — os 33 municípios da RIDE-DF dado
A lista vem da LC 94/1998 na redação da LC 163/2018, lida na fonte. O site de cada prefeitura foi localizado por padrão de endereço e confirmado pelo nome do município na página: 32 de 33 (Arinos responde com redirecionamento sem conteúdo). Tabela do caminho por estado — em Goiás é o TCM-GO que julga prefeitura, não o TCE — e o aviso do que não foi levantado (diário, e-SIC, portal). As plataformas de diários da AGM e da AMM-MG entram no mapa de diários; o verificador ganha o grupo Entorno. - /checar-portal — o checklist do cidadão para o portal de transparência ferramenta
Vinte e dois itens que a norma federal exige de um portal (LAI art. 8º §§1º e 3º, LRF arts. 48 e 48-A, Decreto 7.185/2010 art. 7º), para percorrer o portal do próprio ente e marcar o que encontrou. Gera o relatório para copiar — dito como checklist, nunca como nota — e o estado vai na URL como bits, para guardar o link. Funciona sem JavaScript (imprime com as caixas marcadas). É o lado cidadão do "mapa de transparência" que a agenda mantém travado por infraestrutura. - Verificador cobre tudo o que os mapas publicam trava
Antes: 95 endereços de três mapas. Agora também as plataformas municipais e o DOU (por conteúdo — a plataforma devolve 200 para caminho inexistente, e só o nome da associação na página distingue), as fontes de dado citadas em /onde-esta-o-dado, os canais de pedido do mapa recursal (hosts extraídos do próprio dado, para que linha nova entre sozinha) e cada link para o site irmão. A trava exige que a lista de links do ecossistema bata com o que as páginas linkam. - /df — o Distrito Federal órgão a órgão, e o verificador passa a conferir conteúdo ferramenta
Dezessete órgãos e canais do DF (GDF, CLDF e seu diário, TCDF, MP de Contas, MPDFT, CGDF, Ouvidoria-Geral, Participa DF, Portal da Transparência, DODF, SINJ, SEI, dados abertos, Compras DF), cada um verificado ao vivo pelo título da página, com a tabela assunto → destino num ente que é estado e município. Correção de dado: o MP de Contas do DF está em mpc.tc.df.gov.br — o host anterior não responde. O verificador de canais ganha o grupo DF, verificação por conteúdo (texto esperado no dado, só um booleano no snapshot), seis conexões em paralelo e --only; /saude-dos-canais distingue 404 de erro de servidor. - /ler/orcamento e /ler/emendas ferramenta
Orçamento: PPA, LDO e LOA e o que cada um decide, dotação versus execução, créditos adicionais (Lei 4.320/1964, arts. 40 e 41) e contingenciamento (LC 101/2000, art. 9º). Emendas: individual, de bancada e de comissão, execução obrigatória e equitativa (Constituição, art. 166, §§9º, 11, 12 e 19), transferência especial versus com finalidade definida (art. 166-A) e onde o dado oficial está — sobre o instrumento, com guarda-corpo explícito: nada sobre quem apresentou. - /ler/licitacao ferramenta
O guia do que vem antes do contrato: as sete fases (art. 17), as cinco modalidades (art. 28) e os seis critérios de julgamento (art. 33) da Lei 14.133/2021, o preço estimado como documento central (art. 23), dispensa versus inexigibilidade e o conteúdo mínimo do processo de contratação direta (art. 72) — com a tabela de sinal versus aparência. Limites de dispensa não são fixados no texto porque mudam todo 1º de janeiro (art. 182). - /glossario com base legal por termo ferramenta
Vinte e oito termos de relatório fiscal, contrato e diário (empenho, liquidação, restos a pagar, RCL, dispensa, inexigibilidade, ata de registro de preços, inadimplência declaratória…) em linguagem comum, cada um com a norma que o define, lida na fonte — a Lei 4.320/1964 entra na base legal. Cada termo tem âncora própria, entra na busca e é linkado dos guias de leitura. - Busca com vários termos, ranking, destaque e teclado ferramenta
A extração do índice estava duplicada em duas páginas e a busca era uma substring única. Agora src/lib/indice.ts é a fonte (testada): todos os termos precisam aparecer, título pesa mais que seção e descrição, prefixo de palavra vale mais, os termos ficam destacados sem perder acento, o contador é anunciado a leitores de tela e as setas navegam nos resultados. - /agora calculado no navegador e calendário dos prazos para assinar ferramenta
/agora congelava na data do build — e no relógio do servidor, que não é o de Brasília. Agora a conta é refeita no navegador para a data de hoje (sem JavaScript fica a do build, em horário de Brasília, dita como tal), com a mesma função testada da calculadora. Novo /calendario.ics: os vencimentos de RREO, RGF e DCA deste ano e do próximo em iCalendar, arquivo estático gerado do prazos.json — o aplicativo de agenda busca as datas e o site não sabe quem assinou. - Motor de prazos testado, dia útil e a data da ciência ferramenta
A calculadora somava dias e parava: vencimento em sábado ou feriado ficava no sábado. Agora a conta vive em src/lib/prazos.ts (função pura, oito testes com node:test, zero dependências): dia do começo excluído, dias corridos, rolagem ao dia útil seguinte com os feriados nacionais em lei e a Sexta-feira da Paixão — dito como estimativa, porque feriado local não entra. /acompanhar ganha o campo da data da ciência da negativa (o prazo de recurso conta dela) e um link que leva as datas para /recorrer, que mostra o último dia e preenche o modelo. Estado continua só na URL. - Home organizada pela pergunta do cidadão texto
A home tinha 18 linhas e não dizia que o alcance é nacional. Agora lista onze perguntas ("negaram, para quem eu recorro?") e a ferramenta que responde cada uma, explica o "bsb" no nome, como as ferramentas tratam confiança e data, e o que o site não faz. llms.txt ganha a mesma nota de alcance. - Navegação em cinco grupos, rodapé em grade e dados estruturados ferramenta
Treze links soltos no topo viravam seis linhas num celular. Agora cinco grupos (agir, mapas, prazos, ler, sobre): em tela estreita um menu que abre pelo botão e funciona sem JavaScript; em tela larga, aberto. O rodapé vira navegação completa em grade, com a mesma fonte de links. JSON-LD (WebSite, WebPage, BreadcrumbList) e texto alternativo da imagem de compartilhamento. /base-legal passa a contar citações feitas pelo dado que a página renderiza. - Base legal conferida na fonte, /base-legal e correção da correção da DCA correção
Cada norma citada foi lida no Planalto. Erros corrigidos: a exigência de indicar prazo de sigilo e autoridade classificadora está no art. 11, §1º, II e §4º, e no art. 28 da LAI (e no art. 19 do Decreto 7.724/2012), não no art. 24, que só define os graus; o sigilo de identidade em ouvidoria é o art. 10, §7º da Lei 13.460/2017 (art. 31 da LAI é acessório); e a DCA: a rodada 21 dividiu o prazo em 30/04 (municípios) e 31/05 (estados) seguindo a redação original da LRF — a LC 178/2021 unificou em 30/04. Nova página /base-legal com cada dispositivo, o que diz e a URL; trava reprova página que cite norma fora do registro. - CI com as travas e verificador de canais mensal por PR trava
GitHub Actions roda build, as 12 travas e o contraste a cada push, só com ações oficiais. Um segundo job roda o verificador de canais todo mês e abre PR com o snapshot — nunca commita direto, porque runner de nuvem é bloqueado por portal público. CLAUDE.md registra regras, fluxo e lições para quem trabalha no repositório. - Registro de mudanças e trava que o exige governança
Esta página, o CHANGELOG gerado a partir dela e a trava [12]: qualquer commit que toque página ou dado sem entrada aqui reprova a publicação. /etica deixa de apontar para o registro de outro site. - Forma dos dados como trava e confiança como vocabulário fechado trava
O campo de confiança do mapa recursal tinha onze grafias; passa a ser {verificado, parcial, provavel} com a nota do que faltou. scripts/dados.mjs confere os nove arquivos de dado (campos, UFs, datas, duplicatas). A trava do snapshot de canais passa a exigir o total derivado dos mapas. - CSP em atributo, DCA por ente, "dez capitais" correção
/ler/contas tinha estilo inline que a CSP bloquearia (a trava passa a pegar). O prazo da DCA é 30/04 para municípios e 31/05 para estados e DF (LRF art. 51 §1º) — dizíamos 30/04 para todos. "Dez maiores capitais" não era verdade; agora "dez capitais", com o critério. Seções sem âncora entraram no índice de busca.
31 de agosto de 2026
- /busca e índice do site ferramenta
Sem JavaScript é o índice completo (páginas e seções); com JavaScript, busca instantânea com o índice embutido — o termo nunca sai do navegador. Mais /busca-indice.json e o llms.txt reescrito por pergunta. - Verificador de canais e /saude-dos-canais trava
npm run validate pinga os ~95 endereços dos mapas e grava só metadados. Classifica o motivo da falha (certificado, DNS, timeout, conexão) em vez de chamar tudo de "morto". Trava [10]: snapshot obrigatório, recente e publicado. - As 27 capitais — o que foi e o que não foi levantado dado
/lai passa a dizer que dez capitais tiveram a escada recursal pesquisada e dezessete não, em vez de deixar supor cobertura que não existe. - /durabilidade texto
Por que o hub não hospeda dado, e a lição de que status 200 não prova projeto vivo — domínio expirado e reocupado responde igual. - Guias de leitura: /ler/contrato, /ler/contas, /ler/diario ferramenta
Cada um com a tabela do que é sinal e do que apenas parece; empenhado ≠ liquidado ≠ pago. - Instrumentos de ação: /pedir, /acompanhar, /recorrer, /representar ferramenta
Sete variantes de pedido por tipo de dado; calculadora de prazos no navegador com estado na URL; recurso com os cinco fundamentos; modelo de representação a órgão de controle. - /prazos e /agora ferramenta
Matriz do que cada ente deve publicar e até quando, com base legal; /agora aplica as regras à data do build. - /onde-esta-o-dado ferramenta
Catálogo de fontes pela pergunta do cidadão, com o que exige cadastro e onde o Brasil não tem dado. - Mapas institucionais: /diarios, /tribunais-de-contas, /ministerio-publico, /ouvidorias dado
DOU e 27 diários estaduais (associações confirmadas por conteúdo — a FAMEM não passou e vai publicada como não confirmada); os 33 tribunais com a regra de competência; os 35 MPs incluindo o de Contas; ouvidoria × corregedoria × controladoria. - CSP com script-src e trava de coerência build↔CSP trava
A CSP não tinha script-src: qualquer script iria ao ar bloqueado com o build verde. Corrigido, com cache imutável, componentes de ferramenta e estilo de impressão. - Ordem de lançamento do ecossistema governança
DEPLOY.md: este hub é o passo 1; a ponte no extrato.digital só liga depois que o domínio responde; a face comercial entra por último. - Muralha ética, verificador de 9 travas, /lai e /cidadao governança
/etica declara o fato da consultoria e as regras; a trava reprova marca comercial em página publicada e comentário interno vazando no HTML. Mapa recursal da LAI e a página "por onde começar". Modo escuro com contraste medido, llms.txt, sitemap com data do git.
30 de agosto de 2026
- Sitemap gerado em build e reflow a 320px trava
sitemap.xml com redirect e validação de reflow em telas estreitas. - v0.1 — o hub ferramenta
Home, ferramentas, princípios, sobre e 404; CSP estrita; zero requisições externas; identidade própria, distinta do extrato.digital.