refactor(tools): remove platform arg from create-changelog — follow industry standard #63

Closed
opened 2026-08-12 17:56:52 +03:00 by slaid098 · 0 comments
Owner

Контекст

Тулза create-changelog (файл .opencode/tools/create-changelog.ts) принимает опциональный arg platform: ("windows" | "linux" | "macos")[] и вставляет строку **Платформы:** Windows[, Linux, macOS] в CHANGELOG после заголовка версии. Feature добавлена в коммите 78e4290 (2026-08-12) для детерминированной маркировки платформы в release notes.

Исследование 4 топ-индустриальных проектов показало, что ни один не использует такой формат в release notes:

Проект Платформа в body Версия ОС Где указана платформа
VSCode нет (ссылка на updates) нет отдельный сайт загрузок
OBS Studio только в important notes (macOS 12 unsupported) да (breaking) assets filenames (-Windows-x64-, -macOS-Apple.dmg)
yt-dlp только в important changes (Windows 10+ soon) да (при поднятии) assets filenames (yt-dlp.exe, yt-dlp_linux)
espanso нет (Highlights summary) нет assets filenames (Mac-Universal.zip)

Индустриальный стандарт:

  1. Платформа указывается в pyproject.toml classifiers (Operating System :: Microsoft :: Windows :: Windows 10)
  2. Платформа указывается в README (секция «Требования» или бейдж)
  3. Min версия ОС в CHANGELOG — только при поднятии (секция ### Изменено, текстом: «Минимальная версия Windows повышена до 11»), как yt-dlp
  4. В release notes (body релиза) метка платформы НЕ ставится

Текущая реализация **Платформы:** нарушает стандарт и дублирует информацию, которая должна жить в README/pyproject.

Задача

  1. Удалить platform arg из create-changelog.ts:

    • Удалить VALID_PLATFORMS, PLATFORM_NAMES константы
    • Удалить блок валидации platform (строки ~113-136)
    • Удалить platformsLabel логику из buildVersionBlock (строки 71-89) — строка **Платформы:** больше не вставляется
    • Удалить arg из schema (args.platform)
    • Удалить arg из описания tool
  2. Обновить тесты tests/test_create_changelog_tool.py:

    • Удалить 6 тестов с platform в названии: test_platform_single_windows, test_platform_multi, test_platform_macos_formatting, test_platform_invalid_value, test_platform_omitted_no_line, test_platform_empty_array_no_line
    • Убедиться, что оставшиеся тесты не ссылаются на platform arg
  3. Обновить skills/release/SKILL.md (строки 40-58, 62-71, 77-82):

    • Удалить раздел «Платформа (ОС) релиза» с описанием platform arg
    • Удалить platform: ["windows"] из примеров вызова create-changelog
    • Добавить новый раздел «Платформа релиза (стандарт)»:
      • Платформа указывается в pyproject.toml classifiers: Operating System :: Microsoft :: Windows :: Windows 10
      • Платформа указывается в README (секция «Требования» или «Платформа»)
      • Min версия ОС в CHANGELOG — только при поднятии (секция ### Изменено, текстом: «Минимальная версия Windows повышена до 11»), как yt-dlp
      • В release notes (body релиза) метка платформы НЕ ставится
      • Связь с create-changelog tool: tool не имеет platform arg — платформа не попадает в CHANGELOG автоматически

Контракты

Что НЕ меняется

  • Остальные args create-changelog (version, added, changed, fixed, removed) — без изменений
  • Логика buildVersionBlock для секций (Added/Changed/Fixed/Removed) — без изменений
  • Формат CHANGELOG (## [VERSION] - DATE, ### Добавлено, bullets) — без изменений
  • Идемпотентность (prepend, не append) — без изменений
  • Валидация version (vX.Y.Z), validation записей (<=200 chars, Russian-only) — без изменений

Новый контракт платформы

  • Источник правды о платформе: pyproject.toml classifiers + README
  • CHANGELOG не содержит метки платформы
  • Min версия ОС в CHANGELOG — только при поднятии (как breaking change в ### Изменено)
  • Экстрактор release_notes.py (voice_assistant, video_uniq) — пассивный, передаёт что есть (без **Платформы:** строки = без неё в body релиза)

Инварианты

  • create-changelog остаётся детерминированной: одинаковый вход → одинаковый CHANGELOG
  • Удаление platform arg не ломает существующие вызовы (arg был optional — omit уже валиден)
  • Тесты проходят: pytest tests/test_create_changelog_tool.py — зелёный
  • mypy/ruff на .opencode/tools/create-changelog.ts — зелёный (если применимо к TS в этом репо)
  • SKILL.md обновлён и отражает новый стандарт

Граничные случаи

  • Существующие CHANGELOG-секции с **Платформы:** (voice_assistant v0.1.0, video_uniq) — не валидируются тулзой (тулза пишет новые секции, не редактирует старые). Ручная правка — отдельный issue в каждом репо.
  • Вызов create-changelog с platform: ["windows"] после удаления arg → ошибка валидации schema (arg не существует). Агенты, использующие старый формат, должны обновить вызовы. Документировать в SKILL.md migration note.
  • Multi-platform репо (если появятся в будущем) → classifiers в pyproject.toml + README, не в CHANGELOG.

Влияние на связанные компоненты

  • create-changelog.ts — основной файл изменений
  • tests/test_create_changelog_tool.py — удаление 6 тестов
  • skills/release/SKILL.md — обновление раздела платформы + примеров
  • skills/repo-readme/SKILL.md — НЕ трогать (не упоминает платформу)
  • tools/create-changelog.ts schema — arg удалён, но backward compat: omit уже валиден, явная передача platform теперь ошибка
  • 下游 репозитории (voice_assistant, video_uniq) — отдельные issues для очистки существующих CHANGELOG-секций (после merge этого PR)

Вне scope

  • Очистка CHANGELOG в voice_assistant, video_uniq — отдельные issues в каждом репо
  • Добавление Windows 10+ classifier в pyproject.toml voice_assistant — отдельный issue в voice_assistant
  • Добавление секции «Требования» в README voice_assistant — отдельный issue в voice_assistant
  • Refactor release_notes.py экстрактора — не требуется (он пассивный)

Критерии приемки

  • platform arg удалён из create-changelog.ts (schema, валидация, форматирование)
  • VALID_PLATFORMS, PLATFORM_NAMES константы удалены
  • buildVersionBlock не вставляет **Платформы:** строку
  • 6 тестов с platform удалены из test_create_changelog_tool.py
  • Оставшиеся тесты проходят (pytest зелёный)
  • skills/release/SKILL.md — раздел «Платформа (ОС) релиза» переписан под новый стандарт
  • Примеры вызова create-changelog в SKILL.md — без platform arg
  • Новый раздел описывает: pyproject classifiers + README + min версия в Changed при поднятии
## Контекст Тулза `create-changelog` (файл `.opencode/tools/create-changelog.ts`) принимает опциональный arg `platform: ("windows" | "linux" | "macos")[]` и вставляет строку `**Платформы:** Windows[, Linux, macOS]` в CHANGELOG после заголовка версии. Feature добавлена в коммите 78e4290 (2026-08-12) для детерминированной маркировки платформы в release notes. Исследование 4 топ-индустриальных проектов показало, что **ни один** не использует такой формат в release notes: | Проект | Платформа в body | Версия ОС | Где указана платформа | |--------|------------------|-----------|----------------------| | VSCode | нет (ссылка на updates) | нет | отдельный сайт загрузок | | OBS Studio | только в important notes (macOS 12 unsupported) | да (breaking) | assets filenames (`-Windows-x64-`, `-macOS-Apple.dmg`) | | yt-dlp | только в important changes (Windows 10+ soon) | да (при поднятии) | assets filenames (`yt-dlp.exe`, `yt-dlp_linux`) | | espanso | нет (Highlights summary) | нет | assets filenames (`Mac-Universal.zip`) | Индустриальный стандарт: 1. Платформа указывается в **pyproject.toml** classifiers (`Operating System :: Microsoft :: Windows :: Windows 10`) 2. Платформа указывается в **README** (секция «Требования» или бейдж) 3. Min версия ОС в CHANGELOG — **только при поднятии** (секция `### Изменено`, текстом: «Минимальная версия Windows повышена до 11»), как yt-dlp 4. В release notes (body релиза) метка платформы **НЕ ставится** Текущая реализация `**Платформы:**` нарушает стандарт и дублирует информацию, которая должна жить в README/pyproject. ## Задача 1. Удалить `platform` arg из `create-changelog.ts`: - Удалить `VALID_PLATFORMS`, `PLATFORM_NAMES` константы - Удалить блок валидации `platform` (строки ~113-136) - Удалить `platformsLabel` логику из `buildVersionBlock` (строки 71-89) — строка `**Платформы:**` больше не вставляется - Удалить arg из schema (`args.platform`) - Удалить arg из описания tool 2. Обновить тесты `tests/test_create_changelog_tool.py`: - Удалить 6 тестов с `platform` в названии: `test_platform_single_windows`, `test_platform_multi`, `test_platform_macos_formatting`, `test_platform_invalid_value`, `test_platform_omitted_no_line`, `test_platform_empty_array_no_line` - Убедиться, что оставшиеся тесты не ссылаются на `platform` arg 3. Обновить `skills/release/SKILL.md` (строки 40-58, 62-71, 77-82): - Удалить раздел «Платформа (ОС) релиза» с описанием `platform` arg - Удалить `platform: ["windows"]` из примеров вызова `create-changelog` - Добавить новый раздел **«Платформа релиза (стандарт)»**: - Платформа указывается в **pyproject.toml** classifiers: `Operating System :: Microsoft :: Windows :: Windows 10` - Платформа указывается в **README** (секция «Требования» или «Платформа») - Min версия ОС в CHANGELOG — **только при поднятии** (секция `### Изменено`, текстом: «Минимальная версия Windows повышена до 11»), как yt-dlp - В release notes (body релиза) метка платформы **НЕ ставится** - Связь с `create-changelog` tool: tool не имеет `platform` arg — платформа не попадает в CHANGELOG автоматически ## Контракты ### Что НЕ меняется - Остальные args `create-changelog` (`version`, `added`, `changed`, `fixed`, `removed`) — без изменений - Логика `buildVersionBlock` для секций (Added/Changed/Fixed/Removed) — без изменений - Формат CHANGELOG (`## [VERSION] - DATE`, `### Добавлено`, bullets) — без изменений - Идемпотентность (prepend, не append) — без изменений - Валидация version (`vX.Y.Z`), validation записей (<=200 chars, Russian-only) — без изменений ### Новый контракт платформы - Источник правды о платформе: `pyproject.toml` classifiers + README - CHANGELOG не содержит метки платформы - Min версия ОС в CHANGELOG — только при поднятии (как breaking change в `### Изменено`) - Экстрактор `release_notes.py` (voice_assistant, video_uniq) — пассивный, передаёт что есть (без `**Платформы:**` строки = без неё в body релиза) ## Инварианты - `create-changelog` остаётся детерминированной: одинаковый вход → одинаковый CHANGELOG - Удаление `platform` arg не ломает существующие вызовы (arg был optional — omit уже валиден) - Тесты проходят: `pytest tests/test_create_changelog_tool.py` — зелёный - mypy/ruff на `.opencode/tools/create-changelog.ts` — зелёный (если применимо к TS в этом репо) - SKILL.md обновлён и отражает новый стандарт ## Граничные случаи - Существующие CHANGELOG-секции с `**Платформы:**` (voice_assistant v0.1.0, video_uniq) — не валидируются тулзой (тулза пишет новые секции, не редактирует старые). Ручная правка — отдельный issue в каждом репо. - Вызов `create-changelog` с `platform: ["windows"]` после удаления arg → ошибка валидации schema (arg не существует). Агенты, использующие старый формат, должны обновить вызовы. Документировать в SKILL.md migration note. - Multi-platform репо (если появятся в будущем) → classifiers в pyproject.toml + README, не в CHANGELOG. ## Влияние на связанные компоненты - `create-changelog.ts` — основной файл изменений - `tests/test_create_changelog_tool.py` — удаление 6 тестов - `skills/release/SKILL.md` — обновление раздела платформы + примеров - `skills/repo-readme/SKILL.md` — НЕ трогать (не упоминает платформу) - `tools/create-changelog.ts` schema — arg удалён, но backward compat: omit уже валиден, явная передача `platform` теперь ошибка - 下游 репозитории (voice_assistant, video_uniq) — отдельные issues для очистки существующих CHANGELOG-секций (после merge этого PR) ## Вне scope - Очистка CHANGELOG в voice_assistant, video_uniq — отдельные issues в каждом репо - Добавление Windows 10+ classifier в pyproject.toml voice_assistant — отдельный issue в voice_assistant - Добавление секции «Требования» в README voice_assistant — отдельный issue в voice_assistant - Refactor `release_notes.py` экстрактора — не требуется (он пассивный) ## Критерии приемки - [ ] `platform` arg удалён из `create-changelog.ts` (schema, валидация, форматирование) - [ ] `VALID_PLATFORMS`, `PLATFORM_NAMES` константы удалены - [ ] `buildVersionBlock` не вставляет `**Платформы:**` строку - [ ] 6 тестов с `platform` удалены из `test_create_changelog_tool.py` - [ ] Оставшиеся тесты проходят (pytest зелёный) - [ ] `skills/release/SKILL.md` — раздел «Платформа (ОС) релиза» переписан под новый стандарт - [ ] Примеры вызова `create-changelog` в SKILL.md — без `platform` arg - [ ] Новый раздел описывает: pyproject classifiers + README + min версия в Changed при поднятии
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
slaid098/opencode-config#63
No description provided.