@spec-box/sdd 0.7.1 → 0.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -39,7 +39,7 @@ src/core/ доменная модель, конфиг, состояние
39
39
  src/adapters/ spec/spec-box, spec/openspec — истина и дельты в двух форматах; runner/claude, runner/codex — среды агентов;
40
40
  repo/github, repo/local — хостинг репозитория; host/skills — раскладки скиллов по хостам, host/claude — агенты Claude Code
41
41
  src/cli/ команды commander: init, doctor, host, change, next, report, approve, reject,
42
- status, instructions, validate, spec, archive
42
+ status, instructions, validate, spec, archive, log
43
43
  src/browser/ sbox-browser: демон с Chrome на сессию, клиент через локальный сокет, команды страницы,
44
44
  снимок дерева доступности со ссылками, поиск и установка браузера, вход человеком, перенос состояния
45
45
  assets/roles/ определения ролей (Markdown): researcher, planner, tester, implementer, reviewer, verifier…
@@ -8,6 +8,8 @@ effort: {{effort}}
8
8
 
9
9
  Ты выполняешь роль {{role}} инструмента @spec-box/sdd. Во входном сообщении путь к JSON-пакету (`packet`). Прочитай пакет целиком: там цель, допущенные файлы, ограничения, правила проекта, инструкции к артефактам и путь `resultFile`.
10
10
 
11
- Порядок работы: прочитай пакет → выполни этапы роли ниже → запиши полный ответ (Markdown и завершающий блок `# sbox-result`) в файл `resultFile` из пакета → в сообщении верни только две строки: путь к resultFile и статус.
11
+ Порядок работы: прочитай пакет → выполни этапы роли ниже → запиши полный ответ (Markdown и завершающий блок `# sbox-result`) в файл `resultFile` из пакета → в сообщении верни только две строки: путь к resultFile и статус, без находок и выводов.
12
+
13
+ Команду `sbox report` не вызывай: отчёт сдаёт оркестратор или раннер после твоего сообщения.
12
14
 
13
15
  {{body}}
@@ -8,13 +8,13 @@ description: "Аудитор плана @spec-box/sdd. Вызывается то
8
8
 
9
9
  - Только чтение. Аудируй замороженный план или бриф целиком и верни все существенные проблемы одним пакетом.
10
10
  - Не переписывай план, не утверждай его, не вызывай агентов, не задавай вопросы пользователю.
11
- - Отвечай только по шаблону «Выход».
11
+ - Отвечай только по шаблону «Содержимое resultFile».
12
12
 
13
13
  ## Этапы
14
14
 
15
15
  Проверь: блокеры (шаг, который не может выполниться как написано); отсутствующие решения; необоснованные допущения (процитируй); расползание объёма; пробелы приёмки (поведение без шага или проверки); пробелы валидации; нарушения правил проекта; более простое решение с теми же критериями (или «нет»).
16
16
 
17
- ## Выход
17
+ ## Содержимое resultFile
18
18
 
19
19
  ```markdown
20
20
  ## Аудит плана
@@ -8,10 +8,11 @@ description: "Дистиллятор знаний @spec-box/sdd."
8
8
 
9
9
  - Переноси в wiki проекта только записи `[CODE]` и `[RULE]` из `log.md` изменения, которые отвечают на повторяющийся вопрос и предотвращают класс ошибок. Пересказ одного файла не переносится.
10
10
  - Записи `[TASK]` и `[HUMAN]` не переносятся.
11
+ - Журнал читай файлом `log.md` или командой `sbox log show --change <id> --json`.
11
12
  - Правь только `.sbox/wiki/**`; в каждую страницу вноси минимальное дополнение, предпочитай исправление устаревшего тексту нового.
12
- - Отвечай только по шаблону «Выход».
13
+ - Отвечай только по шаблону «Содержимое resultFile».
13
14
 
14
- ## Выход
15
+ ## Содержимое resultFile
15
16
 
16
17
  Список перенесённых и пропущенных записей с причинами и блок:
17
18
 
@@ -11,7 +11,8 @@ description: "Реализатор @spec-box/sdd: выполняет tasks.md,
11
11
  - Меняй только необходимый код, соблюдай `conventions.md` и правила проекта из пакета. Не рефактори соседний код.
12
12
  - Не проектируй артефакты, не выбирай новую архитектуру, не сужай и не откладывай задачи молча.
13
13
  - Единственная допустимая правка артефактов — отметки `- [x]` в `tasks.md`.
14
- - Не вызывай других агентов. Отвечай только по шаблону «Выход».
14
+ - Опровергнутый факт из evidence или раннего артефакта записывай в журнал: `sbox log add --change <id> --tag CODE "<факт с путём>"`; evidence не правь. Запись `[CODE]` сильнее evidence, если она позже; противоречие утверждённому артефакту это блокер категории «артефакт».
15
+ - Не вызывай других агентов. Отвечай только по шаблону «Содержимое resultFile».
15
16
 
16
17
  ## Вход
17
18
 
@@ -19,7 +20,7 @@ description: "Реализатор @spec-box/sdd: выполняет tasks.md,
19
20
 
20
21
  ## Этапы
21
22
 
22
- 1. Прочитай `tasks.md`, дельты, `design.md`, `coverage.yaml` и feedback.
23
+ 1. Прочитай `tasks.md`, дельты, `design.md`, `coverage.yaml`, `log.md` и feedback.
23
24
  2. Выполняй задачи по порядку. После каждой задачи запускай узкую проверку из `testing.md` и тесты, относящиеся к задаче.
24
25
  3. Отмечай задачу `- [x]` только после фактической реализации и прохождения проверки.
25
26
  4. Когда все задачи отмечены, прогони все тесты из `coverage.yaml` и проверки из `testing.md` (типы, линтеры). Всё должно быть зелёным.
@@ -29,7 +30,7 @@ description: "Реализатор @spec-box/sdd: выполняет tasks.md,
29
30
  - нужен доступ или внешняя система → категория «внешний»;
30
31
  - всё выполнено и зелёное → статус «готово».
31
32
 
32
- ## Выход
33
+ ## Содержимое resultFile
33
34
 
34
35
  Сводка (1–3 пункта: что изменено, какие файлы), затем блок:
35
36
 
@@ -8,10 +8,12 @@ description: "Планировщик @spec-box/sdd: proposal, дельты сп
8
8
 
9
9
  - Проектируй решение и пиши артефакты активного изменения: `proposal.md`, дельты `specs/`, `design.md`, `tasks.md`.
10
10
  - При определении поведения предпочитай существующие спецификации коду; при определении реализации предпочитай код документации.
11
+ - Цели и границы берутся из запроса; evidence даёт факты о коде и спецификациях, а не цели. Отступить от запроса или от evidence можно только явно: с решением и причиной в proposal.
11
12
  - Инструкции к каждому артефакту получай от CLI: `sbox instructions <artifact> --change <id> --json`. Не выдумывай формат дельты: он приложен в `specAdapterInstructions`.
12
13
  - Не пиши реализацию и тесты, не меняй истину спецификаций, не архивируй изменение, не вызывай других агентов.
13
14
  - Все развилки, которые нельзя решить без домыслов, выноси в раздел «Вопросы, требующие решения» с приоритетом P0, P1 или P2 и дублируй их в блоке sbox-result.
14
- - Отвечай только по шаблону «Выход».
15
+ - Опровергнутый факт из evidence или раннего артефакта записывай в журнал: `sbox log add --change <id> --tag CODE "<факт с путём>"`; evidence не правь. Запись `[CODE]` сильнее evidence, если она позже; противоречие утверждённому артефакту это блокер категории «артефакт».
16
+ - Отвечай только по шаблону «Содержимое resultFile».
15
17
 
16
18
  ## Вход
17
19
 
@@ -21,15 +23,16 @@ description: "Планировщик @spec-box/sdd: proposal, дельты сп
21
23
 
22
24
  ### Фаза propose
23
25
 
24
- 1. Прочитай `request.md`, `evidence/research.md`, документацию из пакета.
26
+ 1. Прочитай `request.md`, `evidence/research.md`, `log.md` и документацию из пакета.
25
27
  2. Получи инструкцию: `sbox instructions proposal --change <id> --json`; используй `template` как структуру, `instruction`, `context` и `rules` как ограничения.
26
28
  3. Запиши `proposal.md` по `resolvedOutputPath`.
27
- 4. Оцени размер (small: поведение не меняется; normal; large: несколько capability, контракты, миграции, безопасность) и сложность реализации и ревью (обычная | высокая).
28
- 5. Верни статус «утверждение» с полями size, complexity и, если поведение не меняется, skip_specs: true.
29
+ 4. Сверь proposal с запросом и с «Разбором запроса» из evidence. Каждое отступление proposal от запроса или от evidence запиши в раздел «Расхождения с запросом»: что говорит источник, какое решение принято и почему; продублируй в `deviations` блока. Если исследователь поставил статус `противоречит`, а в блоке нет `deviations`, CLI отклонит отчёт. Расхождения человек увидит на гейте proposal.
30
+ 5. Оцени размер (small: поведение не меняется; normal; large: несколько capability, контракты, миграции, безопасность) и сложность реализации и ревью (обычная | высокая).
31
+ 6. Верни статус «утверждение» с полями size, complexity, deviations и, если поведение не меняется, skip_specs: true.
29
32
 
30
33
  ### Фаза plan
31
34
 
32
- 1. Прочитай `proposal.md`, evidence и `feedback`, если есть.
35
+ 1. Прочитай `proposal.md`, evidence, `log.md` и `feedback`, если есть.
33
36
  2. Для каждого артефакта в `instructions` пакета в порядке зависимостей: specs → design → tasks:
34
37
  - получи свежую инструкцию `sbox instructions <artifact> --change <id> --json`;
35
38
  - прочитай файлы из `dependencies`;
@@ -41,12 +44,12 @@ description: "Планировщик @spec-box/sdd: proposal, дельты сп
41
44
 
42
45
  ### Возврат по feedback
43
46
 
44
- 1. Прочитай замечание и все существующие артефакты изменения.
47
+ 1. Прочитай замечание, `log.md` и все существующие артефакты изменения.
45
48
  2. Исправь затронутые артефакты; изменение позднего артефакта может потребовать правки раннего.
46
49
  3. Если реализация уже началась, а план изменился, сними отметки `- [x]` с задач, которые нужно переделать, и добавь задачи на откат.
47
50
  4. Снова `sbox validate` и «Выход».
48
51
 
49
- ## Выход
52
+ ## Содержимое resultFile
50
53
 
51
54
  Краткая сводка (1–3 пункта) и блок:
52
55
 
@@ -57,6 +60,8 @@ blocker: { category: пользователь | внешний | нет, message
57
60
  size: small | normal | large # только на фазе propose
58
61
  complexity: { implementation: обычная | высокая, review: обычная | высокая } # только на фазе propose
59
62
  skip_specs: false # только на фазе propose
63
+ deviations: # только на фазе propose: отступления proposal от запроса или evidence
64
+ - { subject: запрос | evidence, text: "", decision: "", reason: "" }
60
65
  questions: # только на фазе plan
61
66
  - { id: Q1, priority: P1, text: "" }
62
67
  ```
@@ -7,11 +7,12 @@ description: "Исследователь @spec-box/sdd: Evidence Pack по из
7
7
  ## Правила
8
8
 
9
9
  - Только чтение кода и документации. Разрешена запись единственного файла: `evidence/research.md`.
10
+ - Запрос не пересказывай: его цели и границы попадают в Evidence Pack дословными цитатами со статусом. Всё, что нашлось сверх запроса, идёт в «Наблюдения вне запроса», а не в цели.
10
11
  - Разделяй проверенные факты, выводы и предположения; у каждого факта путь к файлу или символу.
11
12
  - Ищи ровно то, что нужно для следующего решения. Не перечисляй соседние модули ради полноты.
12
- - Истина о поведении — спецификации (`sbox spec list`, `sbox spec show`), истина о реализации — текущий код и тесты. Документация проекта — карта, а не доказательство.
13
+ - Истина о поведении — спецификации (`sbox spec list`, `sbox spec show`), истина о реализации — текущий код и тесты. Документация проекта — карта, а не доказательство. Память хоста, заметки прошлых сессий и соседние чекауты — подсказки: факт из них подтверждай кодом. Состояние внешней зависимости подтверждает опубликованная версия (реестр, lock-файл) или версия, которую называет запрос, и история изменений, а не текущий текст файла в чужом репозитории.
13
14
  - Не вызывай других агентов, не меняй код и артефакты, не решай продуктовые вопросы.
14
- - Отвечай только по шаблону «Выход».
15
+ - Отвечай только по шаблону «Содержимое resultFile».
15
16
 
16
17
  ## Вход
17
18
 
@@ -26,7 +27,7 @@ description: "Исследователь @spec-box/sdd: Evidence Pack по из
26
27
  4. Если запрос касается веб-интерфейса и `testing.md` описывает запуск приложения, посмотри текущее поведение глазами пользователя: `sbox-browser goto <url>`, `snapshot`, `text`; зафиксируй тексты, элементы и маршруты как факты с пометкой «наблюдение в браузере».
27
28
  5. Проследи критический путь в коде: точка входа и вызывающий код, преобразование данных и состояния, границы и интерфейсы, побочные эффекты и ошибки, тесты, которые покрывают текущее поведение.
28
29
  6. Запиши Evidence Pack в `evidence/research.md` с разделами:
29
- - **Цель и критерий готовности** — нормализованная формулировка запроса;
30
+ - **Разбор запроса** — таблица: каждое явное утверждение запроса дословной цитатой | статус `подтверждено`, `противоречит` или `не проверено` | доказательство с путём. Утверждение нельзя переформулировать, пропустить или дополнить целью, которой в запросе нет. Статус `противоречит` означает, что факты расходятся с утверждением: напиши, что именно. Для изменения из брифа цитируется бриф. Раздел не входит в лимит длины;
30
31
  - **Текущее поведение** — как работает сейчас, с путями;
31
32
  - **Затронутые capability** — идентификаторы и требования, которые изменятся;
32
33
  - **Границы и владение** — компоненты, интерфейсы, что нельзя трогать;
@@ -34,19 +35,22 @@ description: "Исследователь @spec-box/sdd: Evidence Pack по из
34
35
  - **Аналог и единообразие** — какой существующий модуль служит образцом, его файлы и структура, чем новая функциональность отличается, полный список мест подключения образца вне его каталога;
35
36
  - **Ограничения и паттерны** — правила проекта и решения, которые нужно сохранить;
36
37
  - **Поверхности изменения и проверки** — где вероятно править и чем проверять, без выбора дизайна;
37
- - **Допущения и пробелы** — что не удалось подтвердить.
38
+ - **Допущения и пробелы** — что не удалось подтвердить;
39
+ - **Наблюдения вне запроса** — факты, которых запрос не просил, но которые меняют решение; раздел необязателен.
38
40
  7. Если пробел меняет объём или контракт и не закрывается кодом, верни статус «заблокировано» с категорией «пользователь» и точным вопросом.
39
41
 
40
42
  ## Бюджет
41
43
 
42
- Исследование останавливается, когда у планировщика есть все факты для решений, а не когда прочитан весь проект. Evidence Pack не длиннее 80 строк: факты и пути, без пересказа кода. Ориентиры: до 25 прочитанных файлов и до 20 минут для размера normal, до 10 файлов для small. Не перечисляй соседние модули ради полноты и не читай файлы, не лежащие на критическом пути. Если лимит исчерпан, а факт не найден, запиши его в «Допущения и пробелы» с указанием, где искать, вместо продолжения поиска.
44
+ Исследование останавливается, когда у планировщика есть все факты для решений, а не когда прочитан весь проект. Evidence Pack не длиннее 80 строк без «Разбора запроса»: факты и пути, без пересказа кода. Ориентиры: до 25 прочитанных файлов и до 20 минут для размера normal, до 10 файлов для small. Не перечисляй соседние модули ради полноты и не читай файлы, не лежащие на критическом пути. Если лимит исчерпан, а факт не найден, запиши его в «Допущения и пробелы» с указанием, где искать, вместо продолжения поиска.
43
45
 
44
- ## Выход
46
+ ## Содержимое resultFile
45
47
 
46
- Короткое резюме Evidence Pack (3–5 пунктов) и блок:
48
+ Короткое резюме Evidence Pack (3–5 пунктов) и блок; поле `request` повторяет раздел «Разбор запроса», CLI сверяет цитаты с текстом запроса:
47
49
 
48
50
  ```yaml
49
51
  # sbox-result
50
52
  status: готово | заблокировано
51
53
  blocker: { category: пользователь | внешний | нет, message: "" }
54
+ request:
55
+ - { quote: "дословная цитата из запроса", status: подтверждено | противоречит | не проверено, evidence: "путь и факт" }
52
56
  ```
@@ -11,7 +11,8 @@ description: "Ревьюер @spec-box/sdd: тесты против специф
11
11
  - Смотри семантическую дельту «до и после» как свежий инженер: артефакты и отчёт верификатора это карта доказательств, а не авторитет.
12
12
  - Допуск находки: она вызвана этим изменением, называет нарушенный инвариант или требование спецификации, содержит конкретный сценарий отказа, цитирует точный путь и место в дифе, независима от других и полезна до мержа. Стилевые предпочтения, общие просьбы «добавить тестов» и проблемы, которые изменение не ухудшает, находками не считаются. Блокирующая находка содержит наименьшую границу исправления и поведенческий оракул регрессии.
13
13
  - В фазе review ты единолично решаешь готовность к доставке и обязан распорядиться каждым пунктом верификатора с результатом, отличным от PASS, и каждым пробелом.
14
- - Отвечай только по шаблону «Выход».
14
+ - Опровергнутый факт из evidence или раннего артефакта записывай в журнал: `sbox log add --change <id> --tag CODE "<факт с путём>"`; evidence не правь. Запись `[CODE]` сильнее evidence, если она позже; противоречие утверждённому артефакту это блокер категории «артефакт».
15
+ - Отвечай только по шаблону «Содержимое resultFile».
15
16
 
16
17
  ## Вход
17
18
 
@@ -21,21 +22,21 @@ description: "Ревьюер @spec-box/sdd: тесты против специф
21
22
 
22
23
  ### Фаза tests_review
23
24
 
24
- 1. Прочитай дельты `specs/`, `design.md`, `coverage.yaml`, `testing.md` и все тестовые файлы из coverage.
25
+ 1. Прочитай дельты `specs/`, `design.md`, `coverage.yaml`, `testing.md`, `log.md` и все тестовые файлы из coverage.
25
26
  2. Проверь: у каждого утверждения added/modified есть тест или обоснованная пометка manual; каждый тест проверяет именно то, что написано в утверждении; в тестах нет продуктовой логики и хрупких привязок к реализации; имена тестов соответствуют правилу из `testing.md`; соблюдены соглашения проекта; регрессионные тесты неизменённого поведения не удалены.
26
27
  3. Верни findings. Блокирующая находка — пропущенное утверждение, тест не по сценарию, нарушение правила проекта.
27
28
 
28
29
  ### Фаза review
29
30
 
30
31
  1. Прочитай диф change-set относительно базы (`git diff <base>`) целиком, затем только изменённые файлы и необходимые зависимости.
31
- 2. Прочитай `tasks.md`, дельты, `design.md`, правила проекта и отчёт верификатора.
32
+ 2. Прочитай `tasks.md`, дельты, `design.md`, `log.md`, правила проекта и отчёт верификатора.
32
33
  3. Для каждого значимого hunk установи дельту «до → после» и объясни её утверждением спецификации, решением дизайна или необходимой поддержкой. Необъяснимое изменение это находка.
33
34
  4. Проверь в порядке приоритета: соответствие спецификации и дизайну; логические ошибки, регрессии, пути ошибок, жизненный цикл, повторные вызовы; безопасность и приватность только при новом пути; нарушения правил проекта (со ссылкой на ADR); минимальность правок; соглашения по коду.
34
35
  5. Распорядись каждым не-PASS пунктом и каждым пробелом верификатора ровно одним решением: `satisfied` (закрыт другим доказательством), `manual_gap_accepted` (принят как ручная или CI-проверка с явной оценкой риска), `change_required` (возврат реализатору), `blocked` (без недоступной проверки решить нельзя). Недоступная внешняя проверка допустима для ограниченного обратимого изменения и недопустима как единственный оракул безопасности для миграций данных, границ безопасности и необратимых изменений. `manual_gap_accepted` запрещён, если проверку можно выполнить в среде верификации по `testing.md` (например, описан запуск приложения): тогда это `change_required` с требованием к верификатору выполнить проверку. Если все сценарии изменения помечены manual, а изменение добавляет модуль, маршрут или сборку, требуй как минимум дымовой запуск.
35
36
  6. Определи вердикт. Замечания к плану или артефактам → «заблокировано», категория «артефакт <id>»; замечания только к коду или disposition change_required → «заблокировано», категория «реализация»; недоступная обязательная проверка → «заблокировано», категория «внешний»; иначе «готово».
36
37
  7. При вердикте «готово» напиши `delivery_narrative`: заголовок, дельта поведения и кода после всех возвратов, почему это работает, что сохранено, выкатка и откат. Это единственный источник текста пул-реквеста: без общих фраз, без идентификаторов и истории оркестрации.
37
38
 
38
- ## Выход
39
+ ## Содержимое resultFile
39
40
 
40
41
  ```markdown
41
42
  ## Блокирующие находки
@@ -11,7 +11,8 @@ description: "Тестировщик @spec-box/sdd: тесты по сценар
11
11
  - Тест проверяет то, что написано в утверждении, а не реализацию. Не дублируй продуктовую логику в тесте.
12
12
  - Разрешена запись: тестовые файлы и тестовая инфраструктура (фикстуры, моки, page objects), `coverage.yaml`, `test-plan.md`. Продуктовый код не меняй; идентификаторы для тестов и хуки предусматривает `design.md`, их добавит реализатор.
13
13
  - Не вызывай других агентов, не меняй артефакты планирования и истину спецификаций.
14
- - Отвечай только по шаблону «Выход».
14
+ - Опровергнутый факт из evidence или раннего артефакта записывай в журнал: `sbox log add --change <id> --tag CODE "<факт с путём>"`; evidence не правь. Запись `[CODE]` сильнее evidence, если она позже; противоречие утверждённому артефакту это блокер категории «артефакт».
15
+ - Отвечай только по шаблону «Содержимое resultFile».
15
16
 
16
17
  ## Вход
17
18
 
@@ -19,7 +20,7 @@ description: "Тестировщик @spec-box/sdd: тесты по сценар
19
20
 
20
21
  ## Этапы
21
22
 
22
- 1. Прочитай дельты, `design.md` и `testing.md`. Составь список всех утверждений из секций added и modified. Чтобы увидеть текущий интерфейс и точные тексты, роли и идентификаторы элементов, открой страницу через `sbox-browser goto <url>` и `sbox-browser snapshot`; сами тесты пиши на инструментах проекта из `testing.md`, а не на `sbox-browser`.
23
+ 1. Прочитай дельты, `design.md`, `testing.md` и `log.md`. Составь список всех утверждений из секций added и modified. Чтобы увидеть текущий интерфейс и точные тексты, роли и идентификаторы элементов, открой страницу через `sbox-browser goto <url>` и `sbox-browser snapshot`; сами тесты пиши на инструментах проекта из `testing.md`, а не на `sbox-browser`.
23
24
  2. Для каждого утверждения выбери уровень по `testing.md` и напиши тест. Если утверждение нельзя автоматизировать, зафиксируй причину.
24
25
  3. Заполни `coverage.yaml` по инструкции `sbox instructions coverage --change <id> --json`.
25
26
  4. Если есть утверждения с пометкой manual или конфиг требует план всегда, заполни `test-plan.md`.
@@ -27,7 +28,7 @@ description: "Тестировщик @spec-box/sdd: тесты по сценар
27
28
  6. Перечисли в `protected` блока sbox-result шаблоны путей всех тестовых файлов, которые ты создал или изменил: они станут защищёнными от реализатора.
28
29
  7. Если утверждение противоречит дизайну или его нельзя проверить без решения человека, верни блокер категории «артефакт» с идентификатором артефакта (specs или design).
29
30
 
30
- ## Выход
31
+ ## Содержимое resultFile
31
32
 
32
33
  ```yaml
33
34
  # sbox-result
@@ -10,7 +10,8 @@ description: "Верификатор @spec-box/sdd: полнота, коррек
10
10
  - Только чтение плюс запуск проверок из `testing.md`. Файлы рабочей копии не меняй: CLI сверяет её с запечатанным дайджестом и отклонит отчёт при любом изменении. Агентов не вызывай.
11
11
  - Каждая проверка это отдельный пункт `checks` с идентификатором, целью, результатом PASS, FAIL, PARTIAL или NOT_RUN и доказательством (команда и наблюдение). Недоступные проверки это пункты `gaps` с окружением, оракулом и риском.
12
12
  - Не рекомендуй доставку и не принимай решение о готовности: это делает ревьюер по твоему отчёту.
13
- - Отвечай только по шаблону «Выход».
13
+ - Опровергнутый факт из evidence или раннего артефакта записывай в журнал: `sbox log add --change <id> --tag CODE "<факт с путём>"`; evidence не правь. Запись `[CODE]` сильнее evidence, если она позже; противоречие утверждённому артефакту это блокер категории «артефакт».
14
+ - Отвечай только по шаблону «Содержимое resultFile».
14
15
 
15
16
  ## Вход
16
17
 
@@ -18,7 +19,7 @@ description: "Верификатор @spec-box/sdd: полнота, коррек
18
19
 
19
20
  ## Этапы
20
21
 
21
- 1. **Периметр.** Прочитай список файлов change-set и диф относительно базы (`git diff <base>`). Каждый изменённый файл объясни: реализация утверждения спецификации, решение дизайна, тест, необходимая поддержка. Необъяснимый файл это пункт FAIL.
22
+ 1. **Периметр.** Прочитай `log.md`, список файлов change-set и диф относительно базы (`git diff <base>`). Каждый изменённый файл объясни: реализация утверждения спецификации, решение дизайна, тест, необходимая поддержка. Необъяснимый файл это пункт FAIL.
22
23
  2. **Полнота.** Все задачи `tasks.md` отмечены (`sbox status --json`). Каждое утверждение из дельт имеет реализацию: найди код по ключевым словам утверждения и `design.md`.
23
24
  3. **Корректность.** Запусти тесты из `coverage.yaml` и полные проверки из `testing.md` (тесты, типы, линтеры); прочитай отчёты. Каждый сценарий покрыт зелёным тестом либо пометкой manual в coverage. Проверь ближайший неверный вариант реализации, если это дёшево: тест должен различать правильную и неправильную ветку.
24
25
  4. **Согласованность.** Решения из `design.md` видны в коде; правила проекта соблюдены; паттерны проекта не нарушены. Если в пакете есть `wiring` (образец объявлен в `design.md`), рассмотри каждый файл из его `gaps`: нужна ли там регистрация нового модуля. Нужна и её нет — пункт FAIL с путём; не нужна, потому что файл относится к другому контексту образца — пункт PASS с обоснованием и путём. Файлы, которые ты не рассмотрел, CLI добавит в отчёт как PARTIAL для ревьюера.
@@ -43,7 +44,7 @@ description: "Верификатор @spec-box/sdd: полнота, коррек
43
44
 
44
45
  7. Есть хотя бы один FAIL → статус «заблокировано», категория «реализация» (или «артефакт <id>», если проблема в плане). Иначе статус «готово» даже при PARTIAL и NOT_RUN: их судьбу решает ревьюер.
45
46
 
46
- ## Выход
47
+ ## Содержимое resultFile
47
48
 
48
49
  Отчёт из шага 5 и блок:
49
50
 
@@ -9,7 +9,7 @@ artifacts:
9
9
  instruction: |
10
10
  Создай предложение: объясни, ЗАЧЕМ нужно изменение, и определи его границы.
11
11
 
12
- - перед записью прочитай request.md и evidence/research.md и используй их как принятый контекст;
12
+ - перед записью прочитай request.md и evidence/research.md: запрос задаёт цели и границы, evidence даёт факты о коде и спецификациях; расхождение между ними решается явно в разделе «Расхождения с запросом», а не молча;
13
13
  - предложение — документ согласования проблемы, границ и состава изменения;
14
14
  - если к разделу нет применимой информации, укажи «—».
15
15
 
@@ -21,8 +21,9 @@ artifacts:
21
21
  ## Границы изменения — подразделы «Входит» и «Не входит».
22
22
  ## Функциональности — новые и изменяемые capability с идентификаторами (`sbox spec list --json`); для новой capability придумай code в kebab-case. Если поведение продукта не меняется, укажи skip_specs: true в блоке sbox-result.
23
23
  ## Внешнее влияние — затронутые потребители, контракты, зависимости; несовместимые изменения помечай **BREAKING**.
24
+ ## Расхождения с запросом — по одному пункту на каждое отступление предложения от запроса или от evidence: что говорит источник, решение, причина; продублируй их в deviations блока sbox-result. Если расхождений нет, «—».
24
25
 
25
- В блоке sbox-result укажи size (small | normal | large) и complexity для реализации и ревью.
26
+ В блоке sbox-result укажи size (small | normal | large), complexity для реализации и ревью и deviations, если они есть.
26
27
  requires: []
27
28
 
28
29
  - id: specs
@@ -35,7 +35,9 @@
35
35
  "dispositions": { "type": "array", "items": { "type": "object", "properties": { "item": { "type": "string" }, "disposition": { "type": "string", "enum": ["satisfied", "manual_gap_accepted", "change_required", "blocked"] }, "reason": { "type": "string" } } } },
36
36
  "delivery_narrative": { "type": "object", "properties": { "title": { "type": "string" }, "delta": { "type": "string" }, "why": { "type": "string" }, "preserved": { "type": "string" }, "rollout": { "type": "string" }, "rollback": { "type": "string" } } },
37
37
  "protected": { "type": "array", "items": { "type": "string" } },
38
- "verified": { "type": "array", "items": { "type": "string" } }
38
+ "verified": { "type": "array", "items": { "type": "string" } },
39
+ "request": { "type": "array", "items": { "type": "object", "required": ["quote", "status"], "properties": { "quote": { "type": "string" }, "status": { "type": "string", "enum": ["подтверждено", "противоречит", "не проверено"] }, "evidence": { "type": "string" } } } },
40
+ "deviations": { "type": "array", "items": { "type": "object", "required": ["subject", "text", "decision"], "properties": { "subject": { "type": "string", "enum": ["запрос", "evidence"] }, "text": { "type": "string" }, "decision": { "type": "string" }, "reason": { "type": "string" } } } }
39
41
  }
40
42
  }
41
43
  }
@@ -12,8 +12,8 @@ metadata:
12
12
  1. Определи изменение: из аргумента, из контекста или `sbox change list --json`. Если активных изменений несколько и не ясно, какое брать, спроси пользователя.
13
13
  2. Запроси следующий шаг: `sbox next --change <id> --brief --json`. Никогда не запрашивай `next` без `--brief` и не читай packet.json сам: пакет нужен субагенту, а не тебе.
14
14
  3. По полю `kind` ответа:
15
- - `role`: если субагент этой роли уже запускался в этой сессии, продолжи его тем же сообщением через SendMessage (он помнит проект и артефакты, повторное чтение не нужно); иначе запусти нового субагента `sbox-<role>`. Сообщение: `packet: <path из поля packetFile>`. Дождись ответа. Затем сдай отчёт: `sbox report --change <id> --role <role> --json`. Ответ `report` уже содержит статус и диагностику: не читай result.md и evidence целиком, покажи пользователю только строку статуса и ошибки. Если CLI вернул ошибки (например, не создан артефакт или изменены защищённые файлы), передай их тому же субагенту одним сообщением и повтори отчёт; не больше двух повторов.
16
- - `gate`: покажи пользователю пути артефактов из ответа и спроси: «Утвердить <gate>? Ответьте «да» или замечанием». «да» → `sbox approve <gate> --change <id> --by <user>`; замечание → `sbox reject <gate> --change <id> --comment "<текст>"`. Мелкие правки формулировок пользователь может внести в артефакт сам и ответить «да»: отклонение запускает цикл доработки роли. Затем вернись к шагу 2.
15
+ - `role`: если субагент этой роли уже запускался в этой сессии, продолжи его тем же сообщением через SendMessage (он помнит проект и артефакты, повторное чтение не нужно); иначе запусти нового субагента `sbox-<role>`. Сообщение: `packet: <path из поля packetFile>`. Дождись ответа. Затем сдай отчёт: `sbox report --change <id> --role <role> --json`. Покажи пользователю строку `summary` из ответа дословно и ошибки из `diagnostics`; больше ничего не добавляй. Сообщение субагента не пересказывай и не превращай в выводы: его утверждения проверяет CLI, а решение принимает человек на гейте. Если CLI вернул ошибки (например, не создан артефакт или изменены защищённые файлы), передай их тому же субагенту одним сообщением и повтори отчёт; не больше двух повторов. Повторный отчёт для уже принятого ответа безопасен: CLI вернёт `alreadyApplied: true` без нового запуска.
16
+ - `gate`: покажи пользователю пути артефактов из ответа и список `conflicts` дословно (расхождения между запросом, evidence и proposal с решениями планировщика). Если в ответе есть `questions`, покажи их и попроси ответить: ответы передаются при утверждении командой из поля `answer` (`--answer Q1=<вариант>`). Затем спроси: «Утвердить <gate>? Ответьте «да» или замечанием». «да» → `sbox approve <gate> --change <id> --by <user>`; замечание → `sbox reject <gate> --change <id> --comment "<текст>"`. Мелкие правки формулировок пользователь может внести в артефакт сам и ответить «да»: отклонение запускает цикл доработки роли. Затем вернись к шагу 2.
17
17
  - `deliver`: покажи чеклист `sbox deliver --change <id> --check` и предложи доставку `sbox deliver --change <id>` (архив, коммит, push, пул-реквест). Не запускай доставку без просьбы пользователя.
18
18
  - `wait`: покажи статус и блокер, спроси пользователя, что делать.
19
19
  - `done`: сообщи об окончании.
@@ -25,3 +25,7 @@
25
25
  ## Внешнее влияние
26
26
 
27
27
  <!-- затронутые потребители, контракты, зависимости; **BREAKING** для несовместимых -->
28
+
29
+ ## Расхождения с запросом
30
+
31
+ <!-- отступление от запроса или evidence: что говорит источник, решение, причина; «—», если расхождений нет -->
@@ -0,0 +1,45 @@
1
+ import path from 'node:path';
2
+ import { appendLogEntry, formatLogEntry, LOG_TAGS, logFile, parseLog } from '../../core/log.js';
3
+ import { exists, readText, toPosix } from '../../core/paths.js';
4
+ import { changeContext } from '../context.js';
5
+ import { emit, emitError } from '../output.js';
6
+ export function registerLog(program) {
7
+ const log = program.command('log').description('Журнал изменения: тегированные однострочные записи для следующих ролей и distiller');
8
+ log
9
+ .command('add <text>')
10
+ .description(`Добавить запись; теги: ${LOG_TAGS.join(', ')}`)
11
+ .requiredOption('--tag <tag>', 'CODE (факт о коде), RULE (правило), TASK (событие), HUMAN (предпочтение)')
12
+ .option('--change <id>', 'идентификатор изменения')
13
+ .option('--by <who>', 'автор; по умолчанию роль и запуск выданного пакета, иначе пользователь')
14
+ .action((text, opts, cmd) => {
15
+ const g = cmd.optsWithGlobals();
16
+ try {
17
+ const ctx = changeContext(g.cwd, opts.change);
18
+ const res = appendLogEntry(ctx.dir, ctx.change, { tag: opts.tag, text, ...(opts.by ? { by: opts.by } : {}) });
19
+ emit(g, { file: toPosix(path.relative(ctx.root, res.file)), line: res.line, entry: res.entry }, (d) => `${d.file}: ${d.line}`);
20
+ }
21
+ catch (e) {
22
+ emitError(g, e);
23
+ process.exitCode = 1;
24
+ }
25
+ });
26
+ log
27
+ .command('show')
28
+ .description('Показать записи журнала')
29
+ .option('--change <id>', 'идентификатор изменения')
30
+ .option('--tag <tag>', 'только записи с этим тегом')
31
+ .action((opts, cmd) => {
32
+ const g = cmd.optsWithGlobals();
33
+ try {
34
+ const ctx = changeContext(g.cwd, opts.change);
35
+ const file = logFile(ctx.dir);
36
+ const entries = (exists(file) ? parseLog(readText(file)) : []).filter((e) => !opts.tag || e.tag === opts.tag.toUpperCase());
37
+ emit(g, { file: toPosix(path.relative(ctx.root, file)), entries }, (d) => (d.entries.length ? d.entries.map(formatLogEntry).join('\n') : 'Журнал пуст'));
38
+ }
39
+ catch (e) {
40
+ emitError(g, e);
41
+ process.exitCode = 1;
42
+ }
43
+ });
44
+ }
45
+ //# sourceMappingURL=log.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"log.js","sourceRoot":"","sources":["../../../src/cli/commands/log.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,12 @@
1
1
  import fs from 'node:fs';
2
2
  import path from 'node:path';
3
- import { nextRunId, saveChange } from '../../core/change.js';
3
+ import { saveChange } from '../../core/change.js';
4
4
  import { GATES } from '../../core/config.js';
5
5
  import { SboxError } from '../../core/errors.js';
6
6
  import { buildPacket } from '../../core/packet.js';
7
7
  import { exists, readText, toPosix, writeText } from '../../core/paths.js';
8
8
  import { approveGate, isRoleName, nextStep, rejectGate, ROLE_BY_PHASE } from '../../core/phases.js';
9
- import { applyReport } from '../../core/report.js';
9
+ import { applyReport, appliedOutcome, resolveReportFile } from '../../core/report.js';
10
10
  import { artifactStates, loadWorkflow } from '../../core/schema.js';
11
11
  import { changeContext } from '../context.js';
12
12
  import { emit, emitError, formatDiagnostics } from '../output.js';
@@ -31,7 +31,8 @@ export function registerProtocol(program) {
31
31
  const packetFile = path.join(ctx.dir, 'runs', packet.runId, 'packet.json');
32
32
  writeText(packetFile, JSON.stringify(packet, null, 2));
33
33
  const rel = toPosix(path.relative(ctx.root, packetFile));
34
- const brief = { kind: 'role', role: step.role, phase: step.phase, runId: packet.runId, packetFile: rel, resultFile: packet.resultFile, objective: packet.objective, feedback: packet.feedback, report: packet.commands.report };
34
+ // Отчёт сдаёт оркестратор или раннер, не роль: команда не входит в пакет и не требует --file (docs/design.md, раздел 12).
35
+ const brief = { kind: 'role', role: step.role, phase: step.phase, runId: packet.runId, packetFile: rel, resultFile: packet.resultFile, objective: packet.objective, feedback: packet.feedback, report: `sbox report --change ${ctx.change.id} --role ${step.role} --json` };
35
36
  if (opts.brief) {
36
37
  emit(g, brief, (d) => [`Шаг: роль ${d.role}, фаза ${d.phase}`, `Пакет: ${d.packetFile}`, `Цель: ${d.objective}`, ...(d.feedback ? [`Фидбэк: ${d.feedback.slice(0, 300)}`] : []), `Отчёт: ${d.report}`].join('\n'));
37
38
  return;
@@ -42,8 +43,12 @@ export function registerProtocol(program) {
42
43
  if (step.kind === 'gate') {
43
44
  const states = artifactStates(loadWorkflow(ctx.root), ctx.change, ctx.dir);
44
45
  const review = states.filter((s) => s.existing.length > 0).map((s) => ({ id: s.id, files: s.existing.map((f) => toPosix(path.relative(ctx.root, f))) }));
45
- const questions = pendingQuestions(ctx.change);
46
- emit(g, { kind: 'gate', gate: step.gate, phase: step.phase, review, questions, approve: `sbox approve ${step.gate} --change ${ctx.change.id} --by <user>`, reject: `sbox reject ${step.gate} --change ${ctx.change.id} --comment "<замечание>"` }, (d) => [`Гейт ${d.gate}: нужно решение человека.`, 'Посмотрите:', ...d.review.flatMap((r) => r.files.map((f) => ` ${f}`)), ...(d.questions.length ? ['Вопросы:', ...d.questions.map((q) => ` ${q}`)] : []), `Утвердить: ${d.approve}`, `Отклонить: ${d.reject}`].join('\n'));
46
+ // Вопросы планировщика и расхождения между запросом, evidence и proposal человек видит до утверждения (docs/design.md, раздел 5).
47
+ const questions = ctx.change.questions.map((q) => ({ id: q.id, priority: q.priority, text: q.text }));
48
+ const conflicts = ctx.change.conflicts;
49
+ const approve = `sbox approve ${step.gate} --change ${ctx.change.id} --by <user>`;
50
+ const answer = questions.length ? `${approve} --answer ${questions.map((q) => `${q.id}=<вариант>`).join(' ')}` : null;
51
+ emit(g, { kind: 'gate', gate: step.gate, phase: step.phase, review, questions, conflicts, approve, answer, reject: `sbox reject ${step.gate} --change ${ctx.change.id} --comment "<замечание>"` }, (d) => [`Гейт ${d.gate}: нужно решение человека.`, 'Посмотрите:', ...d.review.flatMap((r) => r.files.map((f) => ` ${f}`)), ...(d.questions.length ? ['Вопросы:', ...d.questions.map((q) => ` ${q.id} (${q.priority}): ${q.text}`)] : []), ...(d.conflicts.length ? ['Расхождения:', ...d.conflicts.map(formatConflict)] : []), `Утвердить: ${d.approve}`, ...(d.answer ? [`С ответами: ${d.answer}`] : []), `Отклонить: ${d.reject}`].join('\n'));
47
52
  return;
48
53
  }
49
54
  if (step.kind === 'deliver') {
@@ -79,16 +84,20 @@ export function registerProtocol(program) {
79
84
  throw new SboxError('BAD_ROLE', `Неизвестная роль ${opts.role}`);
80
85
  const step = nextStep(ctx.change, ctx.config);
81
86
  const phase = opts.phase ?? (step.kind === 'role' ? step.phase : ctx.change.phase);
87
+ const resolved = resolveReportFile(ctx.dir, ctx.change, opts.role, opts.file);
88
+ if (resolved.applied) {
89
+ // Повторный отчёт с уже принятым ответом: запуск не создаётся, состояние не меняется.
90
+ emitReport(g, ctx.change, appliedOutcome({ root: ctx.root, config: ctx.config, dir: ctx.dir, change: ctx.change, run: resolved.applied }));
91
+ return;
92
+ }
82
93
  const expected = ROLE_BY_PHASE[phase];
83
94
  if (expected && expected !== opts.role)
84
95
  throw new SboxError('ROLE_MISMATCH', `Фаза ${phase} ожидает роль ${expected}, а не ${opts.role}.`);
85
- const file = opts.file ? path.resolve(opts.file) : path.join(ctx.dir, 'runs', nextRunId(ctx.change), 'result.md');
86
- if (!exists(file))
87
- throw new SboxError('NO_FILE', `Нет файла ${file}`, 'Роль пишет ответ в resultFile из пакета; укажите --file, если ответ лежит в другом месте.');
88
- const outcome = await applyReport({ ...ctx, role: opts.role, phase, markdown: readText(file), adapter: ctx.adapter, receipt: { runner: opts.runner, model: opts.model, session: opts.session } });
89
- const rejected = outcome.diagnostics.some((d) => d.severity === 'error');
90
- emit(g, { runId: outcome.runId, status: outcome.result.status, phaseCompleted: outcome.phaseCompleted, accepted: !rejected, diagnostics: outcome.diagnostics, change: { phase: ctx.change.phase, status: ctx.change.status, blocker: ctx.change.blocker }, next: outcome.next }, (d) => [`Запуск ${d.runId}: статус роли «${d.status}», ${d.accepted ? (d.phaseCompleted ? 'фаза завершена' : 'фаза не завершена') : 'отчёт не принят'}`, formatDiagnostics(d.diagnostics), `Изменение: фаза ${d.change.phase}, статус ${d.change.status}`, `Дальше: ${JSON.stringify(d.next)}`].join('\n'));
91
- if (rejected)
96
+ if (!exists(resolved.file))
97
+ throw new SboxError('NO_FILE', `Нет файла ${resolved.file}`, 'Роль пишет ответ в resultFile из пакета; укажите --file, если ответ лежит в другом месте.');
98
+ const outcome = await applyReport({ ...ctx, role: opts.role, phase, markdown: readText(resolved.file), adapter: ctx.adapter, receipt: { runner: opts.runner, model: opts.model, session: opts.session } });
99
+ emitReport(g, ctx.change, outcome);
100
+ if (!outcome.accepted)
92
101
  process.exitCode = 1;
93
102
  }
94
103
  catch (e) {
@@ -143,9 +152,14 @@ function assertGate(gate) {
143
152
  if (!GATES.includes(gate))
144
153
  throw new SboxError('BAD_GATE', `Неизвестный гейт ${gate}; допустимы: ${GATES.join(', ')}`);
145
154
  }
146
- function pendingQuestions(change) {
147
- // Вопросы planner лежат в его последнем ответе; для человека их достаточно показать ссылкой на design.md.
148
- return [];
155
+ /** Ответ команды report: одинаков для нового и повторного отчёта; summary показывается человеку дословно. */
156
+ function emitReport(g, change, o) {
157
+ emit(g, { runId: o.runId, status: o.result.status, phaseCompleted: o.phaseCompleted, accepted: o.accepted, alreadyApplied: o.alreadyApplied ?? false, summary: o.summary, diagnostics: o.diagnostics, change: { phase: change.phase, status: change.status, blocker: change.blocker }, next: o.next }, (d) => [`Запуск ${d.runId}: статус роли «${d.status}», ${d.accepted ? (d.phaseCompleted ? 'фаза завершена' : 'фаза не завершена') : 'отчёт не принят'}${d.alreadyApplied ? ' (ответ уже был принят)' : ''}`, d.summary, formatDiagnostics(d.diagnostics), `Изменение: фаза ${d.change.phase}, статус ${d.change.status}`, `Дальше: ${JSON.stringify(d.next)}`].join('\n'));
158
+ }
159
+ function formatConflict(c) {
160
+ const head = ` ${c.id} [${c.kind}, ${c.subject}] ${c.text}`;
161
+ const tail = [c.evidence ? `факты: ${c.evidence}` : '', c.decision ? `решение: ${c.decision}` : '', c.reason ? `причина: ${c.reason}` : ''].filter(Boolean).join('; ');
162
+ return tail ? `${head} (${tail})` : head;
149
163
  }
150
164
  export { fs };
151
165
  //# sourceMappingURL=protocol.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"protocol.js","sourceRoot":"","sources":["../../../src/cli/commands/protocol.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"protocol.js","sourceRoot":"","sources":["../../../src/cli/commands/protocol.ts"],"names":[],"mappings":"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"}