mirror of
https://github.com/fsolla/teqo.git
synced 2026-11-13 15:13:07 +00:00
Matriz B98 confirmada (cadeia completa nos 4 entries). Cabeçalhos dos planos com Issue # e status registrado.
122 lines
6.5 KiB
Markdown
122 lines
6.5 KiB
Markdown
# Header do wizard — X na config principal, “Pular” só nas encadeadas
|
||
|
||
Status: registrado
|
||
Atualizado em: 2026-08-01
|
||
Issue: #104
|
||
Priority: P1
|
||
Model: composer-2.5
|
||
Impeccable: B — chrome direito do `CampaignMobileTopBar` / prop `skip` do shell
|
||
Appetite: ~0,5–1d eng; alinhar resolvers de skip (tendência + parity sinal/liderança); sem migration
|
||
Responsável: —
|
||
|
||
## Design (Impeccable)
|
||
|
||
Âncoras: `PRODUCT.md` / `DESIGN.md` · B75 header Mandate Red · tema `campaign`.
|
||
|
||
Na implementação: craft compacto → critique → polish.
|
||
|
||
Brief compacto:
|
||
|
||
- **Persona:** CG/assessor no meio do ritual; acabou de escolher o município.
|
||
- **Job principal:** sair da ação **sem** executar a config principal = **X**; pular um ajuste **opcional** depois da principal = **“Pular …”**.
|
||
- **Estratégia de cor:** inalterada (ghost no header vermelho).
|
||
- **Edit where you see:** não — chrome.
|
||
- **Anti-goals:** X e Pular juntos; “Pular” quando ainda não houve commit da ação disparada; mudar copy do fluxo no centro do header.
|
||
|
||
### Wireframe (texto)
|
||
|
||
```text
|
||
Ação disparada = Mudar tendência (standalone)
|
||
┌─ header ────────────────────────────────────────────┐
|
||
│ [Voltar?] Mudar tendência · Cairu [X]│ ← X (ainda sem salvar tendência)
|
||
└─────────────────────────────────────────────────────┘
|
||
|
||
Depois de Ajustar votos (principal OK) → encadeada tendência
|
||
┌─ header ────────────────────────────────────────────┐
|
||
│ [Voltar] Mudar tendência · Cairu [Pular … →] │ ← Pular (votos já gravados)
|
||
└─────────────────────────────────────────────────────┘
|
||
```
|
||
|
||
## Dados → decisão → apresentação
|
||
|
||
Dados: N/A — chrome de fluxo.
|
||
|
||
## Contexto
|
||
|
||
**B75 ✓** definiu: slot direito = **X** (`dismissHref`) **exceto** quando `skip` está setado → aí vira “Pular <fluxo>”.
|
||
|
||
Hoje:
|
||
|
||
| Fluxo | Skip quando? | Comportamento |
|
||
| ------------- | --------------------------------------- | ------------------------------------------------------------- |
|
||
| Sinal | `entryAction` ≠ `register-signal` | Correto (standalone = X) |
|
||
| Liderança | `showLeadershipWizardSkip(entryAction)` | Alinhado ao sinal |
|
||
| **Tendência** | `resolveWizardTrendSkip()` **sempre** | **Errado** — standalone mostra “Pular mudança de tendência →” |
|
||
|
||
Pedido de produto (2026-08-01): na **primeira configuração** da ação disparada (após município), o direito é **X** (sair sem executar a config principal). Configurações **encadeadas** (após a principal concluída) recebem **“Pular”**. Vale para **todos** os fluxos até a principal fechar.
|
||
|
||
## Objetivos
|
||
|
||
- `resolveWizardTrendSkip(entryAction)` espelha o sinal: **só** retorna skip quando a tendência é encadeada (`entryAction` presente e ≠ `change-trend`); standalone → `undefined` → header mostra X.
|
||
- Auditar votos / demanda / stubs: main config **sem** `skip` até B98 passar `entryAction` nas encadeadas.
|
||
- Unit: tendência standalone = sem skip; com `entryAction: 'update-votes'` = skip label + href.
|
||
- Guardrails: sem migration; dismiss continua Início; não inventar segundo botão.
|
||
|
||
## Decisões travadas
|
||
|
||
- **Regra canônica: skip iff o passo atual é subfluxo encadeado (origem ≠ ação dona do passo).** Fonte: produto 2026-08-01 + B75 + precedente B63 sinal. **Rejeitado:** skip sempre na tendência (B64 as-written — supersedido); X+Pular juntos.
|
||
- **Corrigir tendência agora; wiring de cadeia completa = B98.** Este item só alinha o chrome quando `entryAction` já existe (sinal/liderança/tendência embutidos). **Rejeitado:** implementar toda a matriz de encadeamento aqui (explode appetite).
|
||
- **Label de skip permanece específica do subfluxo** (“Pular mudança de tendência →”, etc.). **Rejeitado:** “Pular” genérico sem nome (B75 pede nome do fluxo).
|
||
- **i18n:** `entryAction`, `resolveWizardTrendSkip`; copy existente.
|
||
|
||
## Questões em aberto
|
||
|
||
- **Href do skip encadeado: Início vs próximo da cadeia?** **Opções:** A Início (hoje) | B próximo passo / fim da cadeia (B98). **Recomendação:** **A neste item**; B98 redefine o destino do Pular quando houver fila. _(assumido)_
|
||
|
||
## Abordagem proposta
|
||
|
||
```mermaid
|
||
flowchart TD
|
||
Step["Wizard*Step"] --> Resolve["resolve*Skip(entryAction)"]
|
||
Resolve -->|undefined| Shell["skip omitido"]
|
||
Shell --> Bar["TopBar → X dismissHref"]
|
||
Resolve -->|skip| Shell2["skip label+href"]
|
||
Shell2 --> Bar2["TopBar → Pular"]
|
||
```
|
||
|
||
Componentes:
|
||
|
||
- **`src/lib/politicalTrendWizardUi.ts`**: `resolveWizardTrendSkip(entryAction?)` no padrão de `resolveWizardSignalSkip`; `shouldShowWizardTrendSkip`.
|
||
- **`WizardTrendChoiceStep` / `WizardTrendNoteStep`**: passar `entryAction` ao resolver; `trailingAction` só se skip.
|
||
- **Parity check** em `wizardSignalUi` / leadership skip helpers (já ok) — pin unit compartilhado se extrair predicado `isChainedWizardStep(entry, owner)` com 3º call site; senão duplicar o predicado de uma linha.
|
||
- **Migration:** Sem migration.
|
||
|
||
## Dependências
|
||
|
||
- Soft: B75 ✓, B63/B64/B70. Dura para ver Pular “de verdade” após votos: **B98**.
|
||
- Não bloqueia **B97** (fechar no Salvar).
|
||
|
||
## Não escopo
|
||
|
||
- Orquestrar cadeia de passos → **B98**.
|
||
- Fechar wizard no Salvar da tendência → **B97**.
|
||
- Skip no desktop no header vermelho (já adiado em B75).
|
||
|
||
## Rabbit holes
|
||
|
||
- **State machine global de “fase principal vs encadeada”.** **Mitigação:** `entryAction` query já é o sinal; B98 só popula.
|
||
- **Renomear todos os labels de Pular.** **Mitigação:** fora.
|
||
|
||
## Adiado com gatilho
|
||
|
||
- **Destino do Pular = próximo da fila.** Revisitar em **B98**.
|
||
|
||
## Referências
|
||
|
||
- `src/lib/politicalTrendWizardUi.ts` · `src/lib/wizardSignalUi.ts`
|
||
- `src/components/campaign/municipality/WizardTrendChoiceStep.tsx` / `WizardTrendNoteStep.tsx`
|
||
- `src/components/campaign/shell/CampaignMobileTopBar.tsx`
|
||
- [header-mobile-wizard-campanha.md](header-mobile-wizard-campanha.md) (B75) · [wizard-mudar-tendencia.md](wizard-mudar-tendencia.md) (B64 — skip sempre, supersedido aqui)
|
||
- `PRODUCT.md` / `DESIGN.md`
|
||
|
||
Qualidade de decisão: 5/5
|