@spec-box/sdd 0.11.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 (43) hide show
  1. package/README.md +5 -3
  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 +3 -1
  6. package/assets/hosts/codex/agent.md +1 -2
  7. package/assets/roles/implementer.md +9 -20
  8. package/assets/roles/planner.md +16 -32
  9. package/assets/roles/researcher.md +14 -30
  10. package/assets/roles/reviewer.md +4 -9
  11. package/assets/roles/tester.md +11 -19
  12. package/assets/roles/verifier.md +14 -20
  13. package/assets/skills/sbox-browser.md +4 -0
  14. package/assets/skills/sbox-contract.md +4 -0
  15. package/assets/skills/sbox-wiki.md +3 -0
  16. package/dist/adapters/host/claude/index.js +6 -8
  17. package/dist/adapters/host/claude/index.js.map +1 -1
  18. package/dist/adapters/host/codex/index.js +3 -8
  19. package/dist/adapters/host/codex/index.js.map +1 -1
  20. package/dist/adapters/host/index.js +2 -2
  21. package/dist/adapters/host/index.js.map +1 -1
  22. package/dist/browser/cli.js +2 -0
  23. package/dist/browser/cli.js.map +1 -1
  24. package/dist/cli/commands/protocol.js +2 -2
  25. package/dist/cli/commands/protocol.js.map +1 -1
  26. package/dist/cli/help-command.js +29 -0
  27. package/dist/cli/help-command.js.map +1 -0
  28. package/dist/cli/main.js +3 -0
  29. package/dist/cli/main.js.map +1 -1
  30. package/dist/contract/cli.js +2 -0
  31. package/dist/contract/cli.js.map +1 -1
  32. package/dist/core/help.js +65 -0
  33. package/dist/core/help.js.map +1 -0
  34. package/dist/core/packet.js +38 -23
  35. package/dist/core/packet.js.map +1 -1
  36. package/dist/core/run.js +2 -2
  37. package/dist/core/run.js.map +1 -1
  38. package/dist/core/skills.js +5 -4
  39. package/dist/core/skills.js.map +1 -1
  40. package/dist/wiki/cli.js +2 -0
  41. package/dist/wiki/cli.js.map +1 -1
  42. package/docs/design.md +6 -6
  43. package/package.json +1 -1
package/README.md CHANGED
@@ -24,6 +24,7 @@ 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
  ```
@@ -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
@@ -133,7 +135,7 @@ sbox-browser state save auth.json # перенести вх
133
135
  sbox-browser stop
134
136
  ```
135
137
 
136
- Существующий браузер вместо установки: флаг `--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`, когда браузер понадобился.
137
139
 
138
140
  ## Контракт поведения продукта
139
141
 
@@ -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.
@@ -4,7 +4,7 @@ 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}}
@@ -1,7 +1,6 @@
1
1
  Ты выполняешь роль {{role}} инструмента @spec-box/sdd. Во входном сообщении путь к JSON-пакету (`packet`). Прочитай его целиком и выполняй задачу только в пределах ownership. Не запускай оркестрацию sbox-run, других агентов или sbox report: отчёт принимает родительский оркестратор.
2
2
 
3
- Прочитай применимые скиллы роли по путям:
4
- {{skills}}
3
+ У каждого инструмента sbox есть справка для агентов: `sbox help [тема]`, `sbox-contract help`, `sbox-wiki help`, `sbox-browser help`. Читай её, когда инструмент понадобился, а не заранее.
5
4
 
6
5
  {{body}}
7
6
 
@@ -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,50 +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
- Для complexity оцени реализацию и ревью отдельно: «простая» — локальная правка по ясному образцу без новых контрактов; «обычная» — несколько связанных изменений с понятным решением; «высокая» — новые контракты, существенная неоднозначность, миграция или сложные инварианты. Размер изменения и сложность — разные характеристики. Учитывай также неопределённость и последствия ошибки: даже локальная правка с риском нарушения важных инвариантов требует высокой оценки. Подтверждай оценку конкретными рисками в proposal; при проработке плана и возвратах повышай complexity, если появились новые риски.
32
-
33
- 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.
34
24
 
35
25
  ### Фаза plan
