mermaid там, где структура — граф или автомат

Критерий: диаграмма заводится, если структура граф или автомат, а проза
вынуждена его пересказывать. Где структура таблица соответствий — чек-лист
синка, профили ревью, коды выхода — не заводится: дублировала бы таблицу
и разошлась с ней.

tasks: жизненный цикл записи по индексам — состояния это где числится
строка, файл items/ не двигается ни на одном переходе.
session: четыре шага сессии; текст говорил «это зависимость, а не список»,
но зависимости не показывал — теперь на рёбрах написано, что ломается.
sprint.md: исходы задачи в спринте плюс два ребра, где порядок нарушается
молча — урожай до sprint close и блокер в обход исходов.
task-pipeline: одиннадцать шагов с развилкой «тривиальная» и досрочным
исходом «крупнее задачи».
promote.md: храповик находка → конвенция → правило → удаление, с обратным
ребром; обязательность третьего шага теперь видна как ребро.
calibration.md: счётчик retune до drop — таблица вердиктов его выразить
не может, автомат может.
README: граф вызовов между плагинами; односторонность зависимости
pipeline → pm видна сразу.

Все девять блоков прогнаны через mermaid-cli. README-схема и автомат
калибровки переверстаны после просмотра: subgraph'ы ломали раскладку,
self-loop наезжал подписями.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
av
2026-08-03 20:32:17 +03:00
co-authored by Claude Opus 5
parent 57714c3549
commit dd69251d04
8 changed files with 190 additions and 3 deletions
+19
View File
@@ -121,6 +121,25 @@ description: Ритуал между спринтами и ведение сам
4. **Выбор цели и набор спринта.** Цель называет человек, набор собирает агент и
показывает **до старта работ**.
Рёбра подписаны тем, что ломается при их нарушении:
```mermaid
flowchart TD
check["tasks.py check (+ --fix)<br/>результат — строкой в доклад"]
s1["1. Разбор вопросов<br/>пачкой, не больше трёх за раз"]
s2["2. Разбор прошедшего спринта<br/>про процесс → docs/review.md"]
s3["3. Переоценка задач порциями"]
s4["4. Цель называет человек,<br/>набор собирает агент"]
sprint["спринт: набор заморожен"]
check --> s1
s1 --> s2
s2 --> s3
s1 -->|"неотвеченный вопрос → переоценка вслепую"| s3
s3 -->|"без переоценки набор берётся из протухшего"| s4
s4 --> sprint
```
Процедура каждого шага, размер и отбор порции, храповик на залежавшихся, формат
интерактива и доклад — [references/cadence.md](references/cadence.md).
@@ -29,6 +29,36 @@
«все сделаны»: иначе одна застрявшая задача держит спринт бесконечно. Затем
`sprint close`.
```mermaid
flowchart TD
take["sprint take — задача в наборе"]
done["сделана<br/>close --implemented"]
out["вышла<br/>sprint drop --reason"]
epic["переросла в эпик<br/>распознаётся до заведения change"]
cancel["отменена решением по ходу<br/>close --reason"]
all{"по каждой задаче набора<br/>наступил исход?"}
harvest["урожай заводится интейком tasks"]
close["sprint close"]
dissolve["sprint close --dissolve --reason<br/>недоделанное — в беклог"]
take --> done
take --> out
take --> epic
take --> cancel
done --> all
out --> all
epic --> all
cancel --> all
all -->|да| harvest
harvest -->|"тег sprint: ставится, пока SPRINT.md не очищен"| close
take -->|"продолжать нечем ни одной задачей — блокер"| dissolve
done -->|"приёмка не сошлась: reopen --reason"| take
```
Два ребра на схеме — те, где порядок обязателен и нарушается молча: **урожай до
`sprint close`** (после команды автотег уже не поставится) и **блокер в обход
исходов** (спринт распускается, а не ждёт).
**Урожай заводится при закрытии спринта, а не при закрытии задачи.** Это
обязанность закрывающего: пройти по спискам находок от исполнителей и завести
недостающее интейком скилла `tasks` — с дедупликацией и картой человеку. Заводимое
+28
View File
@@ -77,6 +77,34 @@ docs/tasks/
даром: `SPRINT.md` лежит под git, `git log -p docs/tasks/SPRINT.md` отдаёт историю
всех наборов без отдельного журнала.
Куда запись может переехать и какой командой — весь набор переходов:
```mermaid
stateDiagram-v2
state "BACKLOG.md — что берут" as B
state "PLAN.md — подо что берут" as P
state "SPRINT.md — набор спринта" as S
state "REJECTED.md — ушла без реализации" as R
state "записи нет — реализована" as D
[*] --> B: add
[*] --> P: add --type goal
B --> P: edit --type goal --section
P --> B: edit --type task --section
B --> S: sprint take
S --> B: sprint drop --reason
S --> D: close --implemented
B --> R: close --reason
S --> R: close --reason
D --> B: reopen --reason
R --> B: reopen --reason
```
Состояния здесь — **где числится строка**, а не где лежит файл: файл
`items/<slug>.md` не двигается ни на одном переходе. Стрелок «руками» на схеме
нет намеренно — каждый переход это команда, и другого способа его совершить не
существует.
## Цели
**Цель — такой же файл в `items/`, тип `[goal]`**, перечисленный в `PLAN.md`: