Skip to content

Metodologia e honestidade

Todo o resto no Futuros — o pipeline, as citações, o assistente — existe para sustentar um único compromisso: não afirmar mais do que a evidência permite. Esta página reúne as regras e as superfícies que tornam esse compromisso verificável, não retórico. É a base de credibilidade dos quatro pilares: sem honestidade auditável, nem o fundo fiduciário atrai contribuintes nem a governança consome a inteligência.

O contrato completo, orientado ao usuário final, vive em futuros.xyz/metodologia.

O Protocolo Futuros

O protocolo é um contrato de voz que governa cada superfície:

  • Cada afirmação carrega a sua fonte ou a sua etiqueta. Se há número, há citação; se é projeção, carrega a sua taxa base e o seu pressuposto declarado ([SUPUESTO]).
  • Fontes em conflito não são suavizadas. Quando duas fontes divergem, mostram-se ambas e a discrepância; não se faz média em silêncio nem se escolhe a mais conveniente.
  • Direto, concreto, falsificável. Sem afirmações aspiracionais sem mecanismo por trás. Um "X% de impacto" precisa de um modelo ou de um benchmark de par, não de uma intenção.
  • Postura não alinhada. Crítica por igual das dependências dos EUA, da China e da UE; a região regula a partir das suas próprias tradições jurídicas.

Saúde e confiança do dado

public/data/data-health.json pontua a qualidade de cada célula pilar × país, e a superfície /confianza a expõe. A pontuação não é uma nota subjetiva — é uma fórmula publicada, implementada em scripts/bake-data-health.ts (puro node:fs: sem rede, sem LLM):

confiança = round(100 · (0,45·rastreabilidade + 0,30·frescor + 0,25·confiança_declarada))

Os três componentes, com a sua fórmula exata:

ComponenteComo é calculadoPeso
RastreabilidadeIndicadores da célula que carregam citation_id e vintage_year, dividido pelo total de indicadores.0,45
FrescorPor indicador, clamp₀₁(1 − max(0, idade − 2)/8) com idade = ano atual − vintage_year (ou o último ano da série se falta o vintage): crédito pleno até 2 anos de idade, decai linearmente, zero aos 10. A célula toma a mediana entre os seus indicadores. Deriva do vintage de cada número, não do ledger de refresh — esse é uma superfície à parte.0,30
Confiança declaradaA da própria célula, mapeada para um fator: high→1 · medium→0,6 · low→0,3 · sem dado→0,5.0,25

Além do fator contínuo, cada célula recebe uma etiqueta pela mediana de idade dos seus vintages: fresh (≤2 anos), aging (≤5), stale (>5).

Ao redor da pontuação, a mesma camada gera (bake) três sinais a mais — e nenhum deles penaliza a confiança:

SinalRegra exata
AnomaliasSobre as variações percentuais ano a ano de cada série (mínimo 6 pontos e 5 deltas): z robusto 0,6745·(Δ − mediana)/MAD, marcada só quando abs(z) > 4 e o resíduo ≥ 10 pp. A conjunção é essencial: em séries muito estáveis o MAD é diminuto e um tremor normal dispara um z enorme — o piso absoluto o filtra. Máximo 4 por indicador e 6 por célula. Não desconta confiança: um choque real é dado real.
Fontes vencidasUma fonte está vencida quando mesmo o seu número mais fresco supera os 3 anos de idade. A worklist publica as 15 mais urgentes, ordenadas por quantos indicadores dependem de cada uma — o sinal acionável de o que reingerir primeiro.
Lacunas de coberturaUm indicador é "esperado" para um pilar quando é reportado por pelo menos max(2, ⌈60%·N⌉) dos N países que têm esse pilar (presença = valor não nulo ou série com algum ponto finito). A cobertura da célula é esperados-presentes ÷ esperados; requer duas passadas sobre o corpus (contagem regional, depois pós-passada por célula). A contagem regional publica as 12 lacunas com mais países faltantes — "o que conseguir depois". A cobertura não entra na pontuação de confiança.

Um limite deliberado do escopo: a camada de saúde pontua toda célula ready, esteja ou não em quarentena — a quarentena exclui uma célula do Índice Futuros, não do monitoramento. Uma célula em quarentena conserva a sua pontuação de confiança e as suas anomalias visíveis.

/confianza mostra essa pontuação junto ao ledger de frescor de quatro camadas de refresh-meta.json — as fontes têm namespace series: / doc: / signal: / social:, cada uma com a sua última data de refresh e a sua bandeira de vencida — mais o frescor ao vivo dos indicadores do Banco Mundial. A ideia é que o usuário possa distinguir, de relance, um indicador sólido e recente de um escasso ou velho — antes de se apoiar nele.

Incerteza e triangulação

A honestidade sobre o que não se sabe com certeza tem as suas próprias superfícies:

SuperfícieO que expõe
/confianzaPontuações de saúde e confiança por indicador.
/linajeA linhagem: origem e transformações de cada série.
/incertidumbreIncerteza e vintage explícitos dos números.
/triangulacionO mesmo fato contrastado entre fontes independentes.
/diccionarioDefinições precisas de indicadores e métricas.
/ontologiaO grafo de entidades do ecossistema.

