# board-viewer-review ## Goal Code-review checkpoint для брейнсторма `board-viewer` (промоушен 2026-05-22). **Спецификация:** `.wiki/concepts/board-viewer.md`. **Pre-impl bootstrap:** `board-viewer-pointers` (заполнил `.wiki/CLAUDE.md` Domain conventions — без него review бы читал stub). **Импл-таски (review против их acceptance criteria):** `board-viewer-gitea-reader`, `board-viewer-html-render`, `board-viewer-cron-deploy`. **Кто делает:** **не имплементер.** Следующая сессия в этом проекте (другая модель / другой день / другой агент) поднимает таску с чистым контекстом. «Я только что это написал» bias = главный риск. ## Key files - `.wiki/concepts/board-viewer.md` — canonical design - `.tasks/board-viewer-*.md` — acceptance criteria per impl-task - `~/projects/.workshop/.archive/2026-05-22-board-viewer.md` — brainstorm rationale ## Acceptance criteria (для самого ревью) - Прочитана спецификация целиком. - `git log --oneline` shipped-коммитов (по slug или scope в commit-message) сверен с acceptance criteria каждой импл-таски. - Для каждой импл-таски: прогнан соответствующий тест-suite, проверено что тесты реально доходят до своих веток (не coverage-illusion). - Сверены дизайн-decisions со shipped-кодом: контракт reader → render, статика + cron на VDS, отсутствие write-side. - Findings зафайлены как follow-up tasks (`board-viewer--fix` или подобное) через `mcp__projects-meta__tasks_create`, либо ревьюер подтвердил «нет findings» в close-note. ## Чек-лист ревью (poll-выполнения) - [ ] reader: контракт публичных полей сохранён (не сужен, не расширен молча) - [ ] reader: фикстуры покрывают edge cases (legacy без per-task.md, blocked с blocker-строкой) - [ ] render: snapshot-тесты обновлены вместе с изменениями (не закоммичен код без апдейта snapshot) - [ ] render: визуально не AI-generic, минимализм соблюдён - [ ] cron-deploy: systemd unit + timer проверены `systemctl status`, не только запущены - [ ] cron-deploy: basic-auth проверена `curl` с верными / неверными кредами - [ ] auth scope: пушится ли токен в публичный репо случайно? (`grep -r "02a14e" deploy/` должен быть пуст) - [ ] disaster recovery: README.md в deploy/ достаточен чтобы поднять с нуля? ## Decisions log - 2026-05-22: review-task создан промоушеном; status=blocked, blocker = все 4 импл-таски. - 2026-05-22: review выполнен subagent'ом (general-purpose, clean context). 43/43 тестов pass, TDD-immutability clean (no `[test-modify:]` markers needed — diffs append-only), secret hygiene OK (`02a14e` grep clean across `deploy/`). 2 Major findings + 6 minor/nitpick — зафайлены: `board-viewer-readme-emoji-fix`, `board-viewer-card-meta-fix`, `board-viewer-polish` (бандл). - 2026-05-22: findings зафайлены LOCAL в `.tasks/` (project-discipline Rule 1 override), не через `mcp__projects-meta__tasks_create` (это локальные таски, не cross-project). ## Open questions - [x] (нет — все findings зафайлены) ## Completed steps - [x] спецификация прочитана subagent'ом - [x] `git log --oneline` сверен с acceptance criteria каждой импл-таски - [x] test suite прогнан (43/43 pass) - [x] design ↔ shipped contract проверен - [x] TDD-immutability audit (clean) - [x] secret hygiene grep (clean) - [x] findings зафайлены follow-up тасками ## Notes **Закрытие:** только когда все findings зафайлены ИЛИ ревьюер подтвердил «нет findings» в close-note. **TDD-immutability:** если ревью обнаружит модифицированные assert'ы без `[test-modify: ...]` маркера в commit subject — это нарушение `follow tdd-criteria`, finding обязателен.