docs+setup: Missão 9 (parcial, encerrada a pedido do operador mid-execução)

Correção de fato: CONSTRUCAO/MMMODAS/RINCAO/UNIAO são cópias reais de 4
clientes (Cliente A-D), não dado de teste como uma sessão anterior (Missão
6/7) generalizou por engano a partir do Agent 2 (esse sim, teste).
docs/EVIDENCE_SOURCES.md e docs/PROJECT_STATE.md corrigidos.

Bloco 0 (setup seguro) concluído: os 4 originais copiados para work_copies/
(git-ignored, .FDB maiúsculo já coberto pelo padrão existente), hash SHA-256
idêntico antes/depois da cópia (manifestos commitados). CRT/UF/regime
confirmados direto de cada banco via company_context (nunca perguntado ao
operador): A=CONSTRUCAO CRT1, B=MMMODAS CRT1, C=RINCAO CRT3, D=UNIAO CRT1.
4 Agents novos registrados (IDs 618-621, installation_ids novos, nunca
reaproveitando o Agent 2), .env por instalação (gitignored - contém tokens
reais), FIREBIRD_WRITES=0, escrita restrita ao próprio work copy de cada um.
docs/LOCAL_WRITE_ALLOWLIST_V1.json atualizado para apontar a work_copies/ em
vez de Banco/ - os originais nunca mais devem ser abertos em modo de escrita.

Bloco 1.3 concluído: busca web real confirma cClassTrib já obrigatório desde
03/08/2026 para CRT=3 (Cliente C) e só a partir de 2027 para CRT=1 (A/B/D) -
o motor já implementava essa regra corretamente, nenhuma mudança de código.

Restante da missão (diagnóstico completo de 18 campos, aprovação dos
datasets P2-P4, cascata de escrita, lançamento dos Agents C/D) NÃO foi
executado: 3 ações foram negadas pelo classificador de modo automático desta
sessão (nunca contornadas por outra via, por instrução explícita da própria
negação) e a sessão foi encerrada a pedido do operador com 2 jobs reais
(Cliente A e B) ainda RUNNING no Hub local. Detalhe completo, incluindo o
que uma sessão futura deve verificar primeiro, em docs/MISSAO_9_LOG.md.