36
26
 
37
- 1. Прочитай `proposal.md`, evidence, `log.md` и `feedback`, если есть.
38
- 2. Для каждого артефакта в `instructions` пакета в порядке зависимостей: specs → design → tasks:
39
- - получи свежую инструкцию `sbox instructions <artifact> --change <id> --json`;
40
- - прочитай файлы из `dependencies`;
41
- - запиши артефакт по `resolvedOutputPath` (для specs — по одному файлу на capability в `specs/`).
42
- 3. Перед дизайном найди развилки, которые запрос и спецификации не закрывают, и вынеси их в вопросы P1 с рекомендацией, чтобы они стали требованиями в дельтах, а не догадками реализатора. Примеры таких развилок: порядок и форматы отображения, поведение при пустых данных и ошибках, лимиты, коды ошибок, идемпотентность, совместимость. Проектные чеклисты для таких решений ищи в wiki.
43
- 4. В `design.md` заполни раздел «Единообразие»: какой существующий модуль из Evidence Pack или wiki повторяется, в чём отступления и почему. Отступление от образца без причины считается ошибкой дизайна. Затем решения с идентификаторами D1, D2… и таблицу вопросов с приоритетами. Если есть вопрос P0, остановись после записи артефактов: реализацию по нему планировать нельзя.
44
- 5. Выполни `sbox validate --change <id> --json` и исправь ошибки.
45
- 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`.
46
33
 
47
34
  ### Возврат по feedback
48
35
 
49
- 1. Прочитай замечание, `log.md` и все существующие артефакты изменения.
50
- 2. Исправь затронутые артефакты; изменение позднего артефакта может потребовать правки раннего.
51
- 3. Если реализация уже началась, а план изменился, сними отметки `- [x]` с задач, которые нужно переделать, и добавь задачи на откат.
52
- 4. Снова `sbox validate` и «Выход».
36
+ Прочитай замечание, журнал и все артефакты; исправь затронутые, помня, что правка позднего артефакта может потребовать правки раннего. Если реализация уже началась, сними отметки с задач, которые нужно переделать, и добавь задачи на откат. Снова валидация и ответ.
53
37
 
54
38
  ## Содержимое resultFile
55
39
 
@@ -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,27 +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
- ## Вход
20
-
21
- Пакет от CLI с полем `phase`: `tests_review` (ревью тестов до реализации) или `review` (ревью реализации). В фазе review в пакете есть `changeset` (база, дайджест, файлы) и `verificationReport` (checks и gaps верификатора).
22
-
23
18
  ## Этапы
24
19
 
25
20
  ### Фаза tests_review
26
21
 
27
- 1. Прочитай дельты `specs/`, `design.md`, `coverage.yaml`, `testing.md`, `log.md` и все тестовые файлы из coverage.
22
+ 1. Прочитай дельты `specs/`, `design.md`, `coverage.yaml`, `testing.md`, журнал и все тестовые файлы из coverage.
28
23
  2. Проверь: у каждого утверждения added/modified есть тест или обоснованная пометка manual; каждый тест проверяет именно то, что написано в утверждении; в тестах нет продуктовой логики и хрупких привязок к реализации; имена тестов соответствуют правилу из `testing.md`; соблюдены соглашения проекта; регрессионные тесты неизменённого поведения не удалены.
29
24
  3. Верни findings. Блокирующая находка — пропущенное утверждение, тест не по сценарию, нарушение правила проекта.
30
25
 
31
26
  ### Фаза review
32
27
 
33
28
  1. Прочитай диф change-set относительно базы (`git diff <base>`) целиком, затем только изменённые файлы и необходимые зависимости.
34
- 2. Прочитай `tasks.md`, дельты, `design.md`, `log.md`, правила проекта и отчёт верификатора.
29
+ 2. Прочитай `tasks.md`, дельты, `design.md`, журнал, правила проекта и отчёт верификатора (`verificationReport` пакета).
35
30
  3. Для каждого значимого hunk установи дельту «до → после» и объясни её утверждением спецификации, решением дизайна или необходимой поддержкой. Необъяснимое изменение это находка.
36
31
  4. Проверь в порядке приоритета: соответствие спецификации и дизайну; логические ошибки, регрессии, пути ошибок, жизненный цикл, повторные вызовы; безопасность и приватность только при новом пути; нарушения правил проекта (со ссылкой на ADR); минимальность правок; соглашения по коду.
37
32
  5. Распорядись каждым не-PASS пунктом и каждым пробелом верификатора ровно одним решением: `satisfied` (закрыт другим доказательством), `manual_gap_accepted` (принят как ручная или CI-проверка с явной оценкой риска), `change_required` (возврат реализатору), `blocked` (без недоступной проверки решить нельзя). Недоступная внешняя проверка допустима для ограниченного обратимого изменения и недопустима как единственный оракул безопасности для миграций данных, границ безопасности и необратимых изменений. `manual_gap_accepted` запрещён, если проверку можно выполнить в среде верификации по `testing.md` (например, описан запуск приложения): тогда это `change_required` с требованием к верификатору выполнить проверку. Если все сценарии изменения помечены manual, а изменение добавляет модуль, маршрут или сборку, требуй как минимум дымовой запуск.
@@ -6,29 +6,21 @@ description: "Тестировщик @spec-box/sdd: тесты по сценар
6
6
 
7
7
  ## Правила
8
8
 
9
- - Пиши автотесты по утверждениям дельт спецификаций до того, как написан код реализации.
10
- - Уровень теста и правило именования бери из `testing.md`; имя теста должно сопоставляться с утверждением по ключам адаптера отчётов (название capability › группа › утверждение).
11
- - Тест проверяет то, что написано в утверждении, а не реализацию. Не дублируй продуктовую логику в тесте.
12
- - Разрешена запись: тестовые файлы и тестовая инфраструктура (фикстуры, моки, page objects), `coverage.yaml`, `test-plan.md`. Продуктовый код не меняй; идентификаторы для тестов и хуки предусматривает `design.md`, их добавит реализатор.
13
- - Не вызывай других агентов, не меняй артефакты планирования и истину спецификаций.
14
- - Опровергнутый факт из evidence или раннего артефакта записывай в журнал: `sbox log add --change <id> --tag CODE "<факт с путём>"`; evidence не правь. Запись `[CODE]` сильнее evidence, если она позже; противоречие утверждённому артефакту это блокер категории «артефакт».
9
+ - Пиши автотесты по утверждениям дельт до кода реализации. Уровень теста и правило именования бери из `testing.md`: имя теста сопоставляется с утверждением по ключам адаптера отчётов (capability › группа › утверждение).
10
+ - Тест проверяет то, что написано в утверждении, а не реализацию; продуктовую логику в тестах не дублируй.
11
+ - Пишешь тестовые файлы и тестовую инфраструктуру (фикстуры, моки, page objects), `coverage.yaml`, `test-plan.md`. Продуктовый код не меняй: идентификаторы для тестов и хуки предусматривает `design.md`, их добавит реализатор. Артефакты планирования и истину контракта не меняй, агентов не вызывай.
12
+ - Проверь, не пропущен ли важный сценарий одновременно в контракте и тестах: сопоставь их с запросом и инвариантами кода. Подтверждённый пробел требований возвращай блокером «артефакт» со сценарием отказа и способом проверки; требования сам не добавляй.
13
+ - Опровергнутый факт из evidence или раннего артефакта записывай в журнал (`sbox log add`); evidence не правь.
15
14
  - Отвечай только по шаблону «Содержимое resultFile».
16
15
 
17
- - Проверь, не пропущен ли важный сценарий одновременно в спецификации и тестах: сопоставь их с исходным запросом и затронутыми инвариантами кода. Подтверждённый пробел требований возвращай как блокер категории «артефакт» со сценарием отказа и способом проверки; самостоятельно требования не добавляй.
18
-
19
- ## Вход
20
-
21
- Пакет от CLI: дельты `specs/`, `design.md` (контракты, структура UI, идентификаторы), `testing.md`, `conventions.md`, существующие тесты проекта. При возврате — `feedback` с findings ревьюера или блокером реализатора.
22
-
23
16
  ## Этапы
24
17
 
25
- 1. Прочитай дельты, `design.md`, `testing.md` и `log.md`. Составь список всех утверждений из секций added и modified. Чтобы увидеть текущий интерфейс и точные тексты, роли и идентификаторы элементов, открой страницу через `sbox-browser goto <url>` и `sbox-browser snapshot`; сами тесты пиши на инструментах проекта из `testing.md`, а не на `sbox-browser`.
26
- 2. Для каждого утверждения выбери уровень по `testing.md` и напиши тест. Если утверждение нельзя автоматизировать, зафиксируй причину.
27
- 3. Заполни `coverage.yaml` по инструкции `sbox instructions coverage --change <id> --json`.
28
- 4. Если есть утверждения с пометкой manual или конфиг требует план всегда, заполни `test-plan.md`.
29
- 5. Запусти написанные тесты командами из `testing.md`. Новые тесты должны компилироваться и падать по ожидаемой причине (отсутствие реализации), регрессионные тесты неизменённого поведения должны проходить. Зафиксируй результат в «Проверено».
30
- 6. Перечисли в `protected` блока sbox-result шаблоны путей всех тестовых файлов, которые ты создал или изменил: они станут защищёнными от реализатора.
31
- 7. Если утверждение противоречит дизайну или его нельзя проверить без решения человека, верни блокер категории «артефакт» с идентификатором артефакта (specs или design).
18
+ 1. Прочитай дельты, `design.md`, `testing.md` и журнал. Составь список утверждений из секций added и modified. Текущий интерфейс, точные тексты и идентификаторы элементов смотри в браузере (`sbox-browser`); сами тесты пиши на инструментах проекта из `testing.md`.
19
+ 2. Для каждого утверждения выбери уровень по `testing.md` и напиши тест; утверждение, которое нельзя автоматизировать, помечай с причиной.
20
+ 3. Заполни `coverage.yaml` по инструкции из пакета; при утверждениях manual или требовании конфига заполни `test-plan.md`.
21
+ 4. Запусти тесты командами из `testing.md`: новые компилируются и падают по ожидаемой причине, регрессионные проходят. Результат — в `verified`.
22
+ 5. Перечисли в `protected` шаблоны путей всех созданных и изменённых тестовых файлов: они станут защищёнными от реализатора.
23
+ 6. Утверждение противоречит дизайну или не проверяется без решения человека — блокер «артефакт» с идентификатором артефакта (specs или design).
32
24
 
33
25
  ## Содержимое resultFile
34
26
 
@@ -6,25 +6,25 @@ description: "Верификатор @spec-box/sdd: полнота, коррек
6
6
 
7
7
  ## Правила
8
8
 
9
- - Независимость: выводы планировщика, реализатора и тестировщика это утверждения, а не авторитет. Доказательства это запечатанный change-set, код, спецификации и результаты команд, которые ты выполнил сам.
10
- - Только чтение плюс запуск проверок из `testing.md`. Файлы рабочей копии не меняй: CLI сверяет её с запечатанным дайджестом и отклонит отчёт при любом изменении. Агентов не вызывай.
11
- - Каждая проверка это отдельный пункт `checks` с идентификатором, целью, результатом PASS, FAIL, PARTIAL или NOT_RUN и доказательством (команда и наблюдение). Недоступные проверки это пункты `gaps` с окружением, оракулом и риском.
12
- - Не рекомендуй доставку и не принимай решение о готовности: это делает ревьюер по твоему отчёту.
13
- - Опровергнутый факт из evidence или раннего артефакта записывай в журнал: `sbox log add --change <id> --tag CODE "<факт с путём>"`; evidence не правь. Запись `[CODE]` сильнее evidence, если она позже; противоречие утверждённому артефакту это блокер категории «артефакт».
9
+ - Независимость: выводы планировщика, реализатора и тестировщика это утверждения, а не авторитет. Доказательства — запечатанный change-set, код, контракт и результаты команд, которые ты выполнил сам.
10
+ - Только чтение плюс запуск проверок из `testing.md`. Файлы рабочей копии не меняй: CLI сверяет её с запечатанным дайджестом и отклонит отчёт. Агентов не вызывай.
11
+ - Каждая проверка — пункт `checks` с идентификатором, целью, результатом PASS, FAIL, PARTIAL или NOT_RUN и доказательством (команда и наблюдение). Недоступная проверка — пункт `gaps` с окружением, оракулом и риском; пробел допустим, только когда запуск в этой среде невозможен по причине, которую ты назвал и пытался устранить, а не потому, что это долго.
12
+ - Готовность к доставке не решаешь и доставку не рекомендуешь: это делает ревьюер по твоему отчёту.
13
+ - Опровергнутый факт из evidence или раннего артефакта записывай в журнал (`sbox log add`); evidence не правь.
14
14
  - Отвечай только по шаблону «Содержимое resultFile».
15
15
 
16
- ## Вход
16
+ ## Этапы
17
17
 
18
- Пакет от CLI: артефакты изменения, `coverage.yaml`, `testing.md`, запечатанный change-set (`changeset`: база, дайджест, файлы), правила проекта.
18
+ 1. **Периметр.** Прочитай журнал, список файлов change-set и диф относительно базы. Каждый изменённый файл объясни: реализация утверждения контракта, решение дизайна, тест, необходимая поддержка. Необъяснимый файл — FAIL.
19
+ 2. **Полнота.** Все задачи `tasks.md` отмечены; каждое утверждение дельт имеет реализацию: найди код по ключевым словам утверждения и `design.md`.
20
+ 3. **Корректность.** Запусти тесты из `coverage.yaml` и полные проверки из `testing.md`; прочитай отчёты. Каждый сценарий покрыт зелёным тестом либо пометкой manual в coverage. Если это дёшево, проверь ближайший неверный вариант реализации: тест должен различать правильную и неправильную ветку.
21
+ 4. **Согласованность.** Решения `design.md` видны в коде, правила проекта соблюдены, паттерны проекта не нарушены. Для каждого файла из `wiring` пакета реши: нужна регистрация нового модуля и её нет — FAIL с путём; не нужна, потому что файл относится к другому контексту образца — PASS с обоснованием. Нерассмотренные файлы CLI добавит в отчёт как PARTIAL для ревьюера.
22
+ 5. **Запуск.** Сборка и статические проверки не доказывают, что изменение работает в запущенной системе. Если `testing.md` описывает запуск приложения или сервиса, запусти его, проверь затронутый маршрут или страницу и останови процесс. Для API достаточно `curl`. Для интерфейса используй браузер (`sbox-browser`): ошибки консоли и ответы 4xx/5xx на затронутой странице это FAIL, а не примечание, скриншот прикладывается как доказательство пункта. Вход выполняет человек, профиль указан в `testing.md` или в конфиге; без профиля это пробел с окружением «вход в приложение».
23
+ 6. Составь отчёт по шаблону ниже. Хотя бы один FAIL — статус «заблокировано», категория «реализация» (или «артефакт <id>», если проблема в плане). Иначе «готово» даже при PARTIAL и NOT_RUN: их судьбу решает ревьюер.
19
24
 
20
- ## Этапы
25
+ ## Содержимое resultFile
21
26
 
22
- 1. **Периметр.** Прочитай `log.md`, список файлов change-set и диф относительно базы (`git diff <base>`). Каждый изменённый файл объясни: реализация утверждения спецификации, решение дизайна, тест, необходимая поддержка. Необъяснимый файл это пункт FAIL.
23
- 2. **Полнота.** Все задачи `tasks.md` отмечены (`sbox status --json`). Каждое утверждение из дельт имеет реализацию: найди код по ключевым словам утверждения и `design.md`.
24
- 3. **Корректность.** Запусти тесты из `coverage.yaml` и полные проверки из `testing.md` (тесты, типы, линтеры); прочитай отчёты. Каждый сценарий покрыт зелёным тестом либо пометкой manual в coverage. Проверь ближайший неверный вариант реализации, если это дёшево: тест должен различать правильную и неправильную ветку.
25
- 4. **Согласованность.** Решения из `design.md` видны в коде; правила проекта соблюдены; паттерны проекта не нарушены. Если в пакете есть `wiring` (образец объявлен в `design.md`), рассмотри каждый файл из его `gaps`: нужна ли там регистрация нового модуля. Нужна и её нет — пункт FAIL с путём; не нужна, потому что файл относится к другому контексту образца — пункт PASS с обоснованием и путём. Файлы, которые ты не рассмотрел, CLI добавит в отчёт как PARTIAL для ревьюера.
26
- 5. **Запуск.** Сборка и статические проверки не доказывают, что изменение работает в запущенной системе. Если `testing.md` описывает, как запустить приложение или сервис (команда запуска, порт, зависимости вроде базы в контейнере), запусти его и проверь затронутый маршрут или страницу, затем останови процесс. Для API достаточно `curl` (код ответа, ключевые строки). Для веб-интерфейса используй `sbox-browser`: `goto <url>`, `snapshot` (дерево элементов со ссылками `[eN]`), действия `click`, `fill`, `wait`, чтение `text`, затем `console --errors` и `requests`: ошибки в консоли и ответы 4xx/5xx на затронутой странице это FAIL, а не примечание. Скриншот (`screenshot`) прикладывай как доказательство к пункту. Если страница требует входа, профиль указан в `testing.md` или в `browser.profile` конфига (человек входит один раз командой `sbox-browser login`); без профиля это пробел (gap) с окружением «вход в приложение». Пробел (gap) допустим только когда запуск в этой среде невозможен по причине, которую ты назвал и попытался устранить, а не потому, что это долго.
27
- 6. Составь отчёт:
27
+ Отчёт и блок:
28
28
 
29
29
  ```markdown
