mister-wolf 2.15.1 → 2.16.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (120) hide show
  1. package/README.md +4 -16
  2. package/README.ru.md +19 -26
  3. package/dist/adapters/cli/cli-entry.d.ts.map +1 -1
  4. package/dist/adapters/cli/cli-entry.js +6 -0
  5. package/dist/adapters/cli/cli-entry.js.map +1 -1
  6. package/dist/adapters/cli/commands/memory-add.d.ts.map +1 -1
  7. package/dist/adapters/cli/commands/memory-add.js +26 -3
  8. package/dist/adapters/cli/commands/memory-add.js.map +1 -1
  9. package/dist/adapters/cli/commands/memory-call.d.ts.map +1 -1
  10. package/dist/adapters/cli/commands/memory-call.js +22 -2
  11. package/dist/adapters/cli/commands/memory-call.js.map +1 -1
  12. package/dist/adapters/cli/commands/memory-doctor.d.ts.map +1 -1
  13. package/dist/adapters/cli/commands/memory-doctor.js +57 -4
  14. package/dist/adapters/cli/commands/memory-doctor.js.map +1 -1
  15. package/dist/adapters/cli/commands/memory-init.d.ts +2 -11
  16. package/dist/adapters/cli/commands/memory-init.d.ts.map +1 -1
  17. package/dist/adapters/cli/commands/memory-init.js +59 -112
  18. package/dist/adapters/cli/commands/memory-init.js.map +1 -1
  19. package/dist/adapters/cli/commands/memory-promote.d.ts +3 -0
  20. package/dist/adapters/cli/commands/memory-promote.d.ts.map +1 -0
  21. package/dist/adapters/cli/commands/memory-promote.js +15 -0
  22. package/dist/adapters/cli/commands/memory-promote.js.map +1 -0
  23. package/dist/adapters/cli/type-command-generator.d.ts.map +1 -1
  24. package/dist/adapters/cli/type-command-generator.js +5 -0
  25. package/dist/adapters/cli/type-command-generator.js.map +1 -1
  26. package/dist/adapters/fs/fs-project-initializer.d.ts.map +1 -1
  27. package/dist/adapters/fs/fs-project-initializer.js +9 -6
  28. package/dist/adapters/fs/fs-project-initializer.js.map +1 -1
  29. package/dist/adapters/fs/memory-root.d.ts +13 -0
  30. package/dist/adapters/fs/memory-root.d.ts.map +1 -0
  31. package/dist/adapters/fs/memory-root.js +34 -0
  32. package/dist/adapters/fs/memory-root.js.map +1 -0
  33. package/dist/adapters/render/opencode/opencode-renderer.d.ts.map +1 -1
  34. package/dist/adapters/render/opencode/opencode-renderer.js +16 -0
  35. package/dist/adapters/render/opencode/opencode-renderer.js.map +1 -1
  36. package/dist/app/use-cases/add-memory-object.d.ts +8 -0
  37. package/dist/app/use-cases/add-memory-object.d.ts.map +1 -1
  38. package/dist/app/use-cases/add-memory-object.js +21 -1
  39. package/dist/app/use-cases/add-memory-object.js.map +1 -1
  40. package/dist/app/use-cases/get-call-injections.d.ts +9 -0
  41. package/dist/app/use-cases/get-call-injections.d.ts.map +1 -1
  42. package/dist/app/use-cases/get-call-injections.js +24 -3
  43. package/dist/app/use-cases/get-call-injections.js.map +1 -1
  44. package/dist/app/use-cases/gitignore-block.d.ts +11 -0
  45. package/dist/app/use-cases/gitignore-block.d.ts.map +1 -0
  46. package/dist/app/use-cases/gitignore-block.js +29 -0
  47. package/dist/app/use-cases/gitignore-block.js.map +1 -0
  48. package/dist/app/use-cases/init-project.d.ts +30 -4
  49. package/dist/app/use-cases/init-project.d.ts.map +1 -1
  50. package/dist/app/use-cases/init-project.js +77 -11
  51. package/dist/app/use-cases/init-project.js.map +1 -1
  52. package/dist/app/use-cases/promote-memory.d.ts +22 -0
  53. package/dist/app/use-cases/promote-memory.d.ts.map +1 -0
  54. package/dist/app/use-cases/promote-memory.js +31 -0
  55. package/dist/app/use-cases/promote-memory.js.map +1 -0
  56. package/dist/app/use-cases/repair-storage.d.ts +31 -0
  57. package/dist/app/use-cases/repair-storage.d.ts.map +1 -0
  58. package/dist/app/use-cases/repair-storage.js +65 -0
  59. package/dist/app/use-cases/repair-storage.js.map +1 -0
  60. package/dist/app/use-cases/supersede-memory-object.d.ts.map +1 -1
  61. package/dist/app/use-cases/supersede-memory-object.js +14 -0
  62. package/dist/app/use-cases/supersede-memory-object.js.map +1 -1
  63. package/dist/bootstrap/container.d.ts +2 -0
  64. package/dist/bootstrap/container.d.ts.map +1 -1
  65. package/dist/bootstrap/container.js +10 -6
  66. package/dist/bootstrap/container.js.map +1 -1
  67. package/dist/domain/governance.d.ts.map +1 -1
  68. package/dist/domain/governance.js +2 -1
  69. package/dist/domain/governance.js.map +1 -1
  70. package/dist/domain/mask-secrets.d.ts +8 -0
  71. package/dist/domain/mask-secrets.d.ts.map +1 -0
  72. package/dist/domain/mask-secrets.js +20 -0
  73. package/dist/domain/mask-secrets.js.map +1 -0
  74. package/dist/domain/memory-types.d.ts +2 -2
  75. package/dist/domain/memory-types.d.ts.map +1 -1
  76. package/dist/domain/memory-types.js +3 -1
  77. package/dist/domain/memory-types.js.map +1 -1
  78. package/dist/domain/schemas/memory-event-schema.d.ts +1 -0
  79. package/dist/domain/schemas/memory-event-schema.d.ts.map +1 -1
  80. package/dist/domain/schemas/memory-event-schema.js +1 -0
  81. package/dist/domain/schemas/memory-event-schema.js.map +1 -1
  82. package/dist/ports/base-set-renderer.port.d.ts +5 -1
  83. package/dist/ports/base-set-renderer.port.d.ts.map +1 -1
  84. package/package.json +1 -1
  85. package/templates/.wolf/router.log +1 -1
  86. package/templates/base/AGENTS.md +3 -2
  87. package/templates/base/agents/executor-lead.md +4 -0
  88. package/templates/base/agents/mr-wolf.md +3 -2
  89. package/templates/base/agents/steward.md +4 -2
  90. package/templates/base/agents/worker-implementer.md +5 -2
  91. package/templates/base/agents/worker-researcher.md +4 -2
  92. package/templates/base/agents/worker-reviewer.md +9 -7
  93. package/templates/base/commands/analyze-doc.md +1 -1
  94. package/templates/base/commands/complain.md +1 -1
  95. package/templates/base/commands/doc-review.md +1 -1
  96. package/templates/base/playbooks/executor-lead-playbook.md +10 -5
  97. package/templates/base/playbooks/steward-nastavnik.md +5 -4
  98. package/templates/base/playbooks/worker-implementer-playbook.md +17 -7
  99. package/templates/base/playbooks/worker-researcher-playbook.md +5 -2
  100. package/templates/base/playbooks/worker-reviewer-playbook.md +21 -8
  101. package/templates/base/skills/finishing-a-development-branch/SKILL.md +19 -211
  102. package/templates/base/skills/receiving-code-review/SKILL.md +12 -28
  103. package/templates/base/skills/requesting-code-review/SKILL.md +11 -110
  104. package/templates/base/skills/test-driven-development/SKILL.md +18 -396
  105. package/templates/base/skills/using-git-worktrees/SKILL.md +15 -177
  106. package/templates/base/skills/using-skills/SKILL.md +38 -123
  107. package/templates/base/skills/verification-before-completion/SKILL.md +16 -157
  108. package/templates/base/skills/wolf-brainstorm/SKILL.md +17 -168
  109. package/templates/base/skills/wolf-debug/SKILL.md +15 -281
  110. package/templates/base/skills/wolf-design/SKILL.md +16 -35
  111. package/templates/base/skills/wolf-execute/SKILL.md +13 -101
  112. package/templates/base/skills/wolf-handoff/SKILL.md +22 -88
  113. package/templates/base/skills/wolf-plan/SKILL.md +18 -181
  114. package/templates/base/skills/wolf-review/SKILL.md +25 -64
  115. package/templates/base/skills/wolf-sdd/SKILL.md +17 -248
  116. package/templates/base/skills/wolf-skill-intake/SKILL.md +14 -57
  117. package/templates/base/skills/wolf-testplan/SKILL.md +15 -27
  118. package/templates/base/skills/writing-skills/SKILL.md +16 -30
  119. package/templates/opencode/plugins/wolf-router.ts +2 -1
  120. package/templates/opencode/plugins/wolf-session-start.js +11 -9
