# Milestone v2.0: Collaboration, Planning, and Social Sign-in

**Status:** SHIPPED 2026-05-16
**Phases:** 8-12
**Total Plans:** 18
**Source commit:** `58a9ce0`

## Overview

v2.0 added the collaboration and scheduling layer around tablos while keeping the Go + HTMX architecture: Google sign-in, one-level etapes for task organization, tablo-owned events, a personal planning agenda, and native persisted realtime discussions.

The milestone was closed after acknowledging 7 legacy/open artifact items from earlier phase UAT and verification records. Runtime v2.0 flows were kept as shipped; the acknowledged items are tracked in `STATE.md` and the archived audit.

## Phases

### Phase 8: Social Sign-in

**Goal:** Users can sign in with Google while Xtablo keeps owning user accounts and sessions; Apple sign-in is disabled and hidden for now.
**Plans:** 5
**Requirements:** AUTH-08, AUTH-09, AUTH-10, AUTH-11, AUTH-12, AUTH-13

Plans:

- [x] 08-01: Social identity schema foundation
- [x] 08-02: Google OAuth/OIDC sign-in flow
- [x] 08-03: Apple sign-in implementation, later disabled by UAT scope change
- [x] 08-04: Social sign-in controls and missing-config states
- [x] 08-05: Account provider visibility and final docs/regression coverage

Outcome:

- Google social sign-in starts from auth pages, validates callback state, links by provider subject or verified email, and issues existing Xtablo sessions.
- Apple sign-in was intentionally disabled after UAT; routes are not mounted and controls are hidden.
- Provider configuration is documented without committing secrets.

### Phase 9: Etapes

**Goal:** A user can organize tasks under one-level etapes inside a tablo while preserving existing task status and ordering behavior.
**Plans:** 4
**Requirements:** ETAPE-01, ETAPE-02, ETAPE-03, ETAPE-04, ETAPE-05, ETAPE-06

Plans:

- [x] 09-01: Etape create/filter/assigned-task slice
- [x] 09-02: Etape edit, delete-unassign, and reorder management
- [x] 09-03: Task assignment and filter-aware task loading
- [x] 09-04: Reorder preservation, count refresh fixes, and UAT closure

Outcome:

- Etapes are tablo-owned one-level wrappers; tasks can belong to zero or one etape.
- Deleting an etape unassigns its tasks instead of deleting them.
- Task assignment, filtering, and reorder behavior remain compatible with the existing kanban model.

### Phase 10: Events

**Goal:** A user can schedule events that belong to tablos, with the same authorization expectations as tasks and files.
**Plans:** 4
**Requirements:** EVENT-01, EVENT-02, EVENT-03, EVENT-04, EVENT-05

Plans:

- [x] 10-01: Event creation and month calendar listing
- [x] 10-02: Inline edit, update validation, and hard delete
- [x] 10-03: Month navigation, day prefill, overflow display, and planning query
- [x] 10-04: Final regression coverage, full backend verification, and browser UAT

Outcome:

- Tablo events support title, date, start time, optional end time, location, and description.
- Invalid end times are rejected by handler validation and database constraint.
- Event access follows tablo ownership; inaccessible events cannot be read or mutated.

### Phase 11: Individual Planning

**Goal:** Each authenticated user can open a personal planning view that aggregates their scheduled events across tablos.
**Plans:** 2
**Requirements:** PLAN-01, PLAN-02, PLAN-03, PLAN-04

Plans:

- [x] 11-01: Protected planning agenda with owned cross-tablo event aggregation
- [x] 11-02: Full verification and UAT-approved 14-day planning agenda

Outcome:

- `/planning` is authenticated and lists the user's owned events chronologically.
- Event rows link back to their source tablo event context.
- Empty state, invalid-date fallback, and 14-day navigation were verified.

### Phase 12: Native Tablo Chat

**Goal:** Each tablo has a native persisted discussion stream with real-time updates and no managed chat/realtime provider.
**Plans:** 3
**Requirements:** CHAT-01, CHAT-02, CHAT-03, CHAT-04, CHAT-05, CHAT-06

Plans:

- [x] 12-01: Discussion schema, history, posting, validation, and templates
- [x] 12-02: Persistent unread state and dashboard/discussion read paths
- [x] 12-03: Native realtime discussion delivery with Go-owned SSE receive and HTMX POST send

Outcome:

- Discussion history and sends are persisted in Postgres with ownership, CSRF, escaping, and body length validation.
- Realtime receive uses local Go SSE infrastructure; no managed chat or realtime provider was added.
- Duplicate sender rows and composer reset behavior were fixed during UAT.

## Milestone Summary

**Key accomplishments:**

- Added Google social sign-in while preserving Xtablo-owned sessions and disabling Apple sign-in for the shipped scope.
- Added one-level etapes for organizing tasks without changing the kanban status model.
- Added tablo-owned events and a personal planning agenda that aggregates owned events across tablos.
- Added native persisted realtime discussions using Postgres and Go-owned SSE.
- Kept the milestone inside the low-dependency Go + HTMX architecture.

**Known deferred items at close:** 7 acknowledged open artifact items. See `STATE.md` Deferred Items and `v2.0-MILESTONE-AUDIT.md`.

**Technical debt carried forward:**

- Phase 8, 9, and 12 lacked strict `*-VERIFICATION.md` aggregation artifacts in the archived milestone audit.
- Phase 11 validation remained draft even though `11-VERIFICATION.md` passed.
- Earlier v1 UAT/verification records still contain acknowledged human-needed or partial statuses.

---

For current project status, see `.planning/ROADMAP.md`.
