Skip to content

fix(followup): excluir nó ou aresta passa a pedir confirmação (#700) - #749

Open
webtecnica wants to merge 1 commit into
melgarafael:mainfrom
webtecnica:fix/700-excluir-no-pede-confirmacao
Open

fix(followup): excluir nó ou aresta passa a pedir confirmação (#700)#749
webtecnica wants to merge 1 commit into
melgarafael:mainfrom
webtecnica:fix/700-excluir-no-pede-confirmacao

Conversation

@webtecnica

@webtecnica webtecnica commented Sep 12, 2026

Copy link
Copy Markdown

O que este PR faz

Excluir nó ou aresta no builder de follow-up passa a pedir confirmação: o botão de excluir a seleção abre um diálogo, e a exclusão só acontece na confirmação.

Antes, o botão ocupava o lugar do "Excluir fluxo", com o mesmo ícone e sem confirmação — um clique errado apagava a seleção.

Closes #700

Como resolve

  • app/app/ai/followups/[id]/_components/PublishBar.tsx — o botão de excluir a seleção passa a apenas abrir o AlertDialog; a exclusão acontece no clique de confirmação.
  • app/app/ai/followups/[id]/_components/PublishBar.test.tsx (novo) — 5 testes de comportamento.
  • lib/i18n/dicionario.ts — 4 chaves novas PT→ES (títulos e descrições, nó × aresta).
  • docs/doctrine/destrutivo-pede-confirmacao.md (novo) — a regra, como a issue pediu; docs/index.md ganha a linha na tabela de doutrina.
  • .changes/excluir-no-pede-confirmacao.md — fragmento (impacto: nada_mudou, secao: corrigido).

O que medi (comandos e saídas)

  • pnpm exec vitest run app/app/ai/followups/[id]/_components/PublishBar.test.tsx com os vizinhos → 5 files passed, 23 tests na rodada de referência (4,84s); os 5 novos são de comportamento no call-site.

Sabotagem (pós-commit; previsão escrita antes: os 4 testes do diálogo em vermelho, o 5º "sem seleção" verde): revertendo os dois arquivos que carregam o fix (PublishBar.tsx + dicionario.ts) → Tests 4 failed | 19 passed (23), exatamente as 4 do diálogo — a última em PublishBar.test.tsx:122, com findByRole("alertdialog") não achando nada porque o botão voltou a excluir direto. A previsão extra — o gate i18n-espanhol-cobre-a-tela ficar vermelho — errou, e o motivo fica registrado: o gate mede chave usada sem tradução; revertendo componente e dicionário os dois lados ficam consistentes e ele passa. Restaurado com git checkout HEAD -- <os dois>git status limpo e verdes de novo.

Gateseslint --max-warnings=0 nos três arquivos rc=0 nas medições focadas; release:conferir rc=0 (1.20.0 + patch = 1.20.1, fragmento .changes/excluir-no-pede-confirmacao.md); 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 (re-rodada — ver nota)
pnpm lint:channels rc=0 (1s)
pnpm lint:role-rank rc=0 (2s)
pnpm release:conferir rc=0 (1s)
pnpm test:unit rc=0 (432s) — 792 arquivos · 8.368 provas (+ 1 expected fail)
pnpm test:shell rc=0 (60s)
pnpm build rc=0 (172s)

Nota: o primeiro lint da fila foi interrompido por SIGTERM (rc=143), travado em espera de I/O (estado D) com dois lotes de gate concorrentes na máquina; a re-rodada fechou rc=0 com 0 errors (os avisos são pré-existentes do repo) — está na tabela acima.

O que NÃO medi

  • Sem prova em tela — a prova é o teste de comportamento no call-site, não screenshot.
  • tests/invariants/** — precisa de Postgres/Docker, fora do include do vitest focado.
  • Uma corrida anômala: logo depois do restauro, uma execução voltou 2 failed | 1 passed (3) com 416s (transform 304s) — cara de contenção de máquina; as execuções imediatamente anterior e posterior, mesmo comando, deram verdes em ~5s. Não reproduziu e não investiguei a fundo.
  • prettier --check não é gate do CI (gov:verify não inclui format:check) e reprova arquivos pré-existentes; não rodei --write para não inflar o diff.

…afael#700)

O botão de excluir a SELEÇÃO no builder de follow-up dividia o mesmo assento da
barra com o botão que apaga o fluxo inteiro — mesmo ícone de lixeira, mesma cor
destrutiva, mesma posição — e disparava a exclusão no primeiro clique. O irmão
ao lado confirmava antes. Quem aprendeu a confiar na lixeira daquele canto
clicava no botão mais à mão (o que existe para limpar o que acabou de ser
selecionado) com a mesma confiança e perdia o trabalho do canvas sem aviso: a
assimetria entre dois botões gêmeos era o defeito.

Agora os dois têm o mesmo contrato: o clique abre um `AlertDialog` que NOMEIA o
alvo — "Excluir este nó?" ou "Excluir esta aresta?", conforme a seleção — e diz
o que vai junto (as arestas ligadas ao nó; a ligação entre os dois nós) e que
não há desfazer. A exclusão só acontece no clique de confirmação; cancelar não
muda nada. Os textos novos entram no dicionário PT→ES e a regra fica escrita em
`docs/doctrine/destrutivo-pede-confirmacao.md`.

Testes em app/app/ai/followups/[id]/_components/PublishBar.test.tsx: nada é
excluído antes de confirmar, cancelar não exclui, confirmar exclui uma vez, o
título acompanha a seleção — e, sem seleção, o lugar segue sendo do irmão do
fluxo (é ele quem apaga o fluxo inteiro, com a confirmação que já existia).
@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: db93a6729bed60077319effd758ff8537aa29f4e

Security evidence gate passed (success)

No security-sensitive scanner-evidence gap detected.

Mode: enforce

Scanned 6 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: db93a6729bed60077319effd758ff8537aa29f4e

PR taxonomy review recommended (neutral)

Detected 2 PR taxonomy bucket(s): CI/CD Recommendation, Cost/Token Risk.

Scanned 6 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:

  • 1 CI or workflow path(s) changed

Paths:

  • app/app/ai/followups/[id]/_components/PublishBar.test.tsx

Cost/Token Risk

AI routing, usage, and token-budget changes should include budget or usage-limit evidence.

Signals:

  • 2 cost/token path(s) changed

Paths:

  • app/app/ai/followups/[id]/_components/PublishBar.test.tsx
  • app/app/ai/followups/[id]/_components/PublishBar.tsx

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: db93a6729bed60077319effd758ff8537aa29f4e

Reference set readiness gaps detected (neutral)

Reference evidence present for 0/7 areas (0%) across 6 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: db93a6729bed60077319effd758ff8537aa29f4e

Hosted promotion readiness passed (success)

No hosted promotion evidence gaps detected across 6 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.

Excluir nó/aresta ocupa o lugar do Excluir fluxo, com o mesmo ícone e sem confirmação (do PR #662, @IanCouto)

1 participant