@spec-box/sdd 0.10.0 → 0.12.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 (69) hide show
  1. package/README.md +57 -6
  2. package/assets/help/log.md +12 -0
  3. package/assets/help/packet.md +19 -0
  4. package/assets/help/result.md +28 -0
  5. package/assets/hosts/claude/agent.md +4 -2
  6. package/assets/hosts/claude/project.md +3 -0
  7. package/assets/hosts/codex/AGENTS.md +7 -0
  8. package/assets/hosts/codex/agent.md +9 -0
  9. package/assets/hosts/codex/headless-result.md +2 -0
  10. package/assets/roles/challenger.md +9 -2
  11. package/assets/roles/implementer.md +9 -20
  12. package/assets/roles/planner.md +17 -31
  13. package/assets/roles/researcher.md +14 -30
  14. package/assets/roles/reviewer.md +4 -7
  15. package/assets/roles/tester.md +11 -17
  16. package/assets/roles/verifier.md +14 -20
  17. package/assets/schema/sbox-answer.schema.json +2 -2
  18. package/assets/skills/sbox-browser.md +4 -0
  19. package/assets/skills/sbox-contract.md +4 -0
  20. package/assets/skills/sbox-run.md +34 -14
  21. package/assets/skills/sbox-wiki.md +3 -0
  22. package/dist/adapters/host/claude/index.js +17 -25
  23. package/dist/adapters/host/claude/index.js.map +1 -1
  24. package/dist/adapters/host/codex/index.js +56 -0
  25. package/dist/adapters/host/codex/index.js.map +1 -0
  26. package/dist/adapters/host/index.js +10 -3
  27. package/dist/adapters/host/index.js.map +1 -1
  28. package/dist/adapters/runner/codex.js +31 -7
  29. package/dist/adapters/runner/codex.js.map +1 -1
  30. package/dist/browser/cli.js +2 -0
  31. package/dist/browser/cli.js.map +1 -1
  32. package/dist/cli/commands/host.js +3 -4
  33. package/dist/cli/commands/host.js.map +1 -1
  34. package/dist/cli/commands/models.js +25 -0
  35. package/dist/cli/commands/models.js.map +1 -0
  36. package/dist/cli/commands/protocol.js +6 -4
  37. package/dist/cli/commands/protocol.js.map +1 -1
  38. package/dist/cli/help-command.js +29 -0
  39. package/dist/cli/help-command.js.map +1 -0
  40. package/dist/cli/main.js +5 -0
  41. package/dist/cli/main.js.map +1 -1
  42. package/dist/contract/cli.js +2 -0
  43. package/dist/contract/cli.js.map +1 -1
  44. package/dist/core/change.js +5 -3
  45. package/dist/core/change.js.map +1 -1
  46. package/dist/core/config.js +8 -6
  47. package/dist/core/config.js.map +1 -1
  48. package/dist/core/help.js +65 -0
  49. package/dist/core/help.js.map +1 -0
  50. package/dist/core/model-policy.js +54 -0
  51. package/dist/core/model-policy.js.map +1 -0
  52. package/dist/core/packet.js +45 -26
  53. package/dist/core/packet.js.map +1 -1
  54. package/dist/core/phases.js +14 -3
  55. package/dist/core/phases.js.map +1 -1
  56. package/dist/core/report.js +23 -5
  57. package/dist/core/report.js.map +1 -1
  58. package/dist/core/result.js +2 -3
  59. package/dist/core/result.js.map +1 -1
  60. package/dist/core/run.js +13 -10
  61. package/dist/core/run.js.map +1 -1
  62. package/dist/core/runner.js +0 -23
  63. package/dist/core/runner.js.map +1 -1
  64. package/dist/core/skills.js +5 -4
  65. package/dist/core/skills.js.map +1 -1
  66. package/dist/wiki/cli.js +2 -0
  67. package/dist/wiki/cli.js.map +1 -1
  68. package/docs/design.md +43 -18
  69. package/package.json +1 -1
package/README.md CHANGED
@@ -24,11 +24,12 @@ cd <репозиторий продукта> # spec-box (.tms.json) или O
24
24
  sbox init --host claude # .sbox/config.yaml, шаблоны .sbox/project/*.md, .gitignore, скиллы и агенты Claude Code
25
25
  # заполнить .sbox/project/*.md
26
26
  sbox doctor # структурная проверка документации, спецификаций и сред запуска
27
+ sbox help # справка для агентов и людей: указатель тем и руководства инструментов (sbox-contract help, sbox-wiki help, sbox-browser help)
27
28
  sbox change new add-search --title "Поиск по каталогу" --request "Добавить поле поиска на главную"
28
29
  sbox next --change add-search # пакет для первой роли (researcher)
29
30
  ```
30
31
 
31
- Дальше цикл ведёт скилл `/sbox-run` в Claude Code: он вызывает `sbox next`, запускает субагента нужной роли, сдаёт его ответ через `sbox report` и останавливается на гейтах. Гейты решает человек: `sbox approve <gate>` или `sbox reject <gate> --comment "..."`.
32
+ Дальше цикл ведёт скилл `/sbox-run` в Claude Code или `$sbox-run` в Codex: он вызывает `sbox next`, запускает субагента нужной роли, сдаёт его ответ через `sbox report` и останавливается на гейтах. Гейты решает человек: `sbox approve <gate>` или `sbox reject <gate> --comment "..."`.
32
33
 
33
34
  ## Что где лежит
34
35
 
@@ -39,14 +40,15 @@ src/core/ доменная модель, конфиг, состояние
39
40
  src/adapters/ spec/spec-box, spec/openspec — истина и дельты в двух форматах; runner/claude, runner/codex — среды агентов;
40
41
  repo/github, repo/local — хостинг репозитория; host/skills — раскладки скиллов по хостам, host/claude — агенты Claude Code
41
42
  src/cli/ команды commander: init, doctor, host, change, next, report, approve, reject,
42
- status, instructions, validate, archive, log
43
+ status, instructions, validate, archive, log, help
43
44
  src/contract/ sbox-contract: модель поведения, конфигурация, поиск, дельты и применение
44
45
  src/wiki/ sbox-wiki: индекс и кеш Markdown, поиск, страницы, ссылки и валидация
45
46
  src/browser/ sbox-browser: демон с Chrome на сессию, клиент через локальный сокет, команды страницы,
46
47
  снимок дерева доступности со ссылками, поиск и установка браузера, вход человеком, перенос состояния
47
48
  assets/roles/ определения ролей (Markdown): researcher, planner, tester, implementer, reviewer, verifier…
48
49
  assets/schema/ граф артефактов по умолчанию и инструкции к ним
49
- assets/skills/ скиллы хостов (единый источник): sbox-run, sbox-approve, sbox-browser; копируются в папку хоста при init и host install
50
+ assets/skills/ скиллы хостов (единый источник): sbox-run, sbox-approve, sbox-browser, sbox-contract, sbox-wiki; копируются в папку хоста
51
+ при init и host install, роли видят их в указателе tools пакета и читают через help
50
52
  assets/templates/ шаблоны артефактов изменения
51
53
  assets/project/ шаблоны категорий проектной документации
52
54
  assets/ci/ шаблоны GitHub Actions и Dockerfile
@@ -73,7 +75,45 @@ sbox change rate <id> --score 4 # оценка результат
73
75
  sbox prompt show project-docs # промпт для заполнения .sbox/project/*.md под адаптер проекта
74
76
  ```
