Status: Approved · v2 · SPEC-ARCH-STATE-001
depends_on: SPEC-DOMAIN-AUTH-001, SPEC-ARCH-FRONTEND-001
used_by: IS-ZERO-00.2, IS-MVP-02.1
Estado, cache e autenticação no frontend
Regras para evitar stores gigantes, vazamentos entre sessões e inconsistência após mutations.
Modelo
Categorias de estado
- Server state: pages, lists, entities, notifications, wallet; pertence a hooks/cache.
- Session state: usuário, tokens, onboarding e AuthIntent; store controlado.
- UI state: modal, tab local, filtros temporários; fica próximo da tela.
- Draft state: formulário/multi-step; provider ou form state da feature.
Zustand no MVP é reservado para sessão/configurações globais pequenas. Não copiar listas da API para stores globais.
Invalidation
Cada mutation declara query keys afetadas. Ex.: cheer invalida public team viewer, supporters e feed personalization. Result validation invalida match, team/player stats, standings/ranking e feed suggestions.
Auth
Sessão inicial possui unknown → anonymous | authenticated | onboardingRequired | suspended. Refresh coordenado. Logout limpa cache privado, estado de gestão e AuthIntent executado.
Cache sensível
Respostas de gestão e carteira são isoladas por user/session; nunca persistidas em armazenamento inseguro. Public cache pode sobreviver navegação, mas respeita status/TTL.
AuthIntent
- Intent contém tipo, target mínimo, returnUrl allowlisted e expiração.
- Executado apenas após onboarding completo.
- Falha mantém contexto e oferece retomar, sem loop.
- Intent financeiro nunca armazena segredo/QR.
Critérios de aceite
- Server state não é duplicado em store.
- Logout limpa dados privados.
- Mutation possui invalidation explícita.
- Auth boot não pisca conteúdo privado.