chore(polish): svg drift cleanup, stale comments, placeholder mechanics #87

Closed
opened 2026-08-16 20:11:54 +03:00 by slaid098 · 0 comments
Owner

Контекст

Аудит после PRs #80-#84 выявил пакет мелких дефектов (ни один не блокирует, но мусор копится):

  1. Дрифт вне git: 14 файлов .opencode/draw-image/templates/cover-*.svg (cover-diagonal, cover-final, cover-logo-main, cover-mic-main, cover-overlap-logo-on-mic, cover-overlap-mic-on-logo, cover-pair, cover-split-lr, cover-split-rl, cover-stack-logo-top, cover-stack-mic-top, cover-tile-logo, cover-tile-mic, cover-tiles) лежат untracked в клоне и в live-конфиге. Это отбракованные варианты раскладки из эксплорации issue #194 (победитель — tracked cover.svg, ADR-086). Ссылок из кода/тестов/команд ноль; ADR-088 фиксирует единственный шаблон cover. Решение: удалить (коммитить нельзя — расширило бы набор шаблонов без ADR и спровоцировало бы не-стандартные обложки).
  2. Устаревшие комментарии в тестах: tests/test_pipeline_status_ci.py (~строки 7, 48, 498) упоминают «up to 5 minutes»/«default 300s», фактические значения — 420s/7 мин.
  3. Хрупкая подстановка плейсхолдера: get_next_action() и format_bootstrap() в pipeline-status.py используют str.replace("N", str(number)) — заменит ЛЮБУЮ будущую заглавную латинскую «N» в шаблоне NEXT. Сейчас безопасно лишь потому, что шаблоны без других «N».
  4. Остатки нотации: в .opencode/skills/memory/SKILL.md receipt-формат/плейсхолдеры местами всё ещё PR#N — сверить с актуальным memory-syncer.md (PR#<PR_NUMBER> + пояснение подстановки) и унифицировать.
  5. Пробел в issue-скилле: feature-spec gate предполагает Q&A с пользователем, а создание issues идёт отдельным шагом; явно не зафиксировано, что Q&A проходит в main chat, а исполнителю передаются готовые ответы (исполнитель сам Q&A не ведёт).

