- The Go + HTMX stack handled new auth, planning, and realtime surfaces without introducing a JS framework or managed chat provider.
- DB-backed handler tests gave strong coverage for ownership, validation, and cross-tablo aggregation.
- UAT feedback during Phase 12 caught real browser behavior around duplicate rows and composer reset.
### What Was Inefficient
- Milestone close happened after v3.0 was already initialized, so archival had to preserve current v3 planning files instead of using the standard current-milestone deletion path.
- Some verification artifacts lagged behind shipped behavior, which made milestone audit status noisier than implementation state.
- Earlier v1 UAT/verification records still carry human-needed or partial statuses and should be cleaned separately if strict historical reporting matters.
### Patterns Established
- Use owned Postgres queries plus handler tests as the primary guardrail for cross-user isolation.
- Keep social identity providers as login inputs only; Xtablo sessions remain authoritative.
- For v2 realtime, SSE receive plus HTMX POST send is sufficient and keeps infrastructure local.
- Validation files should be closed immediately after phase execution to avoid stale milestone audits.
### Key Lessons
1. Archive a milestone before starting the next one, or make the close workflow explicitly support archival from a historical commit.
2. Treat `*-VERIFICATION.md` as a required phase exit artifact, not a later audit cleanup.
3. Browser UAT remains necessary for HTMX swap/reset behavior even when handler tests are green.
### Cost Observations
- Model mix: not tracked.
- Sessions: multiple interactive GSD sessions.
- Notable: most rework came from artifact hygiene and UAT-discovered browser behavior, not from core backend design.
| v3.0 | TDD for view models (planning, chat IsOwn); browser verify checkpoints | Visual correctness tested via catalog + human UAT; unit coverage on behavior helpers | Design system (no new runtime deps); build-tag-gated catalog route |