warmbox/docs/17-agile-epics-backlog.md

181 lines
4.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.

# Agile Epics & Backlog
## Epic map
| Epic ID | Name | Phase | Priority |
|---------|------|-------|----------|
| E1 | Campaign & role model | 1 | P0 |
| E2 | Recipe engine | 1 | P0 |
| E3 | Campaign dispatcher | 1 | P0 |
| E4 | Reply rate engine | 1 | P0 |
| E5 | Statistics & reporting | 1 | P0 |
| E6 | AI content safety | 1 | P0 |
| E7 | Spam rescue v2 | 2 | P0 |
| E8 | Web dashboard | 2 | P1 |
| E9 | DNS & deliverability checks | 2 | P1 |
| E10 | Job queue | 2 | P1 |
| E11 | Multi-tenant SaaS | 3 | P2 |
| E12 | Peer network (optional) | 3 | P3 |
| E13 | External integrations | 34 | P3 |
---
## E1 — Campaign & role model
### Stories
| ID | Story | Points |
|----|-------|--------|
| E1-1 | As an operator, I can mark a mailbox as primary or satellite | 3 |
| E1-2 | As an operator, I can create a warmup campaign for a primary | 5 |
| E1-3 | As an operator, I can assign/remove satellites from a campaign | 3 |
| E1-4 | As an operator, I can run multiple campaigns for different primaries | 5 |
| E1-5 | As a developer, migrate existing Inbox rows to new schema | 3 |
**Integration:** Prisma migration + `/api/campaigns` routes
---
## E2 — Recipe engine
### Stories
| ID | Story | Points |
|----|-------|--------|
| E2-1 | As an operator, I can select Grow recipe with 30-day duration | 5 |
| E2-2 | As an operator, I can select Flat recipe | 3 |
| E2-3 | As an operator, I can select Randomized recipe | 5 |
| E2-4 | As an expert, I can define Custom per-day schedule | 8 |
| E2-5 | As an operator, I can preview ramp chart before starting | 3 |
| E2-6 | System enforces min 1, max 50 emails/day | 2 |
| E2-7 | System enforces 48h +20% volume cap | 5 |
**Integration:** `packages/recipe-engine` or `src/services/recipe.service.ts`
---
## E3 — Campaign dispatcher
### Stories
| ID | Story | Points |
|----|-------|--------|
| E3-1 | Satellites send only to assigned primary | 5 |
| E3-2 | Primary replies only to assigned satellites | 5 |
| E3-3 | Sends respect daily schedule from recipe | 5 |
| E3-4 | Sends distributed with jitter in send window | 5 |
| E3-5 | Campaign auto-completes after durationDays | 3 |
| E3-6 | Maintenance mode at 20% volume post-campaign | 5 |
**Integration:** Replace `dispatcher.job.ts` with campaign-aware version
---
## E4 — Reply rate engine
### Stories
| ID | Story | Points |
|----|-------|--------|
| E4-1 | Operator sets reply rate 30% (default) | 2 |
| E4-2 | System caps reply rate at 45% | 1 |
| E4-3 | Rescuer samples replies probabilistically | 8 |
| E4-4 | Non-replied messages still rescued and flagged | 3 |
| E4-5 | Dashboard shows reply rate actual vs target | 3 |
---
## E5 — Statistics & reporting
### Stories
| ID | Story | Points |
|----|-------|--------|
| E5-1 | API returns today's planned vs actual sends | 5 |
| E5-2 | API returns daily time series for 30 days | 5 |
| E5-3 | API returns spam detected/rescued counts | 3 |
| E5-4 | API returns inbox placement rate | 5 |
| E5-5 | Nightly rollup job materializes DailyStat | 5 |
| E5-6 | Workspace overview endpoint for all primaries | 5 |
---
## E6 — AI content safety
### Stories
| ID | Story | Points |
|----|-------|--------|
| E6-1 | Validator rejects bracket placeholders | 3 |
| E6-2 | Validator rejects tier-1 spam words | 3 |
| E6-3 | Auto-regenerate up to 3 times on failure | 3 |
| E6-4 | Mailbox profile supplies real name/company | 3 |
| E6-5 | Plain text only, no links in warmup body | 2 |
---
## E7 — Spam rescue v2
### Stories
| ID | Story | Points |
|----|-------|--------|
| E7-1 | Match spam UID to single WarmupLog | 5 |
| E7-2 | Track placement inbox vs spam | 3 |
| E7-3 | Auto-discover spam folder per provider | 5 |
| E7-4 | Auto-pause campaign on high spam rate | 5 |
---
## E8 — Web dashboard
### Stories
| ID | Story | Points |
|----|-------|--------|
| E8-1 | Dashboard shows all active campaigns | 5 |
| E8-2 | 4-step campaign wizard | 8 |
| E8-3 | Campaign detail with charts | 8 |
| E8-4 | Add mailbox with provider presets | 5 |
| E8-5 | Connection test from UI | 3 |
| E8-6 | Global activity log view | 3 |
---
## Integration breakdown (build order)
```mermaid
flowchart TD
E1[E1 Campaign model] --> E2[E2 Recipe engine]
E2 --> E3[E3 Dispatcher]
E1 --> E4[E4 Reply rate]
E3 --> E5[E5 Statistics]
E3 --> E6[E6 AI validator]
E4 --> E7[E7 Spam rescue v2]
E5 --> E8[E8 Web UI]
E6 --> E8
E7 --> E8
```
## Suggested first sprint (2 weeks)
1. E1-1, E1-2, E1-3 (campaign CRUD + roles)
2. E2-1, E2-6 (Grow recipe + validation)
3. E6-1 (placeholder validator)
**Sprint goal:** Create FillCare campaign via API; preview Grow schedule; no sends yet.
## Story point scale
| Points | Meaning |
|--------|---------|
| 12 | Few hours |
| 3 | Half day |
| 5 | 1 day |
| 8 | 23 days |
## Backlog hygiene
- Every story links to spec doc section
- Acceptance criteria required before sprint commit
- Demo: FillCare primary visible in stats after each epic