@spec-box/sdd 0.9.0 → 0.10.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 (51) hide show
  1. package/README.md +23 -1
  2. package/assets/adapters/openspec/instructions.md +2 -2
  3. package/assets/adapters/spec-box/instructions.md +1 -1
  4. package/assets/project/overview.md +1 -1
  5. package/assets/prompts/fill-project-docs.md +1 -1
  6. package/assets/roles/researcher.md +2 -2
  7. package/assets/schema/default.yaml +2 -2
  8. package/assets/skills/sbox-contract.md +23 -0
  9. package/bin/sbox-contract.js +5 -0
  10. package/dist/adapters/host/index.js +1 -1
  11. package/dist/adapters/host/index.js.map +1 -1
  12. package/dist/adapters/spec/openspec/index.js +15 -1
  13. package/dist/adapters/spec/openspec/index.js.map +1 -1
  14. package/dist/adapters/spec/openspec/parser.js +1 -1
  15. package/dist/adapters/spec/openspec/parser.js.map +1 -1
  16. package/dist/adapters/spec/spec-box/delta.js +1 -1
  17. package/dist/adapters/spec/spec-box/delta.js.map +1 -1
  18. package/dist/adapters/spec/spec-box/index.js +13 -1
  19. package/dist/adapters/spec/spec-box/index.js.map +1 -1
  20. package/dist/adapters/spec/spec-box/yaml.js +1 -1
  21. package/dist/adapters/spec/spec-box/yaml.js.map +1 -1
  22. package/dist/cli/commands/archive.js +28 -0
  23. package/dist/cli/commands/archive.js.map +1 -0
  24. package/dist/cli/context.js +1 -1
  25. package/dist/cli/context.js.map +1 -1
  26. package/dist/cli/main.js +2 -2
  27. package/dist/cli/main.js.map +1 -1
  28. package/dist/{core/spec-adapter.js → contract/adapter.js} +1 -1
  29. package/dist/contract/adapter.js.map +1 -0
  30. package/dist/contract/cli.js +95 -0
  31. package/dist/contract/cli.js.map +1 -0
  32. package/dist/contract/config.js +13 -0
  33. package/dist/contract/config.js.map +1 -0
  34. package/dist/contract/context.js +60 -0
  35. package/dist/contract/context.js.map +1 -0
  36. package/dist/{core/spec-model.js → contract/model.js} +1 -1
  37. package/dist/contract/model.js.map +1 -0
  38. package/dist/contract/service.js +115 -0
  39. package/dist/contract/service.js.map +1 -0
  40. package/dist/core/archive.js +15 -42
  41. package/dist/core/archive.js.map +1 -1
  42. package/dist/core/config.js +2 -11
  43. package/dist/core/config.js.map +1 -1
  44. package/dist/core/packet.js +4 -2
  45. package/dist/core/packet.js.map +1 -1
  46. package/docs/design.md +31 -1
  47. package/package.json +3 -2
  48. package/dist/cli/commands/spec.js +0 -84
  49. package/dist/cli/commands/spec.js.map +0 -1
  50. package/dist/core/spec-adapter.js.map +0 -1
  51. package/dist/core/spec-model.js.map +0 -1
