xtablo-source/.planning/phases/11-individual-planning/11-VERIFICATION.md
2026-05-16 09:07:50 +02:00

3.9 KiB

phase status verified_at
11-individual-planning passed 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:

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:

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.