@sdd-method/verify-cli 1.2.0 → 1.3.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/NOTICE +1 -1
- package/dist/lib/catalogue/scores-coverage.js +1 -1
- package/dist/lib/lock-file.js +10 -0
- package/dist/lib/validate/plan.js +6 -3
- package/dist/maintain-version.json +2 -2
- package/dist/verbs/validate.js +6 -1
- package/dist/verify-program.js +1 -1
- package/dist/verify-version.json +2 -2
- package/package.json +2 -6
package/NOTICE
CHANGED
|
@@ -2,7 +2,7 @@ sdd-cli
|
|
|
2
2
|
Copyright 2026 Tom Foster
|
|
3
3
|
|
|
4
4
|
This product includes software developed as part of the SDD method
|
|
5
|
-
distribution
|
|
5
|
+
distribution.
|
|
6
6
|
|
|
7
7
|
Licensed under the Apache License, Version 2.0 (the "License");
|
|
8
8
|
you may not use this file except in compliance with the License.
|
|
@@ -171,7 +171,7 @@ export const RUBRIC_ELIGIBILITY = [
|
|
|
171
171
|
joinColumn: "id",
|
|
172
172
|
refTransform: null,
|
|
173
173
|
eligibilityFilter: null,
|
|
174
|
-
eligibilityNote: "NO local population, measured rather than assumed. Refs are '<domain>-feature-grounding-<slug>' and the tails are SIBLING SDD SLUGS (app-shell,
|
|
174
|
+
eligibilityNote: "NO local population, measured rather than assumed. Refs are '<domain>-feature-grounding-<slug>' and the tails are SIBLING SDD SLUGS (app-shell, gift-cards, storefront-express), not rows in this SDD: 0/15 against products, applications, features and repositories, and 1/15 against capabilities — a coincidence, not a join. A cross-SDD reference the member tier cannot resolve, so its coverage is declared unmeasurable rather than given a transform that would produce plausible wrong numbers.",
|
|
175
175
|
},
|
|
176
176
|
{
|
|
177
177
|
rubricId: "reverse-contract-quality",
|
package/dist/lib/lock-file.js
CHANGED
|
@@ -66,6 +66,8 @@ export function serialiseLockFile(lock) {
|
|
|
66
66
|
...(lock.ciRunner !== undefined ? [`ci_runner: "${lock.ciRunner}"`] : []),
|
|
67
67
|
...(lock.ciWorkflowBlockSha256 !== undefined ? [`ci_workflow_block_sha256: "${lock.ciWorkflowBlockSha256}"`] : []),
|
|
68
68
|
...(lock.ciModuleSha256 !== undefined ? [`ci_module_sha256: "${lock.ciModuleSha256}"`] : []),
|
|
69
|
+
...(lock.cliSource !== undefined ? [`cli_source: ${lock.cliSource}`] : []),
|
|
70
|
+
...(lock.cliPackage !== undefined ? [`cli_package: "${lock.cliPackage}"`] : []),
|
|
69
71
|
"bundles:",
|
|
70
72
|
];
|
|
71
73
|
for (const b of lock.bundles) {
|
|
@@ -117,6 +119,8 @@ function parseVersioned(raw) {
|
|
|
117
119
|
let ciBinding;
|
|
118
120
|
let ciRunner;
|
|
119
121
|
let ciModuleSha256;
|
|
122
|
+
let cliSource;
|
|
123
|
+
let cliPackage;
|
|
120
124
|
const bundles = [];
|
|
121
125
|
let inBundles = false;
|
|
122
126
|
let inPaths = false;
|
|
@@ -186,6 +190,10 @@ function parseVersioned(raw) {
|
|
|
186
190
|
ciRunner = stripQuotes(value);
|
|
187
191
|
else if (key === "ci_module_sha256")
|
|
188
192
|
ciModuleSha256 = stripQuotes(value);
|
|
193
|
+
else if (key === "cli_source")
|
|
194
|
+
cliSource = stripQuotes(value);
|
|
195
|
+
else if (key === "cli_package")
|
|
196
|
+
cliPackage = stripQuotes(value);
|
|
189
197
|
}
|
|
190
198
|
continue;
|
|
191
199
|
}
|
|
@@ -313,6 +321,8 @@ function parseVersioned(raw) {
|
|
|
313
321
|
...(ciRunner !== undefined ? { ciRunner } : {}),
|
|
314
322
|
...(ciWorkflowBlockSha256 !== undefined ? { ciWorkflowBlockSha256 } : {}),
|
|
315
323
|
...(ciModuleSha256 !== undefined ? { ciModuleSha256 } : {}),
|
|
324
|
+
...(cliSource !== undefined ? { cliSource } : {}),
|
|
325
|
+
...(cliPackage !== undefined ? { cliPackage } : {}),
|
|
316
326
|
};
|
|
317
327
|
}
|
|
318
328
|
function migrateV1(raw, legacyBundleName) {
|
|
@@ -25,7 +25,7 @@ const TITLES = {
|
|
|
25
25
|
// CI has no platform checkout, so this step runs the app-only checks; the met gate needs the platform beside it.
|
|
26
26
|
"app-dependencies": "Validate app dependencies (app-only checks; no platform checkout in CI)",
|
|
27
27
|
};
|
|
28
|
-
export function methodValidationPlan(profile) {
|
|
28
|
+
export function methodValidationPlan(profile, opts = {}) {
|
|
29
29
|
const steps = validatorsForProfile(profile)
|
|
30
30
|
.filter((v) => v.optional !== true)
|
|
31
31
|
.map((v) => ({
|
|
@@ -38,12 +38,15 @@ export function methodValidationPlan(profile) {
|
|
|
38
38
|
if (profile === "platform") {
|
|
39
39
|
steps.push({ id: "cascade-completeness", title: "Validate cascade completeness", tool: "bash", args: ["orchestration/scripts/validate-cascade-completeness.sh", "all"], advisory: false }, { id: "architecture-alignment", title: "Validate architecture alignment", tool: "bash", args: ["orchestration/scripts/validate-architecture-alignment.sh"], advisory: false });
|
|
40
40
|
}
|
|
41
|
+
const gating = opts.catalogueRebuild === true;
|
|
41
42
|
steps.push({
|
|
42
43
|
id: "catalogue-freshness",
|
|
43
|
-
title:
|
|
44
|
+
title: gating
|
|
45
|
+
? "Check catalogues reproduce from the specs (gating: the pipeline rebuilt them)"
|
|
46
|
+
: "Check catalogues reproduce from the specs (advisory)",
|
|
44
47
|
tool: "sdd-maintain",
|
|
45
48
|
args: ["catalogue", "build", "--check", "--sdd-path", "."],
|
|
46
|
-
advisory:
|
|
49
|
+
advisory: !gating,
|
|
47
50
|
});
|
|
48
51
|
return steps;
|
|
49
52
|
}
|
package/dist/verbs/validate.js
CHANGED
|
@@ -14,7 +14,12 @@ export function registerValidate(program) {
|
|
|
14
14
|
.option("--strict", "treat warnings as failures")
|
|
15
15
|
.option("--list", "print the method-managed validation job for this repo's profile as JSON (the plan every CI executor runs, the Dagger module included) and run nothing")
|
|
16
16
|
.option("--profile <profile>", "with --list: the profile to list, instead of reading .sdd-repo-kind (platform | application | integration)")
|
|
17
|
+
.option("--catalogue-rebuild", "with --list: the pipeline rebuilt the catalogues on this run (M-ADR 0220 §4.4), so the catalogue freshness step gates instead of advising")
|
|
17
18
|
.action(async (opts) => {
|
|
19
|
+
if (opts.catalogueRebuild === true && opts.list !== true) {
|
|
20
|
+
process.stderr.write("--catalogue-rebuild only applies with --list\n");
|
|
21
|
+
process.exit(2);
|
|
22
|
+
}
|
|
18
23
|
if (opts.list === true) {
|
|
19
24
|
let profile;
|
|
20
25
|
if (opts.profile !== undefined) {
|
|
@@ -32,7 +37,7 @@ export function registerValidate(program) {
|
|
|
32
37
|
}
|
|
33
38
|
profile = profileFromRepoKind(kind);
|
|
34
39
|
}
|
|
35
|
-
process.stdout.write(JSON.stringify({ profile, steps: methodValidationPlan(profile) }, null, 2) + "\n");
|
|
40
|
+
process.stdout.write(JSON.stringify({ profile, steps: methodValidationPlan(profile, { catalogueRebuild: opts.catalogueRebuild === true }) }, null, 2) + "\n");
|
|
36
41
|
return;
|
|
37
42
|
}
|
|
38
43
|
const { exitCode } = await runValidate({
|
package/dist/verify-program.js
CHANGED
|
@@ -29,7 +29,7 @@ import { registerCatalogueBaselineCheck, registerCatalogueImpact, registerCatalo
|
|
|
29
29
|
import { registerList } from "./verbs/list.js";
|
|
30
30
|
import { registerPackValidate } from "./verbs/pack-validate.js";
|
|
31
31
|
import { registerValidate } from "./verbs/validate.js";
|
|
32
|
-
const SPEC_URL = "
|
|
32
|
+
const SPEC_URL = "docs/method/cli/sdd-cli-specification.md (in the method distribution)";
|
|
33
33
|
/** The full surface, as `<verb>` or `<verb> <subcommand>`. Asserted by test. */
|
|
34
34
|
export const VERIFY_SURFACE = [
|
|
35
35
|
"validate",
|
package/dist/verify-version.json
CHANGED
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sdd-method/verify-cli",
|
|
3
|
-
"version": "1.
|
|
4
|
-
"sddCliVersion": "1.
|
|
3
|
+
"version": "1.3.0",
|
|
4
|
+
"sddCliVersion": "1.44.0",
|
|
5
5
|
"description": "Verify an SDD repository without changing it — validate, list, and read-only catalogue and pack checks. Ships only the code those verbs reach; it cannot write to the repository it is pointed at. Authoring and maintenance are in @sdd-method/sdd-cli.",
|
|
6
6
|
"license": "Apache-2.0",
|
|
7
7
|
"type": "module",
|
|
@@ -17,10 +17,6 @@
|
|
|
17
17
|
"zod": "^4.3.6",
|
|
18
18
|
"@duckdb/node-api": "^1.5.5-r.3"
|
|
19
19
|
},
|
|
20
|
-
"repository": {
|
|
21
|
-
"type": "git",
|
|
22
|
-
"url": "git+https://github.com/tomfosteruk/sdd-cli.git"
|
|
23
|
-
},
|
|
24
20
|
"publishConfig": {
|
|
25
21
|
"access": "public"
|
|
26
22
|
},
|