diff --git a/docs/work-items/ORCH-016/01-brd.md b/docs/work-items/ORCH-016/01-brd.md
new file mode 100644
index 0000000..928be65
--- /dev/null
+++ b/docs/work-items/ORCH-016/01-brd.md
@@ -0,0 +1,77 @@
+# BRD: Единообразные коммент-артефакты в Plane от всех агентов
+
+Work Item ID: **ORCH-016**
+Стадия: analysis
+Автор: analyst
+Дата: 2026-06-05
+
+---
+
+## 1. Бизнес-цель
+Стейкхолдер (Слава) должен мочь из ленты комментариев задачи в Plane **за один клик** перейти к артефакту любого агента (ADR, PR, ревью, отчёт тестера, деплой-лог), а не разбирать «шумные» строки без удобной ссылки и человекочитаемого описания.
+
+## 2. Мотивация
+Сейчас в Plane комменты двух разных стилей:
+
+| Кто пишет | Формат коммента | Источник |
+|-----------|-----------------|----------|
+| **Аналитик (эталон)** | HTML: человеческое описание стадии + `
` со списком ссылок на артефакты, заголовок «Документы:» | `src/stage_engine.py::_build_analyst_ready_comment` (PR #13) |
+| Architect / Developer / Reviewer / Tester / Deployer | Однострочник «{icon} Role готов · 8.5M in / 45.8k out · $7.29» + markdown-ссылки следом | `src/usage.py::usage_comment` + `artifact_links` |
+
+Проблемы второго формата:
+1. Нет человеческого описания результата стадии — есть только техническая метрика «tokens/cost».
+2. Нет краткого вердикта одной строкой там, где он есть в артефакте (Reviewer `APPROVE/REQUEST_CHANGES`, Tester `PASS/FAIL`, Deployer `SUCCESS/FAILED`).
+3. Формат разнится по агентам (где-то «📂 Branch + 🔗 PR», где-то «📄 Test report») — нет единого визуального якоря.
+
+## 3. Целевая аудитория
+- **Стейкхолдер задачи (Слава, владелец продукта)** — главный потребитель ленты комментариев в Plane.
+- **Reviewer / QA / DevOps по другим проектам (enduro-trails)** — те же ссылки помогут им навигироваться по задачам, не открывая БД оркестратора.
+
+## 4. Scope (что входит)
+1. Привести коммент-формат **architect, developer, reviewer, tester, deployer** к единому виду по эталону аналитика:
+ - заголовок-роль (emoji + имя роли),
+ - короткое человеческое описание результата стадии (1 предложение),
+ - кликабельная ссылка(и) на СВОЙ артефакт,
+ - **одна строка-вердикт** там, где это уместно (Reviewer / Tester / Deployer).
+2. Переиспользовать `settings.gitea_public_url` для кликабельных ссылок (готово в PR #14).
+3. Сохранить существующее поведение аналитика (PR #13) — он уже соответствует целевому формату; в идеале — переиспользовать общий хелпер.
+4. Один коммент на агента за прохождение стадии (без спама).
+
+## 5. Out of scope (что НЕ трогаем)
+- Логика Quality Gates (`src/qg/checks.py`).
+- Status-only verdict model (PR #12) — приёмка аналитика через смену статуса Plane на «Approved/Rejected».
+- Дедупликация вебхуков (`src/webhooks/_dedup.py`).
+- `set_issue_done`, `notify_done`, `notify_qg_failure` — внутренние нотификации остаются как есть.
+- Per-agent bot-авторство (PR с `PLANE_BOT_TOKENS`) — сохраняется.
+- Изменение схемы БД, конвейера стадий, реестра QG.
+
+## 6. Бизнес-требования
+**BR-1.** Каждый агент по завершении своей стадии (вне пути ошибки) пишет в Plane **ровно один** коммент в едином формате.
+**BR-2.** Коммент содержит:
+- заголовок с emoji-иконкой роли и человекочитаемым названием,
+- 1–2 предложения с описанием результата стадии на русском языке,
+- кликабельную ссылку (-и) на артефакт(ы) этого агента в Gitea,
+- одну строку вердикта (Verdict / Status), если артефакт его содержит.
+**BR-3.** Ссылки строятся через `gitea_public_url` (fallback на `gitea_url`).
+**BR-4.** Формат должен быть устойчив: отсутствующий артефакт / отсутствующий вердикт не ломает коммент — соответствующая строка просто опускается.
+**BR-5.** Изменение **не нарушает**:
+- status-only verdict model (аналитик по-прежнему ждёт смены статуса Plane),
+- дедуп комментов и вебхуков,
+- работу `set_issue_done` / `notify_done` на финале конвейера,
+- per-agent bot-авторство.
+
+## 7. Ограничения и риски
+- **Self-hosting:** оркестратор правит сам себя; деплой только через staging-гейт (порт 8501) → прод-контейнер `orchestrator` не перезапускать в рамках задачи.
+- Прод обслуживает другие проекты (enduro-trails) — нельзя сломать комменты в их задачах.
+- Plane Bot-авторство (`_headers_for`) должно остаться — коммент пишется под бот-токеном своей роли.
+- Reviewer/tester вердикты читаются из артефактов; нужно идемпотентно работать, если артефакт ещё не закоммичен / не доступен в worktree.
+
+## 8. Связки
+- PR #13 — `status-only analyst comment with doc links` (эталон формата аналитика).
+- PR #14 — `external gitea_public_url for clickable doc links` (источник кликабельных ссылок).
+- ADR не требуется: сквозной архитектурный сдвиг отсутствует, меняем только формирование текста коммента в существующем потоке.
+
+## 9. Критерии успеха (high-level)
+- Слава открывает любую задачу в Plane и в ленте видит однотипные карточки от каждого агента: «{role} — {описание} → ссылка [Verdict: …]».
+- По любой ссылке открывается соответствующий документ в Gitea (HTTP 200, корректный путь).
+- Никаких регрессий в существующих тестах `tests/`.
diff --git a/docs/work-items/ORCH-016/02-trz.md b/docs/work-items/ORCH-016/02-trz.md
new file mode 100644
index 0000000..6d64498
--- /dev/null
+++ b/docs/work-items/ORCH-016/02-trz.md
@@ -0,0 +1,133 @@
+# ТЗ: Единообразные коммент-артефакты в Plane от всех агентов
+
+Work Item ID: **ORCH-016**
+Стадия: analysis → architecture → development
+Автор: analyst
+Дата: 2026-06-05
+
+> Контракт: что именно меняем в коде / какие модули задействованы / какие проверки появятся.
+> Архитектурные решения принимает архитектор; здесь — границы изменения.
+
+---
+
+## 1. Задействованные модули
+
+| Модуль | Роль в изменении |
+|--------|------------------|
+| `src/usage.py` | **Главная точка изменения.** Здесь сейчас живут `usage_comment()`, `artifact_links()`, `AGENT_ARTIFACT`, `AGENT_DISPLAY`, `AGENT_ICON` — основа форматирования. Нужно расширить/добавить хелпер построения единого status-коммента. |
+| `src/stage_engine.py` | Эталонная функция аналитика `_build_analyst_ready_comment()`. По возможности — переиспользовать новый общий хелпер (или хотя бы выровнять формат: emoji + заголовок + описание + список ссылок). |
+| `src/agents/launcher.py` | `_post_usage_comments()` — точка, где постится коммент по завершении агента (architect/developer/reviewer/tester/deployer). Должен звать новый хелпер. |
+| `src/plane_sync.py` | `add_comment()` — без изменений (используется как транспорт). |
+| `src/qg/checks.py` | **Только для чтения**: модели парсинга frontmatter `verdict:` / `deploy_status:` / `staging_status:` — переиспользуем эту логику (вынести в отдельную утилитку, либо импортировать там, где она уже есть). |
+| `src/config.py` | `settings.gitea_public_url`, `settings.gitea_owner`, `settings.gitea_url` — без изменений, переиспользуются. |
+
+## 2. Контракт нового коммент-формата
+
+### 2.1 Структура (одинакова для всех агентов)
+```
+{ICON} {RoleName} — {one-line human description of stage result}
+
+[Verdict / Status: ] # опционально, см. 2.3
+Документы:
+ • {label} # одна или несколько ссылок
+```
+
+Поля:
+- `{ICON}` — берётся из `AGENT_ICON` (уже есть в `usage.py`).
+- `{RoleName}` — из `AGENT_DISPLAY` (уже есть).
+- `{description}` — фиксированная строка на роль, см. 2.2.
+- Verdict / Status — см. 2.3, опускается если не извлекается.
+- Ссылки — см. 2.4.
+
+### 2.2 Описания стадий (per-agent text)
+
+| Агент | Описание (рус.) |
+|-------|------------------|
+| analyst | «Подготовил BRD / ТЗ / Acceptance Criteria. Для продвижения переведите задачу в статус Approved.» (как сейчас в `_build_analyst_ready_comment`) |
+| architect | «Завершил архитектурную проработку. См. ADR ниже.» |
+| developer | «Завершил разработку. См. PR / branch ниже.» |
+| reviewer | «Завершил ревью изменений.» |
+| tester | «Завершил прогон тестов.» |
+| deployer | «Завершил деплой.» |
+
+Точные формулировки финализирует architect; аналитик фиксирует **факт** наличия 1-предложного описания на каждую роль.
+
+### 2.3 Verdict / Status строка
+
+Печатается отдельной строкой над списком документов. Источник — frontmatter артефакта; парсить идемпотентно (если файл недоступен — строку пропустить):
+
+| Агент | Поле | Где парсим | Возможные значения | Формат строки |
+|-------|------|------------|---------------------|----------------|
+| analyst | — | — | — | не печатается |
+| architect | — | — | — | не печатается |
+| developer | — | — | — | не печатается (CI-статус — отдельный гейт) |
+| reviewer | `verdict:` | `docs/work-items//12-review.md` (YAML-frontmatter) | `APPROVE` / `REQUEST_CHANGES` | `Verdict: APPROVE` |
+| tester | `verdict:` (или эквивалентный фронт-кей) | `docs/work-items//13-test-report.md` | `PASS` / `FAIL` | `Verdict: PASS` |
+| deployer | `staging_status:` (для deploy-staging) / `deploy_status:` (для deploy) | `15-staging-log.md` / `14-deploy-log.md` | `SUCCESS` / `FAILED` | `Status: SUCCESS` |
+
+Если значение в frontmatter отсутствует или не распознано → строка `Verdict / Status` НЕ выводится (вердикт-парсинг гейтов и сама логика гейтов не меняется).
+
+### 2.4 Ссылки на артефакты
+
+Базовый URL: `(settings.gitea_public_url or settings.gitea_url).rstrip('/')`.
+Префикс: `/{owner}/{repo}/src/branch/{branch}/`.
+
+| Агент | Артефакты (label → путь) |
+|-------|----------------------------|
+| analyst | BRD `01-brd.md`, ТЗ `02-trz.md`, AC `03-acceptance-criteria.md`, Test Plan `04-test-plan.yaml` *(уже есть)* |
+| architect | ADR-папка `docs/work-items//06-adr/` *(уже есть)* |
+| developer | Branch `…/src/branch/`, PR `…/pulls/` *(уже есть)* |
+| reviewer | Review `docs/work-items//12-review.md` *(уже есть)* |
+| tester | Test report `docs/work-items//13-test-report.md` *(уже есть)* |
+| deployer | Deploy log `docs/work-items//14-deploy-log.md`; staging-лог `15-staging-log.md` (если применимо к стадии) |
+
+Несуществующий файл в worktree → ссылка опускается (как сейчас в `_build_analyst_ready_comment`).
+
+### 2.5 Один коммент на агента за стадию
+Текущий триггер — `_post_usage_comments()` вызывается **один раз** в успешном auto-advance пути после агента. Никаких новых триггеров не добавляем. Дубликаты исключены текущей логикой (одно завершение агента → один коммент).
+
+### 2.6 Usage-метрики (токены / стоимость)
+Текущий `usage_comment()` встраивает «8.5M in / 45.8k out · $7.29» в первый строкой. По требованиям Славы это «без раздувания», но не запрещено явно. Решение:
+- **Сохранить** usage-метрику как **последнюю строку** коммента (мелким техническим хвостом, например `8.5M in / 45.8k out · $7.29`), либо
+- **Перенести** в `task_summary_comment` (только для финального deployer-summary).
+
+Финальный выбор — за архитектором (см. вопрос Q-1 в `10-tech-risks.md`).
+
+### 2.7 Бот-авторство
+`plane_add_comment(..., author=)` — сохраняется. Все агенты комментируют под своим bot-токеном (`PLANE_BOT_TOKENS`). Изменения формата текста на это не влияют.
+
+## 3. Изменения API
+**Нет.** Внешние webhooks (`/webhook/plane`, `/webhook/gitea`), `/health`, `/status`, `/queue` — не меняются.
+
+## 4. Изменения схемы БД
+**Нет.** Используются существующие таблицы `tasks`, `agent_runs`, `jobs`.
+
+## 5. Новые Quality Gate checks
+**Нет.** Гейты не меняются. Парсинг `verdict:` / `deploy_status:` / `staging_status:` в коммент — отдельная утилитка, не QG.
+
+## 6. Требования к коду
+- Все новые функции — с docstring (зачем нужны, какие инварианты сохраняют).
+- Парсинг frontmatter артефакта — graceful: исключение → строка вердикта опускается, лог в `logger.debug`.
+- Никаких новых внешних зависимостей: использовать `pyyaml` (уже в проекте) или существующий парсер frontmatter из `src/qg/checks.py`.
+- Поведение для проектов **без** артефактов (например, ENDURO-* до запуска агента) — graceful no-op: коммент с описанием и без ссылок (минимум — заголовок).
+- HTML (как у аналитика) предпочтительнее markdown — Plane корректно рендерит `- ` и ``.
+
+## 7. Артефакты по pipeline
+- `06-adr/` — **не требуется** (нет архитектурного сдвига; обсуждается локально архитектором, в случае спорного решения по 2.6 — заводим ADR `ADR-001-status-comment-format.md`).
+- `07-infra-requirements.md` — **не требуется** (нет новой инфраструктуры).
+- `08-data-requirements.md` — **не требуется** (БД не меняется).
+- `12-review.md` / `13-test-report.md` / `14-deploy-log.md` — формируются на соответствующих стадиях по канону.
+- `CHANGELOG.md` — обновить в том же PR (раздел `Unreleased`).
+
+## 8. Документация
+В том же PR обновить:
+- `docs/architecture/README.md` — короткое упоминание единого формата комментов (можно в раздел «Plane Sync»).
+- `docs/architecture/internals.md` — если там есть раздел про `usage.py`/комменты — обновить.
+- `CLAUDE.md` — без изменений (правила не меняются).
+
+## 9. Чего НЕ делать
+- Не менять реестр `QG_CHECKS`.
+- Не менять `STAGE_TRANSITIONS`.
+- Не менять `add_comment` / `_headers_for` / `PLANE_BOT_TOKENS`.
+- Не «комментировать» комменты других стадий задним числом.
+- Не использовать `--no-verify` при коммитах.
diff --git a/docs/work-items/ORCH-016/03-acceptance-criteria.md b/docs/work-items/ORCH-016/03-acceptance-criteria.md
new file mode 100644
index 0000000..c549fb2
--- /dev/null
+++ b/docs/work-items/ORCH-016/03-acceptance-criteria.md
@@ -0,0 +1,95 @@
+# Acceptance Criteria: Единообразные коммент-артефакты в Plane
+
+Work Item ID: **ORCH-016**
+
+Каждый AC сформулирован как чёткое условие PASS/FAIL. Проверяется автоматически (unit/integration) либо ручной верификацией в staging Plane (порт 8501).
+
+---
+
+## AC-1. Архитектор пишет единообразный коммент
+- **Given** task завершила стадию `architecture` успешно, `06-adr/` содержит как минимум один ADR.
+- **When** `_post_usage_comments(agent="architect", ...)` вызывается.
+- **Then** в Plane появляется **ровно один** коммент со структурой:
+ - первая строка: `📐 Architect — Завершил архитектурную проработку. См. ADR ниже.`,
+ - блок «Документы:» с кликабельной ссылкой на `…/src/branch//docs/work-items//06-adr/`,
+ - **нет** строки `Verdict / Status`.
+- **And** автор коммента — `architect` (`PLANE_BOT_TOKENS["architect"]`, fallback на shared token).
+- **PASS** при выполнении всех пунктов; **FAIL** при отсутствии любого.
+
+## AC-2. Разработчик пишет единообразный коммент
+- **Given** task завершила стадию `development`, есть open PR.
+- **When** `_post_usage_comments(agent="developer", ...)` вызывается.
+- **Then** коммент в Plane:
+ - `💻 Developer — Завершил разработку. См. PR / branch ниже.`,
+ - ссылки: `Branch ` → `…/src/branch/`, `PR #` → `…/pulls/`,
+ - **нет** строки `Verdict`.
+
+## AC-3. Ревьюер пишет коммент с вердиктом
+- **Given** `12-review.md` содержит frontmatter `verdict: APPROVE` (или `REQUEST_CHANGES`).
+- **When** `_post_usage_comments(agent="reviewer", ...)` вызывается.
+- **Then** коммент:
+ - `🔎 Reviewer — Завершил ревью изменений.`,
+ - строка `Verdict: APPROVE` (или `REQUEST_CHANGES`) — содержимое соответствует frontmatter,
+ - ссылка `Review` → `…/12-review.md`.
+- **And** если frontmatter не содержит `verdict:` или файл недоступен — строка `Verdict:` опускается, остальное публикуется.
+
+## AC-4. Тестер пишет коммент с вердиктом
+- **Given** `13-test-report.md` содержит frontmatter `verdict: PASS` (или `FAIL`).
+- **When** `_post_usage_comments(agent="tester", ...)` вызывается.
+- **Then** коммент:
+ - `🧪 Tester — Завершил прогон тестов.`,
+ - строка `Verdict: PASS` (либо `FAIL`),
+ - ссылка `Test report` → `…/13-test-report.md`.
+
+## AC-5. Деплоер пишет коммент со статусом
+- **Given** task прошла стадию `deploy` (или `deploy-staging`), артефакт-лог существует с frontmatter `deploy_status: SUCCESS` (или `staging_status: SUCCESS`).
+- **When** `_post_usage_comments(agent="deployer", ...)` вызывается.
+- **Then** коммент:
+ - `🚀 Deployer — Завершил деплой.`,
+ - строка `Status: SUCCESS` (или `FAILED`),
+ - ссылка `Deploy log` → `…/14-deploy-log.md` (и/или `Staging log` → `…/15-staging-log.md` для staging-стадии).
+
+## AC-6. Аналитик не регрессирует
+- **Given** существующий поток PR #12/#13 (status-only verdict).
+- **When** аналитик завершает стадию `analysis` с готовыми `01..04`.
+- **Then** в Plane:
+ - issue переведён в `In Review` (не меняется),
+ - коммент содержит **то же** человеческое описание (Approved/Rejected инструкции) и список ссылок `BRD / ТЗ / AC / Test Plan` — формат либо идентичен текущему, либо построен через тот же общий хелпер, что и остальные агенты, без потери смысла.
+
+## AC-7. Один коммент на агента за стадию
+- **Given** агент успешно отработал стадию.
+- **When** наблюдаем ленту Plane.
+- **Then** для **каждого** агента (`architect`, `developer`, `reviewer`, `tester`, `deployer`) на стадию приходится **ровно один** status-коммент с артефактами. Дополнительные сервисные комменты (`notify_stage_change`, `notify_qg_failure`, `notify_done`) сохраняются — они не считаются status-комментом.
+
+## AC-8. Graceful fallback при отсутствии артефакта
+- **Given** артефакт (например, `12-review.md`) ОТСУТСТВУЕТ в worktree на момент коммента (нестандартный сценарий).
+- **When** `_post_usage_comments(agent="reviewer", ...)` вызывается.
+- **Then** коммент всё равно публикуется: заголовок + описание, без ссылки на отсутствующий артефакт и без строки `Verdict:`. Исключения не пробрасываются.
+
+## AC-9. Кликабельность через gitea_public_url
+- **Given** в `.env` задан `GITEA_PUBLIC_URL=https://git.mva154.duckdns.org`, отличный от `GITEA_URL`.
+- **When** любой агент пишет status-коммент.
+- **Then** href всех артефакт-ссылок начинается с `https://git.mva154.duckdns.org/` (а не с внутреннего `gitea_url`).
+- **And** при отсутствии `gitea_public_url` (пустая строка) — fallback на `gitea_url` (обратная совместимость).
+
+## AC-10. Существующие тесты зелёные
+- **Given** новый код влит в feature-ветку.
+- **When** запускается `pytest tests/ -q`.
+- **Then** все ранее существовавшие тесты проходят (нет регрессий status-only verdict, дедупа, `set_issue_done`).
+
+## AC-11. Quality Gates не меняются
+- **Given** изменения формата комментов.
+- **When** инспектируется `src/qg/checks.py` и `src/stages.py`.
+- **Then** реестр `QG_CHECKS` и `STAGE_TRANSITIONS` остаются идентичными версии до PR (diff в этих файлах = ∅).
+
+## AC-12. Документация обновлена
+- **Given** реализация добавлена в feature-ветку.
+- **When** reviewer проверяет PR.
+- **Then** в diff присутствуют обновления:
+ - `CHANGELOG.md` (раздел Unreleased, описание изменения),
+ - `docs/architecture/README.md` или `docs/architecture/internals.md` (упоминание единого формата status-комментов).
+- **And** при отсутствии обновлений документации reviewer ставит `verdict: REQUEST_CHANGES` (правило проекта).
+
+---
+
+**Финальный PASS задачи:** все AC-1…AC-12 = PASS.
diff --git a/docs/work-items/ORCH-016/04-test-plan.yaml b/docs/work-items/ORCH-016/04-test-plan.yaml
new file mode 100644
index 0000000..7991969
--- /dev/null
+++ b/docs/work-items/ORCH-016/04-test-plan.yaml
@@ -0,0 +1,123 @@
+work_item: ORCH-016
+title: "Единообразные коммент-артефакты в Plane от всех агентов"
+tests:
+
+ - id: TC-01
+ type: unit
+ description: "build_status_comment(architect, ...) формирует HTML c заголовком '📐 Architect — …', описанием стадии и ссылкой на 06-adr/. Строки Verdict нет."
+ module: tests/test_status_comment_format.py
+ expected: PASS
+
+ - id: TC-02
+ type: unit
+ description: "build_status_comment(developer, branch=..., pr_number=42) включает ссылки на branch и на PR #42 через gitea_public_url. Строки Verdict нет."
+ module: tests/test_status_comment_format.py
+ expected: PASS
+
+ - id: TC-03
+ type: unit
+ description: "build_status_comment(reviewer, ...) при verdict=APPROVE в 12-review.md frontmatter выводит строку 'Verdict: APPROVE' и ссылку на 12-review.md."
+ module: tests/test_status_comment_format.py
+ expected: PASS
+
+ - id: TC-04
+ type: unit
+ description: "build_status_comment(reviewer, ...) при verdict=REQUEST_CHANGES выводит 'Verdict: REQUEST_CHANGES'."
+ module: tests/test_status_comment_format.py
+ expected: PASS
+
+ - id: TC-05
+ type: unit
+ description: "build_status_comment(reviewer, ...) при отсутствии файла 12-review.md публикует коммент без строки Verdict и без ссылки Review (graceful)."
+ module: tests/test_status_comment_format.py
+ expected: PASS
+
+ - id: TC-06
+ type: unit
+ description: "build_status_comment(tester, ...) при verdict=PASS в 13-test-report.md выводит 'Verdict: PASS' и ссылку на 13-test-report.md."
+ module: tests/test_status_comment_format.py
+ expected: PASS
+
+ - id: TC-07
+ type: unit
+ description: "build_status_comment(tester, ...) при verdict=FAIL выводит 'Verdict: FAIL'."
+ module: tests/test_status_comment_format.py
+ expected: PASS
+
+ - id: TC-08
+ type: unit
+ description: "build_status_comment(deployer, ...) при deploy_status=SUCCESS в 14-deploy-log.md выводит 'Status: SUCCESS' и ссылку на 14-deploy-log.md."
+ module: tests/test_status_comment_format.py
+ expected: PASS
+
+ - id: TC-09
+ type: unit
+ description: "build_status_comment(deployer, stage='deploy-staging') читает staging_status: из 15-staging-log.md и выводит соответствующую строку Status."
+ module: tests/test_status_comment_format.py
+ expected: PASS
+
+ - id: TC-10
+ type: unit
+ description: "URL ссылок строится через settings.gitea_public_url когда он задан; иначе — через settings.gitea_url (fallback)."
+ module: tests/test_status_comment_format.py
+ expected: PASS
+
+ - id: TC-11
+ type: unit
+ description: "Аналитик: _build_analyst_ready_comment (или его замена общим хелпером) сохраняет существующий контракт — текст про Approved/Rejected статус + список существующих BRD/ТЗ/AC/Test Plan ссылок."
+ module: tests/test_analyst_comment_regression.py
+ expected: PASS
+
+ - id: TC-12
+ type: unit
+ description: "Парсер frontmatter (verdict / deploy_status / staging_status) возвращает None при отсутствии файла, пустом файле или некорректном YAML — без проброса исключения."
+ module: tests/test_status_comment_format.py
+ expected: PASS
+
+ - id: TC-13
+ type: integration
+ description: "_post_usage_comments(agent='reviewer', ...) вызывает plane_sync.add_comment ровно один раз; передаваемый текст содержит '🔎 Reviewer', 'Verdict:' и href на 12-review.md."
+ module: tests/test_post_usage_comments_integration.py
+ expected: PASS
+
+ - id: TC-14
+ type: integration
+ description: "_post_usage_comments(agent='tester', ...) вызывает add_comment ровно один раз с автором 'tester' и корректным текстом."
+ module: tests/test_post_usage_comments_integration.py
+ expected: PASS
+
+ - id: TC-15
+ type: integration
+ description: "_post_usage_comments(agent='deployer', ...) для стадии deploy постит коммент со ссылкой на 14-deploy-log.md И task_summary_comment (если оно сохраняется) — поведение не регрессирует."
+ module: tests/test_post_usage_comments_integration.py
+ expected: PASS
+
+ - id: TC-16
+ type: integration
+ description: "Регрессия status-only verdict model: при завершении analyst issue переводится в In Review, постится один коммент аналитика с инструкцией про статус Approved/Rejected, никакой автомат-advance не происходит."
+ module: tests/test_analyst_status_only_regression.py
+ expected: PASS
+
+ - id: TC-17
+ type: integration
+ description: "Регрессия дедупликации: повторный вебхук Plane с тем же event_id не приводит ко второму status-комменту от агента."
+ module: tests/test_status_comment_dedup_regression.py
+ expected: PASS
+
+ - id: TC-18
+ type: integration
+ description: "Регрессия set_issue_done / notify_done: финальный путь deploy→done по-прежнему переводит issue в Done и постит '✅ Task completed!' (отдельным комментом от status-коммента деплоера)."
+ module: tests/test_notify_done_regression.py
+ expected: PASS
+
+ - id: TC-19
+ type: integration
+ description: "Per-agent bot-авторство: status-комменты архитектора/разработчика/ревьюера/тестера/деплоера POST-ятся под соответствующим X-API-Key (PLANE_BOT_TOKENS[role]); fallback на PLANE_HEADERS при отсутствии бот-токена."
+ module: tests/test_status_comment_authorship.py
+ expected: PASS
+
+ - id: TC-20
+ type: unit
+ description: "Quality Gates не изменены: реестр QG_CHECKS и STAGE_TRANSITIONS идентичны контрольному снапшоту (smoke-тест против случайных правок)."
+ module: tests/test_qg_registry_snapshot.py
+ expected: PASS