@@ -1,101 +1,35 @@
1
1
  ---
2
2
  name: wolf-handoff
3
- description: "Используй, когда текущая сессия перегружена контекстом, обросла ошибками, дрейфует или работу нужно продолжить в свежей сессии без потери прогресса. Экономика тёплых/холодных сессий: значимое — в память Wolf, продолжение — свежему субагенту."
3
+ description: "Передай работу в новую сессию или замени исполнителя без потери цели, состояния и evidence. Сохрани snapshot и явно передай владение; не создавай вложенных агентов в обход L0/L1/L2."
4
4
  ---
5
5
 
6
- # wolf-handoff: передача в свежую сессию
6
+ # Передача состояния
7
7
 
8
- ## Обзор
8
+ ## Выбор действия
9
9
 
10
- Когда контекст перегружен, сессия обросла ошибками или впереди много шагов — запиши сжатое резюме handoff и продолжи работу в свежем субагенте через {{tool.task}}.
10
+ Различай: продолжение той же роли в новой сессии, замена исполнителя и новая подзадача. L0 передаёт цель преемнику L0 либо поручает L1 поставку; L1 заменяет L2/исполнительскую сессию; L2 возвращает checkpoint и запрос L1. L2 не спавнит преемника. Указание tool.task не гарантирует сброс контекста родителя — проверь возможности платформы.
11
11
 
