@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.
- package/dist/author-program.js +2 -1
- package/dist/lib/agent-harness.js +2 -2
- package/dist/lib/behaviour-store/archive.js +28 -1
- package/dist/lib/behaviour-store/schema.js +85 -0
- package/dist/lib/briefing/index.js +1 -1
- package/dist/lib/briefing/render.js +1 -1
- package/dist/lib/briefing/variables.js +1 -1
- package/dist/lib/catalogue/application-archetype/vocabulary.js +2 -2
- package/dist/lib/catalogue/archetype/maps/android.yaml +2 -2
- package/dist/lib/catalogue/archetype/maps/swiftui.yaml +2 -2
- package/dist/lib/catalogue/archetype/maps/uikit.yaml +2 -2
- package/dist/lib/catalogue/archetype/maps/web-generic.yaml +2 -2
- package/dist/lib/catalogue/archetype/openui-archetype-vocabulary.yaml +3 -3
- package/dist/lib/catalogue/archetype/resolver.js +4 -4
- package/dist/lib/catalogue/archetype/wireframe.js +1 -1
- package/dist/lib/catalogue/build.js +36 -33
- package/dist/lib/catalogue/builders/adr-supersedes.js +3 -3
- package/dist/lib/catalogue/builders/adrs.js +3 -3
- package/dist/lib/catalogue/builders/c4-containers.js +2 -2
- package/dist/lib/catalogue/builders/c4-entity-rollups.js +1 -1
- package/dist/lib/catalogue/builders/c4-external-systems.js +2 -2
- package/dist/lib/catalogue/builders/c4-systems.js +1 -1
- package/dist/lib/catalogue/builders/capabilities.js +1 -1
- package/dist/lib/catalogue/builders/capability-domain-model.js +1 -1
- package/dist/lib/catalogue/builders/capability-spec-walker.js +2 -2
- package/dist/lib/catalogue/builders/capability-spec.js +4 -4
- package/dist/lib/catalogue/builders/contracts.js +3 -3
- package/dist/lib/catalogue/builders/data-store-mapping.js +2 -2
- package/dist/lib/catalogue/builders/domain-models.js +2 -2
- package/dist/lib/catalogue/builders/domains.js +3 -3
- package/dist/lib/catalogue/builders/entities-manifest.js +8 -8
- package/dist/lib/catalogue/builders/entities-mermaid.js +4 -4
- package/dist/lib/catalogue/builders/entity-persistence.js +1 -1
- package/dist/lib/catalogue/builders/entity-slug.js +3 -3
- package/dist/lib/catalogue/builders/event-catalog-walker.js +6 -6
- package/dist/lib/catalogue/builders/event-edges.js +6 -6
- package/dist/lib/catalogue/builders/events.js +3 -3
- package/dist/lib/catalogue/builders/evidence-class.js +1 -1
- package/dist/lib/catalogue/builders/feature-domain-model.js +1 -1
- package/dist/lib/catalogue/builders/feature-grounding-walker.js +2 -2
- package/dist/lib/catalogue/builders/feature-grounding.js +5 -5
- package/dist/lib/catalogue/builders/feature-subscription-channels.js +3 -3
- package/dist/lib/catalogue/builders/features.js +1 -1
- package/dist/lib/catalogue/builders/glossary-xref.js +4 -4
- package/dist/lib/catalogue/builders/integrations.js +4 -4
- package/dist/lib/catalogue/builders/persona-c4system.js +1 -1
- package/dist/lib/catalogue/builders/product-edges.js +1 -1
- package/dist/lib/catalogue/builders/product-platform-dependencies.js +2 -2
- package/dist/lib/catalogue/builders/products.js +5 -5
- package/dist/lib/catalogue/builders/repo-edges.js +12 -12
- package/dist/lib/catalogue/builders/repositories.js +11 -7
- package/dist/lib/catalogue/builders/requirements.js +110 -11
- package/dist/lib/catalogue/builders/screen-tree.js +6 -6
- package/dist/lib/catalogue/builders/screens.js +18 -18
- package/dist/lib/catalogue/builders/service-contract-consumes.js +1 -1
- package/dist/lib/catalogue/builders/service-entity-tables.js +3 -3
- package/dist/lib/catalogue/builders/services.js +5 -5
- package/dist/lib/catalogue/builders/system-external-dependency.js +2 -2
- package/dist/lib/catalogue/canonical-schema.yaml +138 -2
- package/dist/lib/catalogue/coverage-render.js +15 -15
- package/dist/lib/catalogue/csv-writer.js +1 -1
- package/dist/lib/catalogue/feature-grounding-aliases-loader.js +1 -1
- package/dist/lib/catalogue/findings.js +1 -1
- package/dist/lib/catalogue/fk-validator.js +2 -2
- package/dist/lib/catalogue/manifest-loader.js +3 -3
- package/dist/lib/catalogue/rubric-coverage-map.yaml +28 -0
- package/dist/lib/catalogue/schema-compat.js +2 -2
- package/dist/lib/catalogue/schema-loader.js +1 -1
- package/dist/lib/catalogue/screen-validation-loader.js +2 -2
- package/dist/lib/catalogue/service-architecture-parser.js +1 -1
- package/dist/lib/catalogue/traceability-loader.js +6 -4
- package/dist/lib/conformance/finding.js +1 -1
- package/dist/lib/conformance/index.js +5 -5
- package/dist/lib/generate-briefing/index.js +2 -2
- package/dist/lib/metamodel/tql-subset-parser.js +280 -0
- package/dist/lib/pack/schema.js +2 -2
- package/dist/lib/pack/seed.js +2 -2
- package/dist/lib/pack/validate.js +1 -1
- package/dist/lib/plan/read-sdd.js +1 -1
- package/dist/lib/repo-kind.js +4 -12
- package/dist/lib/scaffold/archetype-behaviour.js +173 -0
- package/dist/lib/scaffold/behaviour-store.js +60 -0
- package/dist/lib/scaffold/domain.js +24 -6
- package/dist/lib/scaffold/registry.js +1 -1
- package/dist/lib/sync/briefing-merge.js +2 -2
- package/dist/lib/sync/bundle-cache.js +4 -4
- package/dist/lib/sync/yaml-block-merge.js +1 -1
- package/dist/lib/validate/archetype-citations.js +169 -0
- package/dist/lib/validate/behaviour-store.js +161 -6
- package/dist/lib/validate/dispatch.js +8 -1
- package/dist/maintain-version.json +2 -2
- package/dist/verbs/conformance.js +3 -3
- package/dist/verbs/list.js +1 -1
- package/dist/verbs/render.js +1 -1
- package/dist/verbs/scaffold.js +36 -4
- package/dist/verify-program.js +2 -2
- package/dist/verify-version.json +2 -2
- package/package.json +2 -2
- package/scripts/validate-app-dependencies.sh +1 -1
- package/scripts/validate-integration-docs.sh +1 -1
package/dist/verbs/scaffold.js
CHANGED
|
@@ -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);
|
package/dist/verify-program.js
CHANGED
|
@@ -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);
|
package/dist/verify-version.json
CHANGED
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sdd-method/author-cli",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"sddCliVersion": "2.
|
|
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
|