From cdb097c5b39a3b02c522acc39f8f54b1d038299f Mon Sep 17 00:00:00 2001 From: Lucas Berger Date: Sun, 7 Jun 2026 18:02:53 -0400 Subject: [PATCH] docs(03): record Gate 2 live-verification results (2026-06-07) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A1 (OIDC login → app), D1/D4/D5 (create/edit/delete round-trips), D6 (412 conflict), and /health-over-tunnel verified live this session via operator browser testing + outbox evidence. Remaining: A2/A3 + D2/D3 (desktop, quick), B (iOS device, load-bearing), C (SSE — Phase 4 entry gate per D-14). --- .../03-GATE2-RESULTS.md | 60 +++++++++++-------- 1 file changed, 36 insertions(+), 24 deletions(-) diff --git a/.planning/phases/03-event-write-back-pwa-install/03-GATE2-RESULTS.md b/.planning/phases/03-event-write-back-pwa-install/03-GATE2-RESULTS.md index 77b49ec..2d9a562 100644 --- a/.planning/phases/03-event-write-back-pwa-install/03-GATE2-RESULTS.md +++ b/.planning/phases/03-event-write-back-pwa-install/03-GATE2-RESULTS.md @@ -4,11 +4,20 @@ | Field | Value | |--------------|---------------------------------------------------------| -| Deploy URL | TBD — operator must configure (see Operator Setup below)| -| Build SHA | 40dfbb4 | -| Build date | 2026-06-05T22:50:16Z | -| PWA build | CLEAN — 1818 modules, dist/sw.js + workbox generated | -| API build | CLEAN — tsc passed, no errors | +| Deploy URL | LIVE via Pangolin/Newt (operator domain) — confirmed reachable; real Authelia OIDC login working 2026-06-07 | +| Build SHA | 86069b8 (2026-06-07 live bring-up + write-path fixes) | +| Build date | 2026-06-07 | +| PWA build | CLEAN — dist/sw.js + workbox generated; 140/140 tests | +| API build | CLEAN — tsc passed; 102/102 tests | + +> **2026-06-07 live verification note.** Gate 2 was executed live against the running +> Docker stack through Pangolin/Newt (Mode A). Several blocker bugs were found and fixed +> during this session (see commits): newt MTU blackhole, OIDC state-cookie churn, event +> write-path timezone + calendar identity, missing calendars join (edit/delete 503), +> delete cache-reconciliation, post-write refetch race, and a calendar remount flash. +> Rows verified below were confirmed via operator browser testing + backend evidence +> (calendar_outbox rows reaching `done` against caldav.fastmail.com). playwright-cli is +> unavailable in this WSL2 env, so desktop rows were operator-driven, not automated. --- @@ -118,9 +127,9 @@ Mark each row PASS or FAIL and add notes. On failure, apply the indicated remedy | # | Ref | Check | Result | Notes | |---|-----|-------|--------|-------| -| A1 | AUTH-01 | Open `https://familysync-dev.DOMAIN` → redirects to Authelia → login completes → land on the app with name, color, and at least one cached event | [ ] PENDING — operator | | -| A2 | AUTH-02 | Fully close + reopen browser → revisit the URL → no re-login prompted (session persists) | [ ] PENDING — operator | | -| A3 | AUTH-03 | Second member logs in on a separate device → distinct stable color assigned (different from first member's color) | [ ] PENDING — operator/device | | +| A1 | AUTH-01 | Open `https://familysync-dev.DOMAIN` → redirects to Authelia → login completes → land on the app with name, color, and at least one cached event | ✅ PASS (2026-06-07) | Real Authelia OIDC login lands on the calendar; name (email claim), assigned color, and cached events render. Name self-heals to full name once Authelia emits name/preferred_username (see backlog/memory). | +| A2 | AUTH-02 | Fully close + reopen browser → revisit the URL → no re-login prompted (session persists) | [ ] PENDING — operator | Refresh-token session wired (offline_access). Operator must confirm across a full browser restart within the session lifespan. | +| A3 | AUTH-03 | Second member logs in on a separate device → distinct stable color assigned (different from first member's color) | [ ] PENDING — operator/device | Only one real member (id=2, color #E8734A) has logged in so far. Needs the second member on their device. | ### Part B — iOS PWA Standalone Login (Task 2) — LOAD-BEARING CHECK @@ -157,12 +166,12 @@ curl -N -H "Cookie: oidc-auth=" https://familysync-dev.DOMAIN/api/sse/hea | # | Ref | Check | Result | Notes | |---|-----|-------|--------|-------| -| D1 | CAL-04 | Create a timed event → "Syncing…" toast → "Saved" toast → event appears in native Fastmail app on next sync | [ ] PENDING — operator | | -| D2 | CAL-07 | Create an all-day event → same Syncing→Saved flow → appears in Fastmail | [ ] PENDING — operator | | -| D3 | CAL-04 | Create a weekly recurring event → appears in Fastmail | [ ] PENDING — operator | | -| D4 | CAL-05 | Edit an existing event's title and time → Syncing→Saved → change persists in Fastmail | [ ] PENDING — operator | | -| D5 | CAL-06 | Delete an event via the two-tap confirmation dialog → Syncing→Saved → event disappears from all views on next sync | [ ] PENDING — operator | | -| D6 | D-08 | (Optional) Trigger a 412 conflict by editing the same event in Fastmail first → conflict toast appears in the app → calendar re-fetches | [ ] PENDING — operator | Optional | +| D1 | CAL-04 | Create a timed event → "Syncing…" toast → "Saved" toast → event appears in native Fastmail app on next sync | ✅ PASS (2026-06-07) | Timed create round-trips to caldav.fastmail.com (outbox rows reach `done`); appears in the app. Timezone fix applied (was 4h off). | +| D2 | CAL-07 | Create an all-day event → same Syncing→Saved flow → appears in Fastmail | [ ] PENDING — operator | Timed create path verified; all-day not yet exercised live. Quick confirm. | +| D3 | CAL-04 | Create a weekly recurring event → appears in Fastmail | [ ] PENDING — operator | Not yet exercised live. Quick confirm. | +| D4 | CAL-05 | Edit an existing event's title and time → Syncing→Saved → change persists in Fastmail | ✅ PASS (2026-06-07) | Edit/move confirmed working; update outbox rows reach `done`; post-write refetch race fixed so the change shows without manual refresh. | +| D5 | CAL-06 | Delete an event via the two-tap confirmation dialog → Syncing→Saved → event disappears from all views on next sync | ✅ PASS (2026-06-07) | Delete confirmed working; delete cache-reconciliation fix means the event leaves the cache/UI (was lingering as a ghost). | +| D6 | D-08 | (Optional) Trigger a 412 conflict by editing the same event in Fastmail first → conflict toast appears in the app → calendar re-fetches | ✅ PASS (2026-06-07) | Observed live: a stale-etag update produced `412 conflict` (outbox id=7) and the "This event changed elsewhere" conflict toast; calendar re-syncs. | --- @@ -171,9 +180,9 @@ curl -N -H "Cookie: oidc-auth=" https://familysync-dev.DOMAIN/api/sse/hea Record the curl result through the public URL here: ``` -URL tested: https://familysync-dev.DOMAIN/health -Result: [ ] PENDING — operator -Response body: +URL tested: https:///health (via Pangolin/Newt) + http://localhost:3000/health +Result: ✅ PASS (2026-06-07) — app reachable through the tunnel; real OIDC login completed +Response body: {"ok":true,"db":"up"} ``` --- @@ -182,13 +191,16 @@ Response body: | Section | Status | |---------|--------| -| Production builds (PWA + API) | CLEAN (automated, 2026-06-05) | -| Operator infra setup | PENDING | -| A — Auth / session / colors | PENDING | -| B — iOS standalone login (load-bearing) | PENDING | -| C — SSE smoke test | PENDING | -| D — Fastmail write round-trips | PENDING | +| Production builds (PWA + API) | ✅ CLEAN (2026-06-07; 102 API + 140 PWA tests) | +| Operator infra setup | ✅ DONE (Authelia client + Pangolin/Newt live; OIDC login working) | +| A — Auth / session / colors | 🟡 A1 PASS; A2 (session persist) + A3 (2nd member color) PENDING | +| B — iOS standalone login (load-bearing) | ⏳ PENDING — device-only (operator's iPhone) | +| C — SSE smoke test | ⏳ PENDING — operator; this is the Phase 4 ENTRY gate (D-14), not a Phase 3 deliverable | +| D — Fastmail write round-trips | 🟡 D1/D4/D5/D6 PASS; D2 (all-day) + D3 (recurring) PENDING quick confirm | Gate 2 is complete when all rows are PASS. Record final status here: -**Gate 2 outcome:** [ ] PENDING +**Gate 2 outcome:** 🟡 PARTIAL — core auth + create/edit/delete/conflict round-trips verified live (2026-06-07). +Remaining are device/operator-only rows: A2, A3, D2, D3 (desktop, quick), and B (iOS device). +C (SSE) is the Phase 4 entry gate and may be carried forward per D-14. Phase 03 code is complete +and live-verified; final closure awaits the operator/device rows above.