12
- **Экономика тёплых/холодных сессий:** тёплая сессия дорожает с каждым токеном истории; холодная стартует дёшево, но не знает ничего. Память Wolf ломает этот компромисс: сначала зафиксируй значимое в памяти (`wolf add` — решения, уроки, блокеры), затем передай минимум — свежая сессия подтянет состояние сама (`wolf call` + `wolf brief` на холодном старте).
12
+ ## Snapshot
13
13
 
14
- ## Когда использовать
14
+ До передачи сохрани в артефакте или разрешённой памяти:
15
+ - task/thread ID, цель, AC, scope и текущий ответственный;
16
+ - base/current revision, cwd, branch/worktree, dirty/untracked, patch или другой доступный способ восстановления;
17
+ - выполненное и оставшееся, dependencies, ожидающий внешний исход;
18
+ - утверждённые решения и активные методики — IDs/версии;
19
+ - проверки с evidence и областью актуальности;
20
+ - гипотезы и неудачные эксперименты, вопросы и блокеры;
21
+ - следующий безопасный шаг, права и действия, уже разрешённые пользователем.
15
22
 
16
- - Окно контекста заполняется или сессия дрейфует
17
- - Переключение с исследования на реализацию
18
- - Нужно сбросить якорь после серии неудачных попыток
19
- - У задачи несколько оставшихся независимых шагов
20
- - Ты сам запущен как субагент и тебе нужно делегировать дальше
23
+ Не копируй весь чат, код и секреты. Ссылки должны быть доступны преемнику; проверь это. Достаточный snapshot важнее предположения, что wolf call доставит любую запись.
21
24
 
22
- ## Шаги
25
+ ## Передача владения
23
26
 
24
- 1. **Зафиксируй значимое в памяти Wolf.** До передачи:
25
- - Решения и их обоснование → `wolf add --type decision`
26
- - Уроки (что сработало / что нет) → `wolf add --type lesson`
27
- - Открытые блокеры → `wolf add --type blocker`
28
- Преемник получит их через `wolf call` / `wolf brief` — дублировать в промпте не нужно.
27
+ 1. Зафиксируй snapshot revision и место. При недоступной записи L2 передаёт его L1, не обходит permissions.
28
+ 2. Действующим механизмом останови или отзови право записи старого исполнителя; проверь незавершённые инструменты/процессы. При неизвестном исходе сначала выясни состояние.
29
+ 3. L1/L0 передаёт преемнику TASK, snapshot и доступные источники. Если технической блокировки нет, установи протокольного единственного владельца и явно обозначь ограничение.
30
+ 4. Преемник подтверждает цель, revision, dirty-state и следующий шаг; сверяет память/план с фактом. Несовпадение → NEEDS_CONTEXT, не слепое продолжение.
31
+ 5. Только после подтверждения отметь передачу завершённой и сообщи ответственному уровню ID/статус.
29
32
 
30
- 2. **Запиши резюме handoff.** Включи:
31
- - Что сделано
32
- - Что осталось
33
- - Ключевые решения и их логика (ссылками на объекты памяти)
34
- - Релевантные пути файлов, URL, ссылки на issues/PR
35
- - Какие скиллы преемнику стоит задействовать
36
- - Отметку о редактированных секретах, API-ключах, токенах, PII
33
+ ## Ограничения
37
34
 
