задачи ведутся автономно, вопросы выносятся блокерами

- умолчание — делать, а не спрашивать: развилка вынимается пунктом в секцию
  `блокеры` беклога, задача переформулируется на остаток и доводится до коммита
- спрашиваем только про необратимое: деплой, выкладку наружу, удаление данных
- находка ревью с пометкой «развилка» больше не останавливает работу, а
  уезжает блокером с вариантами и ценой каждого
This commit is contained in:
av
2026-08-01 14:33:06 +03:00
parent b2885c79e3
commit 7998c6b86e
6 changed files with 68 additions and 23 deletions
+3 -2
View File
@@ -192,8 +192,9 @@ read-modify-write под конкурентными доставками, а т
## Что происходит с находками дальше
- Оркестратор чинит помеченное `Действие: инлайн` и **не логирует мелочь**.
- `Действие: развилка`на человека через `AskUserQuestion`, вопросом с
вариантами.
- `Действие: развилка`блокером в секцию `блокеры` беклога, вопросом с
вариантами и ценой каждого. Оркестратор не останавливается: он урезает
изменение до остатка и доводит его.
- Находка не для этого мерджа, но реальная (отложенный `major`, развилка,
решённая «потом») — не теряется: заводится задачей через скилл `backlog`
(интейк из ревью), с оракулом и провенансом в теле. Мелочь класса `nit` — в
@@ -77,7 +77,8 @@
`инлайн` — оркестратор чинит сам, не спрашивая и не логируя. `развилка` — цена
исправления сопоставима с переработкой, либо выбор меняет scope, либо решение
трогает инвариант: идёт человеку через `AskUserQuestion` вопросом с вариантами.
трогает инвариант: уезжает блокером в беклог вопросом с вариантами и ценой
каждого, а работа продолжается на остатке.
Потребитель отчёта — оркестратор, который **реализует прочитанное**. Поэтому
потолок в 7 пунктов — не забота о внимании читателя, а защита кодовой базы от
+46 -19
View File
@@ -38,15 +38,39 @@ healthlog — хранилище данных о здоровье, у котор
## Принцип автономности
Зови пользователя (через **AskUserQuestion**) только когда решение реально его:
**Умолчание — делать, а не спрашивать.** Задача доводится до коммита без
участия человека; предполагается, что так пройдёт большинство задач.
- **Выбор задачи**, если он не задан явно.
- **Развилки грумминга** на explore: несколько равнозначных направлений,
спорный scope, продуктовый компромисс.
- **Замечания ревью спек**, требующие выбора: смена подхода, урезание/расширение
scope, риск инварианту хранения данных.
- Всё остальное — механика: делаем без спроса. Мелкие замечания ревью чиним
инлайн, не логируем.
Наткнулся на вопрос, который решать не тебе, — **не останавливайся и не
спрашивай**. Вынь его блокером и продолжай:
1. Заведи пункт в секции `блокеры` беклога:
`backlog.py add --slug <slug> --priority блокеры --hook <что заблокировано>`.
Тело отвечает на три вопроса: **что именно решить**, **какие есть варианты
и цена каждого**, **что стоит, пока решения нет**. Плюс твоя рекомендация —
человек чаще соглашается, чем выбирает заново, и готовое суждение экономит
ему весь контекст.
2. **Переформулируй задачу на остаток** — то, что делается без этого решения.
Впиши в её тело ссылку на блокер и границу: докуда доводим сейчас.
3. Доведи остаток до конца и закоммить. Задача не «висит на вопросе», она
сделана в объявленных границах.
Если полезного остатка нет вовсе — блокер заводится, задача остаётся на месте
со ссылкой на него, и берётся следующая. Это редкий случай; чаще остаток есть.
Блокеры разбираются пачками, а не по одному: прерывать поток ради каждого
дороже, чем накопить.
### Когда всё-таки спрашивать
Узко и по другому основанию — не «сложное решение», а **необратимое действие**:
- деплой, выкладка наружу, смена публичного адреса или токенов;
- удаление или перезапись данных в `./data`, включая подрезку архива;
- всё, что уходит за пределы машины.
Здесь ошибка не откатывается коммитом, поэтому спрашиваем даже когда решение
кажется очевидным. Развилка в дизайне — блокер; необратимое действие — вопрос.
Стиль правок — заточка под проект и конвенции, right-size, без золочения.
@@ -56,8 +80,9 @@ healthlog — хранилище данных о здоровье, у котор
- Если задача задана (slug, файл в `docs/backlog/` или описание) — прочитай её
файл и связанные спеки/черновики.
- Если не задана — покажи топ-кандидатов из `docs/backlog/README.md` (высокий
приоритет, не `[idea]`) через **AskUserQuestion** и дай выбрать.
- Если не задана — выбирай сам: верхняя секция приоритета, не `[idea]`, не
заблокированная целиком. Из равных бери ту, что разблокирует больше других.
Выбор объявляешь в докладе, а не согласовываешь заранее.
- Задача с префиксом `[idea]` (ещё без решения «делаем») — сперва обязательно
через explore (шаг 2), там она либо становится задачей, либо остаётся идеей.
@@ -74,8 +99,9 @@ healthlog — хранилище данных о здоровье, у котор
### 2. (Опц.) Груммить идею — `opsx:explore`
Только для `[idea]`-задач или когда постановка мутная. Вызови Skill
`opsx:explore`. Развилки грумминга — на пользователя (AskUserQuestion). Выход:
ясная постановка, готовая к propose. **В explore не пишем код.**
`opsx:explore`. Развилку грумминга не выноси на человека — заведи блокером и
груми остаток. Выход: ясная постановка, готовая к propose. **В explore не
пишем код.**
### 3. Завести change — `opsx:propose`
@@ -99,7 +125,8 @@ healthlog — хранилище данных о здоровье, у котор
### 5. Отработать замечания ревью предложения
- Мелочь и явные улучшения — правь сам в спеках/дизайне.
- Развилки (компромисс, scope, инвариант) — на пользователя (AskUserQuestion).
- Развилки (компромисс, scope, инвариант) — блокером, спеки урезаются на
остаток.
- После правок перепрогони `openspec validate --strict <id>`.
### 6. Написать код — `opsx:apply`
@@ -138,8 +165,8 @@ healthlog — хранилище данных о здоровье, у котор
покрытия.
Отработай так же, как шаг 5: помеченное `инлайн` чини сам и не логируй,
`развилка`на пользователя через AskUserQuestion (вопрос уже сформулирован
триажем). После правок — снова `task gate`.
`развилка`блокером в беклог (вопрос уже сформулирован триажем, его остаётся
перенести). После правок — снова `task gate`.
**Границы покрытия из отчёта не выбрасывай** — они уезжают в финальный доклад
(шаг 10) сжатой строкой. Отчёт, из которого исчезло «что проверить было
@@ -173,8 +200,8 @@ healthlog — хранилище данных о здоровье, у котор
сделано», тело списком 1–3 пункта, без трейлеров). Одна задача — один
осмысленный коммит.
Готово — доложи пользователю кратко: что сделано, какие развилки решались,
ссылка на архивный change. **Плюс одна строка границ покрытия** из отчёта
Готово — доложи пользователю кратко: что сделано, какие блокеры заведены и
чем ограничен остаток, ссылка на архивный change. **Плюс одна строка границ покрытия** из отчёта
ревью: какой профиль гонялся и что проверить было невозможно. Доклад без неё
сообщает «проверено», не сообщая, что именно.
@@ -188,7 +215,7 @@ healthlog — хранилище данных о здоровье, у котор
всегда, но в профиле `quick`.
- Гейт блокирует: пока `task gate` красный, опиниативные проходы не
запускаются. Чинить и перезапускать, а не «посмотреть заодно».
- Если ревью предлагает крупную переработку — это развилка, не правь молча,
вынеси пользователю.
- Если ревью предлагает крупную переработку — это развилка: не правь молча и
не спрашивай, заведи блокером и доведи остаток.
- Держи пользователя в цикле короткими репликами на переходах фаз, но не проси
подтверждать механику.