diff --git a/SESSION-HANDOFF-NEXT.md b/SESSION-HANDOFF-NEXT.md index 7ac362d..686936a 100644 --- a/SESSION-HANDOFF-NEXT.md +++ b/SESSION-HANDOFF-NEXT.md @@ -161,3 +161,30 @@ The books are balanced. The tasks are accounted for. The vision for The Forge is Chronicler #79 — The Reconciler April 11, 2026 + +--- + +## Task #126 Update (Chronicler #80 — Frank, April 11, 2026, 18:05 UTC) + +**Status:** Core lifecycle handlers DEPLOYED to Command Center. Branch `task-126-lifecycle-handlers` merged to `main`. + +**Key discovery:** Policy correction from Michael — "We Don't Kick People Out." Awakened ($1) is lifetime. Cancellation/payment failure → demote to Awakened. Only chargebacks and refunds → hard ban (both with Trinity appeal process). + +**Code changes:** +- `customer.subscription.deleted` now demotes to Awakened via existing `downgradeToAwakened()` function (uses existing `lifetime` status + `is_lifetime=TRUE` — no schema changes, no downstream filter breakage) +- New `charge.refunded` case: hard ban with `appeal_eligible: true` in banned_users.notes +- `invoice.payment_failed` left alone — Stripe retry logic handles it +- Backup preserved: `/opt/arbiter-3.0/src/routes/stripe.js.backup-task126-20260411-180439` + +**Verified after deploy:** +- Service active, clean startup +- Discord Role Sync initialized +- Webhook endpoint reachable (HTTP 400 on unsigned, as expected) + +**Still needed for full Task #126 completion:** +1. Email notifications (post-launch polish — not a blocker) +2. Reconciliation cron (safety net — not a blocker) +3. **NEW:** Cancellation policy page on firefrostgaming.com (launch-adjacent, legally important) +4. **NEW:** Trinity Appeal procedure doc (can be rough-drafted before launch, refined after) +5. Update project instructions to document Trinity Core SSH access (was documented as unavailable) +