with the day-separated event list using a for loop:
for i, event := range data.Events {
if PlanningShowDaySeparator(data.Events, i) {
-
+
{ event.DateLabel }
}
@@ -244,6 +247,8 @@ From go-backend/internal/web/views/tablos.templ (EmptyState usage pattern):
DateLabel is NOT rendered inside the event row — it appears only in the day separator (per D-P04).
}
+ Important: Add data-day-separator="true" to the separator div (as shown above). This makes the render test assertion stable — the test asserts "data-day-separator" rather than a specific Tailwind class name. The visual appearance (background, text style) is controlled via Tailwind utility classes on the same element.
+
Important: Do NOT use templ.Raw() for any field. All content via { expr }.
Step 2 — Update GetPlanningPage in go-backend/internal/web/handlers/auth.go:
@@ -269,7 +274,7 @@ From go-backend/internal/web/views/tablos.templ (EmptyState usage pattern):
- `go test ./internal/web/views/ -run TestPlanning -count=1` exits 0 with output "PASS"
- `go test ./... -count=1` exits 0
- The rendered PlanningMainContent HTML contains "overview-section" (proven by TestPlanningMainContentRendersOverviewSection)
- - The rendered PlanningMainContent HTML contains "bg-slate-50" (day separator element present)
+ - The rendered PlanningMainContent HTML contains "data-day-separator" (day separator element present — proven by TestPlanningMainContentRendersOverviewSection)
- templ generate produced an updated dashboard_components_templ.go
@@ -288,7 +293,7 @@ From go-backend/internal/web/views/tablos.templ (EmptyState usage pattern):
2. Navigate to http://localhost:8080/planning (sign in first if redirected)
3. Confirm the "Planning" heading: large bold text (1.6rem, 600 weight) in the overview-section-heading style — visually matches section headings on the dashboard and tablo-detail pages
4. Confirm the date range label appears to the right of the heading (or below, depending on heading layout)
- 5. Confirm 2 date separator bars appear: one reading "May 17, 2026" and one reading "May 18, 2026", each with the gray-tinted strip appearance (bg-slate-50)
+ 5. Confirm 2 date separator bars appear: one reading "May 17, 2026" and one reading "May 18, 2026", each with the gray-tinted strip appearance
6. Confirm 3 events appear under the first separator and 2 events under the second
7. Confirm no DateLabel text appears inside the individual event rows
8. Navigate to http://localhost:8080/chat (if Plan 01 has been executed — or verify Plan 01 is also complete)
@@ -324,7 +329,7 @@ Build check: `cd go-backend && go build ./...` exits 0.
- ".overview-section-heading h1," added to the selector in app.css (h1 now inherits 1.6rem 600 weight heading style)
- planning_view.go exports PlanningEventRow, PlanningTabData, NewPlanningTabData (5 demo events across 2 dates), PlanningShowDaySeparator
-- PlanningMainContent(data PlanningTabData) renders .overview-section heading + day separators + event rows without DateLabel in row body
+- PlanningMainContent(data PlanningTabData) renders .overview-section heading + day separators (with data-day-separator="true") + event rows without DateLabel in row body
- handlers/auth.go GetPlanningPage passes views.NewPlanningTabData() to views.PlanningMainContent()
- go test ./... -count=1 exits 0
- Browser: planning heading styled to match dashboard section headings; 2 date separators visible; events grouped correctly
diff --git a/.planning/phases/17-chat-planning/17-VALIDATION.md b/.planning/phases/17-chat-planning/17-VALIDATION.md
index bda777b..d73effe 100644
--- a/.planning/phases/17-chat-planning/17-VALIDATION.md
+++ b/.planning/phases/17-chat-planning/17-VALIDATION.md
@@ -2,8 +2,8 @@
phase: 17
slug: chat-planning
status: draft
-nyquist_compliant: false
-wave_0_complete: false
+nyquist_compliant: true
+wave_0_complete: true
created: 2026-05-17
---
@@ -49,7 +49,9 @@ created: 2026-05-17
## Wave 0 Requirements
-Existing infrastructure covers all phase requirements. No new test files needed — `go-backend/internal/web/handlers/dashboard_components_test.go` is the model for any new component tests.
+The two test files (`discussion_view_test.go` and `planning_view_test.go`) are created in Task 1 of each plan as part of the TDD RED phase. This IS the Wave 0 step for each plan — the test files are written first (RED), then the templ component is updated in Task 2 to make them pass (GREEN). No separate Wave 0 plan is needed because the test scaffold is embedded in the first task of each plan.
+
+Existing infrastructure (`go-backend/internal/web/views/dashboard_components_test.go`) provides the `renderViewToString` helper that new test files reuse. No new test infrastructure files are needed.
---
@@ -65,11 +67,11 @@ Existing infrastructure covers all phase requirements. No new test files needed
## Validation Sign-Off
-- [ ] All tasks have `` verify or Wave 0 dependencies
-- [ ] Sampling continuity: no 3 consecutive tasks without automated verify
-- [ ] Wave 0 covers all MISSING references
-- [ ] No watch-mode flags
-- [ ] Feedback latency < 10s
-- [ ] `nyquist_compliant: true` set in frontmatter
+- [x] All tasks have `` verify or Wave 0 dependencies
+- [x] Sampling continuity: no 3 consecutive tasks without automated verify
+- [x] Wave 0 covers all MISSING references (test files created in Task 1 of each plan)
+- [x] No watch-mode flags
+- [x] Feedback latency < 10s
+- [x] `nyquist_compliant: true` set in frontmatter
-**Approval:** pending
+**Approval:** approved 2026-05-17