# TASKS Use this board to coordinate handoff between planner, implementer, and reviewer. Status values: - `in_planning` - `ready_for_implement` - `in_implementation` - `ready_for_review` - `in_review` - `ready_to_commit` - `changes_requested` - `done` Command expectations: - planner moves tasks into `in_planning` and `ready_for_implement` - implementer moves tasks into `in_implementation`, `ready_for_review`, and `done`, and resumes work from `changes_requested` and `ready_to_commit` - reviewer moves tasks into `in_review`, `ready_to_commit`, or `changes_requested` - `status_cycle` should report deterministic task status, current owner role, and next recommended action based on this board | Task ID | Scope | Status | Acceptance Criteria | Evidence | Next Role | | --- | --- | --- | --- | --- | --- | | T-001 | Status evaluation logic (3-sample window, 3.00 W threshold, waiting/incomplete/running/done) and Tasmota payload parsing, with tests first | done | All state/boundary tests pass (2.99 idle, 3.00 active, gap -> incomplete, <3 samples -> waiting); payload parser handles valid, missing ENERGY/Power, and invalid JSON; fmt/vet/test pass | 2026-10-12T11:03:20Z: tests first, fmt/vet/test PASS; review PASS | none | | T-002 | Per-minute sampler, MQTT subscription, HTTP `/api/status` and phone-first page, `main.go` env config | done | Sampler records valid/missing samples per tick; `/api/status` matches JSON contract; page has white background, large status, `47.70W` readings, viewport meta, 60 s refresh; fmt/vet/test pass | 2026-10-12T11:17:06Z: fmt/vet/test/race PASS; MQTT and 360px Chrome smoke PASS | none | | T-003 | Dockerfile, docker-compose example, .dockerignore, README documentation | done | Image builds (or noted if Docker unavailable); README documents rules, env vars, deployment, limitations; existing AI Workflow section untouched | 2026-10-12T11:22:18Z: fmt/vet/test PASS; Docker build/runtime PASS; README workflow preserved | none | | T-004 | SSE push (`GET /api/events`) so the page refreshes on each valid MQTT message: sensor Hub, `Sampler.OnReceive`, SSE handler with keep-alive and write-deadline override, page EventSource with 60 s polling fallback, README/comment updates, tests first | done | Valid message -> `update` event to all clients; invalid -> none; immediate `update` on connect; keep-alive sent; stream outlives 10 s WriteTimeout; slow subscriber never blocks Receive; disconnects/shutdown clean up; `/api/status` unchanged; README documents endpoint and updated refresh behavior; fmt/vet/test (+race) pass | 2026-10-12T13:18:18Z: fmt/vet/test/race PASS; MQTT/SSE/Chrome smoke PASS; review PASS | none | | T-005 | Show "Laundry done" status text in green (`.done { color: #1a7f37 }` in index.html), page test first, README status table update | done | Page contains the `.done` green rule (test fails before, passes after); text and status rule unchanged; README table says Green; fmt/vet/test pass | 2026-10-12T13:24:25Z: tests first, fmt/vet/test PASS; review PASS; E2E NOT_CONFIGURED | none | | T-006 | Home screen support: cartoon washing-machine icon (SVG + 192/512/maskable/apple-touch PNGs), `manifest.webmanifest` ("Home Lanundry", standalone), embedded routes with correct content types, head tags in index.html, README section, tests first | done | New routes return 200 with correct content types and valid PNG sizes; manifest JSON has name/short_name "Home Lanundry", display standalone, start_url /, 192/512 and maskable icons that all resolve; page has manifest/theme-color/apple-touch-icon tags; page layout, title, status rule, JSON and SSE unchanged; README documents the home-screen steps and plain-HTTP limitation; fmt/vet/test pass | 2026-10-13T09:08:01Z: tests first; fmt/vet/test/web-race PASS; Docker/Chrome/icon smoke PASS; review PASS | none |