задачи: цель упразднена, у проекта появилась стадия

Тип goal и индекс ROADMAP.md убраны: цель — зонтик над параллельными
направлениями, а у проекта на одного человека список работ линеен. Роадмап
при этом наполовину дублировал беклог, а «что уже умеет» отвечают спеки и
git log индекса. Секция «Готово» удалена, а не перенесена.

Вместо цели — ось «стадия проекта»: build (беклог это план стройки, порядок
строк значит зависимость, секция одна) и support (очередь правок, порядок
значит важность, секции — полки домена). Стадия объявляется ключом
[tasks] stage, меняется командой stage, без неё check отказывает: порядок
строк нечем прочитать.

Ушли теги goal:/decomposed, поле «Секция», раздел «Завершение», флаги
--goal и edit --section. Версия раскладки 2 → 3, перевод проекта расписан
записью журнала.
This commit is contained in:
av
2026-08-13 14:26:21 +03:00
parent 0627199a1a
commit 3849f084be
26 changed files with 1128 additions and 1485 deletions
+21 -22
View File
@@ -29,7 +29,7 @@
## Сопровождение и эксплуатация — целое и часть
Словарь этой темы — [shared/operations.md](../../../shared/operations.md):
целое и часть, три места одной темы (секция роадмапа, раздел архитектуры, тема
целое и часть, три места одной темы (задачи `chore`, раздел архитектуры, тема
ревью `operations`) и граница с возможностями проекта. Здесь он не
пересказывается: копия жила рядом с домом в одном дереве и была ровно тем
вторым домом, против которого правило и написано.
@@ -357,36 +357,35 @@ kebab-case.** Причина не эстетическая: имя файла с
вовсе, и отказом это быть не может.
Раскладку, форму записи и команды держит скилл `av-dev:task-track`. Ниже — то,
от чего зависит, читается ли проект как продукт: канон высказывается об этом
потому, что роадмап отвечает на вопрос о **системе**, а не о работах.
от чего зависит, читается ли проект как продукт.
**`ROADMAP.md` отвечает на «что приложение уже умеет и чего ещё не умеет».** Это
не очередь работ: цель — **возможность приложения**, задача — шаг к ней.
Достигнутая цель из роадмапа **не исчезает** — строка с датой переезжает в
секцию достигнутого, потому что «что умеет» и есть половина вопроса, ради
которого документ открывают. Вторым домом поведения роадмап при этом не
становится: нормативное поведение живёт в `openspec/specs/`, роадмап отвечает,
**когда и в каком порядке** оно появилось.
**Индекс работ один — `BACKLOG.md`, и «что приложение уже умеет» он не
отвечает.** На этот вопрос отвечают `openspec/specs/` (нормативное поведение) и
`git log` индекса (когда и в каком порядке оно появилось). Роадмапа в каноне
нет: половину своего вопроса он дублировал беклогом, а вторую — спеками.
**У каждой записи есть тип, и тип решает, что с ней можно делать.** Дом типа —
**У проекта есть стадия, и она решает, что значит порядок строк беклога:**
`build` — зависимость, `support` — важность. Канон её называет, потому что от
неё зависит, читается ли список работ как план стройки или как очередь правок;
механика — `task-track`, «Две стадии».
**У каждой задачи есть тип, и тип решает, что с ней можно делать.** Дом типа —
поле меты `Тип` первой строкой; эмодзи в заголовке от него производна. Словарь
закрыт:
| Тип | Что это |
| --- | --- |
| 🎯 `goal` | возможность приложения |
| ✨ `feature` | снаружи появляется то, чего не было |
| 🐞 `fix` | поведение расходится с заявленным |
| 🧹 `chore` | обслуживание, поведение не меняется |
| 🔬 `research` | исход — знание, а не изменение |
**Схемы записи здесь нет намеренно.** Какие разделы тип требует, нужна ли ему
цель и берётся ли он в работу — скилл `av-dev:task-track`, раздел «Тип
записи», подробно — по файлу на тип в его `references/task-<тип>.md`. Канон
фиксирует **словарь**, потому что
от него зависит, читается ли проект как продукт; схема — механика ведения задач,
и второй её экземпляр разошёлся бы с первым (он и разошёлся: канон успел
объявить цель у `fix` запрещённой, хотя она там необязательна).
**Схемы записи здесь нет намеренно.** Какие разделы тип требует — скилл
`av-dev:task-track`, раздел «Тип записи», подробно — по файлу на тип в его
`references/task-<тип>.md`. Канон фиксирует **словарь**, потому что от него
зависит, читается ли проект как продукт; схема — механика ведения задач, и второй
её экземпляр разошёлся бы с первым (он и разошёлся: канон успел объявить цель у
`fix` запрещённой, хотя она была необязательна, — и целей теперь нет вовсе).
Схема требуется **к взятию в работу**, а не к заведению: беклог пополняется чаще,
чем разбирается, и требование на входе выгоняло бы в заметки то, что должно
@@ -454,7 +453,7 @@ kebab-case.** Причина не эстетическая: имя файла с
| почему решено так | `adr/`, источник — архивный `design.md` либо записка разведки |
| граница домена, «чем не является» | `passport.md` |
| инвариант и его severity | `CLAUDE.md` |
| что приложение умеет и чего не умеет; порядок работ | `tasks/ROADMAP.md` |
| что осталось сделать и в каком порядке | `tasks/BACKLOG.md` |
| измеренное число | `research/` |
| настройка с числовым значением | `database.md` |
| периметр и модель угроз | `security.md` |
@@ -488,8 +487,8 @@ kebab-case.** Причина не эстетическая: имя файла с
| --- | --- |
| `docs/review-brief.md` | документы канона и есть бриф; остаток — в `review.md` |
| `docs/specs/` | `openspec/specs/` (поведение) и `architecture.md` (обзор) |
| `docs/drafts/` | идея → запись `research`; отказ → ADR; порядок → `ROADMAP.md`; размышление → `opsx:explore` |
| `docs/plan.md` | `tasks/ROADMAP.md` |
| `docs/drafts/` | идея → запись `research`; отказ → ADR; порядок → `BACKLOG.md`; размышление → `opsx:explore` |
| `docs/plan.md` | `tasks/BACKLOG.md` |
| `BRIEF.md` | `passport.md` |
| `docs/backlog/` | `tasks/` в корне репозитория |
| `docs/review-journal.md`, `docs/review/journal.md` | `docs/review.md` |
@@ -22,6 +22,48 @@
---
## Версия 3 — 2026-08-13
Тип записи `goal` и индекс `ROADMAP.md` упразднены; у проекта появилась
**стадия**`build` (беклог это план стройки, порядок строк значит зависимость)
или `support` (очередь правок, порядок значит важность).
Цель была зонтиком над параллельными направлениями — она нужна там, где список
работ нельзя выстроить в один порядок. У проекта, который ведёт один человек,
такого не бывает, и роадмап при этом наполовину дублировал беклог («чего ещё не
умеет» = «что осталось в списке»), а вторую половину («что уже умеет») отвечают
`openspec/specs/` и `git log` индекса.
**Что переехало.** Индекс остался один — `BACKLOG.md`. Поле меты `Секция` стало
`Категория`; теги `goal:<слаг>`, `decomposed` и раздел `Завершение` упразднены;
команды `list --goal`, `edit --goal`, `edit --section` и ключи `[tasks] roadmap`,
`[tasks] completion_heading` — тоже. Появились ключ `[tasks] stage`, команда
`tasks.py stage` и флаги `init --stage`, `adopt scan --stage`.
**Что сделать проекту.**
1. **Разобрать цели.** У каждой записи типа `goal` в `tasks/items/` два исхода, и
выбирает человек: она становится обычной задачей (`edit <слаг> --type
feature|fix|chore|research`) либо уходит (`close <слаг> --reason …`). Задачи,
носившие её тег, живут дальше сами по себе. Скрипт этого не решает и говорит
`НЕОДНОЗНАЧНО`.
2. **Перенести содержимое `ROADMAP.md`.** Секция `Готово` **удаляется**: «что
приложение умеет» отвечают спеки, «когда это появилось» — `git log`. Строки
`Запланировано`, `Направления` и `Сопровождение` — это цели, и они разбираются
шагом 1. Затем удалить сам файл и ключ `roadmap` из `.av-dev.toml`, если он там
был.
3. **Объявить стадию**`tasks.py stage build` или `tasks.py stage support`.
Приложение ещё строится и список работ линеен по зависимости — `build`;
работает и правится точечно — `support`. Без ключа `check` отказывает: порядок
строк нечем прочитать. На `build` секция беклога обязана остаться **одна**
слить полки надо руками, порядок строк в слитом списке знает только человек.
4. **Поднять версию**`docs.py bump`. Последним шагом.
5. `docs.py check` и `tasks.py check --dir <каталог задач>` — до отсутствия
дрейфа. Теги `goal:` и `decomposed`, поле `Секция` и старую форму меты снимет
`tasks.py check --fix`.
---
## Версия 2 — 2026-08-13
Скилл `doc-canon` стал `canon`: префикс называл материал (`doc-`), а скилл
+2 -2
View File
@@ -32,7 +32,7 @@
# Паспорт проекта
Зачем это и для кого. [architecture.md](architecture.md) отвечает «как
устроено», [tasks/ROADMAP.md](../tasks/ROADMAP.md) — «в каком порядке», паспорт —
устроено», [tasks/BACKLOG.md](../tasks/BACKLOG.md) — «что осталось», паспорт —
«зачем и для кого».
## Цель
@@ -261,7 +261,7 @@
## Последствия
- `+` что стало лучше.
- `` чем платим: ограничения, риски, нагрузка на поддержку.
- `` чем платим: ограничения, риски, нагрузка на сопровождение.
```
## `docs/review.md`
+2 -2
View File
@@ -127,10 +127,10 @@ NOT_DOCS = {".docs.json", ".pm.json", "tasks"}
RETIRED = {
"review-brief.md": "документы канона и есть бриф; остаток — в review",
"review-journal.md": "→ документ review",
"plan.md": "→ tasks/ROADMAP.md (ведёт скилл task-track)",
"plan.md": "→ tasks/BACKLOG.md (ведёт скилл task-track)",
"local-research.md": "→ документ research",
"specs": "поведение → openspec/specs/, обзор → тема architecture",
"drafts": "идея → запись research, отказ → ADR, порядок → ROADMAP.md",
"drafts": "идея → запись research, отказ → ADR, порядок → BACKLOG.md",
"backlog": "→ tasks/ в корне репозитория (ведёт скилл task-track)",
}