Notas de versão
As mesmas notas que o painel de operação mostra antes de atualizar uma instância. Uma entrada por versão publicada.
Notas de versão
O que muda para quem opera e para quem usa, versão a versão. Cada tag vX.Y.Z
publica as imagens no GHCR com esta nota como referência; a Torre mostra a
entrada correspondente antes de atualizar uma instância, e o site a publica em
“Novidades”.
Formato: Keep a Changelog. Versionamento: SemVer.
Não publicado
Adicionado
-
O produto inteiro no ar num servidor gratuito, em um comando. Não havia endereço para mandar a um cliente sem antes montar a operação completa, com a Torre num host e as instâncias noutro. Agora
infra/homologacao/enviar.shleva o código desta máquina para uma VM recém-criada (o repositório é privado, e numa VM limpa não há credencial para cloná-lo),preparar-vm.shprepara a máquina (Docker, Node, swap, firewall — inclusive as regras deiptablesque algumas imagens de nuvem trazem fechadas) esubir.shcoloca site, Torre e uma instância de demonstração atrás do mesmo Traefik, com HTTPS válido, senha de proxy no painel, reinício noturno da demonstração e conferência das URLs ao final. Sem domínio próprio, o endereço sai dosslip.iono mesmo dia. O roteiro, com o que muda em relação à produção e o que fazer quando dá errado, está emdocs/operacao/homologacao-gratuita.md— que também documenta por que uma plataforma de deploy (Render e parecidas) não sustenta este stack e quanto dura o crédito de estudante da Azure, o caminho que dispensa cartão de crédito. -
A Torre e o site passam a caber atrás do Traefik.
infra/torre/compose.traefik.yml(e o par local) dá três nomes ao host da Torre — site público, API pública e painel atrás de senha do proxy, que é o substituto honesto da VPN enquanto ela não existe — e põe teto de memória no Mongo dela, que sem isso reserva metade da RAM do host. -
govdocctl instanciar --torre-mesmo-host. Quando a Torre divide a máquina com a instância, o domínio dela passa a ser resolvido no gateway do Docker (infra/compose.torre-no-host.yml): o heartbeat deixa de depender de a nuvem devolver para dentro o tráfego que a máquina manda ao próprio IP público — coisa que a Oracle nem sempre faz. -
Assuntos vira um lugar onde se acha o assunto. A tela do plano de classificação abria recortada por tipo de documento e com a árvore fechada: quem entrava via duas linhas, e a classe criada noutro tipo não aparecia nem na listagem nem na procura. Agora ela abre em todos os tipos e, quando o plano cabe na tela, vem inteiro e aberto — num plano grande, continua sendo folheado nível a nível, agora com páginas, para que nenhuma classe fique fora de alcance. O seletor de tipo mostra quantas classes há em cada um (“Memorando (3)”), a etiqueta do tipo aparece ao lado da classe, e procurar dentro de um tipo avisa quantas a mesma procura acharia nos outros, com um clique para ver todas. A busca ganhou os filtros
e:sem-prazoee:no-portal— o aviso “N classes sem temporalidade” agora leva até elas —, o resultado mostra o caminho da classe e continua mostrando a guarda. O recorte e a procura vivem no endereço da página, e o assunto recém-criado aparece: o galho se abre, e o recorte se solta se a classe nasceu noutro tipo. -
Busca inteligente em toda tela com conteúdo. Um campo só, que se aprende uma vez: acento e maiúsculas não importam, o plural acha o singular (“licitações” acha “Licitação”),
"frase entre aspas"é exata e-palavraexclui. Na Caixa do setor a busca entende filtros —prazo:vencido,situacao:recebida,e:favorito,de:SEMAD,tipo:oficio,autor:,interessado:(nome ou CPF/CNPJ),numero:,desde:,ate:,em:— e também o jeito de falar: “vencidos”, “não lidos”, “sem prazo”, “hoje” ou uma data solta já viram filtro, mostrado como chip com “buscar como texto” para desfazer. Os atalhos (Vencidos, Vencem hoje, Não vistos por mim, Dirigidos a mim) escrevem na própria consulta, que fica no endereço da página — o link copiado abre a mesma lista. Buscando, as abas passam a contar os acertos de cada uma, e o que está arquivado não some por estar na aba ao lado. A listagem de Documentos usa a mesma linguagem, e as telas de cadastro filtram com as mesmas regras. -
Ctrl+K busca de qualquer tela. A lupa do cabeçalho abre uma paleta com os primeiros acertos do acervo enquanto se digita, e leva a mesma consulta para a caixa, para os documentos ou para a busca completa.
-
O formulário é parte do assunto, e trabalha para quem analisa. O assunto ganhou página própria (clique no nome, em Assuntos) com as abas Visão geral — quem recebe, A/C, prazo, tipo de documento, guarda, rito —, Formulário, Respostas e Configurações; o construtor é uma aba dela, e não um lugar à parte. No documento, o cartão Formulário respondido mostra o pedido como foi preenchido: seções, respostas no formato de cada tipo (escala com régua, estrelas, grade, R$, CPF/CEP com máscara), e cada arquivo ao lado da pergunta que ele responde, com formato conferido, visualizar e baixar. Quem analisa confere item a item — conferida ou pendência com o que precisa ser corrigido, registrado na trilha — e o botão Pedir correção abre a resposta já escrita com as pendências. A ficha deixou de repetir as mesmas perguntas.
-
A resposta de formulário é um documento que tramita. Quem responde — cidadão pelo portal ou servidor por dentro — gera um documento numerado na tipologia do assunto, com as respostas escritas no corpo (sob o hash e o código de verificação), que cai na caixa do setor de destino e, se o assunto indicar, A/C de uma pessoa do setor (“Pessoa que recebe”, no cadastro do assunto). Dali segue como qualquer processo: recebe, responde, encaminha a outros setores até resolver.
-
Pedir a outro setor (Listar → “Minhas solicitações”). O servidor escolhe num catálogo, agrupado por quem atende, o que precisa — equipamento, manutenção, acesso —, responde ao formulário daquele setor e o pedido nasce emitido pelo setor dele e despachado a quem atende, com rito e prazo do assunto. Não exige a permissão de emitir documento; exige a nova “Abrir solicitações internas”, que o cargo Servidor recebe por padrão. A mesma tela acompanha o que já se pediu. Não há item “Solicitação a outro setor” no menu Novo: documento e solicitação produzem a mesma coisa — um documento numerado na caixa de quem atende —, e as duas portas lado a lado só produziam a dúvida de qual usar.
-
A Caixa de saída mostra só o que o setor enviou a outro setor. O pedido aberto pelo cidadão no portal aparecia também na Caixa de saída do setor que o recebeu, como se ele tivesse despachado o pedido, porque o cidadão não tem setor e a abertura registrava o próprio destino como origem. Agora um despacho endereçado só ao próprio setor não conta como saída, nem na lista nem no contador. O pedido de formulário passa por Em aberto, Favoritos, Arquivados e Caixa de saída exatamente como qualquer documento; há teste de integração cobrindo as quatro abas.
-
Análise dos formulários dentro da Caixa do setor (Caixa do setor → Análise dos formulários). O pedido que chega por formulário é um documento como qualquer outro e está na lista da caixa, sem marca de “tipo diferente”; a nova visão lê os mesmos documentos agrupados pelos assuntos que têm formulário — o que é novo desde a última visita, o que está em andamento, o que passou de 30 dias — e abre o painel de análise do assunto, recortado ao setor ativo. Não há mais uma área separada: o antigo endereço
/respostasleva à Caixa. Quem vê a caixa do setor vê a análise do que chegou a ele, sem permissão sensível; a permissão “Ver respostas” amplia para a unidade ou o órgão. O painel separa três canais: internet, outros setores e balcão. -
Construtor de formulários no assunto, no estilo Google Forms. O formulário saiu do modal de edição do assunto e ganhou página própria (
Assuntos → ícone de formulário): perguntas em cartões que se arrastam para reordenar, uma aberta por vez, com duplicar, remover e obrigatória. Tipos novos: escala linear (de 0 a 10 vira NPS), estrelas, grade de escolha, valor em R$, link, seção e upload de arquivo — além dos que já havia (CPF/CNPJ conferido, CEP, telefone, data, hora…). “Outra: ____” nas escolhas, limites de caracteres/valor/marcações, colar uma lista vira uma opção por linha, e blocos prontos (identificação, endereço, avaliação, documento com foto). Lógica condicional: uma pergunta pode aparecer só quando outra tiver certa resposta — e a escondida não é cobrada nem gravada. Pré-visualização em que dá para responder e testar o envio, aviso de alterações não salvas, Ctrl+S, e configurações do formulário: texto de abertura, mensagem de confirmação, aceitar respostas e encerramento automático em data e hora. -
Documento exigido com formato imposto. Cada documento que o assunto exige é uma pergunta de arquivo com os formatos aceitos (PDF, Word, Excel, imagens, HEIC do iPhone, DWG, P7S e outros), o tamanho máximo e a quantidade. O conteúdo é conferido pela assinatura do arquivo: uma planilha renomeada para “.pdf” é recusada no envio. A recusa diz qual documento falta, e não mais “faltam arquivos”.
-
Respostas e análise. A aba Respostas mostra o painel do formulário: volume e tendência da semana, internet × balcão, taxa de conclusão e tempo médio, o que está aberto há mais de 30 dias, respostas por dia, dia da semana, horário e setor, e o resumo de cada pergunta (contagem das escolhas, NPS, média/mediana/soma, termos mais citados, grade em mapa de calor). Há também a leitura uma a uma, a tabela e a planilha CSV para o Excel. Ver as respostas exige a permissão nova “Ver respostas e análise dos formulários” (dado pessoal do cidadão); documentos sigilosos ficam de fora e são contados à parte; a exportação fica na trilha de auditoria.
-
Raias por setor no desenho do rito, montadas sozinhas. Cada setor envolvido ganha a sua faixa, e cada figura fica na faixa de quem a faz: a fase, na raia do setor que responde por ela; a decisão, na raia da fase que decide; o início, na raia da primeira fase; cada fim, na raia de quem encerra. As raias não são desenhadas — são deduzidas de quem responde por cada fase —, então escolher o setor de uma fase a leva para a raia dele no mesmo instante, e a raia de um setor novo aparece sozinha. A ordem das faixas é a ordem em que o processo passa pelos setores. Soltar uma fase da paleta numa raia já a cria daquele setor, a “fase seguinte” nasce no setor da anterior, e arrastar uma fase para outra raia troca o setor dela. Um interruptor desliga as raias para quem prefere posicionar à mão.
-
Início e Fim na paleta, e mais de um fim. Apagados sem querer, não havia como trazê-los de volta. Agora estão na paleta: o início é um só (soltar outro traz o existente), e fim pode haver vários, como no BPMN — um para “deferido”, outro para “indeferido”, cada um na raia de quem encerra. O lugar deles também passou a ser gravado; antes era recalculado a cada abertura.
Alterado
-
A Busca no acervo não fecha mais a porta sem o OpenSearch. Quando o motor está fora — ou quando a consulta tem filtros —, a busca é feita pelo banco de dados com a mesma linguagem da caixa, em vez de responder “indisponível”.
-
O formulário do portal aponta o erro na própria pergunta. O botão “Protocolar” não fica mais cinza sem explicação: o clique confere tudo, marca cada pergunta com o problema dela e rola até a primeira. O que foi digitado fica guardado no aparelho e volta se a página fechar; depois de protocolar, o cidadão vê o número e a mensagem de confirmação do órgão.
-
Migração automática (015): os “documentos obrigatórios/opcionais” que eram só nomes viram perguntas de arquivo (PDF, JPG ou PNG, até 10 MB), preservando o que era obrigatório.
Corrigido
-
Instalação nova não subia: a imagem do MinIO saiu do Docker Hub. O
minio/minionão existe mais lá — quem já tinha a imagem em cache não percebeu, e só a máquina limpa falhava, com “pull access denied … repository does not exist”, no meio da criação da instância. O registro passa a ser o oficial (quay.io/minio/minio) e a versão, fixa (RELEASE.2025-09-07T16-13-09Z, a mesma que já rodava) —latestnum servidor de cliente é uma atualização que ninguém decidiu. Vale para as instâncias e para o cofre de backup da Torre. -
A variável do terminal de quem opera parava dentro do container. O
docker composedá precedência ao ambiente do shell sobre o--env-file, e quem instancia um cliente temTORRE_URLexportado para falar com a Torre: a instância nascia com o endereço do terminal gravado, e não o do.envdela — o heartbeat apontava paralocalhoste a frota mostrava a instância “sem sinal” desde o primeiro minuto. Ogovdocctlpassa a limpar do ambiente toda chave que o.envda instância define antes de chamar o Compose, em todos os comandos (subir, atualizar, backup e restaurar). -
O menu “Novo” abre o formulário, e não a lista. “Novo → Documento” e “Novo → Interessado” levam à listagem com
?novo=1, mas a tela ignorava o parâmetro: quem clicava caía na lista, sem nada aberto, e ainda tinha de procurar o botão que o menu prometeu. Agora o formulário abre ao chegar, e o parâmetro é consumido — recarregar a página ou voltar pelo navegador não reabre o cadastro, e o link copiado para um colega não abre um formulário em branco na cara dele. -
No celular, as listagens vazavam por cima da paginação. Oito telas — Usuários, Setores, Cargos, Marcadores, Tipos documentais, Trilha de auditoria, Ciclo de vida do acervo e Fluxos — tinham colunas que somavam mais que a largura do telefone e, sem área rolável, transbordavam do cartão e cobriam os botões de página: quem abria a lista no celular não conseguia ir para a segunda página, porque o toque pousava na tabela. Agora rolam na horizontal, como as demais.
-
A matriz de permissões não se marcava pelo telefone. A coluna de funcionalidades tem 340 px — cabe na estação e toma 87% de uma tela de 393. Presa à esquerda, ficava POR CIMA das caixas de cargo, e o toque nunca chegava nelas. Em tela estreita ela deixa de ser presa e acompanha a rolagem.
-
O título do cartão sumia atrás dos próprios botões no celular. Com ações de texto longo ao lado do nome — “Adaptar para outro setor”, no rito —, o título era espremido até largura zero: o cartão “Sobre o fluxo” aparecia sem nome nenhum. O cabeçalho passa a quebrar em duas linhas em telas estreitas.
-
Quem recebia um documento de outro setor não conseguia abri-lo. O alcance “do setor” liberava só o que o próprio setor EMITIU: o destinatário, com a permissão comum, recebia “Documento não encontrado” para o que estava na própria caixa. Agora o setor que recebeu pela caixa abre o documento (inclusive sigiloso dirigido a ele); setor sem relação continua sem acesso.
-
Arquivo com conteúdo diferente do nome é recusado também no envio interno, e não só no portal — a mesma leitura dos dois lados.
-
O formulário dos assuntos antigos não abria. Os 52 assuntos do plano de classificação gravados antes das perguntas próprias não tinham a lista no banco, e o construtor quebrava dizendo “Formulário não encontrado”. A API passou a tratar a lista ausente como vazia, a migração 015 completa os registros, e a tela só diz “não encontrado” quando é isso — os outros erros aparecem como erro. Ao criar um assunto, um atalho “Montar formulário” leva direto ao construtor.
-
A aba Respostas quebrava com documentos antigos. Documento gravado antes do ciclo de vida não tem a data de conclusão no banco; o painel tentava calcular a duração sobre ela e devolvia “Não foi possível concluir a operação” — e a lista marcaria esse documento como concluído sem estar. Os documentos passam a ser normalizados na leitura (sem regravar nenhum documento emitido).
-
No celular, as telas internas rolavam de lado. O topo (marca, menus e ações) passava da largura do aparelho; agora vira duas linhas, e as tabelas de Assuntos e da Central rolam dentro de si.
-
Em tela cheia, os menus abriam por trás do desenho. O seletor de “quem responde”, as dicas e os avisos ficavam escondidos atrás da camada da tela cheia — não havia como escolher o setor de uma fase sem sair dela.
-
O mesmo assunto pode ter um rito por secretaria, e um rito se ADAPTA para outra secretaria — não se empresta. “Licitação” é o mesmo assunto na Saúde e na Educação, e são dois ritos: o desenho é quase o mesmo, mas cada fase é atendida por setores diferentes (a comissão de licitação da Saúde não é a da Educação), e em algum ponto os dois sempre divergem. Por isso cada rito é conduzido por um setor só (ou vale para o órgão inteiro, que continua sendo o padrão), e a emissão escolhe pelo setor de onde o processo parte — o emissor no processo interno, o que vai atender no protocolo do portal. O rito de uma secretaria alcança os setores subordinados a ela, e o de um setor mais abaixo vence o da secretaria. Para a outra secretaria há “Adaptar para outro setor”: copia o desenho e troca quem responde por cada fase pelo equivalente no setor novo — achado pela sigla com a da secretaria trocada (SMSCPL → SMECPL) ou pelo nome sem o que identifica a secretaria (“Divisão de Compras da Saúde” → “…da Educação”); setores centrais, como a Procuradoria, ficam; o que não tem equivalente, ou tem mais de um, não é chutado e volta como pendência na tela. O rito adaptado nasce em rascunho, registra de onde veio e não fica ligado ao original. No painel da fase, “quem responde” lista primeiro os setores da secretaria que conduz o rito.
-
A troca da senha temporária parecia de outro sistema. O primeiro acesso do servidor — entre o login e a primeira tela — abria um cartão solto num cinza fixo, sem a marca e sem acompanhar o tema escolhido: quem acabou de digitar a senha que o administrador entregou via uma tela sem assinatura, justo no momento em que se pede uma senha nova. Passa a usar a mesma casca do cartão do login — papel, contorno, sombra e a marca no topo —, e o tema das duas telas de acesso virou um componente só, para que o cartão não fique num papel e os campos noutro.
Alterado
- O dono do rito é um setor, e não uma pessoa. Rito é responsabilidade
institucional: a comissão de licitação responde pelo rito da licitação,
independentemente de quem a preside neste semestre. Pendurado numa pessoa, o
campo apodrecia sozinho — quem sai de férias, muda de lotação ou se aposenta
levava consigo o único leitor do desvio. A migração
014-rito-por-setorconverte o dono de cada rito existente no setor padrão da pessoa que era dona; quando ela não tinha setor, o rito fica marcado “sem dono” para que alguém o assuma, em vez de ganhar um setor chutado.
Corrigido
- O protocolo aberto pelo cidadão entra no rito do assunto, como o processo aberto por dentro. O assunto é onde o órgão pendura o rito, e o pedido do portal já chegava classificado e roteado ao setor certo — mas nascia FORA DO MAPA: sem versão de fluxo, a barra de etapas não aparecia, o despacho não oferecia o caminho desenhado e o painel de aderência não enxergava o processo. O mesmo assunto produzia dois processos de naturezas diferentes conforme a porta por onde entrou, e a porta do cidadão é justamente a que mais precisa de prazo por fase e de responsável declarado, porque tem alguém do lado de fora esperando resposta. Sem rito publicado para o assunto, nada muda: o protocolo nasce como sempre nasceu.
Alterado
-
A decisão do BPMN virou uma figura da paleta. O losango nascia quando uma fase ganhava a segunda saída — regra correta, e indescobrível: quem queria um “sim ou não” procurava a figura na paleta, não achava, e concluía que o editor não fazia decisão. Agora há três caminhos para a mesma decisão, e os três param no mesmo lugar: arrastar Decisão sobre a fase que decide; soltá-la no vazio, onde ela espera tracejada dizendo “ligue a fase que decide” até que uma seta a adote; ou o botão “Aqui decide” no painel da fase. O que já saía da fase passa a sair do losango, e as saídas nascem com “Sim” e “Não”. Junto, dois defeitos que só apareciam no gesto: uma figura escondida embaixo de outra capturava o que era solto em cima (agora ganha a que está por cima, que é a que se está vendo), e o rascunho vazio nascia com uma fase em branco que se sobrepunha às demais e ainda barrava o “Gravar” com “há uma fase sem nome” — sobre uma fase que ninguém criou.
-
Ligar uma fase na outra virou o gesto mais fácil da tela de fluxos, e a bifurcação passou a dizer qual caminho é o “sim”. O ponto de ligar existia num canto só da figura e ficava invisível até o ponteiro passar por cima — quem abria o desenho não descobria que dava para ligar. Agora toda figura liga pelos quatro lados, o ponto está sempre visível e cresce ao aproximar, qualquer ponto serve para sair e para chegar, e soltar a seta no vazio já cria a fase seguinte, ligada. Uma fase selecionada também encadeia a próxima num clique (“Fase seguinte”). A segunda saída de uma fase faz nascer o losango de decisão na hora, com Sim e Não escritos nas setas; apagar um dos caminhos desfaz o losango sozinho. Clicar numa seta abre onde se escreve a condição — com “Deferido”, “Indeferido”, “Com pendência” e “Devolver” a um clique —, e o losango ganhou a pergunta que dá sentido às respostas (“Habilitado?”). O rótulo não fica só no desenho: ele aparece no seletor do despacho como “Deferido → Publicação”, em vez de obrigar quem despacha a lembrar qual fase correspondia ao sim. Para organizar rito longo, a paleta ganhou Trecho (moldura com título, para agrupar “Instrução” e “Julgamento”) e Anotação (a observação que não cabia em campo nenhum, presa à fase por linha tracejada) — nenhuma das duas entra no caminho nem vira registro. E o desenho agora abre em tela cheia: no espaço do modal, um rito de catorze fases como o pregão da Lei 14.133 abria abaixo da dobra e parecia vazio. Migração
013-desenho-do-ritoprepara os ritos já gravados; nenhum caminho de processo muda, e a seta de um rito antigo abre sem rótulo, como já era. -
A tela do assistente de IA explica antes de configurar. Ela abria direto numa tabela de tetos por cargo, e quem chegava não descobria se o assistente funcionava, onde aparecia para o servidor nem por que um cargo estava apagado. Agora começa por “Está pronto para usar?”, em quatro etapas com o que falta e o botão que resolve: servidor de modelo (com o motivo exato, os modelos que o servidor de fato tem e as instruções para quem opera a instalação), ligado no órgão (a chave salva na hora), quem pode usar (liberar um cargo é uma chave na própria tela, pelo mesmo caminho e com a mesma auditoria da matriz de Permissões — nova rota
PUT /api/ia/acesso) e testar (abre o painel com uma pergunta pronta ou manda um parágrafo de despacho para a análise de texto, de ponta a ponta pelo modelo). Segue um quadro de como o assistente funciona — onde aparece, o que responde e o que disso usa o modelo, o que nunca faz —, as orientações com exemplos de um clique, a tabela de cargos com acesso e perfil de uso (“Enxuto”, “Moderado”, padrão da instalação) que preenche os três tetos de uma vez, e o consumo do dia medido contra o teto. -
Os tetos em tokens ganham tradução e sugestão medidas. “Tokens por dia” e “tokens por resposta” eram números sem referência: ninguém sabe se 20.000 é folgado ou aperta. A tela ganhou uma régua calibrada na própria instalação: o custo médio de cada tipo de pedido (resumo, análise para decidir, análise de texto) sai das respostas reais gravadas nos últimos 30 dias — marcado como “medido · N” — e, enquanto não há amostra, de uma estimativa conservadora marcada como tal. Cada campo de tokens diz por extenso o que o valor em vigor significa (”≈ 6 análises ou 12 resumos”, ”≈ 210 palavras · 2 a 3 parágrafos”), inclusive quando herda. O histórico por pessoa e por dia (mediana, 95% e dia mais pesado) sustenta uma sugestão de tetos — p95 com 50% de folga, arredondada e cortada no teto da instalação, ou “deixe em branco” quando ainda não há 10 pessoa-dias de uso —, aplicável a todos os cargos com acesso em um clique. A resposta de
GET /api/ia/assistentetraz tudo emmedidas; a conta é pura e testada em@govdoc/ia(calibracao.ts). -
Perguntas por dia preenchem os tokens sozinhas. Ao digitar as perguntas de um cargo, os tokens por dia passam a ser calculados na hora (perguntas × custo médio de uma pergunta nesta instalação, medido das perguntas reais dos últimos 30 dias; sem 10 perguntas de histórico vale o pedido mais caro, para o teto em tokens nunca cortar antes das perguntas prometidas) e o teto por resposta vem da sugestão. Os perfis “Enxuto” e “Moderado” fazem a mesma conta. Um valor de tokens digitado à mão nunca é sobrescrito: só o que a própria tela calculou. A régua mostra a média por pergunta com a etiqueta “medido · N” ou “estimativa”. Um teto já gravado que bate com o calculado (margem de 20%, porque o custo medido anda um pouco a cada dia) continua acompanhando as perguntas nas visitas seguintes, e 1.000 tokens passam a dizer “não cabe nem 1 resumo” em vez de ”≈ 0 análises”.
-
Cada servidor vê a própria cota do assistente. O painel ganhou o bloco “Sua cota de hoje”: perguntas ao modelo e processamento em tokens, com barra que fica amarela a partir de 80% e vermelha no teto, o cargo de onde vem o limite, o tamanho máximo das respostas e o aviso de que tudo zera à meia-noite. Quando o órgão inteiro passa de 80% do teto dele, a linha do órgão aparece também. Esgotada a cota, o painel avisa antes de a pessoa digitar, desabilita o campo de texto para análise e mantém a pergunta aberta para a consulta de andamento.
-
O teste da etapa 1 virou um teste de verdade. “Testar agora” mandava um texto fixo para o painel lateral e gastava mais espaço explicando o teste do que testando. Agora o administrador escreve (ou cola) o próprio parágrafo e clica em “Analisar este texto”: a resposta do modelo aparece na própria etapa, com quanto tempo levou, o tamanho da resposta e o aviso de que gastou uma pergunta da cota. A segunda aba consulta um documento pelo número e mostra o andamento — respondido sem o modelo e sem gastar cota, como a tela promete. Vai pelas mesmas rotas do painel do servidor, então o teste também prova permissão, cota e limite de tamanho.
-
A tela do assistente vira um roteiro em quatro etapas, com um só “Salvar”. Era uma rolagem única com quatro botões de salvar, e a ordem importava sem aviso: 200 perguntas num cargo eram recusadas porque os 200 da máquina, digitados no cartão de cima, ainda não tinham sido salvos por outro botão — e “Salvar orientações” parecia salvar tudo. Agora: (1) Preparar — modelo respondendo, ligado no órgão, orientações e teste; (2) Quem pode usar — chaves por cargo, gravadas na hora; (3) Quanto cada um pode usar — máximo da máquina, total do órgão (opcional) e cada cargo num rascunho único, validado contra o que foi digitado e não só contra o que está salvo; (4) Revisar e salvar — a lista do que muda (antes, depois e o que significa), um botão que grava na ordem certa com o andamento de cada parte, e o que passou a valer para cada cargo. A etapa fica na URL (
?etapa=), a tabela de limites mostra só os cargos com acesso, a régua de medições fica recolhida, uma faixa avisa de alterações por salvar em qualquer etapa e o navegador pede confirmação ao sair com rascunho. As contas saíram da página paraassistente-de-ia/calculos.ts, com testes. -
Os limites da instalação saem do
.enve vão para a tela. O cartão “Limites da instalação (a máquina)”, na tela do assistente, edita os cinco tetos que antes só existiam como variáveis de ambiente: perguntas e tokens por dia, por pessoa e para o órgão, e o tamanho máximo de uma resposta. Só o Operador da Plataforma altera (nova rotaPUT /api/ia/instalacao, com auditoria); para o administrador do órgão o cartão é de leitura, e a trava que impede um órgão de ocupar a máquina inteira continua valendo. As variáveisIA_TETO_*eIA_TOKENS_MAXIMOSpassam a ser o valor de fábrica: valem enquanto ninguém salvar na tela, e cada campo tem “voltar ao padrão”. Zero nos diários continua sendo “sem limite”; a resposta fica entre 120 tokens e metade da janela de contexto do modelo. Baixar um teto avisa quais cargos e o teto do órgão ficaram acima dele. Os valores ficam na nova coleçãoconfiguracao_ia.
Corrigido
-
O assistente parou de responder sobre o documento errado. Perguntar “em que etapa está o 9/2026” trazia o andamento do 69/2026: a busca do acervo casa por trecho, e sem casamento exato o código usava o PRIMEIRO resultado da lista. Agora só o número exato vale; quando o número se repete entre tipologias (Memorando 9/2026 e Ofício 9/2026 convivem), o assistente lista os dois e pede a tipologia — que reconhece na própria frase (“ofício 9/2026”). Sem documento com aquele número, responde que não encontrou, em vez de responder sobre outro.
-
Escolher o documento no teste virou uma busca, não um número digitado. Na etapa 1, a consulta de andamento ganhou um campo de busca por número ou assunto, que lista “Tipologia número — assunto” e manda o documento escolhido, não o texto digitado. Os documentos cujo número é exatamente o buscado aparecem primeiro.
-
As perguntas do órgão inteiro também preenchem os tokens. Na tela do assistente, o cálculo automático só existia nas linhas dos cargos; no bloco “Teto do órgão inteiro”, digitar as perguntas não mexia nos tokens do órgão, e parecia defeito. Agora a conta é a mesma, com o teto do órgão, e o bloco explica que o tamanho da resposta é definido por cargo. Quando um valor de tokens digitado à mão é mantido, a tela passa a dizer “valor digitado à mão” com o atalho “usar o calculado (N)”, em vez de preservá-lo em silêncio. O valor calculado nunca passa de 10.000.000, o maior teto que a API aceita.
-
Cota esgotada não barra mais a consulta de andamento. A API recusava qualquer pergunta depois do teto, inclusive “em que etapa está”, que é respondida sem modelo e não gasta cota. Agora só o que aciona o modelo (resumo, análise para decidir, análise de texto) é recusado.
-
O contador do painel do assistente fica em dia. O rodapé “Hoje: N de M perguntas” vinha de uma consulta em cache por um minuto e dizia “0 de 2” no instante em que a terceira pergunta era recusada por estourar o teto. Agora a situação é renovada a cada pergunta, respondida ou recusada.
-
A matriz de permissões edita todo cargo, e o que trava diz por quê. As colunas dos cargos de sistema vinham inteiras desabilitadas para o administrador do órgão; agora só ficam travadas, caixa a caixa e com o motivo no passar do mouse, as três permissões indispensáveis nos cargos que impedem o bloqueio total (Administrador e Operador). O “todas” do módulo pula essas caixas. Na API, a conferência “ninguém concede o que não tem” passou a olhar só o que está sendo concedido — a permissão que entra ou que ganha alcance maior —, e não o conjunto inteiro do cargo: antes, tirar uma caixa do Operador era recusado porque o administrador não possui as permissões exclusivas que o cargo já tinha. Retirar permissão nunca exige conferência.
-
Cargos de sistema se renomeiam, se editam e se excluem. “Administrador do Órgão”, “Operador da Plataforma” e “Servidor” só tinham o atalho para Permissões, e o nome deles era imutável porque servia de chave da autorização. Cada um ganhou uma chave interna (
administrador_orgao,operador,servidor): é ela que a migração de boot, a proteção contra bloqueio e o cálculo de “é operador” passam a usar. Com isso o nome virou rótulo — “Servidor” pode virar “Colaborador” sem que ninguém perca acesso — e os três seguem as regras de qualquer cargo: exclusão recusada enquanto houver gente lotada, excluído de propósito não volta no boot, descrição e nome preservados pela migração. Renomear não exige possuir as permissões do cargo; só alterá-las exige. Única exceção, explicada na tela: o Administrador do Órgão não se exclui, porque sem ele ninguém administra a instalação. -
A lista de usuários é paginada. A tela pedia cinquenta e escondia a paginação: o 51º servidor não existia para quem administrava, sem aviso. Agora folheia no servidor — 25 por página, com opção de 10, 50 ou 100 —, mostra “de–até de total”, não pisca ao trocar de página, só busca depois que a pessoa parou de digitar e volta à primeira página quando a busca ou o filtro muda. Ganhou também o filtro Ativos / Inativos / Todos, que a API já oferecia e a tela não expunha.
-
Lotar sem cargo. O campo de cargos do painel “Usuários do setor” deixou de ser obrigatório. Em branco, a pessoa entra no setor sem cargo próprio: alcança o setor, abre a caixa dele e atua ali com as permissões dos cargos que já tem em outros vínculos. O vínculo aparece como “sem cargo próprio” e some sozinho quando a pessoa ganha um cargo naquele setor. Quem já está no setor não recebe um segundo vínculo vazio.
-
O setor pode dizer quais cargos cabem nele. Campo opcional “Cargos permitidos no setor”, na criação e na edição. Em branco, qualquer cargo pode ser lotado ali — a restrição é exceção, e tratá-la como padrão travaria toda lotação no dia em que o campo nasceu. Com cargos escolhidos, só eles podem ser usados ao lotar alguém no setor: a API recusa nomeando o cargo de fora, o painel de usuários só oferece os permitidos e marca em laranja a lotação antiga que ficou fora da lista (ela continua valendo; a restrição vale para o que entra). A listagem de setores mostra “N cargos permitidos”.
-
Uma pessoa pode ter mais de um cargo no mesmo setor. O painel “Usuários do setor” fixava um cargo por lotação; agora o formulário aceita vários de uma vez, cada cargo vira uma lotação e as permissões da pessoa naquele setor são a soma de todos. A lista mostra uma linha por servidor com os cargos como etiquetas: fechar a etiqueta retira aquele cargo, “Remover” tira a pessoa do setor. Quem já está no setor ganha cargos pelo mesmo formulário — a API cria só o que falta e diz quantos a pessoa já tinha (
cargosIdsemPOST /usuarios/:id/lotacoes;cargoIdcontinua aceito). -
Todo cadastro edita e exclui. Tipos documentais, setores, cargos, marcadores e fluxos ganharam o botão “Editar” que faltava, e a exclusão passou a fazer o que o nome diz. Antes, a tipologia só “encerrava”, o setor não saía da lista de jeito nenhum e o fluxo não podia ser apagado nem quando fora montado errado. A regra agora é uma só, nos três: o que nunca foi usado some de verdade; o que já tem história é inativado, e a resposta diz qual dos dois aconteceu. Uma tipologia sem documento, assunto, serviço ou fluxo apontando para ela é apagada; com qualquer vínculo, é encerrada para novas emissões. Um setor sem lotação, documento, tramitação ou assunto direcionado é apagado; com histórico, sai do organograma e deixa de receber, mas a linha do tempo dos processos continua a citá-lo. Um fluxo por onde nenhum processo passou é apagado com todas as versões; se algum correu nele, a exclusão é recusada e o caminho é tirá-lo do ar. A regra de numeração da tipologia — reinício, contador e “começa em” — trava depois do primeiro documento, e a tela desabilita os campos com o motivo escrito ao lado.
-
A tela de fluxos gira em torno de um lugar: abrir o fluxo. A lista espalhava sete botões por linha — “Ver v2”, “Quadro”, “Nova versão”, “Editar rascunho”, “Pôr em vigor”… — e quem chegava não sabia o que era quadro, o que era versão nem por onde começar. Agora cada linha resume (a que se aplica, versão no ar, rascunho em edição) e oferece Abrir e Excluir. Dentro do fluxo aberto estão, em ordem: o que ele é (nome, dono, assuntos e tipologias, editáveis ali mesmo), as fases no desenho (o rascunho se edita; a versão publicada aparece travada com o botão “Editar fases”, que abre um rascunho copiado dela) e a operação (ver os processos em cada fase, pôr em vigor, tirar do ar). Criar um fluxo já o abre para desenhar as fases.
-
A Central de Atendimento deixou de disputar com Assuntos. Saíram as abas Categorias, Perfis e Órgãos responsáveis — três cadastros que ninguém entendia por que precisavam existir antes de escrever “Trânsito” num serviço. Categoria, perfil e órgão responsável voltaram a ser texto do próprio serviço, com o que já foi digitado nos outros como sugestão, que é o bastante para não dividir a mesma categoria em duas grafias. O serviço passa a apontar para o assunto, e a tela mostra ao lado o que o assunto decide: quem recebe, o prazo de resposta, quantas perguntas e documentos o formulário exige, se é interno ou externo. A tipologia vem do assunto quando ele pertence a uma. Na outra ponta, a tela de Assuntos marca com “externo” o que está aberto ao cidadão, diz por quais serviços da Central ele aparece e oferece “Publicar na Central como serviço”, que abre o formulário já com o assunto. O princípio: a Central é o que o cidadão vê; o Assunto é como o órgão atende. A migração 008 recolhe os termos dos cadastros descontinuados.
No dia seguinte saiu também o campo “Órgão responsável” do serviço: quem recebe o pedido já é o setor de destino — o do assunto, ou o padrão do serviço —, e um segundo nome para a mesma coisa só podia divergir dele. A vitrine deixou de exibir a pílula com esse texto, e a migração 008 limpa o campo dos serviços já gravados. A publicação com abertura e a abertura pelo cidadão passaram a aceitar o destino vindo do assunto: antes, um serviço cujo assunto já direcionava para um setor era recusado por não ter setor próprio.
-
A marca ganhou desenho novo. Saiu o quadrado em degradê com a folha e a seta; entram duas lâminas separadas por um corte diagonal e o letreiro “GovDoqui” desenhado em contorno. Vale nas quatro superfícies de uma vez — site, portal do cidadão, tela de entrada, casca interna e Torre —, porque uma marca que muda em três lugares e fica na quarta é pior do que não mudar.
Três decisões que vieram junto:
- O símbolo leva o degradê da marca; a palavra, a cor do texto. O símbolo
recebe o mesmo azul → violeta → ciano do botão primário e do indicador de
menu — é ali que a cor da aplicação pertence. A palavra fica em
currentColor, porque letreiro colorido perde legibilidade e obrigaria um desenho por fundo. As três paradas do degradê são variáveis CSS e trocam para os tons claros onde o plano é escuro:#2563EBrende 2,6:1 sobre o#0B1220do rodapé do portal e sumiria;#7AA7FFrende 7,4:1. A troca não depende do tema, porque o plano escuro é escuro nos dois. - A palavra é desenho, não fonte. Antes “Gov” e “Doqui” eram dois
<span>em Space Grotesk com pesos diferentes, o que dava uma assinatura em máquina com a fonte carregada e outra sem. Agora é o letreiro da marca, igual em toda parte. - Os três apps ganharam favicon. O sistema e a Torre não tinham nenhum e apareciam com o ícone genérico do navegador. O novo acompanha o tema do navegador: escuro em aba clara, claro em aba escura.
- O símbolo leva o degradê da marca; a palavra, a cor do texto. O símbolo
recebe o mesmo azul → violeta → ciano do botão primário e do indicador de
menu — é ali que a cor da aplicação pertence. A palavra fica em
Adicionado
-
O consumo da IA passa a ser parametrizado por cargo, numa tela. A permissão já dizia quem pode usar o assistente; faltava dizer quanto. Sem isso, conceder a IA a uma prefeitura inteira era um salto no escuro: o recurso escasso é tempo de CPU de uma máquina que atende todo mundo, e dez análises de processo simultâneas param a fila do município.
A nova tela Assistente de IA (permissão “Configurar o assistente do órgão”) reúne o que antes só existia em variável de ambiente ou em rota sem interface: as orientações do órgão, o botão de ligar e desligar, o teto do dia e — o que é novo — um limite por cargo, em três réguas: perguntas ao modelo por dia, tokens por dia (entrada mais saída) e tokens por resposta.
O limite obedece a três andares, e o de baixo só aperta: a instalação declara o que a máquina suporta (variáveis de ambiente, de quem opera a plataforma), o órgão aperta o total do dia, e o cargo distribui o que sobrou — o gestor que lê processo inteiro ganha folga, o balcão que só consulta andamento recebe o bastante. Um administrador de órgão consegue redistribuir capacidade; não consegue criar capacidade que a instalação não autorizou.
Campo em branco significa “herda o teto de cima”, e é o padrão: nenhuma instalação existente muda de comportamento ao atualizar. Quem acumula cargos fica com o teto mais generoso entre eles, nunca a soma — pela mesma razão que o escopo de permissão prevalece pelo mais amplo, e para que uma lotação secundária no balcão não rebaixe quem já tinha folga.
A tela mostra ao lado o teto da instalação e o consumo de hoje (perguntas, tokens e quantas pessoas), porque calibrar cota sem o gasto real é chute. E mostra apagado o cargo que não tem a permissão de usar o assistente, com o atalho para concedê-la: configurar o teto de quem nem abre a ferramenta é configurar no vazio.
A recusa passou a dizer qual teto barrou. “Você atingiu o limite de 25 perguntas para hoje, o limite volta a zero amanhã” e “o órgão atingiu o limite de uso, procure quem administra o sistema” mandam o servidor para lugares diferentes — e o primeiro texto, que servia para os dois casos, mandava para o lugar errado na metade das vezes.
Toda alteração de limite entra na trilha de auditoria com autor, cargo e valores, como qualquer configuração que muda o que dezenas de pessoas conseguem fazer no dia seguinte.
Novas variáveis de ambiente, ambas
0(sem teto) por padrão para não apertar ninguém na atualização:IA_TETO_TOKENS_DIA_PESSOAeIA_TETO_TOKENS_DIA_ORGAO. Contar só perguntas era régua torta — uma consulta de andamento nem acorda o modelo, e uma análise com oito anexos custa cem vezes mais.
Alterado
-
O produto passa a se chamar GovDoqui. A grafia brasileira do “doc” que todo servidor já fala. A marca muda em tudo que a pessoa vê — site, tela de entrada, portal do cidadão, título das abas, remetente dos e-mails, painel da Torre e o dashboard da frota no Grafana. Nada muda no que a máquina lê: pacotes
@govdoc/*, imagens no GHCR, nomes de container, volumes, rede,govdocctle o domíniogovdoc.com.brcontinuam como estão — renomear identificador de infraestrutura quebraria deploy e volume em troca de nada. -
O assistente passa a falar de “documento”, e não de “processo”. Ele abre em memorando, ofício, circular, ata e protocolo do cidadão do mesmo jeito que abre num processo administrativo, mas a tela, o painel de travamentos e o próprio prompt do modelo diziam “processo” — o que faz o servidor de um setor que só emite ofício concluir que a ferramenta não é para ele. Mudou o rótulo do botão, as ações rápidas, as respostas da API, o texto de ajuda e as instruções do modelo, que agora enumeram as tipologias e mandam reservar a palavra “processo” para quando a tipologia for essa. O roteador de intenções ganhou os sinônimos junto: sem eles, “Analise este documento” cairia no padrão de revisão de texto e o gestor receberia uma crítica de redação no lugar da leitura que pediu. Um teste novo fixa o caso.
Adicionado
-
A página de inteligência artificial no site (
/inteligencia): o que o assistente faz, onde o modelo roda e o que ele não faz. A home ganhou a seção com o painel do assistente reproduzido fielmente — o conteúdo mostrado é o de uma análise real da base de demonstração, com o cabeçalho determinístico e os achados que o modelo tirou dos anexos. O argumento central aparece na tela em dois rótulos de cor diferente: apurado pelo sistema e lido pelo modelo.A IA passou a aparecer também nos diagramas da home, e não só no bloco dedicado: o painel de isolamento por instância lista o modelo ao lado de banco, arquivos, busca e segredos — é onde o argumento de que o documento não sai do órgão pertence —, e o registro do processo no herói mostra a análise entre o parecer assinado e o arquivamento, na ordem em que o gestor lê. Abaixo das cinco etapas do “como funciona”, uma linha diz quais delas o assistente atravessa. A IA não virou uma sexta etapa: não é fase do ciclo de vida do documento.
Faltava dizer isso onde o visitante lê primeiro. O herói da home ganhou o aviso de lançamento (“Novo · Assistente de IA que lê o documento inteiro”), que leva à página de inteligência, e o parágrafo de abertura passou a citar o assistente entre a assinatura e a hospedagem. Nas cinco etapas, a produção e a tramitação carregam a linha do que o assistente faz ali — revisa a minuta; lê o documento inteiro e diz onde travou —, e a nota abaixo virou uma chamada com o ícone, em vez de um parágrafo cinza que a leitura em diagonal pulava. A página “Como funciona”, que não falava de IA, ganhou a mesma linha nas duas etapas em que ele atua e uma seção própria, com o painel “Onde travou” e os quatro pedidos que o assistente atende. As etapas em que ele não atua continuam sem a linha: citar IA em assinatura, busca ou portal prometeria o que não existe.
-
Assistente de IA na plataforma (Fase A,
docs/ia-e-canais.md§16): painel ao lado do trabalho que consulta o processo aberto — andamento, etapa, prazo, resumo das peças — e analisa o texto que o servidor está escrevendo, sempre citando as peças em que se baseou. O assistente não toca no banco: consulta pelas mesmas rotas da tela, com o token de quem perguntou, de modo que herda recorte de setor, sigilo, delegação e auditoria sem uma regra nova. O modelo roda dentro do perímetro (IA_URL); vazio, o recurso se declara indisponível e o sistema segue tramitando. A consulta de andamento responde sem passar por modelo nenhum — funciona mesmo com o servidor de modelo fora do ar. Três permissões novas: usar o assistente e pedir análise de texto (no piso do cargo Servidor) e configurar o assistente do órgão. Conversa tem prazo de validade: não é acervo. -
Verificação pública de autenticidade no portal (
/portal/<órgão>/verificar/<código>): a rota da API já existia; agora há a tela, alcançável pelo campo de busca da Central de Atendimento e pelo rodapé de todo documento impresso. Mostra número, assunto, emissor, assinaturas e a impressão SHA-256 do conteúdo; documento sigiloso confirma só existência e integridade. -
Identidade visual do GovDoc (
docs/ui/identidade-visual.md): tokens, tipografia (Space Grotesk + DM Sans), marca em SVG, movimento e regras de acessibilidade compartilhados por site, portal, tela de entrada e Torre. -
Rotas do operador (
/api/operador/inventarioe/api/operador/metricas), abertas só porOPERADOR_TOKEN; e o heartbeat: a instância manda o próprio inventário à Torre a cadaHEARTBEAT_INTERVALO_SEGUNDOS(TORRE_URL+TORRE_TOKEN; vazios desligam). -
A Torre (
apps/torre+apps/torre-web): painel de operação com frota, ficha do cliente, rotação de token, registro de backup, leads do site e status público. Sobe cominfra/torre/docker-compose.yml. -
Site institucional (
apps/site, Astro, estático): início, como funciona, segurança, contratação, demonstração, status (lê a Torre), novidades (este arquivo) e contato (grava lead na Torre). -
govdocctl(infra/govdocctl.ts):instanciar,registrar,atualizar(com reversão),backup,restaurar,removerepacote. Traefik do host eminfra/compose.host.yml.
Alterado
-
Site institucional redesenhado: herói com o processo tramitando em animação, números que contam ao rolar, grade de diferenciais, linha das etapas, diagrama de instâncias isoladas, cabeçalho translúcido com menu de celular e rodapé com o status real das instâncias. Todo script do site em TypeScript; movimento desligado em
prefers-reduced-motion. -
Portal do cidadão com casca única (
CascaDoPortal): cabeçalho com brasão, navegação (Serviços, Meus protocolos, Verificar), tema claro/escuro, plano escuro de contexto por página e rodapé com endereço e telefone do órgão. Cartões de serviço em grade, resumo em “Meus protocolos”, andamento como conversa e resposta ao órgão em cartão próprio. -
Tela de entrada em dois painéis (marca e promessa à esquerda, formulário à direita), com o nome do órgão da instalação e alternância de tema.
-
Torre com barra lateral escura, cartões de indicador, pílulas de situação e tela de entrada própria.
-
Casca interna alinhada à identidade: azul da marca, DM Sans, títulos em Space Grotesk, barra superior fixa e translúcida, cartões com raio e sombra novos. Tokens e nomes do 1Doc preservados.
-
Uma instalação atende um único órgão. O login não pede mais o identificador do órgão; a API resolve pelo órgão ativo da instalação. O banco recusa um segundo órgão ativo (índice parcial único) e a API se recusa a subir sobre um banco que já tenha dois.
-
O web fala com a API pelo mesmo domínio. O nginx da imagem do web faz proxy de
/api,/healthe/documentacao;VITE_API_URLeCORS_ORIGENSpassam a ficar vazios por padrão. A mesma imagem sobe em qualquer instância. -
/healthe/sistema/saudereportam a versão real da build (APP_VERSAOna imagem, ou a dopackage.json).
Observabilidade e cofre (tudo de código aberto)
- Alloy por host (
infra/observabilidade/compose.host.yml): logs de todo containergovdoc-*para o Loki, rotulados por projeto e serviço; métricas de cada instância (/api/operador/metricas) para o Prometheus da Torre por remote-write. Alvos mantidos pelogovdocctleminstancias/alvos/. - Pilha da Torre (
infra/torre/compose.observabilidade.yml): Loki, Prometheus com regras (instância fora, p95 acima de 1 s, erros 5xx, memória no teto), Alertmanager, Grafana com painel da frota provisionado, e o cofre (MinIO) dos backups. - Alertas na Torre:
POST /api/alertasrecebe o webhook do Alertmanager; a frota mostra os alertas abertos por instância e a ficha os lista. - restic:
govdocctl backuppassa a enviar o backup ao cofre, cifrado e deduplicado, com retenção 7 diárias / 4 semanais / 6 mensais.--todasnobackupe noatualizar. govdocctl restaurar --do-cofre: traz do restic o último snapshot da instância e restaura a partir dele — o ensaio de desastre em que o host perdeu os backups locais.- Prometheus e Alertmanager com
--web.external-url: os links da interface apontam para o endereço público, não para o nome interno do container. - Traefik v3.6 nos compose do host: as séries anteriores pedem a API 1.24
do Docker, que o Docker Engine 29 recusa — o provedor nunca via container.
infra/compose.host.local.ymlé o Traefik sem TLS para desenvolvimento.
Operação em escala
- Rotação de log em todo serviço do compose (20 MB × 5 por container).
infra/compose.producao.yml: nenhuma porta publicada e teto de memória por serviço, dirigido pelo perfil (govdocctl instanciar --perfil), com o cache do Mongo limitado por--wiredTigerCacheSizeGB. Entra sozinho quando a instância tem--dominioou--producao.docs/operacao/deploy-na-torre.md: como subir host, Torre, versão e cliente, e a lista do que falta para operar 100 instâncias.
Corrigido
- O contador de requisições da API (
govdoc_requisicoes_total, p95 e negativas de permissão) nunca recebia amostra: o hook estava dentro do plugin de rotas do sistema, e o Fastify encapsula hooks por plugin. Passou para a raiz da aplicação; o teste agora exige amostra, não só o cabeçalho. - A API não segura mais o boot esperando o motor de busca: a preparação do índice corre em segundo plano. Um OpenSearch ausente custava dois minutos de API fora do ar.
- No compose,
BUSCA_URLeS3_ENDPOINT_PUBLICOvazios no.envpassam a ser honrados como vazios (desligado / mesmo endereço interno), em vez de substituídos pelo padrão.
Removido
PORTAL_ORGAO_PADRAO: não há mais o que escolher, a raiz é do órgão da instalação.
Operação
- Tag
vX.Y.Zpublicaghcr.io/100codigo/govdoc-apiegovdoc-web, depois de tipos, lint, testes e verificação de vulnerabilidades (Trivy).
0.1.0 — 09/09/2026
Fases 0 a 6 do ultraplano, o portal do cidadão parcial e a frente de paridade
com o 1Doc, conforme docs/status.md.