задачи ведутся автономно, вопросы выносятся блокерами
- умолчание — делать, а не спрашивать: развилка вынимается пунктом в секцию `блокеры` беклога, задача переформулируется на остаток и доводится до коммита - спрашиваем только про необратимое: деплой, выкладку наружу, удаление данных - находка ревью с пометкой «развилка» больше не останавливает работу, а уезжает блокером с вариантами и ценой каждого
This commit is contained in:
@@ -109,7 +109,7 @@ healthlog этот перевес сильнее обычного: сырой а
|
|||||||
трогается инвариант сохранности данных (дословность точки, состав
|
трогается инвариант сохранности данных (дословность точки, состав
|
||||||
координатного ключа, правило слияния, срок жизни архива, раздельность
|
координатного ключа, правило слияния, срок жизни архива, раздельность
|
||||||
токенов), либо надо менять спеку. Формулируй готовым вопросом с 2–3
|
токенов), либо надо менять спеку. Формулируй готовым вопросом с 2–3
|
||||||
вариантами: оркестратор передаст его человеку через `AskUserQuestion` почти
|
вариантами: оркестратор передаст его человеку блокером в беклог почти
|
||||||
дословно.
|
дословно.
|
||||||
|
|
||||||
Сомневаешься — ставь `развилка`. Ошибка в сторону лишнего вопроса дешевле
|
Сомневаешься — ставь `развилка`. Ошибка в сторону лишнего вопроса дешевле
|
||||||
|
|||||||
@@ -192,8 +192,9 @@ read-modify-write под конкурентными доставками, а т
|
|||||||
## Что происходит с находками дальше
|
## Что происходит с находками дальше
|
||||||
|
|
||||||
- Оркестратор чинит помеченное `Действие: инлайн` и **не логирует мелочь**.
|
- Оркестратор чинит помеченное `Действие: инлайн` и **не логирует мелочь**.
|
||||||
- `Действие: развилка` — на человека через `AskUserQuestion`, вопросом с
|
- `Действие: развилка` — блокером в секцию `блокеры` беклога, вопросом с
|
||||||
вариантами.
|
вариантами и ценой каждого. Оркестратор не останавливается: он урезает
|
||||||
|
изменение до остатка и доводит его.
|
||||||
- Находка не для этого мерджа, но реальная (отложенный `major`, развилка,
|
- Находка не для этого мерджа, но реальная (отложенный `major`, развилка,
|
||||||
решённая «потом») — не теряется: заводится задачей через скилл `backlog`
|
решённая «потом») — не теряется: заводится задачей через скилл `backlog`
|
||||||
(интейк из ревью), с оракулом и провенансом в теле. Мелочь класса `nit` — в
|
(интейк из ревью), с оракулом и провенансом в теле. Мелочь класса `nit` — в
|
||||||
|
|||||||
@@ -77,7 +77,8 @@
|
|||||||
|
|
||||||
`инлайн` — оркестратор чинит сам, не спрашивая и не логируя. `развилка` — цена
|
`инлайн` — оркестратор чинит сам, не спрашивая и не логируя. `развилка` — цена
|
||||||
исправления сопоставима с переработкой, либо выбор меняет scope, либо решение
|
исправления сопоставима с переработкой, либо выбор меняет scope, либо решение
|
||||||
трогает инвариант: идёт человеку через `AskUserQuestion` вопросом с вариантами.
|
трогает инвариант: уезжает блокером в беклог вопросом с вариантами и ценой
|
||||||
|
каждого, а работа продолжается на остатке.
|
||||||
|
|
||||||
Потребитель отчёта — оркестратор, который **реализует прочитанное**. Поэтому
|
Потребитель отчёта — оркестратор, который **реализует прочитанное**. Поэтому
|
||||||
потолок в 7 пунктов — не забота о внимании читателя, а защита кодовой базы от
|
потолок в 7 пунктов — не забота о внимании читателя, а защита кодовой базы от
|
||||||
|
|||||||
@@ -38,15 +38,39 @@ healthlog — хранилище данных о здоровье, у котор
|
|||||||
|
|
||||||
## Принцип автономности
|
## Принцип автономности
|
||||||
|
|
||||||
Зови пользователя (через **AskUserQuestion**) только когда решение реально его:
|
**Умолчание — делать, а не спрашивать.** Задача доводится до коммита без
|
||||||
|
участия человека; предполагается, что так пройдёт большинство задач.
|
||||||
|
|
||||||
- **Выбор задачи**, если он не задан явно.
|
Наткнулся на вопрос, который решать не тебе, — **не останавливайся и не
|
||||||
- **Развилки грумминга** на explore: несколько равнозначных направлений,
|
спрашивай**. Вынь его блокером и продолжай:
|
||||||
спорный scope, продуктовый компромисс.
|
|
||||||
- **Замечания ревью спек**, требующие выбора: смена подхода, урезание/расширение
|
1. Заведи пункт в секции `блокеры` беклога:
|
||||||
scope, риск инварианту хранения данных.
|
`backlog.py add --slug <slug> --priority блокеры --hook <что заблокировано>`.
|
||||||
- Всё остальное — механика: делаем без спроса. Мелкие замечания ревью чиним
|
Тело отвечает на три вопроса: **что именно решить**, **какие есть варианты
|
||||||
инлайн, не логируем.
|
и цена каждого**, **что стоит, пока решения нет**. Плюс твоя рекомендация —
|
||||||
|
человек чаще соглашается, чем выбирает заново, и готовое суждение экономит
|
||||||
|
ему весь контекст.
|
||||||
|
2. **Переформулируй задачу на остаток** — то, что делается без этого решения.
|
||||||
|
Впиши в её тело ссылку на блокер и границу: докуда доводим сейчас.
|
||||||
|
3. Доведи остаток до конца и закоммить. Задача не «висит на вопросе», она
|
||||||
|
сделана в объявленных границах.
|
||||||
|
|
||||||
|
Если полезного остатка нет вовсе — блокер заводится, задача остаётся на месте
|
||||||
|
со ссылкой на него, и берётся следующая. Это редкий случай; чаще остаток есть.
|
||||||
|
|
||||||
|
Блокеры разбираются пачками, а не по одному: прерывать поток ради каждого
|
||||||
|
дороже, чем накопить.
|
||||||
|
|
||||||
|
### Когда всё-таки спрашивать
|
||||||
|
|
||||||
|
Узко и по другому основанию — не «сложное решение», а **необратимое действие**:
|
||||||
|
|
||||||
|
- деплой, выкладка наружу, смена публичного адреса или токенов;
|
||||||
|
- удаление или перезапись данных в `./data`, включая подрезку архива;
|
||||||
|
- всё, что уходит за пределы машины.
|
||||||
|
|
||||||
|
Здесь ошибка не откатывается коммитом, поэтому спрашиваем даже когда решение
|
||||||
|
кажется очевидным. Развилка в дизайне — блокер; необратимое действие — вопрос.
|
||||||
|
|
||||||
Стиль правок — заточка под проект и конвенции, right-size, без золочения.
|
Стиль правок — заточка под проект и конвенции, right-size, без золочения.
|
||||||
|
|
||||||
@@ -56,8 +80,9 @@ healthlog — хранилище данных о здоровье, у котор
|
|||||||
|
|
||||||
- Если задача задана (slug, файл в `docs/backlog/` или описание) — прочитай её
|
- Если задача задана (slug, файл в `docs/backlog/` или описание) — прочитай её
|
||||||
файл и связанные спеки/черновики.
|
файл и связанные спеки/черновики.
|
||||||
- Если не задана — покажи топ-кандидатов из `docs/backlog/README.md` (высокий
|
- Если не задана — выбирай сам: верхняя секция приоритета, не `[idea]`, не
|
||||||
приоритет, не `[idea]`) через **AskUserQuestion** и дай выбрать.
|
заблокированная целиком. Из равных бери ту, что разблокирует больше других.
|
||||||
|
Выбор объявляешь в докладе, а не согласовываешь заранее.
|
||||||
- Задача с префиксом `[idea]` (ещё без решения «делаем») — сперва обязательно
|
- Задача с префиксом `[idea]` (ещё без решения «делаем») — сперва обязательно
|
||||||
через explore (шаг 2), там она либо становится задачей, либо остаётся идеей.
|
через explore (шаг 2), там она либо становится задачей, либо остаётся идеей.
|
||||||
|
|
||||||
@@ -74,8 +99,9 @@ healthlog — хранилище данных о здоровье, у котор
|
|||||||
### 2. (Опц.) Груммить идею — `opsx:explore`
|
### 2. (Опц.) Груммить идею — `opsx:explore`
|
||||||
|
|
||||||
Только для `[idea]`-задач или когда постановка мутная. Вызови Skill
|
Только для `[idea]`-задач или когда постановка мутная. Вызови Skill
|
||||||
`opsx:explore`. Развилки грумминга — на пользователя (AskUserQuestion). Выход:
|
`opsx:explore`. Развилку грумминга не выноси на человека — заведи блокером и
|
||||||
ясная постановка, готовая к propose. **В explore не пишем код.**
|
груми остаток. Выход: ясная постановка, готовая к propose. **В explore не
|
||||||
|
пишем код.**
|
||||||
|
|
||||||
### 3. Завести change — `opsx:propose`
|
### 3. Завести change — `opsx:propose`
|
||||||
|
|
||||||
@@ -99,7 +125,8 @@ healthlog — хранилище данных о здоровье, у котор
|
|||||||
### 5. Отработать замечания ревью предложения
|
### 5. Отработать замечания ревью предложения
|
||||||
|
|
||||||
- Мелочь и явные улучшения — правь сам в спеках/дизайне.
|
- Мелочь и явные улучшения — правь сам в спеках/дизайне.
|
||||||
- Развилки (компромисс, scope, инвариант) — на пользователя (AskUserQuestion).
|
- Развилки (компромисс, scope, инвариант) — блокером, спеки урезаются на
|
||||||
|
остаток.
|
||||||
- После правок перепрогони `openspec validate --strict <id>`.
|
- После правок перепрогони `openspec validate --strict <id>`.
|
||||||
|
|
||||||
### 6. Написать код — `opsx:apply`
|
### 6. Написать код — `opsx:apply`
|
||||||
@@ -138,8 +165,8 @@ healthlog — хранилище данных о здоровье, у котор
|
|||||||
покрытия.
|
покрытия.
|
||||||
|
|
||||||
Отработай так же, как шаг 5: помеченное `инлайн` чини сам и не логируй,
|
Отработай так же, как шаг 5: помеченное `инлайн` чини сам и не логируй,
|
||||||
`развилка` — на пользователя через AskUserQuestion (вопрос уже сформулирован
|
`развилка` — блокером в беклог (вопрос уже сформулирован триажем, его остаётся
|
||||||
триажем). После правок — снова `task gate`.
|
перенести). После правок — снова `task gate`.
|
||||||
|
|
||||||
**Границы покрытия из отчёта не выбрасывай** — они уезжают в финальный доклад
|
**Границы покрытия из отчёта не выбрасывай** — они уезжают в финальный доклад
|
||||||
(шаг 10) сжатой строкой. Отчёт, из которого исчезло «что проверить было
|
(шаг 10) сжатой строкой. Отчёт, из которого исчезло «что проверить было
|
||||||
@@ -173,8 +200,8 @@ healthlog — хранилище данных о здоровье, у котор
|
|||||||
сделано», тело списком 1–3 пункта, без трейлеров). Одна задача — один
|
сделано», тело списком 1–3 пункта, без трейлеров). Одна задача — один
|
||||||
осмысленный коммит.
|
осмысленный коммит.
|
||||||
|
|
||||||
Готово — доложи пользователю кратко: что сделано, какие развилки решались,
|
Готово — доложи пользователю кратко: что сделано, какие блокеры заведены и
|
||||||
ссылка на архивный change. **Плюс одна строка границ покрытия** из отчёта
|
чем ограничен остаток, ссылка на архивный change. **Плюс одна строка границ покрытия** из отчёта
|
||||||
ревью: какой профиль гонялся и что проверить было невозможно. Доклад без неё
|
ревью: какой профиль гонялся и что проверить было невозможно. Доклад без неё
|
||||||
сообщает «проверено», не сообщая, что именно.
|
сообщает «проверено», не сообщая, что именно.
|
||||||
|
|
||||||
@@ -188,7 +215,7 @@ healthlog — хранилище данных о здоровье, у котор
|
|||||||
всегда, но в профиле `quick`.
|
всегда, но в профиле `quick`.
|
||||||
- Гейт блокирует: пока `task gate` красный, опиниативные проходы не
|
- Гейт блокирует: пока `task gate` красный, опиниативные проходы не
|
||||||
запускаются. Чинить и перезапускать, а не «посмотреть заодно».
|
запускаются. Чинить и перезапускать, а не «посмотреть заодно».
|
||||||
- Если ревью предлагает крупную переработку — это развилка, не правь молча,
|
- Если ревью предлагает крупную переработку — это развилка: не правь молча и
|
||||||
вынеси пользователю.
|
не спрашивай, заведи блокером и доведи остаток.
|
||||||
- Держи пользователя в цикле короткими репликами на переходах фаз, но не проси
|
- Держи пользователя в цикле короткими репликами на переходах фаз, но не проси
|
||||||
подтверждать механику.
|
подтверждать механику.
|
||||||
|
|||||||
@@ -84,6 +84,13 @@ Module path — `git.vakhrushev.me/av/healthlog`.
|
|||||||
`opsx:archive` → чистка беклога → коммит. Ревью — скилл `review-pipeline`,
|
`opsx:archive` → чистка беклога → коммит. Ревью — скилл `review-pipeline`,
|
||||||
проходы — агенты `healthlog-review-*`.
|
проходы — агенты `healthlog-review-*`.
|
||||||
|
|
||||||
|
**Действуем автономно.** Умолчание — делать, а не спрашивать. Вопрос, который
|
||||||
|
решать не мне, **вынимается блокером** в секцию `блокеры` беклога (что решить,
|
||||||
|
варианты с ценой каждого, что стоит без решения, рекомендация), задача
|
||||||
|
переформулируется на остаток, остаток доводится до коммита. Блокеры
|
||||||
|
разбираются пачками. Спрашиваем только про **необратимое**: деплой, выкладку
|
||||||
|
наружу, удаление или перезапись данных в `./data`.
|
||||||
|
|
||||||
Гейт блокирует: пока `task gate` красный, опиниативные проходы ревью не
|
Гейт блокирует: пока `task gate` красный, опиниативные проходы ревью не
|
||||||
запускаются.
|
запускаются.
|
||||||
|
|
||||||
|
|||||||
@@ -4,6 +4,15 @@
|
|||||||
Приоритет — грубая оценка «ценность / стоимость». Спекулятивные
|
Приоритет — грубая оценка «ценность / стоимость». Спекулятивные
|
||||||
задачи помечены `[idea]` в заголовке. Ведётся скиллом `backlog`.
|
задачи помечены `[idea]` в заголовке. Ведётся скиллом `backlog`.
|
||||||
|
|
||||||
|
**Блокеры** — вопросы, вынутые из задач. Работа над задачей идёт автономно; если
|
||||||
|
внутри обнаружился вопрос, который решать не мне, он **вынимается** отдельным
|
||||||
|
пунктом сюда, а сама задача переформулируется на остаток и продолжается. Пункт
|
||||||
|
блокера отвечает на три вопроса: что именно решить, какие есть варианты с ценой
|
||||||
|
каждого, и что заблокировано, пока решения нет. Разбираются пачками, а не по
|
||||||
|
одному — прерывать поток ради каждого дороже, чем накопить.
|
||||||
|
|
||||||
|
## блокеры
|
||||||
|
|
||||||
## высокий
|
## высокий
|
||||||
- [Разбор метрик в часовые объекты](razbor-metrik-v-obekty.md) — Доставки копятся непрозрачными телами — точек в хранилище нет вовсе, всё остальное упирается в это
|
- [Разбор метрик в часовые объекты](razbor-metrik-v-obekty.md) — Доставки копятся непрозрачными телами — точек в хранилище нет вовсе, всё остальное упирается в это
|
||||||
- [Тренировки и секции с собственными id](trenirovki-i-zapisi.md) — Тренировки с геотреком и состояние разума приходят, но не разбираются — без них не закрыть ни трекер, ни агента-медика
|
- [Тренировки и секции с собственными id](trenirovki-i-zapisi.md) — Тренировки с геотреком и состояние разума приходят, но не разбираются — без них не закрыть ни трекер, ни агента-медика
|
||||||
|
|||||||
Reference in New Issue
Block a user