From d7e9740c7367c44170edfa3b7966e70126b9f28d Mon Sep 17 00:00:00 2001 From: Anton Vakhrushev Date: Tue, 4 Aug 2026 20:17:53 +0300 Subject: [PATCH] =?UTF-8?q?=D1=81=D0=B5=D0=BA=D1=86=D0=B8=D1=8F=20=D1=80?= =?UTF-8?q?=D0=BE=D0=B0=D0=B4=D0=BC=D0=B0=D0=BF=D0=B0=20=C2=AB=D0=A1=D0=BE?= =?UTF-8?q?=D0=BF=D1=80=D0=BE=D0=B2=D0=BE=D0=B6=D0=B4=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5=C2=BB=20=D0=B8=20=D0=BE=D0=B1=D1=89=D0=B8=D0=B9=20=D1=81?= =?UTF-8?q?=D0=BB=D0=BE=D0=B2=D0=B0=D1=80=D1=8C=20=D1=82=D1=80=D1=91=D1=85?= =?UTF-8?q?=20=D0=BC=D0=B5=D1=81=D1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit «Разработка» называла слишком много: роадмап весь про разработку, и секция с таким именем не отличалась от остальных ничем. Стало Сопровождение | Operations. Смысл расширен вместе с именем: было «инструмент и процесс», стало «чем держат проект: инструмент, процесс, эксплуатация». Расширение не косметическое — английское Operations при узком смысле обещало бы эксплуатацию, а внутри лежал бы линтер. Метрики, логи, инфраструктура и выкладка в эту секцию просятся и так. Заодно синхронизирован словарь трёх мест канона, которые про одну тему. Сопровождение — всё, чем держат проект; эксплуатация — его часть, работа системы на проде. ROADMAP.md, секция Сопровождение — план работ; architecture.md, раздел «Эксплуатация» — как устроено сейчас; эксплуатационный проход ревью — оптика проверки. Сливать их в одно слово было бы ошибкой: они отвечают на разные вопросы. Синхронизирован словарь, а не границы; дом — canon.md. Слово «поддержка» запрещено вовсе: в нём слышится помощь пользователю. Граница с возможностями проходит по тому, кто наблюдает: «приложение сообщает о своём состоянии» — возможность, «дежурный видит состояние на одном экране» — сопровождение. Версия канона не менялась, и это законно: ни один проект на каноне 3 не стоит, оба держат канон 2. Запись версии 3 правится как черновик, а не как история — версия отделяет одно состояние проектов от другого, а не одну редакцию текста от другой. DECISIONS тема 25 (ЧЧЧ, ШШШ, ЩЩЩ, следствия 96–97). Co-Authored-By: Claude Opus 5 (1M context) --- DECISIONS.md | 53 +++++++++++++++++++ TODO.md | 4 +- av-dev-pm/skills/canon/references/canon.md | 23 ++++++++ .../skills/canon/references/changelog.md | 9 ++-- av-dev-pm/skills/tasks/SKILL.md | 35 ++++++++---- .../skills/tasks/references/task-format.md | 2 +- av-dev-pm/skills/tasks/scripts/tasks.py | 13 ++--- 7 files changed, 116 insertions(+), 23 deletions(-) diff --git a/DECISIONS.md b/DECISIONS.md index 7347dd0..fe54089 100644 --- a/DECISIONS.md +++ b/DECISIONS.md @@ -1728,3 +1728,56 @@ ADR, запискам разведки и сообщениям коммитов Из пяти языковых находок три приняты сразу, две отклонены — и обе отклонённые указывали на одно и то же место канона (правило 4 без оговорки). Вкусовых находок не было ни одной: порог держится. + +## 25. Секция `Сопровождение` и общий словарь трёх мест (2026-08-04) + +### Что было + +`Разработка` — имя, которое называло слишком много: роадмап **весь** про +разработку, и секция с таким именем не отличалась от остальных ничем. Предложено +`Сопровождение` (англ. `Operations`). + +### Решено + +**ЧЧЧ. Секция называется `Сопровождение` / `Operations`, и её смысл расширен.** +Было «инструмент и процесс», стало «чем держат проект: инструмент, процесс, +эксплуатация». Расширение не косметическое: английское `Operations` при узком +смысле обещало бы эксплуатацию, а внутри лежал бы линтер. Либо слово, либо +смысл — сошлись на смысле, потому что метрики, логи, инфраструктура и выкладка +в эту секцию просятся и так. + +**ШШШ. Версия канона не менялась, и это законно.** Ни один проект на каноне 3 не +стоит: healthlog и jellybit держат канон 2, повышение только предстоит. Запись +версии 3 правится **как черновик**, а не как история: тот, кто по ней поедет, +увидит сразу `Сопровождение`. Версия отделяет одно **состояние проектов** от +другого, а не одну редакцию текста от другой. + +**ЩЩЩ. Сопровождение и эксплуатация — целое и часть, и словарь у трёх мест +общий.** Тема живёт в трёх документах, и раньше каждое место говорило своим +словом. Теперь: сопровождение — всё, чем держат проект (инструмент, процесс, +выкладка, метрики, логи, инфраструктура, дежурство); эксплуатация — его часть, +работа системы на проде. + +| Место | Уровень | Что там | +| --- | --- | --- | +| `ROADMAP.md`, секция `Сопровождение` | план | работы, которые собираемся делать | +| `architecture.md`, раздел «Эксплуатация» | состояние | как устроено сейчас | +| эксплуатационный проход ревью | оптика | «это упало через неделю на проде» | + +**Сливать три места в одно слово было бы ошибкой**: они отвечают на разные +вопросы — план, состояние, проверка. Синхронизирован **словарь**, а не границы; +дом словаря — `canon.md`. + +Слово **«поддержка» запрещено вовсе**: в нём слышится помощь пользователю, а это +третья работа, к этим двум не относящаяся. + +### Что из этого следует + +96. **Граница с возможностями проходит по тому, кто наблюдает.** «Приложение + сообщает о своём состоянии» — возможность (наблюдает пользователь сервиса); + «дежурный видит состояние на одном экране» — сопровождение (наблюдаем мы). + Одни и те же метрики попадают в разные секции роадмапа, и это верно. +97. **`check --fix` чужую секцию не переименовывает — и правильно.** На + переименовании `Разработка` → `Сопровождение` проверка назвала секцию + роадмапа чужой и остановилась: регистр она правит сама, смысл — нет. Ровно + то поведение, которое нужно проекту при повышении канона. diff --git a/TODO.md b/TODO.md index bd840c6..da3fef0 100644 --- a/TODO.md +++ b/TODO.md @@ -168,13 +168,13 @@ jellybit 43. Шаги повышения — [changelog.md](av-dev-pm/skills/can идёт в ближайший набор (`sprint take` без них откажет), остальное по ходу переоценки (PPP) - [ ] секции роадмапа: `порядок` → `Запланировано`, `темы` → `Направления`, - завести `Готово` и `Разработка`; прозаические разделы healthlog («Что уже + завести `Готово` и `Сопровождение`; прозаические разделы healthlog («Что уже пройдено», «Почему в таком порядке») разложить — звенья строками в `Готово`, обоснование очереди прозой внутри `Запланировано` (тема 19, 80). `check` теперь называет чужую секцию ошибкой, так что шаг обязателен - [ ] переформулировать цели ответом на «что приложение будет уметь»; цели не про приложение («Процесс и качество разработки» в jellybit) — в - `Разработка` + `Сопровождение` - [ ] `check --fix` на обоих: поднимет написание канонических секций, поставит отбивку после заголовков и сведёт секцию в мете файлов с заголовками. Секции беклога переименовать руками — имена выбирал проект (тема 20, ККК) diff --git a/av-dev-pm/skills/canon/references/canon.md b/av-dev-pm/skills/canon/references/canon.md index d3a5f64..2bba986 100644 --- a/av-dev-pm/skills/canon/references/canon.md +++ b/av-dev-pm/skills/canon/references/canon.md @@ -22,6 +22,29 @@ [language.md](language.md): информационный стиль, англицизмы, жаргон. Он относится и к задачам, и к решениям ADR, и к запискам разведки. +## Сопровождение и эксплуатация — целое и часть + +Одна тема живёт в трёх местах канона, и путать их слова нельзя. + +**Сопровождение** — всё, чем держат проект: инструмент и сборка, процесс, +выкладка, метрики и логи, инфраструктура, дежурство. **Эксплуатация** — его +часть: работа системы на проде. Целое и часть, и никогда наоборот. + +| Место | Уровень | Что там | +| --- | --- | --- | +| `ROADMAP.md`, секция `Сопровождение` | план | **работы**, которые собираемся делать: цели и их задачи | +| `architecture.md`, раздел «Эксплуатация» | состояние | **как устроено сейчас**: где работает, что рядом, кто перезапускает | +| эксплуатационный проход ревью | оптика | **чем проверяем**: «это упало через неделю на проде» | + +Слово **«поддержка» не употребляется вовсе** — в нём слышится помощь +пользователю, а это другая работа. + +**Граница с возможностями проходит по тому, кто наблюдает.** «Приложение +сообщает о своём состоянии» — возможность приложения, её место среди прочих +целей: наблюдает пользователь сервиса. «Дежурный видит состояние на одном +экране» — сопровождение: наблюдаем мы. Одни и те же метрики попадают в разные +секции роадмапа, и это верно — секции отвечают на разные вопросы. + ## Раскладка ``` diff --git a/av-dev-pm/skills/canon/references/changelog.md b/av-dev-pm/skills/canon/references/changelog.md index 5fe4c2f..df995f8 100644 --- a/av-dev-pm/skills/canon/references/changelog.md +++ b/av-dev-pm/skills/canon/references/changelog.md @@ -34,8 +34,9 @@ upgrade` идёт по записям снизу вверх от версии п 3. **Секции роадмапа** — четыре вместо двух и **канонические**, в отличие от секций беклога: `Готово` (достигнутые цели строкой с датой, без ссылки на файл), `Запланировано` (очередь значима), `Направления` (очереди нет), - `Разработка` (инструмент и процесс, не возможности приложения). Английский - вариант — `Done` | `Planned` | `Directions` | `Tooling`, один язык на весь + `Сопровождение` (чем держат проект: инструмент, процесс, эксплуатация — + не возможности приложения). Английский + вариант — `Done` | `Planned` | `Directions` | `Operations`, один язык на весь индекс. Переименованию проектом не подлежат: у каждой свой смысл, и в первую пишет сам `close`; `tasks.py check` проверяет состав. 4. **Форма заголовка записи** — по типу: задача отвечает на «что нужно сделать» @@ -92,7 +93,7 @@ upgrade` идёт по записям снизу вверх от версии п идентичности**, — и убрать остальное, иначе проект возвращает себе прежнюю частоту полного набора уточнением. 7. Переименовать секции роадмапа: `порядок` → `Запланировано`, `темы` → - `Направления`; завести `Готово` **первой** и `Разработка` последней. + `Направления`; завести `Готово` **первой** и `Сопровождение` последней. Прозаические разделы вроде «Что уже пройдено», которые велись руками, разложить: звенья — строками в `Готово` (дата, слаг, что стало возможно), обоснование очереди оставить прозой в `Запланировано`. Любой `##` в индексе @@ -100,7 +101,7 @@ upgrade` идёт по записям снизу вверх от версии п 8. Переформулировать цели ответом на **«что приложение будет уметь»**: не «Работа со слиянием», а «Исход слияния не зависит от порядка доставки». Свойство поведения — законная цель. Цель, которая не про приложение - (процесс, инструмент), переезжает в `Разработка`. + (процесс, инструмент, эксплуатация), переезжает в `Сопровождение`. 9. `[epic]`, если он в проекте заводился: это либо цель, либо набор задач под общей целью. `check` назовёт его неизвестным типом. 10. Прогнать `python3 tasks.py check --dir docs/tasks --fix`: он поднимет diff --git a/av-dev-pm/skills/tasks/SKILL.md b/av-dev-pm/skills/tasks/SKILL.md index cd02635..e3a7cc4 100644 --- a/av-dev-pm/skills/tasks/SKILL.md +++ b/av-dev-pm/skills/tasks/SKILL.md @@ -74,7 +74,7 @@ docs/tasks/ | `Готово` | `Done` | достигнутые цели — строкой с датой, **без ссылки на файл**: файл удалён, поведение живёт в спеках | | `Запланировано` | `Planned` | очередь значима и обосновывается прозой рядом | | `Направления` | `Directions` | очереди нет, тянутся долго | -| `Разработка` | `Tooling` | инструмент и процесс — не возможности приложения, и потому отдельно | +| `Сопровождение` | `Operations` | чем держат проект: инструмент, процесс, эксплуатация — не возможности приложения, и потому отдельно | **Секции роадмапа канонические, секции беклога — нет**, и разница не в любви к единообразию. У каждой секции роадмапа свой смысл, в первую пишет сам `close`, и @@ -92,9 +92,11 @@ docs/tasks/ файлов: имя секции принадлежит заголовку индекса, файл на неё только ссылается); отбивку он ставит везде. -Оговорка про `Разработка`: слово `окружение` сюда не годится — в +Оговорка про `Сопровождение`: слово `окружение` сюда не годится — в `architecture.md` оно уже значит боевое окружение приложения, и одно слово в двух -смыслах развело бы документы канона. +смыслах развело бы документы канона. А `Разработка`, стоявшая тут раньше, +называла слишком много: роадмап **весь** про разработку, и секция с таким именем +не отличалась от остальных ничем. **Секции «блокеры» в беклоге нет.** Блокер — это *состояние* (спринт не может продолжаться ни одной задачей), а не полка: он живёт ровно до ответа человека, и @@ -173,15 +175,28 @@ stateDiagram-v2 только, чтобы формулировка отвечала на «что приложение делает», а не на «какую часть кода мы трогаем». -**Что целью не является — работа над инструментом и процессом.** Сборка, -проверки, сам этот скилл: на вопрос «что приложение будет уметь» они не -отвечают. Им -отведена отдельная секция роадмапа, чтобы они были видны в том же экране и при -этом не читались как возможности продукта. +**Что целью не является — работа, которой держат проект.** Сборка, проверки, +сам этот скилл, а также выкладка, мониторинг и дежурство: на вопрос «что +приложение будет уметь» они не отвечают. Им отведена отдельная секция роадмапа, +чтобы они были видны в том же экране и при этом не читались как возможности +продукта. + +**Граница проходит по тому, кто наблюдает, а не по теме.** «Приложение сообщает +о своём состоянии» — возможность: наблюдает пользователь сервиса, и цели место +среди прочих. «Дежурный видит состояние на одном экране» — сопровождение: +наблюдаем мы. Одна и та же наблюдаемость попадает в разные секции, и это верно — +секции отвечают на разные вопросы. + +**Сопровождение и эксплуатация — целое и часть**, а не синонимы: сопровождение +это всё, чем держат проект (инструмент, процесс, выкладка, метрики и логи, +инфраструктура, дежурство), эксплуатация — работа системы на проде. Та же тема +живёт ещё в двух местах канона — разделе «Эксплуатация» в `architecture.md` и +эксплуатационном проходе ревью, — и словарь у всех трёх общий: +[canon.md](../canon/references/canon.md), раздел «Сопровождение и эксплуатация». Секция выбирается так: очередь значима и обоснована прозой — `Запланировано`; -тянется долго и очереди не имеет — `Направления`; не про приложение — -`Разработка`; в `Готово` кладёт сам `close`. +тянется долго и очереди не имеет — `Направления`; не про приложение, а про то, +чем его держат, — `Сопровождение`; в `Готово` кладёт сам `close`. - **Список задач цели выводится, а не хранится.** В теле цели — зачем она и что считается её завершением; перечня задач там нет. Он был бы третьим индексом и diff --git a/av-dev-pm/skills/tasks/references/task-format.md b/av-dev-pm/skills/tasks/references/task-format.md index 602865e..52a9de0 100644 --- a/av-dev-pm/skills/tasks/references/task-format.md +++ b/av-dev-pm/skills/tasks/references/task-format.md @@ -225,7 +225,7 @@ | Файл | Что отвечает | Секции | | --- | --- | --- | -| `ROADMAP.md` | что приложение уже умеет и чего ещё не умеет | канонические: `Готово`, `Запланировано`, `Направления`, `Разработка` (англ. `Done`, `Planned`, `Directions`, `Tooling`) | +| `ROADMAP.md` | что приложение уже умеет и чего ещё не умеет | канонические: `Готово`, `Запланировано`, `Направления`, `Сопровождение` (англ. `Done`, `Planned`, `Directions`, `Operations`) | | `BACKLOG.md` | что **можно взять** — только задачи | секции проекта (по умолчанию Ядро/Инфра) | | `SPRINT.md` | какая цель и какой набор под неё | одна: «Набор» | | `REJECTED.md` | что ушло без реализации и почему | — | diff --git a/av-dev-pm/skills/tasks/scripts/tasks.py b/av-dev-pm/skills/tasks/scripts/tasks.py index c6b72d1..44fd1ca 100755 --- a/av-dev-pm/skills/tasks/scripts/tasks.py +++ b/av-dev-pm/skills/tasks/scripts/tasks.py @@ -13,9 +13,9 @@ av-dev, и подгоняется под него проект. Имена вн docs/tasks/ items/ задачи и цели файлами, .md ROADMAP.md состояние проекта: что уже умеет и чего ещё не умеет. - Секции канонические: готово | запланировано | - направления | разработка (или done | planned | - directions | tooling — один язык на весь индекс) + Секции канонические: Готово | Запланировано | + Направления | Сопровождение (или Done | Planned | + Directions | Operations — один язык на весь индекс) BACKLOG.md что можно взять — только задачи, целей здесь нет SPRINT.md текущий спринт: цель, набор, дата, слаг REJECTED.md ушедшее БЕЗ реализации, с причиной и датой @@ -143,7 +143,7 @@ ROADMAP_SECTIONS = ( ("Готово", "Done"), # достигнутое: что приложение уже умеет ("Запланировано", "Planned"), # очередь значима, обоснована прозой ("Направления", "Directions"), # очереди нет, тянутся долго - ("Разработка", "Tooling"), # инструмент и процесс, не про приложение + ("Сопровождение", "Operations"), # чем держат проект, а не что умеет приложение ) ACHIEVED, PLANNED = 0, 1 # индексы в ROADMAP_SECTIONS DEFAULT_ROADMAP_SECTIONS = ",".join(ru for ru, _ in ROADMAP_SECTIONS) @@ -2277,8 +2277,9 @@ def init_files(lay: Layout, sections: list[str], roadmap_sections: list[str], " файл удаляется, поведение живёт в спеках;\n" f"- **{ROADMAP_SECTIONS[PLANNED][0]}** — очередь значима и обосновывается прозой;\n" f"- **{ROADMAP_SECTIONS[2][0]}** — очереди нет, тянутся долго;\n" - f"- **{ROADMAP_SECTIONS[3][0]}** — инструмент и процесс, не возможности\n" - " приложения. Отдельно, чтобы не читаться как обещание продукта.\n\n" + f"- **{ROADMAP_SECTIONS[3][0]}** — чем держат проект: инструмент,\n" + " процесс, эксплуатация. Не возможности приложения, и отдельно —\n" + " чтобы не читаться как обещание продукта.\n\n" "Секции **канонические** и переименованию проектом не подлежат:\n" "у каждой свой смысл, и в первую пишет сам `close`. Английский\n" f"вариант — {' | '.join(pair[1] for pair in ROADMAP_SECTIONS)},"