38
- 3. **Запусти свежий субагент через {{tool.task}}.**
39
- - `description`: короткое описательное имя задачи
40
- - `subagent_type`: роль преемника — исполнительская роль проекта (например, worker-implementer для реализации, worker-researcher для исследования; координация — через executor-lead)
41
- - `prompt`: резюме handoff
42
-
43
- 4. **Отчитайся владельцу: ID и статус задачи субагента.**
44
-
45
- ## Пример
46
-
47
- Резюме handoff:
48
- - Решили оставить публикацию v9-сигналов в `adviser/` (решение: mem от 2026-08-30).
49
- - Реализован `adviser/src/publishers/signal_v9.py`.
50
- - Осталось: подключить в DI-контейнер `adviser/services/di.py` и добавить тесты.
51
- - Файлы: `adviser/src/publishers/signal_v9.py`, `adviser/services/di.py`.
52
- - Скиллы преемнику: test-driven-development, verification-before-completion.
53
-
54
- Затем диспетчеризация:
55
- ```
56
- {{tool.task}}
57
- description: Подключить v9-паблишер в DI и тесты
58
- subagent_type: worker-implementer
59
- prompt: <резюме handoff>
60
- ```
61
-
62
- ## Что включить
63
-
64
- - Конкретные пути файлов и имена символов
65
- - Принятые решения и почему (или ссылки на них в памяти)
66
- - Открытые вопросы и блокеры
67
- - Релевантные тесты, команды, шаги верификации
68
-
69
- ## Что исключить
70
-
71
- - Длинные транскрипты и полные листинги кода
72
- - Секреты, учётные данные, персональные данные
73
- - Контент, уже зафиксированный в артефактах (планы, спеки, коммиты, диффы, память Wolf)
74
-
75
- ## Red Flags
76
-
77
- - Передача без письменного резюме
78
- - Копирование всей беседы в промпт субагента
79
- - Включение API-ключей или токенов
80
- - «Кажется» и размытые следующие шаги вместо исполнимых задач
81
-
82
- ---
83
-
84
- ## Трассировка адаптации
85
-
86
- > Источник: `~/.config/opencode/superpowers/skills/opencode-handoff/SKILL.md`, upstream 6efe32c (2026-04-23)
87
-
88
- | Пункт источника | Судьба | Почему |
89
- |---|---|---|
90
- | Обзор (перегрузка → свежий субагент) | сохранено + экономика тёплых/холодных сессий | Спека §5.2 |
91
- | Тула `task` с `subagent_type` | заменено → `{{tool.task}}` (subagent_type сохранён как параметр) | Research §1: opencode-тул; плейсхолдер |
92
- | When to Use (5) | сохранено полностью (5/5) | H7 |
93
- | Шаги (3) | сохранено; + шаг 0 «зафиксируй в памяти Wolf» (`wolf add`) | Wolf-переплетение |
94
- | `subagent_type: general/explore` | заменено → роли проекта (worker-implementer / worker-researcher / executor-lead) | Generic-типы не переносимы |
95
- | Пример | адаптировано (тип → worker-implementer, ссылка на объект памяти) | Иллюстрация |
96
- | What to Include (4) | сохранено полностью (4/4); + память как артефакт | H7 |
97
- | What to Exclude (3) | сохранено полностью (3/3); + «память Wolf» | H7 |
98
- | Red Flags (4) | сохранено полностью (4/4) | H7 |
99
- | — | добавлено: холодный старт преемника — `wolf call` + `wolf brief` | Протокол проекта |
100
-
101
- Перенесённые списки: red flags 4/4, include 4/4, exclude 3/3, when-to-use 5/5.
35
+ Handoff не повышает права и не разрешает незапрошенные внешние действия. Новая сессия не исправляет неправильный план сама по себе. При дрейфе проверь источник ошибки и достаточность snapshot, а не только уменьши текст.
@@ -1,194 +1,31 @@
1
1
  ---
2
2
  name: wolf-plan
3
- description: 'Используй, когда есть спека или требования для многошаговой задачи — до касания кода. Пишет zero-context планы: каждая задача = самодостаточный бриф воркера, исполнитель не обязан знать кодовую базу.'
3
+ description: "Составляй исполнимые задачи по утверждённым требованиям и дизайну. Планируй зависимости, allowlist, интеграцию, проверки и восстановление без копирования реализации в план."
4
4
  ---
5
5
 
6
- # wolf-plan: план для zero-context исполнителя
6
+ # Дизайн → задачи
7
7
 
8
- ## Обзор
8
+ ## Вход и выход
9
9
 
10
- Пиши исчерпывающие планы реализации в предположении, что исполнитель имеет **нулевой контекст** кодовой базы этой задачи и сомнительный вкус. Задокументируй всё, что ему нужно знать: какие файлы трогать в каждой задаче, код, тесты, какие доки проверить, как проверить работу. Отдай весь план как bite-sized задачи. DRY. YAGNI. TDD. Частые коммиты.
10
+ Вход: approved requirements/design либо разрешённый LITE/FIX-бриф; baseline SHA, профиль проекта и известный test-plan. Выход: plan.md или список TASK с зависимостями и точками интеграции. Автор планирования не выполняет реализацию.
11
11
 
12
- Считай, что исполнитель — умелый разработчик, но почти ничего не знает о нашем тулсете и проблемном домене. Считай, что он плохо умеет в хороший дизайн тестов.
12
+ ## Процесс
13
13
 
14
- **Вход воркеров — по брифам:** каждая задача плана становится брифом однозадачного воркера (worker-implementer). Воркер не читает кодовую базу и не видит твою сессию — план обязан содержать всё. Сомнительное качество плана = гарантированные вопросы и переделки на исполнении.
14
+ 1. Проверь версии входов. Отнеси каждый REQ/NFR к задаче и проверке; зафиксируй пробелы до исполнения.
15
+ 2. Раздели работу по результатам и ответственности. Размер задачи определяется независимой проверкой и доступным контекстом, а не обязательными 2–5 минутами.
16
+ 3. Для каждой задачи заполни TASK из using-skills: цель, AC, baseline, ссылки на контракт, allowlist, зависимости, проверки, ограничение scope и ожидаемый RESULT. Разреши читать затронутый код и потребителей; отсутствие истории сессии не означает запрета чтения.
17
+ 4. Укажи достаточно точные действия и символы, не полный код реализации. Примеры допустимы для неоднозначного контракта, но не дублируют design. Не предписывай точный код теста вместо проверяемого свойства.
18
+ 5. Построй зависимости. Параллельность разреши только для независимых outputs, изолированной записи и определённого владельца интеграции. Общие контракты и миграции сериализуй.
19
+ 6. Добавь отдельную интеграционную задачу: порядок объединения, проверка взаимодействий, полный гейт и правила разрешения конфликтов. Укажи промежуточные чекпоинты для длительной работы.
20
+ 7. Сверь plan с test-plan: сценарии входят в соответствующие задачи, NFR имеют измерения, тесты запускаются проектными командами. Исполнение FULL не стартует до этой сверки.
21
+ 8. Проведи саморевью и назначенное независимое ревью. Ошибку плана исправляй с повторной проверкой затронутых зависимостей.
15
22
 