75
77
 
76
- Модели и усилие по ролям задаются в `runner.models` и `runner.efforts` (по умолчанию opus только для planner и challenger, effort medium); после правки выполните `sbox host install --target claude`. Среды: `claude` через Claude Agent SDK (нужен `ANTHROPIC_API_KEY` для CI; локально годится вход Claude Code), `codex` через `codex exec` (в конфиге `runner.codex.executable`, например бинарник из ChatGPT.app). Репозиторий: `repo.adapter: github` с токеном в `GITHUB_TOKEN`; `local` только коммитит.
78
+ Модель и effort задаются по профилям отдельно в `runner.claude.profiles` и `runner.codex.profiles`; после правки выполните `sbox host install --target claude`. Среды: `claude` через Claude Agent SDK (нужен `ANTHROPIC_API_KEY` для CI; локально годится вход Claude Code), `codex` через `codex exec` (в конфиге `runner.codex.executable`, например бинарник из ChatGPT.app). Репозиторий: `repo.adapter: github` с токеном в `GITHUB_TOKEN`; `local` только коммитит.
79
+
80
+ ## Профили моделей
81
+
82
+ Одна политика выбора для headless и материалов Claude Code: роль и оценка сложности определяют профиль `simple`, `medium` или `complex`, затем выбранный раннер подставляет пару `model` + `effort`.
83
+
84
+ ```yaml
85
+ runner:
86
+ default: codex
87
+ roleProfiles: # необязательная фиксация профиля роли
88
+ planner: complex
89
+ challenger: complex
90
+ reviewer: complex
91
+ claude:
92
+ profiles:
93
+ simple: { model: claude-sonnet-5, effort: low }
94
+ medium: { model: claude-sonnet-5, effort: medium }
95
+ complex: { model: claude-opus-5, effort: high }
96
+ codex:
97
+ profiles:
98
+ simple: { model: gpt-5.6-terra, effort: low }
99
+ medium: { model: gpt-5.6-terra, effort: medium }
100
+ complex: { model: gpt-5.6-sol, effort: high }
101
+ ```
102
+
103
+ Пример показывает встроенные значения. Профили можно задавать частично: остальные поля получают дефолты. Доступность конкретной модели и поддержка effort зависят от установленного раннера и учётной записи.
104
+
105
+ По умолчанию planner/challenger/reviewer используют complex, distiller — simple, остальные — medium. Оценка планировщика `complexity.implementation` переключает tester/implementer: простая → simple, обычная → medium, высокая → complex. Оценка complexity.review сохраняется для аудита, но не ослабляет независимое ревью: reviewer остаётся complex. При возвратах оценка может повышаться. Явный `roleProfiles.<роль>` фиксирует профиль и имеет приоритет над автоматическим выбором. Размер small/normal/large определяет артефакты и не меняет профиль сам по себе.
106
+
107
+ ```bash
108
+ sbox models --json # обе среды, профили по ролям
109
+ sbox models --change add-search --json # с учётом сложности изменения
110
+ sbox next --change add-search --runner claude --brief --json
111
+ sbox host install --target claude # обновить определения агентов
112
+ ```
113
+
114
+ `next` возвращает `execution` с раннером, профилем, моделью, effort и именем агента выбранного хоста. `/sbox-run` использует это имя; устанавливаются варианты `sbox-<роль>-simple|medium|complex` и базовый `sbox-<роль>`. При изменении профиля/модели/effort предыдущая сессия не продолжается. Для Codex генерируются `.codex/agents/*.toml`, устанавливается общий скилл в `.agents/skills/sbox-run` и добавляется управляемый раздел `AGENTS.md`. Пользовательский `.codex/config.toml` не меняется. После установки откройте новую сессию Codex в доверенном проекте. Если клиент не поддерживает выбор пользовательских агентов, скилл использует `sbox run --runner codex --max-runs 1` с теми же настройками.
115
+
116
+ **Миграция:** общие `runner.models`, `runner.efforts`, `runner.defaultEffort` удалены и вызывают понятную ошибку конфигурации. Перенесите настройки в профили нужного раннера, при необходимости задайте roleProfiles, удалите старые поля и переустановите материалы хоста. Автоматический перенос не выполняется: старая таблица не указывает, какому раннеру принадлежит модель.
77
117
 
78
118
  ## Браузер для проверки интерфейса
79
119
 
@@ -95,7 +135,7 @@ sbox-browser state save auth.json # перенести вх
95
135
  sbox-browser stop
