Repository navigation
Open
Labels
apitarefa que diz respeito à API em Java Spring Boottarefa que diz respeito à API em Java Spring Boot
Milestone
Description
T-318 - Ligar a flag de baixa rastreabilidade e expor a explicação na API
- Componente:
api. - Depende de: T-316 no
develope T-301, que gravatrilhas_auditoria.resultado_id. A T-317 é necessária para a verificação manual. - Data máxima: 16/11/2026
- Estimativa: 5 pontos (Fibonacci)
Entregável
- Flag de baixa rastreabilidade ligada quando a etapa de explicação termina sem narrativa ou com a narrativa reprovada.
- Campo
explicacaona simulação deGET /jobs/{id}. - Evento
explicacaono stream do job. - Contador do desfecho registrado e logs sem conteúdo.
- Testes do consumidor, da consulta e do stream.
Descrição
A etapa de explicação do codegen grava a narrativa em explicacoes e publica a conclusão no evento no-concluido. A API já grava a linha da trilha desse evento, mas não liga a flag de baixa rastreabilidade, não devolve a narrativa e não avisa a tela quando ela fica pronta. Esta tarefa faz as três coisas.
Contexto e decisões tomadas
- O consumidor de
no-concluidoéConsumidoresJob.receber, que chamaJobEventosService.registrarNoConcluido. A linha da etapaexplicacaotrazresultado_id,explicacao_idquando há linha emexplicacoesedesfecho_explicacaona conclusão. - A flag fica em
simulacoes.flag_baixa_rastreabilidade, e a API temUPDATEemsimulacoes(012-cria-simulacoes.sql). A simulação do resultado é achada pelo código, porquesimulacoes.codigo_gerado_idé único. A linha desimulacoesé criada quando a geração do código é registrada, antes da execução. Por isso ela já existe quando a explicação chega. - A flag liga quando o evento vem sem
explicacao_id, ou quando a linha deexplicacoestemaderencia_conferida = false. Ligar de novo não muda nada, então a reentrega é segura. - A consulta do job devolve a narrativa só quando ela é do resultado vigente da simulação e foi conferida. Depois do aceite da meta, o resultado vigente é a candidata, que não tem narrativa.
- O evento
explicacaoé emitido depois do commit, como os demais eventos do stream (skill sse (api/.agents/skills/sse/SKILL.md)). Ele não carrega o texto. A tela busca o job de novo.
Escopo
Dentro do escopo
- O tratamento da etapa
explicacaono consumo deno-concluido, a leitura da explicação emJobRepositoryeRespostasJob, o evento do stream,AppMetricse os testes.
Fora do escopo
- A consulta de auditoria, que já devolve as explicações (T-305).
- Qualquer escrita em
explicacoes, que é do codegen.
Requisitos
- No consumo de
no-concluidocomno = explicacao, na mesma transação da linha da trilha, ligar a flag da simulação cujo código é o do resultado do evento quando o evento vem semexplicacao_idou quando a explicação temaderencia_conferida = false. - Se a simulação do resultado não existir, registrar em
warne propagar a exceção, para a mensagem voltar à fila, como numa falha de banco. - Uma reentrega do mesmo
evento_idnão emite outro evento no stream nem conta outro desfecho. - Em
GET /jobs/{id}, preenchersimulacao.explicacaocom o texto e a data da explicação conferida do resultado vigente. - Depois do commit, emitir no stream do job o evento
explicacaocomjob_id,simulacao_idedisponivel. - Acrescentar a
AppMetricsum contador do desfecho registrado (conferida,reprovadaeausente), no padrão dos contadores de consumo existentes, contando só a primeira gravação de cada evento. - Logs com
job_ide o desfecho, sem o texto da narrativa.
Contexto técnico
- Entradas: evento
no-concluidoda etapaexplicacaoe a linha deexplicacoes. - Saídas: flag gravada, campo na consulta e evento no stream.
- Componentes afetados:
api/src/main/java/synapse/api/job/ConsumidoresJob.java,api/src/main/java/synapse/api/job/JobEventosService.java,api/src/main/java/synapse/api/job/JobRepository.java,api/src/main/java/synapse/api/job/RespostasJob.java,api/src/main/java/synapse/api/job/EventosSseJob.javaeapi/src/main/java/synapse/api/core/metrics/AppMetrics.java. - Restrições: nenhuma escrita em tabela de artefato do codegen; o stream não carrega texto; a resposta de erro não expõe detalhe interno.
- Referências: consumidores (
api/.agents/skills/consumidores/SKILL.md), sse (api/.agents/skills/sse/SKILL.md), metrics (api/.agents/skills/metrics/SKILL.md), logging (api/.agents/skills/logging/SKILL.md),NoConcluidoConsumidorTests(api/src/test/java/synapse/api/job/NoConcluidoConsumidorTests.java),ContratoDoStreamTests(api/src/test/java/synapse/api/job/ContratoDoStreamTests.java).
Critérios de aceitação
- Uma explicação conferida deixa a flag falsa, aparece em
GET /jobs/{id}e gera o evento comdisponivelverdadeiro. - Uma explicação reprovada liga a flag, não aparece na consulta e gera o evento com
disponivelfalso. - Um evento sem
explicacao_idliga a flag. - A reentrega do mesmo evento não emite segundo aviso nem conta segundo desfecho.
- Depois do aceite da meta, a consulta não traz a explicação do resultado anterior.
Definição de concluído (DoD)
make checknaapisem falha.- Evento do stream validado contra a especificação, como em
ContratoDoStreamTests. - Saída de
/metricsconferida com o contador novo depois dos testes, e logs serializados sem o texto.
Metadata
Metadata
Assignees
Labels
apitarefa que diz respeito à API em Java Spring Boottarefa que diz respeito à API em Java Spring Boot
Activity