# Advisor plans — Dudata Hub

> Gerado por `/improve` (effort: **standard**, swarm de 4 agentes Explore em paralelo).
> Commit auditado: **`74051ba`** · 2026-07-09
> Fonte: monorepo `dudata-hub` (web + mobile + Convex + shared).

## Como usar

1. Leia o relatório visual: [`improve-report.html`](./improve-report.html) (abra no browser).
2. Execute planos em ordem de dependência (tabela abaixo).
3. Atualize a coluna **Status** quando um plano for DONE / BLOCKED / SUPERSEDED.

## Ordem recomendada e status

| Plan | Título | Priority | Effort | Depends on | Status |
|------|--------|----------|--------|------------|--------|
| [001](./001-server-side-authz-convex.md) | Authz + queries scoped no Convex | P0 | L | — | TODO |
| [002](./002-delivery-transition-preconditions.md) | Precondições de status nas mutations de entrega | P0 | M | 001 (ideal) | TODO |
| [003](./003-convex-backend-tests.md) | Harness de testes no `packages/backend` | P1 | L | 001–002 (ideal) | TODO |
| [004](./004-mobile-use-shared-domain.md) | Mobile consome `@dudata/shared` (mata fork) | P1 | L | — | TODO |
| [005](./005-docs-readme-agents-env.md) | README + AGENTS.md + .env.example + BUILD-NOTES | P2 | S–M | — | TODO |

### Dependências

```
001 (authz server) ──┬──► 002 (status guards) ──► 003 (backend tests)
                     │
004 (mobile shared) ─┘  (paralelo a 001; não bloqueia)
005 (docs) ────────────── paralelo a tudo
```

**001 antes de 002** não é estrito, mas sem authz os testes de transição sozinhos não fecham o risco de API aberta.

## Top findings (vetted) — resumo

Ordenados por leverage (impacto ÷ esforço, com boost de security HIGH).

| # | ID | Finding | Cat | Impact | Effort | Risk | Conf |
|---|-----|---------|-----|--------|--------|------|------|
| 1 | SEC-01/02/04 | Mutations/queries Convex sem authz; reset/invite abertos | security | Account takeover / dump PII | L | MED | HIGH |
| 2 | CORRECT-01 | Transitions sem checar status atual | bug | Pipeline corrompido | M | MED | HIGH |
| 3 | CORRECT-05 | `submitRequest` fallback `PORTAL_COMPANY_ID` sem auth | bug | Spam tenant default | S | LOW | HIGH |
| 4 | SEC-03 | Deactivate não revoga sessão | security | “Inativo” cosmético | M | LOW | HIGH |
| 5 | CORRECT-03 | Last-master / self-lockout só no client | bug | Org sem master | S–M | LOW | HIGH |
| 6 | TEST-01 | Zero testes no backend Convex | tests | CI verde sem server truth | L | LOW | HIGH |
| 7 | DEBT-01/02 | Domain fork no mobile | debt | Paridade web/mobile quebrada | L | MED | HIGH |
| 8 | PERF-01 | `deliveries.list` full table | perf | Escala linear | M–L | MED | HIGH |
| 9 | CORRECT-02 | `requireAnalyst` não valida role/active | bug | Assignee inválido | S | LOW | HIGH |
| 10 | DX-04 + DOCS-01 | CI só no main; README template | dx/docs | Feedback tarde + onboarding errado | S | LOW | HIGH |

### Direction (não ranqueado com bugs)

| ID | Sugestão | Evidence |
|----|----------|----------|
| DIR-01 | Authz server-side (produto multi-tenant honesto) | ADR-0005 dívida desbloqueada + código aberto |
| DIR-02 | Gestão de usuários portal no Backoffice | PRD-0001 + `setClientRole` sem UI |
| DIR-03 | NPS Typeform + Slack channels de verdade | paths reais; fallback simulado / drop |

## Considered and rejected

| Claim | Why rejected |
|-------|----------------|
| Falta de SSR | ADR-0005: client-only intencional |
| Convex em vez de Postgres | ADR-0003 |
| `monthlySlQuota` não bloqueia | by design (balanço visual) |
| `effectiveStatus` derivado | ADR-0004 |
| Zustand ainda no repo | ADR-0006: só UI (`theme`/`currentCompanyId`) — ok |
| “Relatórios incompletos” | `createRecurringPerf` + contabilidade SL já shipados |

## Not audited (standard effort)

- Deep dive em `ios/` Pods / Xcode build artifacts
- Security review de Firebase/Cloud Run infra IaC (só código app)
- Bundle analyzer / Lighthouse numérico da LP
- `bun audit` / CVE matrix de deps transitivas
- Maestro E2E flakiness em CI real

## Swarm

| Agent | Scope |
|-------|--------|
| Explore A | Correctness + Security (very thorough) |
| Explore B | Performance + Tests |
| Explore C | Tech debt + Dependencies |
| Explore D | DX + Docs + Direction |

Todos os findings da tabela foram **vetados** pelo orquestrador lendo os trechos citados (ex.: `deliveries.accept`, `users.resetPassword`, `deliveries.list`, mobile `domain.ts` fork, `packages/backend/package.json` sem `test`).