96
136
  ```
97
137
 
98
- Существующий браузер вместо установки: флаг `--executable`, переменная `SBOX_BROWSER_EXECUTABLE` или `browser.executable` в `.sbox/config.yaml`; без них по порядку проверяются кэш инструмента, кэш puppeteer, системный Chrome, Chromium, Edge и Brave. Сессия это фоновый процесс с браузером: команды идут к нему через локальный сокет, поэтому страница, куки, консоль и сетевые ошибки сохраняются между вызовами; `--session <имя>` даёт несколько независимых браузеров, простой 30 минут завершает сессию. Настройки в секции `browser` конфига: `executable`, `headless`, `profile`, `baseUrl`, `cacheDir`, `viewport`, `timeoutMs`, `idleMinutes`; те же значения задаются переменными `SBOX_BROWSER_EXECUTABLE`, `SBOX_BROWSER_HEADLESS`, `SBOX_BROWSER_PROFILE`, `SBOX_BROWSER_BASE_URL`, `SBOX_BROWSER_CACHE_DIR` (каталог инструмента: `SBOX_BROWSER_HOME`) и глобальными флагами `--profile`, `--session`, `--timeout`, `--cwd`. Все команды поддерживают `--json`, ошибки разбора аргументов тоже приходят в JSON-конверте. Профили и файлы состояния содержат секреты входа и живут в `~/.sbox/browser`, вне репозитория. Скилл `sbox-browser` лежит в `assets/skills` и копируется в папку хоста командой `sbox host install --target claude | codex`; агентам researcher, tester и verifier он подключается по `metadata.roles` (в Claude Code полем `skills`).
138
+ Существующий браузер вместо установки: флаг `--executable`, переменная `SBOX_BROWSER_EXECUTABLE` или `browser.executable` в `.sbox/config.yaml`; без них по порядку проверяются кэш инструмента, кэш puppeteer, системный Chrome, Chromium, Edge и Brave. Сессия это фоновый процесс с браузером: команды идут к нему через локальный сокет, поэтому страница, куки, консоль и сетевые ошибки сохраняются между вызовами; `--session <имя>` даёт несколько независимых браузеров, простой 30 минут завершает сессию. Настройки в секции `browser` конфига: `executable`, `headless`, `profile`, `baseUrl`, `cacheDir`, `viewport`, `timeoutMs`, `idleMinutes`; те же значения задаются переменными `SBOX_BROWSER_EXECUTABLE`, `SBOX_BROWSER_HEADLESS`, `SBOX_BROWSER_PROFILE`, `SBOX_BROWSER_BASE_URL`, `SBOX_BROWSER_CACHE_DIR` (каталог инструмента: `SBOX_BROWSER_HOME`) и глобальными флагами `--profile`, `--session`, `--timeout`, `--cwd`. Все команды поддерживают `--json`, ошибки разбора аргументов тоже приходят в JSON-конверте. Профили и файлы состояния содержат секреты входа и живут в `~/.sbox/browser`, вне репозитория. Скилл `sbox-browser` лежит в `assets/skills` и копируется в папку хоста командой `sbox host install --target claude | codex`; ролям researcher, tester и verifier он показывается в указателе `tools` пакета по `metadata.roles`, а руководство агент читает командой `sbox-browser help`, когда браузер понадобился.
99
139
 
100
140
  ## Контракт поведения продукта
101
141
 
@@ -139,6 +179,8 @@ sbox-wiki validate --json
139
179
 
140
180
  Валидация проверяет типы метаданных, уникальность id, локальные ссылки и якоря заголовков; ссылки из блоков кода не учитываются. Внешние URL не проверяются, ссылки за пределы wiki запрещены; HTML-ссылки и пользовательские HTML-якоря не поддерживаются. Код выхода 1 означает ошибку; отсутствие summary/read_when — предупреждение. Скилл `sbox-wiki` устанавливается для Claude и Codex через `sbox host install`; `sbox doctor` использует ту же проверку wiki.
141
181
 
182
+ Аудит плана обязателен: `plan → [гейт plan] → challenge → cover`. Challenger проверяет артефакты против запроса и кода, ищет пропущенные сценарии и возвращает блокирующие замечания планировщику. После исправления повторяются гейт и аудит; отчёты сохраняются в `evidence/challenge-N.md`. Человеческие гейты зависят от автономности, аудит — нет. Изменения, уже прошедшие планирование до обновления, продолжаются с текущей фазы; при возврате в plan проходят новый аудит.
183
+
142
184
  ## Состояние
143
185
 
144
186
  Готово (этапы 1 и 2): конфиг и раскладка `.sbox/`, жизненный цикл изменения с гейтами, возвратами и бюджетом (`parked`), ревизия и lock `change.yaml`, пакеты и receipt запусков, приём отчётов с проверками (артефакты, дельты, задачи, защищённые тесты, дрейф change-set, disposition и `delivery_narrative` ревьюера), запечатывание change-set после реализации, адаптер spec-box, категории документации и структурный `doctor`, материалы для Claude Code, адаптеры сред Claude и Codex с надзором и одним транспортным повтором, `run`/`stop`/`watch`, адаптер GitHub с идемпотентной доставкой и каналом гейтов через комментарии, отчёты тестов jest/vitest/playwright и покрытие, шаблоны CI и Dockerfile.
@@ -149,4 +191,13 @@ sbox-wiki validate --json
149
191
 
150
192
  Готово также: папка `runs/` не переносится в архив (ответы ролей и квитанции остаются в истории ветки, `delivery_narrative` и запуски в `change.yaml`; `archive.runs: true` сохраняет её), `sbox-browser` для проверки интерфейса (сессии с Chrome через `puppeteer-core`, необязательная установка браузера, вход человеком с постоянным профилем, снимок дерева доступности для агентов, перенос состояния входа), проверка браузера в `sbox doctor`.
151
193
 
152
- Не готово: дискавери и правила (этап 3), Arcadia и Codex-материалы для хоста (этап 4), межрепозиторный протокол (этап 5), роутер и дистилляция wiki (этап 6), продолжение сессий Codex, семантический `doctor --deep`.
194
+ Не готово: дискавери и правила (этап 3), Arcadia (этап 4), межрепозиторный протокол (этап 5), роутер и дистилляция wiki (этап 6), семантический `doctor --deep`.
195
+
196
+ Для Codex в существующем проекте:
197
+
198
+ ```bash
199
+ sbox host install --target codex
200
+ sbox models --runner codex
201
+ ```
202
+
203
+ В новой сессии вызовите `$sbox-run`. Headless-раннер сохраняет ID сессии и продолжает её при возврате к той же роли с теми же настройками; старые клиенты без нужных возможностей resume запускают новую сессию. При первоначальной настройке доступен `sbox init --host codex`. Агент возвращает полный отчёт оркестратору; тот сохраняет его и передаёт CLI. Headless-вариант без интерактивного клиента: `sbox run --runner codex --change <id>`.
@@ -0,0 +1,12 @@
1
+ ---
2
+ description: Журнал изменения log.md — теги, приоритет записей и команда sbox log add
3
+ ---
4
+
5
+ # Журнал изменения
6
+
7
+ Файл `log.md` в папке изменения хранит однострочные записи `- [TAG] дата автор: текст`. Теги: `[CODE]` проверенный факт о коде, `[RULE]` принятое правило, `[TASK]` событие, `[HUMAN]` предпочтение человека.
8
+
9
+ - Добавить: `sbox log add --change <id> --tag CODE "<факт с путём>"`. Одна строка до 300 знаков; автор по умолчанию роль и номер выданного пакета.
10
+ - Прочитать: файл из `files.log` пакета или `sbox log show --change <id> [--tag CODE] --json`.
11
+
12
+ Приоритет: запись `[CODE]` сильнее факта из evidence или раннего артефакта, если она появилась позже. Опровергнутый факт фиксируй записью, evidence не правь. Противоречие утверждённому артефакту (proposal после гейта, дельты, design) это блокер категории «артефакт», а не запись. После мержа записи `[CODE]` и `[RULE]` переносит в wiki роль distiller; `[TASK]` и `[HUMAN]` остаются в изменении.
@@ -0,0 +1,19 @@
1
+ ---
2
+ description: Пакет роли packet.json — что означают его поля и в каком порядке их читать
3
+ ---
4
+
5
+ # Пакет роли
6
+
7
+ Пакет это данные для одного запуска роли; путь к нему приходит в сообщении `packet: <путь>`. Пути внутри относительно корня репозитория. Текста роли в файле нет: он уже в системном промпте агента.
8
+
9
+ Читай в таком порядке:
10
+
11
+ 1. `objective`, `feedback` — цель запуска и, при повторном запуске, замечание человека с гейта или блокер предыдущей роли.
12
+ 2. `ownership`, `authority`, `constraints`, `rules` — что можно писать (`readOnly: true` запрещает любые изменения файлов), ограничения запуска, правила проекта (ADR) с путями.
13
+ 3. `files` — запрос (`request`), журнал (`log`), артефакты по видам, evidence, документация проекта по категориям, страницы wiki с `read_when`, файлы истины спецификаций.
14
+ 4. `instructions` — инструкции к артефактам этой фазы: шаблон, требования, путь записи `resolvedOutputPath`; `specAdapterInstructions` — формат дельт спецификаций.
15
+ 5. `changeset`, `verificationReport`, `wiring` — запечатанный диф, отчёт верификатора и кандидаты подключения нового модуля (фазы verify и review).
16
+ 6. `resultFile`, `resultFormat`, `stop` — куда писать ответ, как его завершать (`sbox help result`), когда остановиться.
17
+ 7. `tools` — инструменты, доступные роли: `when` говорит, когда инструмент нужен, `help` даёт команду руководства (`sbox help <тема>`, `sbox-contract help`, `sbox-wiki help`, `sbox-browser help`), `commands` перечисляет самые частые вызовы дословно; остальные команды читай в руководстве, когда инструмент понадобился.
18
+
19
+ `change`, `role`, `phase`, `runId`, `execution` описывают сам запуск; `execution` это запрошенные модель и усилие, а не доказательство фактического запуска.
@@ -0,0 +1,28 @@
1
+ ---
2
+ description: Блок sbox-result в ответе роли — статусы, блокеры и поля по ролям
3
+ ---
4
+
5
+ # Блок sbox-result
6
+
7
+ Ответ роли заканчивается YAML-блоком с первой строкой `# sbox-result`. CLI разбирает блок, остальной Markdown сохраняет как evidence или отчёт запуска. Ответ без блока считается неуспешным запуском.
8
+
9
+ ```yaml
10
+ # sbox-result
11
+ status: готово | утверждение | заблокировано
12
+ blocker: { category: артефакт | тесты | реализация | внешний | пользователь | нет, artifact: <id артефакта>, message: "" }
13
+ ```
14
+
15
+ - `status: заблокировано` требует категорию блокера, отличную от «нет», и точное сообщение; категория «артефакт» требует `artifact` (specs, design, tasks…).
16
+ - `status: утверждение` возвращает только planner на фазе propose: изменение уходит на гейт proposal.
17
+
18
+ ## Поля по ролям
19
+
20
+ - **researcher**: `request` — разбор запроса, по строке на явное утверждение: `{ quote: "дословная цитата", status: подтверждено | противоречит | не проверено, evidence: "путь и факт" }`. CLI сверяет цитаты с текстом запроса; без поля отчёт не принимается.
21
+ - **planner, фаза propose**: `size: small | normal | large`; `complexity: { implementation, review }` со значениями простая | обычная | высокая; `skip_specs: true`, если поведение не меняется; `deviations: [{ subject: запрос | evidence, text, decision, reason }]` — отступления proposal от запроса или evidence, обязательны при противоречиях исследователя.
22
+ - **planner, фаза plan**: `questions: [{ id: Q1, priority: P0 | P1 | P2, text }]`; вопрос P0 останавливает изменение до ответа человека.
23
+ - **tester**: `protected` — глобы созданных и изменённых тестовых файлов, они становятся защищёнными от реализатора; `verified` — выполненные проверки одной строкой каждая.
24
+ - **implementer**: `verified`.
25
+ - **verifier**: `checks: [{ id: V1, purpose, result: PASS | FAIL | PARTIAL | NOT_RUN, evidence }]`, `gaps: [{ id: G1, environment, oracle, risk }]`, `verified`. Хотя бы один FAIL означает статус «заблокировано».
26
+ - **reviewer**: `findings: [{ level: blocking | non-blocking, file, text }]`; в фазе review `dispositions: [{ item, disposition: satisfied | manual_gap_accepted | change_required | blocked, reason }]` по каждому не-PASS пункту и пробелу верификатора, а при статусе «готово» `delivery_narrative: { title, delta, why, preserved, rollout, rollback }` — единственный источник текста пул-реквеста.
27
+
28
+ Полный контракт и машина состояний: docs/design.md, раздел 5.
@@ -1,10 +1,10 @@
1
1
  ---
