Appearance
Historical snapshot archived 2026-09-25. This records an earlier review or plan, not current implementation or live ticket state. For current work, follow root AGENTS.md, the relevant BloxClips skill, and owning repository source/tests. Preserve approved decisions as evidence; verify their present authority before acting.
MVP Audit Matrix
Yes in MVP Blocker means the requirement prevents a safe first private rollout. Status counts are calculated from the 41 rows below.
| ID | Area | Requirement | FE | BE | DB | Integration | Status | Priority | MVP Blocker | Evidence | Proposed Issues |
|---|---|---|---|---|---|---|---|---|---|---|---|
| AUTH-01 | Access | Working creator sign-in/session | Yes | Yes | Yes | Google/Discord/Whop | COMPLETE | P1 | No | auth.ts, useDashboardSession.ts | — |
| AUTH-02 | Access | Advertised Whop sign-in | Yes | Yes | Yes | Whop OAuth/OIDC | COMPLETE | P1 | No | PKCE callback, signed ID token, encrypted account tokens, tests | — |
| ACCESS-01 | Access | Restrict private cohort/campaigns | No | No | No | — | MISSING | P0 | Yes | campaign list/submission have no grant | ACCESS-001 |
| CAMP-01 | Campaign | Draft/create/edit | Yes | Yes | Yes | — | MOSTLY COMPLETE | P1 | No | admin.ts campaign routes | CAMP-001 |
| CAMP-02 | Campaign | Pause/resume/end transitions | Yes | Partial | Partial | — | PARTIAL | P0 | Yes | generic mutable update | CAMP-001, RBAC-002 |
| FUND-01 | Funding | Create Whop invoice | No | No | No | No | MISSING | P0 | Yes | no invoice code/model | FUND-001, FUND-002 |
| FUND-02 | Funding | Verify/dedupe invoice payment | No | No | No | Chat only | MISSING | P0 | Yes | Whop webhook is chat-only | FUND-001, FUND-003 |
| FUND-03 | Funding | Campaign funding attribution/balance | No | No | No | No | MISSING | P0 | Yes | mutable Campaign.budget only | FUND-001, EARN-001 |
| FUND-04 | Funding | Funded-only activation | No | No | No | No | MISSING | P0 | Yes | launch checks no funding | FUND-004 |
| SUB-01 | Submission | TikTok/Instagram/YouTube create path | Yes | Yes | Yes | Yes | COMPLETE | P1 | No | SubmitVideoModal, submissions.ts | — |
| SUB-02 | Submission | Lifecycle/platform/owner validation | Yes | Yes | Yes | Yes | MOSTLY COMPLETE | P1 | No | backend state/account checks | ACCESS-001 |
| SUB-03 | Submission | Canonical duplicate protection | Yes | Yes | Yes | Yes | COMPLETE | P1 | No | unique platform video key | — |
| REV-01 | Review | Paginated/filterable review queue | Yes | Yes | Yes | — | MOSTLY COMPLETE | P1 | No | /submissions/review | REV-003 |
| REV-02 | Review | Reviewer/reason/history visible | No | Partial | Audit JSON | — | PARTIAL | P1 | No | explicit audit only | REV-001 |
| REV-03 | Review | Atomic/idempotent moderation | No | No | No | — | BROKEN | P0 | Yes | check/update side effects race | REV-002 |
| TRACK-01 | Tracking | Status-independent lifecycle-bounded scheduling | — | Partial | Partial | — | PARTIAL | P0 | Yes | predicate includes all statuses as intended; moderation side effects and acceptedAt-based expiry conflict with policy | TRACK-001 |
| TRACK-02 | Tracking | Durable jobs/leases/reconciliation | — | Yes | Yes | Yes | MOSTLY COMPLETE | P0 | No | ScrapeJob, worker CAS | TRACK-002 |
| TRACK-03 | Tracking | Production worker continuously runs | — | Config only | Yes | Unknown | UNKNOWN | P0 | Yes | no deployment/process config | TRACK-002 |
| METRIC-01 | Metrics | Historical views/likes/comments | Yes | Yes | Yes | Yes | MOSTLY COMPLETE | P1 | No | ViewSnapshot | METRIC-001 |
| METRIC-02 | Metrics | Shares/saves/followers history | No | Normalized only | No | Partial | PARTIAL | P1 | No | worker result discarded | METRIC-001 |
| METRIC-03 | Metrics | Regression/correction provenance | No | No | No | — | PARTIAL | P1 | No | clamp accepts lower totals | METRIC-001 |
| RATE-01 | Rates | Explicit precise CPM and RPM | Partial | No | No | — | MISSING | P0 | Yes | strings/Float/fee burn | RATE-001 |
| RATE-02 | Rates | Deterministic versioned highest RPM | No | Submission override only | No | — | MISSING | P0 | Yes | owner rule not implemented | RATE-002, GROUP-002 |
| EARN-01 | Earnings | Immutable attributable accrual | No | No | No | — | MISSING | P0 | Yes | mutable recomputation | EARN-001 |
| EARN-02 | Earnings | Atomic CPM depletion/concurrency | Partial | No | No | — | BROKEN | P0 | Yes | approval/payout rescrape races | EARN-002 |
| GROUP-01 | Groups | Campaign-specific CRUD/membership | Yes | Yes | Yes | — | COMPLETE | P1 | No | group domain/routes/UI | — |
| GROUP-02 | Groups | Manual/automatic archive | Yes | Yes | Yes | — | COMPLETE | P1 | No | lifecycle helper/tests | — |
| GROUP-03 | Groups | Group RPM applied to earnings | No | No | No | — | MISSING | P0 | Yes | no RPM field/use | GROUP-001, GROUP-002 |
| GROUP-04 | Groups | Group/member analytics | No | No | No | — | MISSING | P1 | No | no aggregate endpoint/UI | GROUP-003 |
| PAY-01 | Payout | Request/review/delta lifecycle | Yes | Yes | Yes | Legacy rails | PARTIAL | P0 | No | payout routes/items | PAY-004 |
| PAY-02 | Payout | Whop company-to-user transfer | No | No | No | No | MISSING | P0 | Yes | dispatcher has no Whop | PAY-001, PAY-002 |
| PAY-03 | Payout | One semantic idempotent payout | No | No | Partial | No | BROKEN | P0 | Yes | non-atomic send, rail gaps | PAY-002, PAY-004 |
| PAY-04 | Payout | Unknown-state reconciliation | No | No | No | No | MISSING | P0 | Yes | retry follows timeout | PAY-003 |
| PAY-05 | Payout | Creator campaign/status history | Partial | Partial | Indirect | — | PARTIAL | P1 | No | summary-only /me | ANALYTICS-001 |
| RBAC-01 | RBAC | Staff tier plus custom roles/permissions UI | Partial | Partial | Fixed tiers | Whop membership | PARTIAL | P0 | Yes | STAFF boundary exists; custom permissions/management do not | RBAC-001, RBAC-003 |
| RBAC-02 | RBAC | Backend finance/action permissions | Partial | Partial | Fixed tiers | Whop membership | PARTIAL | P0 | Yes | staff excluded from finance; every admin remains finance-enabled | RBAC-002 |
| AUDIT-01 | Audit | Reliable action/financial trail | No | Partial | Yes | — | PARTIAL | P0 | Yes | fire-and-forget legacy writes | AUDIT-001 |
| FRAUD-01 | Fraud | Risk signal, hold, override trail | Partial | Partial | Badge string | — | PARTIAL | P0 | Yes | bulk approve ignores badges | FRAUD-001 |
| ANALYTICS-01 | Analytics | Correct creator financial analytics | Yes | No | Mixed legacy/delta | — | BROKEN | P1 | No | stats.ts legacy/double count | ANALYTICS-001 |
| ANALYTICS-02 | Analytics | Staff/campaign/group scope | Partial | Partial | Partial | — | PARTIAL | P1 | No | group and operational aggregates absent; client view deferred | ANALYTICS-002 |
| CHAT-01 | Support | Creator/staff Whop chat | Yes | Yes | Identity | Whop | MOSTLY COMPLETE | P1 | No | chat routes/UI/tests | runtime verification |