Skip to content

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

Description

@melgarafael

Achado triando o PR #662 (@IanCouto).

O grafo corrompido atravessa a validação

lib/followup/graph-schema.ts:421-424flowGraphSchema não tem refine de integridade. Medido, com controle positivo (ele rejeita campo desconhecido, então a sonda está viva):

entrada safeParse
aresta apontando para nó inexistente success: true
dois nós com o mesmo id success: true
duas arestas com o mesmo id success: true
campo desconhecido success: false

O segundo caso é exatamente o defeito da issue #586 — os contadores de id reiniciam a cada montagem do canvas, e o fluxo salvo passa a ter ids repetidos. A porta de saída não o barra.

Por que isto é catraca, e não conserto imediato

Um refine que rejeita fecha duas classes de uma vez: a da #586 e a da cascata de exclusão (aresta órfã). É o conserto certo.

Mas ele tranca quem já tem rascunho corrompido. Alguém com um fluxo salvo com ids repetidos deixaria de conseguir salvar — e a mensagem seria sobre validação, não sobre o que fazer. Isso é decisão de produto, não reconciliação mecânica, e por isso não foi patchado na triagem.

Os caminhos, e o que cada um custa

  1. refine que rejeita, com migração de dados antes — varre os rascunhos, renumera ids duplicados, e só então liga a guarda. Mais caro, e é o único que não deixa ninguém trancado.
  2. refine que rejeita, sem migração — barato, e quem estiver corrompido descobre pela porta fechada.
  3. Avisar em vez de rejeitar — registra a incoerência (log, aviso na Central) e deixa salvar. Não resolve, mas para de piorar em silêncio.

O #586 continua aberto e é a causa; esta issue é a rede que o teria pego.

Activity

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions