Repository navigation
Closed
Labels
raiztarefas que dizem repseito à raiz do monorepotarefas que dizem repseito à raiz do monorepo
Milestone
Description
T-300 - Definir no contrato da trilha o resultado e a variante de cada etapa
- Componente:
contracts/, em PR próprio, sujeito a autorização. - Depende de: nenhuma tarefa.
- Data máxima: 04/11/2026
- Estimativa: 3 pontos (Fibonacci)
Entregável
- Campo opcional
resultado_idemcontracts/events/no-concluido.schema.json. - Campos opcionais
modo_geracao,motivo_sugestao,desfecho_buscaecandidatas_simuladasemcontracts/domain/trilha-conclusao.schema.json. - Descrições de
no_dominio,elementos_implementados,diagnosticoeconcentracaoatualizadas para dizer que o fluxo atual não os produz. - Descrição de
no_grafoemcontracts/domain/comum.schema.jsonatualizada para o grafo atual. - Exemplos novos, registrados no manifesto, representando linhas do fluxo atual, com os exemplos existentes mantidos.
Descrição
O evento no-concluido e a coluna trilhas_auditoria.conclusao não têm onde registrar o resultado sobre o qual uma etapa agiu nem qual variante da etapa ocorreu. Esta tarefa acrescenta esses campos ao contrato, de forma aditiva, para que a API os grave (T-301) e o codegen os publique (T-302).
Contexto e decisões tomadas
- O produtor de
no-concluidoé o codegen. O consumidor é a API, que gravatrilhas_auditoria. A API também grava linhasconfirmacaosem passar pelo evento, e elas não mudam nesta tarefa. - Nenhum schema envolvido declara
additionalProperties: false. O codegen ignora campos desconhecidos (ModeloContratocomextra="ignore"emcodegen/app/contratos/mensagens.py), e a API também (skillconsumidoresda API). O contrato pode entrar antes dos dois. resultado_idé referência e não conteúdo, como as demais referências do evento.- Os campos novos da conclusão usam vocabulário fechado, com os valores que o codegen já usa.
motivo_sugestaorepete as constantes decodegen/app/sugestao_adaptacao.py, edesfecho_buscarepete os motivos deSemSolucaoMetamaisencontrada. - Nenhum nome de etapa é criado, e o enum
no_grafonão muda. Só a descrição dele muda. - Nenhum campo é removido nem renomeado (ADR-002).
Escopo
Dentro do escopo
contracts/events/no-concluido.schema.json,contracts/domain/trilha-conclusao.schema.jsonecontracts/domain/comum.schema.json.- Exemplos novos em
contracts/examples/e o registro deles emcontracts/examples/manifesto.json.
Fora do escopo
-
Alterar
contracts/examples/events/no-concluido.jsonecontracts/examples/domain/trilha-conclusao.json, que continuam válidos e são lidos pelos testes do codegen. -
DTOs, migration e gravação na API (T-301).
-
Publicação pelo codegen (T-302).
-
Qualquer campo das etapas de extração e reextração.
Requisitos
Autorização
- Antes de editar
contracts/, parar e pedir autorização explícita ao usuário, conforme contract-change (.agents/skills/contract-change/SKILL.md). O pedido informa os três schemas alterados, os três exemplos novos e o manifesto, o produtor (codegen) e o consumidor (API), a compatibilidade (aditiva; eventos e linhas antigas continuam válidos), os riscos (nenhum consumidor quebra, porque os dois ignoram campo desconhecido) e as validações (exemplos, testes dos dois componentes e gate dos quatro componentes). Não implementar os requisitos seguintes antes da autorização.
Evento no-concluido
- Acrescentar
resultado_id(string,format: uuid), opcional. A descrição diz que é o resultado sobre o qual a etapa agiu e enumera os casos. Nadecisao, é o resultado decidido. Nasugestao_adaptacao, é o resultado inviável analisado. Na linhadecisaoque encerra a busca da meta, é a candidata vencedora, e fica ausente quando a busca termina sem solução. Nageracao_codigocommodo_geracaoigual acorrecao, é o resultado que falhou. Nageracao_codigocommodo_geracaoigual aderivado, é o resultado de sucesso da versão de origem. Nas demais etapas, fica ausente. - Na descrição de
simulacao_id, acrescentar que só a linha degeracao_codigoo traz e que as demais chegam à simulação pelo código do resultado apontado emresultado_id.
Conclusão da trilha
- Acrescentar
modo_geracao, comenumgerado,derivadoecorrecao, descrito como "Nó geracao_codigo".geradoé o código produzido pelo modelo a partir da regra.derivadoé o código da alternativa derivado do código já simulado da versão de origem, sem chamar o modelo, e por isso oprompt_idda linha é o da versão de origem.correcaoé o código produzido pelo modelo a partir do código que falhou no worker. - Acrescentar
motivo_sugestao, comenumproposta,sem_margem,incoerente,nao_suportadaelimite, descrito como "Nó sugestao_adaptacao". A descrição diz que sópropostaleva a uma versão nova, que a API grava comregras.origem = 'sugestao_adaptacao'. - Acrescentar
desfecho_busca, comenumencontrada,nao_monotonica,intervalo_esgotadoefalha_execucao, ecandidatas_simuladas(integer,minimum0). Os dois são descritos como "Nó decisao, na linha que encerra a busca da meta maior". A descrição diz que a presença dedesfecho_buscadistingue essa linha da decisão sobre o resultado, e que as execuções candidatas não têm linha própria na trilha e ficam emresultados_simulacaocomproposito = 'busca_meta'. - Nas descrições de
no_dominio,elementos_implementados,diagnosticoeconcentracao, acrescentar que o fluxo atual não produz o campo. Emelementos_implementados, acrescentar que a declaração de cobertura acontece na execução do código e fica no resultado da simulação. - Na descrição do schema, trocar "Só resumo é comum a todos" por um texto que mantenha a regra de não repetir veredito e razão de parada, e acrescentar que a meta e a tentativa também não se repetem, porque a linha as alcança pelo resultado e pela versão.
Vocabulário de etapas
- Reescrever a descrição de
no_grafoemcomum.schema.json. Ela deixa de dizer que os oito primeiros nomes são a sequência de 1 a 8 e passa a dizer o que grava cada nome no grafo atual.geracao_codigocobre geração, derivação e correção do código.delegacao_workergrava uma linha por código, e as execuções candidatas da busca não geram linha.decisaocobre a decisão sobre o resultado e o encerramento da busca da meta.sugestao_adaptacaograva uma linha por resultado inviável analisado.interpretacao_resultadoeexplicacaoestão reservados e nenhum nó os produz hoje.confirmacaoé gravado pela API quando o usuário corrige a regra.
Exemplos
- Não alterar
contracts/examples/events/no-concluido.json. O testetest_producer_publica_payload_validado_na_rota_correta, emcodegen/tests/app/test_mensageria.py, valida esse exemplo com o DTONoConcluidoe exige que o payload publicado seja igual ao exemplo. Como o DTO descarta campos desconhecidos, um exemplo com os campos novos quebraria o teste até a T-302. - Criar três exemplos e registrá-los em
contracts/examples/manifesto.json, ao lado dos existentes.events/no-concluido-geracao-derivada.jsoné uma linhageracao_codigocommodo_geracaoigual aderivado,resultado_id,prompt_idecodigo_gerado_id, semfontese semelementos_implementados.events/no-concluido-encerramento-busca.jsoné uma linhadecisaocomresultado_id,desfecho_buscaigual aencontradaecandidatas_simuladas.domain/trilha-conclusao-sugestao.jsoné a conclusão de uma linhasugestao_adaptacaocomresumoemotivo_sugestaoigual aproposta. Os identificadores repetem os dos exemplos existentes quando representam a mesma entidade.
Contexto técnico
- Entradas: schemas e exemplos atuais.
- Saídas: schemas e exemplos com os campos opcionais novos.
- Componentes afetados:
contracts/. Produtor e consumidor só passam a usar os campos na T-301 e na T-302. - Restrições: evolução aditiva; nenhum
additionalProperties: false; nenhum nome de etapa novo. - Referências: contract-change (
.agents/skills/contract-change/SKILL.md), validador dos exemplos (contracts/validar-exemplos.py), ADR-002 (docs/adrs/ADR-002.md),contracts/events/no-concluido.schema.json,contracts/domain/trilha-conclusao.schema.json,contracts/domain/comum.schema.json,codegen/app/sugestao_adaptacao.py.
Critérios de aceitação
-
python contracts/validar-exemplos.pypassa e valida os três exemplos novos. - Os exemplos existentes de
no-concluidoetrilha-conclusaocontinuam válidos sem alteração. - Os testes do codegen e da API passam sem mudança de código, o que confirma que o contrato entra antes dos dois.
- Um evento com
modo_geracaofora do vocabulário é rejeitado pelo schema. - Um evento com
candidatas_simuladasnegativo é rejeitado pelo schema.
Definição de concluído (DoD)
- Autorização registrada antes da edição de
contracts/. python contracts/validar-exemplos.pyegit diff --checksem falha.- Gate dos quatro componentes verde, porque o diff toca
contracts/. - Encerramento informando os testes de produtor e consumidor executados e os que não puderam ser executados.
Observações
- A coluna
trilhas_auditoria.resultado_idnão pertence a este PR. O schema só documenta o campo do evento.
Metadata
Metadata
Assignees
Labels
raiztarefas que dizem repseito à raiz do monorepotarefas que dizem repseito à raiz do monorepo
Activity