16
- **Анонс на старте:** «Использую скилл wolf-plan для создания плана реализации».
23
+ ## Трекинг
17
24
 
18
- **Контекст:** исполнение плана начинается только в worktree `.worktrees/<имя-задачи>` (правило проекта; создаётся ДО старта исполнения — см. wolf-sdd / wolf-execute). Сам план можно писать и до worktree.
25
+ Пиши задачи чекбоксами с task_id. [x] ставит L1 после проверки результата и необходимых ревью; рядом фиксирует revision/evidence и статус интеграции. Коммит или чекбокс отдельно не доказывает приёмку. Общий plan изменяет L1, не параллельные L2.
19
26
 
20
- ## Вход (v2)
27
+ При восстановлении сравни [x] с кодом, доказательствами и вердиктами; несовпадение возвращает задачу в проверку. Не повторяй уже подтверждённые действия автоматически.
21
28
 
22
- - `docs/dev/<дата>-<slug>/requirements.md` (approved).
23
- - `docs/dev/<дата>-<slug>/design.md` (approved линзами/владельцем).
24
- Спека-монолит больше не вход: план не пересказывает требования и не переопределяет
25
- контракты — единственный источник контрактов — design.md.
29
+ ## Передача
26
30
 
27
- ## Выход: plan.md (в папке фичи)
28
-
29
- План остаётся обзорным. Каждая задача плана:
30
-
31
- - цель задачи (одно предложение);
32
- - ссылка на §design, откуда берутся контракты (`design §Компоненты`, `ADR-2`);
33
- - file:line базлайна кода, куда вносится изменение;
34
- - без копипасты реализации продукта; крупные детали — ссылками на design, не пересказом.
35
-
36
- Каждая задача — чекбокс `- [ ]`. Исполнитель переворачивает чекбокс в `[x]` в конце
37
- задачи вместе со строкой «сделано → коммит <hash>». Чекбокс — истина завершённости
38
- для восстановления прерванной работы; вердикты и контекст — в памяти Wolf. Линза
39
- «соответствие» сверяет чекбоксы с отчётами при приёмке волны.
40
-
41
- ## Структура файлов
42
-
43
- До определения задач спроектируй, какие файлы будут созданы или изменены и за что каждый отвечает. Здесь фиксируются решения декомпозиции.
44
-
45
- - Проектируй блоки с ясными границами и определёнными интерфейсами. У каждого файла — одна ясная ответственность.
46
- - Над кодом, который держится в контексте целиком, ты рассуждаешь лучше, а правки точечнее. Предпочитай маленькие сфокусированные файлы разросшимся.
47
- - Файлы, меняющиеся вместе, живут вместе. Дели по ответственности, не по техническим слоям.
48
- - В существующей кодовой базе следуй устоявшимся паттернам. Если она использует большие файлы — не перестраивай в одиночку; но если файл, который ты правишь, разросся — включить разбиение в план разумно.
49
-
50
- Эта структура определяет декомпозицию задач. Каждая задача должна давать самодостаточные изменения, осмысленные независимо.
51
-
52
- ## Гранулярность bite-sized
53
-
54
- **Каждый шаг — одно действие (2–5 минут):**
55
-
56
- - «Напиши падающий тест» — шаг
57
- - «Запусти и убедись, что он падает» — шаг
58
- - «Напиши минимальный код, чтобы тест прошёл» — шаг
59
- - «Запусти тесты и убедись, что проходят» — шаг
60
- - «Закоммить» — шаг
61
-
62
- ## Заголовок плана
63
-
64
- **Каждый план ОБЯЗАН начинаться с этого заголовка:**
65
-
66
- ```markdown
67
- # [Имя фичи] — план реализации
68
-
69
- > **Исполнителям:** REQUIRED-СКИЛЛ: используй wolf-sdd (рекомендуется) ИЛИ wolf-execute
70
- > для поэтапной реализации этого плана. Шаги оформлены чекбоксами (`- [ ]`) для трекинга.
71
-
72
- **Цель:** [Одно предложение — что строим]
73
-
74
- **Архитектура:** [2–3 предложения о подходе]
75
-
76
- **Стек:** [Ключевые технологии/библиотеки]
77
-
78
- ---
79
- ```
80
-
81
- ## Структура задачи
82
-
83
- ````markdown
84
- ### Задача N: [Имя компонента]
85
-
86
- **Файлы:**
87
-
88
- - Create: `точный/путь/к/file.ts`
89
- - Modify: `точный/путь/к/existing.ts:123-145`
90
- - Test: `tests/точный/путь/к/test.ts`
91
-
92
- - [ ] **Шаг 1: Напиши падающий тест**
93
-
94
- ```typescript
95
- it('конкретное поведение', () => {
96
- expect(fn(input)).toBe(expected);
97
- });
98
- ```
99
-
100
- - [ ] **Шаг 2: Запусти тест — убедись, что падает**
101
-
102
- Запуск: `npx vitest run tests/path/test.ts -t "конкретное поведение"`
103
- Ожидание: FAIL — «fn is not defined»
104
-
105
- - [ ] **Шаг 3: Напиши минимальную реализацию**
106
-
107
- ```typescript
108
- export function fn(input: string): string {
109
- return 'expected';
110
- }
111
- ```
112
-
113
- - [ ] **Шаг 4: Запусти тест — убедись, что проходит**
114
-
115
- Запуск: `npx vitest run tests/path/test.ts -t "конкретное поведение"`
116
- Ожидание: PASS
117
-
118
- - [ ] **Шаг 5: Закоммить**
119
-
120
- ```bash
121
- git add tests/path/test.ts src/path/file.ts
122
- git commit -m "feat: add specific feature"
123
- ```
124
- ````
125
-
126
- ## Никаких плейсхолдеров
127
-
128
- Каждый шаг обязан содержать фактический контент, нужный исполнителю. Это **провалы плана** — никогда так не пиши:
129
-
130
- - «TBD», «TODO», «сделаем позже», «заполнить детали»
131
- - «Добавить соответствующую обработку ошибок» / «добавить валидацию» / «обработать краевые случаи»
132
- - «Написать тесты для вышенаписанного» (без фактического кода теста)
133
- - «Аналогично задаче N» (повтори код — исполнитель может читать задачи не по порядку)
134
- - Шаги, описывающие ЧТО делать, без КАК (для шагов с кодом — блоки кода обязательны)
135
- - Ссылки на типы, функции или методы, не определённые ни в одной задаче
136
-
137
- ## Помни
138
-
139
- - Всегда точные пути файлов
140
- - Полный код в каждом шаге — если шаг меняет код, покажи код
141
- - Точные команды с ожидаемым выводом
142
- - DRY, YAGNI, TDD, частые коммиты
143
-
144
- ## Саморевью
145
-
146
- После написания полного плана посмотри на него свежим взглядом и сверь со спекой. Это чеклист для себя, не диспетчеризация субагентов.
147
-
148
- **1. Покрытие спеки:** пробегись по каждой секции/требованию спеки. Можешь указать задачу, которая её реализует? Перечисли пробелы.
149
-
150
- **2. Скан плейсхолдеров:** поищи в плане red flags — паттерны из секции «Никаких плейсхолдеров» выше. Исправь.
151
-
152
- **3. Консистентность типов:** совпадают ли типы, сигнатуры методов и имена свойств в поздних задачах с определёнными в ранних? Функция `clearLayers()` в задаче 3 и `clearFullLayers()` в задаче 7 — это баг.
153
-
154
- Нашёл проблемы — исправь на месте. Пересматривать заново не нужно. Требование спеки без задачи — добавь задачу.
155
-
156
- ## Передача в исполнение
157
-
158
- После сохранения плана предложи выбор режима исполнения:
159
-
160
- **«План готов и сохранён в `docs/plans/<файл>.md`. Два режима исполнения:**
161
-
162
- **1. Через субагентов (wolf-sdd, рекомендуется)** — свежий воркер на каждую задачу через executor-lead, 2-стадийное ревью между задачами, быстрая итерация
163
-
164
- **2. Линейно (wolf-execute)** — исполнение задач в этой сессии без субагентов, батчами с чекпоинтами
165
-
166
- **Какой режим?»**
167
-
168
- **Выбран wolf-sdd:** свежий воркер на задачу + двухстадийное ревью (спека → качество) силами worker-reviewer.
169
-
170
- **Выбран wolf-execute:** батч-исполнение с чекпоинтами; верификация — `npm run check` после завершённых блоков работы.
171
-
172
- ---
173
-
174
- ## Трассировка адаптации
175
-
176
- > Источник: `~/.config/opencode/superpowers/skills/writing-plans/SKILL.md`, upstream 6efe32c (2026-04-23)
177
-
178
- | Пункт источника | Судьба | Почему |
179
- | ------------------------------------------------------ | ------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------- |
180
- | Zero-context принцип | сохранено + усилено «вход воркеров по брифам» | Спека §5.2 |
181
- | «created by brainstorming skill» (worktree) | заменено: worktree до старта исполнения, правило `.worktrees/<имя-задачи>` | H5; upstream-ребро brainstorm→worktree одностороннее, не воспроизводим |
182
- | Путь `docs/superpowers/plans/` | заменено → `docs/plans/…` | Harness-привязка (research §1) |
183
- | Заголовок «REQUIRED SUB-SKILL: sdd or executing-plans» | заменено → wolf-sdd ИЛИ wolf-execute | Рёбра набора Wolf |
184
- | Проверка масштаба | сохранено | Ядро |
185
- | Структура файлов | сохранено | Ядро |
186
- | Bite-sized гранулярность | сохранено | Ядро |
187
- | Структура задачи (пример) | сохранено; пример переведён (vitest вместо pytest) | Нейтральная иллюстрация под стек проекта |
188
- | «No Placeholders» (6 провалов) | сохранено полностью (6/6) | H7 |
189
- | «Remember» (4) | сохранено полностью (4/4) | H7 |
190
- | Саморевью (3 проверки) | сохранено полностью (3/3) | Чеклист-ядро |
191
- | Execution Handoff (2 опции) | сохранено; sdd-опция → executor-lead/worker-\*, ревью → worker-reviewer; добавлен `npm run check` | Wolf-переплетение |
192
- | — | добавлено: задача = бриф воркера (worker-implementer) | Zero-context вход по брифам |
193
-
194
- Перенесённые списки: anti-patterns «No Placeholders» 6/6, «Remember» 4/4, саморевью 3/3.
31
+ При доступной и разрешённой диспетчеризации L1 использует wolf-sdd. Иначе исполнитель с подходящей ролью использует wolf-execute. Не проси пользователя выбирать внутренний механизм без существенного влияния на стоимость, риск или его предпочтения.
@@ -1,80 +1,41 @@
1
1
  ---
