Merge Sign-ups into Customers Roster
Ask (operator, from Task 10379): the Trial plan's "Subscribers" count includes orgs the operator cannot find in Customers: unsubmitted sign-up drafts (`signup.drafts()`, hidden by `signup.not_a_draft()` in `apps/api/app/routes/customer_roster.py::_org_filters`) and email sign-ups with no org yet (the separate Sign-ups tab). Make every unfinished sign-up visible and actionable in the one Customers roster. Do not add new buttons; reuse existing patterns (roster row, row menu, the customer's edit-in-place page).
Requirements:
1. Merge the Sign-ups tab into the Customers roster. Each unfinished sign-up (email-only or draft org) is a row with status "Sign-up" and a Stage column (Verify email → Password → Profile → Plan → Card → Submitted → Approved; `signup_draft.STEPS`). A status filter value shows sign-ups alone. Remove the separate Sign-ups tab.
2. The plan "Subscribers" count (`billing_plans._members`) and the Customers plan filter count the same orgs, so the count always matches the list. Soft-deleted orgs stay excluded.
3. An operator can complete a sign-up on the user's behalf: verify the email (new operator-only route, audited with the actor), fill the required profile/org data by editing the customer, and submit and approve the org.
4. An operator can archive an unfinished sign-up by editing the customer's data (the same soft-delete/archive as any customer), or delete it outright, from the existing row/detail menus.
5. Advancing a stage is an ordinary edit of the customer, not a separate "advance" function.
Out of scope: billing/Stripe changes (Task 10379 fixed the hostings-only plan push); the tenant-side sign-up flow's UI.
Done means: on a seeded stack, an email-only sign-up and a draft org both appear in Customers with their Stage; the Trial count equals the Customers list filtered by Trial; an operator verifies the email, fills the profile, approves, and archives or deletes a sign-up through the UI; every action is audited; the security-sensitive verify route passes the security review lane; `./dc check quick` and the changed-area tests are green.
Subtasks
- [business_analysis] Merge Sign-ups into Customers Roster PRD settled: email-only and draft sign-ups become "Sign-up" rows in Customers with a Stage column on every row; the Sign-ups tab is removed. Operator verify creates the org. Subscribers count = roster plan filter. Delete only, no Archive button. Terms gate at first login holds use and billing. Draft purge retired. 18 criteria. Memory: none applied.
- [architecture] Merge Sign-ups into Customers Roster 4 children: C1 roster rows/Stage/counted-plan (count=list), C2 operator verify/edit/approve-draft/delete (after C1), C3 terms-gate session claim + billing hold, C4 retire purge. Operator chose chosen-plan, approve-does-both, skip-Password, card-later. Memory: none applied.
- [plan] Merge Sign-ups into Customers Roster Split along the Architect's C1–C4 boundaries into 4 coders across 2 phases. Phase 1: roster (10410) and terms gate (10411). Phase 2: operator actions (10412) and purge retirement (10413). The latter has a migration-wave edge. Fixed the critic's findings: resend audit added, draft dev oracles made best-effort plus a re-run in 10412. Memory: none applied.
- Show sign-ups in Customers roster Customers roster now lists email-only and draft sign-ups (status Sign-up) with a Stage column on every row and a Sign-up filter. The Sign-ups tab is removed. Subscribers count matches the plan-filtered list, and resend is audited. Quick gate and changed-area tests green; review lane passed; visual check at desktop and 390px OK. PR #7062 queued to the merge lane after a rebase. Memory: none applied.
- Let operators complete or delete sign-ups Operators can now verify, edit in place, approve and delete unfinished sign-ups from Customers, all audited. PR #7065 merged (491def8be); quick gate and review lanes green, Jaah Deploy succeeded, dev AC1/2/5/11 pass. Follow-up draft #10461. Memory: used mem-25288; proposed 1 gotcha.
- Retire the sign-up draft purge
- [finish] Merge Sign-ups into Customers Roster
Activity
- Created
- Updated
- Runner started
- Ready
- Ready
- Ready
- Runner started
- Awaiting response
- Awaiting response
- Awaiting response
- Awaiting response
- Awaiting response
- Runner resumed
- Awaiting response
- Awaiting response
- Awaiting response
- Awaiting response
- Awaiting response
- Runner resumed
- Awaiting response
- Awaiting response
- Runner resumed
- Runner ended (done)
- Runner started
- Awaiting response
- Awaiting response
- Awaiting response
- Awaiting response
- Awaiting response
- Runner resumed
- Runner ended (done)
- Runner started
- Draft
- Draft
- Draft
- Draft
- Ready
- Ready
- Ready
- Ready
- Runner ended (done)
- Runner started
- Runner ended (done)
- Runner started
- Runner started
- Runner ended (done)