A triangulação é especialmente importante: em vez de escolher uma autoridade única, o Futuros mostra como várias fontes independentes medem a mesma coisa, e onde convergem ou divergem.

Correções

public/data/falsifications.json é o log de falsificações: afirmações que foram postas à prova e, quando não se sustentaram, corrigidas. É exposto junto à metodologia de cada fonte (via SourceTrace). O compromisso é simétrico ao de citar: assim como cada número tem a sua fonte, cada afirmação refutada deixa rastro auditável da sua correção.

Honestidade quando algo não está configurado

É talvez o princípio mais distintivo: as funções degradam de forma visível, nunca fingem. Quando um backend não está configurado, a plataforma o diz em vez de simular sucesso:

  • /contribuir sem armazenamento Upstash devolve um recibo com persisted: false — o recibo é real, mas declara que não foi persistido.
  • /alertas sem Mailgun degrada para um mailto honesto em vez de prometer um envio que não vai acontecer.
  • /consenso sem backend degrada para votação somente-local.
  • O assistente sem provedor soberano configurado usa o default de fronteira e o diz, em vez de afirmar uma soberania que não tem.

Fingir capacidade é a forma mais barata de mentir; o Futuros a proíbe por design.

Avaliação do assistente

O assistente não é julgado pela impressão de quem o experimenta: tem três arneses de avaliação, cada um com o seu comando, o seu escopo e o seu limiar:

ArnêsO que verificaLimiar
bun run eval:chat (scripts/chat-eval.ts)O contrato de grounding e profundidade contra o loop real e o corpus real: cada resposta com dados carrega pelo menos um [[cite:id]] que resolve para citações que as ferramentas realmente devolveram (sem ids inventados), o fora de tema é declinado sem citações fabricadas, as perguntas de panorama completo alcançam o piso de recuperação e fecham com pilotos, as definicionais não, e o stream sempre termina com done.Qualquer caso reprovado faz o script falhar (exit não-zero).
bun run eval:faithfulness (scripts/chat-faithfulness.ts)Fidelidade no nível da afirmação: um juiz LLM contrasta cada afirmação com número da resposta contra a evidência citada, e mede a precisão de atribuição.Gate CHAT_FAITH_MIN (default 0.85): abaixo dele, a execução falha.
bun run eval:retrieval (scripts/eval-retrieval.ts)Qualidade do índice semântico, sem modelo de resposta no loop: recall@1/3/5/10 e MRR sobre casos rotulados, mais a abstenção: as consultas fora do corpus devem ficar abaixo do piso de runtime (0.4, o mesmo que search.ts aplica). Uma varredura de pisos torna legível o tradeoff sobrevivência-de-positivos vs rejeição-de-negativos que justifica esse valor.Os vazamentos do piso são reportados caso a caso.

Dois limites, declarados com a mesma honestidade que o resto desta página exige. Primeiro, os três arneses requerem uma API key (ANTHROPIC_API_KEY ou OPENROUTER_API_KEY para os dois primeiros, VOYAGE_API_KEY para o terceiro); sem ela, eles pulam limpamente com exit 0, então são verificações pré-deploy executadas antes de qualquer mudança de prompt, modelo ou ferramentas, não um gate permanente de CI. Segundo, os seus resultados ainda não são publicados em nenhuma superfície: hoje só os vê quem os executa. Publicá-los é parte do roadmap de avaliação.

Privacidade, offline e analytics

  • PWA offline-first. O app é pré-cacheado como app-shell (/spa.html) e os dados (/data/) são servidos a partir de CDN cacheada, de modo que as superfícies funcionam sem conexão uma vez visitadas.
  • Analytics com postura de privacidade, e a sua exceção declarada. O rastreamento (PostHog, hospedado na sua US Cloud) está restrito ao domínio de produção (*.futuros.xyz); não roda em previews nem em local. Isso inclui este site de documentação (docs.futuros.xyz): cada locale (ES/EN/PT) emite $pageview e $pageleave; um token opaco via, utm_id ou o na URL é guardado como propriedade de pessoa/super. As entradas de texto são mascaradas na autocaptura e no replay: a navegação é medida sem ler o que o usuário digita. Os dados de contato que o usuário entrega voluntariamente viajam, sim: a comporta de preview exige um e-mail (nome e instituição opcionais) e cria um perfil identificado cujo distinct_id é o token de outreach ou um hash c_…, nunca o e-mail em claro; os formulários de /alertas, do botão de pedido de intro e de /enviar-piloto fazem o mesmo. Um hop /o/{token} pode gravar nome, instituição ou e-mail a partir de OUTREACH_ROSTER (Data, não o repo) como propriedades de pessoa. O texto de cada pergunta ao assistente viaja no servidor em chat_generation e $ai_generation. /contribuir identifica só com um pseudônimo sha-256 calculado no cliente, e o email em claro nunca chega ao analytics.

A honestidade não é uma seção à parte do produto: é a restrição que dá forma a todo o resto. Para ver como ela se materializa a montante, volte a O pipeline de dados e Proveniência e citações; para ver como o chat a herda, O assistente.

Cada número com sua fonte — a rastreabilidade é o contrato.