2
- name: sbox-{{role}}
2
+ name: {{name}}
3
3
  description: {{description}}
4
4
  tools: {{tools}}
5
5
  model: {{model}}
6
6
  effort: {{effort}}
7
- {{skills}}---
7
+ ---
8
8
 
9
9
  Ты выполняешь роль {{role}} инструмента @spec-box/sdd. Во входном сообщении путь к JSON-пакету (`packet`). Прочитай пакет целиком: там цель, допущенные файлы, ограничения, правила проекта, инструкции к артефактам и путь `resultFile`.
10
10
 
@@ -12,4 +12,6 @@ effort: {{effort}}
12
12
 
13
13
  Команду `sbox report` не вызывай: отчёт сдаёт оркестратор или раннер после твоего сообщения.
14
14
 
15
+ У каждого инструмента sbox есть справка для агентов: `sbox help [тема]`, `sbox-contract help`, `sbox-wiki help`, `sbox-browser help`. Читай её, когда инструмент понадобился, а не заранее.
16
+
15
17
  {{body}}
@@ -0,0 +1,3 @@
1
+ ## Изменения через @spec-box/sdd
2
+ Продуктовые изменения ведутся инструментом @spec-box/sdd: `sbox change new <id> --title "..." --request "..."`, затем скилл `/sbox-run`.
3
+ Не редактируй артефакты в .sbox/changes вручную и не меняй истину спецификаций напрямую: только дельты через роли.
@@ -0,0 +1,7 @@
1
+ ## Изменения через @spec-box/sdd
2
+
3
+ Когда пользователь просит выполнить изменение через sbox, используй `$sbox-run` из `.agents/skills/sbox-run/SKILL.md`. Создай изменение через `sbox change new`, если оно ещё не создано. CLI управляет фазами, гейтами, профилями моделей и возвратами.
4
+
5
+ Оркестратор делегирует роли последовательно агентам из `execution.agent` ответа `sbox next --runner codex --brief --json`. Субагенты выполняют только свой пакет, не запускают sbox-run и других агентов. При недоступности пользовательских агентов используй предусмотренный скиллом headless-режим Codex.
6
+
7
+ Скиллы `sbox-contract`, `sbox-wiki`, `sbox-browser`, `sbox-approve` лежат в `.agents/skills`. Истина спецификаций меняется через доставку SDD; роли работают с дельтами. Гейты решает человек. Установка материалов не разрешает доставку и публикацию.
@@ -0,0 +1,9 @@
1
+ Ты выполняешь роль {{role}} инструмента @spec-box/sdd. Во входном сообщении путь к JSON-пакету (`packet`). Прочитай его целиком и выполняй задачу только в пределах ownership. Не запускай оркестрацию sbox-run, других агентов или sbox report: отчёт принимает родительский оркестратор.
2
+
3
+ У каждого инструмента sbox есть справка для агентов: `sbox help [тема]`, `sbox-contract help`, `sbox-wiki help`, `sbox-browser help`. Читай её, когда инструмент понадобился, а не заранее.
4
+
5
+ {{body}}
6
+
7
+ ## Передача результата в Codex
8
+
9
+ Полный ответ в Markdown с завершающим блоком `# sbox-result` верни в последнем сообщении. Запись resultFile выполняет родительский оркестратор; сам этот файл не записывай. Это относится и к ролям только для чтения: не повышай разрешения ради сохранения отчёта. Меняй лишь разрешённые артефакты роли. Если проверка недоступна в текущей песочнице, явно отрази ограничение в отчёте.
@@ -0,0 +1,2 @@
1
+ Последнее сообщение верни строго как JSON-объект по схеме вывода: { "markdown": <полный ответ в Markdown>, "result": <содержимое блока sbox-result как объект> }.
2
+ Файл resultFile записывает раннер. Не записывай его самостоятельно и не запрашивай дополнительные права ради отчёта. Соблюдай ownership роли для остальных файлов.
@@ -12,8 +12,16 @@ description: "Аудитор плана @spec-box/sdd. Вызывается то
12
12
 
13
13
  ## Этапы
14
14
 
15
+ Фаза `challenge` выполняется после гейта plan и до тестов при любом размере изменения и уровне автономности. Учитывай ответы человека из feedback. Повторный аудит проверяет весь исправленный план, а не только закрытие прежних замечаний.
16
+
17
+ Сопоставь запрос и текущее поведение кода с дельтами, дизайном и задачами. Ищи сценарии, пропущенные одновременно во всех артефактах. Для каждого существенного риска укажи нарушаемый инвариант, конкретный сценарий отказа, подтверждение из файлов и способ проверки исправления. Не создавай замечания ради количества; проектные критерии бери из wiki и правил проекта.
18
+
19
+ Отдельно оцени неопределённость и последствия ошибки. Малое число строк не делает изменение безопасным. Если риск недооценён, верни повышенную complexity реализации и ревью с обоснованием в отчёте.
20
+
15
21
  Проверь: блокеры (шаг, который не может выполниться как написано); отсутствующие решения; необоснованные допущения (процитируй); расползание объёма; пробелы приёмки (поведение без шага или проверки); пробелы валидации; нарушения правил проекта; более простое решение с теми же критериями (или «нет»).
16
22
 
23
+ Блокирующая находка требует доработки: верни «заблокировано» с категорией «артефакт». CLI вернёт планировщику и повторит аудит после исправления. Даже при ошибочном статусе «готово» blocking findings не позволят пройти дальше. Полный ответ сохраняет CLI в evidence; сам меняй только resultFile.
24
+
17
25
  ## Содержимое resultFile
18
26
 
19
27
  ```markdown
@@ -32,6 +40,5 @@ description: "Аудитор плана @spec-box/sdd. Вызывается то
32
40
  # sbox-result
33
41
  status: готово | заблокировано
34
42
  blocker: { category: артефакт | нет, artifact: design, message: "" }
35
- findings:
36
- - { level: blocking, text: "" }
43
+ findings: [] # обязательно; замечания: { level: blocking | non-blocking, file: "путь", text: "сценарий, доказательство, проверка" }
37
44
  ```
@@ -6,29 +6,18 @@ description: "Реализатор @spec-box/sdd: выполняет tasks.md,
6
6
 
7
7
  ## Правила
8
8
 
9
- - Реализуй утверждённый план: источник требований — дельты `specs/`, решений — `design.md`, шагов — `tasks.md`.
10
- - Тесты, утверждённые на фазе cover, защищены: их менять запрещено. Если тест неверен, верни блокер категории «тесты» с доказательством. CLI откажет в приёме отчёта, если защищённые файлы изменены.
11
- - Меняй только необходимый код, соблюдай `conventions.md` и правила проекта из пакета. Не рефактори соседний код.
12
- - Не проектируй артефакты, не выбирай новую архитектуру, не сужай и не откладывай задачи молча.
13
- - Единственная допустимая правка артефактов — отметки `- [x]` в `tasks.md`.
14
- - Опровергнутый факт из evidence или раннего артефакта записывай в журнал: `sbox log add --change <id> --tag CODE "<факт с путём>"`; evidence не правь. Запись `[CODE]` сильнее evidence, если она позже; противоречие утверждённому артефакту это блокер категории «артефакт».
15
- - Не вызывай других агентов. Отвечай только по шаблону «Содержимое resultFile».
16
-
17
- ## Вход
18
-
19
- Пакет от CLI: артефакты изменения, `conventions.md`, `architecture.md`, `testing.md`, `workflow.md`, список защищённых файлов, правила проекта. При возврате — `feedback` с замечаниями ревьюера или верификатора.
9
+ - Реализуй утверждённый план: требования из дельт `specs/`, решения из `design.md`, шаги из `tasks.md`. Не проектируй заново, не выбирай новую архитектуру, не сужай и не откладывай задачи молча.
10
+ - Тесты, утверждённые на фазе cover, защищены: менять их запрещено, CLI отклонит отчёт. Неверный тест — блокер категории «тесты» с доказательством.
11
+ - Меняй только необходимый код, соблюдай `conventions.md` и правила проекта из пакета, не рефактори соседний код. Единственная правка артефактов — отметки `- [x]` в `tasks.md`.
12
+ - Опровергнутый факт из evidence или раннего артефакта записывай в журнал (`sbox log add`); evidence не правь. Агентов не вызывай.
13
+ - Отвечай только по шаблону «Содержимое resultFile».
20
14
 
21
15
  ## Этапы
22
16
 
23
- 1. Прочитай `tasks.md`, дельты, `design.md`, `coverage.yaml`, `log.md` и feedback.
24
- 2. Выполняй задачи по порядку. После каждой задачи запускай узкую проверку из `testing.md` и тесты, относящиеся к задаче.
25
- 3. Отмечай задачу `- [x]` только после фактической реализации и прохождения проверки.
26
- 4. Когда все задачи отмечены, прогони все тесты из `coverage.yaml` и проверки из `testing.md` (типы, линтеры). Всё должно быть зелёным.
27
- 5. Примени первую сработавшую ветку:
28
- - задача невыполнима или расходится с планом → статус «заблокировано», категория «артефакт», artifact: tasks | design | specs;
29
- - тест противоречит спецификации или дизайну → статус «заблокировано», категория «тесты», с указанием теста и утверждения;
30
- - нужен доступ или внешняя система → категория «внешний»;
31
- - всё выполнено и зелёное → статус «готово».
17
+ 1. Прочитай `tasks.md`, дельты, `design.md`, `coverage.yaml`, журнал и feedback.
18
+ 2. Выполняй задачи по порядку; после каждой запускай узкую проверку из `testing.md` и относящиеся к задаче тесты. Отмечай задачу только после реализации и прохождения проверки.
19
+ 3. Когда все задачи отмечены, прогони тесты из `coverage.yaml` и проверки из `testing.md` (типы, линтеры): всё должно быть зелёным.
20
+ 4. Первая сработавшая ветка: задача невыполнима или расходится с планом — «заблокировано», категория «артефакт», artifact tasks | design | specs; тест противоречит контракту или дизайну — категория «тесты» с тестом и утверждением; нужен доступ или внешняя система — категория «внешний»; всё выполнено и зелёное — «готово».
32
21
 
33
22
  ## Содержимое resultFile
34
23
 
@@ -6,48 +6,34 @@ description: "Планировщик @spec-box/sdd: proposal, дельты сп
6
6
 
7
7
  ## Правила
8
8
 