2
2
  name: wolf-review
3
- description: Мульти-линзовое ревью документов (doc-review): mr-wolf оркестрирует линзы-воркеров, цикл до сходимости. Use when the user asks to review a document, run doc-review, or critique a spec/plan/report.
3
+ description: "Проверяй requirements, design, plan, test-plan или отчёт независимыми линзами. Привязывай вывод к версии, разрешай конфликты и отличай одобрение от исчерпания бюджета ревью."
4
4
  ---
5
5
 
6
- # wolf-review — мульти-линзовое ревью документов
6
+ # Ревью артефактов
7
7
 
8
- > Источник: новый; рамка analyze-doc (PoC) + REVIEW-001 (архив v2.0 §2.5) +
9
- > практика мульти-линзового ревью; отклонение: security-линза опущена
10
- > (спека §6).
8
+ ## Владение и вход
11
9
 
12
- ## Трассировка переноса
10
+ L0 задаёт критерии и поручает цикл executor-lead; L1 вызывает worker-reviewer. L0 не спавнит L2 напрямую. Вход: цель ревью, документы с revision/hash, baseline, применимые требования/политика и бюджет. Получи активную методику линз; при отсутствии используй приведённый минимальный набор и обозначь fallback.
13
11
 
14
- | Пункт источника | Судьба |
15
- | ------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- |
16
- | Рамочный паттерн analyze-doc: методика в памяти, файл — тонкая рамка | Сохранено |
17
- | Протокол подтягивания playbook перед прогоном | Сохранено; запрос `wolf search "wolf-review playbook"`, наибольшая версия |
18
- | Мульти-линзовость, изоляция линз в чистых сессиях (REVIEW-001) | Сохранено |
19
- | Перспектива линз полнота → консистентность → типоспецифичные (REVIEW-001) | Сохранено |
20
- | Контракты SUMMARY/VERDICT (REVIEW-001: вердикт «CHANGES») | Сохранено; «CHANGES» заменён на `CHANGES_REQUIRED` (стандартизация по спеке §6) |
21
- | Дедуп находок, подсчёт, счётчик раундов, критерий сходимости (REVIEW-001) | Сохранено |
22
- | Конфликты находок между линзами решает владелец (REVIEW-001) | Сохранено |
23
- | Security-линза (REVIEW-001) | Отброшено: осознанное отклонение — для документов не тянем (спека §6) |
24
- | Самомутация playbook по фидбеку (analyze-doc PoC, п. 3) | Заменено: фидбек о методике/линзах → жалобный контур (`wolf complain`, тег complaint); мутатор — Стюард |
25
- | Исполнитель-аналитик PoC (apprentice) | Заменено: линзы исполняют worker-reviewer; оркестратор цикла — mr-wolf |
26
- | Продуктовый код оркестрации | Отброшено: весь цикл ведёт mr-wolf по протоколу этого скилла (спека §10) |
12
+ ## Мандаты линз
27
13
 
