diff --git a/docs/work-items/ORCH-069/12-review.md b/docs/work-items/ORCH-069/12-review.md new file mode 100644 index 0000000..efa95f6 --- /dev/null +++ b/docs/work-items/ORCH-069/12-review.md @@ -0,0 +1,71 @@ +--- +type: review +work_item_id: ORCH-069 +verdict: REQUEST_CHANGES +version: 1 +--- + +# Review ORCH-069 + +## Summary +Реализация QG-0 title-лимита как конфигурируемого параметра `ORCH_QG0_TITLE_MAX` +(дефолт 200) выполнена качественно и **по ТЗ/ADR дословно**: поле +`Settings.qg0_title_max`, graceful `field_validator(mode="before")` (never-raise → +дефолт 200), динамическое чтение `settings.qg0_title_max` в `_qg0_errors` с +f-string-текстом ошибки. Код изолирован (затронуты только `src/config.py` и +`src/webhooks/plane.py`), инварианты не нарушены, нижние лимиты сохранены. Полный +тест-сет зелёный: `pytest tests/ -q` → **757 passed** (включая 10 новых). + +Единственная причина REQUEST_CHANGES — **неполная документация**: при наличии в +`README.md` таблицы конфигов «Все переменные с префиксом `ORCH_`» новый параметр +`ORCH_QG0_TITLE_MAX` в неё не внесён. Это прямо требуется AC-6 и ТЗ §9. + +## Соответствие ТЗ / ADR +- `src/config.py` — поле `qg0_title_max: int = 200` + валидатор `_qg0_title_max_default` + (mode="before", try/except → 200): 1:1 с ADR Р-1/Р-2 и ТЗ §2/§5. ✓ +- `src/webhooks/plane.py:362` — хардкод `> 80` заменён на `> settings.qg0_title_max`, + текст ошибки динамический; сигнатура `_qg0_errors`, нижний лимит `< 5`, проверка + description `< 20` не тронуты: ADR Р-3, ТЗ §3/§4. ✓ +- Граница строгая (`len == limit` PASS, `limit+1` FAIL) — подтверждена tc01–tc04. ✓ +- Инварианты (AC-8): `STAGE_TRANSITIONS`, `QG_CHECKS`, схема БД, slug `[:30]`, + soft-QG-0, API — НЕ изменены (diff = только 2 файла src). ✓ + +## Acceptance criteria +- AC-1 (дефолт 200, граница 201, текст упоминает 200) — tc01/tc02 ✓ +- AC-2 (лимит 120, граница 121, текст 120 не 80) — tc03/tc04 ✓ +- AC-3 (graceful пустое/`abc` → 200 без краха) — tc05/tc06/tc07 + валидатор ✓ +- AC-4 (нижние лимиты title<5 / desc<20) — tc08/tc09 ✓ +- AC-5 (pytest зелёный) — 757 passed ✓ +- AC-6 (документация в том же PR) — **частично: README-таблица не обновлена** ✗ (см. P1) +- AC-7 (обратная совместимость, ≤80 проходит) — tc10 ✓ +- AC-8 (изоляция изменений) — ✓ + +## Findings + +### P0 — Blocker +- (нет) + +### P1 — Must fix +- [ ] **AC-6 / ТЗ §9 не выполнен полностью: README-таблица конфигов не обновлена.** + В `README.md` (строки 105–138) есть таблица «Все переменные с префиксом `ORCH_`», + куда внесены даже свежие переменные (ORCH-053/ORCH-060 reconcile). Новый + пользовательский параметр `ORCH_QG0_TITLE_MAX` в ней отсутствует — таблица стала + неконсистентна собственному заголовку («все переменные»). AC-6 явно требует: + «при наличии релевантной таблицы конфигов в README / CLAUDE.md — она обновлена… + FAIL если какой-либо из обязательных файлов документации не обновлён (reviewer → + REQUEST_CHANGES)». **Действие:** добавить строку в таблицу `README.md`, напр.: + `| `ORCH_QG0_TITLE_MAX` | Верхний лимит длины заголовка QG-0 (вход `_qg0_errors`); невалидное/пустое → дефолт (ORCH-069) | `200` |`. + +### P2 — Should fix +- (нет) + +## Документация +- `.env.example` — добавлен `ORCH_QG0_TITLE_MAX=200` с комментарием. ✓ +- `.env.staging.example` — добавлен `ORCH_QG0_TITLE_MAX=200`. ✓ +- `CHANGELOG.md` — подробная запись об ORCH-069 (Added). ✓ +- ADR `06-adr/ADR-001-configurable-qg0-title-limit.md` — присутствует, согласован с кодом. ✓ +- **`README.md` таблица env-конфигов — НЕ обновлена** (новый `ORCH_QG0_TITLE_MAX` + отсутствует) → блокирующее замечание P1, нужно дополнить в этом же PR. +- `docs/architecture/README.md` / `CLAUDE.md` — обновления не требуют (QG-0 — inline + soft/hard-валидация входа, не зарегистрированный stage-gate; API/стадии/QG-реестр + не менялись). ОК.