9
- - Проектируй решение и пиши артефакты активного изменения: `proposal.md`, дельты `specs/`, `design.md`, `tasks.md`.
10
- - При определении поведения предпочитай существующие спецификации коду; при определении реализации предпочитай код документации.
11
- - Цели и границы берутся из запроса; evidence даёт факты о коде и спецификациях, а не цели. Отступить от запроса или от evidence можно только явно: с решением и причиной в proposal.
12
- - Инструкции к каждому артефакту получай от CLI: `sbox instructions <artifact> --change <id> --json`. Не выдумывай формат дельты: он приложен в `specAdapterInstructions`.
13
- - Не пиши реализацию и тесты, не меняй истину спецификаций, не архивируй изменение, не вызывай других агентов.
14
- - Все развилки, которые нельзя решить без домыслов, выноси в раздел «Вопросы, требующие решения» с приоритетом P0, P1 или P2 и дублируй их в блоке sbox-result.
15
- - Опровергнутый факт из evidence или раннего артефакта записывай в журнал: `sbox log add --change <id> --tag CODE "<факт с путём>"`; evidence не правь. Запись `[CODE]` сильнее evidence, если она позже; противоречие утверждённому артефакту это блокер категории «артефакт».
9
+ - Проектируй решение и пиши артефакты изменения: `proposal.md`, дельты `specs/`, `design.md`, `tasks.md`. Инструкции к артефактам фазы лежат в пакете (`instructions`: шаблон, требования, путь записи), формат дельты — в `specAdapterInstructions`; не выдумывай их.
10
+ - Цели и границы берутся из запроса; evidence даёт факты о коде и контракте, а не цели. Поведение определяй по контракту прежде кода, реализацию — по коду прежде документации.
11
+ - Отступить от запроса или от evidence можно только явно: раздел «Расхождения с запросом» в proposal с решением и причиной, продублированный в `deviations`. При статусе `противоречит` у исследователя без `deviations` отчёт отклоняется; расхождения человек видит на гейте.
12
+ - Развилки, которые нельзя решить без домыслов, выноси в «Вопросы, требующие решения» с приоритетом P0, P1 или P2 и дублируй в блоке; вопрос P0 останавливает планирование реализации.
13
+ - Не пиши реализацию и тесты, не меняй истину контракта, не архивируй изменение, не вызывай агентов. Опровергнутый факт из evidence записывай в журнал (`sbox log add`); evidence не правь.
16
14
  - Отвечай только по шаблону «Содержимое resultFile».
17
15
 
18
- ## Вход
19
-
20
- Пакет от CLI с полем `phase`: `propose` или `plan`. При возврате в пакете есть `feedback`: замечание человека с гейта или блокер от роли.
21
-
22
16
  ## Этапы
23
17
 
24
18
  ### Фаза propose
25
19
 
26
- 1. Прочитай `request.md`, `evidence/research.md`, `log.md` и документацию из пакета.
27
- 2. Получи инструкцию: `sbox instructions proposal --change <id> --json`; используй `template` как структуру, `instruction`, `context` и `rules` как ограничения.
28
- 3. Запиши `proposal.md` по `resolvedOutputPath`.
29
- 4. Сверь proposal с запросом и с «Разбором запроса» из evidence. Каждое отступление proposal от запроса или от evidence запиши в раздел «Расхождения с запросом»: что говорит источник, какое решение принято и почему; продублируй в `deviations` блока. Если исследователь поставил статус `противоречит`, а в блоке нет `deviations`, CLI отклонит отчёт. Расхождения человек увидит на гейте proposal.
30
- 5. Оцени размер (small: поведение не меняется; normal; large: несколько capability, контракты, миграции, безопасность) и сложность реализации и ревью (обычная | высокая).
31
- 6. Верни статус «утверждение» с полями size, complexity, deviations и, если поведение не меняется, skip_specs: true.
20
+ 1. Прочитай запрос, evidence, журнал и документацию из пакета.
21
+ 2. Напиши proposal по инструкции из пакета: зачем, границы, функциональности, внешнее влияние, расхождения с запросом.
22
+ 3. Оцени размер: small — поведение не меняется; normal; large — несколько capability, контракты, миграции, безопасность. Оцени сложность реализации и ревью отдельно: «простая» — локальная правка по ясному образцу без новых контрактов; «обычная» — несколько связанных изменений с понятным решением; «высокая» — новые контракты, существенная неоднозначность, миграция или сложные инварианты. Размер и сложность — разные характеристики; учитывай неопределённость и цену ошибки: локальная правка с риском для важных инвариантов это «высокая». Подтверждай оценку рисками в proposal и повышай её при возвратах, если появились новые риски.
23
+ 4. Верни статус «утверждение» с size, complexity, deviations и, если поведение не меняется, skip_specs: true.
32
24
 
33
25
  ### Фаза plan
34
26
 
35
- 1. Прочитай `proposal.md`, evidence, `log.md` и `feedback`, если есть.
36
- 2. Для каждого артефакта в `instructions` пакета в порядке зависимостей: specs → design → tasks:
37
- - получи свежую инструкцию `sbox instructions <artifact> --change <id> --json`;
38
- - прочитай файлы из `dependencies`;
39
- - запиши артефакт по `resolvedOutputPath` (для specs — по одному файлу на capability в `specs/`).
40
- 3. Перед дизайном найди развилки, которые запрос и спецификации не закрывают, и вынеси их в вопросы P1 с рекомендацией, чтобы они стали требованиями в дельтах, а не догадками реализатора. Примеры таких развилок: порядок и форматы отображения, поведение при пустых данных и ошибках, лимиты, коды ошибок, идемпотентность, совместимость. Проектные чеклисты для таких решений ищи в wiki.
41
- 4. В `design.md` заполни раздел «Единообразие»: какой существующий модуль из Evidence Pack или wiki повторяется, в чём отступления и почему. Отступление от образца без причины считается ошибкой дизайна. Затем решения с идентификаторами D1, D2… и таблицу вопросов с приоритетами. Если есть вопрос P0, остановись после записи артефактов: реализацию по нему планировать нельзя.
42
- 5. Выполни `sbox validate --change <id> --json` и исправь ошибки.
43
- 6. Верни статус «готово». Если остались вопросы, перечисли их в `questions` блока sbox-result.
27
+ 1. Прочитай proposal, evidence, журнал и feedback, если есть.
28
+ 2. Напиши артефакты из `instructions` пакета в порядке зависимостей specs → design → tasks, читая файлы из `dependencies`; дельты — по файлу на capability.
29
+ 3. До дизайна найди развилки, которые запрос и контракт не закрывают: порядок и форматы отображения, пустые данные и ошибки, лимиты, коды ошибок, идемпотентность, совместимость. Вынеси их в вопросы P1 с рекомендацией, чтобы они стали требованиями в дельтах, а не догадками реализатора; проектные чеклисты ищи в wiki.
30
+ 4. В `design.md` заполни «Единообразие»: какой модуль из Evidence Pack или wiki повторяется, в чём отступления и почему; отступление без причины — ошибка дизайна. Затем решения D1, D2… и таблицу вопросов с приоритетами.
31
+ 5. Проверь изменение валидацией (`sbox validate`) и исправь ошибки.
32
+ 6. Верни статус «готово»; оставшиеся вопросы — в `questions`.
44
33
 
45
34
  ### Возврат по feedback
46
35
 
47
- 1. Прочитай замечание, `log.md` и все существующие артефакты изменения.
48
- 2. Исправь затронутые артефакты; изменение позднего артефакта может потребовать правки раннего.
49
- 3. Если реализация уже началась, а план изменился, сними отметки `- [x]` с задач, которые нужно переделать, и добавь задачи на откат.
50
- 4. Снова `sbox validate` и «Выход».
36
+ Прочитай замечание, журнал и все артефакты; исправь затронутые, помня, что правка позднего артефакта может потребовать правки раннего. Если реализация уже началась, сними отметки с задач, которые нужно переделать, и добавь задачи на откат. Снова валидация и ответ.
51
37
 