Задача

  1. Удалить 14 перечисленных .opencode/draw-image/templates/cover-*.svg в клоне. В PR body отдельной строкой: те же файлы есть в live-конфиге хоста (bind-mount, untracked, git pull их НЕ удалит) → после мержа удалить на хосте вручную (в контейнере путь /root/.config/opencode/draw-image/templates/cover-*.svg).
  2. Поправить комментарии в tests/test_pipeline_status_ci.py на фактические 420s/7 мин.
  3. Заменить str.replace("N", ...) на точечную замену полных токенов плейсхолдеров (например #N → #<num>, pr_number=N → pr_number=<num> — отдельные замены), чтобы посторонние латинские «N» в шаблонах не пострадали. Обновить тесты, если они ассертят механику замены.
  4. В .opencode/skills/memory/SKILL.md унифицировать receipt-нотацию с memory-syncer.md (PR#<PR_NUMBER> + пояснение подстановки реального номера).
  5. В .opencode/skills/issue/SKILL.md (секция feature-spec gate) добавить 1-2 строки: Q&A проходит в main chat; исполнителю/сабагенту передаются ГОТОВЫЕ ответы и сформированный body; исполнитель Q&A не ведёт.

Контракты

  • Поведение оракула и выводимые строки NEXT не меняются (п.3 — только механика подстановки).
  • Tracked cover.svg и fixture tests/fixtures/cover.svg не трогаем.

Инварианты

  • pytest полностью зелёный.
  • Никаких функциональных изменений tools/scripts, кроме механики п.3.

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

  • После удаления svg в templates/ остаётся только tracked cover.svg; draw-image render с template=cover работает как раньше.

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

  • Live-конфиг хоста: ручное удаление svg после мержа (см. п.1); остальное подтянется git pull + restart.

Вне scope

  • Новые шаблоны обложек, изменения движка draw-image.
  • Нотация run-pipeline SKILL.md (там осознанная легенда N=issue/M=PR — не трогаем).

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

  • ls .opencode/draw-image/templates/ — только tracked cover.svg (+ заигноренное по .gitignore).
  • grep «300s»/«5 min» в tests/test_pipeline_status_ci.py — 0 некорректных вхождений.
  • В pipeline-status.py нет голого replace("N", — grep.
  • memory/SKILL.md receipt-нотация совпадает с memory-syncer.md; issue/SKILL.md описывает порядок Q&A.
  • PR body содержит инструкцию удалить svg на хосте.
## Контекст Аудит после PRs #80-#84 выявил пакет мелких дефектов (ни один не блокирует, но мусор копится): 1. **Дрифт вне git**: 14 файлов `.opencode/draw-image/templates/cover-*.svg` (cover-diagonal, cover-final, cover-logo-main, cover-mic-main, cover-overlap-logo-on-mic, cover-overlap-mic-on-logo, cover-pair, cover-split-lr, cover-split-rl, cover-stack-logo-top, cover-stack-mic-top, cover-tile-logo, cover-tile-mic, cover-tiles) лежат untracked в клоне и в live-конфиге. Это отбракованные варианты раскладки из эксплорации issue #194 (победитель — tracked `cover.svg`, ADR-086). Ссылок из кода/тестов/команд ноль; ADR-088 фиксирует единственный шаблон `cover`. Решение: удалить (коммитить нельзя — расширило бы набор шаблонов без ADR и спровоцировало бы не-стандартные обложки). 2. **Устаревшие комментарии в тестах**: `tests/test_pipeline_status_ci.py` (~строки 7, 48, 498) упоминают «up to 5 minutes»/«default 300s», фактические значения — 420s/7 мин. 3. **Хрупкая подстановка плейсхолдера**: `get_next_action()` и `format_bootstrap()` в pipeline-status.py используют `str.replace("N", str(number))` — заменит ЛЮБУЮ будущую заглавную латинскую «N» в шаблоне NEXT. Сейчас безопасно лишь потому, что шаблоны без других «N». 4. **Остатки нотации**: в `.opencode/skills/memory/SKILL.md` receipt-формат/плейсхолдеры местами всё ещё `PR#N` — сверить с актуальным memory-syncer.md (`PR#<PR_NUMBER>` + пояснение подстановки) и унифицировать. 5. **Пробел в issue-скилле**: feature-spec gate предполагает Q&A с пользователем, а создание issues идёт отдельным шагом; явно не зафиксировано, что Q&A проходит в main chat, а исполнителю передаются готовые ответы (исполнитель сам Q&A не ведёт). ## Задача 1. Удалить 14 перечисленных `.opencode/draw-image/templates/cover-*.svg` в клоне. В PR body отдельной строкой: те же файлы есть в live-конфиге хоста (bind-mount, untracked, git pull их НЕ удалит) → после мержа удалить на хосте вручную (в контейнере путь `/root/.config/opencode/draw-image/templates/cover-*.svg`). 2. Поправить комментарии в tests/test_pipeline_status_ci.py на фактические 420s/7 мин. 3. Заменить `str.replace("N", ...)` на точечную замену полных токенов плейсхолдеров (например `#N` → `#<num>`, `pr_number=N` → `pr_number=<num>` — отдельные замены), чтобы посторонние латинские «N» в шаблонах не пострадали. Обновить тесты, если они ассертят механику замены. 4. В `.opencode/skills/memory/SKILL.md` унифицировать receipt-нотацию с memory-syncer.md (`PR#<PR_NUMBER>` + пояснение подстановки реального номера). 5. В `.opencode/skills/issue/SKILL.md` (секция feature-spec gate) добавить 1-2 строки: Q&A проходит в main chat; исполнителю/сабагенту передаются ГОТОВЫЕ ответы и сформированный body; исполнитель Q&A не ведёт. ## Контракты - Поведение оракула и выводимые строки NEXT не меняются (п.3 — только механика подстановки). - Tracked `cover.svg` и fixture `tests/fixtures/cover.svg` не трогаем. ## Инварианты - `pytest` полностью зелёный. - Никаких функциональных изменений tools/scripts, кроме механики п.3. ## Граничные случаи - После удаления svg в templates/ остаётся только tracked `cover.svg`; `draw-image` render с template=cover работает как раньше. ## Влияние на связанные компоненты - Live-конфиг хоста: ручное удаление svg после мержа (см. п.1); остальное подтянется git pull + restart. ## Вне scope - Новые шаблоны обложек, изменения движка draw-image. - Нотация run-pipeline SKILL.md (там осознанная легенда N=issue/M=PR — не трогаем). ## Критерии приемки - `ls .opencode/draw-image/templates/` — только tracked `cover.svg` (+ заигноренное по .gitignore). - grep «300s»/«5 min» в tests/test_pipeline_status_ci.py — 0 некорректных вхождений. - В pipeline-status.py нет голого `replace("N",` — grep. - memory/SKILL.md receipt-нотация совпадает с memory-syncer.md; issue/SKILL.md описывает порядок Q&A. - PR body содержит инструкцию удалить svg на хосте.
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#87
No description provided.