задачи ведутся автономно, вопросы выносятся блокерами
- умолчание — делать, а не спрашивать: развилка вынимается пунктом в секцию `блокеры` беклога, задача переформулируется на остаток и доводится до коммита - спрашиваем только про необратимое: деплой, выкладку наружу, удаление данных - находка ревью с пометкой «развилка» больше не останавливает работу, а уезжает блокером с вариантами и ценой каждого
This commit is contained in:
@@ -192,8 +192,9 @@ read-modify-write под конкурентными доставками, а т
|
||||
## Что происходит с находками дальше
|
||||
|
||||
- Оркестратор чинит помеченное `Действие: инлайн` и **не логирует мелочь**.
|
||||
- `Действие: развилка` — на человека через `AskUserQuestion`, вопросом с
|
||||
вариантами.
|
||||
- `Действие: развилка` — блокером в секцию `блокеры` беклога, вопросом с
|
||||
вариантами и ценой каждого. Оркестратор не останавливается: он урезает
|
||||
изменение до остатка и доводит его.
|
||||
- Находка не для этого мерджа, но реальная (отложенный `major`, развилка,
|
||||
решённая «потом») — не теряется: заводится задачей через скилл `backlog`
|
||||
(интейк из ревью), с оракулом и провенансом в теле. Мелочь класса `nit` — в
|
||||
|
||||
@@ -77,7 +77,8 @@
|
||||
|
||||
`инлайн` — оркестратор чинит сам, не спрашивая и не логируя. `развилка` — цена
|
||||
исправления сопоставима с переработкой, либо выбор меняет scope, либо решение
|
||||
трогает инвариант: идёт человеку через `AskUserQuestion` вопросом с вариантами.
|
||||
трогает инвариант: уезжает блокером в беклог вопросом с вариантами и ценой
|
||||
каждого, а работа продолжается на остатке.
|
||||
|
||||
Потребитель отчёта — оркестратор, который **реализует прочитанное**. Поэтому
|
||||
потолок в 7 пунктов — не забота о внимании читателя, а защита кодовой базы от
|
||||
|
||||
@@ -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` красный, опиниативные проходы не
|
||||
запускаются. Чинить и перезапускать, а не «посмотреть заодно».
|
||||
- Если ревью предлагает крупную переработку — это развилка, не правь молча,
|
||||
вынеси пользователю.
|
||||
- Если ревью предлагает крупную переработку — это развилка: не правь молча и
|
||||
не спрашивай, заведи блокером и доведи остаток.
|
||||
- Держи пользователя в цикле короткими репликами на переходах фаз, но не проси
|
||||
подтверждать механику.
|
||||
|
||||
Reference in New Issue
Block a user