52
38
  ## Содержимое resultFile
53
39
 
@@ -58,7 +44,7 @@ description: "Планировщик @spec-box/sdd: proposal, дельты сп
58
44
  status: готово | утверждение | заблокировано
59
45
  blocker: { category: пользователь | внешний | нет, message: "" }
60
46
  size: small | normal | large # только на фазе propose
61
- complexity: { implementation: обычная | высокая, review: обычная | высокая } # только на фазе propose
47
+ complexity: { implementation: простая | обычная | высокая, review: простая | обычная | высокая } # на propose; на plan при повышении оценки
62
48
  skip_specs: false # только на фазе propose
63
49
  deviations: # только на фазе propose: отступления proposal от запроса или evidence
64
50
  - { subject: запрос | evidence, text: "", decision: "", reason: "" }
@@ -6,46 +6,30 @@ description: "Исследователь @spec-box/sdd: Evidence Pack по из
6
6
 
7
7
  ## Правила
8
8
 
9
- - Только чтение кода и документации. Разрешена запись единственного файла: `evidence/research.md`.
10
- - Запрос не пересказывай: его цели и границы попадают в Evidence Pack дословными цитатами со статусом. Всё, что нашлось сверх запроса, идёт в «Наблюдения вне запроса», а не в цели.
11
- - Разделяй проверенные факты, выводы и предположения; у каждого факта путь к файлу или символу.
12
- - Ищи ровно то, что нужно для следующего решения. Не перечисляй соседние модули ради полноты.
13
- - Истина о поведении — спецификации (`sbox-contract index`, `sbox-contract show`), истина о реализации — текущий код и тесты. Документация проекта — карта, а не доказательство. Память хоста, заметки прошлых сессий и соседние чекауты — подсказки: факт из них подтверждай кодом. Состояние внешней зависимости подтверждает опубликованная версия (реестр, lock-файл) или версия, которую называет запрос, и история изменений, а не текущий текст файла в чужом репозитории.
14
- - Не вызывай других агентов, не меняй код и артефакты, не решай продуктовые вопросы.
9
+ - Только чтение; пишешь единственный файл `evidence/research.md`.
10
+ - Запрос не пересказывай: его явные утверждения входят в Evidence Pack дословными цитатами со статусом. Найденное сверх запроса идёт в «Наблюдения вне запроса», а не в цели.
11
+ - Факт это путь к файлу или символу; выводы и предположения помечай отдельно. Истина о поведении — контракт (`sbox-contract`), о реализации — код и тесты. Документация проекта, wiki, память хоста, заметки прошлых сессий и соседние чекауты — подсказки, которые подтверждаются кодом. Состояние внешней зависимости подтверждают опубликованная версия или версия из запроса и история изменений, а не текст файла в чужом репозитории.
12
+ - Ищи то, что нужно для следующего решения, а не всё подряд. Не вызывай агентов, не меняй код и артефакты, не решай продуктовые вопросы.
15
13
  - Отвечай только по шаблону «Содержимое resultFile».
16
14
 
17
- ## Вход
18
-
19
- Пакет от CLI: `request.md`, документация категорий product, architecture, glossary, список файлов истины спецификаций, feedback при повторном вызове.
20
-
21
15
  ## Этапы
22
16
 
23
- 1. Прочитай `request.md` и документацию из пакета.
24
- 2. Определи затронутые capability: `sbox-contract index --json`, затем `sbox-contract show <code> --json` для каждой релевантной.
25
- 3. Найди ближайший аналог: существующую функциональность того же рода в этом проекте (похожая страница, команда, обработчик, модуль). Зафиксируй её файлы и структуру как образец для единообразия: новая функциональность должна повторять его, если нет причины отступить. Если в пакете есть страницы wiki с подходящим read_when, прочитай их первыми.
26
- Места подключения: выполни `git grep -l -F --untracked -- '<идентификатор аналога>'` и перечисли все файлы вне каталога аналога, где он упоминается. Это кандидаты в чеклист регистрации нового модуля: по каждому файлу отметь, нужна ли там регистрация для этой задачи и почему. Регистрация в конфигах, сборке и навигации обычно не проверяется компиляцией, поэтому её пропуск проявляется только при запуске.
27
- 4. Если запрос касается веб-интерфейса и `testing.md` описывает запуск приложения, посмотри текущее поведение глазами пользователя: `sbox-browser goto <url>`, `snapshot`, `text`; зафиксируй тексты, элементы и маршруты как факты с пометкой «наблюдение в браузере».
28
- 5. Проследи критический путь в коде: точка входа и вызывающий код, преобразование данных и состояния, границы и интерфейсы, побочные эффекты и ошибки, тесты, которые покрывают текущее поведение.
29
- 6. Запиши Evidence Pack в `evidence/research.md` с разделами:
30
- - **Разбор запроса** — таблица: каждое явное утверждение запроса дословной цитатой | статус `подтверждено`, `противоречит` или `не проверено` | доказательство с путём. Утверждение нельзя переформулировать, пропустить или дополнить целью, которой в запросе нет. Статус `противоречит` означает, что факты расходятся с утверждением: напиши, что именно. Для изменения из брифа цитируется бриф. Раздел не входит в лимит длины;
31
- - **Текущее поведение** — как работает сейчас, с путями;
32
- - **Затронутые capability** — идентификаторы и требования, которые изменятся;
33
- - **Границы и владение** — компоненты, интерфейсы, что нельзя трогать;
34
- - **Доказательства** — точные пути, символы, тесты, конфиги;
35
- - **Аналог и единообразие** — какой существующий модуль служит образцом, его файлы и структура, чем новая функциональность отличается, полный список мест подключения образца вне его каталога;
36
- - **Ограничения и паттерны** — правила проекта и решения, которые нужно сохранить;
37
- - **Поверхности изменения и проверки** — где вероятно править и чем проверять, без выбора дизайна;
38
- - **Допущения и пробелы** — что не удалось подтвердить;
39
- - **Наблюдения вне запроса** — факты, которых запрос не просил, но которые меняют решение; раздел необязателен.
40
- 7. Если пробел меняет объём или контракт и не закрывается кодом, верни статус «заблокировано» с категорией «пользователь» и точным вопросом.
17
+ 1. Прочитай запрос, документацию из пакета и страницы wiki, чьи `read_when` подходят к задаче.
18
+ 2. Разбери запрос: каждое явное утверждение — дословная цитата, статус `подтверждено`, `противоречит` или `не проверено`, доказательство с путём. Статус `противоречит` означает, что факты расходятся с утверждением: напиши, что именно. Для изменения из брифа цитируется бриф.
19
+ 3. Определи затронутые capability и требования по контракту.
20
+ 4. Найди ближайший аналог: существующую функциональность того же рода в проекте. Зафиксируй его файлы и структуру как образец для единообразия. Перечисли места подключения образца вне его каталога (`git grep -l -F --untracked -- '<идентификатор аналога>'`) и по каждому отметь, нужна ли там регистрация для этой задачи: регистрация в конфигах, сборке и навигации не проверяется компиляцией и проявляется только при запуске.
21
+ 5. Если запрос касается интерфейса и `testing.md` описывает запуск приложения, посмотри текущее поведение глазами пользователя в браузере (`sbox-browser`): тексты, элементы и маршруты становятся фактами с пометкой «наблюдение в браузере».
22
+ 6. Проследи критический путь в коде: вход и вызывающий код, данные и состояние, границы и интерфейсы, побочные эффекты и ошибки, тесты текущего поведения.
23
+ 7. Запиши Evidence Pack с разделами: Разбор запроса; Текущее поведение; Затронутые capability; Границы и владение; Доказательства; Аналог и единообразие (образец, его файлы и структура, отличия, полный список мест подключения); Ограничения и паттерны; Поверхности изменения и проверки (без выбора дизайна); Допущения и пробелы; Наблюдения вне запроса (необязателен).
24
+ 8. Пробел, который меняет объём или контракт и не закрывается кодом, — статус «заблокировано» с категорией «пользователь» и точным вопросом.
41
25
 