28
- ## Рамка (методика — НЕ в этом файле)
14
+ - Requirements: смысл, scope, атомарность, AC и неизвестное.
15
+ - Design ↔ requirements/code: покрытие, контракты, решения и отказы.
16
+ - Plan ↔ design/test-plan: зависимости, исполнимость, проверки и интеграция.
17
+ - Test-plan ↔ requirements/design: oracle, сценарии, NFR и риски.
18
+ - Условная security/trust: внешние инструкции, права, секреты, установка, исполнение, хранение и миграции. Запускай линзу, когда документ затрагивает перечисленное; решение о пропуске security-линзы зафиксируй в review.md.
29
19
 
30
- Линзы — playbook-объекты памяти Wolf: они эволюционируют без рестарта
31
- (мутатор — Стюард, через жалобы). Этот файл — только рамка: протокол цикла
32
- и границы.
20
+ Своему ревьюеру передай только мандат и исходные артефакты, не чужие находки и не ожидаемый вердикт. Общий playbook задаёт дисциплину; узкий мандат задаёт область и исключает обязательный проход несвязанных зон. Существенную находку вне мандата отметь отдельно для маршрутизации.
33
21
 
34
- ### Протокол цикла (оркестратор — mr-wolf)
22
+ ## Находка и вердикт
35
23
 
