Skip to content

T-311 - Gravar no worker as fontes de dados de cada execução #385

Open

Description

@pedro-fs-garcia

T-311 - Gravar no worker as fontes de dados de cada execução

  • Componente: worker.
  • Depende de: T-309 no develop e T-310 implantada antes desta.
  • Data máxima: 13/11/2026
  • Estimativa: 3 pontos (Fibonacci)

Entregável

  • Metadados do manifesto mantidos com as bases carregadas na subida.
  • Registro das fontes montado para cada execução e gravado em resultados_simulacao.fontes.
  • Testes do registro, da gravação e do fluxo do consumidor.

Descrição

O worker confere as bases contra o manifesto dos baselines na subida, mas não registra o que usou em cada execução. Esta tarefa grava esse registro no resultado, no formato de contracts/domain/resultado-fontes.schema.json.

Contexto e decisões tomadas

  • carregar_bases (worker/app/execucao/bases.py) lê o manifesto, confere o sha256 dos arquivos de ARQUIVOS e guarda os registros em BasesDoWorker. Os metadados do manifesto são descartados depois da conferência.
  • O resultado é inserido por worker/app/repositorio/resultados.py num único INSERT, porque o worker não tem UPDATE.
  • O registro tem as competências do comando executar-codigo, os cinco arquivos de base com o sha256 do manifesto, o baseline de cada competência com o sha256 e a versão e a data de congelamento do manifesto.
  • O registro vai nos resultados de sucesso, assercao_violada e erro_codigo, que executaram sobre as bases. Fica nulo em erro_infra.
  • O harness do sandbox confere os baselines contra o manifesto, mas não o sha256 dos arquivos de base. O registro afirma o que o worker conferiu. As duas imagens copiam os dados do mesmo diretório do repositório.

Escopo

Dentro do escopo

  • bases.py, resultados.py, o ponto do consumidor que monta a gravação e os testes.

Fora do escopo

  • O conteúdo dos eventos executar-codigo e simulacao-concluida.
  • Conferência de sha256 dentro do sandbox.
  • A consulta de duplicidade (_CONSULTA em resultados.py), que não muda.

Requisitos

  1. Guardar em BasesDoWorker, ou num objeto ao lado, a versão e o congelamento do manifesto, o sha256 dos arquivos de ARQUIVOS e o arquivo e o sha256 do baseline de cada competência, lidos na mesma conferência da subida.
  2. Montar o registro das fontes de uma execução a partir desses metadados e das competências do comando, na ordem do comando.
  3. Acrescentar fontes ao INSERT de resultados.py, com CAST(:fontes AS jsonb), preenchido nos desfechos do contexto e nulo em erro_infra.
  4. Validar nos testes o registro gravado contra contracts/domain/resultado-fontes.schema.json.
  5. Nenhum log ou label de métrica inclui o registro. Se um log da gravação citar as fontes, cita só a versão do manifesto.

Contexto técnico

  • Entradas: o manifesto lido na subida e as competências do comando.
  • Saídas: resultados_simulacao.fontes preenchida.
  • Componentes afetados: worker/app/execucao/bases.py, worker/app/repositorio/resultados.py e o consumidor em worker/app/mensageria/consumidor.py.
  • Restrições: nenhum UPDATE; o registro não carrega dados das bases; o código gerado continua sem acesso às fontes.
  • Referências: worker/AGENTS.md (worker/AGENTS.md), manifesto dos baselines (worker/sandbox/data/domrock/baselines/manifesto.json), worker/Dockerfile (worker/Dockerfile), worker/sandbox/Dockerfile (worker/sandbox/Dockerfile).

Critérios de aceitação

  • Uma execução de duas competências grava as fontes com os cinco arquivos, os dois baselines e a versão do manifesto, válidas no schema.
  • Um resultado erro_infra é gravado sem fontes.
  • A conferência do sha256 na subida continua derrubando o worker quando um arquivo difere do manifesto.
  • Um comando repetido continua sem gravar segunda linha.

Definição de concluído (DoD)

  • verify.sh do worker sem falha, incluindo os testes de integração com o Postgres.
  • Uma simulação local gravando fontes, conferida na consulta de auditoria.

Metadata

Metadata

Assignees

Labels

workertarefa que diz respeito ao simulador em sandbox da aplicação, denominado `worker`

Type

No type

Projects

No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions