mister-wolf 2.21.2 → 2.22.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 CHANGED
@@ -54,7 +54,7 @@ wolf bootstrap
54
54
  - **Path B — OpenCode organization:** `wolf init --full --platform opencode` renders the full base set (6 agent frames, 19 skills, 3 commands, 2 plugins, seeded playbook faces) and writes `opencode.json` (`mcp.servers.wolf`, `default_agent=mr-wolf`, `experimental.subagent_depth=2`). **Restart opencode** after it — the MCP server and the default agent connect at startup. Claude Code will ask you to approve the project-scope MCP server on first start — that is expected.
55
55
 
56
56
  - **Try it without installing:** `npx mister-wolf init` — try-out mode: creates the `.wolf/` memory skeleton but never writes MCP configs or the base set. Like it? `npm install -g mister-wolf` and run `wolf init` again.
57
- - **Updating:** `wolf upgrade` — one command updates everything: the npm phase (`npm install -g mister-wolf@latest`) is followed by the update pass over all registered projects (stamped base-set files and seeded faces; deletions only with confirmation). `--check` reports CLI + park freshness without installing; `--here` updates only the current project (no npm, no registry); `--yes` skips the confirmation and backs up whatever it overwrites. Dev/linked installs are refused honestly. `wolf sync` is deprecated → `wolf upgrade --here` (still available in 2.20.0).
57
+ - **Updating:** `wolf upgrade` — one command updates everything: the npm phase (`npm install -g mister-wolf@latest`) is followed by the update pass over all registered projects (stamped base-set files and seeded faces; deletions only with confirmation). `--check` reports CLI + park freshness without installing; `--here` updates only the current project (no npm, no registry); `--yes` skips the confirmation and backs up whatever it overwrites. Dev/linked installs are refused honestly. `wolf sync` is deprecated → `wolf upgrade --here` (the alias still works and re-renders stamped files; its DEPRECATED notice still says `removed in 2.20.0` — stale wording, the command is alive).
58
58
  - **Owner intent (2.20.0):** when a pass needs your word, it names the file and the reason (`mutated` / `conflict`, per path — no bare counters). `--review` walks the decisions with a diff, `--show <file|N>` prints local vs base, `--resolve <file|N>=take|keep|protect|pin` applies one, `--json` is the machine channel (`wolf.upgrade/1`, and `wolf.upgrade.check/1` with `--check`). `protect: true` (or `protect: X.Y.Z`) in an agent/skill/command frontmatter holds that file forever — never overwritten, never deleted, still visible in `--check`. A local conflict, start to finish:
59
59
 
60
60
  ```bash
package/README.ru.md CHANGED
@@ -62,7 +62,8 @@ wolf bootstrap
62
62
  `--check` — read-only сводка свежести CLI и парка; `--here` — обновить только текущий проект
63
63
  (без npm и реестра); `--yes` — без интерактивного подтверждения, с бэкапом всего, что
64
64
  перезаписывает. Dev/linked-установке откажет честно. `wolf sync` депрекирован →
65
- `wolf upgrade --here` (алиас ещё работает в 2.20.0).
65
+ `wolf upgrade --here` (алиас ещё работает и перерендеривает штампованные файлы; его уведомление
66
+ DEPRECATED всё ещё говорит `removed in 2.20.0` — устаревшая формулировка, команда жива).
66
67
  - **Намерения владельца (2.20.0):** когда проходу нужно ваше слово, он называет файл и причину
67
68
  (`mutated` / `conflict`, по путям — без голых счётчиков). `--review` разбирает решения с диффом,
68
69
  `--show <файл|N>` печатает локальный vs эталон, `--resolve <файл|N>=take|keep|protect|pin`
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mister-wolf",
3
- "version": "2.21.2",
3
+ "version": "2.22.0",
4
4
  "description": "Local-first project memory for AI coding agents: decisions, lessons, tools and processes that outlive the session",
5
5
  "keywords": [
6
6
  "ai-agents",
@@ -1 +1 @@
1
- 2026-10-30T13:59:40.930Z agent-id=v2-router-probe-xyz playbook=hit name=fallback variant=fallback source=default resolution=error face_id=- version=- hash=- session=opc-4fe037e6-1e4b-499e-9655-3f38c55686c8 injected=yes ms=0 bytes=1274
1
+ 2026-10-31T00:14:38.946Z agent-id=v2-router-probe-xyz playbook=hit name=fallback variant=fallback source=default resolution=error face_id=- version=- hash=- session=opc-4959328f-6d56-4600-9e0e-52a774766922 injected=yes ms=0 bytes=1274
@@ -144,6 +144,60 @@ handoff; не маскируй отказ памяти файлом в доку
144
144
  - Самообучение: значимые ошибки/удачи воркеров — `wolf add --type
145
145
  lesson` (только нетривиальное и воспроизводимое).
146
146
 
147
+ ### Выбор сеанса: fresh / continue / replace
148
+
149
+ Правило действует только после решения делегировать. Малая связанная работа остаётся
150
+ у L1 и не создаёт обязательного L2/исследователя; требуемую независимую приёмку
151
+ выполняет другой уполномоченный участник, self-review независимой приёмкой не является.
152
+ Ядро и профиль поручения — по канону using-skills.
153
+
154
+ - **fresh** — новый самостоятельный принимаемый результат → новый L2 и отобранный под
155
+ него TASK.
156
+ - **continue** — тот же ещё не принятый результат → прежний L2: уточнение, следующий
157
+ связанный этап, дополнительное evidence, ограниченное исправление по приёмке.
158
+ - **replace** — та же задача, прежнее исполнение больше не подходит → новый L2 через
159
+ handoff (порядок ниже).
160
+
161
+ Инварианты:
162
+
163
+ 1. `task_id` — идентификатор задачи, не id сеанса; совпадение имён параметров инструмента
164
+ не делает их равными.
165
+ 2. `continue` не расширяет scope: новые самостоятельные требования не добавляются под
166
+ видом исправления, несвязанная задача не дробится после каждого шага.
167
+ 3. `DONE` не закрывает задачу: после ACCEPTED прежний L2 не становится свободным слотом
168
+ под следующую задачу.
169
+ 4. Правило не создаёт исследователя или агента на файл: малая связанная работа остаётся
170
+ у L1, независимая приёмка — у другого уполномоченного участника.
171
+ 5. Первичное независимое review получает проверяемые материалы, нормы и evidence, но не
172
+ историю родителя, не чужие findings и не ожидаемый verdict; повторная проверка
173
+ исправлений своих замечаний тем же reviewer допустима.
174
+ 6. При замене model/variant resume не доказывает смену модели; неподдержанная в resume
175
+ смена → новый исполнитель.
176
+ 7. Новый id сеанса не доказывает чистую изоляцию: если host наследует историю родителя,
177
+ независимость не закрыта — результат остаётся `INCONCLUSIVE` либо ограниченным;
178
+ честный отчёт о возможностях host ≠ успешная независимая приёмка.
179
+ 8. Незавершённая приёмка при замене не обнуляется: известный результат и открытые
180
+ замечания передаются через handoff. Учёт фактических расходов — A1.1/E2; без связей
181
+ результат помечается «неизвестно с покрытием», не нулём.
182
+
183
+ ### Порядок replace
184
+
185
+ Четыре различимых шага; `1` и `4` — не одно действие.
186
+
187
+ 1. **stop-writing** — прекратить новые изменения и подтвердить завершение пишущих
188
+ инструментов прежнего исполнителя.
189
+ 2. **preserve** — уполномоченный владелец/L1 сохраняет известный результат и handoff,
190
+ выполняет требуемую публикацию. L2 без права коммита отдаёт checkpoint L1; L1
191
+ фиксирует его после прекращения записи.
192
+ 3. **hand-over** — получатель проверяет доступность результата и принимает ownership;
193
+ при неопределённости передача той же ветки не завершена.
194
+ 4. **close** — прежняя сессия закрывается после сохранения нужного контекста.
195
+
196
+ Инварианты порядка: таймаут, молчание и истёкший бюджет не доказывают остановку записи;
197
+ read-only review не требует нового worktree; task identity, evidence, права и действующая
198
+ политика model/variant сохраняются; незавершённая приёмка и известный результат не
199
+ обнуляются.
200
+
147
201
  ## Библиотека регулярных средств
148
202
 
149
203
  Перед повторяющейся процедурой или обходом известного трения проверь готовое
@@ -200,12 +200,62 @@ FULL — несколько компонентов, новые контракт
200
200
 
201
201
  ## Контракты передачи
202
202
 
203
+ ### Ядро TASK
204
+
205
+ Ядро обязательно для любого поручения; каждый пункт — проверяемое предписание,
206
+ а не перечисление через запятую. Профиль (ниже) добавляет к ядру, не заменяет его.
207
+
208
+ - `task_id` — идентификатор подзадачи, отличный от id сеанса; по нему сверяются отчёт
209
+ и evidence.
210
+ - Цель/ожидаемый результат — что должно быть на выходе, одной проверяемой формулировкой.
211
+ - AC — приёмочные критерии, по каждому из которых можно сказать «подтверждено» или нет.
212
+ - Scope и полномочия — что входит в работу, что запрещено (запись, спавн, коммиты),
213
+ где вести рабочие материалы.
214
+ - Входы и назначенная методика — какие нормы и файлы читать и каким процессом
215
+ исполнять; недостающий обязательный вход запрашивается, не додумывается.
216
+ - Проверка — точные команды или процедуры и ожидаемый результат; запускает исполнитель.
217
+ - Конечный бюджет и stop/return — лимит работы и условия немедленного возврата L1.
218
+ - Ожидаемый RESULT — форма отчёта по роли, включая допустимые статусы и вердикты.
219
+
220
+ Инварианты ядра: применимое ядерное поле нельзя опустить; неизвестный обязательный
221
+ вход явно запрашивается (`NEEDS_CONTEXT`), не заполняется заглушкой. Опускание
222
+ неприменимого профильного поля — не дефект поручения.
223
+
224
+ ### Профили поручения
225
+
226
+ Профиль `implement | review | research` добавляет поля к ядру. Неприменимое поле
227
+ опускается, а не заполняется заглушкой; поручение без такого поля корректно.
228
+
229
+ - `implement` добавляет: repo/workspace, `base_sha`, allowlist записи, разрешённые
230
+ области чтения, зависимости, ссылки на design/test-plan. Из ядра не опускает ничего.
231
+ RESULT: `DONE | DONE_WITH_CONCERNS | NEEDS_CONTEXT | BLOCKED`.
232
+ - `review` добавляет: revision проверяемого артефакта, назначенную линзу, норму
233
+ и evidence-набор. Не требует `base_sha`, allowlist записи, worktree.
234
+ RESULT: `SUMMARY/VERDICT/FINDINGS/SCOPE/LIMITS/EVIDENCE`; вердикты
235
+ `APPROVED | CHANGES_REQUIRED | INCONCLUSIVE`.
236
+ - `research` добавляет: проверяемый вопрос, критерий ответа, revision документа или
237
+ источника, границы поиска и условие остановки. Не требует `base_sha`, allowlist записи.
238
+ RESULT: `FINDINGS/CONFIDENCE/GAPS` с разделением источника, факта, вывода и гипотезы.
239
+
240
+ Формат передачи по умолчанию — сообщение; точные разрешённые выходные файлы, если они
241
+ нужны, и место временной работы вне документации указывает L1. Ответственность
242
+ за общий план и покрытие остаётся у L1.
243
+
244
+ ### Словарь контрактов
245
+
246
+ Термины определены статически; определения не описывают поведение механизмов
247
+ и не ссылаются на команды или поля, которых нет. Ниже таблицы — действующие формы
248
+ `RESULT`/`EVIDENCE`/`ACCEPTANCE`: они подробны, таблица даёт только смысл термина.
249
+
250
+ | Термин | Значение |
251
+ | --- | --- |
252
+ | TASK | Поручение исполнителю: ядро из восьми элементов плюс поля применимого профиля. |
253
+ | RESULT | Отчёт исполнителя по форме своей роли: статус или вердикт, изменения, границы. |
254
+ | EVIDENCE | Подтверждение claim/AC: команда или процедура, cwd, revision, exit, результат. |
255
+ | ACCEPTANCE | Сверка каждого AC с evidence и итоговый verdict приёмки у L0. |
256
+ | SCOPE | Границы задачи: что входит и что запрещено. В отчёте worker-reviewer `SCOPE` — покрытие ревью, не границы задачи. |
257
+ | LIMITS/GAPS | Что не проверено, где нет данных или остался риск; отсутствие данных не равно нулю или успеху. |
203
258
 
204
- TASK: task_id, цель, AC/REQ, base_sha, cwd/worktree, allowlist записи, разрешённые области чтения, зависимости, ссылки на design/test-plan, проверки, ограничения, ожидаемый отчёт. Для L2: один конечный результат,
205
- способ/границы допустимого поиска, конечный лимит и точный триггер возврата L1;
206
- формат передачи (по умолчанию сообщение), точные разрешённые выходные файлы,
207
- если нужны, и место временной работы вне документации;
208
- ответственность за общий план и покрытие остаётся у L1.
209
259
  RESULT: task_id, DONE | DONE_WITH_CONCERNS | NEEDS_CONTEXT | BLOCKED, изменения, проверки и evidence, отклонения, оставшиеся риски. DONE означает готовность к ревью, а не приёмку.
210
260
  EVIDENCE: claim/AC, command или процедура, cwd, revision, dirty-state digest при наличии, существенное окружение, время, exit/status, результат и ссылка на имеющееся подтверждение (лог, вывод инструмента, CI-артефакт). Отдельный файл лога не обязателен. Не выдумывай отсутствующие поля.
211
261
  ACCEPTANCE: по каждому AC подтверждение/не подтверждено, актуальные evidence, независимое ревью, ограничения; финальный verdict L0: ACCEPTED | PARTIAL | REJECTED | INCONCLUSIVE.
@@ -14,7 +14,7 @@ description: "Применять перед сменой сессии или и
14
14
 
15
15
  ## Выбор действия
16
16
 
17
- Различай: продолжение той же роли в новой сессии, замена исполнителя и новая подзадача. L0 передаёт цель преемнику L0 либо поручает L1 поставку; L1 заменяет L2/исполнительскую сессию; L2 возвращает checkpoint и запрос L1. L2 не спавнит преемника. Указание tool.task не гарантирует сброс контекста родителя — проверь возможности платформы.
17
+ Различай: продолжение той же роли в новой сессии, замена исполнителя и новая подзадача. L0 передаёт цель преемнику L0 либо поручает L1 поставку; L1 заменяет L2/исполнительскую сессию (порядок замены и выбор сеанса — по канону executor-lead); L2 возвращает checkpoint и запрос L1. L2 не спавнит преемника. Указание tool.task не гарантирует сброс контекста родителя — проверь возможности платформы.
18
18
 
19
19
  ## Snapshot
20
20
 
@@ -40,7 +40,7 @@ Snapshot не становится проектным документом ав
40
40
 
41
41
  1. Зафиксируй snapshot revision и место. При недоступной записи L2 передаёт его L1, не обходит permissions.
42
42
  2. Действующим механизмом останови или отзови право записи старого исполнителя; проверь незавершённые инструменты/процессы. При неизвестном исходе сначала выясни состояние.
43
- 3. L1/L0 передаёт преемнику TASK, snapshot и доступные источники. Если технической блокировки нет, установи протокольного единственного владельца и явно обозначь ограничение.
43
+ 3. L1/L0 передаёт преемнику TASK (по канону ядра и профилю поручения в using-skills), snapshot и доступные источники. Если технической блокировки нет, установи протокольного единственного владельца и явно обозначь ограничение.
44
44
  4. Преемник подтверждает цель, revision, dirty-state и следующий шаг; сверяет память/план с фактом. Несовпадение → NEEDS_CONTEXT, не слепое продолжение.
45
45
  5. Только после подтверждения отметь передачу завершённой и сообщи ответственному уровню ID/статус.
46
46
 
@@ -20,7 +20,7 @@ description: "Применять перед декомпозицией утве
20
20
 
21
21
  1. Проверь версии входов. Отнеси каждый REQ/NFR к задаче и проверке; зафиксируй пробелы до исполнения.
22
22
  2. Раздели работу по результатам и ответственности. Размер задачи определяется независимой проверкой и доступным контекстом, а не обязательными 2–5 минутами.
23
- 3. Для каждой задачи заполни TASK из using-skills: цель, AC, baseline, ссылки на контракт, allowlist, зависимости, проверки, ограничение scope и ожидаемый RESULT. Разреши читать затронутый код и потребителей; отсутствие истории сессии не означает запрета чтения.
23
+ 3. Для каждой задачи заполни TASK из using-skills по канону ядра и профилю поручения; перечень полей не дублируй, сошлись на канон. Разреши читать затронутый код и потребителей; отсутствие истории сессии не означает запрета чтения.
24
24
  4. Укажи достаточно точные действия и символы, не полный код реализации. Примеры допустимы для неоднозначного контракта, но не дублируют design. Не предписывай точный код теста вместо проверяемого свойства.
25
25
  5. Построй зависимости. Параллельность разреши только для независимых outputs, изолированной записи и определённого владельца интеграции. Общие контракты и миграции сериализуй.
26
26
  6. Для выходов TASK укажи сообщение либо точный файл/раздел; временную область назначь вне документации. Дополнительному документу этапа задай назначение, читателя и владельца прямо в plan, без отдельного реестра. Добавь отдельную интеграционную задачу: порядок объединения, проверка взаимодействий, полный гейт и правила разрешения конфликтов. Укажи промежуточные чекпоинты для длительной работы.
@@ -14,9 +14,9 @@ worker-reviewer. L2 не получает полномочий диспетче
14
14
  эту организационную методику в каждый worker-TASK. При явно назначенной иной
15
15
  специализированной методике доставь её полный текст, не самодельное сокращение.
16
16
 
17
- TASK: цель владельца одной строкой → вклад подзадачи → проверяемый результат,
18
- baseline/revision/digest/cwd, норма и относящиеся политики, источники, границы,
19
- полный мандат/AC, инструменты/контракты, RESULT/evidence, бюджет и стоп-условие.
17
+ TASK собирается по канону ядра и профилю review в using-skills, без пересказа
18
+ перечня полей. Собственная рамка роли: цель владельца одной строкой, вклад
19
+ подзадачи и проверяемый результат — по ним оценивается покрытие.
20
20
  Обязательные нормативные фрагменты передай без потери исключений и приоритета;
21
21
  сохрани точные ссылки для дочитывания, не подменяй норму пересказом. Историю
22
22
  родителя, чужие находки и ожидаемый вердикт в независимый первый проход не передавай.
@@ -18,7 +18,7 @@ description: "Применять при исполнении утверждён
18
18
 
19
19
  ## Цикл задачи
20
20
 
21
- 1. Разрежь работу до конечных мандатов L2; архитектуру, стратегию поиска и зависимости определяет L1. Назначь владельца проверки общих связей. Выбери независимые ready-задачи, запусти параллельно в бюджете и с изоляцией; собери каждому TASK из using-skills. Передай ссылки и минимальный достаточный контекст, проверенные контракты и expected RESULT. L2 разрешено читать нужные файлы и потребителей; история родительской сессии не наследуется.
21
+ 1. Разрежь работу до конечных мандатов L2; архитектуру, стратегию поиска и зависимости определяет L1. Назначь владельца проверки общих связей. Выбери независимые ready-задачи, запусти параллельно в бюджете и с изоляцией; собери каждому TASK из using-skills по канону ядра. Выбор сеанса L2 — по канону executor-lead. Передай ссылки и минимальный достаточный контекст, проверенные контракты и expected RESULT. L2 разрешено читать нужные файлы и потребителей; история родительской сессии не наследуется.
22
22
  2. Доставь полную методику действия L2 и активный playbook, относящиеся нормы и TASK/RESULT/EVIDENCE; не весь процесс L1/ACCEPTANCE. Для регулярного шага/трения L1 проверяет tool-библиотеку и передаёт подходящий контракт. L2 не выбирает организацию и не спавнит.
23
23
  3. Принимай RESULT по готовности: DONE → diff/evidence; DONE_WITH_CONCERNS → риск до ревью; NEEDS_CONTEXT → точный вход; BLOCKED → решение L1, готовое средство или разбиение. Следующий вызов получает решённый вопрос, короткий остаток и новый конечный лимит. Один эксперт — при точном пробеле; дорогой консилиум — только по критериям рамки L1. Изменение цели → L0. Дефект правила → жалобный триаж/Стюард. Не возвращай L2 прежнее «разберись» и не запускай идентичный провал.
24
24
  4. Проверь allowlist и новые файлы, включая untracked: RESULT L2 не требует отдельного документа. Частные отчёты/скрипты в docs/dev нарушают состав папки; L1 встраивает полезные выводы в основные документы. Не удаляй чужое/прежнее автоматически. Проверь отсутствие посторонних изменений. Воркер не коммитит; L1 фиксирует результат разрешённым git-действием после проверок, включая авторизованность самого коммита.
@@ -77,6 +77,8 @@ function governanceBody() {
77
77
  const WORKER_BODY = `## using-skills: пассивный режим воркера (L2)
