@sdd-method/author-cli 0.7.0 → 0.9.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 (100) hide show
  1. package/dist/author-program.js +2 -1
  2. package/dist/lib/agent-harness.js +2 -2
  3. package/dist/lib/behaviour-store/archive.js +28 -1
  4. package/dist/lib/behaviour-store/schema.js +85 -0
  5. package/dist/lib/briefing/index.js +1 -1
  6. package/dist/lib/briefing/render.js +1 -1
  7. package/dist/lib/briefing/variables.js +1 -1
  8. package/dist/lib/catalogue/application-archetype/vocabulary.js +2 -2
  9. package/dist/lib/catalogue/archetype/maps/android.yaml +2 -2
  10. package/dist/lib/catalogue/archetype/maps/swiftui.yaml +2 -2
  11. package/dist/lib/catalogue/archetype/maps/uikit.yaml +2 -2
  12. package/dist/lib/catalogue/archetype/maps/web-generic.yaml +2 -2
  13. package/dist/lib/catalogue/archetype/openui-archetype-vocabulary.yaml +3 -3
  14. package/dist/lib/catalogue/archetype/resolver.js +4 -4
  15. package/dist/lib/catalogue/archetype/wireframe.js +1 -1
  16. package/dist/lib/catalogue/build.js +36 -33
  17. package/dist/lib/catalogue/builders/adr-supersedes.js +3 -3
  18. package/dist/lib/catalogue/builders/adrs.js +3 -3
  19. package/dist/lib/catalogue/builders/c4-containers.js +2 -2
  20. package/dist/lib/catalogue/builders/c4-entity-rollups.js +1 -1
  21. package/dist/lib/catalogue/builders/c4-external-systems.js +2 -2
  22. package/dist/lib/catalogue/builders/c4-systems.js +1 -1
  23. package/dist/lib/catalogue/builders/capabilities.js +1 -1
  24. package/dist/lib/catalogue/builders/capability-domain-model.js +1 -1
  25. package/dist/lib/catalogue/builders/capability-spec-walker.js +2 -2
  26. package/dist/lib/catalogue/builders/capability-spec.js +4 -4
  27. package/dist/lib/catalogue/builders/contracts.js +3 -3
  28. package/dist/lib/catalogue/builders/data-store-mapping.js +2 -2
  29. package/dist/lib/catalogue/builders/domain-models.js +2 -2
  30. package/dist/lib/catalogue/builders/domains.js +3 -3
  31. package/dist/lib/catalogue/builders/entities-manifest.js +8 -8
  32. package/dist/lib/catalogue/builders/entities-mermaid.js +4 -4
  33. package/dist/lib/catalogue/builders/entity-persistence.js +1 -1
  34. package/dist/lib/catalogue/builders/entity-slug.js +3 -3
  35. package/dist/lib/catalogue/builders/event-catalog-walker.js +6 -6
  36. package/dist/lib/catalogue/builders/event-edges.js +6 -6
  37. package/dist/lib/catalogue/builders/events.js +3 -3
  38. package/dist/lib/catalogue/builders/evidence-class.js +1 -1
  39. package/dist/lib/catalogue/builders/feature-domain-model.js +1 -1
  40. package/dist/lib/catalogue/builders/feature-grounding-walker.js +2 -2
  41. package/dist/lib/catalogue/builders/feature-grounding.js +5 -5
  42. package/dist/lib/catalogue/builders/feature-subscription-channels.js +3 -3
  43. package/dist/lib/catalogue/builders/features.js +1 -1
  44. package/dist/lib/catalogue/builders/glossary-xref.js +4 -4
  45. package/dist/lib/catalogue/builders/integrations.js +4 -4
  46. package/dist/lib/catalogue/builders/persona-c4system.js +1 -1
  47. package/dist/lib/catalogue/builders/product-edges.js +1 -1
  48. package/dist/lib/catalogue/builders/product-platform-dependencies.js +2 -2
  49. package/dist/lib/catalogue/builders/products.js +5 -5
  50. package/dist/lib/catalogue/builders/repo-edges.js +12 -12
  51. package/dist/lib/catalogue/builders/repositories.js +11 -7
  52. package/dist/lib/catalogue/builders/requirements.js +110 -11
  53. package/dist/lib/catalogue/builders/screen-tree.js +6 -6
  54. package/dist/lib/catalogue/builders/screens.js +18 -18
  55. package/dist/lib/catalogue/builders/service-contract-consumes.js +1 -1
  56. package/dist/lib/catalogue/builders/service-entity-tables.js +3 -3
  57. package/dist/lib/catalogue/builders/services.js +5 -5
  58. package/dist/lib/catalogue/builders/system-external-dependency.js +2 -2
  59. package/dist/lib/catalogue/canonical-schema.yaml +138 -2
  60. package/dist/lib/catalogue/coverage-render.js +15 -15
  61. package/dist/lib/catalogue/csv-writer.js +1 -1
  62. package/dist/lib/catalogue/feature-grounding-aliases-loader.js +1 -1
  63. package/dist/lib/catalogue/findings.js +1 -1
  64. package/dist/lib/catalogue/fk-validator.js +2 -2
  65. package/dist/lib/catalogue/manifest-loader.js +3 -3
  66. package/dist/lib/catalogue/rubric-coverage-map.yaml +28 -0
  67. package/dist/lib/catalogue/schema-compat.js +2 -2
  68. package/dist/lib/catalogue/schema-loader.js +1 -1
  69. package/dist/lib/catalogue/screen-validation-loader.js +2 -2
  70. package/dist/lib/catalogue/service-architecture-parser.js +1 -1
  71. package/dist/lib/catalogue/traceability-loader.js +6 -4
  72. package/dist/lib/conformance/finding.js +1 -1
  73. package/dist/lib/conformance/index.js +5 -5
  74. package/dist/lib/generate-briefing/index.js +2 -2
  75. package/dist/lib/metamodel/tql-subset-parser.js +280 -0
  76. package/dist/lib/pack/schema.js +2 -2
  77. package/dist/lib/pack/seed.js +2 -2
  78. package/dist/lib/pack/validate.js +1 -1
  79. package/dist/lib/plan/read-sdd.js +1 -1
  80. package/dist/lib/repo-kind.js +4 -12
  81. package/dist/lib/scaffold/archetype-behaviour.js +173 -0
  82. package/dist/lib/scaffold/behaviour-store.js +60 -0
  83. package/dist/lib/scaffold/domain.js +24 -6
  84. package/dist/lib/scaffold/registry.js +1 -1
  85. package/dist/lib/sync/briefing-merge.js +2 -2
  86. package/dist/lib/sync/bundle-cache.js +4 -4
  87. package/dist/lib/sync/yaml-block-merge.js +1 -1
  88. package/dist/lib/validate/archetype-citations.js +169 -0
  89. package/dist/lib/validate/behaviour-store.js +161 -6
  90. package/dist/lib/validate/dispatch.js +8 -1
  91. package/dist/maintain-version.json +2 -2
  92. package/dist/verbs/conformance.js +3 -3
  93. package/dist/verbs/list.js +1 -1
  94. package/dist/verbs/render.js +1 -1
  95. package/dist/verbs/scaffold.js +36 -4
  96. package/dist/verify-program.js +2 -2
  97. package/dist/verify-version.json +2 -2
  98. package/package.json +2 -2
  99. package/scripts/validate-app-dependencies.sh +1 -1
  100. package/scripts/validate-integration-docs.sh +1 -1
