Repository navigation
Closed
Labels
codegentarefa que diz respeito ao componente de orquestração de agentes, denominado `codegen`tarefa que diz respeito ao componente de orquestração de agentes, denominado `codegen`
Milestone
Description
T-302 - Publicar na trilha o resultado e a variante das etapas de simulação e sugestão
- Componente:
codegen. - Depende de: T-300 no
develope T-301 implantada antes desta. - Data máxima: 09/11/2026
- Estimativa: 5 pontos (Fibonacci)
Entregável
-
NoConcluidocomresultado_ideConclusaoDaTrilhacommodo_geracao,motivo_sugestao,desfecho_buscaecandidatas_simuladas. - Decisão e sugestão publicando o resultado sobre o qual agiram, e a sugestão publicando o motivo.
- Encerramento da busca da meta publicando a vencedora, o desfecho e a quantidade de candidatas.
- Geração publicando o modo, com o resultado que falhou na correção e o resultado de origem na derivação.
- Testes dos nós, do grafo e da mensageria cobrindo os campos novos.
Descrição
Os nós que publicam no-concluido no fluxo de simulação e sugestão não informam sobre qual resultado agiram nem qual variante da etapa executaram. Depois desta tarefa, cada linha da trilha gravada pela API (T-301) aponta o resultado e diz se o código foi gerado, derivado ou corrigido, qual foi o motivo da sugestão e como terminou a busca da meta.
Contexto e decisões tomadas
- Os nós já têm o resultado em mãos. A decisão e a sugestão o usam para montar
evento_idcomid_do_evento_de_trilha, e a busca da meta guarda a vencedora embusca["vencedora"]. Na correção do código,code_generationlê o resultado que falhou emstate["resultado_id"]quandostate["encaminhamento"]valeENCAMINHAMENTO_CORRECAO(code_generation.py, linha 64). - A linha de geração é publicada por
extract_codequando o modelo produz o código e porderive_codequando o código é derivado.code_generationnão publica a trilha. derive_codeencontra o código de origem combuscar_codigo_simulado, cuja consulta já juntaresultados_simulacaocomstatus = 'sucesso'eproposito = 'simulacao', mas não devolve o id desse resultado.- A linha que encerra a busca continua com
no = "decisao"e com a chave própriauuid5(NAMESPACE_URL, f"synapse:{job_id}:{regra_id}:busca_meta"). A API reconhece o fim da busca por essa linha. - A delegação não muda. As execuções candidatas da busca continuam sem linha própria, e a quantidade delas vai para a linha que encerra a busca.
evento_idnão muda em nenhum nó, para que a reentrega de um evento publicado antes desta mudança continue deduplicada.
Escopo
Dentro do escopo
app/contratos/mensagens.py,app/repositorio/artefatos.pye os nósdecision.py,suggest_adaptation.py,search_sales_target.py,extract_code.pyederive_code.py.- Testes desses nós, do grafo, da busca da meta e da mensageria.
Fora do escopo
dispatch_execution.pye a chave da delegação.- Extração, reextração e validação.
- Etapas de interpretação do resultado e de explicação.
- Qualquer número de simulação na conclusão. A meta não é repetida, porque a linha a alcança pelo resultado.
Requisitos
Mensagem
- Em
NoConcluido, acrescentarresultado_id: UUID | None = None. - Em
ConclusaoDaTrilha, acrescentarmodo_geracao,motivo_sugestaoedesfecho_buscacomoLiteralcom os valores do schema (T-300), opcionais, ecandidatas_simuladas: int | Nonecom mínimo 0. Os tipos ficam junto dos demais aliases demensagens.py.
Decisão e sugestão
- Em
decision.py, publicarresultado_idcom o mesmo resultado usado emid_do_evento_de_trilha. - Em
suggest_adaptation.py, publicarresultado_idcom o mesmo resultado usado emid_do_evento_de_trilhaemotivo_sugestaoigual aalternativa.motivo.
Encerramento da busca da meta
- Em
publish_sales_target(search_sales_target.py), publicarresultado_idigual à vencedora quando ela existe e ausente quando a busca termina sem solução. - Publicar
desfecho_busca, igual aencontradacom vencedora e igual abusca["motivo"]sem ela. - Calcular a quantidade de candidatas uma única vez, com a expressão usada hoje na observação de
busca_meta_candidatos(len(busca["pontos"]) - 1 + (motivo == "falha_execucao")), e usar o mesmo valor na métrica e emcandidatas_simuladas.
Geração
- Em
extract_code.py, publicarmodo_geracaoigual acorrecaoquandostate.get("encaminhamento")valeENCAMINHAMENTO_CORRECAO, o mesmo teste decode_generation.py. Nesse caso, publicarresultado_idigual astate["resultado_id"]e um resumo próprio, que diga que o código foi corrigido a partir do código que falhou no worker. Nos demais casos, publicarmodo_geracaoigual agerado, semresultado_id, com o resumo atual. - Em
artefatos.py, acrescentarresultado_idaCodigoSimuladoe devolverrs.idna consulta_BUSCAR_CODIGO_SIMULADO. - Em
derive_code.py, publicarmodo_geracaoigual aderivadoeresultado_idigual ao resultado de origem devolvido porbuscar_codigo_simulado. Oprompt_idcontinua o da origem.
Observabilidade
- Nenhuma métrica nova e nenhum label novo.
busca_meta_candidatoscontinua recebendo o mesmo valor. - Os logs atuais dos nós continuam sem resumo, prompt, resposta ou código. Se um log passar a citar o resultado, ele entra como identificador no
extra, nunca em label de métrica.
Testes
- Em
tests/app/test_mensageria.py, incluir os exemplosno-concluido-geracao-derivadaeno-concluido-encerramento-buscano teste de publicação que exige payload igual ao exemplo (test_producer_publica_payload_validado_na_rota_correta). O teste hoje usa o mesmo nome para o arquivo do exemplo e para a rota, então a parametrização passa a separar os dois, e os exemplos novos são publicados na rotano-concluido. - Nos testes dos nós e do grafo, conferir o evento publicado. Decisão e sugestão trazem o resultado da chave, e a sugestão traz o motivo. A busca com vencedora traz o resultado,
encontradae a contagem, e a busca sem solução traz o desfecho e a contagem, sem resultado. A geração comum trazgerado, a correção trazcorrecaoe o resultadoerro_codigo, e a derivação trazderivadoe o resultado de sucesso da origem. - Em
tests/app/test_rabbitmq_integracao.pyoutests/app/test_busca_meta_integracao.py, validar contra o schema oficial um evento publicado com os campos novos.
Contexto técnico
- Entradas: estado do grafo (
resultado_id,encaminhamento,busca_meta) e o resultado de origem consultado no Postgres. - Saídas: eventos
no-concluidocomresultado_ide os campos novos da conclusão. - Componentes afetados:
codegen/app/contratos/mensagens.py,codegen/app/repositorio/artefatos.py,codegen/app/graph/nodes/decision.py,codegen/app/graph/nodes/suggest_adaptation.py,codegen/app/graph/nodes/search_sales_target.py,codegen/app/graph/nodes/extract_code.py,codegen/app/graph/nodes/derive_code.py. - Restrições:
evento_idinalterado; nenhum nome de etapa novo; um serviço por PR. - Referências: graph (
codegen/.agents/skills/graph/SKILL.md), testing (codegen/.agents/skills/testing/SKILL.md), logging (codegen/.agents/skills/logging/SKILL.md), metrics (codegen/.agents/skills/metrics/SKILL.md),codegen/tests/app/graph/nodes/test_decision.py,codegen/tests/app/graph/nodes/test_suggest_adaptation.py,codegen/tests/app/graph/nodes/test_artifact_nodes.py,codegen/tests/app/graph/test_busca_meta.py,codegen/tests/app/graph/test_correcao_do_codigo.py,codegen/tests/app/graph/test_derivacao_do_codigo.py,codegen/tests/app/test_busca_meta_integracao.py.
Critérios de aceitação
- Uma regra inviável percorre decisão e sugestão, e as duas linhas apontam o mesmo resultado inviável.
- Uma busca com vencedora publica a linha de encerramento com a vencedora,
encontradae a contagem igual à observada embusca_meta_candidatos. - Uma busca sem solução publica a linha de encerramento sem
resultado_id, com o motivo emdesfecho_busca. - Um código que falha no worker e é corrigido gera uma linha
geracao_codigocomcorrecaoe o resultadoerro_codigo. - Uma alternativa derivada gera uma linha
geracao_codigocomderivado, o resultado de sucesso da origem e oprompt_idda origem. - A reexecução de um nó republica o mesmo
evento_id.
Definição de concluído (DoD)
make pre-commitnocodegensem falha.- Testes do grafo exercitando sugestão, busca da meta, correção e derivação, com o evento publicado validado contra o schema oficial.
- Registry de
busca_meta_candidatosconferido nos testes da busca, e logs serializados sem conteúdo. - Encerramento informando que a gravação na API depende da T-301 implantada.
Observações
- Depois de implantadas a T-301 e esta tarefa, executar no ambiente local três jobs: uma regra inviável que recebe sugestão de adaptação, uma regra que abre a busca da meta maior e uma regra cujo primeiro código gerado falha no worker. Para cada job, consultar
trilhas_auditoriaordenada porconcluido_em, juntandoresultados_simulacaoporresultado_id. - Toda linha de decisão, de sugestão e de encerramento da busca deve apontar um resultado do mesmo job. A geração corrigida aponta um resultado
erro_codigo, e a geração derivada aponta o resultado de sucesso da versão de origem. - O número de candidatas da linha que encerra a busca deve conferir com as linhas de
resultados_simulacaocomproposito = 'busca_meta'e o mesmocodigo_gerado_idda simulação daquela versão.
Metadata
Metadata
Assignees
Labels
codegentarefa que diz respeito ao componente de orquestração de agentes, denominado `codegen`tarefa que diz respeito ao componente de orquestração de agentes, denominado `codegen`
Activity