Skip to content

fix(followup): grafo corrompido deixa de passar no schema (#699) - #748

Open
webtecnica wants to merge 1 commit into
melgarafael:mainfrom
webtecnica:fix/699-grafo-corrompido-nao-passa
Open

fix(followup): grafo corrompido deixa de passar no schema (#699)#748
webtecnica wants to merge 1 commit into
melgarafael:mainfrom
webtecnica:fix/699-grafo-corrompido-nao-passa

Conversation

@webtecnica

@webtecnica webtecnica commented Sep 12, 2026

Copy link
Copy Markdown

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, flowGraphSchema aceitava 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.tssuperRefine de integridade no flowGraphSchema: aresta órfã por source e por target, 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.tssó 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ã; e intervencao.ts engata a branch !success que 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.ts132 passed (132), 1,37s.
  • pnpm exec vitest run lib/followup24 files passed, 456 passed (456), 11,95s.
  • Amostra de consumidores: tests/api/followup-flows.test.ts tests/unit/o-fluxo-publicado-nao-abre-vazio.test.ts40 passed (40).

Sabotagem (pós-commit; previsão escrita antes: 4 vermelhos, exatamente os quatro previstos): git checkout HEAD~1 -- lib/followup/graph-schema.ts4 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 com git checkout HEAD -- lib/followup/graph-schema.tsgit status limpo e 132/132 verdes de novo.

Gateseslint --max-warnings=0 nos 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):

gate resultado
pnpm typecheck rc=0 (10s)
pnpm lint rc=0 (1.164s)
pnpm lint:channels rc=0 (1s)
pnpm lint:role-rank rc=0 (2s)
pnpm release:conferir rc=0 (1s) — fragmento .changes/grafo-corrompido-nao-passa.md aceito
pnpm test:unit rc=0 (415s) — 791 arquivos · 8.369 passed (+ 1 expected fail)
pnpm test:shell rc=0 (57s)
pnpm build rc=0 (134s)

O que NÃO medi

  • tests/invariants/** — precisa de Postgres/Docker, fora do include do vitest focado.
  • Prova em tela / e2e real do fluxo publicado — não filmada; o desfecho do parse é coberto pelos testes dos consumidores.

…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.
@vercel

vercel Bot commented Sep 12, 2026

Copy link
Copy Markdown

@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

ecc-tools Bot commented Sep 12, 2026

Copy link
Copy Markdown
Contributor

ECC Tools / Security Evidence

Commit: 3579419fa494ff86cadb0732f6de8da0f7794e97

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

ecc-tools Bot commented Sep 12, 2026

Copy link
Copy Markdown
Contributor

ECC Tools / PR Risk Taxonomy

Commit: 3579419fa494ff86cadb0732f6de8da0f7794e97

PR taxonomy review recommended (neutral)

Detected 1 PR taxonomy bucket(s): CI/CD Recommendation.

Scanned 4 changed file(s).

Roadmap taxonomy buckets:

CI/CD Recommendation

CI, dependency, coverage, and contract signals should be routed into follow-up checks or verification work.

Signals:

  • 2 CI or workflow path(s) changed

Paths:

  • lib/followup/graph-schema.test.ts
  • tests/unit/followup-excluir-no-leva-as-arestas.test.ts

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

ecc-tools Bot commented Sep 12, 2026

Copy link
Copy Markdown
Contributor

ECC Tools / Reference Set Readiness

Commit: 3579419fa494ff86cadb0732f6de8da0f7794e97

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 /ecc-tools analyze comments and generated manifests.

Area Status Evidence / Next Step
Deep analyzer corpus Missing Add analyzer fixture, golden, benchmark, or reference-set files that can catch analyzer regressions.
RAG/evaluator comparison Missing Add retrieval or evaluator reference-set comparison fixtures with expected ranking behavior.
PR salvage/review corpus Missing Add stale-PR, review-thread, reopen-flow, or salvage reference cases for queue cleanup automation.
Discussion triage corpus Missing Add public discussion triage fixtures, golden cases, or reference sets for informational, answered, and no-response classifications.
Harness compatibility Missing Add cross-harness, adapter-compliance, or harness-audit evidence for Claude, Codex, OpenCode, Zed, dmux, and agent surfaces.
Security evidence Missing Attach security evidence such as SBOMs, SARIF, audit reports, or AgentShield evidence packs.
CI failure-mode evidence Missing Add captured CI failure logs, dry-run fixtures, or troubleshooting docs for common workflow failure modes.

Check publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.

@github-actions

Copy link
Copy Markdown

Recebido, @webtecnica — obrigado por isto.

Duas coisas que vão parecer erro seu e não são:

  • O check Vercel vermelho ("Authorization required to deploy") é esperado em PR de fork. A
    main faz deploy de produção e a Vercel se recusa a construir código de fora, o que está
    certo. Ele não entra no gate de merge.
  • No primeiro PR de quem nunca contribuiu aqui, os workflows ficam parados esperando
    liberação
    — política do GitHub, não sua. Enquanto isso o PR parece não ter check nenhum
    (nem o gh pr checks mostra os que estão nesse estado). Quem tria libera; você não precisa
    fazer nada.

Um mantenedor vai revisar de verdade — rodando os gates e reproduzindo o comportamento, não só
lendo o diff — e responde aqui em até um dia útil, com a medição junto, nunca com um "acho
que".

Esta mensagem é automática e não diz nada sobre o seu PR: ela é sobre o processo. O que vem
depois é pessoa.

@ecc-tools

ecc-tools Bot commented Sep 12, 2026

Copy link
Copy Markdown
Contributor

ECC Tools / Hosted Promotion Readiness

Commit: 3579419fa494ff86cadb0732f6de8da0f7794e97

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 src/analyzers/fixtures/evaluator-rag-corpus.ts.
Hosted output scoring inspected 0 completed cached hosted job results.

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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Catraca: o esquema do fluxo aceita grafo corrompido — aresta órfã e ids duplicados passam no safeParse (do PR #662, @IanCouto)

1 participant