36
- 1. **До прогона** получи актуальный playbook линз:
37
- `wolf search "wolf-review playbook"` — запись с наибольшей версией.
38
- Состав и параметры каждой линзы — из playbook, не отсюда.
39
- 2. **Порядок линз**: полнота → консистентность → типоспецифичные.
40
- 3. **Спавн**: каждую линзу исполняет ОТДЕЛЬНЫЙ worker-reviewer в чистой
41
- сессии через {{tool.task}}. Изоляция бьёт по слепым зонам саморевью.
42
- Узкий ревьюер: чужие замечания запрещены — воркер получает только свой
43
- мандат (документ + своя линза), находки других линз ему не показываются.
44
- 4. **Контракты** — обязательные строки отчёта каждой линзы:
45
- - `SUMMARY: X critical / Y major / Z minor`
46
- - `VERDICT: APPROVED | CHANGES_REQUIRED`
47
- 5. **Дедуп и подсчёт**: mr-wolf сводит находки всех линз, убирает
48
- дубликаты, считает critical/major/minor по итоговому набору.
49
- 6. **Сходимость**: цикл останавливается при 0 critical / 0 blocking ИЛИ
50
- по лимиту раундов (по умолчанию 3).
51
- 7. **Цикл правок**: автор правит документ → перезапуск ТОЛЬКО упавшей
52
- линзы; прошедшие линзы не перегоняются.
53
- 8. **Конфликты**: противоречащие находки разных линз разрешает владелец
54
- (слепой судьи в MVP нет) — mr-wolf докладывает конфликт, не выбирает сам.
24
+ Находка: finding_id, severity, location/revision, нарушенный AC/инвариант, evidence, влияние, рекомендуемая проверка. Critical — потеря данных/полномочий/существенная неверность; Major — блокирующий дефект заявленного результата; Minor — неблокирующее улучшение. Блокировка допускается отдельно при обоснованном риске, а не по стилю.
55
25
 
56
- ## Линзы конвейера (v2): один вопрос — одна пара файлов
26
+ Отчёт:
27
+ SUMMARY: N critical / N major / N minor
28
+ VERDICT: APPROVED | CHANGES_REQUIRED | INCONCLUSIVE
29
+ Список находок, область проверки и ограничения. APPROVED требует отсутствия Critical/Major и обоснованных blocking-рисков. Нехватка входов означает INCONCLUSIVE.
57
30
 
58
- | Линза | Пара файлов | Вопрос |
59
- | --------------- | ------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
60
- | Полнота | requirements.md (целиком) | Атомарность, недвусмысленность, проверяемость записей; критерии готовности анатомии (история+формальная запись, AC, источник, `[НЕОПРЕДЕЛЕНО]` не сжат). Семантика; механику ловит линт doctor. |
61
- | Консистентность | design.md | Соответствие requirements (REQ/NFR покрыты), базлайну кода (контракты с file:line), ADR-карточки полны. |
62
- | Соответствие | plan.md ↔ design.md | Каждая задача ссылается на §design; контракты не переопределены; чекбоксы `[x]` сверены с отчётами при приёмке волны. |
63
- | Покрытие AC | test-plan.md ↔ requirements.md | Сценарий на каждый REQ-NN; AC не переизобретены; маппинг на файлы существует. |
31
+ ## Цикл
64
32
 
65
- ## Гейты (Kiro-паттерн)
33
+ 1. L1 фиксирует версии и запускает независимые линзы; дедуплицирует, сохраняя источники и разные основания.
34
+ 2. Автор отвечает по каждой находке: принято/опровергнуто/отложено/нужно уточнение с evidence. Продуктовые конфликты решает L0/владелец; технические в мандате — L1 с обоснованием.
35
+ 3. После исправлений определяет изменённые основания. Перезапускает все затронутые линзы; неизменённые вердикты переиспользует с доказанным соответствием revision.
36
+ 4. По умолчанию максимум 3 раунда; лимит задаётся до цикла. Исчерпание бюджета → UNRESOLVED в сводке L1, незакрытые находки и эскалация; это не APPROVED.
37
+ 5. Сохраняет в review.md append-only: artifact revision, линза/версия методики, verdict, finding IDs, ответы и evidence. По новой версии документа прежнее одобрение не переносится без анализа влияния.
66
38
 
67
- 1. Владелец аппрувит requirements.md до запуска технических ступеней.
68
- 2. ADR-карточки design.md — владельцу на визу отдельно (продуктовые выборы, не техника).
69
- 3. Следующая ступень (design → plan → test-plan) генерируется только после аппрува предыдущей.
70
- 4. Технические артефакты ревьюят линзы; владельцу — выжимка на визу.
71
- 5. Журнал вердиктов: вердикты линз и гейтов владельца — append-only строкой
72
- (линза | дата | вердикт | ключевые находки | что исправлено) в `review.md`
73
- папки фичи — каждую линзо-итерацию; детали — в памяти Wolf, в git — свод.
39
+ ## Гейты
74
40
 
75
- ### Границы рамки
76
-
77
- - Критичные запреты: `rm -rf`, `sudo`, деструктивный git, секреты.
78
- - Продуктового кода оркестрации нет — цикл ведёт mr-wolf по этому протоколу.
79
- - Этот файл не содержит методику линз и не должен её содержать:
80
- версии линз живут в памяти Wolf.
41
+ Владелец утверждает требования и существенные ADR; технические артефакты утверждает назначенный ответственный после ревью. Следующий этап получает одобренные версии. Пакет ревью подтверждает проверенные свойства, не гарантирует отсутствие всех дефектов.