Pular para conteúdo

Arquitetura de Software — Riscos e Dívida Técnica

Versão: 1.0

Riscos e Dívida Técnica

Consolidado a partir dos obstáculos do modelo KAOS (OBS-001 a OBS-004), dos trade-offs assumidos nos ADRs, e das restrições de escopo (RNF-001, RNF-003).

Riscos

ID Descrição Origem Mitigação / Status
RISCO-001 Perda de acesso à conta é irrecuperável nesta versão — não há fluxo de "esqueci minha senha". OBS-004 / RNF-003 / ASR-008 Aceito para o MVP; candidato a meta futura (V2). Comunicar a limitação claramente na UI de login/configurações.
RISCO-002 Ausência de 2FA e de verificação de e-mail reduz a superfície de segurança adicional da conta. OBS-004 / RNF-003 Aceito deliberadamente; reavaliar prioridade em V2 conforme uso real.
RISCO-003 Account lockout por IP (@nestjs/throttler) roda em memória — não é compartilhado entre instâncias. ADR-009 (trade-off) Aceito para instância única do MVP; migrar para store compartilhado (Redis) caso haja escala horizontal.
RISCO-004 Cálculo de recorrência sob demanda (rrule) tem custo de leitura toda vez que o Calendário é consultado, em vez de uma leitura direta de instâncias materializadas. ADR-013 (trade-off) Aceito para o volume esperado do MVP; monitorar tempo de resposta do endpoint de calendário em produção.
RISCO-005 Busca textual via ILIKE sem índice adequado tende a degradar com o crescimento da base (Full Table Scan). ASR-015 / ADR-016 (trade-off) Mitigação já mapeada: criação de índice GIN pg_trgm via raw migration Prisma (ver DIVIDA-001).
RISCO-006 Coexistência de dois mecanismos de autenticação (Passport para Access Token; serviço custom para Refresh Token) aumenta a superfície de manutenção do módulo de sessão. ADR-006 (trade-off) Aceito por ser mais simples de controlar revogação individual/massa do que forçar tudo em uma única strategy.

Dívida Técnica

ID Descrição Origem Mitigação / Status
DIVIDA-001 Ausência inicial de índice GIN trigram (pg_trgm) para a busca por título. ADR-016 / ASR-015 Caminho de evolução já definido: criar índice via migration assim que a volumetria justificar.
DIVIDA-002 Throttler de account lockout em memória, sem persistência compartilhada entre instâncias. ADR-009 Migrar para Redis (ou equivalente) caso o sistema escale para múltiplas instâncias.
DIVIDA-003 Duplicação parcial de regras de validação entre frontend (Zod/React Hook Form) e backend (domain) — ex.: política mínima de senha, obrigatoriedade de datas de SCHEDULE. ADR-018 Mitigado parcialmente por schema compartilhado no monorepo (packages/shared) quando o formato permitir; backend permanece autoridade final.
DIVIDA-004 Boilerplate de mappers manuais entre modelo Prisma e entidades de domínio (Clean Architecture). ADR-001, ADR-003 Aceito como custo estrutural da separação domain/infrastructure; não há mitigação planejada — é trade-off permanente da decisão.
DIVIDA-005 Sem tabela de instâncias de recorrência — qualquer evolução futura para suportar exceções/overrides (fora do escopo do MVP) exigirá refatoração do modelo atual. RNF-001 / OBS-001 / ADR-013 Candidata a meta futura (V2); refatoração de modelagem necessária caso a restrição de escopo seja revista.
DIVIDA-006 Guard de autenticação global exige que todo endpoint público seja marcado explicitamente (@Public()) — risco de esquecimento inverso (marcar como público algo que não deveria). ADR-008 Mitigado por ser "secure by default" (o erro mais provável é o oposto: esquecer de marcar como público, não o inverso); reforçar em revisão de código/CI.