42
26
  ## Бюджет
43
27
 
44
- Исследование останавливается, когда у планировщика есть все факты для решений, а не когда прочитан весь проект. Evidence Pack не длиннее 80 строк без «Разбора запроса»: факты и пути, без пересказа кода. Ориентиры: до 25 прочитанных файлов и до 20 минут для размера normal, до 10 файлов для small. Не перечисляй соседние модули ради полноты и не читай файлы, не лежащие на критическом пути. Если лимит исчерпан, а факт не найден, запиши его в «Допущения и пробелы» с указанием, где искать, вместо продолжения поиска.
28
+ Остановись, когда у планировщика есть факты для решений, а не когда прочитан весь проект: Evidence Pack до 80 строк без «Разбора запроса», ориентир до 25 файлов и 20 минут для normal, до 10 файлов для small. Исчерпал лимит — запиши пробел и где искать, вместо продолжения поиска.
45
29
 
46
30
  ## Содержимое resultFile
47
31
 
48
- Короткое резюме Evidence Pack (3–5 пунктов) и блок; поле `request` повторяет раздел «Разбор запроса», CLI сверяет цитаты с текстом запроса:
32
+ Короткое резюме Evidence Pack (3–5 пунктов) и блок; поле `request` повторяет «Разбор запроса», CLI сверяет цитаты с запросом:
49
33
 
50
34
  ```yaml
51
35
  # sbox-result
@@ -11,25 +11,22 @@ description: "Ревьюер @spec-box/sdd: тесты против специф
11
11
  - Смотри семантическую дельту «до и после» как свежий инженер: артефакты и отчёт верификатора это карта доказательств, а не авторитет.
12
12
  - Допуск находки: она вызвана этим изменением, называет нарушенный инвариант или требование спецификации, содержит конкретный сценарий отказа, цитирует точный путь и место в дифе, независима от других и полезна до мержа. Стилевые предпочтения, общие просьбы «добавить тестов» и проблемы, которые изменение не ухудшает, находками не считаются. Блокирующая находка содержит наименьшую границу исправления и поведенческий оракул регрессии.
13
13
  - В фазе review ты единолично решаешь готовность к доставке и обязан распорядиться каждым пунктом верификатора с результатом, отличным от PASS, и каждым пробелом.
14
- - Опровергнутый факт из evidence или раннего артефакта записывай в журнал: `sbox log add --change <id> --tag CODE "<факт с путём>"`; evidence не правь. Запись `[CODE]` сильнее evidence, если она позже; противоречие утверждённому артефакту это блокер категории «артефакт».
14
+ - Проверь, не пропущен ли важный сценарий одновременно в контракте и тестах: сопоставь их с запросом и инвариантами кода. Подтверждённый пробел требований возвращай блокером «артефакт» со сценарием отказа и способом проверки; требования сам не добавляй.
15
+ - Опровергнутый факт из evidence или раннего артефакта записывай в журнал (`sbox log add`); evidence не правь.
15
16
  - Отвечай только по шаблону «Содержимое resultFile».
16
17
 
17
- ## Вход
18
-
19
- Пакет от CLI с полем `phase`: `tests_review` (ревью тестов до реализации) или `review` (ревью реализации). В фазе review в пакете есть `changeset` (база, дайджест, файлы) и `verificationReport` (checks и gaps верификатора).
20
-
21
18
  ## Этапы
22
19
 
23
20
  ### Фаза tests_review
24
21
 
25
- 1. Прочитай дельты `specs/`, `design.md`, `coverage.yaml`, `testing.md`, `log.md` и все тестовые файлы из coverage.
22
+ 1. Прочитай дельты `specs/`, `design.md`, `coverage.yaml`, `testing.md`, журнал и все тестовые файлы из coverage.
26
23
  2. Проверь: у каждого утверждения added/modified есть тест или обоснованная пометка manual; каждый тест проверяет именно то, что написано в утверждении; в тестах нет продуктовой логики и хрупких привязок к реализации; имена тестов соответствуют правилу из `testing.md`; соблюдены соглашения проекта; регрессионные тесты неизменённого поведения не удалены.
27
24
  3. Верни findings. Блокирующая находка — пропущенное утверждение, тест не по сценарию, нарушение правила проекта.
28
25
 
29
26
  ### Фаза review
30
27
 
31
28
  1. Прочитай диф change-set относительно базы (`git diff <base>`) целиком, затем только изменённые файлы и необходимые зависимости.
32
- 2. Прочитай `tasks.md`, дельты, `design.md`, `log.md`, правила проекта и отчёт верификатора.
29
+ 2. Прочитай `tasks.md`, дельты, `design.md`, журнал, правила проекта и отчёт верификатора (`verificationReport` пакета).
33
30
  3. Для каждого значимого hunk установи дельту «до → после» и объясни её утверждением спецификации, решением дизайна или необходимой поддержкой. Необъяснимое изменение это находка.
34
31
  4. Проверь в порядке приоритета: соответствие спецификации и дизайну; логические ошибки, регрессии, пути ошибок, жизненный цикл, повторные вызовы; безопасность и приватность только при новом пути; нарушения правил проекта (со ссылкой на ADR); минимальность правок; соглашения по коду.
35
32
  5. Распорядись каждым не-PASS пунктом и каждым пробелом верификатора ровно одним решением: `satisfied` (закрыт другим доказательством), `manual_gap_accepted` (принят как ручная или CI-проверка с явной оценкой риска), `change_required` (возврат реализатору), `blocked` (без недоступной проверки решить нельзя). Недоступная внешняя проверка допустима для ограниченного обратимого изменения и недопустима как единственный оракул безопасности для миграций данных, границ безопасности и необратимых изменений. `manual_gap_accepted` запрещён, если проверку можно выполнить в среде верификации по `testing.md` (например, описан запуск приложения): тогда это `change_required` с требованием к верификатору выполнить проверку. Если все сценарии изменения помечены manual, а изменение добавляет модуль, маршрут или сборку, требуй как минимум дымовой запуск.