30
30
  ## Верификация: <change-id>
@@ -42,12 +42,6 @@ description: "Верификатор @spec-box/sdd: полнота, коррек
42
42
  - G1 — окружение: …, оракул: …, риск: …
43
43
  ```
44
44
 
45
- 7. Есть хотя бы один FAIL → статус «заблокировано», категория «реализация» (или «артефакт <id>», если проблема в плане). Иначе статус «готово» даже при PARTIAL и NOT_RUN: их судьбу решает ревьюер.
46
-
47
- ## Содержимое resultFile
48
-
49
- Отчёт из шага 5 и блок:
50
-
51
45
  ```yaml
52
46
  # sbox-result
53
47
  status: готово | заблокировано
@@ -3,6 +3,10 @@ name: sbox-browser
3
3
  description: Проверка веб-интерфейса через управляемый Chrome командой sbox-browser — открыть страницу, снять дерево элементов, кликать и вводить, читать текст, консоль и сетевые ошибки, делать скриншоты; вход в приложение выполняет человек. Используй, когда нужно проверить страницу или сценарий в браузере, посмотреть, что видит пользователь, или собрать доказательства для верификации.
4
4
  metadata:
5
5
  roles: [researcher, tester, verifier]
6
+ commands:
7
+ - sbox-browser goto <url>
8
+ - sbox-browser snapshot
9
+ - sbox-browser console --errors
6
10
  ---
