diff --git a/docs/plans/c110-ux-pos-critique.md b/docs/plans/c110-ux-pos-critique.md new file mode 100644 index 00000000..4f84d88d --- /dev/null +++ b/docs/plans/c110-ux-pos-critique.md @@ -0,0 +1,34 @@ +# UX pós-critique: C110 — refinamentos do feedback visual do arrasto da agenda + +Status: rascunho +Atualizado em: 2026-08-10 +Issue: — (registrar via agent:register após o plano) +Priority: P3 +Model: cursor-grok-4.5-medium +Impeccable: B — encaixes na superfície já entregue (preview do arrasto do C110) +Canvas UI: N/A — superfície existente +Appetite: ~0,5 dia eng fill-in + +## Intenção + +O C110 (#589, entregue) trouxe o feedback visual do arrasto com um preview do período adjacente — aprovação do gate com o canvas, corte de fidelidade aceito ("preview aproximado; Opção 2 se destoar"). Este lote colhe os débitos pós-/simplify que ficaram abaixo do limiar de Issue individual, agrupados por superfície (o preview do arrasto): uma validação de leitura de produto (chevron) e dois polimentos visuais dentro da aproximação aceita. + +## Escopo do lote + +1. **Chevron: confirmar a leitura "direção da mudança"** (origem: /simplify). O aceite diz "um chevron na borda revelada indica a direção da mudança (próximo/anterior)"; o canvas do gate desenhou o chevron apontando para o **lado revelado** (direita quando o próximo é revelado à direita). Implementado seguindo o canvas. **Fase:** validar com um usuário da persona (coordenador/assessor) qual leitura prevalece; se "direção da mudança" (apontar na direção do gesto) vencer, flip de 1 linha (ChevronLeft/Right) no `ActivityAgendaSwipePreview` + ajuste do e2e se assertar a classe. +2. **Dots do mês ancorados ao frame do grid** (origem: /simplify). Os dots do preview no mês posicionam contra o bloco do conteúdo (chevron/label inclusos), não contra o frame skeleton — a primeira fileira pode sobrepor a área do rótulo. **Fase:** envolver head+frame+dots num container posicionado único para os dots ancorarem no frame. +3. **Gradiente de colunas duplicado no CSS** (origem: /simplify). A base do frame e a camada do mês repetem o mesmo `repeating-linear-gradient` de 14.285%. **Fase:** custom property `--swipe-frame-columns` se o lote já mexer nesse CSS (senão descartar — a var valeria mais indireção que as ~5 linhas). + +## Fora de escopo / já resolvido + +- Já resolvido no /simplify da sessão: helpers `clampDisplacement`/`isVerticalDrag`; `civilDateParts` fundido (year); `civilInstantAtBahia` → `allDayStartInstant`; seed e2e generalizado; `dispatchTouchDrag` unificado; CSS sem regras mortas (`background-size`, `position: relative` no frame, regra `--next`); paridade de label foldada nos unit tests. +- Decisões travadas (não reabrir): direção do gesto travada no claim; `touchcancel` sintético no claim; range do mês de 42 dias; transform imperativo no hook (sem estado por frame). + +## Rabbit holes + +- Redesenho do preview (Opção 2 do aceite — só seta) — não reabrir sem evidência nova de que o preview destoa. +- Animar mais superfícies da agenda (título do header, criação inline) — anti-goals do C110. + +## Questões em aberto + +- Nenhuma — o gate é a validação do chevron com usuário (fase 1).