package/docs/design.md CHANGED
@@ -776,7 +776,7 @@ interface TestReportAdapter {
776
776
  | Артефакты | `instructions <artifact>`, `validate`, `status`, `coverage`, `changeset` | Инструкция для артефакта, проверка изменения, состояние в JSON (с `revision`, `settled`, `active_run` для внешних вызывающих), покрытие сценариев тестами, запечатанный change-set и сверка дайджеста |
777
777
  | Тесты | `tests check` | Сверка дифа с защищённым списком, запуск тестов из `coverage.yaml` с чтением отчётов |
778
778
  | Решения | `decision promote`, `decision list` | Повышение решения до правила, список действующих правил по области |
779
- | Спецификации | `spec list`, `spec show`, `spec diff`, `spec sync`, `archive` | Чтение истины, сравнение дельты с истиной, выгрузка, применение дельт |
779
+ | Контракт поведения | Отдельный `sbox-contract`: `index`, `show`, `search`, `diff`, `validate`, `apply`; `sbox archive` остаётся в оркестраторе | Чтение истины, проверка и применение дельт; раздел 17 |
780
780
  | События | `events poll`, `events publish` | Опрос и публикация событий координации |
781
781
  | Доставка | `deliver [--check] [--keep-draft]`, `gates poll` | Чеклист готовности и доставка: intent, архив, коммит с ключом, push, пул-реквест; опрос гейтов в комментариях пул-реквеста |
782
782
  | Среда | `ci install --target github \| docker` | Шаблоны workflows GitHub Actions (запуск @spec-box/sdd и тесты с JSON-отчётом) и Dockerfile |
@@ -874,3 +874,33 @@ Markdown остаётся источником истины. Кеш хранит
874
874
  summary и read_when пишет автор или агент: CLI не генерирует смысловые описания. При обновлении текста автор пересматривает метаданные. revision — версия содержимого, а не свидетельство истинности; автоматическое определение устаревания по коду, семантический поиск и дистилляция остаются расширениями этапа 6.
875
875
 
876
876
  Все команды поддерживают `--json`: результат `{ok:true,data:...}`, ошибка команды `{ok:false,error:{code,message}}`; validate возвращает диагностики в data и код выхода 1 при ошибках. Скилл `assets/skills/sbox-wiki.md` устанавливается обоим хостам и подключается всем ролям; право записи ограничивается полномочиями роли. Wiki-шаблон хранится в `assets/project/wiki.README.md`.
877
+
878
+ ## 17. Отдельный инструмент контракта поведения (реализовано)
879
+
880
+ `sbox-contract` — самостоятельный CLI в том же npm-пакете. Он управляет ожидаемым поведением продукта: capability, требованиями, сценариями и их дельтами. Модели, контракт адаптера, схема конфигурации и сервис применения находятся в `src/contract`; адаптеры форматов остаются в `src/adapters/spec`. Они зависят только от секции `spec`, без конфигурации раннеров, состояния задач и гейтов.
881
+
882
+ ### Границы ответственности
883
+
884
+ `sbox-contract` читает и ищет требования, проверяет структуру и дельты, показывает будущее состояние и применяет изменения. `sbox` управляет ролями, согласованиями, артефактами задачи, архивом, коммитом и PR. `sbox archive` и `sbox deliver` вызывают общий `ContractService` напрямую, без дочернего CLI. Сервис обеспечивает снимок и откат файлов спецификаций при ошибке применения или завершающего действия оркестратора.
885
+
886
+ Группа `sbox spec` удалена. Использования в инструкциях, пакетах ролей и документации переведены на `sbox-contract index/show/diff`. Для материалов уже инициализированных проектов нужно повторить `sbox host install --target claude|codex`. Скилл `assets/skills/sbox-contract.md` общий для обоих хостов. Роли SDD не применяют истину самостоятельно: доступность команды не меняет полномочия роли.
887
+
888
+ ### Конфигурация и команды
889
+
890
+ Корень ищется вверх от --cwd по `.sbox/config.yaml`, `.sbox-contract.yaml`, `.tms.json` или `openspec/specs`. В найденном корне сначала читается секция spec из конфига SDD, иначе из автономного конфига; остальные настройки SDD не нужны. Если конфига нет, формат определяется по файловой структуре. При наличии обоих форматов требуется --format. Без маркеров используется --cwd с spec-box и `specs/**/*.spec-box.yml`. Явный --format переопределяет выбор адаптера.
891
+
892
+ - `init --format spec-box|openspec` создаёт `.sbox-contract.yaml` и папку истины. Существующий конфиг не перезаписывается; в проекте SDD используется его конфиг.
893
+ - `index` возвращает capability с назначением, источником и количеством требований и сценариев; `show <id>` — полную модель, включая нормативный текст.
894
+ - `search <query> --limit N` ищет лексически без учёта регистра в названиях и тексте capability, требований и сценариев. Возвращает сущность, id, источник, текст и оценку совпадения. Лимит по умолчанию 10, допустимо 1–100.
895
+ - `instructions` выдаёт инструкцию формата из assets; `delta init <dir>` создаёт новый каталог дельт и README с этой инструкцией. Существующий каталог не изменяется.
896
+ - `validate [--delta dir]` проверяет истину или истину вместе с дельтой.
897
+ - `diff --delta dir [--preview]` возвращает исходные затронутые capability и операции дельты с требованиями/сценариями. --preview добавляет будущее состояние без записи файлов; отсутствующая в нём capability удаляется. Исходный формат сохраняется адаптером.
898
+ - `apply --delta dir --check` проверяет дельту и структурное будущее состояние, показывает целевые пути и revision. `apply --delta dir --if-match revision` выполняет запись. CLI требует revision; её SHA-256 учитывает модель и байты текущей истины, дельт и целевых файлов. Изменения после проверки приводят к CONTRACT_CONFLICT. Это защита интервала между проверкой и применением, а не сохранённая базовая версия на момент создания дельты.
899
+
900
+ --delta указывает непосредственно на каталог файлов дельт: `*.yml|*.yaml` для spec-box, `<capability>/spec.md` для OpenSpec. Пути относительно --cwd; файл состояния изменения не нужен. Отсутствующая или пустая дельта — ошибка CLI. Все команды имеют --json: `{ok:true,data:...}` или `{ok:false,error:{code,message}}`. Диагностики validate/diff/apply --check возвращаются в data, при наличии ошибок код выхода 1.
901
+
902
+ ### Применение
903
+
904
+ Применение сериализуется файлом `.sbox-contract.lock` в корне проекта с PID владельца. При аварийном завершении lock остаётся: после проверки завершения процесса его можно удалить. Сервис повторно читает состояние под блокировкой, проверяет revision и валидацию, снимает копию затрагиваемых файлов, применяет и проверяет результат. При исключении файлы восстанавливаются, новые удаляются. Запись через симлинки и за пределы корня проекта запрещена. Эта блокировка общая для standalone CLI и доставки SDD; внешние редакторы её не соблюдают. Это откат при обработанной ошибке, не crash-safe транзакция файловой системы.
905
+
906
+ В текущую версию не входят межформатная конвертация, семантический поиск, автоматический merge конкурирующих дельт и выгрузка во внешнюю систему. Архивация задачи и принятие решения о готовности остаются в SDD.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@spec-box/sdd",
3
- "version": "0.9.0",
3
+ "version": "0.10.0",
4
4
  "description": "@spec-box/sdd: автономная реализация продуктовых фич ИИ-агентами",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -15,7 +15,8 @@
15
15
  "bin": {
16
16
  "sbox": "bin/sbox.js",
17
17
  "sbox-browser": "bin/sbox-browser.js",
18
- "sbox-wiki": "bin/sbox-wiki.js"
18
+ "sbox-wiki": "bin/sbox-wiki.js",
19
+ "sbox-contract": "bin/sbox-contract.js"
19
20
  },
20
21
  "files": [
21
22
  "bin",
@@ -1,84 +0,0 @@
1
- import path from 'node:path';
2
- import { archiveChange } from '../../core/archive.js';
3
- import { SboxError } from '../../core/errors.js';
4
- import { changeContext, projectContext } from '../context.js';
5
- import { emit, emitError, formatDiagnostics } from '../output.js';
6
- export function registerSpec(program) {
7
- const spec = program.command('spec').description('Истина спецификаций через адаптер');
8
- spec
9
- .command('list')
10
- .description('Список capability')
11
- .action(async (_opts, cmd) => {
12
- const g = cmd.optsWithGlobals();
13
- try {
14
- const ctx = projectContext(g.cwd);
15
- const truth = await ctx.adapter.readTruth();
16
- const items = truth.map((c) => ({ id: c.id, title: c.title, requirements: c.requirements.length, scenarios: c.requirements.reduce((n, r) => n + r.scenarios.length, 0), source: c.source }));
17
- emit(g, { adapter: ctx.adapter.name, capabilities: items }, (d) => d.capabilities.map((c) => `${c.id}\t${c.title}\t${c.requirements} групп, ${c.scenarios} утверждений\t${c.source ?? ''}`).join('\n') || 'Спецификаций нет.');
18
- }
19
- catch (e) {
20
- emitError(g, e);
21
- process.exitCode = 1;
22
- }
23
- });
24
- spec
25
- .command('show <id>')
26
- .description('Capability целиком')
27
- .action(async (id, _opts, cmd) => {
28
- const g = cmd.optsWithGlobals();
29
- try {
30
- const ctx = projectContext(g.cwd);
31
- const cap = (await ctx.adapter.readTruth()).find((c) => c.id === id);
32
- if (!cap)
33
- throw new SboxError('NO_CAPABILITY', `Capability ${id} не найдена`, 'Список: `sbox spec list`.');
34
- emit(g, { capability: cap }, (d) => [`# ${d.capability.title} (${d.capability.id})`, d.capability.purpose ?? '', ...d.capability.requirements.flatMap((r) => [`## ${r.title}`, ...r.scenarios.map((s) => `- ${s.title}${s.description ? `\n ${s.description.replace(/\n/g, '\n ')}` : ''}`)])].join('\n'));
35
- }
36
- catch (e) {
37
- emitError(g, e);
38
- process.exitCode = 1;
39
- }
40
- });
41
- spec
42
- .command('diff')
43
- .description('Дельты изменения относительно истины')
44
- .option('--change <id>')
45
- .action(async (opts, cmd) => {
46
- const g = cmd.optsWithGlobals();
47
- try {
48
- const ctx = changeContext(g.cwd, opts.change);
49
- const truth = await ctx.adapter.readTruth();
50
- const deltas = await ctx.adapter.readDelta(path.join(ctx.dir, 'specs'));
51
- const diagnostics = ctx.adapter.validate(truth, deltas);
52
- emit(g, { deltas, diagnostics }, (d) => [
53
- ...d.deltas.map((delta) => [`# ${delta.capabilityId}${delta.isNew ? ' (новая)' : ''} — ${delta.source}`, ...delta.ops.map((op) => op.op === 'add-requirement' ? `+ ${op.requirement.title} (${op.requirement.scenarios.length})` : op.op === 'modify-requirement' ? `~ ${op.requirement.title} (${op.requirement.scenarios.length})` : op.op === 'remove-requirement' ? `- ${op.requirementTitle}${op.scenarios ? ` [${op.scenarios.length} утв.]` : ''}` : `→ ${op.from} ⇒ ${op.to}`)].join('\n')),
54
- '',
55
- formatDiagnostics(d.diagnostics),
56
- ].join('\n'));
57
- }
58
- catch (e) {
59
- emitError(g, e);
60
- process.exitCode = 1;
61
- }
62
- });
63
- program
64
- .command('archive')
65
- .description('Применить дельты к истине и перенести изменение в архив')
66
- .option('--change <id>')
67
- .option('--force', 'применить несмотря на ошибки валидации')
68
- .action(async (opts, cmd) => {
69
- const g = cmd.optsWithGlobals();
70
- try {
71
- const ctx = changeContext(g.cwd, opts.change);
72
- if (ctx.change.phase !== 'deliver' && !opts.force) {
73
- throw new SboxError('NOT_DELIVERABLE', `Изменение в фазе ${ctx.change.phase}, а не deliver.`, 'Доведите изменение до фазы deliver или используйте --force.');
74
- }
75
- const result = await archiveChange(ctx.root, ctx.config, ctx.adapter, ctx.dir, ctx.change, { force: opts.force });
76
- emit(g, { archivedTo: path.relative(ctx.root, result.archivedTo), appliedFiles: result.appliedFiles, diagnostics: result.diagnostics }, (d) => [`Архив: ${d.archivedTo}`, ...d.appliedFiles.map((f) => ` ~ ${f}`), formatDiagnostics(d.diagnostics)].join('\n'));
77
- }
78
- catch (e) {
79
- emitError(g, e);
80
- process.exitCode = 1;
81
- }
82
- });
83
- }
84
- //# sourceMappingURL=spec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"spec.js","sourceRoot":"","sources":["../../../src/cli/commands/spec.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"spec-adapter.js","sourceRoot":"","sources":["../../src/core/spec-adapter.ts"],"names":[],"mappings":"AA2BA,MAAM,QAAQ,GAAG,IAAI,GAAG,EAA8B,CAAC;AAEvD,MAAM,UAAU,mBAAmB,CAAC,IAAY,EAAE,OAA2B;IAC3E,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AAC9B,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,IAAY,EAAE,MAAc;IAC5D,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAClD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,yBAAyB,MAAM,CAAC,IAAI,CAAC,OAAO,sBAAsB,CAAC,CAAC;IACtF,CAAC;IACD,OAAO,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAC/B,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"spec-model.js","sourceRoot":"","sources":["../../src/core/spec-model.ts"],"names":[],"mappings":"AAqDA,MAAM,UAAU,OAAO,CAAC,IAAY;IAClC,OAAO,IAAI;SACR,WAAW,EAAE;SACb,OAAO,CAAC,kBAAkB,EAAE,GAAG,CAAC;SAChC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;SACvB,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,MAAM,CAAC;AAC5B,CAAC"}