diff --git a/docs/superpowers/plans/2026-08-25-ephemeral-passes-and-multi-claim-events.md b/docs/superpowers/plans/2026-08-25-ephemeral-passes-and-multi-claim-events.md index 85eed37..5e49c60 100644 --- a/docs/superpowers/plans/2026-08-25-ephemeral-passes-and-multi-claim-events.md +++ b/docs/superpowers/plans/2026-08-25-ephemeral-passes-and-multi-claim-events.md @@ -49,7 +49,7 @@ tracking. - Produces: `GET /pass?token=...` endpoint and updated Hand-Off Modal in `SessionsPage.tsx` -- [ ] **Step 1: Write the failing test for `GET /pass`** +- [x] **Step 1: Write the failing test for `GET /pass`** ```typescript // in server/main.test.ts @@ -95,22 +95,22 @@ Deno.test("GET /pass - Ephemeral Magic Link 1-Click Redemption", async (t) => { }); ``` -- [ ] **Step 2: Run test to verify it fails** Run: +- [x] **Step 2: Run test to verify it fails** Run: `deno test server/main.test.ts --filter "Ephemeral Magic Link"` Expected: FAIL (404 Not Found on `/pass`) -- [ ] **Step 3: Implement `GET /pass` in `server/main.ts`** Extract token from +- [x] **Step 3: Implement `GET /pass` in `server/main.ts`** Extract token from `?token=...`, validate against Valkey/DB, set cookie with `getCookieDomain()`, resolve target app domain if scoped to a specific app, and return `c.redirect(targetUrl)`. -- [ ] **Step 4: Update `ui/components/SessionsPage.tsx`** Add the **"1-Click +- [x] **Step 4: Update `ui/components/SessionsPage.tsx`** Add the **"1-Click Magic Link"** copy card tab alongside the CLI and cURL header tabs. -- [ ] **Step 5: Run tests to verify they pass** Run: `deno task test` Expected: +- [x] **Step 5: Run tests to verify they pass** Run: `deno task test` Expected: PASS (All tests passing) -- [ ] **Step 6: Commit and Push** +- [x] **Step 6: Commit and Push** ```bash git add server/main.ts server/main.test.ts ui/components/SessionsPage.tsx @@ -143,7 +143,7 @@ git push origin main && git push gitea main `guest__` session - `GET /join/:slug`: CLI 1-liner (`?format=env` or `?format=json`) -- [ ] **Step 1: Write the failing tests for Event creation and redemption** +- [x] **Step 1: Write the failing tests for Event creation and redemption** ```typescript Deno.test("Multi-Claim Event Passes & Join Endpoints", async (t) => { @@ -159,16 +159,16 @@ Deno.test("Multi-Claim Event Passes & Join Endpoints", async (t) => { }); ``` -- [ ] **Step 2: Run test to verify it fails** Run: +- [x] **Step 2: Run test to verify it fails** Run: `deno test server/main.test.ts --filter "Multi-Claim Event"` Expected: FAIL -- [ ] **Step 3: Add `event_passes` schema in `server/db.ts`** Include columns: +- [x] **Step 3: Add `event_passes` schema in `server/db.ts`** Include columns: `id`, `slug`, `pin_code`, `name`, `app_id`, `role`, `max_seats`, `seats_claimed`, `lifespan_hours`, `created_by`, `is_active`, `expires_at`, `created_at`. -- [ ] **Step 4: Implement Event API routes in `server/main.ts` and SSR UI +- [x] **Step 4: Implement Event API routes in `server/main.ts` and SSR UI Pages** - Create `ui/components/EventJoinPage.tsx` for `/join` PIN code entry. - Create `ui/components/EventSplashPage.tsx` for `/e/:slug` 1-click workshop @@ -176,10 +176,10 @@ Deno.test("Multi-Claim Event Passes & Join Endpoints", async (t) => { - Implement `GET /join/:slug` returning `export AUTH_YES_TOKEN="..."` when `?format=env`. -- [ ] **Step 5: Run tests to verify they pass** Run: `deno task test` Expected: +- [x] **Step 5: Run tests to verify they pass** Run: `deno task test` Expected: PASS -- [ ] **Step 6: Commit and Push** +- [x] **Step 6: Commit and Push** ```bash git add server/db.ts server/main.ts ui/components/EventJoinPage.tsx ui/components/EventSplashPage.tsx server/main.test.ts @@ -207,7 +207,7 @@ git push origin main && git push gitea main - Event Management Deck in `SessionsPage.tsx` with live seat counter (`38 / 50`) and master kill switch -- [ ] **Step 1: Write failing tests for Event Kill-Switch & Extension** +- [x] **Step 1: Write failing tests for Event Kill-Switch & Extension** ```typescript Deno.test("Event Cockpit & Master Kill Switch", async (t) => { @@ -220,27 +220,27 @@ Deno.test("Event Cockpit & Master Kill Switch", async (t) => { }); ``` -- [ ] **Step 2: Run test to verify it fails** Run: +- [x] **Step 2: Run test to verify it fails** Run: `deno test server/main.test.ts --filter "Event Cockpit"` Expected: FAIL -- [ ] **Step 3: Implement `POST /api/events/:id/end` and - `POST /api/events/:id/extend` in `server/main.ts`** Fetch all session IDs +- [x] **Step 3: Implement `POST /api/events/:id/end` and + `POST /api/events/:id/extend` in `server/routes/events.ts`** Fetch all session IDs created under the event pass, delete them from Valkey and PostgreSQL, record in audit ledger, and mark event `is_active = false`. -- [ ] **Step 4: Update `ui/components/SessionsPage.tsx` with Event Cockpit +- [x] **Step 4: Update `ui/components/SessionsPage.tsx` with Event Cockpit Deck** Display active events with live progress bar (`Seats Claimed / Capacity`), PIN badge, copy links, `[+1h Extend]` and `[🔴 End Workshop & Revoke All]`. -- [ ] **Step 5: Run full quality gates** Run: +- [x] **Step 5: Run full quality gates** Run: `deno fmt && deno task lint && deno task check && deno task test` Expected: All pass. -- [ ] **Step 6: Commit and Push** +- [x] **Step 6: Commit and Push** ```bash -git add server/main.ts ui/components/SessionsPage.tsx ui/mod.ts server/main.test.ts +git add server/routes/events.ts ui/components/SessionsPage.tsx ui/mod.ts server/main.test.ts git commit -m "feat(cockpit): add live event metrics, seat roster, and master kill-switch" git push origin main && git push gitea main ```