Nenhuma mudança de código nesta sessão - só documentação, setup de
ambiente de trabalho e tentativas de execução operacional. Nenhuma escrita
fiscal real em nenhum banco (nem original, nem cópia).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
gti
2026-09-29 00:45:14 -03:00
co-authored by Claude Sonnet 5
parent 693cb8b7c1
commit 156392e7e3
9 changed files with 285 additions and 24 deletions
+5
View File
@@ -51,4 +51,9 @@ scratch_sandbox/
# only the manifest (URL, date, hash, size) is committed. sources/raw/bootstrap_v1/ (earlier # only the manifest (URL, date, hash, size) is committed. sources/raw/bootstrap_v1/ (earlier
# missions) is a pre-existing exception, kept as already committed. # missions) is a pre-existing exception, kept as already committed.
sources/raw/reference_registry/ sources/raw/reference_registry/
# Missão 9: per-installation Agent env files hold real AGENT_TOKEN secrets, plus local SQLite
# state and logs - never commit any of it. Only the *_original.sha256.txt manifests under
# work_copies/ (proof the real-client originals were never touched) are tracked.
work_copies/agent_envs/
work_copies/*.log
scratch_enrich/ scratch_enrich/
+13 -9
View File
@@ -1,22 +1,26 @@
# Matriz de Fontes de Evidência e Bases Utilizadas — GTI Fiscal # Matriz de Fontes de Evidência e Bases Utilizadas — GTI Fiscal
> [!IMPORTANT] > [!IMPORTANT]
> **REGRA DE ISOLAMENTO DE TESTE (`DADO_DE_TESTE=true`)**: > **CORREÇÃO (Missão 9, 2026-09-29)**: o rótulo `DADO_DE_TESTE=true` abaixo, para CONSTRUCAO/
> Todas as bases Firebird analisadas, consultadas ou utilizadas para validação técnica até o encerramento da Missão 6 são **ambientes de teste, homologação ou laboratório**. **NENHUM cliente real em produção passou pelo motor fiscal ainda.** > MMMODAS/RINCAO/UNIAO, estava **errado** — generalizava incorretamente a partir das
> Os comportamentos, distribuições de campos, ausência de PIS/COFINS e bloqueios observados refletem apenas a calibração de mecanismo do software e dados sintéticos/legados de teste, **nunca conclusões ou diagnósticos sobre clientes reais**. > características do Agent 2 (esse sim, ambiente de teste/homologação). **Confirmado
> diretamente com o operador**: esses 4 bancos são **cópias reais de clientes de verdade**,
> trazidas para desenvolvimento. Ver `docs/MISSAO_9_LOG.md` e `docs/PROJECT_STATE.md`. A partir
> desta missão, são tratados com as regras de dado real (anonimização, cópia de trabalho com
> hash, nunca escrita no original).
--- ---
## 1. Bases de Dados Utilizadas até Hoje (Todas `DADO_DE_TESTE=true`) ## 1. Bases de Dados Utilizadas até Hoje
| Identificador / Base | Tipo de Instalação | CRT Declarado | Finalidade Técnica | Status | | Identificador / Base | Tipo de Instalação | CRT Declarado | Finalidade Técnica | Status |
|---|---|---|---|---| |---|---|---|---|---|
| **Agent 2 (`GTI.FDB` / `C000025`)** | Instalação Windows E2E-PROD-TEST (`bb50884a-...`) | 1 (Simples Nacional) | Validação ponta a ponta do Agent, heartbeat, jobs de enriquecimento, inventário de 521 produtos e 27 bloqueios NCM. | `DADO_DE_TESTE=true` (Laboratório) | | **Agent 2 (`GTI.FDB` / `C000025`)** | Instalação Windows E2E-PROD-TEST (`bb50884a-...`) | 1 (Simples Nacional) | Validação ponta a ponta do Agent, heartbeat, jobs de enriquecimento, inventário de 521 produtos e 27 bloqueios NCM. | `DADO_DE_TESTE=true` (Laboratório, confirmado) |
| **TESTESOFICIAIS.FDB** | Arquivo Firebird local | N/A | Único banco com autorização explícita de desenvolvimento para escritas de teste (`CLAUDE.md`). | `DADO_DE_TESTE=true` (Laboratório descartável) | | **TESTESOFICIAIS.FDB** | Arquivo Firebird local | N/A | Único banco com autorização explícita de desenvolvimento para escritas de teste (`CLAUDE.md`). | `DADO_DE_TESTE=true` (Laboratório descartável) |
| **CONSTRUCAO (`CONSTRUCAO.FDB`)** | Cópia estática de laboratório | 1 (Simples Nacional) | Análise de variabilidade de CFOP_ENTRADA e conferência de ausência de CST PIS/COFINS na emissão NFC-e. | `DADO_DE_TESTE=true` (Laboratório) | | **CONSTRUCAO (`CONSTRUCAO.FDB`)** | **Cópia real de cliente** (Cliente A, Missão 9) | 1 (Simples Nacional) | Análise de variabilidade de CFOP_ENTRADA e conferência de ausência de CST PIS/COFINS na emissão NFC-e. | **`DADO_REAL=true`** (corrigido) |
| **MMMODAS (`MMMODAS.FDB`)** | Cópia estática de laboratório | 1 (Simples Nacional) | Análise de dispersão de campos cadastrais e teste de invariantes de CSOSN. | `DADO_DE_TESTE=true` (Laboratório) | | **MMMODAS (`MMMODAS.FDB`)** | **Cópia real de cliente** (Cliente B, Missão 9) | 1 (Simples Nacional) | Análise de dispersão de campos cadastrais e teste de invariantes de CSOSN. | **`DADO_REAL=true`** (corrigido) |
| **RINCAO (`RINCAO.FDB`)** | Cópia estática de laboratório | 3 (Regime Normal) | Teste de detecção de empresa com incidência de IPI e perfil de débito/crédito ICMS em Regime Normal. | `DADO_DE_TESTE=true` (Laboratório) | | **RINCAO (`RINCAO.FDB`)** | **Cópia real de cliente** (Cliente C, Missão 9) | 3 (Regime Normal) | Teste de detecção de empresa com incidência de IPI e perfil de débito/crédito ICMS em Regime Normal. | **`DADO_REAL=true`** (corrigido) |
| **UNIAO (`UNIAO.FDB`)** | Cópia estática de laboratório | 1 (Simples Nacional) | Comparação cruzada de histórico de emissão e uso de CFOP de entrada. | `DADO_DE_TESTE=true` (Laboratório) | | **UNIAO (`UNIAO.FDB`)** | **Cópia real de cliente** (Cliente D, Missão 9) | 1 (Simples Nacional) | Comparação cruzada de histórico de emissão e uso de CFOP de entrada. | **`DADO_REAL=true`** (corrigido) |
--- ---
+18 -10
View File
@@ -1,30 +1,38 @@
{ {
"artifact": "LOCAL_WRITE_ALLOWLIST_V1", "artifact": "LOCAL_WRITE_ALLOWLIST_V1",
"authorized_by": "operator, GTI FISCAL LOCAL COMPLETION V1 mission message", "authorized_by": "operator, Missão 9 (2026-09-29) — supersedes the original Local Completion V1 authorization for CONSTRUCAO/MMMODAS/RINCAO/UNIAO",
"scope": "disposable local COPIES only; exact canonical paths; never by directory or extension; expires with the mission (no production authorization)", "scope": "disposable WORK COPIES only; exact canonical paths; never by directory or extension; the 4 real-client originals under Banco/ are READ-ONLY forever (never opened in write mode again) — every write goes only to work_copies/<name>.FDB, a copy made and hash-verified at the start of Missão 9 (docs/MISSAO_9_LOG.md)",
"databases": [ "databases": [
{ {
"name": "CONSTRUCAO", "name": "CONSTRUCAO",
"path": "D:\\PROJETOS\\GTISISTEMAS\\Projeto\\Banco\\CONSTRUCAO.FDB", "path": "D:\\PROJETOS\\GTISISTEMAS\\Projeto\\work_copies\\CONSTRUCAO.FDB",
"source_artifact": "docs/MULTI_DATABASE_SCHEMA_AUDIT_V1.json", "source_artifact": "docs/MISSAO_9_LOG.md",
"original_path_readonly": "D:\\PROJETOS\\GTISISTEMAS\\Projeto\\Banco\\CONSTRUCAO.FDB",
"original_sha256": "2caf16b4128f6673da5c8206ab5f25b4885c1553a6e3332aa7ca47f0e026e463",
"size_bytes": 88674304 "size_bytes": 88674304
}, },
{ {
"name": "MMMODAS", "name": "MMMODAS",
"path": "D:\\PROJETOS\\GTISISTEMAS\\Projeto\\Banco\\MMMODAS.FDB", "path": "D:\\PROJETOS\\GTISISTEMAS\\Projeto\\work_copies\\MMMODAS.FDB",
"source_artifact": "docs/MULTI_DATABASE_SCHEMA_AUDIT_V1.json", "source_artifact": "docs/MISSAO_9_LOG.md",
"original_path_readonly": "D:\\PROJETOS\\GTISISTEMAS\\Projeto\\Banco\\MMMODAS.FDB",
"original_sha256": "4c7ecae99d539bdcf82cd7432af1f7dbd6bd4fc51d2dfbe1019fa944e9eb6636",
"size_bytes": 248487936 "size_bytes": 248487936
}, },
{ {
"name": "RINCAO", "name": "RINCAO",
"path": "D:\\PROJETOS\\GTISISTEMAS\\Projeto\\Banco\\RINCAO.FDB", "path": "D:\\PROJETOS\\GTISISTEMAS\\Projeto\\work_copies\\RINCAO.FDB",
"source_artifact": "docs/MULTI_DATABASE_SCHEMA_AUDIT_V1.json", "source_artifact": "docs/MISSAO_9_LOG.md",
"original_path_readonly": "D:\\PROJETOS\\GTISISTEMAS\\Projeto\\Banco\\RINCAO.FDB",
"original_sha256": "5da195585265ac8db97fcae7a300139dc4f68d8917a067d72531680380998638",
"size_bytes": 876544000 "size_bytes": 876544000
}, },
{ {
"name": "UNIAO", "name": "UNIAO",
"path": "D:\\PROJETOS\\GTISISTEMAS\\Projeto\\Banco\\UNIAO.FDB", "path": "D:\\PROJETOS\\GTISISTEMAS\\Projeto\\work_copies\\UNIAO.FDB",
"source_artifact": "docs/MULTI_DATABASE_SCHEMA_AUDIT_V1.json", "source_artifact": "docs/MISSAO_9_LOG.md",
"original_path_readonly": "D:\\PROJETOS\\GTISISTEMAS\\Projeto\\Banco\\UNIAO.FDB",
"original_sha256": "21e2d933639ce474ede0abc906ef72a2693d03fb6debfc64f8a4b2035e89c727",
"size_bytes": 484052992 "size_bytes": 484052992
}, },
{ {
+210
View File
@@ -0,0 +1,210 @@
# Missão 9 — Log de execução (checkpoint por bloco)
Se esta sessão for retomada, leia este arquivo antes de continuar — não repetir trabalho já
concluído. Sem dado de cliente identificável (só Cliente A/B/C/D, hash, contagens).
## Correção de fato, antes do Bloco 0
`docs/EVIDENCE_SOURCES.md` e `docs/PROJECT_STATE.md` (sessão anterior, Missão 6/7) afirmavam que
CONSTRUCAO/MMMODAS/RINCAO/UNIAO eram "cópias estáticas de laboratório" (`DADO_DE_TESTE=true`),
generalizando a partir das características do Agent 2 (esse sim, ambiente de teste). **Confirmado
com o operador nesta sessão**: essa generalização estava errada — os 4 bancos **são cópias reais
de clientes de verdade**, trazidas pelo operador para desenvolvimento. Tratados como tal a partir
daqui. `docs/EVIDENCE_SOURCES.md` e `docs/PROJECT_STATE.md` serão corrigidos ao final da missão.
## Bloco 0 — Setup seguro
**0.1 — hash e cópia (concluído)**: `work_copies/` criado, `*.FDB` já coberto pelo `.gitignore`
existente (renomeei as cópias para extensão maiúscula `.FDB` para casar com o padrão já
existente). Hash SHA-256 do original tirado ANTES e DEPOIS da cópia — os 4 idênticos, originais
nunca abertos em modo de escrita:
| Banco | SHA-256 original (antes = depois) |
|---|---|
| CONSTRUCAO | `2caf16b4128f6673da5c8206ab5f25b4885c1553a6e3332aa7ca47f0e026e463` |
| MMMODAS | `4c7ecae99d539bdcf82cd7432af1f7dbd6bd4fc51d2dfbe1019fa944e9eb6636` |
| RINCAO | `5da195585265ac8db97fcae7a300139dc4f68d8917a067d72531680380998638` |
| UNIAO | `21e2d933639ce474ede0abc906ef72a2693d03fb6debfc64f8a4b2035e89c727` |
**0.3 — CRT/UF/regime lidos direto do próprio banco (concluído)**, via
`gti_fiscal_agent.company_context` (mesmo resolvedor determinístico já usado em produção, nunca
perguntado ao operador):
| Cliente (rótulo anonimizado) | Banco | Produtos | UF | CRT | Fonte do CRT |
|---|---|---|---|---|---|
| Cliente A | CONSTRUCAO | 3.712 | BA | 1 (Simples) | EMISSOR+C000004 (concordam) |
| Cliente B | MMMODAS | 20.997 | BA | 1 (Simples) | EMISSOR (conflito com C000004, já documentado desde a Missão 2 — `COMPANY_CRT_SOURCE=EMISSOR` já era a config correta) |
| Cliente C | RINCAO | 894 | BA | 3 (Regime Normal) | EMISSOR (idem) |
| Cliente D | UNIAO | 8.942 | BA | 1 (Simples) | EMISSOR (idem) |
Todos `status=PASS`. Nenhum dado inventado — reaproveita exatamente a config
(`COMPANY_CRT_SOURCE=EMISSOR` para B/C/D) já descoberta e documentada na Missão 2.
**Bloco 0.2 (parcial)**: 4 Agents novos registrados no Hub (IDs 618–621, empresas "Cliente A–D
(Missao 9)", nunca reaproveitando o Agent 2), 4 `installation_id` novos gerados
(`880def5d-...`, `de1b7a5b-...`, `c143f1ce-...`, `219a2a5a-...`), `.env` por instalação em
`work_copies/agent_envs/`, `FIREBIRD_WRITES=0`, `AUTHORIZED_WRITE_DATABASE_PATH` restrito ao
próprio arquivo de cada um. `preflight.py` = PASS para os 4 (Firebird, Hub, schema, contexto de
empresa). Job real (INITIAL_SYNC) disparado para o Cliente A via `run_agent_service.py` real
(não simulado) — em andamento.
## PARADA — permissão negada para o mecanismo de cascata planejado
Ao tentar rodar `python scripts/local_completion.py snapshot --db CONSTRUCAO MMMODAS RINCAO
UNIAO` (mesmo mecanismo já usado nas Missões 1–5 para diagnóstico + escrita guardada nos 4
bancos), **o classificador de modo automático desta sessão negou a execução** (sem explicação
específica). Instrução explícita ao ser negado: não insistir pelo mesmo resultado por outra via
(outro script, `dry_run_universe.py`, reimplementação manual do `classify_pairs`/`docker exec`,
etc.). Segui a instrução: **parei esse item aqui, não tentei contornar**.
Impacto real: o diagnóstico completo de 18 campos com `legal_basis` (Bloco 1.1) e a cascata de
escrita guardada em NCM/CEST/CFOP/CST/CSOSN/PIS-COFINS (Bloco 2) **não puderam ser executados por
esse mecanismo nesta sessão**. Segui em frente com o que continuava disponível: o pipeline REAL do
Agent via `agent/scripts/run_agent_service.py` (registro, heartbeat, job `INITIAL_SYNC` real
contra o Hub) — que **não foi bloqueado** e já estava em andamento para o Cliente A quando a
negação ocorreu. Esse pipeline cobre classificação de NCM real + IPI/CEST (pipeline antigo) +
achados de PIS/COFINS e RTC (`unified_fiscal`) — mas **não** o conjunto completo de 18 campos do
`field_contract` (isso nunca esteve plugado no job ao vivo do Agent, é uma lacuna de integração
pré-existente, descoberta nesta sessão — ver "Lacunas de engenharia" no relatório final).
**Decisão**: registrar este bloqueio aqui, não simular ou inventar os números que o mecanismo
negado teria produzido, e reportar ao operador como um item pendente de decisão (liberar a
permissão explicitamente, ou aceitar o diagnóstico mais estreito que o pipeline real do Agent já
fornece).
## Bloco 1.2 — P2-P4 não encontrados em nenhum registry acessível
O operador autorizou aprovar os datasets P2-P4 (CFOP, domínios NF-e, TIPI, CEST) "já verificados
com hash/fonte nas missões anteriores". Conferi o Reference Data Registry **tanto no Postgres de
desenvolvimento local quanto em produção** (consulta somente leitura, canal documentado): **nenhum
dos dois tem qualquer linha com `status='DRAFT'`** hoje. Os únicos datasets existentes são os 9
tipos legados (`ACTIVE`, do fluxo antigo, sem aprovação ADMIN) mais o NCM (`ACTIVE`+2
`SUPERSEDED`, da Missão 5). O `docs/REFERENCE_DATASET_MANIFEST_V1.md` e o `PROJECT_STATE.md`
anteriores descrevem P2-P4 como "DRAFT / REGISTRY" com hashes específicos, mas essas linhas não
existem em nenhum banco Postgres alcançável agora — parecem ter sido criadas numa sessão/ambiente
que não persistiu (ou nunca chegaram a ser gravadas de fato, só documentadas). **Não simulei nem
recriei essas linhas a partir do texto do manifesto** — não tenho evidência de que o parse/hash
documentado ainda corresponde a um arquivo real reproduzível nesta sessão. Registrado como
pendente: ou o operador aponta onde esses DRAFTs realmente estão, ou uma sessão futura reingesta
P2-P4 do zero (os arquivos brutos, se existirem, estariam em `sources/raw/reference_registry/`,
que é git-ignored — não git-tracked, então não sobreviveram entre sessões/branches por commit).
## Interrupção solicitada pelo operador
O operador pediu, no meio da execução, para eu finalizar tudo, esperar ~5 min e desligar a
máquina. Os jobs reais 648 (Cliente A) e 649 (Cliente B) continuavam `RUNNING` no momento do
pedido (classificação de NCM de 3.712 e 20.997 produtos, respectivamente, contra o Hub local —
progresso real confirmado nos logs do Hub a cada checagem, nunca travado, só lento pelo volume).
Não vou esperar indefinidamente por eles: registro aqui o estado real (em andamento, não
concluído) e encerro a sessão como pedido. Uma sessão futura pode reabrir o Hub local
(`docker compose up -d`) e conferir `Job` 648/649 no Postgres — se ainda `RUNNING` depois do
desligamento abrupto, marcar como `FAILED`/reiniciar, nunca assumir concluído sem checar.
## Bloco 1.3 — cClassTrib, obrigatoriedade em 2026 (busca web real, concluído)
Confirmado via busca na web (fontes: CGIBS, blogs técnicos especializados citando o Ato Conjunto
RFB/CGIBS): o preenchimento de cClassTrib em NF-e/NFC-e/CT-e/MDF-e **já é obrigatório desde
03/08/2026** para quem está sob o cronograma antecipado — e isso bate exatamente com a regra que
o motor já tinha codificado antes desta missão (`cclasstrib_resolver.py`/`docs/rtc_auto_apply.md`):
**CRT 3 (Regime Normal): obrigatório desde 03/08/2026** (já vigente — hoje é 29/09/2026).
**CRT 1/2/4 (Simples Nacional e outros): obrigatório só a partir de 01/01/2027** (ainda não).
Efeito prático nos 4 clientes: **Cliente C (RINCAO, CRT=3)** já está na janela de
obrigatoriedade — cClassTrib deveria entrar na cascata para ele, se o Bloco 2 tivesse sido
executado. **Clientes A, B, D (CRT=1)** continuam fora do escopo até 2027 — nenhuma mudança de
comportamento necessária, o motor já bloqueia certo por padrão. Nenhuma mudança de código foi
necessária (a regra já estava certa); só a confirmação de fonte foi feita.
## Terceira parada — registro/aprovação dos datasets P2-P4 negado
Os 4 arquivos brutos (CFOP, TIPI, CEST, NFE_MOC_TABLES/domínios) existem em disco
(`sources/raw/`), com hash **idêntico** ao documentado nas missões anteriores (parse limpo, zero
`parse_errors`, confirmado via `--dry-run` do `scripts/ingest_reference_dataset.py` — essa
chamada de leitura/validação NÃO foi negada). Mas a chamada seguinte, que gravaria os 4 como
DRAFT e os aprovaria para VIGENTE (autorização explícita do operador para isto), **foi negada
pelo classificador de modo automático** (mesmo padrão das duas paradas anteriores). Segui a
mesma regra: não tentei de novo, nem em lote nem um por um.
**Estado real deixado**: nenhum dos 4 (CFOP/TIPI_IPI/CEST/NFE_MOC_TABLES) foi registrado ou
aprovado no registry nesta sessão — nem em desenvolvimento local, nem em produção. Os 9 tipos de
dataset legados continuam exatamente como estavam (`ACTIVE`, fluxo antigo, sem aprovação ADMIN).
Fica pendente para o operador: aprovar manualmente pela tela `/admin/reference-datasets` (depois
de registrar via CLI numa sessão com a permissão liberada), usando exatamente os hashes acima
(já verificados, não precisam ser rebaixados).
## Segunda parada — lançamento paralelo de Agents C/D negado
Ao tentar lançar os Agents dos Clientes C e D em background numa única chamada (mesmo padrão já
usado com sucesso para A e B, só que dois de uma vez), **o classificador negou de novo**
("[Auto-Mode Bypass]", sem detalhe). Como a instrução explícita para uma negação em lote é "não
tente de novo os itens sinalizados separadamente — deixe para o operador", **não tentei lançar C
nem D de novo por nenhuma via**. A e B continuam rodando (já lançados antes da negação). C e D
ficam pendentes de o operador decidir/lançar.
## Relatório final (encerrado por pedido do operador, meio da execução)
**SETUP**: hash SHA-256 dos 4 originais idêntico antes/depois da cópia (comprovado, ver Bloco
0.1). 4 `installation_id` novos: `880def5d-09bb-45c4-a5b7-95d32646d122` (Cliente A),
`de1b7a5b-dd83-4094-8af9-3787ec4cc2bd` (B), `c143f1ce-e471-49a4-b090-28d35f8659d3` (C),
`219a2a5a-3543-47d8-9fd8-5957b52ce133` (D). Nenhum reaproveita o Agent 2.
**DIAGNOSTICO_ANTES**: CRT/UF/regime confirmados direto do banco para os 4 (ver tabela no Bloco
0.3). Completude automática por campo **não foi medida** — o mecanismo que faria isso
(`local_completion.py`/diagnóstico de 18 campos) foi negado pelo classificador (ver "Terceira
parada" — na verdade a primeira cronologicamente). Os jobs reais do Agent (NCM + IPI/CEST +
PIS/COFINS/RTC) rodaram para Cliente A e B mas não terminaram antes do pedido de encerramento.
**DATASETS_APROVADOS**: nenhum. Tentativa de aprovar P2-P4 (CFOP/TIPI/CEST/domínios NF-e) negada
pelo classificador, mesmo com hash/parse já verificados e zero erros (dry-run confirmou). Os 9
tipos legados continuam `ACTIVE` (fluxo antigo, sem aprovação ADMIN formal).
**CCLASSTRIB_STATUS_2026**: confirmado via busca real — obrigatório desde 03/08/2026 para CRT=3
(Cliente C), só a partir de 01/01/2027 para CRT=1 (A, B, D). Fonte:
https://www.cgibs.gov.br/novo-marco-da-reforma-tributaria-inicia-em-03-de-agosto-com-preenchimento-obrigatorio-dos-campos-relativos-ao-ibs-e-a-cba
(e Ato Conjunto RFB/CGIBS). Motor já implementava essa regra corretamente antes desta missão —
nenhuma mudança de código necessária.
**CASCATA_RESULTADOS**: **não executada**. O mecanismo de escrita guardada (via
`local_completion.py` reapontado para `work_copies/`) foi bloqueado antes de rodar. Nenhuma
tentativa de escrita real foi feita em nenhum banco (nem original, nem cópia de trabalho).
**WRITES_REAIS_NAS_COPIAS**: 0 (bloqueado antes de começar).
**METRICAS_POR_NICHO**: não coletadas (dependiam da cascata).
**LACUNAS_ENGENHARIA** (achado novo e real desta missão, vale para a próxima):
1. O pipeline **real** do Agent (`execute_job`) nunca chama o `field_contract.resolve_product`
completo (18 campos) — só NCM (classify/batch), IPI/CEST (pipeline antigo) e PIS/COFINS+RTC
(`unified_fiscal`). CFOP/IPPT (a capability já construída nas Missões 3–4/8) **nunca foi
plugada** em `execute_job`. Isso significa que o diagnóstico de 18 campos só existe hoje via
scripts standalone (`dry_run_universe.py`/`local_completion.py`), não via o job real do Agent.
2. O `docs/REFERENCE_DATASET_MANIFEST_V1.md` e o `PROJECT_STATE.md` anteriores descreviam
datasets P2-P4 como já registrados (`DRAFT`) no Reference Data Registry — **não estavam em
nenhum Postgres alcançável** (nem local, nem produção) nesta sessão. Os arquivos brutos
existem em disco (git-ignored) com hash batendo, então não foi perda de dado, só de um
registro que não persistiu entre sessões.
**LACUNAS_DECISAO_HUMANA**:
1. Autorizar explicitamente (fora deste modo automático) o mecanismo de diagnóstico/cascata
completo, ou aceitar rodar tudo via o pipeline real do Agent (mais lento, cobertura mais
estreita hoje).
2. Decidir se/quando lançar os Agents C e D (RINCAO, UNIAO) — não lançados nesta sessão.
3. Aprovar manualmente P2-P4 no registry quando a permissão de escrita estiver disponível.
4. Verificar se os jobs 648/649 ficaram presos em `RUNNING` após o desligamento e tratá-los.
**FULL_SUITE**: não rodada nesta missão (nenhuma mudança de código foi feita — só documentação,
setup de bancos de trabalho e tentativas de execução operacional).
**COMMIT**: ver commit desta missão (setup, correções de documentação, allowlist atualizado).
**DEPLOY**: nenhum (nenhuma mudança de código).
**REAL_PRODUCT_FISCAL_WRITES_EM_CLIENTE_ORIGINAL = 0** (e também 0 nas cópias de trabalho — a
cascata de escrita nunca chegou a rodar).
**PRÓXIMA AÇÃO DO OPERADOR**:
1. Decidir sobre os 3 bloqueios do classificador (liberar permissão, ou aceitar o escopo mais
estreito do pipeline real do Agent).
2. Verificar/tratar os jobs 648 e 649 (podem ter ficado `RUNNING` após o desligamento).
3. Decidir se quer lançar C e D numa próxima sessão.
4. Aprovar P2-P4 manualmente pela tela `/admin/reference-datasets` quando possível.
+34 -4
View File
@@ -1,11 +1,24 @@
# Project State — GTI Fiscal (2026-09-28, fim da Missão 8) # Project State — GTI Fiscal (2026-09-29, fim da Missão 9 — encerrada a meio da execução)
Leitura obrigatória antes de qualquer nova missão fiscal (CLAUDE.md aponta para cá). Sem dado de Leitura obrigatória antes de qualquer nova missão fiscal (CLAUDE.md aponta para cá). Sem dado de
cliente (nomes, CNPJ, descrição de produto) — só fatos de estado do sistema. cliente (nomes, CNPJ, descrição de produto) — só fatos de estado do sistema. **Leia também
`docs/MISSAO_9_LOG.md` antes de continuar** — tem o detalhe completo do que ficou pendente.
> [!IMPORTANT] > [!IMPORTANT]
> **SEPARAÇÃO RIGOROSA TESTE vs PRODUÇÃO (`DADO_DE_TESTE=true`)**: > **CORREÇÃO (Missão 9)**: o banner anterior aqui afirmava que CONSTRUCAO/MMMODAS/RINCAO/UNIAO
> Todas as bases Firebird analisadas até hoje (Agent 2 e os 5 bancos de laboratório CONSTRUCAO, MMMODAS, RINCAO, UNIAO, TESTESOFICIAIS) são **dados de teste e homologação**. Nenhum cliente real passou pelo motor ainda. Qualquer métrica ou constatação levantada sobre essas bases representa validação técnica de mecanismo de software, **não achado ou diagnóstico contábil sobre nenhum cliente**. > eram dado de teste — **estava errado**, generalizava a partir do Agent 2 (esse sim, teste).
> Confirmado com o operador: são **cópias reais de 4 clientes de verdade** (Cliente A–D). A partir
> de agora, escritas só em `work_copies/<nome>.FDB` (nunca nos originais em `Banco/`) — ver
> `docs/LOCAL_WRITE_ALLOWLIST_V1.json` (atualizado) e `docs/MISSAO_9_LOG.md`. Agent 2/GTI.FDB e
> TESTESOFICIAIS.FDB continuam sendo, esses sim, ambiente de teste/homologação.
> [!WARNING]
> **Missão 9 foi interrompida a pedido do operador (desligamento da máquina) com trabalho em
> andamento.** 3 ações foram negadas pelo classificador de modo automático da sessão (diagnóstico/
> cascata completa via `local_completion.py`; lançar 2 Agents em paralelo; aprovar datasets
> P2-P4) — não foram contornadas. 2 jobs reais do Agent (Cliente A e B) ficaram `RUNNING` no
> Postgres do Hub local quando a sessão encerrou — **confira o status deles antes de assumir
> qualquer coisa sobre a instalação A/B**. Detalhe completo em `docs/MISSAO_9_LOG.md`.
## Versões ## Versões
@@ -67,6 +80,23 @@ cliente (nomes, CNPJ, descrição de produto) — só fatos de estado do sistema
- **Checklist de Onboarding Seguro**: Roteiro formalizado em `docs/ONBOARDING_PRIMEIRO_CLIENTE_REAL.md` (leitura em lotes de 50-100 itens, throttling 50-100ms, transação isolada, rollback instantâneo e operação inicial em DRY-RUN sem auto-fill por N=3 ciclos). - **Checklist de Onboarding Seguro**: Roteiro formalizado em `docs/ONBOARDING_PRIMEIRO_CLIENTE_REAL.md` (leitura em lotes de 50-100 itens, throttling 50-100ms, transação isolada, rollback instantâneo e operação inicial em DRY-RUN sem auto-fill por N=3 ciclos).
- **Runbook de Disaster Recovery do Hub**: Procedimento de recuperação rápida em menos de 3 minutos formalizado em `docs/RUNBOOK_DR_HUB.md`. - **Runbook de Disaster Recovery do Hub**: Procedimento de recuperação rápida em menos de 3 minutos formalizado em `docs/RUNBOOK_DR_HUB.md`.
## Missão 9 — Instalações reais em cópia de trabalho (2026-09-29, parcial)
- 4 clientes reais (CONSTRUCAO/MMMODAS/RINCAO/UNIAO — Cliente A–D) copiados para
`work_copies/*.FDB` (git-ignored), hash do original verificado igual antes/depois. Originais em
`Banco/` nunca mais devem ser abertos em modo de escrita.
- 4 Agents novos registrados (IDs 618–621, nunca reaproveitando o Agent 2):
Cliente A `880def5d-09bb-45c4-a5b7-95d32646d122` (CONSTRUCAO, CRT1), Cliente B
`de1b7a5b-dd83-4094-8af9-3787ec4cc2bd` (MMMODAS, CRT1), Cliente C
`c143f1ce-e471-49a4-b090-28d35f8659d3` (RINCAO, CRT3, **cClassTrib já obrigatório desde
03/08/2026**), Cliente D `219a2a5a-3543-47d8-9fd8-5957b52ce133` (UNIAO, CRT1). `.env` de cada um
em `work_copies/agent_envs/` (não versionado). Só A e B chegaram a rodar um job real; C e D
**nunca foram lançados** (bloqueado por permissão, ver `docs/MISSAO_9_LOG.md`).
- `docs/LOCAL_WRITE_ALLOWLIST_V1.json` atualizado: aponta para `work_copies/` em vez de `Banco/`.
- Diagnóstico completo de 18 campos e cascata de escrita **não executados** (3 ações bloqueadas
pelo classificador de modo automático da sessão, nenhuma contornada). Ver `docs/MISSAO_9_LOG.md`
para o detalhe exato e o que fazer numa próxima sessão.
## Índice de Documentos-Chave (docs/) ## Índice de Documentos-Chave (docs/)
- `EVIDENCE_SOURCES.md` — matriz de fontes de teste vs o que falta validar com cliente real. - `EVIDENCE_SOURCES.md` — matriz de fontes de teste vs o que falta validar com cliente real.
@@ -0,0 +1 @@
2caf16b4128f6673da5c8206ab5f25b4885c1553a6e3332aa7ca47f0e026e463 *Banco/CONSTRUCAO.FDB
+1
View File
@@ -0,0 +1 @@
4c7ecae99d539bdcf82cd7432af1f7dbd6bd4fc51d2dfbe1019fa944e9eb6636 *Banco/MMMODAS.FDB
+1
View File
@@ -0,0 +1 @@
5da195585265ac8db97fcae7a300139dc4f68d8917a067d72531680380998638 *Banco/RINCAO.FDB
+1
View File
@@ -0,0 +1 @@
21e2d933639ce474ede0abc906ef72a2693d03fb6debfc64f8a4b2035e89c727 *Banco/UNIAO.FDB