You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
3.4 KiB
3.4 KiB
TASKS
Use this board to coordinate handoff between planner, implementer, and reviewer.
Status values:
in_planningready_for_implementin_implementationready_for_reviewin_reviewready_to_commitchanges_requesteddone
Command expectations:
- planner moves tasks into
in_planningandready_for_implement - implementer moves tasks into
in_implementation,ready_for_review, anddone, and resumes work fromchanges_requestedandready_to_commit - reviewer moves tasks into
in_review,ready_to_commit, orchanges_requested status_cycleshould 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 | Project scaffold: Go module, chi router, health endpoint, multi-stage Dockerfile (debian:slim + ffmpeg), docker-compose.yml, .env.example, README.md | done | docker compose build succeeds; GET /health returns 200; go vet ./... passes |
go fmt ./..., go vet ./..., go test ./..., go test -race ./..., docker compose build, curl -i http://127.0.0.1:18080/health passed |
none |
| T-002 | Auth: SQLite schema (users + sessions), bcrypt login/logout, session cookie middleware, first-run admin bootstrap, admin user-management page | ready_for_implement | Login page renders at /login; valid credentials set session cookie and redirect; invalid credentials return 401; admin can add/delete users at /admin/users; all non-login routes return 302 without cookie; go test ./internal/auth/... passes |
n/a | implement |
| T-003 | Footage scanner: walk FOOTAGE_ROOT, build in-memory index (date → images + videos), filename parser, periodic rescan goroutine | ready_for_implement | Scanner correctly indexes fixture directory with known dates/files; DayList() returns sorted dates; DayEntry contains sorted images and videos; periodic rescan runs without data race (go test -race ./internal/footage/... passes) |
n/a | implement |
| T-004 | UI shell & day navigation: dark Tailwind CSS base layout, sidebar (desktop) with date list grouped by month, mobile drawer + bottom tab bar, day overview page with Images/Videos tabs | ready_for_implement | Desktop layout shows sidebar at ≥768 px; mobile layout hides sidebar and shows drawer trigger at <768 px; day overview page renders images and videos tab counts; go vet ./... passes |
n/a | implement |
| T-005 | Image browser: raw JPEG serving, in-memory LRU thumbnail cache (160×90), thumbnail strip, full-image viewer, arrow navigation (keyboard + on-screen), deep-linkable ?idx=N |
ready_for_implement | Thumbnail endpoint returns JPEG ≤30 KB for a test image; raw endpoint serves original file unchanged; arrow nav advances and wraps correctly; keyboard left/right works; strip highlights active item; go test ./internal/image/... passes |
n/a | implement |
| T-006 | Video browser: on-demand ffmpeg remux stream (.265→MP4 via pipe), in-memory LRU video thumbnail (first-frame extract), thumbnail strip, HTML5 player, arrow navigation, deep-linkable ?idx=N |
ready_for_implement | Stream endpoint returns Content-Type: video/mp4 and non-empty body for a test .265 file; thumbnail endpoint returns a JPEG; player page renders with <video> element; arrow nav works; ffmpeg process is killed on client disconnect; go test ./internal/video/... passes |
n/a | implement |