fix(followup): grafo corrompido deixa de passar no schema (#699) - #748
fix(followup): grafo corrompido deixa de passar no schema (#699)#748webtecnica wants to merge 1 commit into
Conversation
…l#699) O flowGraphSchema validava cada nó e cada aresta sozinhos, então passava rascunho com aresta apontando para nó inexistente, dois nós com o mesmo id e duas arestas com o mesmo id — o estrago que o editor produz ao excluir um nó (melgarafael#586). Um superRefine de integridade rejeita os três casos com mensagem dizendo o id a corrigir (aresta "e-3" aponta para nó inexistente: "no-9"; id de nó repetido: "no-1"; id de aresta repetido: "e-2"). Como salvar o rascunho e carregar a versão usam a mesma porta, o erro passa a aparecer na hora de salvar em vez de virar grafo que só quebra no meio de um disparo. Sem migração de rascunho existente — decisão registrada na issue.
|
@webtecnica is attempting to deploy a commit to the rafael-maudibrasil's projects Team on Vercel. A member of the Team first needs to authorize it. |
ECC Tools / Security EvidenceCommit: Security evidence gate passed (success) No security-sensitive scanner-evidence gap detected. Mode: enforce Scanned 4 changed file(s). No missing scanner-evidence signal was detected. Check publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission. |
ECC Tools / PR Risk TaxonomyCommit: PR taxonomy review recommended (neutral) Detected 1 PR taxonomy bucket(s): CI/CD Recommendation. Scanned 4 changed file(s). Roadmap taxonomy buckets: CI/CD RecommendationCI, dependency, coverage, and contract signals should be routed into follow-up checks or verification work. Signals:
Paths:
Check publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission. |
ECC Tools / Reference Set ReadinessCommit: Reference set readiness gaps detected (neutral) Reference evidence present for 0/7 areas (0%) across 4 changed file(s). This check is based on files changed in this PR. Repository-level readiness is still reported by
Check publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission. |
|
Recebido, @webtecnica — obrigado por isto. Duas coisas que vão parecer erro seu e não são:
Um mantenedor vai revisar de verdade — rodando os gates e reproduzindo o comportamento, não só Esta mensagem é automática e não diz nada sobre o seu PR: ela é sobre o processo. O que vem |
ECC Tools / Hosted Promotion ReadinessCommit: Hosted promotion readiness passed (success) No hosted promotion evidence gaps detected across 4 changed file(s); 0 corpus scenarios had matching evidence. This check compares PR file changes against the evaluator/RAG promotion corpus in No evaluator corpus scenarios matched this PR. Check publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission. |
O que este PR faz
O esquema do grafo de follow-up passa a recusar grafo corrompido: aresta apontando para nó inexistente e id repetido (de nó ou de aresta) deixam de entrar.
Antes,
flowGraphSchemaaceitava essas estruturas — o builder salvava e publicava grafo com aresta órfã e o defeito só aparecia adiante, no motor.Closes #699
Como resolve
lib/followup/graph-schema.ts—superRefinede integridade noflowGraphSchema: aresta órfã porsourcee portarget, id de nó repetido e id de aresta repetido, com mensagens em PT-BR citando o id problemático.lib/followup/graph-schema.test.ts— 6 casos novos (4 rejeições + 2 controles: grafo válido passa, campo desconhecido segue rejeitado).tests/unit/followup-excluir-no-leva-as-arestas.test.ts— só comentários (o cabeçalho dizia que "o schema o ACEITA no salvamento"); nenhuma asserção mudou.Efeito nos consumidores (pretendido, sem migração de rascunho): salvar/carregar rascunho (
lib/followup/api-schemas.ts) passa a devolver 400 com o id na mensagem; a carga de versão publicada (engine.ts,gatilho-etapa.ts,gatilho-caso.ts,enroll.ts,turn-bridge.ts,silence-sweep.ts) falha alto em grafo corrompido em vez de rodar com aresta órfã; eintervencao.tsengata a branch!successque já existia, devolvendo "A versão do fluxo em que este follow-up anda não pôde ser lida.". Quem já tem rascunho corrompido corrige e salva.O que medi (comandos e saídas)
pnpm exec vitest run lib/followup/graph-schema.test.ts tests/unit/followup-excluir-no-leva-as-arestas.test.ts→ 132 passed (132), 1,37s.pnpm exec vitest run lib/followup→ 24 files passed, 456 passed (456), 11,95s.tests/api/followup-flows.test.ts tests/unit/o-fluxo-publicado-nao-abre-vazio.test.ts→ 40 passed (40).Sabotagem (pós-commit; previsão escrita antes: 4 vermelhos, exatamente os quatro previstos):
git checkout HEAD~1 -- lib/followup/graph-schema.ts→ 4 failed | 128 passed (132) —rejeita aresta cujo source aponta para nó inexistente,rejeita aresta cujo target aponta para nó inexistente,rejeita dois nós com o mesmo id,rejeita duas arestas com o mesmo id. Restaurado comgit checkout HEAD -- lib/followup/graph-schema.ts→git statuslimpo e 132/132 verdes de novo.Gates —
eslint --max-warnings=0nos três arquivos rc=0 nas medições focadas; e a fila local completa (um pesado por vez —flock+systemd-run --scope -p MemoryMax=5G):pnpm typecheckpnpm lintpnpm lint:channelspnpm lint:role-rankpnpm release:conferir.changes/grafo-corrompido-nao-passa.mdaceitopnpm test:unitpnpm test:shellpnpm buildO que NÃO medi
tests/invariants/**— precisa de Postgres/Docker, fora do include do vitest focado.parseé coberto pelos testes dos consumidores.