obsidian-vault/ligbox-ops-platform/specs/013-email-server-migration/tasks.md
2026-06-19 17:26:42 +00:00

102 lines
3.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Tasks: Email Migration (013)
**Spec:** [spec.md](./spec.md) · **Plan:** [plan.md](./plan.md)
---
## Fase A — Fundação (P0)
- [ ] **T001** Criar pasta `specs/013-email-server-migration/` ✅ (este sprint)
- [ ] **T002** Migration SQL schema + migrations em `api/app/db.py`
- [ ] **T003** `app/migration/schemas.py` — Pydantic models
- [ ] **T004** `app/migration/store.py` — CRUD jobs/mailboxes/runs
- [ ] **T005** `app/migration/credentials.py` — Fernet encrypt
- [ ] **T006** `app/migration/router.py` — POST/GET jobs, list
- [ ] **T007** `permissions.py``can_manage_migration`, `can_approve_migration_gate`
- [ ] **T008** `scripts/install-migration-tools.sh` — imapsync, pst-utils, imap-upload
- [ ] **T009** Frontend: menu + `view-email-migration` lista jobs
- [ ] **T010** Associar job a `ticket_id` (Spec 010)
**Entrega Fase A:** criar job, listar, ver fase, sem sync ainda.
---
## Fase B — IMAP sync + Gate (P0)
- [ ] **T011** `tools/imapsync_runner.py` — gera comando, executa, captura log
- [ ] **T012** `tools/log_parser.py` — parse imapsync LOG para stats_json
- [ ] **T013** `worker/migration_runner.py` — fila Redis/SQLite job runner
- [ ] **T014** POST `/migration/jobs/{id}/preflight` — justlogin origem+destino
- [ ] **T015** POST `/migration/jobs/{id}/sync` — initial | delta | final
- [ ] **T016** `gate.py` — calcular migration_gate (ratio 99%)
- [ ] **T017** GET `/migration/gate?domain=` — público para wizard (auth token)
- [ ] **T018** POST `/migration/jobs/{id}/approve-gate` — ops_lead
- [ ] **T019** UI: detalhe job, botões sync, badge gate, log viewer
- [ ] **T020** `scripts/verify-migration.sh` — teste integração
**Entrega Fase B:** migração IMAP completa com gate DNS.
---
## Fase C — PST / mbox (P0)
- [ ] **T021** Volume Docker `/data/migrations` (uploads, logs, quarantine)
- [ ] **T022** POST `/migration/jobs/{id}/upload-pst` — multipart
- [ ] **T023** `tools/pst_runner.py` — readpst + imap-upload recursivo
- [ ] **T024** Quarentena ERR_MBOX + UI lista erros
- [ ] **T025** `verify.py` — contagens pós-PST
- [ ] **T026** UI: upload PST, progresso por pasta
**Entrega Fase C:** pipeline PST auditável.
---
## Fase D — TGZ + integração wizard (P1)
- [ ] **T027** `tools/tgz_runner.py` — SSH zmmailbox export/import
- [ ] **T028** VM112: consulta gate antes DNS (API client)
- [ ] **T029** Webhook `migration.gate_ready` → Desk
- [ ] **T030** Relatório JSON/PDF export no ticket
---
## Fase F — Infraestrutura (FUTURO — não hoje)
> Decisão Roger 2026-06-10: sizing VM guardado em [infrastructure.md](./infrastructure.md). Revisar antes da primeira migração PST em produção.
- [ ] **T036** Avaliar carga real vs Opção A (VM122) vs Opção B (VM123)
- [ ] **T037** Provisionar VM123 `ligbox-migration` (4 vCPU / 8 GB / 200 GB) — se necessário
- [ ] **T038** Volume +100 GB em VM122 — alternativa piloto
- [ ] **T039** DNAT/FORWARD SSH WAN para VM123 (range 25012510)
- [ ] **T040** `install-migration-tools.sh` no host worker escolhido
---
## Fase E — Melhorias (P2)
- [ ] **T031** Integração pst2mbox (https://github.com/beaufour/pst2mbox)
- [ ] **T032** OAuth2 UI para O365 (oauth2_imap)
- [ ] **T033** Cron delta sync automático (6h)
- [ ] **T034** doveadm backup path (Dovecot→Dovecot)
- [ ] **T035** Dashboard métricas migração no Overview Home
---
## Dependências externas
| Pacote | Instalação |
|--------|------------|
| imapsync | apt / imapsync.lamiral.info |
| pst-utils (readpst) | `apt install pst-utils` |
| imap-upload | git clone rgladwell/imap-upload |
| python cryptography | Fernet credentials |
---
## Definition of Done (013)
- [ ] Spec + research + plan + data-model + tasks + quickstart documentados
- [ ] Fase B entregue em staging com 1 migração IMAP real
- [ ] Fase C com 1 PST teste < 2 GB
- [ ] Gate bloqueia e libera DNS com auditoria
- [ ] BACKLOG.md actualizado