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

Merged
slaid098 merged 4 commits from chore/polish/svg-drift-cleanup into main 2026-08-16 21:11:47 +03:00
Owner

Что сделано

  1. SVG drift (п.1): дрифтовые cover-*.svg (14 файлов) в клоне уже отсутствуют — в .opencode/draw-image/templates/ остался только tracked cover.svg, untracked пуст. Коммитить их было нельзя (расширило бы набор шаблонов без ADR). ⚠️ На хосте после мержа удалить вручную: те же файлы есть в live-конфиге (bind-mount, untracked, git pull их НЕ удалит) — путь /root/.config/opencode/draw-image/templates/cover-*.svg (в контейнере).
  2. Старые комментарии (п.2): tests/test_pipeline_status_ci.py — «up to 5 minutes»/«default 300s» → фактические 420s/7 мин (3 места).
  3. Хрупкая подстановка (п.3): get_next_action()/format_bootstrap() в pipeline-status.py переведены с голого replace("N", ...) на точечную замену полных токенов (#N → #<num>, pr_number=N → pr_number=<num>) через новый хелпер _substitute_pr_number(). Добавлен регрессионный тест: посторонняя заглавная «N» в шаблоне не затрагивается. Тест bootstrap переведён на хелпер. Поведение оракула и выводимые строки NEXT не изменились.
  4. Нотация memory (п.4): .opencode/skills/memory/SKILL.md — PR#N → PR#<PR_NUMBER> + пояснение подстановки реального номера (унифицировано с memory-syncer.md).
  5. Issue-skill (п.5): .opencode/skills/issue/SKILL.md (feature-spec gate) — добавлено: Q&A проходит в main chat; исполнителю/сабагенту передаются ГОТОВЫЕ ответы и сформированный body; исполнитель Q&A не ведёт.

Почему

Аудит после PRs #80-#84 выявил пакет мелких дефектов (issue #87): дрифт шаблонов вне git, устаревшие комментарии о таймаутах, хрупкая замена плейсхолдера (заменит ЛЮБУЮ будущую «N» в шаблонах NEXT) и несогласованная нотация receipt в скиллах.

Watch out

  • Хост: после мержа вручную удалить /root/.config/opencode/draw-image/templates/cover-*.svg — git pull их не удалит (untracked).
  • Строки NEXT оракула не изменились — только механика подстановки.

Pending

—

Closes #87

## Что сделано 1. **SVG drift (п.1)**: дрифтовые `cover-*.svg` (14 файлов) в клоне уже отсутствуют — в `.opencode/draw-image/templates/` остался только tracked `cover.svg`, untracked пуст. Коммитить их было нельзя (расширило бы набор шаблонов без ADR). ⚠️ **На хосте после мержа удалить вручную**: те же файлы есть в live-конфиге (bind-mount, untracked, `git pull` их НЕ удалит) — путь `/root/.config/opencode/draw-image/templates/cover-*.svg` (в контейнере). 2. **Старые комментарии (п.2)**: `tests/test_pipeline_status_ci.py` — «up to 5 minutes»/«default 300s» → фактические 420s/7 мин (3 места). 3. **Хрупкая подстановка (п.3)**: `get_next_action()`/`format_bootstrap()` в pipeline-status.py переведены с голого `replace("N", ...)` на точечную замену полных токенов (`#N` → `#<num>`, `pr_number=N` → `pr_number=<num>`) через новый хелпер `_substitute_pr_number()`. Добавлен регрессионный тест: посторонняя заглавная «N» в шаблоне не затрагивается. Тест bootstrap переведён на хелпер. Поведение оракула и выводимые строки NEXT не изменились. 4. **Нотация memory (п.4)**: `.opencode/skills/memory/SKILL.md` — `PR#N` → `PR#<PR_NUMBER>` + пояснение подстановки реального номера (унифицировано с memory-syncer.md). 5. **Issue-skill (п.5)**: `.opencode/skills/issue/SKILL.md` (feature-spec gate) — добавлено: Q&A проходит в main chat; исполнителю/сабагенту передаются ГОТОВЫЕ ответы и сформированный body; исполнитель Q&A не ведёт. ## Почему Аудит после PRs #80-#84 выявил пакет мелких дефектов (issue #87): дрифт шаблонов вне git, устаревшие комментарии о таймаутах, хрупкая замена плейсхолдера (заменит ЛЮБУЮ будущую «N» в шаблонах NEXT) и несогласованная нотация receipt в скиллах. ## Watch out - **Хост**: после мержа вручную удалить `/root/.config/opencode/draw-image/templates/cover-*.svg` — git pull их не удалит (untracked). - Строки NEXT оракула не изменились — только механика подстановки. ## Pending — Closes #87
docs(issue): state that feature-spec Q&A runs in main chat
All checks were successful
CI (always) / bootstrap (pull_request) Successful in 3s
CI / bootstrap (pull_request) Successful in 6s
CI / lint (pull_request) Successful in 28s
CI / typecheck (pull_request) Successful in 28s
CI / complexity (pull_request) Successful in 28s
CI / test (3.13) (pull_request) Successful in 1m44s
e7feec6824
Author
Owner

Code Review Summary

Полиш-пакет из issue #87: токен-замена плейсхолдера PR-номера вместо хрупкого replace("N"), обновление устаревших комментариев таймаутов (300s→420s), унификация нотации receipt PR#<PR_NUMBER> в memory-скилле и уточнение про место Q&A в issue-скилле. Все изменения аккуратные, тесты зелёные (53 passed), CI green.

Positives

  • Токен-замена полная: _substitute_pr_number покрывает оба реальных плейсхолдера (#N, pr_number=N) во всех 6 шаблонах NEXT_ACTIONS + NEXT_BOOTSTRAP — проверил, других форм N в шаблонах нет.
  • Регрессионный тест test_substitute_pr_number_leaves_stray_capital_n точно воспроизводит кейс issue #87 (посторонняя заглавная N в шаблоне не затрагивается).
  • Комментарии таймаутов соответствуют фактическому CI_WAIT_TIMEOUT = 420 (pipeline-status.py:68) — дрифт устранён.
  • Cross-file impact чистый: нотация PR#<PR_NUMBER> в memory/SKILL.md уже совпадает с memory-syncer.md (writer) и regex check_memory (reader, pipeline-status.py:893) — парсит реальный номер, формат не менялся. rg "PR#N" в обоих файлах пуст.
  • SVG-дрифт не закоммичен — untracked файлы не расширяют набор шаблонов без ADR; Watch out корректно предупреждает о ручном удалении на хосте.
  • PR body полный: все 4 секции заполнены, Closes #87.

Suggestions (info, not blocking)

  • .opencode/scripts/pipeline-status.py:944 [style] Docstring get_next_action стал длиннее 88 символов — можно перенести на следующую строку, но ruff в CI не ругается, не блокирует.
  • tests/test_pipeline_status_next_actions.py:131 [style] Тест вызывает приватный _substitute_pr_number напрямую — приемлемо для юнит-теста хелпера, альтернатива — тестировать через публичные get_next_action/format_bootstrap.

Verdict: APPROVE

## Code Review Summary Полиш-пакет из issue #87: токен-замена плейсхолдера PR-номера вместо хрупкого `replace("N")`, обновление устаревших комментариев таймаутов (300s→420s), унификация нотации receipt `PR#<PR_NUMBER>` в memory-скилле и уточнение про место Q&A в issue-скилле. Все изменения аккуратные, тесты зелёные (53 passed), CI green. ### Positives - **Токен-замена полная**: `_substitute_pr_number` покрывает оба реальных плейсхолдера (`#N`, `pr_number=N`) во всех 6 шаблонах NEXT_ACTIONS + NEXT_BOOTSTRAP — проверил, других форм `N` в шаблонах нет. - **Регрессионный тест** `test_substitute_pr_number_leaves_stray_capital_n` точно воспроизводит кейс issue #87 (посторонняя заглавная N в шаблоне не затрагивается). - **Комментарии таймаутов** соответствуют фактическому `CI_WAIT_TIMEOUT = 420` (pipeline-status.py:68) — дрифт устранён. - **Cross-file impact чистый**: нотация `PR#<PR_NUMBER>` в memory/SKILL.md уже совпадает с memory-syncer.md (writer) и regex `check_memory` (reader, pipeline-status.py:893) — парсит реальный номер, формат не менялся. `rg "PR#N"` в обоих файлах пуст. - **SVG-дрифт не закоммичен** — untracked файлы не расширяют набор шаблонов без ADR; Watch out корректно предупреждает о ручном удалении на хосте. - PR body полный: все 4 секции заполнены, Closes #87. ### Suggestions (info, not blocking) - **.opencode/scripts/pipeline-status.py:944** [style] Docstring `get_next_action` стал длиннее 88 символов — можно перенести на следующую строку, но ruff в CI не ругается, не блокирует. - **tests/test_pipeline_status_next_actions.py:131** [style] Тест вызывает приватный `_substitute_pr_number` напрямую — приемлемо для юнит-теста хелпера, альтернатива — тестировать через публичные `get_next_action`/`format_bootstrap`. ### Verdict: APPROVE
slaid098 deleted branch chore/polish/svg-drift-cleanup 2026-08-16 21:11:47 +03:00
Sign in to join this conversation.
No reviewers
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!94
No description provided.