@@ -2,19 +2,21 @@ import { readFile } from "node:fs/promises";
2
2
  import { join } from "node:path";
3
3
  import { isMethodDomainArchetype, METHOD_DOMAIN_ARCHETYPES, scaffoldDomain, } from "../lib/scaffold/domain.js";
4
4
  import { resolveArchetype } from "../lib/scaffold/registry.js";
5
+ import { scaffoldBehaviourStore, storeScaffoldRefusal } from "../lib/scaffold/behaviour-store.js";
5
6
  import { resolvePathOption } from "./path-option.js";
6
7
  const DOMAIN_NAME = /^[a-z][a-z0-9-]*$/;
7
8
  export function registerScaffold(program) {
8
9
  const scaffold = program
9
10
  .command("scaffold")
10
- .description("Scaffold method-shaped artefacts into an existing SDD repo (ADR 0173)");
11
+ .description("Scaffold method-shaped artefacts into an existing SDD repo (M-ADR 0173)");
12
+ registerScaffoldBehaviourStore(scaffold);
11
13
  scaffold
12
14
  .command("domain <name>")
13
15
  .description("Scaffold a platform domain (docs/domains/<name>/) into a platform-root SDD. " +
14
16
  "Writes the generic domain shape; --archetype overlays starter content.")
15
17
  .option("--archetype <id>", `seed from a domain archetype: method tier (${METHOD_DOMAIN_ARCHETYPES.join(" | ")}) ` +
16
18
  "or a registry archetype from a consumed bundle (e.g. core/identity, " +
17
- "or bundle-qualified '<bundle>:<id>' — ADR 0176)")
19
+ "or bundle-qualified '<bundle>:<id>' — M-ADR 0176)")
18
20
  .option("--with-contracts", "include a contracts/ subfolder")