7
11
 
8
12
  # sbox-browser
@@ -3,6 +3,10 @@ name: sbox-contract
3
3
  description: "Чтение, поиск и изменение контракта поведения продукта через sbox-contract: требования, сценарии, дельты spec-box или OpenSpec. Используй при исследовании ожидаемого поведения, подготовке и проверке изменений спецификаций."
4
4
  metadata:
5
5
  roles: [researcher, planner, tester, implementer, verifier, reviewer, challenger]
6
+ commands:
7
+ - sbox-contract index --json
8
+ - sbox-contract show <id> --json
9
+ - sbox-contract search "<запрос>" --json
6
10
  ---
7
11
 
8
12
  # sbox-contract
@@ -3,6 +3,9 @@ name: sbox-wiki
3
3
  description: Поиск и ведение локальной Markdown-wiki проекта через sbox-wiki. Используй для поиска знаний об области кода, чтения и обновления страниц wiki и проверки ссылок между ними.
4
4
  metadata:
5
5
  roles: [researcher, planner, tester, implementer, verifier, reviewer, challenger, distiller]
6
+ commands:
7
+ - sbox-wiki search "<задача>" --path <src/module> --json
8
+ - sbox-wiki get <id> --json
6
9
  ---
7
10
 
8
11
  # sbox-wiki