winnex-madhava (pip) + o framework de auditoria tracer-gov da
Winnex, adicionando apenas a camada de domínio.
Os quatro produtos
Tracer-GOV — Governo
Auditoria e transparência no setor público. LGPD Art. 20, LAI 12.527/2011, TCU, CGU, GDPR, FOIA. Assinatura ICP-Brasil/Ed25519, políticas de retenção, 8 jurisdições.
Tracer-JUS — Jurídico
e-Discovery e pesquisa legal com garantia. Cadeia de custódia WORM, metadados jurídicos (processo, vara, tribunal, partes). Relatório de auditoria anexável a um processo.
Tracer-MED — Saúde
Triagem clínica com garantia. BlueBERT, CID-10, paciente pseudonimizado, HL7 FHIR. LGPD (saúde), GDPR Art. 9, HIPAA.
Tracer-GAP — Financeiro
Identificação de gap em documentos financeiros. SEC EDGAR 10-K loader, metadados (setor, instrumento, CIK, período, risco). SOX, SEC, CVM, LGPD.
Como funciona
Os produtos não reimplementam a prova. Dependem de winnex-madhava
(pip) e tracer-gov (o framework de auditoria compartilhado da Winnex), e adicionam
apenas a camada de domínio. Isso garante:
- Um único motor matematicamente verificado em todos os domínios.
- Uma única cadeia de evidência (WORM, assinaturas, self-audit log).
- Consistência da garantia — o mesmo bound, a mesma propriedade de zero violações, em cada produto.
Certificado per-documento: o audit é testemunha, não juiz
A alteração mais recente na stack (winnex-madhava 1.9.1) mudou a
arquitetura do certificado de auditoria. Antes, o search_audited
recomputava os bounds depois da busca — um "juiz que julga após o fato".
Em dados de alta dimensão (arXiv, d=1536) isso divergia do motor e produzia
falsos positivos no certificado: o benchmark público
winnex-madhava-1-9-0-honest
mediu 462/973 violações de certificado em d=1536 (GloVe/BIGANN em d≤128
estavam limpos). Um problema real, exposto e não mascarado.
A correção (1.9.1) transformou o audit em testemunha: o search()
captura a decisão de poda no momento exato em que o motor a toma
(audit_ids, audit_ubs, audit_residuals,
audit_threshold), e o search_audited apenas lê esses
valores — nunca recomputa um bound. O certificado é byte-a-byte a decisão real do motor.
qn_eff
(=1.0 para cosine normalizado), divergindo do motor em d alto; (2) o threshold de poda usava
o pool de candidatos (heap[0] entre os k1 avaliados), não o threshold
global — marcando até docs do top-10 real como "provadamente excluídos". A 1.9.1
corrigiu ambos: threshold global + captura no momento da decisão. Verificado em
winnex-madhava-1-9-1-honest:
0 violações de certificado e consistência 100/100 em todos os datasets
(GloVe, BIGANN, arXiv d=1536).
Estado atual (1.9.9 + normalize 1.2.1). A stack
evoluiu além do witness: o benchmark winnex-madhava-199-five-csv-datasets-normalize-v2
valida o nan_policy=block_pca do winnex-ai-normalize 1.2.1 (proteção contra dataset
corrompido com NaN/inf, como o word2vec Kaggle com 94.72% de linhas degeneradas) e o fix de
segfault 1.9.9. O AuditCommitment permanece 100/100 em todos os datasets — a trilha auditável
do Tracer é a mesma que o benchmark público valida.
Benchmarks (dados reais, reproduzíveis no Kaggle)
| Produto | Dataset (real) | Corpus | recall@10 | Viol. | Bound pairs | ms/query |
|---|---|---|---|---|---|---|
| Tracer-GOV | AG News (384d) | 2.000 | 1.0000 | 0 | 200.000 | 0.14 |
| Tracer-JUS | Indian Supreme Court (512d) | 2.000 | 1.0000 | 0 | 100.000 | 0.23 |
| Tracer-MED | MTSamples (BlueBERT 768d) | 2.000 | 1.0000 | 0 | 100.000 | 0.20 |
| Tracer-GAP | SEC 10-K (512d) | 187 | 1.0000 | 0 | 9.350 | 0.08 |
Limites precisos da garantia
- Prova de exclusão vetorial, não de relevância. O bound prova que o documento não está no top-K por similaridade de embedding — não que seja irrelevante ao domínio, à verdade semântica ou jurídica. A garantia é matemática sobre o vetor. A qualidade do ranking depende do modelo de embedding.
- WORM é tamper-evident, não tamper-proof. A cadeia SHA3-256 detecta adulteração, mas um atacante com acesso root (ou controle da chave HMAC) pode reescrever a cadeia. Notarização externa (RFC 3161) e âncoras públicas estão no roadmap.
- Rigor numérico em float32 com filtros eficientes. O motor calibra os bounds com ε-slack (ε=1e-5) para se manter rigoroso contra erros de arredondamento. A stack Winnex opera inclusive em dados em tempo real via Madhava Stream (streaming por blocos, mmap — 100M vetores sem carregar o corpus na RAM).
- BSL 1.1 é source-available, não OSI open-source. Todos os repositórios são públicos e auditáveis (github.com/winnex-ai). Gratuito para governo brasileiro (Additional Use Grant).
Como o winnex-ai-normalize mitiga a dependência do embedding
O risco acima é real — e é exatamente o que o winnex-ai-normalize (open source, no GitHub winnex-ai) endereça na ingestão. Antes de indexar, ele audita o corpus e expõe a qualidade do embedding:
- Quality gate — detecta e bloqueia dataset corrompido: NaN/inf, degeneração (variância ~zero), dimensionalidade errada, isotropia (sem manifold), drift vs referência.
- nan_policy=block_pca — um corpus com NaN/inf nunca roteia para
pca_corpus(que amplifica a corrupção); força basis random + k1 alto. - Telemetria honesta — expõe
nan_fractione as flags por severidade (pass/warn/fail), para que o operador veja a qualidade do embedding em vez de assumi-la.
A garantia continua sendo sobre o vetor — mas o normalize é a camada explícita que responde "e se o embedding for ruim?". Verificado publicamente no benchmark winnex-madhava-199-five-csv-datasets-normalize-v2: o word2vec Kaggle (94.72% NaN) é diagnosticado e tratado, e o motor reporta o recall real em vez de fabricar 1.0.
Links
winnex-tracer + winnex-tracer-core: WORM, Ed25519, AuditCommitment),
as integrações Liferay (tracer-med-liferay, tracer-gov-liferay), o motor
winnex-madhava (C++20), o winnex-ai-normalize (quality gate), e ainda
madhava-sec, winnex-audit-cpp, winnex-production-tools,
audit-trail-plugins, winnex-enterprise-stack, winnex-maestro,
winnex-axiom, winnex-nano, winnex-xfactor,
winnex-madhava-maestro e madhava-l2. Código, especificações (Zenodo),
benchmarks (Kaggle) e relatórios são todos auditáveis por terceiros — sem componente fechado.