78
78
 
79
79
  - Работаешь ровно одну подзадачу: читаешь назначенные скиллы, каталог сам не перебираешь.
80
+ - Методика и ядро поручения доставлены в самом поручении: бери их по ссылке
81
+ на канон, копию каталога скиллов и ядра не переноси.
80
82
  - Методики загружай до исполнения. Блокер и недостающие входы передай L1;
81
83
  не начинай продуктовый discovery и новый тред вместо назначенной задачи.
82
84
  - Не спавнишь агентов и не коммитишь.
package/update-map.json CHANGED
@@ -1,11 +1,11 @@
1
1
  {
2
- "version": "2.21.2",
3
- "prev": "2.21.1",
2
+ "version": "2.22.0",
3
+ "prev": "2.21.2",
4
4
  "files": [
5
5
  {
6
6
  "path": "base/agents/executor-lead.md",
7
7
  "kind": "agent",
8
- "category": "unchanged"
8
+ "category": "changed"
9
9
  },
10
10
  {
11
11
  "path": "base/agents/mr-wolf.md",
@@ -75,7 +75,7 @@
75
75
  {
76
76
  "path": "base/skills/using-skills/SKILL.md",
77
77
  "kind": "skill",
78
- "category": "unchanged"
78
+ "category": "changed"
79
79
  },
80
80
  {
81
81
  "path": "base/skills/verification-before-completion/SKILL.md",
@@ -110,22 +110,22 @@
110
110
  {
111
111
  "path": "base/skills/wolf-handoff/SKILL.md",
112
112
  "kind": "skill",
113
- "category": "unchanged"
113
+ "category": "changed"
114
114
  },
115
115
  {
116
116
  "path": "base/skills/wolf-plan/SKILL.md",
117
117
  "kind": "skill",
118
- "category": "unchanged"
118
+ "category": "changed"
119
119
  },
120
120
  {
121
121
  "path": "base/skills/wolf-review/SKILL.md",
122
122
  "kind": "skill",
123
- "category": "unchanged"
123
+ "category": "changed"
124
124
  },
125
125
  {
126
126
  "path": "base/skills/wolf-sdd/SKILL.md",
127
127
  "kind": "skill",
128
- "category": "unchanged"
128
+ "category": "changed"
129
129
  },
130
130
  {
131
131
  "path": "base/skills/wolf-skill-intake/SKILL.md",
@@ -150,7 +150,7 @@
150
150
  {
151
151
  "path": "opencode/plugins/wolf-session-start.js",
152
152
  "kind": "plugin",
153
- "category": "unchanged"
153
+ "category": "changed"
154
154
  }
155
155
  ],
156
156
  "faces": [