19
21
  .option("--target-repo <dir>", "platform-root SDD repo", resolvePathOption, process.cwd())
20
22
  .option("--dry-run", "report planned files without writing")
@@ -24,7 +26,7 @@ export function registerScaffold(program) {
24
26
  }
25
27
  const targetRepo = opts.targetRepo ?? process.cwd();
26
28
  await assertPlatformRoot(targetRepo);
27
- // Archetype resolution chain (ADR 0176 §4.4): method tier is
29
+ // Archetype resolution chain (M-ADR 0176 §4.4): method tier is
28
30
  // built in; anything else resolves against cached bundle
29
31
  // registries — with a helpful listing on miss.
30
32
  let registryArchetype;
@@ -44,7 +46,7 @@ export function registerScaffold(program) {
44
46
  `(archetype: ${label}${opts.withContracts ? ", +contracts" : ""})\n`);
45
47
  return;
46
48
  }
47
- const { filesWritten } = await scaffoldDomain({
49
+ const { filesWritten, behaviourSkipped } = await scaffoldDomain({
48
50
  name,
49
51
  targetRepo,
50
52
  ...(opts.archetype && isMethodDomainArchetype(opts.archetype)
@@ -56,12 +58,42 @@ export function registerScaffold(program) {
56
58
  if (registryArchetype) {
57
59
  process.stdout.write(`[INFO] archetype ${registryArchetype.bundleName}:${registryArchetype.id} ` +
58
60
  `(tier: ${registryArchetype.tier}) — seed files copied; the domain is adopter-owned from creation\n`);
61
+ process.stdout.write(behaviourSkipped
62
+ ? `[INFO] archetype behaviour not seeded: ${behaviourSkipped}\n`
63
+ : `[INFO] archetype behaviour seeded once as openspec/changes/seed-${name}-from-archetype, cited in docs/domains/${name}/archetype-citations.yaml: agree the change through the behaviour store\n`);
59
64
  }
60
65
  process.stdout.write(`[PASS] scaffolded domain '${name}' (${filesWritten.length} files):\n`);
61
66
  for (const f of filesWritten)
62
67
  process.stdout.write(` ${f}\n`);
63
68
  });
64
69
  }
70
+ function registerScaffoldBehaviourStore(scaffold) {
71
+ scaffold
72
+ .command("behaviour-store")
73
+ .description("Create this SDD's behaviour store at openspec/ (M-ADR 0221 §4.2): openspec/config.yaml from the method's " +
74
+ "template, selecting the sdd-change schema, the schema's copy at openspec/schemas/sdd-change/, and empty " +
75
+ "specs/, changes/archive/ and docs/agreements/. Create it when the SDD first drafts a proposed change, agrees a change or " +
76
+ "baselines behaviour; sync keeps the schema copy current afterwards.")
77
+ .option("--target-repo <dir>", "the SDD repo", resolvePathOption, process.cwd())
78
+ .option("--dry-run", "report the refusal or the planned store without writing")
79
+ .action(async (opts) => {
80
+ const targetRepo = opts.targetRepo ?? process.cwd();
81
+ const refusal = await storeScaffoldRefusal(targetRepo);
82
+ if (refusal !== null) {
83
+ process.stderr.write(`[FAIL] scaffold behaviour-store: ${refusal}\n`);
84
+ process.exit(1);
85
+ }
86
+ if (opts.dryRun === true) {
87
+ process.stdout.write("[DRY-RUN] would create openspec/ (config.yaml, schemas/sdd-change/, specs/, changes/archive/) and docs/agreements/\n");
88
+ return;
89
+ }
90
+ const { filesWritten, sddId } = await scaffoldBehaviourStore(targetRepo);
91
+ process.stdout.write(`[PASS] created the behaviour store (${filesWritten.length} files):\n`);
92
+ for (const f of filesWritten)
93
+ process.stdout.write(` ${f}\n`);
94
+ process.stdout.write(`[INFO] fill in openspec/config.yaml's context${sddId === null ? " (the SDD id, no sdd_id in .sdd/sdd-manifest.yaml)" : ""}: the code repositories beside this SDD and where they are checked out\n`);
95
+ });
96
+ }
65
97
  function fail(message) {
66
98
  process.stderr.write(`[FAIL] scaffold domain: ${message}\n`);
67
99
  process.exit(1);
@@ -109,11 +109,11 @@ export function registerVerifySurface(program) {
109
109
  registerList(program);
110
110
  const pack = program
111
111
  .command("pack")
112
- .description("Validate adopter-shipped context-pack seeds (ADR 0151) — read-only");
112
+ .description("Validate adopter-shipped context-pack seeds (M-ADR 0151) — read-only");
113
113
  registerPackValidate(pack);
114
114
  const catalogue = program
115
115
  .command("catalogue")
116
- .description("Validate and query per-SDD catalogues (ADR 0134) — read-only, never rebuilds");
116
+ .description("Validate and query per-SDD catalogues (M-ADR 0134) — read-only, never rebuilds");
117
117
  registerCatalogueValidate(catalogue);
118
118
  registerCatalogueImpact(catalogue);
119
119
  registerCatalogueBaselineCheck(catalogue);
@@ -1,4 +1,4 @@
1
1
  {
2
- "version": "2.2.0",
3
- "built_against_sdd_cli": "2.2.0"
2
+ "version": "2.4.0",
3
+ "built_against_sdd_cli": "2.4.0"
4
4
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@sdd-method/author-cli",
3
- "version": "0.7.0",
4
- "sddCliVersion": "2.2.0",
3
+ "version": "0.9.0",
4
+ "sddCliVersion": "2.4.0",
5
5
  "description": "Re-author one SDD's content — scaffold, plan, contracts, conformance, api-surface, snapshots, briefings, catalogue check — plus every read-only verify verb. Ships only the code those verbs reach; it cannot sync the baseline or rebuild the catalogues. Maintenance is in @sdd-method/maintain-cli, administration in @sdd-method/sdd-cli.",
6
6
  "license": "UNLICENSED",
7
7
  "type": "module",
@@ -149,7 +149,7 @@ fi
149
149
  APP_DEPS_FILE="$APP_ROOT/app-platform-dependencies.yaml"
150
150
 
151
151
  # TWO AUTHORING SOURCES, NOT ONE.
152
- # The catalogue builder does multi-source ingestion under the ADR 0157 parity
152
+ # The catalogue builder does multi-source ingestion under the M-ADR 0157 parity
153
153
  # principle: `app-platform-dependencies.yaml` AND every
154
154
  # `reverse-evidence/**/feature-grounding-evidence.yaml`'s platform_dependencies
155
155
  # block, merged by primary key with forward winning. They are equal-status
@@ -160,7 +160,7 @@ check_manifest() {
160
160
  ;;
161
161
  esac
162
162
 
163
- # Interaction patterns (ADR 0171) — optional fields, validated only when present.
163
+ # Interaction patterns (M-ADR 0171) — optional fields, validated only when present.
164
164
  # Existing manifests predate the field; absence is not a failure. Directionality
165
165
  # mismatch (pattern present but the matching capability flag is false) is a warning.
166
166
  local ingestion invocation