diff --git a/.planning/ROADMAP.md b/.planning/ROADMAP.md index f551d4b..9b15065 100644 --- a/.planning/ROADMAP.md +++ b/.planning/ROADMAP.md @@ -15,7 +15,7 @@ | 8 | Social Sign-in | Google sign-in creates/links local users and issues existing Xtablo sessions; Apple sign-in is disabled | AUTH-08..13 | | 9 | Etapes | Tasks can be grouped under one-level etapes without breaking the kanban model | ETAPE-01..06 | | 10 | 4/4 | Complete | 2026-05-16 | -| 11 | 2/2 | Complete | 2026-05-16 | +| 11 | 2/2 | Complete | 2026-05-16 | | 12 | Native Tablo Chat | Each tablo has persisted discussion with real-time delivery and no managed chat provider | CHAT-01..06 | --- diff --git a/.planning/STATE.md b/.planning/STATE.md index 2ccbcb5..9119257 100644 --- a/.planning/STATE.md +++ b/.planning/STATE.md @@ -2,12 +2,12 @@ gsd_state_version: 1.0 milestone: v2.0 milestone_name: Collaboration, planning, and social sign-in -status: verifying +status: ready_to_plan last_updated: "2026-05-16T07:05:52.182Z" last_activity: 2026-05-16 progress: total_phases: 5 - completed_phases: 4 + completed_phases: 5 total_plans: 15 completed_plans: 15 percent: 100 @@ -28,9 +28,9 @@ See: `.planning/PROJECT.md` (updated 2026-05-15) ## Current Position -Phase: 11 (Individual Planning) — EXECUTING -Plan: 2 of 2 -Status: Phase complete — ready for verification +Phase: 12 +Plan: Not started +Status: Ready to plan Last activity: 2026-05-16 Resume file: .planning/phases/11-individual-planning/11-01-PLAN.md diff --git a/.planning/phases/11-individual-planning/11-VERIFICATION.md b/.planning/phases/11-individual-planning/11-VERIFICATION.md new file mode 100644 index 0000000..73c2f5a --- /dev/null +++ b/.planning/phases/11-individual-planning/11-VERIFICATION.md @@ -0,0 +1,77 @@ +--- +phase: 11-individual-planning +status: passed +verified_at: 2026-05-16T07:08:00Z +--- + +# Phase 11 Verification + +## Result + +PASS + +Phase 11 delivers a protected personal planning page where an authenticated user can browse their scheduled events across owned tablos in a fixed 14-day agenda, navigate previous/today/next windows, see useful row context including event dates, and jump back to the source tablo Events tab. + +## Requirements Coverage + +| Requirement | Status | Evidence | +|-------------|--------|----------| +| PLAN-01 | PASS | `/planning` is mounted inside `auth.RequireAuth`; `TestPlanningRequiresAuth` verifies unauthenticated redirect to `/login`; browser UAT approved authenticated layout rendering. | +| PLAN-02 | PASS | `PlanningPageHandler` calls `ListUserEventsRange` with authenticated `user.ID`; `TestPlanningListsOwnedEventsChronologically` verifies cross-tablo chronological event order and visible row fields. | +| PLAN-03 | PASS | Planning event URLs use `/tablos/{id}/events?month=YYYY-MM` from each event date; response assertions cover source links for multiple tablos. | +| PLAN-04 | PASS | `TestPlanningDefaultsToUpcomingFourteenDays`, `TestPlanningNavigationLinks`, `TestPlanningEmptyState`, and `TestPlanningInvalidStartFallsBackToToday` cover default range, fixed-window navigation, empty state, and invalid-date fallback. | + +## Success Criteria + +| Criterion | Status | Evidence | +|-----------|--------|----------| +| `/planning` is protected and renders only for authenticated users | PASS | Protected router group plus `TestPlanningRequiresAuth`. | +| Planning page lists the user's accessible events across tablos in chronological order | PASS | `ListUserEventsRange` SQL orders by date, start time, title; planning response-order tests cover the rendered page. | +| Each listed event links back to its tablo context | PASS | `PlanningEventURL` derives the tablo Events URL from `tablo_id` and `event_date`; tests assert generated links. | +| Empty state and date filtering/navigation work without a JS framework | PASS | Server-rendered templ page, normal links, and DB-backed tests for empty and navigation states. | +| Planning query does not leak events from inaccessible tablos | PASS | `ListUserEventsRange` filters through `tablos.user_id`; `TestPlanningDoesNotLeakOtherUsersEvents` and `TestListUserEventsRangeReturnsOnlyOwnedTablos` verify isolation. | + +## Automated Verification + +Passed: + +```bash +cd backend && just generate && TEST_DATABASE_URL='postgres://xtablo:xtablo@localhost:5432/xtablo?sslmode=disable' go test ./... -count=1 && git diff --check +``` + +Additional focused checks passed during execution: + +```bash +cd backend && TEST_DATABASE_URL='postgres://xtablo:xtablo@localhost:5432/xtablo?sslmode=disable' go test ./internal/web -run 'TestPlanning' -count=1 +``` + +## Browser UAT + +Approved by user on 2026-05-16 after running the app locally at `/planning`. + +Manual checkpoint covered: + +- Unauthenticated `/planning` redirects to login +- Authenticated `/planning` renders inside the normal layout +- Default range is today through 13 days later +- Events from multiple owned tablos appear in one chronological agenda +- Rows show date, time, title, tablo title/color dot, and location when present +- Rows omit descriptions, edit/delete controls, grouped day headers, and calendar grids +- Previous 14 days, Today, and Next 14 days links work +- Empty ranges show the planned empty state +- Event links return to the source tablo Events tab + +## Code Review + +Passed advisory review with clean status: + +- `.planning/phases/11-individual-planning/11-REVIEW.md` + +## Gate Notes + +- Schema drift: clear (`drift_detected=false`). +- Codebase drift: non-blocking warning only. The SDK reported stale global codebase mapping metadata unrelated to Phase 11 source behavior and recommended a future map refresh. + +## Residual Risk + +No known Phase 11 implementation gaps. Visual regression coverage remains manual/browser-based because this repo does not yet have screenshot tests for templ pages.