fix(jornada): o trilho da configuração inicial não terminava nunca - #36
Merged
Conversation
O banner "Configuração inicial · 5/5" ficava pregado na tela mesmo com tudo feito. Visto ao vivo na Vertímetal (produção, 29/07): clicar em "Ver o resultado" trocava pra aba DRE e o banner continuava lá. A etapa final da jornada sempre foi manual por desenho — a migration 20260530000000 §7 escreve, na própria fonte: "concluida — cliente abriu a aba Resultado (manual)". As triggers de `transactions`/`dre_detalhamento`/ `dre_monthly_snapshots` avançam até `primeira_dre_gerada` e param ali, porque "ver a DRE" não deixa rastro no banco. Só que ninguém disparava esse último avanço: `useAvancarJornada` foi exportado e nasceu SEM CHAMADOR (grep: zero), e o CTA do banner só chamava `onIrPara`, que troca de aba. Resultado: `jornada_etapa` morria em `primeira_dre_gerada` e `calcularProgress` devolvia `visivel: true` pra sempre. Nenhum projeto do banco tem `jornada_concluida_em` preenchido — o trilho nunca fechou pra ninguém. É o MESMO defeito que o commit 0501094 consertou na outra ponta: lá o `tour_completo` era "ação manual da UI" que ninguém disparava e o trilho nascia invisível; aqui o `concluida` é ação manual que ninguém dispara e o trilho não morre. A ponta de baixo foi vista, a de cima não. ## O fix `deveFecharJornada(etapa, aba)` em jornada-service.ts — predicado puro, testável, com o critério da migration: etapa `primeira_dre_gerada` + aba `dre`. O `JornadaBanner` o executa num efeito e avança pra `concluida` via a RPC monotônica que já existia. Pega os DOIS caminhos até o Resultado: o clique no CTA (que troca pra `dre`) e a navegação direta pela trilha da Apuração. Em ambos o cliente viu o que a jornada prometia — fechar só no clique deixaria preso quem chegou pelo stepper. O ref não é decoração: sem ele o efeito reenviaria a RPC a cada render até a invalidação voltar. No erro ele destrava, então uma falha de rede não sela o banner até o reload. Testes (149 arquivos, 1378/1378): o critério de fechamento, a invariante de que todo passo visível oferece ação+label+destino, a monotonicidade de `nivelJornada` (a RPC depende dela) e o não-atalho — abrir a DRE antes da hora não fecha nada. tsc limpo (os 2 erros restantes são validators velhos em .next/, apontando pra uma rota que não existe mais) · eslint 0 nos 4 arquivos. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
|
This pull request has been ignored for the connected project Preview Branches by Supabase. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
O banner "Configuração inicial · 5/5" ficava pregado na tela mesmo com tudo feito. Visto ao vivo na Vertímetal (produção, 29/07): clicar em "Ver o resultado" trocava pra aba DRE e o banner continuava lá.
Causa
A etapa final da jornada sempre foi manual por desenho — a migration
20260530000000§7 escreve, na própria fonte: "concluida — cliente abriu a aba Resultado (manual)". As triggers avançam atéprimeira_dre_geradae param ali, porque "ver a DRE" não deixa rastro no banco.Só que ninguém disparava esse último avanço:
useAvancarJornadafoi exportado e nasceu sem chamador (grep: zero), e o CTA do banner só chamavaonIrPara, que troca de aba.jornada_etapamorria emprimeira_dre_geradaecalcularProgressdevolviavisivel: truepra sempre. Nenhum projeto do banco temjornada_concluida_empreenchido — o trilho nunca fechou pra ninguém.É o mesmo defeito que o
0501094consertou na outra ponta: lá otour_completoera ação manual que ninguém disparava e o trilho nascia invisível; aqui oconcluidaé ação manual que ninguém dispara e o trilho não morre.O fix
deveFecharJornada(etapa, aba)— predicado puro com o critério da migration (primeira_dre_gerada+ abadre). OJornadaBannero executa e avança praconcluidapela RPC monotônica que já existia.Pega os dois caminhos até o Resultado: o clique no CTA e a navegação direta pelo stepper. Fechar só no clique deixaria preso quem chegou pela trilha.
Validação
vitest149 arquivos, 1378/1378 — inclui 8 testes novos: critério de fechamento, invariante de que todo passo visível oferece ação+label+destino, monotonicidade denivelJornada(a RPC depende dela) e o não-atalho (abrir a DRE antes da hora não fecha nada).tsclimpo — os 2 erros restantes são validators velhos em.next/apontando pra uma rota que não existe mais, não vêm deste diff.eslint0 nos 4 arquivos.Smoke que fecha: abrir a Apuração da Vertímetal na aba DRE — o banner some e não volta no reload.
🤖 Generated with Claude Code