mirror of
https://github.com/Matysh/houseplan-card
synced 2026-09-28 19:01:34 +00:00
process: отвязать роли от конкретных агентов (#562)
Issue: #562 User-Visible: no
This commit is contained in:
committed by
claude[bot]
parent
f6e5651ccf
commit
3934f8d8e5
+53
-33
@@ -1,9 +1,11 @@
|
||||
# Процесс работы над House Plan
|
||||
|
||||
> **Статус документа: канон** (редакция 2026-08-13). Решения владельца, на
|
||||
> **Статус документа: канон** (редакция 2026-08-13, ролевое уточнение
|
||||
> 2026-09-13). Решения владельца, на
|
||||
> которых он стоит: прямые коммиты в `dev` **без PR** · канон статуса — **метки**,
|
||||
> имена английские · лёгкий трек **включён** · автор и ревьюер — разные модели ·
|
||||
> инфраструктурные задачи идут **вне** флоу.
|
||||
> имена английские · лёгкий трек **включён** · автор и ревьюер — независимые
|
||||
> агенты/сессии · любой агент может взять любую роль · инфраструктурные задачи
|
||||
> входят в общий флоу сразу на `S7-code-review`.
|
||||
>
|
||||
> **Область действия:** обязателен для владельца и для любого агента. Читается
|
||||
> сразу после `docs/SCOPE.md` и `AGENTS.md`, до `docs/STATUS.md`. Живёт в
|
||||
@@ -44,13 +46,20 @@
|
||||
лежит внутри `custom_components/houseplan/frontend/`, и без этого правила он
|
||||
считался бы продуктовым исходником.
|
||||
|
||||
**Инфраструктурная задача идёт вне флоу** (решение владельца 2026-08-13,
|
||||
issue #118). Признак механический: **ни одного файла класса A**. Такая задача
|
||||
делается без ТЗ, ревью ТЗ, код-ревью и без прохода по статусам — флоу построен
|
||||
для изменений, у которых есть персона и видимое поведение, а в инфраструктуре ТЗ
|
||||
пересказывало бы очевидное, и автор с ревьюером оказались бы одной ролью.
|
||||
Проверкой служат гейты и CI. Обязательным остаётся issue, трейлеры и зелёные
|
||||
`typecheck`, `test`, `build`.
|
||||
**Инфраструктурная задача использует ускоренный вход в общий флоу** (решение
|
||||
владельца 2026-09-13, issue #562). Признак механический: **ни одного файла класса
|
||||
A**. Любой агент может сразу реализовать её по issue и в ветке
|
||||
`issue/<NN>-<slug>`, без аналитики, ТЗ, ревью ТЗ и статусов `S1`…`S6`. Когда
|
||||
материал готов, локальные гейты зелёные и ветка запушена, исполнитель ставит
|
||||
`S7-code-review`. Дальше действует тот же контроллер, что для продуктового кода:
|
||||
зелёное ревью сливает проверенный материал в `dev` и ставит `S8-merged`, а
|
||||
замечания или неудавшееся слияние возвращают задачу в `S6-in-progress`; после
|
||||
исправлений она снова идёт в `S7-code-review`.
|
||||
|
||||
Отсутствие ТЗ не означает отсутствие проверки. Для инфраструктуры обязательны
|
||||
issue, терминальные трейлеры, соразмерные изменению зелёные гейты, хендофф с
|
||||
доказательствами и независимое код-ревью. Модель или имя агента процессом не
|
||||
предписываются.
|
||||
|
||||
Задача, задевающая класс A хотя бы одним файлом, инфраструктурной **не
|
||||
является** и идёт полным флоу. «В основном инфраструктурная» не бывает: иначе
|
||||
@@ -61,7 +70,8 @@ issue #118). Признак механический: **ни одного фай
|
||||
|
||||
## 2. Жизненный цикл
|
||||
|
||||
Восемь рабочих статусов и два служебных. Фазы тестирования в цикле сознательно
|
||||
Восемь рабочих статусов и два служебных. Полный маршрут ниже относится к
|
||||
продуктовым задачам. Фазы тестирования в цикле сознательно
|
||||
**нет**: найденные позже дефекты заводятся отдельными issue и проходят цикл
|
||||
заново. Issue закрывается после выпуска беты.
|
||||
|
||||
@@ -72,6 +82,7 @@ S1-new → S2-analysis → S3-spec → S4-spec-review ⟲ → S5-ready →
|
||||
служебные: blocked (поверх статуса) rejected (закрыт)
|
||||
⟲ — возврат на правки, не более 4 циклов (§4), на лёгком и коротком треке 2
|
||||
короткий трек (`trivial`, §5.1) идёт S2-analysis → S5-ready, минуя S3 и S4
|
||||
инфраструктурный трек (§1): без S → S7-code-review ⟲ S6-in-progress → S8-merged
|
||||
```
|
||||
|
||||
Переходы `S4-spec-review` и `S7-code-review` выполняются **автоматически**: метка
|
||||
@@ -501,19 +512,18 @@ S1-new → S2-analysis → S3-spec → S4-spec-review ⟲ → S5-ready →
|
||||
**Правило разделения:** ревьюер работает состязательно. Ему передаётся тег или
|
||||
диапазон коммитов и ТЗ — не рассказ автора о том, как всё хорошо.
|
||||
|
||||
**Роли закреплены за исполнителями** (решение владельца 2026-08-12):
|
||||
**Роли не закреплены за моделями или именами агентов** (решение владельца
|
||||
2026-09-13, issue #562). Codex, Claude или любой другой доступный агент может быть
|
||||
аналитиком, автором ТЗ, разработчиком, автором инфраструктурной задачи или
|
||||
релиз-инженером по прямой команде владельца.
|
||||
|
||||
| Исполнитель | Роли |
|
||||
|---|---|
|
||||
| **Codex** | аналитик, автор ТЗ, разработчик, релиз-инженер по команде владельца |
|
||||
| **Claude** | ревьюер ТЗ, ревьюер кода, вся инфраструктура и дистрибуция |
|
||||
| **Владелец** | приоритет, скоуп, арбитраж, закрытие issue, команда на выпуск |
|
||||
Разделение относится к артефакту: **автор и ревьюер — разные агенты/сессии**.
|
||||
Модель может совпадать, но ревьюер начинает без контекста реализации и не ставит
|
||||
вердикт собственной работе. Ревью ТЗ и код-ревью также идут в независимых
|
||||
сессиях: ревьюер кода не должен приходить с контекстом обсуждения ТЗ.
|
||||
|
||||
Автор и ревьюер — **разные модели**, и это сильнее требования «другая сессия»:
|
||||
одна модель, читая свой же артефакт заново, повторяет свои же слепые пятна.
|
||||
|
||||
Ревью ТЗ и код-ревью держатся в **разных сессиях** Claude: ревьюер кода не должен
|
||||
приходить с контекстом того, как обсуждали ТЗ.
|
||||
Владелец сохраняет исключительные решения о приоритете, ценности, продуктовом
|
||||
скоупе, отклонении, арбитраже, закрытии issue и команде на выпуск.
|
||||
|
||||
---
|
||||
|
||||
@@ -741,18 +751,22 @@ Performance зелёные на точном SHA, плюс зелёный E2E н
|
||||
Тематические метки (`polish`, `infra`, `tests`, `docs`, `security`, `vacuum`)
|
||||
ортогональны процессу.
|
||||
|
||||
Инварианты: **ровно одна `S*`-метка** на открытом issue; закрытый issue статусных
|
||||
меток не несёт; `blocked` не заменяет статус, а дополняет его.
|
||||
Инварианты: продуктовая задача в процессе несёт **ровно одну `S*`-метку**.
|
||||
Инфраструктурная задача может не иметь `S*` во время первоначальной реализации;
|
||||
с первого `S7-code-review` на неё действует тот же инвариант ровно одной метки.
|
||||
Закрытый issue статусных меток не несёт; `blocked` не заменяет статус, а дополняет
|
||||
его.
|
||||
|
||||
**Чужой issue берётся в работу так же, как свой — после явного решения
|
||||
владельца** (решение владельца 2026-08-13, уточнено в тот же день). Репозиторий
|
||||
публичный, отчёты заводят и посторонние; проверка стоит **на входе**, а не на
|
||||
каждом шаге.
|
||||
|
||||
Входом служит присвоение первой статусной метки: пока меток нет, issue вне
|
||||
процесса и инварианты на него не распространяются. Как только метка стоит, задача
|
||||
в работе, и **кто её завёл, дальше не имеет значения** — статусы, ревью и лимиты
|
||||
работают одинаково.
|
||||
Для продуктовой задачи входом служит присвоение первой статусной метки. Для
|
||||
инфраструктурной — явное назначение владельцем; до готовности к первому
|
||||
код-ревью она может оставаться без `S*`. Как только продуктовая задача вошла в
|
||||
полный маршрут либо инфраструктурная получила `S7-code-review`, **кто её завёл,
|
||||
дальше не имеет значения** — статусы, ревью и лимиты работают одинаково.
|
||||
|
||||
Присвоение метки и есть то самое явное решение, причём проверенное платформой:
|
||||
метки может ставить только тот, у кого есть право записи в репозиторий. Прежняя
|
||||
@@ -894,11 +908,13 @@ S4-spec-review → ревью ТЗ → S5-ready либо возврат в S3-
|
||||
S7-code-review → код-ревью → слияние в dev → S8-merged либо возврат в S6-in-progress
|
||||
```
|
||||
|
||||
Ревьюер — `anthropics/claude-code-action`. Он читает `docs/SCOPE.md`, `AGENTS.md`,
|
||||
этот документ и тело issue, публикует разбор комментарием, заводит issue на Medium-находки
|
||||
вне скоупа задачи (#202), кладёт документ в `docs/reviews/` ветки задачи и возвращает вердикт
|
||||
структурированным JSON. **Метку переставляет отдельный детерминированный шаг по
|
||||
вердикту, а не модель.**
|
||||
Текущая техническая реализация независимого ревьюера —
|
||||
`anthropics/claude-code-action`; это деталь автоматизации, а не закрепление роли
|
||||
или вида задач за Claude. Ревьюер читает `docs/SCOPE.md`, `AGENTS.md`, этот
|
||||
документ и тело issue, публикует разбор комментарием, заводит issue на
|
||||
Medium-находки вне скоупа задачи (#202), кладёт документ в `docs/reviews/` ветки
|
||||
задачи и возвращает вердикт структурированным JSON. **Метку переставляет отдельный
|
||||
детерминированный шаг по вердикту, а не модель.**
|
||||
|
||||
Четыре вещи, без которых конвейер молча не работает:
|
||||
|
||||
@@ -1163,6 +1179,10 @@ Golden, браузерные смоки, performance и полный HA-харн
|
||||
→ закрытие пачкой при выпуске беты. Оба ревью возвращают на правки не более 4
|
||||
циклов; пятый заход — разбор у владельца (разделить / отклонить / арбитраж).
|
||||
|
||||
Инфраструктурная задача (ни одного файла класса A) делается сразу любым агентом:
|
||||
без `S*` → `S7-code-review` ↔ `S6-in-progress` → `S8-merged`. ТЗ и ревью ТЗ нет,
|
||||
код-ревью обязательно.
|
||||
|
||||
Ревью запускается **само** от меток `S4-spec-review` и `S7-code-review` и идёт до
|
||||
45 минут. Поставив такую метку, автор не заканчивает работу, а ждёт смены метки
|
||||
опросом и продолжает по тому, чем она стала.
|
||||
|
||||
Reference in New Issue
Block a user