mister-wolf 2.14.1 → 2.15.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.
- package/README.md +2 -0
- package/README.ru.md +2 -0
- package/dist/adapters/cli/commands/memory-doctor.d.ts.map +1 -1
- package/dist/adapters/cli/commands/memory-doctor.js +32 -1
- package/dist/adapters/cli/commands/memory-doctor.js.map +1 -1
- package/dist/adapters/cli/commands/memory-scaffold.d.ts.map +1 -1
- package/dist/adapters/cli/commands/memory-scaffold.js +15 -0
- package/dist/adapters/cli/commands/memory-scaffold.js.map +1 -1
- package/dist/adapters/cli/commands/memory-sync.d.ts.map +1 -1
- package/dist/adapters/cli/commands/memory-sync.js +8 -0
- package/dist/adapters/cli/commands/memory-sync.js.map +1 -1
- package/dist/adapters/fs/artifact-fs.d.ts +4 -0
- package/dist/adapters/fs/artifact-fs.d.ts.map +1 -0
- package/dist/adapters/fs/artifact-fs.js +29 -0
- package/dist/adapters/fs/artifact-fs.js.map +1 -0
- package/dist/app/use-cases/artifact-front-matter.d.ts +5 -0
- package/dist/app/use-cases/artifact-front-matter.d.ts.map +1 -0
- package/dist/app/use-cases/artifact-front-matter.js +16 -0
- package/dist/app/use-cases/artifact-front-matter.js.map +1 -0
- package/dist/app/use-cases/lint-artifacts.d.ts +18 -0
- package/dist/app/use-cases/lint-artifacts.d.ts.map +1 -0
- package/dist/app/use-cases/lint-artifacts.js +249 -0
- package/dist/app/use-cases/lint-artifacts.js.map +1 -0
- package/dist/app/use-cases/scaffold-agent.d.ts +1 -1
- package/dist/app/use-cases/scaffold-agent.d.ts.map +1 -1
- package/dist/app/use-cases/scaffold-agent.js +1 -1
- package/dist/app/use-cases/scaffold-agent.js.map +1 -1
- package/dist/app/use-cases/scaffold-artifact.d.ts +22 -0
- package/dist/app/use-cases/scaffold-artifact.d.ts.map +1 -0
- package/dist/app/use-cases/scaffold-artifact.js +153 -0
- package/dist/app/use-cases/scaffold-artifact.js.map +1 -0
- package/dist/app/use-cases/sync-artifact-index.d.ts +20 -0
- package/dist/app/use-cases/sync-artifact-index.d.ts.map +1 -0
- package/dist/app/use-cases/sync-artifact-index.js +68 -0
- package/dist/app/use-cases/sync-artifact-index.js.map +1 -0
- package/dist/domain/memory-types.d.ts +12 -0
- package/dist/domain/memory-types.d.ts.map +1 -1
- package/dist/domain/memory-types.js +4 -0
- package/dist/domain/memory-types.js.map +1 -1
- package/dist/domain/schemas/relation-schema.d.ts +1 -1
- package/package.json +1 -1
- package/templates/.wolf/router.log +1 -1
- package/templates/base/skills/finishing-a-development-branch/SKILL.md +32 -13
- package/templates/base/skills/receiving-code-review/SKILL.md +39 -0
- package/templates/base/skills/test-driven-development/SKILL.md +59 -37
- package/templates/base/skills/using-git-worktrees/SKILL.md +25 -15
- package/templates/base/skills/verification-before-completion/SKILL.md +39 -25
- package/templates/base/skills/wolf-brainstorm/SKILL.md +51 -36
- package/templates/base/skills/wolf-design/SKILL.md +45 -0
- package/templates/base/skills/wolf-execute/SKILL.md +30 -13
- package/templates/base/skills/wolf-plan/SKILL.md +38 -21
- package/templates/base/skills/wolf-review/SKILL.md +33 -14
- package/templates/base/skills/wolf-sdd/SKILL.md +38 -16
- package/templates/base/skills/wolf-skill-intake/SKILL.md +66 -0
- package/templates/base/skills/wolf-testplan/SKILL.md +37 -0
- package/templates/base/skills/writing-skills/SKILL.md +40 -0
|
@@ -10,15 +10,15 @@ description: Используй при реализации любой фичи
|
|
|
10
10
|
|
|
11
11
|
## Трассировка адаптации
|
|
12
12
|
|
|
13
|
-
| Пункт upstream
|
|
14
|
-
|
|
15
|
-
| Iron Law, цикл RED-GREEN-REFACTOR, обязательные верификации RED/GREEN, dot-диаграмма
|
|
16
|
-
| Таблица рационализаций (11), red flags (13), «Why Order Matters» (5 аргументов), анти-паттерны тестирования (3), чеклист верификации (8), «When Stuck» (4), примеры Good/Bad, пример багфикса | **сохранено полностью** по смыслу дословно (H7)
|
|
17
|
-
| `npm test <путь>`
|
|
18
|
-
| «Ask your human partner» (исключения из Iron Law)
|
|
19
|
-
| Чеклист верификации
|
|
20
|
-
| Ссылка на внешний `@testing-anti-patterns.md`
|
|
21
|
-
| Контур лица
|
|
13
|
+
| Пункт upstream | Судьба |
|
|
14
|
+
| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------- |
|
|
15
|
+
| Iron Law, цикл RED-GREEN-REFACTOR, обязательные верификации RED/GREEN, dot-диаграмма | **сохранено** дословно (перевод) |
|
|
16
|
+
| Таблица рационализаций (11), red flags (13), «Why Order Matters» (5 аргументов), анти-паттерны тестирования (3), чеклист верификации (8), «When Stuck» (4), примеры Good/Bad, пример багфикса | **сохранено полностью** по смыслу дословно (H7) |
|
|
17
|
+
| `npm test <путь>` | **заменено**: точечный прогон — `npx vitest run <путь>` (стек проекта — vitest); полный — `npm run check` |
|
|
18
|
+
| «Ask your human partner» (исключения из Iron Law) | **заменено**: явное разрешение владельца; воркер эскалирует запрос через executor-lead, сам не решает |
|
|
19
|
+
| Чеклист верификации | **дополнено**: механика {{tool.todowrite}} — один пункт на чекбокс |
|
|
20
|
+
| Ссылка на внешний `@testing-anti-patterns.md` | **отброшено**: reference-файл вне шаблона; суть (3 пункта) встроена в раздел «Анти-паттерны тестирования» |
|
|
21
|
+
| Контур лица | **добавлено**: до задачи — `wolf search "worker-implementer playbook"` (брать наибольшую версию) |
|
|
22
22
|
|
|
23
23
|
## Обзор
|
|
24
24
|
|
|
@@ -31,12 +31,14 @@ description: Используй при реализации любой фичи
|
|
|
31
31
|
## Когда применять
|
|
32
32
|
|
|
33
33
|
**Всегда:**
|
|
34
|
+
|
|
34
35
|
- Новые фичи
|
|
35
36
|
- Багфиксы
|
|
36
37
|
- Рефакторинг
|
|
37
38
|
- Изменения поведения
|
|
38
39
|
|
|
39
40
|
**Исключения (только с явного разрешения владельца — эскалируй через executor-lead):**
|
|
41
|
+
|
|
40
42
|
- Одноразовые прототипы
|
|
41
43
|
- Генерированный код
|
|
42
44
|
- Конфигурационные файлы
|
|
@@ -52,6 +54,7 @@ description: Используй при реализации любой фичи
|
|
|
52
54
|
Написал код до теста? Удали. Начни заново.
|
|
53
55
|
|
|
54
56
|
**Без исключений:**
|
|
57
|
+
|
|
55
58
|
- Не оставляй «как референс»
|
|
56
59
|
- Не «адаптируй» его при написании тестов
|
|
57
60
|
- Не смотри на него
|
|
@@ -97,12 +100,13 @@ test('повторяет неудачную операцию 3 раза', async
|
|
|
97
100
|
return 'success';
|
|
98
101
|
};
|
|
99
102
|
|
|
100
|
-
|
|
103
|
+
const result = await retryOperation(operation);
|
|
101
104
|
|
|
102
|
-
|
|
103
|
-
|
|
105
|
+
expect(result).toBe('success');
|
|
106
|
+
expect(attempts).toBe(3);
|
|
104
107
|
});
|
|
105
|
-
|
|
108
|
+
|
|
109
|
+
````
|
|
106
110
|
Ясное имя, тестирует реальное поведение, одно
|
|
107
111
|
</Good>
|
|
108
112
|
|
|
@@ -116,11 +120,13 @@ test('retry works', async () => {
|
|
|
116
120
|
await retryOperation(mock);
|
|
117
121
|
expect(mock).toHaveBeenCalledTimes(3);
|
|
118
122
|
});
|
|
119
|
-
|
|
123
|
+
````
|
|
124
|
+
|
|
120
125
|
Расплывчатое имя, тестирует мок, а не код
|
|
121
126
|
</Bad>
|
|
122
127
|
|
|
123
128
|
**Требования:**
|
|
129
|
+
|
|
124
130
|
- Одно поведение
|
|
125
131
|
- Ясное имя
|
|
126
132
|
- Реальный код (моки — только при неизбежности)
|
|
@@ -134,6 +140,7 @@ npx vitest run <путь-к-тесту>
|
|
|
134
140
|
```
|
|
135
141
|
|
|
136
142
|
Подтверди:
|
|
143
|
+
|
|
137
144
|
- Тест падает (а не ошибается)
|
|
138
145
|
- Сообщение об ошибке ожидаемое
|
|
139
146
|
- Падает из-за отсутствия фичи (не из-за опечаток)
|
|
@@ -189,6 +196,7 @@ npx vitest run <путь-к-тесту>
|
|
|
189
196
|
```
|
|
190
197
|
|
|
191
198
|
Подтверди:
|
|
199
|
+
|
|
192
200
|
- Тест проходит
|
|
193
201
|
- Остальные тесты всё ещё проходят
|
|
194
202
|
- Вывод чистый (без ошибок и предупреждений)
|
|
@@ -200,6 +208,7 @@ npx vitest run <путь-к-тесту>
|
|
|
200
208
|
### РЕФАКТОРИНГ — приберись
|
|
201
209
|
|
|
202
210
|
Только после зелёного:
|
|
211
|
+
|
|
203
212
|
- Убери дублирование
|
|
204
213
|
- Улучши имена
|
|
205
214
|
- Вынеси хелперы
|
|
@@ -212,17 +221,18 @@ npx vitest run <путь-к-тесту>
|
|
|
212
221
|
|
|
213
222
|
## Хорошие тесты
|
|
214
223
|
|
|
215
|
-
| Качество
|
|
216
|
-
|
|
224
|
+
| Качество | Хорошо | Плохо |
|
|
225
|
+
| ----------------- | ------------------------------------- | ------------------------------------------ |
|
|
217
226
|
| **Минимальность** | Одно поведение. «И» в имени? Раздели. | `test('проверяет email, домен и пробелы')` |
|
|
218
|
-
| **Ясность**
|
|
219
|
-
| **Намерение**
|
|
227
|
+
| **Ясность** | Имя описывает поведение | `test('test1')` |
|
|
228
|
+
| **Намерение** | Демонстрирует желаемый API | Затуманивает, что код должен делать |
|
|
220
229
|
|
|
221
230
|
## Почему важен порядок
|
|
222
231
|
|
|
223
232
|
**«Я напишу тесты после, чтобы проверить, что работает»**
|
|
224
233
|
|
|
225
234
|
Тесты, написанные после кода, проходят сразу. Прохождение сразу не доказывает ничего:
|
|
235
|
+
|
|
226
236
|
- Может тестировать не то
|
|
227
237
|
- Может тестировать реализацию, а не поведение
|
|
228
238
|
- Может упускать пограничные случаи, которые ты забыл
|
|
@@ -233,6 +243,7 @@ npx vitest run <путь-к-тесту>
|
|
|
233
243
|
**«Я уже вручно протестировал все пограничные случаи»**
|
|
234
244
|
|
|
235
245
|
Ручное тестирование ад-хок. Ты думаешь, что проверил всё, но:
|
|
246
|
+
|
|
236
247
|
- Нет записи о том, что проверено
|
|
237
248
|
- Нельзя перезапустить при изменении кода
|
|
238
249
|
- Легко забыть случаи под давлением
|
|
@@ -243,6 +254,7 @@ npx vitest run <путь-к-тесту>
|
|
|
243
254
|
**«Удалить X часов работы расточительно»**
|
|
244
255
|
|
|
245
256
|
Ошибка невозвратных издержек. Время уже потрачено. Выбор сейчас:
|
|
257
|
+
|
|
246
258
|
- Удалить и переписать по TDD (ещё X часов, высокая уверенность)
|
|
247
259
|
- Оставить и дописать тесты после (30 минут, низкая уверенность, вероятные баги)
|
|
248
260
|
|
|
@@ -251,6 +263,7 @@ npx vitest run <путь-к-тесту>
|
|
|
251
263
|
**«TDD догматично, прагматизм означает адаптацию»**
|
|
252
264
|
|
|
253
265
|
TDD — И есть прагматизм:
|
|
266
|
+
|
|
254
267
|
- Находит баги до коммита (быстрее отладки после)
|
|
255
268
|
- Предотвращает регрессии (тесты ловят поломки сразу)
|
|
256
269
|
- Документирует поведение (тесты показывают, как использовать код)
|
|
@@ -270,19 +283,19 @@ TDD — И есть прагматизм:
|
|
|
270
283
|
|
|
271
284
|
## Распространённые рационализации
|
|
272
285
|
|
|
273
|
-
| Оправдание
|
|
274
|
-
|
|
275
|
-
| «Слишком просто, чтобы тестировать»
|
|
276
|
-
| «Напишу тесты после»
|
|
277
|
-
| «Тесты после достигают тех же целей»
|
|
278
|
-
| «Уже протестировал вручную»
|
|
279
|
-
| «Удалить X часов работы расточительно»
|
|
280
|
-
| «Оставлю как референс, напишу тесты с нуля» | Ты его адаптируешь. Это тесты-после. Удалить = удалить.
|
|
281
|
-
| «Нужно сначала поисследовать»
|
|
282
|
-
| «Тест сложный — дизайн неясен»
|
|
283
|
-
| «TDD меня замедлит»
|
|
284
|
-
| «Ручной тест быстрее»
|
|
285
|
-
| «В существующем коде нет тестов»
|
|
286
|
+
| Оправдание | Реальность |
|
|
287
|
+
| ------------------------------------------- | ---------------------------------------------------------------------------- |
|
|
288
|
+
| «Слишком просто, чтобы тестировать» | Простой код ломается. Тест занимает 30 секунд. |
|
|
289
|
+
| «Напишу тесты после» | Тесты, проходящие сразу, не доказывают ничего. |
|
|
290
|
+
| «Тесты после достигают тех же целей» | Тесты-после = «что это делает?». Тесты-первый = «что это должно делать?» |
|
|
291
|
+
| «Уже протестировал вручную» | Ад-хок ≠ систематично. Нет записи, нельзя перезапустить. |
|
|
292
|
+
| «Удалить X часов работы расточительно» | Ошибка невозвратных издержек. Держать непроверенный код — техдолг. |
|
|
293
|
+
| «Оставлю как референс, напишу тесты с нуля» | Ты его адаптируешь. Это тесты-после. Удалить = удалить. |
|
|
294
|
+
| «Нужно сначала поисследовать» | Ок. Выброси исследование, начни с TDD. |
|
|
295
|
+
| «Тест сложный — дизайн неясен» | Слушай тест. Сложно тестировать = сложно использовать. |
|
|
296
|
+
| «TDD меня замедлит» | TDD быстрее отладки. Прагматизм = тест-первый. |
|
|
297
|
+
| «Ручной тест быстрее» | Ручной не доказывает пограничные случаи. Перепроверять при каждом изменении. |
|
|
298
|
+
| «В существующем коде нет тестов» | Ты его улучшаешь. Добавляй тесты для существующего кода. |
|
|
286
299
|
|
|
287
300
|
## Red flags — ОСТАНОВИСЬ и начни заново
|
|
288
301
|
|
|
@@ -307,6 +320,7 @@ TDD — И есть прагматизм:
|
|
|
307
320
|
**Баг:** принимается пустой email
|
|
308
321
|
|
|
309
322
|
**КРАСНЫЙ**
|
|
323
|
+
|
|
310
324
|
```typescript
|
|
311
325
|
test('отклоняет пустой email', async () => {
|
|
312
326
|
const result = await submitForm({ email: '' });
|
|
@@ -315,12 +329,14 @@ test('отклоняет пустой email', async () => {
|
|
|
315
329
|
```
|
|
316
330
|
|
|
317
331
|
**Верифицируй КРАСНЫЙ**
|
|
332
|
+
|
|
318
333
|
```bash
|
|
319
334
|
$ npx vitest run <путь-к-тесту>
|
|
320
335
|
FAIL: expected 'Email required', got undefined
|
|
321
336
|
```
|
|
322
337
|
|
|
323
338
|
**ЗЕЛЁНЫЙ**
|
|
339
|
+
|
|
324
340
|
```typescript
|
|
325
341
|
function submitForm(data: FormData) {
|
|
326
342
|
if (!data.email?.trim()) {
|
|
@@ -331,6 +347,7 @@ function submitForm(data: FormData) {
|
|
|
331
347
|
```
|
|
332
348
|
|
|
333
349
|
**Верифицируй ЗЕЛЁНЫЙ**
|
|
350
|
+
|
|
334
351
|
```bash
|
|
335
352
|
$ npx vitest run <путь-к-тесту>
|
|
336
353
|
PASS
|
|
@@ -356,12 +373,12 @@ PASS
|
|
|
356
373
|
|
|
357
374
|
## Когда застрял
|
|
358
375
|
|
|
359
|
-
| Проблема
|
|
360
|
-
|
|
361
|
-
| Не знаю, как тестировать
|
|
362
|
-
| Тест слишком сложный
|
|
363
|
-
| Приходится мокать всё
|
|
364
|
-
| Подготовка теста огромная | Вынеси хелперы. Всё ещё сложно? Упрости дизайн.
|
|
376
|
+
| Проблема | Решение |
|
|
377
|
+
| ------------------------- | ----------------------------------------------------------------------------------------------- |
|
|
378
|
+
| Не знаю, как тестировать | Напиши желаемый API. Сначала напиши assertion. Запроси подсказку владельца через executor-lead. |
|
|
379
|
+
| Тест слишком сложный | Дизайн слишком сложный. Упрости интерфейс. |
|
|
380
|
+
| Приходится мокать всё | Код слишком связан. Используй внедрение зависимостей. |
|
|
381
|
+
| Подготовка теста огромная | Вынеси хелперы. Всё ещё сложно? Упрости дизайн. |
|
|
365
382
|
|
|
366
383
|
## Интеграция с отладкой
|
|
367
384
|
|
|
@@ -389,3 +406,8 @@ PASS
|
|
|
389
406
|
```
|
|
390
407
|
|
|
391
408
|
Без исключений — кроме явного разрешения владельца.
|
|
409
|
+
|
|
410
|
+
## Конвейер (2.15)
|
|
411
|
+
|
|
412
|
+
Сценарии `docs/dev/<дата>-<slug>/test-plan.md` — заготовки КРАСНОЙ фазы: TDD-цикл
|
|
413
|
+
фичи конвейера начинается с переноса сценария в падающий тест, не с изобретения теста.
|
|
@@ -10,14 +10,14 @@ description: Используй при старте фичи, которой н
|
|
|
10
10
|
|
|
11
11
|
## Трассировка адаптации
|
|
12
12
|
|
|
13
|
-
| Пункт upstream
|
|
14
|
-
|
|
15
|
-
| Верификация gitignore (`git check-ignore`), автодетект сетапа, бейзлайн-тесты, механика `git worktree add`, отчёт о готовности, частые ошибки (4), red flags Never/Always (5/4) | **сохранено** (red flags — дословно по смыслу, H7)
|
|
16
|
-
| Приоритет каталогов upstream (`.worktrees` / `worktrees` / глобальный / опрос)
|
|
17
|
-
| `grep CLAUDE.md`
|
|
18
|
-
| Бейзлайн `npm test`
|
|
19
|
-
| Глобальный путь `~/.config/superpowers/worktrees/`
|
|
20
|
-
| Ветка-альтернатива `worktrees/` (без точки), персоналия upstream («Jesse's rule»)
|
|
13
|
+
| Пункт upstream | Судьба |
|
|
14
|
+
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------ |
|
|
15
|
+
| Верификация gitignore (`git check-ignore`), автодетект сетапа, бейзлайн-тесты, механика `git worktree add`, отчёт о готовности, частые ошибки (4), red flags Never/Always (5/4) | **сохранено** (red flags — дословно по смыслу, H7) |
|
|
16
|
+
| Приоритет каталогов upstream (`.worktrees` / `worktrees` / глобальный / опрос) | **заменено** правилом проекта: worktree всегда ВНУТРИ проекта — `.worktrees/<имя-задачи>` |
|
|
17
|
+
| `grep CLAUDE.md` | **заменено**: чтение AGENTS.md |
|
|
18
|
+
| Бейзлайн `npm test` | **заменено**: `npm run check` (верификационный примитив проекта) |
|
|
19
|
+
| Глобальный путь `~/.config/superpowers/worktrees/` | **отброшено**: противоречит правилу проекта (worktree внутри проекта) и непереносим (research §1: «глобальный путь worktrees») |
|
|
20
|
+
| Ветка-альтернатива `worktrees/` (без точки), персоналия upstream («Jesse's rule») | **отброшено**: единая конвенция `.worktrees/`; правило «чинить сломанное сразу» сохранено как механика без имени |
|
|
21
21
|
|
|
22
22
|
## Обзор
|
|
23
23
|
|
|
@@ -106,13 +106,13 @@ Worktree готов: <полный-путь>
|
|
|
106
106
|
|
|
107
107
|
## Быстрая шпаргалка
|
|
108
108
|
|
|
109
|
-
| Ситуация
|
|
110
|
-
|
|
111
|
-
| `.worktrees/` существует
|
|
112
|
-
| Не существует
|
|
113
|
-
| Каталог не игнорируется
|
|
114
|
-
| Тесты падают на бейзлайне
|
|
115
|
-
| Нет package.json / Cargo.toml и т.п. | Скипнуть установку зависимостей
|
|
109
|
+
| Ситуация | Действие |
|
|
110
|
+
| ------------------------------------ | ------------------------------------------------------ |
|
|
111
|
+
| `.worktrees/` существует | Использовать (проверить игнор) |
|
|
112
|
+
| Не существует | Создать внутри проекта `.worktrees/` (правило проекта) |
|
|
113
|
+
| Каталог не игнорируется | Добавить в .gitignore + коммит |
|
|
114
|
+
| Тесты падают на бейзлайне | Доложить о падениях + спросить |
|
|
115
|
+
| Нет package.json / Cargo.toml и т.п. | Скипнуть установку зависимостей |
|
|
116
116
|
|
|
117
117
|
## Частые ошибки
|
|
118
118
|
|
|
@@ -155,6 +155,7 @@ Worktree готов: /путь/к/проекту/.worktrees/auth
|
|
|
155
155
|
## Red flags
|
|
156
156
|
|
|
157
157
|
**Никогда:**
|
|
158
|
+
|
|
158
159
|
- Не создавать worktree без проверки игнора (project-local)
|
|
159
160
|
- Не пропускать бейзлайн-верификацию тестов
|
|
160
161
|
- Не продолжать с падающими тестами без вопроса
|
|
@@ -162,6 +163,7 @@ Worktree готов: /путь/к/проекту/.worktrees/auth
|
|
|
162
163
|
- Не пропускать проверку AGENTS.md
|
|
163
164
|
|
|
164
165
|
**Всегда:**
|
|
166
|
+
|
|
165
167
|
- Следовать правилу проекта: worktree внутри проекта, `.worktrees/<имя-задачи>`
|
|
166
168
|
- Верифицировать игнор для project-local каталогов
|
|
167
169
|
- Автодетектить и запускать сетап проекта
|
|
@@ -170,9 +172,17 @@ Worktree готов: /путь/к/проекту/.worktrees/auth
|
|
|
170
172
|
## Интеграция
|
|
171
173
|
|
|
172
174
|
**Вызывается из:**
|
|
175
|
+
|
|
173
176
|
- **wolf-sdd** — REQUIRED до старта исполнения задач (H5)
|
|
174
177
|
- **wolf-execute** — REQUIRED до старта исполнения задач (H5)
|
|
175
178
|
- Любого скилла, которому нужен изолированный workspace
|
|
176
179
|
|
|
177
180
|
**Пара с:**
|
|
181
|
+
|
|
178
182
|
- **finishing-a-development-branch** — REQUIRED для уборки после завершения работы
|
|
183
|
+
|
|
184
|
+
## Конвейер (2.15)
|
|
185
|
+
|
|
186
|
+
Параллельные потоки волны — отдельные worktree `.worktrees/<имя-задачи>` (агрегат
|
|
187
|
+
Стюарда по параллельным воркерам): независимые потоки стартуют параллельно,
|
|
188
|
+
конфликт-точки сериализуются порядком влитий.
|
|
@@ -10,12 +10,12 @@ description: Используй перед любым заявлением о з
|
|
|
10
10
|
|
|
11
11
|
## Трассировка адаптации
|
|
12
12
|
|
|
13
|
-
| Пункт upstream
|
|
14
|
-
|
|
15
|
-
| Iron Law, функция-гейт (5 шагов), таблица типовых сбоев (7), red flags (8), рационализации (8), ключевые паттерны (5), «Why This Matters» (5), «When To Apply» (2 списка) | **сохранено полностью** по смыслу дословно (H7; research §1: «Нет — полностью переносим»)
|
|
16
|
-
| «Agent delegation»
|
|
17
|
-
| Тестовая команда
|
|
18
|
-
| Nothing
|
|
13
|
+
| Пункт upstream | Судьба |
|
|
14
|
+
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------- |
|
|
15
|
+
| Iron Law, функция-гейт (5 шагов), таблица типовых сбоев (7), red flags (8), рационализации (8), ключевые паттерны (5), «Why This Matters» (5), «When To Apply» (2 списка) | **сохранено полностью** по смыслу дословно (H7; research §1: «Нет — полностью переносим») |
|
|
16
|
+
| «Agent delegation» | **заменено**: агенты → воркеры контура Wolf (worker-\*); отчёт воркера — не доказательство, dispatcher проверяет git-дифф и верификацию |
|
|
17
|
+
| Тестовая команда | **конкретизировано**: `npm run check` — верификационный примитив проекта (+ точечные прогоны `npx vitest run <путь>`) |
|
|
18
|
+
| Nothing | **отброшено**: ничего — привязок к harness у источника нет |
|
|
19
19
|
|
|
20
20
|
## Обзор
|
|
21
21
|
|
|
@@ -51,15 +51,15 @@ description: Используй перед любым заявлением о з
|
|
|
51
51
|
|
|
52
52
|
## Типовые сбои
|
|
53
53
|
|
|
54
|
-
| Заявление
|
|
55
|
-
|
|
56
|
-
| Тесты проходят
|
|
57
|
-
| Линтер чист
|
|
58
|
-
| Сборка проходит
|
|
59
|
-
| Баг исправлен
|
|
60
|
-
| Регрессионный тест работает | Проверен цикл красный-зелёный
|
|
61
|
-
| Воркер завершил задачу
|
|
62
|
-
| Требования выполнены
|
|
54
|
+
| Заявление | Требуется | Недостаточно |
|
|
55
|
+
| --------------------------- | --------------------------------- | ------------------------------------------ |
|
|
56
|
+
| Тесты проходят | Вывод тестовой команды: 0 падений | Прошлый прогон, «должно пройти» |
|
|
57
|
+
| Линтер чист | Вывод линтера: 0 ошибок | Частичная проверка, экстраполяция |
|
|
58
|
+
| Сборка проходит | Команда сборки: exit 0 | Линтер зелёный, логи выглядят хорошо |
|
|
59
|
+
| Баг исправлен | Тест исходного симптома: проходит | Код изменён, «предположительно исправлено» |
|
|
60
|
+
| Регрессионный тест работает | Проверен цикл красный-зелёный | Тест прошёл один раз |
|
|
61
|
+
| Воркер завершил задачу | git-дифф показывает изменения | Отчёт воркера «успех» |
|
|
62
|
+
| Требования выполнены | Построчный чеклист | Тесты проходят |
|
|
63
63
|
|
|
64
64
|
## Red flags — СТОП
|
|
65
65
|
|
|
@@ -74,44 +74,49 @@ description: Используй перед любым заявлением о з
|
|
|
74
74
|
|
|
75
75
|
## Профилактика рационализаций
|
|
76
76
|
|
|
77
|
-
| Оправдание
|
|
78
|
-
|
|
79
|
-
| «Сейчас должно работать»
|
|
80
|
-
| «Я уверен»
|
|
81
|
-
| «Только этот раз»
|
|
82
|
-
| «Линтер прошёл»
|
|
83
|
-
| «Воркер доложил об успехе»
|
|
84
|
-
| «Я устал»
|
|
85
|
-
| «Частичной проверки хватит»
|
|
86
|
-
| «Другие слова — правило не применяется» | Дух важнее буквы
|
|
77
|
+
| Оправдание | Реальность |
|
|
78
|
+
| --------------------------------------- | ------------------------------ |
|
|
79
|
+
| «Сейчас должно работать» | ЗАПУСТИ верификацию |
|
|
80
|
+
| «Я уверен» | Уверенность ≠ доказательство |
|
|
81
|
+
| «Только этот раз» | Без исключений |
|
|
82
|
+
| «Линтер прошёл» | Линтер ≠ компилятор |
|
|
83
|
+
| «Воркер доложил об успехе» | Проверь независимо |
|
|
84
|
+
| «Я устал» | Усталость ≠ оправдание |
|
|
85
|
+
| «Частичной проверки хватит» | Частичное не доказывает ничего |
|
|
86
|
+
| «Другие слова — правило не применяется» | Дух важнее буквы |
|
|
87
87
|
|
|
88
88
|
## Ключевые паттерны
|
|
89
89
|
|
|
90
90
|
**Тесты:**
|
|
91
|
+
|
|
91
92
|
```
|
|
92
93
|
✅ [npm run check] [Видно: 591/591 pass] «Все тесты проходят»
|
|
93
94
|
❌ «Сейчас должно пройти» / «Выглядит корректно»
|
|
94
95
|
```
|
|
95
96
|
|
|
96
97
|
**Регрессионные тесты (TDD красный-зелёный):**
|
|
98
|
+
|
|
97
99
|
```
|
|
98
100
|
✅ Написал → Запустил (проходит) → Откатил фикс → Запустил (ОБЯЗАН УПАСТЬ) → Вернул → Запустил (проходит)
|
|
99
101
|
❌ «Я написал регрессионный тест» (без красно-зелёной верификации)
|
|
100
102
|
```
|
|
101
103
|
|
|
102
104
|
**Сборка:**
|
|
105
|
+
|
|
103
106
|
```
|
|
104
107
|
✅ [npm run build] [Видно: exit 0] «Сборка проходит»
|
|
105
108
|
❌ «Линтер прошёл» (линтер не проверяет компиляцию)
|
|
106
109
|
```
|
|
107
110
|
|
|
108
111
|
**Требования:**
|
|
112
|
+
|
|
109
113
|
```
|
|
110
114
|
✅ Перечитай план → составь чеклист → проверь каждый пункт → доложи пробелы или завершение
|
|
111
115
|
❌ «Тесты проходят, фаза завершена»
|
|
112
116
|
```
|
|
113
117
|
|
|
114
118
|
**Делегирование воркерам:**
|
|
119
|
+
|
|
115
120
|
```
|
|
116
121
|
✅ Воркер доложил успех → проверь git-дифф → верифицируй изменения → доложи фактическое состояние
|
|
117
122
|
❌ Доверять отчёту воркера (воркер, спавненный через {{tool.task}}, мог ошибиться)
|
|
@@ -120,6 +125,7 @@ description: Используй перед любым заявлением о з
|
|
|
120
125
|
## Почему это важно
|
|
121
126
|
|
|
122
127
|
Из 24 воспоминаний о сбоях:
|
|
128
|
+
|
|
123
129
|
- партнёр сказал «я тебе не верю» — доверие разрушено
|
|
124
130
|
- В прод уехали неопределённые функции — урон
|
|
125
131
|
- В прод уехали пропущенные требования — незавершённые фичи
|
|
@@ -129,6 +135,7 @@ description: Используй перед любым заявлением о з
|
|
|
129
135
|
## Когда применять
|
|
130
136
|
|
|
131
137
|
**ВСЕГДА перед:**
|
|
138
|
+
|
|
132
139
|
- Любой вариацией заявлений об успехе/завершённости
|
|
133
140
|
- Любым выражением удовлетворения
|
|
134
141
|
- Любым позитивным утверждением о состоянии работы
|
|
@@ -137,6 +144,7 @@ description: Используй перед любым заявлением о з
|
|
|
137
144
|
- Делегированием воркерам
|
|
138
145
|
|
|
139
146
|
**Правило распространяется на:**
|
|
147
|
+
|
|
140
148
|
- Точные формулировки
|
|
141
149
|
- Парафразы и синонимы
|
|
142
150
|
- Импликации успеха
|
|
@@ -155,3 +163,9 @@ description: Используй перед любым заявлением о з
|
|
|
155
163
|
Запусти команду. Прочитай вывод. ТОЛЬКО ПОТОМ заявляй результат.
|
|
156
164
|
|
|
157
165
|
Это не обсуждается.
|
|
166
|
+
|
|
167
|
+
## Конвейер (2.15)
|
|
168
|
+
|
|
169
|
+
Верификация — условие переворота чекбокса plan.md: `- [ ]` → `- [x]` допустимо
|
|
170
|
+
только после прогона проверок задачи (точечные тесты зелёные) + строка
|
|
171
|
+
«сделано → коммит <hash>». Чекбокс — истина завершённости.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: wolf-brainstorm
|
|
3
|
-
description:
|
|
3
|
+
description: 'Обязателен до любой творческой работы — новых фич, компонентов, изменения поведения. Превращает идею в дизайн через диалог: вопросы по одному, варианты с трейд-оффами, аппрув владельца. Discovery-режим координатора.'
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# wolf-brainstorm: идея → дизайн
|
|
@@ -102,35 +102,50 @@ digraph wolf_brainstorm {
|
|
|
102
102
|
- Если существующий код мешает работе (файл разросся, границы размыты, ответственности перепутаны) — включи точечные улучшения в дизайн, как хороший разработчик, улучшающий код, в котором работает.
|
|
103
103
|
- Не предлагай несвязанный рефакторинг. Фокус на том, что служит текущей цели.
|
|
104
104
|
|
|
105
|
-
##
|
|
105
|
+
## Выход: requirements.md (v2 — анатомия §4.1 спеки конвейера)
|
|
106
106
|
|
|
107
|
-
|
|
107
|
+
Диалог с владельцем завершается артефактом `docs/dev/<дата>-<slug>/requirements.md`.
|
|
108
|
+
Папку создаёт `wolf scaffold artifact <slug>` — файлы артефактов вручную не создавать.
|
|
108
109
|
|
|
109
|
-
|
|
110
|
-
- Закоммить дизайн-документ (правило проекта: коммит после завершённой работы)
|
|
111
|
-
- Ключевые решения дизайна зафиксируй в памяти: `wolf add --type decision` — с обоснованием; они переживут сессию и достанутся исполнителям
|
|
110
|
+
Структура документа — 7 секций:
|
|
112
111
|
|
|
113
|
-
|
|
114
|
-
|
|
112
|
+
1. Контекст и проблема — зачем, прозой, бизнес-языком; метрика успеха.
|
|
113
|
+
2. Область — что входит; НЕ входит (не-цели уровня требований).
|
|
114
|
+
3. Глоссарий — бизнес-термины фичи, если появились новые.
|
|
115
|
+
4. Функциональные требования — записи REQ-NN.
|
|
116
|
+
5. Нефункциональные (NFR-NN) — производительность, безопасность, совместимость;
|
|
117
|
+
каждая с измеримым критерием.
|
|
118
|
+
6. Ограничения и допущения — что считаем данным.
|
|
119
|
+
7. Журнал изменений (CR) — append-only: дата, затронутый REQ/NFR, что/почему,
|
|
120
|
+
кем утверждено, downstream-перегенерации.
|
|
115
121
|
|
|
116
|
-
|
|
117
|
-
2. **Внутренняя согласованность:** противоречат ли секции друг другу? Согласуется ли архитектура с описанием фич?
|
|
118
|
-
3. **Проверка scope:** достаточно ли фокусировки для одного плана реализации, или нужна декомпозиция?
|
|
119
|
-
4. **Проверка двусмысленности:** можно ли истолковать требование двумя способами? Если да — выбери одну трактовку и сделай явной.
|
|
122
|
+
Анатомия записи (обязательные поля каждой записи REQ/NFR):
|
|
120
123
|
|
|
121
|
-
|
|
124
|
+
- История: Как <роль>, я хочу <возможность>, чтобы <выгода>.
|
|
125
|
+
- Требование: Когда <условие>, система должна <поведение>.
|
|
126
|
+
- Обоснование: <зачем это бизнесу — словами владельца>.
|
|
127
|
+
- AC: <измеримый критерий; нетривиальные — Given/When/Then>.
|
|
128
|
+
- Приоритет: Must | Should | Could.
|
|
129
|
+
- Источник: <диалог <дата> / жалоба mem-… / ревью-линза>.
|
|
122
130
|
|
|
123
|
-
|
|
124
|
-
|
|
131
|
+
Критерии готовности записи (гейт линзы полноты; часть проверяет линт):
|
|
132
|
+
одно требование — одна запись; есть история И формальная запись; есть AC
|
|
133
|
+
(REQ без AC — находка линта); есть источник; неопределённость помечена
|
|
134
|
+
`[НЕОПРЕДЕЛЕНО: вопрос]`, не сжата; владелец пересказывает требование своими
|
|
135
|
+
словами — не может, это дефект требования, а не читателя.
|
|
125
136
|
|
|
126
|
-
|
|
137
|
+
Язык: полные предложения, ноль сленга, термины домена без сокращений, новое
|
|
138
|
+
понятие объясняется при первом употреблении, смысловое сжатие запрещено.
|
|
127
139
|
|
|
128
|
-
|
|
140
|
+
## Второй режим: roadmap-триаж
|
|
129
141
|
|
|
130
|
-
|
|
142
|
+
Диалог с владельцем по кандидатурам волн → вердикт по каждой: «волна N / бэклог /
|
|
143
|
+
отклонено + причина». Запись — перемещением, не копированием (пункт живёт ровно
|
|
144
|
+
в одном файле; дубль — находка линта doctor):
|
|
131
145
|
|
|
132
|
-
-
|
|
133
|
-
-
|
|
146
|
+
- волна N → `docs/dev/roadmap/wave-N.md` (состав волны, источник вердикта);
|
|
147
|
+
- бэклог → `docs/dev/roadmap/backlog.md`;
|
|
148
|
+
- отклонено → `docs/dev/roadmap/rejected.md` (+ причина).
|
|
134
149
|
|
|
135
150
|
## Ключевые принципы
|
|
136
151
|
|
|
@@ -147,21 +162,21 @@ digraph wolf_brainstorm {
|
|
|
147
162
|
|
|
148
163
|
> Источник: `~/.config/opencode/superpowers/skills/brainstorming/SKILL.md`, upstream 6efe32c (2026-04-23)
|
|
149
164
|
|
|
150
|
-
| Пункт источника
|
|
151
|
-
|
|
152
|
-
| HARD-GATE до аппрува
|
|
153
|
-
| Анти-паттерн «слишком просто для дизайна»
|
|
154
|
-
| Чеклист (9 пунктов)
|
|
155
|
-
| Пункт «Invoke writing-plans skill»
|
|
156
|
-
| TodoWrite
|
|
157
|
-
| Flowchart
|
|
158
|
-
| «The Process» (5 блоков)
|
|
159
|
-
| Путь `docs/superpowers/specs/`
|
|
160
|
-
| Саморевью спеки (4 проверки)
|
|
161
|
-
| Гейт ревью владельца
|
|
162
|
-
| Ключевые принципы (6)
|
|
163
|
-
| Скилл elements-of-style (секция «Документация»)
|
|
164
|
-
| Visual Companion (секция + `visual-companion.md`) | отброшено
|
|
165
|
-
| —
|
|
165
|
+
| Пункт источника | Судьба | Почему |
|
|
166
|
+
| ------------------------------------------------- | --------------------------------------------------------------------------- | ----------------------------------------------------------- |
|
|
167
|
+
| HARD-GATE до аппрува | сохранено | Ядро скилла; «user» → «владелец» |
|
|
168
|
+
| Анти-паттерн «слишком просто для дизайна» | сохранено полностью (1/1) | H7 |
|
|
169
|
+
| Чеклист (9 пунктов) | сохранено; п.2 (visual companion) отброшен, п.9 → wolf-plan | Браузерный компаньон вне базового набора |
|
|
170
|
+
| Пункт «Invoke writing-plans skill» | заменено → `{{tool.skill}} wolf-plan` | H4: терминальное состояние — только wolf-plan |
|
|
171
|
+
| TodoWrite | заменено → `{{tool.todowrite}}` | Плейсхолдер |
|
|
172
|
+
| Flowchart | сохранено; терминальный узел → wolf-plan | Ядро-флоу |
|
|
173
|
+
| «The Process» (5 блоков) | сохранено | Переносимое ядро |
|
|
174
|
+
| Путь `docs/superpowers/specs/` | заменено → `docs/specs/…` + предпочтения проекта | Harness-привязка (research §1) |
|
|
175
|
+
| Саморевью спеки (4 проверки) | сохранено полностью (4/4) | Чеклист-ядро |
|
|
176
|
+
| Гейт ревью владельца | сохранено | Ядро |
|
|
177
|
+
| Ключевые принципы (6) | сохранено полностью (6/6) | H7 |
|
|
178
|
+
| Скилл elements-of-style (секция «Документация») | отброшено | Скилл вне базового набора (research §6) |
|
|
179
|
+
| Visual Companion (секция + `visual-companion.md`) | отброшено | Браузерный компаньон и sibling-файл не переносятся |
|
|
180
|
+
| — | добавлено: Discovery-режим; worktree НЕ создаёт; `wolf add --type decision` | Спека §5.2 (архив §2.3), H5-распределение владения worktree |
|
|
166
181
|
|
|
167
182
|
Перенесённые списки: анти-паттерны 1/1, принципы 6/6, саморевью 4/4.
|