closes board-viewer-review Subagent code-review against design spec + acceptance criteria found: - 2 Major: README emoji legend stale (board-viewer-readme-emoji-fix), card meta missing owner pill + last-commit-marker (board-viewer-card-meta-fix) - 6 minor/nitpick bundled as board-viewer-polish All shipped code: 43/43 tests pass, TDD-immutability clean, secret hygiene OK. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
63 lines
4.6 KiB
Markdown
63 lines
4.6 KiB
Markdown
# 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-<gap>-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 обязателен.
|