@sdd-method/sdd-cli 0.122.2 → 1.0.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/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/lib/catalogue/aggregate.d.ts +26 -2
- package/dist/lib/catalogue/aggregate.d.ts.map +1 -1
- package/dist/lib/catalogue/aggregate.js +220 -12
- package/dist/lib/catalogue/aggregate.js.map +1 -1
- package/dist/lib/catalogue/build.d.ts.map +1 -1
- package/dist/lib/catalogue/build.js +24 -5
- package/dist/lib/catalogue/build.js.map +1 -1
- package/dist/lib/catalogue/builders/c4-external-systems.d.ts.map +1 -1
- package/dist/lib/catalogue/builders/c4-external-systems.js +27 -19
- package/dist/lib/catalogue/builders/c4-external-systems.js.map +1 -1
- package/dist/lib/catalogue/builders/contracts.d.ts.map +1 -1
- package/dist/lib/catalogue/builders/contracts.js +12 -4
- package/dist/lib/catalogue/builders/contracts.js.map +1 -1
- package/dist/lib/catalogue/builders/external-system-exemption.d.ts +10 -0
- package/dist/lib/catalogue/builders/external-system-exemption.d.ts.map +1 -1
- package/dist/lib/catalogue/builders/external-system-exemption.js +19 -3
- package/dist/lib/catalogue/builders/external-system-exemption.js.map +1 -1
- package/dist/lib/catalogue/builders/products.d.ts.map +1 -1
- package/dist/lib/catalogue/builders/products.js +0 -6
- package/dist/lib/catalogue/builders/products.js.map +1 -1
- package/dist/lib/catalogue/builders/service-contract-consumes.d.ts +12 -0
- package/dist/lib/catalogue/builders/service-contract-consumes.d.ts.map +1 -1
- package/dist/lib/catalogue/builders/service-contract-consumes.js +14 -1
- package/dist/lib/catalogue/builders/service-contract-consumes.js.map +1 -1
- package/dist/lib/catalogue/canonical-schema.yaml +78 -17
- package/dist/lib/catalogue/contract-id.d.ts +11 -0
- package/dist/lib/catalogue/contract-id.d.ts.map +1 -0
- package/dist/lib/catalogue/contract-id.js +49 -0
- package/dist/lib/catalogue/contract-id.js.map +1 -0
- package/dist/lib/catalogue/enum-validator.d.ts +16 -0
- package/dist/lib/catalogue/enum-validator.d.ts.map +1 -0
- package/dist/lib/catalogue/enum-validator.js +46 -0
- package/dist/lib/catalogue/enum-validator.js.map +1 -0
- package/dist/lib/catalogue/ext-id.d.ts +25 -0
- package/dist/lib/catalogue/ext-id.d.ts.map +1 -0
- package/dist/lib/catalogue/ext-id.js +76 -0
- package/dist/lib/catalogue/ext-id.js.map +1 -0
- package/dist/lib/catalogue/index.d.ts +1 -0
- package/dist/lib/catalogue/index.d.ts.map +1 -1
- package/dist/lib/catalogue/index.js +1 -0
- package/dist/lib/catalogue/index.js.map +1 -1
- package/dist/lib/catalogue/migration-map.d.ts +27 -0
- package/dist/lib/catalogue/migration-map.d.ts.map +1 -0
- package/dist/lib/catalogue/migration-map.js +114 -0
- package/dist/lib/catalogue/migration-map.js.map +1 -0
- package/dist/lib/catalogue/reverse-product-quality.js +3 -3
- package/dist/lib/catalogue/reverse-product-quality.js.map +1 -1
- package/dist/lib/catalogue/schema-compat.d.ts +1 -1
- package/dist/lib/catalogue/schema-compat.js +1 -1
- package/dist/lib/catalogue/validate.d.ts +2 -0
- package/dist/lib/catalogue/validate.d.ts.map +1 -1
- package/dist/lib/catalogue/validate.js +22 -5
- package/dist/lib/catalogue/validate.js.map +1 -1
- package/dist/lib/contracts-availability/index.d.ts +44 -0
- package/dist/lib/contracts-availability/index.d.ts.map +1 -0
- package/dist/lib/contracts-availability/index.js +267 -0
- package/dist/lib/contracts-availability/index.js.map +1 -0
- package/dist/verbs/catalogue.d.ts.map +1 -1
- package/dist/verbs/catalogue.js +12 -1
- package/dist/verbs/catalogue.js.map +1 -1
- package/dist/verbs/contracts.d.ts +3 -0
- package/dist/verbs/contracts.d.ts.map +1 -0
- package/dist/verbs/contracts.js +33 -0
- package/dist/verbs/contracts.js.map +1 -0
- package/package.json +1 -1
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
// Reverse product-quality scores → the `products` maturity columns.
|
|
2
2
|
//
|
|
3
|
-
// WHY THIS EXISTS. `products`
|
|
4
|
-
// - `status` (documented `scaffolded | populated | reviewed`)
|
|
5
|
-
// `"active"`, a value outside its own vocabulary —
|
|
3
|
+
// WHY THIS EXISTS. `products` carried two maturity mechanisms and BOTH were inert:
|
|
4
|
+
// - `status` (documented `scaffolded | populated | reviewed`) was hardcoded to
|
|
5
|
+
// `"active"`, a value outside its own vocabulary — removed at schema 3.0.0;
|
|
6
6
|
// - `synthesis_quality` / `synthesis_band` / `last_assessed`, designed for exactly
|
|
7
7
|
// this data, were populated on 0 of 208 rows across two estates.
|
|
8
8
|
//
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reverse-product-quality.js","sourceRoot":"","sources":["../../../src/lib/catalogue/reverse-product-quality.ts"],"names":[],"mappings":"AAAA,oEAAoE;AACpE,EAAE;AACF,mFAAmF;AACnF,gFAAgF;AAChF,
|
|
1
|
+
{"version":3,"file":"reverse-product-quality.js","sourceRoot":"","sources":["../../../src/lib/catalogue/reverse-product-quality.ts"],"names":[],"mappings":"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"}
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
* ADR 0134 §4.6 (canonical builder + aggregator).
|
|
29
29
|
*/
|
|
30
30
|
export declare const SCHEMA_COMPAT: {
|
|
31
|
-
readonly catalogue_schema: "^
|
|
31
|
+
readonly catalogue_schema: "^3.0.0";
|
|
32
32
|
readonly sdd_manifest: "^1.0.0";
|
|
33
33
|
readonly aggregation_manifest: "^1.0.0";
|
|
34
34
|
};
|
|
@@ -9,6 +9,8 @@ export interface ValidateResult {
|
|
|
9
9
|
readonly schemaVersion: string;
|
|
10
10
|
readonly internalFkPass: boolean;
|
|
11
11
|
readonly columnShapeOk: boolean;
|
|
12
|
+
/** Bound-enum (column_enums) validation — hard-fail at 3.0.0 (M-ADR 0203 §4.1). */
|
|
13
|
+
readonly enumPass: boolean;
|
|
12
14
|
readonly findingsCount: number;
|
|
13
15
|
}
|
|
14
16
|
export type Writer = (s: string) => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../../src/lib/catalogue/validate.ts"],"names":[],"mappings":"AAwBA,MAAM,WAAW,cAAc;IAC7B,uCAAuC;IACvC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,kDAAkD;IAClD,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;IACjC,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;IAChC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;CAChC;AAED,MAAM,MAAM,MAAM,GAAG,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;AAEzC,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,cAAc,EACtB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,cAAc,CAAC,
|
|
1
|
+
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../../src/lib/catalogue/validate.ts"],"names":[],"mappings":"AAwBA,MAAM,WAAW,cAAc;IAC7B,uCAAuC;IACvC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,kDAAkD;IAClD,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;IACjC,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;IAChC,mFAAmF;IACnF,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;CAChC;AAED,MAAM,MAAM,MAAM,GAAG,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;AAEzC,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,cAAc,EACtB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,cAAc,CAAC,CA0IzB"}
|
|
@@ -13,8 +13,8 @@
|
|
|
13
13
|
// drift OR internal-FK FAIL.
|
|
14
14
|
import { stat } from "node:fs/promises";
|
|
15
15
|
import { join, resolve } from "node:path";
|
|
16
|
-
import { checkContainerTypeAdvisory } from "./advisory-container-type.js";
|
|
17
16
|
import { CLI_VERSION } from "./cli-version.js";
|
|
17
|
+
import { validateColumnEnums } from "./enum-validator.js";
|
|
18
18
|
import { readCatalogueCsv } from "./csv-reader.js";
|
|
19
19
|
import { writeCatalogue } from "./csv-writer.js";
|
|
20
20
|
import { FindingsLog } from "./findings.js";
|
|
@@ -77,9 +77,12 @@ export async function runCatalogueValidate(inputs, write) {
|
|
|
77
77
|
const fk = validateForeignKeys(schema, rowsByCatalogue, findings, {
|
|
78
78
|
...(profile !== undefined ? { profile } : {}),
|
|
79
79
|
});
|
|
80
|
-
// ADR
|
|
81
|
-
// existing catalogue
|
|
82
|
-
|
|
80
|
+
// Bound-enum validation (M-ADR 0203 §4.1) — hard-fails on out-of-set
|
|
81
|
+
// values in the existing catalogue. This is where an adopter's committed
|
|
82
|
+
// legacy c4_containers.type rows (Infrastructure / External System) fail
|
|
83
|
+
// at 3.0.0: the catalogue predates the migration, and a rebuild with the
|
|
84
|
+
// rows' dispositions applied is the remedy (per M-ADR 0155's rule).
|
|
85
|
+
const enums = validateColumnEnums(schema, rowsByCatalogue, findings);
|
|
83
86
|
// Report.
|
|
84
87
|
const findingsText = findings.render();
|
|
85
88
|
if (findingsText)
|
|
@@ -99,6 +102,15 @@ export async function runCatalogueValidate(inputs, write) {
|
|
|
99
102
|
write(` ${f.catalogue}.${f.column}: row pk=${f.referencingRow} → ${f.target}=${f.value || "<empty>"}\n`);
|
|
100
103
|
}
|
|
101
104
|
}
|
|
105
|
+
if (enums.pass) {
|
|
106
|
+
write(`Enum validation (column_enums): PASS\n`);
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
write(`Enum validation (column_enums): FAIL (${enums.violations.length} out-of-set)\n`);
|
|
110
|
+
for (const v of enums.violations) {
|
|
111
|
+
write(` ${v.catalogue}.${v.column}: row pk=${v.rowPk} value "${v.value}" (allowed: ${v.allowed})\n`);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
102
114
|
if (fk.externalFindings > 0) {
|
|
103
115
|
write(`External findings: ${fk.externalFindings} (validated by aggregator)\n`);
|
|
104
116
|
}
|
|
@@ -107,12 +119,17 @@ export async function runCatalogueValidate(inputs, write) {
|
|
|
107
119
|
// validate is read-only.
|
|
108
120
|
void writeCatalogue;
|
|
109
121
|
const strictFail = inputs.strict === true && findings.count() > 0;
|
|
110
|
-
|
|
122
|
+
// Error-severity findings (the bound-enum FAIL path) fail validate by
|
|
123
|
+
// default, matching `catalogue build`'s exit-code contract.
|
|
124
|
+
const exitCode = !columnShapeOk || !fk.internalPass || !enums.pass || findings.errorCount() > 0 || strictFail
|
|
125
|
+
? 1
|
|
126
|
+
: 0;
|
|
111
127
|
return {
|
|
112
128
|
exitCode,
|
|
113
129
|
schemaVersion: schema.schemaVersion,
|
|
114
130
|
internalFkPass: fk.internalPass,
|
|
115
131
|
columnShapeOk,
|
|
132
|
+
enumPass: enums.pass,
|
|
116
133
|
findingsCount: findings.count(),
|
|
117
134
|
};
|
|
118
135
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../../../src/lib/catalogue/validate.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,uEAAuE;AACvE,EAAE;AACF,iEAAiE;AACjE,gEAAgE;AAChE,oEAAoE;AACpE,sEAAsE;AACtE,sEAAsE;AACtE,0CAA0C;AAC1C,EAAE;AACF,sEAAsE;AACtE,oEAAoE;AACpE,6BAA6B;AAE7B,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACxC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../../../src/lib/catalogue/validate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Contract availability manifest (M-ADR 0202).
|
|
3
|
+
*
|
|
4
|
+
* `.sdd/contract-availability.yaml` — the committed attestation that lets an
|
|
5
|
+
* instrument distinguish "absent because wrong" from "absent because not
|
|
6
|
+
* checked out" when an SDD references contract artefacts living in sibling
|
|
7
|
+
* repositories (the M-ADR 0110 contracts-* pattern).
|
|
8
|
+
*
|
|
9
|
+
* Two modes, per the format spec (docs/method/foundations/
|
|
10
|
+
* contract-availability-manifest.md in the method baseline):
|
|
11
|
+
* --refresh runs where siblings ARE checked out: resolves every collected
|
|
12
|
+
* reference, writes/updates entries with content digest and
|
|
13
|
+
* repo@commit coordinate. Preserves entries it cannot currently
|
|
14
|
+
* see (still referenced, artefact absent here); drops entries no
|
|
15
|
+
* longer referenced anywhere, and says so.
|
|
16
|
+
* --verify runs anywhere: present artefacts are digest-compared (drift);
|
|
17
|
+
* absent-but-attested is satisfied; referenced-but-unattested-
|
|
18
|
+
* and-absent is the failure class.
|
|
19
|
+
*
|
|
20
|
+
* References are collected from BOTH observed forms (M-ADR 0200 §4.5 — read
|
|
21
|
+
* what the estate writes):
|
|
22
|
+
* 1. traceability.contracts declarations (string and object entries), when
|
|
23
|
+
* the declared path does not resolve inside the repo;
|
|
24
|
+
* 2. markdown links under docs/ whose target escapes the repo root.
|
|
25
|
+
*/
|
|
26
|
+
export declare const AVAILABILITY_MANIFEST_REL_PATH = ".sdd/contract-availability.yaml";
|
|
27
|
+
export interface AvailabilityEntry {
|
|
28
|
+
readonly path: string;
|
|
29
|
+
readonly sha256: string;
|
|
30
|
+
readonly source: string;
|
|
31
|
+
readonly kind?: string;
|
|
32
|
+
}
|
|
33
|
+
export interface AttestOptions {
|
|
34
|
+
readonly targetRepo: string;
|
|
35
|
+
readonly mode: "refresh" | "verify";
|
|
36
|
+
/** Root under which repo-root-relative sibling paths resolve. Default: parent of targetRepo. */
|
|
37
|
+
readonly codeRoot?: string;
|
|
38
|
+
}
|
|
39
|
+
export interface AttestResult {
|
|
40
|
+
readonly exitCode: number;
|
|
41
|
+
readonly log: readonly string[];
|
|
42
|
+
}
|
|
43
|
+
export declare function runAttest(opts: AttestOptions): Promise<AttestResult>;
|
|
44
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/contracts-availability/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAcH,eAAO,MAAM,8BAA8B,oCAAoC,CAAC;AAEhF,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,SAAS,GAAG,QAAQ,CAAC;IACpC,gGAAgG;IAChG,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,GAAG,EAAE,SAAS,MAAM,EAAE,CAAC;CACjC;AAED,wBAAsB,SAAS,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC,CAsE1E"}
|
|
@@ -0,0 +1,267 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Contract availability manifest (M-ADR 0202).
|
|
3
|
+
*
|
|
4
|
+
* `.sdd/contract-availability.yaml` — the committed attestation that lets an
|
|
5
|
+
* instrument distinguish "absent because wrong" from "absent because not
|
|
6
|
+
* checked out" when an SDD references contract artefacts living in sibling
|
|
7
|
+
* repositories (the M-ADR 0110 contracts-* pattern).
|
|
8
|
+
*
|
|
9
|
+
* Two modes, per the format spec (docs/method/foundations/
|
|
10
|
+
* contract-availability-manifest.md in the method baseline):
|
|
11
|
+
* --refresh runs where siblings ARE checked out: resolves every collected
|
|
12
|
+
* reference, writes/updates entries with content digest and
|
|
13
|
+
* repo@commit coordinate. Preserves entries it cannot currently
|
|
14
|
+
* see (still referenced, artefact absent here); drops entries no
|
|
15
|
+
* longer referenced anywhere, and says so.
|
|
16
|
+
* --verify runs anywhere: present artefacts are digest-compared (drift);
|
|
17
|
+
* absent-but-attested is satisfied; referenced-but-unattested-
|
|
18
|
+
* and-absent is the failure class.
|
|
19
|
+
*
|
|
20
|
+
* References are collected from BOTH observed forms (M-ADR 0200 §4.5 — read
|
|
21
|
+
* what the estate writes):
|
|
22
|
+
* 1. traceability.contracts declarations (string and object entries), when
|
|
23
|
+
* the declared path does not resolve inside the repo;
|
|
24
|
+
* 2. markdown links under docs/ whose target escapes the repo root.
|
|
25
|
+
*/
|
|
26
|
+
import { execFile as execFileCb } from "node:child_process";
|
|
27
|
+
import { createHash } from "node:crypto";
|
|
28
|
+
import { mkdir, readFile, writeFile } from "node:fs/promises";
|
|
29
|
+
import { existsSync } from "node:fs";
|
|
30
|
+
import { dirname, isAbsolute, join, normalize, relative, resolve, sep } from "node:path";
|
|
31
|
+
import { promisify } from "node:util";
|
|
32
|
+
import { parse as parseYaml } from "yaml";
|
|
33
|
+
import { loadTraceabilityManifests } from "../catalogue/traceability-loader.js";
|
|
34
|
+
import { FindingsLog } from "../catalogue/findings.js";
|
|
35
|
+
const execFile = promisify(execFileCb);
|
|
36
|
+
export const AVAILABILITY_MANIFEST_REL_PATH = ".sdd/contract-availability.yaml";
|
|
37
|
+
export async function runAttest(opts) {
|
|
38
|
+
const log = [];
|
|
39
|
+
const repo = resolve(opts.targetRepo);
|
|
40
|
+
const codeRoot = resolve(opts.codeRoot ?? join(repo, ".."));
|
|
41
|
+
const manifestAbs = join(repo, AVAILABILITY_MANIFEST_REL_PATH);
|
|
42
|
+
const refs = await collectReferences(repo);
|
|
43
|
+
const existing = await readManifest(manifestAbs);
|
|
44
|
+
const existingByPath = new Map(existing.map((e) => [e.path, e]));
|
|
45
|
+
const refSet = new Set(refs.map((r) => r.ref));
|
|
46
|
+
if (opts.mode === "refresh") {
|
|
47
|
+
const entries = [];
|
|
48
|
+
const unresolvable = [];
|
|
49
|
+
const preserved = [];
|
|
50
|
+
for (const r of refs) {
|
|
51
|
+
const abs = resolveRef(r, repo, codeRoot);
|
|
52
|
+
if (abs !== null) {
|
|
53
|
+
entries.push(await attestOne(r.ref, abs));
|
|
54
|
+
}
|
|
55
|
+
else if (existingByPath.has(r.ref)) {
|
|
56
|
+
// Still referenced; artefact not visible from this machine. Keep the
|
|
57
|
+
// prior attestation rather than silently discarding evidence this
|
|
58
|
+
// run cannot re-establish.
|
|
59
|
+
entries.push(existingByPath.get(r.ref));
|
|
60
|
+
preserved.push(r.ref);
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
unresolvable.push(r.ref);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
const dropped = existing.filter((e) => !refSet.has(e.path)).map((e) => e.path);
|
|
67
|
+
await writeManifest(manifestAbs, entries);
|
|
68
|
+
log.push(`references collected: ${refs.length}`);
|
|
69
|
+
log.push(`attested: ${entries.length - preserved.length}`);
|
|
70
|
+
report(log, "preserved (referenced; artefact not visible here)", preserved);
|
|
71
|
+
report(log, "unresolvable on this machine (NOT attested)", unresolvable);
|
|
72
|
+
report(log, "dropped (no longer referenced anywhere)", dropped);
|
|
73
|
+
return { exitCode: 0, log };
|
|
74
|
+
}
|
|
75
|
+
// verify
|
|
76
|
+
const drift = [];
|
|
77
|
+
const attestedAbsent = [];
|
|
78
|
+
const presentClean = [];
|
|
79
|
+
const stale = [];
|
|
80
|
+
for (const e of existing) {
|
|
81
|
+
if (!refSet.has(e.path)) {
|
|
82
|
+
stale.push(e.path);
|
|
83
|
+
continue;
|
|
84
|
+
}
|
|
85
|
+
const abs = resolveRefPath(e.path, repo, codeRoot);
|
|
86
|
+
if (abs === null) {
|
|
87
|
+
attestedAbsent.push(e.path);
|
|
88
|
+
continue;
|
|
89
|
+
}
|
|
90
|
+
const digest = await sha256File(abs);
|
|
91
|
+
if (digest === e.sha256)
|
|
92
|
+
presentClean.push(e.path);
|
|
93
|
+
else
|
|
94
|
+
drift.push(`${e.path} (manifest ${e.sha256.slice(0, 12)}… vs present ${digest.slice(0, 12)}…)`);
|
|
95
|
+
}
|
|
96
|
+
const unattested = refs
|
|
97
|
+
.filter((r) => !existingByPath.has(r.ref) && resolveRef(r, repo, codeRoot) === null)
|
|
98
|
+
.map((r) => r.ref);
|
|
99
|
+
log.push(`entries: ${existing.length}, references: ${refs.length}`);
|
|
100
|
+
report(log, "present and clean", presentClean);
|
|
101
|
+
report(log, "attested (absent here, satisfied by manifest)", attestedAbsent);
|
|
102
|
+
report(log, "DRIFT (present artefact disagrees with attestation)", drift);
|
|
103
|
+
report(log, "UNATTESTED (referenced, absent, no entry)", unattested);
|
|
104
|
+
report(log, "stale entries (no longer referenced — remove)", stale);
|
|
105
|
+
const exitCode = drift.length > 0 || unattested.length > 0 ? 1 : 0;
|
|
106
|
+
return { exitCode, log };
|
|
107
|
+
}
|
|
108
|
+
async function collectReferences(repo) {
|
|
109
|
+
const out = new Map();
|
|
110
|
+
// 1. traceability.contracts declarations that do not resolve in-repo.
|
|
111
|
+
const manifests = await loadTraceabilityManifests({
|
|
112
|
+
sddPath: repo,
|
|
113
|
+
findings: new FindingsLog(),
|
|
114
|
+
});
|
|
115
|
+
for (const m of manifests) {
|
|
116
|
+
const block = m.traceability.contracts;
|
|
117
|
+
if (!block)
|
|
118
|
+
continue;
|
|
119
|
+
for (const list of [block.openapi, block.proto, block.avro, block.spicedb]) {
|
|
120
|
+
if (!Array.isArray(list))
|
|
121
|
+
continue;
|
|
122
|
+
for (const entry of list) {
|
|
123
|
+
const p = typeof entry === "string" ? entry : entry.path;
|
|
124
|
+
if (typeof p !== "string" || p === "")
|
|
125
|
+
continue;
|
|
126
|
+
if (existsSync(join(repo, p)))
|
|
127
|
+
continue;
|
|
128
|
+
out.set(p, { ref: p });
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
// 2. markdown links under docs/ escaping the repo root.
|
|
133
|
+
const files = await walkMd(join(repo, "docs"));
|
|
134
|
+
const LINK = /(?<!!)\[[^\]]*\]\(([^)\s]+)(?:\s+"[^"]*")?\)/g;
|
|
135
|
+
for (const f of files) {
|
|
136
|
+
const txt = await readFile(f, "utf8").catch(() => "");
|
|
137
|
+
for (const match of txt.matchAll(LINK)) {
|
|
138
|
+
const raw = decodeURIComponent((match[1] ?? "").split("#")[0] ?? "").trim();
|
|
139
|
+
if (raw === "" || /^(https?|mailto|tel):/i.test(raw) || raw.startsWith("#"))
|
|
140
|
+
continue;
|
|
141
|
+
if (isAbsolute(raw) || raw.includes("{") || raw.includes("<"))
|
|
142
|
+
continue;
|
|
143
|
+
const abs = normalize(join(dirname(f), raw));
|
|
144
|
+
if (!relative(repo, abs).startsWith(".."))
|
|
145
|
+
continue;
|
|
146
|
+
out.set(raw, { ref: raw, relTo: dirname(f) });
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
return [...out.values()];
|
|
150
|
+
}
|
|
151
|
+
function resolveRef(r, repo, codeRoot) {
|
|
152
|
+
if (r.relTo !== undefined) {
|
|
153
|
+
const abs = normalize(join(r.relTo, r.ref));
|
|
154
|
+
return existsSync(abs) ? abs : null;
|
|
155
|
+
}
|
|
156
|
+
return resolveRefPath(r.ref, repo, codeRoot);
|
|
157
|
+
}
|
|
158
|
+
/** Repo-root-relative declaration: in-repo first, then under codeRoot. Doc-relative refs (../…) resolve against repo root's parent chain via normalize. */
|
|
159
|
+
function resolveRefPath(ref, repo, codeRoot) {
|
|
160
|
+
for (const base of [repo, codeRoot]) {
|
|
161
|
+
const abs = normalize(join(base, ref));
|
|
162
|
+
if (existsSync(abs))
|
|
163
|
+
return abs;
|
|
164
|
+
}
|
|
165
|
+
return null;
|
|
166
|
+
}
|
|
167
|
+
async function attestOne(ref, abs) {
|
|
168
|
+
const sha256 = await sha256File(abs);
|
|
169
|
+
const source = await sourceCoordinate(abs);
|
|
170
|
+
const kind = inferKind(ref);
|
|
171
|
+
return { path: ref, sha256, source, ...(kind ? { kind } : {}) };
|
|
172
|
+
}
|
|
173
|
+
async function sha256File(abs) {
|
|
174
|
+
const buf = await readFile(abs);
|
|
175
|
+
return createHash("sha256").update(buf).digest("hex");
|
|
176
|
+
}
|
|
177
|
+
async function sourceCoordinate(abs) {
|
|
178
|
+
try {
|
|
179
|
+
const dir = dirname(abs);
|
|
180
|
+
const { stdout: top } = await execFile("git", ["-C", dir, "rev-parse", "--show-toplevel"]);
|
|
181
|
+
const { stdout: head } = await execFile("git", ["-C", dir, "rev-parse", "--short", "HEAD"]);
|
|
182
|
+
const name = top.trim().split(sep).pop() ?? "unknown";
|
|
183
|
+
return `${name}@${head.trim()}`;
|
|
184
|
+
}
|
|
185
|
+
catch {
|
|
186
|
+
return "unversioned";
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
function inferKind(ref) {
|
|
190
|
+
if (ref.endsWith(".avsc"))
|
|
191
|
+
return "event";
|
|
192
|
+
if (ref.endsWith(".proto"))
|
|
193
|
+
return "rpc";
|
|
194
|
+
if (ref.endsWith(".zed"))
|
|
195
|
+
return "authz";
|
|
196
|
+
if (/openapi/.test(ref) && /\.(ya?ml|json)$/.test(ref))
|
|
197
|
+
return "rest";
|
|
198
|
+
return undefined;
|
|
199
|
+
}
|
|
200
|
+
async function readManifest(abs) {
|
|
201
|
+
if (!existsSync(abs))
|
|
202
|
+
return [];
|
|
203
|
+
const raw = await readFile(abs, "utf8");
|
|
204
|
+
const doc = parseYaml(raw);
|
|
205
|
+
if (!doc || !Array.isArray(doc.artefacts))
|
|
206
|
+
return [];
|
|
207
|
+
const out = [];
|
|
208
|
+
for (const a of doc.artefacts) {
|
|
209
|
+
if (a === null || typeof a !== "object")
|
|
210
|
+
continue;
|
|
211
|
+
const o = a;
|
|
212
|
+
if (typeof o["path"] !== "string" || typeof o["sha256"] !== "string")
|
|
213
|
+
continue;
|
|
214
|
+
out.push({
|
|
215
|
+
path: o["path"],
|
|
216
|
+
sha256: o["sha256"],
|
|
217
|
+
source: typeof o["source"] === "string" ? o["source"] : "unversioned",
|
|
218
|
+
...(typeof o["kind"] === "string" ? { kind: o["kind"] } : {}),
|
|
219
|
+
});
|
|
220
|
+
}
|
|
221
|
+
return out;
|
|
222
|
+
}
|
|
223
|
+
async function writeManifest(abs, entries) {
|
|
224
|
+
const sorted = [...entries].sort((a, b) => a.path.localeCompare(b.path));
|
|
225
|
+
const lines = ['schema_version: "1.0"', "artefacts:"];
|
|
226
|
+
for (const e of sorted) {
|
|
227
|
+
lines.push(` - path: ${JSON.stringify(e.path)}`);
|
|
228
|
+
lines.push(` sha256: "${e.sha256}"`);
|
|
229
|
+
lines.push(` source: ${JSON.stringify(e.source)}`);
|
|
230
|
+
if (e.kind)
|
|
231
|
+
lines.push(` kind: "${e.kind}"`);
|
|
232
|
+
}
|
|
233
|
+
await mkdir(dirname(abs), { recursive: true });
|
|
234
|
+
await writeFile(abs, lines.join("\n") + "\n", "utf8");
|
|
235
|
+
}
|
|
236
|
+
async function walkMd(root) {
|
|
237
|
+
const { readdir } = await import("node:fs/promises");
|
|
238
|
+
const out = [];
|
|
239
|
+
async function rec(dir) {
|
|
240
|
+
let names;
|
|
241
|
+
try {
|
|
242
|
+
names = await readdir(dir, { withFileTypes: true });
|
|
243
|
+
}
|
|
244
|
+
catch {
|
|
245
|
+
return;
|
|
246
|
+
}
|
|
247
|
+
for (const d of names) {
|
|
248
|
+
const p = join(dir, d.name);
|
|
249
|
+
if (d.isDirectory()) {
|
|
250
|
+
if (d.name === "node_modules" || d.name === ".git")
|
|
251
|
+
continue;
|
|
252
|
+
await rec(p);
|
|
253
|
+
}
|
|
254
|
+
else if (d.name.endsWith(".md"))
|
|
255
|
+
out.push(p);
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
await rec(root);
|
|
259
|
+
return out;
|
|
260
|
+
}
|
|
261
|
+
function report(log, label, items) {
|
|
262
|
+
// Count AND list, always (M-ADR 0200 §4.3).
|
|
263
|
+
log.push(`${label}: ${items.length}`);
|
|
264
|
+
for (const i of items)
|
|
265
|
+
log.push(` - ${i}`);
|
|
266
|
+
}
|
|
267
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/contracts-availability/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"catalogue.d.ts","sourceRoot":"","sources":["../../src/verbs/catalogue.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"catalogue.d.ts","sourceRoot":"","sources":["../../src/verbs/catalogue.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA2BzC,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA+GxD"}
|
package/dist/verbs/catalogue.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { runCatalogueBuild, runCatalogueAggregate, runCatalogueValidate, runCatalogueVersion, } from "../lib/catalogue/index.js";
|
|
1
|
+
import { runCatalogueBuild, runCatalogueAggregate, runCatalogueMigrationMap, runCatalogueValidate, runCatalogueVersion, } from "../lib/catalogue/index.js";
|
|
2
2
|
export function registerCatalogue(program) {
|
|
3
3
|
const catalogue = program
|
|
4
4
|
.command("catalogue")
|
|
@@ -50,6 +50,17 @@ export function registerCatalogue(program) {
|
|
|
50
50
|
if (result.exitCode !== 0)
|
|
51
51
|
process.exit(result.exitCode);
|
|
52
52
|
});
|
|
53
|
+
catalogue
|
|
54
|
+
.command("migration-map")
|
|
55
|
+
.description("Emit the 2.x → 3.0.0 id migration maps (external-system + contract ids) from existing catalogues/ (M-ADR 0203)")
|
|
56
|
+
.option("--sdd-path <path>", "Path to the SDD repo root (defaults to cwd)")
|
|
57
|
+
.action(async (opts) => {
|
|
58
|
+
const result = await runCatalogueMigrationMap({
|
|
59
|
+
...(opts.sddPath !== undefined ? { sddPath: opts.sddPath } : {}),
|
|
60
|
+
}, (s) => process.stdout.write(s));
|
|
61
|
+
if (result.exitCode !== 0)
|
|
62
|
+
process.exit(result.exitCode);
|
|
63
|
+
});
|
|
53
64
|
catalogue
|
|
54
65
|
.command("version")
|
|
55
66
|
.description("Print the catalogue schema version + sdd-cli version pin")
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"catalogue.js","sourceRoot":"","sources":["../../src/verbs/catalogue.ts"],"names":[],"mappings":"AACA,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACrB,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,2BAA2B,CAAC;AAoBnC,MAAM,UAAU,iBAAiB,CAAC,OAAgB;IAChD,MAAM,SAAS,GAAG,OAAO;SACtB,OAAO,CAAC,WAAW,CAAC;SACpB,WAAW,CACV,gEAAgE,CACjE,CAAC;IAEJ,SAAS;SACN,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CACV,uEAAuE,CACxE;SACA,MAAM,CACL,mBAAmB,EACnB,6CAA6C,CAC9C;SACA,MAAM,CAAC,cAAc,EAAE,sEAAsE,CAAC;SAC9F,MAAM,CAAC,UAAU,EAAE,4EAA4E,CAAC;SAChG,MAAM,CAAC,KAAK,EAAE,IAAkB,EAAE,EAAE;QACnC,MAAM,MAAM,GAAG,MAAM,iBAAiB,CACpC;YACE,GAAG,CAAC,IAAI,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAChE,GAAG,CAAC,IAAI,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACvD,GAAG,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC9D,EACD,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAC/B,CAAC;QACF,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC;YAAE,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;IAEL,SAAS;SACN,OAAO,CAAC,WAAW,CAAC;SACpB,WAAW,CACV,oEAAoE,CACrE;SACA,MAAM,CACL,mBAAmB,EACnB,uDAAuD,CACxD;SACA,MAAM,CACL,mBAAmB,EACnB,wFAAwF,CACzF;SACA,MAAM,CACL,cAAc,EACd,4FAA4F,CAC7F;SACA,MAAM,CAAC,UAAU,EAAE,4BAA4B,CAAC;SAChD,MAAM,CAAC,KAAK,EAAE,IAAsB,EAAE,EAAE;QACvC,MAAM,MAAM,GAAG,MAAM,qBAAqB,CACxC;YACE,GAAG,CAAC,IAAI,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAChE,GAAG,CAAC,IAAI,CAAC,QAAQ,KAAK,SAAS;gBAC7B,CAAC,CAAC,EAAE,YAAY,EAAE,IAAI,CAAC,QAAQ,EAAE;gBACjC,CAAC,CAAC,EAAE,CAAC;YACP,GAAG,CAAC,IAAI,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACvD,GAAG,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC9D,EACD,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAC/B,CAAC;QACF,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC;YAAE,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;IAEL,SAAS;SACN,OAAO,CAAC,UAAU,CAAC;SACnB,WAAW,CACV,+EAA+E,CAChF;SACA,MAAM,CACL,mBAAmB,EACnB,6CAA6C,CAC9C;SACA,MAAM,CAAC,UAAU,EAAE,4BAA4B,CAAC;SAChD,MAAM,CAAC,KAAK,EAAE,IAAqB,EAAE,EAAE;QACtC,MAAM,MAAM,GAAG,MAAM,oBAAoB,CACvC;YACE,GAAG,CAAC,IAAI,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAChE,GAAG,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC9D,EACD,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAC/B,CAAC;QACF,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC;YAAE,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;IAEL,SAAS;SACN,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CACV,0DAA0D,CAC3D;SACA,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,mBAAmB,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
1
|
+
{"version":3,"file":"catalogue.js","sourceRoot":"","sources":["../../src/verbs/catalogue.ts"],"names":[],"mappings":"AACA,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACrB,wBAAwB,EACxB,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,2BAA2B,CAAC;AAoBnC,MAAM,UAAU,iBAAiB,CAAC,OAAgB;IAChD,MAAM,SAAS,GAAG,OAAO;SACtB,OAAO,CAAC,WAAW,CAAC;SACpB,WAAW,CACV,gEAAgE,CACjE,CAAC;IAEJ,SAAS;SACN,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CACV,uEAAuE,CACxE;SACA,MAAM,CACL,mBAAmB,EACnB,6CAA6C,CAC9C;SACA,MAAM,CAAC,cAAc,EAAE,sEAAsE,CAAC;SAC9F,MAAM,CAAC,UAAU,EAAE,4EAA4E,CAAC;SAChG,MAAM,CAAC,KAAK,EAAE,IAAkB,EAAE,EAAE;QACnC,MAAM,MAAM,GAAG,MAAM,iBAAiB,CACpC;YACE,GAAG,CAAC,IAAI,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAChE,GAAG,CAAC,IAAI,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACvD,GAAG,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC9D,EACD,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAC/B,CAAC;QACF,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC;YAAE,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;IAEL,SAAS;SACN,OAAO,CAAC,WAAW,CAAC;SACpB,WAAW,CACV,oEAAoE,CACrE;SACA,MAAM,CACL,mBAAmB,EACnB,uDAAuD,CACxD;SACA,MAAM,CACL,mBAAmB,EACnB,wFAAwF,CACzF;SACA,MAAM,CACL,cAAc,EACd,4FAA4F,CAC7F;SACA,MAAM,CAAC,UAAU,EAAE,4BAA4B,CAAC;SAChD,MAAM,CAAC,KAAK,EAAE,IAAsB,EAAE,EAAE;QACvC,MAAM,MAAM,GAAG,MAAM,qBAAqB,CACxC;YACE,GAAG,CAAC,IAAI,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAChE,GAAG,CAAC,IAAI,CAAC,QAAQ,KAAK,SAAS;gBAC7B,CAAC,CAAC,EAAE,YAAY,EAAE,IAAI,CAAC,QAAQ,EAAE;gBACjC,CAAC,CAAC,EAAE,CAAC;YACP,GAAG,CAAC,IAAI,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACvD,GAAG,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC9D,EACD,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAC/B,CAAC;QACF,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC;YAAE,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;IAEL,SAAS;SACN,OAAO,CAAC,UAAU,CAAC;SACnB,WAAW,CACV,+EAA+E,CAChF;SACA,MAAM,CACL,mBAAmB,EACnB,6CAA6C,CAC9C;SACA,MAAM,CAAC,UAAU,EAAE,4BAA4B,CAAC;SAChD,MAAM,CAAC,KAAK,EAAE,IAAqB,EAAE,EAAE;QACtC,MAAM,MAAM,GAAG,MAAM,oBAAoB,CACvC;YACE,GAAG,CAAC,IAAI,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAChE,GAAG,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC9D,EACD,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAC/B,CAAC;QACF,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC;YAAE,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;IAEL,SAAS;SACN,OAAO,CAAC,eAAe,CAAC;SACxB,WAAW,CACV,gHAAgH,CACjH;SACA,MAAM,CACL,mBAAmB,EACnB,6CAA6C,CAC9C;SACA,MAAM,CAAC,KAAK,EAAE,IAAqB,EAAE,EAAE;QACtC,MAAM,MAAM,GAAG,MAAM,wBAAwB,CAC3C;YACE,GAAG,CAAC,IAAI,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACjE,EACD,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAC/B,CAAC;QACF,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC;YAAE,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;IAEL,SAAS;SACN,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CACV,0DAA0D,CAC3D;SACA,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,mBAAmB,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contracts.d.ts","sourceRoot":"","sources":["../../src/verbs/contracts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAUzC,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAkCxD"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { runAttest } from "../lib/contracts-availability/index.js";
|
|
2
|
+
export function registerContracts(program) {
|
|
3
|
+
const contracts = program
|
|
4
|
+
.command("contracts")
|
|
5
|
+
.description("Contract artefact operations (M-ADR 0202)");
|
|
6
|
+
contracts
|
|
7
|
+
.command("attest")
|
|
8
|
+
.description("Maintain/verify .sdd/contract-availability.yaml — the committed attestation for " +
|
|
9
|
+
"contract artefacts living in sibling repositories (M-ADR 0202). --refresh runs " +
|
|
10
|
+
"where the siblings are checked out and writes entries (path, sha256, repo@commit); " +
|
|
11
|
+
"--verify runs anywhere: present artefacts are digest-checked for drift, " +
|
|
12
|
+
"absent-but-attested is satisfied, referenced-but-unattested-and-absent fails.")
|
|
13
|
+
.option("--target-repo <dir>", "target SDD repo", process.cwd())
|
|
14
|
+
.option("--code-root <dir>", "root under which sibling-resident declared paths resolve (default: parent of target repo)")
|
|
15
|
+
.option("--refresh", "attest what is visible from this machine and update the manifest")
|
|
16
|
+
.option("--verify", "check references and attestations without writing (default)")
|
|
17
|
+
.action(async (opts) => {
|
|
18
|
+
if (opts.refresh && opts.verify) {
|
|
19
|
+
process.stderr.write("[FAIL] --refresh and --verify are mutually exclusive\n");
|
|
20
|
+
process.exit(1);
|
|
21
|
+
}
|
|
22
|
+
const { exitCode, log } = await runAttest({
|
|
23
|
+
targetRepo: opts.targetRepo,
|
|
24
|
+
mode: opts.refresh ? "refresh" : "verify",
|
|
25
|
+
...(opts.codeRoot ? { codeRoot: opts.codeRoot } : {}),
|
|
26
|
+
});
|
|
27
|
+
for (const line of log)
|
|
28
|
+
process.stdout.write(line + "\n");
|
|
29
|
+
if (exitCode !== 0)
|
|
30
|
+
process.exit(exitCode);
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=contracts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contracts.js","sourceRoot":"","sources":["../../src/verbs/contracts.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,wCAAwC,CAAC;AASnE,MAAM,UAAU,iBAAiB,CAAC,OAAgB;IAChD,MAAM,SAAS,GAAG,OAAO;SACtB,OAAO,CAAC,WAAW,CAAC;SACpB,WAAW,CAAC,2CAA2C,CAAC,CAAC;IAE5D,SAAS;SACN,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CACV,kFAAkF;QAChF,iFAAiF;QACjF,qFAAqF;QACrF,0EAA0E;QAC1E,+EAA+E,CAClF;SACA,MAAM,CAAC,qBAAqB,EAAE,iBAAiB,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC;SAC/D,MAAM,CACL,mBAAmB,EACnB,2FAA2F,CAC5F;SACA,MAAM,CAAC,WAAW,EAAE,kEAAkE,CAAC;SACvF,MAAM,CAAC,UAAU,EAAE,6DAA6D,CAAC;SACjF,MAAM,CAAC,KAAK,EAAE,IAA4B,EAAE,EAAE;QAC7C,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,wDAAwD,CAAC,CAAC;YAC/E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,MAAM,SAAS,CAAC;YACxC,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ;YACzC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACtD,CAAC,CAAC;QACH,KAAK,MAAM,IAAI,IAAI,GAAG;YAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;QAC1D,IAAI,QAAQ,KAAK,CAAC;YAAE,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;AACP,CAAC"}
|