promote: workshop/board-viewer brainstorm → concepts + 5 tasks

- concepts/board-viewer.md (design, promoted from .workshop)
- .tasks/STATUS.md + 5 per-task files:
  - board-viewer-pointers (pre-impl, status=ready)
  - board-viewer-gitea-reader (impl, TDD, status=ready)
  - board-viewer-html-render (impl, TDD, blocker=gitea-reader)
  - board-viewer-cron-deploy (impl, infra carve-out, blocker=html-render)
  - board-viewer-review (umbrella, status=blocked)

TDD-mode embedded in impl-tasks per follow tdd-criteria trigger in CLAUDE.md.
MCP write-side workaround per memory reference_projects_meta_resolveTarget_bug.md.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
vitya
2026-05-22 08:21:59 +03:00
parent d0dc686a65
commit 27465089b5
9 changed files with 414 additions and 15 deletions

View File

@@ -0,0 +1,54 @@
# 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 импл-таски.
## Open questions
- [ ] (заполняется ревьюером по ходу)
## Completed steps
- [ ] (фиксируется при выполнении)
## Notes
**Закрытие:** только когда все findings зафайлены ИЛИ ревьюер подтвердил «нет findings» в close-note.
**TDD-immutability:** если ревью обнаружит модифицированные assert'ы без `[test-modify: ...]` маркера в commit subject — это нарушение `follow tdd-criteria`, finding обязателен.