@principal-ai/subsystems-core 0.38.0 → 0.39.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/types/subsystem-model.d.ts +17 -4
- package/dist/types/subsystem-model.d.ts.map +1 -1
- package/dist/types/subsystem-model.js +4 -0
- package/dist/types/subsystem-model.js.map +1 -1
- package/package.json +1 -1
- package/schemas/subsystem-model.schema.json +14 -18
- package/src/types/subsystem-model.test.ts +54 -0
- package/src/types/subsystem-model.ts +20 -4
|
@@ -73,10 +73,6 @@ export interface SubsystemDeclarationRef {
|
|
|
73
73
|
lineHash: string;
|
|
74
74
|
graphifyNodeId?: string;
|
|
75
75
|
capturedAt: string;
|
|
76
|
-
revision?: {
|
|
77
|
-
headSha: string;
|
|
78
|
-
dirtyHash?: string | null;
|
|
79
|
-
};
|
|
80
76
|
}
|
|
81
77
|
export interface SubsystemParamInfo {
|
|
82
78
|
name?: string;
|
|
@@ -329,6 +325,12 @@ export interface SubsystemWalkthrough {
|
|
|
329
325
|
* No host paths, provenance, document-level repo, store ids, or verification.
|
|
330
326
|
* Repo identity lives on each component's `purl`.
|
|
331
327
|
*/
|
|
328
|
+
/**
|
|
329
|
+
* A pinned commit for one referenced repo. Keyed by `purlRepoKey` (the purl
|
|
330
|
+
* with its fragment stripped). Commit-only — a dirty tree has no reproducible
|
|
331
|
+
* name and is never recorded as a coordinate.
|
|
332
|
+
*/
|
|
333
|
+
export type PurlCommit = string;
|
|
332
334
|
export interface SubsystemModelDocument {
|
|
333
335
|
/**
|
|
334
336
|
* Optional pointer to the JSON Schema that describes this file. Lets editors
|
|
@@ -342,6 +344,17 @@ export interface SubsystemModelDocument {
|
|
|
342
344
|
relations: SubsystemRelation[];
|
|
343
345
|
/** Runtime walkthroughs (ordered hops with sites). */
|
|
344
346
|
walkthroughs?: SubsystemWalkthrough[];
|
|
347
|
+
/**
|
|
348
|
+
* The commit each referenced repo was at when the model was created. The
|
|
349
|
+
* coordinate system for every `file:line` in the document: without it, a
|
|
350
|
+
* line pointer is ambiguous across commits. Immutable after create.
|
|
351
|
+
*/
|
|
352
|
+
createdAtCommits?: Record<string, PurlCommit>;
|
|
353
|
+
/**
|
|
354
|
+
* The commit each referenced repo was at when a full audit last passed
|
|
355
|
+
* against a clean referenced state. Absent until an audit earns it.
|
|
356
|
+
*/
|
|
357
|
+
verifiedAtCommits?: Record<string, PurlCommit>;
|
|
345
358
|
}
|
|
346
359
|
/**
|
|
347
360
|
* Hydrated model: portable document + store metadata.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"subsystem-model.d.ts","sourceRoot":"","sources":["../../src/types/subsystem-model.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH;;0CAE0C;AAC1C,MAAM,MAAM,kBAAkB,GAC1B,OAAO,GACP,UAAU,GACV,QAAQ,GACR,WAAW,GACX,YAAY,GACZ,MAAM,GACN,OAAO,GACP,UAAU,GACV,eAAe,CAAC;AAEpB,oEAAoE;AACpE,MAAM,MAAM,sBAAsB,GAAG,OAAO,GAAG,SAAS,CAAC;AAEzD;;;;GAIG;AACH,MAAM,MAAM,mBAAmB,GAAG,MAAM,CAAC;AAEzC;;;;GAIG;AACH,MAAM,MAAM,kBAAkB,GAAG,MAAM,CAAC;AAExC;;;;GAIG;AACH,MAAM,MAAM,mBAAmB,GAAG,MAAM,CAAC;AAEzC;;;GAGG;AACH,MAAM,MAAM,qBAAqB,GAC7B,SAAS,GACT,UAAU,GACV,YAAY,GACZ,UAAU,GACV,QAAQ,GACR,YAAY,CAAC;AAEjB;;;GAGG;AACH,MAAM,MAAM,6BAA6B,GACrC,OAAO,GACP,MAAM,GACN,OAAO,GACP,UAAU,GACV,QAAQ,GACR,OAAO,GACP,SAAS,GACT,gBAAgB,CAAC;AAErB;;;GAGG;AACH,MAAM,MAAM,sBAAsB,GAC9B,qBAAqB,GACrB,6BAA6B,CAAC;AAElC,MAAM,MAAM,8BAA8B,GAAG,UAAU,GAAG,UAAU,CAAC;AAErE,MAAM,MAAM,sBAAsB,GAC9B,SAAS,GACT,MAAM,GACN,QAAQ,GACR,MAAM,GACN,aAAa,GACb,QAAQ,GACR,SAAS,CAAC;AAEd,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,sBAAsB,CAAC;IAC7B,0DAA0D;IAC1D,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,mEAAmE;AACnE,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"subsystem-model.d.ts","sourceRoot":"","sources":["../../src/types/subsystem-model.ts"],"names":[],"mappings":"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"}
|
|
@@ -53,6 +53,10 @@ function toPortableDocument(doc) {
|
|
|
53
53
|
out.description = doc.description;
|
|
54
54
|
if (doc.walkthroughs)
|
|
55
55
|
out.walkthroughs = doc.walkthroughs;
|
|
56
|
+
if (doc.createdAtCommits)
|
|
57
|
+
out.createdAtCommits = doc.createdAtCommits;
|
|
58
|
+
if (doc.verifiedAtCommits)
|
|
59
|
+
out.verifiedAtCommits = doc.verifiedAtCommits;
|
|
56
60
|
return out;
|
|
57
61
|
}
|
|
58
62
|
exports.toPortableDocument = toPortableDocument;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"subsystem-model.js","sourceRoot":"","sources":["../../src/types/subsystem-model.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;;;
|
|
1
|
+
{"version":3,"file":"subsystem-model.js","sourceRoot":"","sources":["../../src/types/subsystem-model.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -44,6 +44,20 @@
|
|
|
44
44
|
"items": {
|
|
45
45
|
"$ref": "#/$defs/walkthrough"
|
|
46
46
|
}
|
|
47
|
+
},
|
|
48
|
+
"createdAtCommits": {
|
|
49
|
+
"type": "object",
|
|
50
|
+
"description": "The commit each referenced repo was at when the model was created — the coordinate system for every file:line. Keyed by purl repo key (purl with fragment stripped), value a commit sha. Immutable after create.",
|
|
51
|
+
"additionalProperties": {
|
|
52
|
+
"type": "string"
|
|
53
|
+
}
|
|
54
|
+
},
|
|
55
|
+
"verifiedAtCommits": {
|
|
56
|
+
"type": "object",
|
|
57
|
+
"description": "The commit each referenced repo was at when a full audit last passed against a clean referenced state. Same keying as createdAtCommits. Absent until an audit earns it.",
|
|
58
|
+
"additionalProperties": {
|
|
59
|
+
"type": "string"
|
|
60
|
+
}
|
|
47
61
|
}
|
|
48
62
|
},
|
|
49
63
|
"$defs": {
|
|
@@ -389,24 +403,6 @@
|
|
|
389
403
|
"capturedAt": {
|
|
390
404
|
"type": "string",
|
|
391
405
|
"description": "ISO timestamp when this ref was recorded."
|
|
392
|
-
},
|
|
393
|
-
"revision": {
|
|
394
|
-
"type": "object",
|
|
395
|
-
"required": [
|
|
396
|
-
"headSha"
|
|
397
|
-
],
|
|
398
|
-
"additionalProperties": false,
|
|
399
|
-
"properties": {
|
|
400
|
-
"headSha": {
|
|
401
|
-
"type": "string"
|
|
402
|
-
},
|
|
403
|
-
"dirtyHash": {
|
|
404
|
-
"type": [
|
|
405
|
-
"string",
|
|
406
|
-
"null"
|
|
407
|
-
]
|
|
408
|
-
}
|
|
409
|
-
}
|
|
410
406
|
}
|
|
411
407
|
}
|
|
412
408
|
},
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { describe, expect, test } from "bun:test";
|
|
2
|
+
import { readFileSync } from "node:fs";
|
|
3
|
+
import { resolve } from "node:path";
|
|
4
|
+
import { toPortableDocument } from "./subsystem-model";
|
|
5
|
+
|
|
6
|
+
const schema = JSON.parse(
|
|
7
|
+
readFileSync(
|
|
8
|
+
resolve(import.meta.dir, "../../schemas/subsystem-model.schema.json"),
|
|
9
|
+
"utf8",
|
|
10
|
+
),
|
|
11
|
+
) as {
|
|
12
|
+
properties: Record<string, unknown>;
|
|
13
|
+
$defs: Record<string, { properties?: Record<string, unknown> }>;
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
describe("toPortableDocument", () => {
|
|
17
|
+
test("keeps per-purl commit provenance (the coordinate for file:line)", () => {
|
|
18
|
+
const portable = toPortableDocument({
|
|
19
|
+
title: "t",
|
|
20
|
+
components: [],
|
|
21
|
+
relations: [],
|
|
22
|
+
createdAtCommits: { "pkg:github/a/b": "abc" },
|
|
23
|
+
verifiedAtCommits: { "pkg:github/a/b": "def" },
|
|
24
|
+
} as unknown as Parameters<typeof toPortableDocument>[0]);
|
|
25
|
+
expect(portable.createdAtCommits).toEqual({ "pkg:github/a/b": "abc" });
|
|
26
|
+
expect(portable.verifiedAtCommits).toEqual({ "pkg:github/a/b": "def" });
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
test("still drops store metadata", () => {
|
|
30
|
+
const portable = toPortableDocument({
|
|
31
|
+
title: "t",
|
|
32
|
+
components: [],
|
|
33
|
+
relations: [],
|
|
34
|
+
id: "sg-1",
|
|
35
|
+
createdAt: "now",
|
|
36
|
+
verification: {},
|
|
37
|
+
lastOpenedAt: "now",
|
|
38
|
+
} as unknown as Parameters<typeof toPortableDocument>[0]);
|
|
39
|
+
expect("id" in portable).toBe(false);
|
|
40
|
+
expect("verification" in portable).toBe(false);
|
|
41
|
+
expect("lastOpenedAt" in portable).toBe(false);
|
|
42
|
+
});
|
|
43
|
+
});
|
|
44
|
+
|
|
45
|
+
describe("subsystem-model schema", () => {
|
|
46
|
+
test("declares the per-purl commit maps", () => {
|
|
47
|
+
expect(schema.properties.createdAtCommits).toBeDefined();
|
|
48
|
+
expect(schema.properties.verifiedAtCommits).toBeDefined();
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
test("no longer carries per-declaration revision (superseded by the model-level pin)", () => {
|
|
52
|
+
expect(schema.$defs.declarationRef?.properties?.revision).toBeUndefined();
|
|
53
|
+
});
|
|
54
|
+
});
|
|
@@ -117,10 +117,6 @@ export interface SubsystemDeclarationRef {
|
|
|
117
117
|
lineHash: string;
|
|
118
118
|
graphifyNodeId?: string;
|
|
119
119
|
capturedAt: string;
|
|
120
|
-
revision?: {
|
|
121
|
-
headSha: string;
|
|
122
|
-
dirtyHash?: string | null;
|
|
123
|
-
};
|
|
124
120
|
}
|
|
125
121
|
|
|
126
122
|
export interface SubsystemParamInfo {
|
|
@@ -403,6 +399,13 @@ export interface SubsystemWalkthrough {
|
|
|
403
399
|
* No host paths, provenance, document-level repo, store ids, or verification.
|
|
404
400
|
* Repo identity lives on each component's `purl`.
|
|
405
401
|
*/
|
|
402
|
+
/**
|
|
403
|
+
* A pinned commit for one referenced repo. Keyed by `purlRepoKey` (the purl
|
|
404
|
+
* with its fragment stripped). Commit-only — a dirty tree has no reproducible
|
|
405
|
+
* name and is never recorded as a coordinate.
|
|
406
|
+
*/
|
|
407
|
+
export type PurlCommit = string;
|
|
408
|
+
|
|
406
409
|
export interface SubsystemModelDocument {
|
|
407
410
|
/**
|
|
408
411
|
* Optional pointer to the JSON Schema that describes this file. Lets editors
|
|
@@ -417,6 +420,17 @@ export interface SubsystemModelDocument {
|
|
|
417
420
|
relations: SubsystemRelation[];
|
|
418
421
|
/** Runtime walkthroughs (ordered hops with sites). */
|
|
419
422
|
walkthroughs?: SubsystemWalkthrough[];
|
|
423
|
+
/**
|
|
424
|
+
* The commit each referenced repo was at when the model was created. The
|
|
425
|
+
* coordinate system for every `file:line` in the document: without it, a
|
|
426
|
+
* line pointer is ambiguous across commits. Immutable after create.
|
|
427
|
+
*/
|
|
428
|
+
createdAtCommits?: Record<string, PurlCommit>;
|
|
429
|
+
/**
|
|
430
|
+
* The commit each referenced repo was at when a full audit last passed
|
|
431
|
+
* against a clean referenced state. Absent until an audit earns it.
|
|
432
|
+
*/
|
|
433
|
+
verifiedAtCommits?: Record<string, PurlCommit>;
|
|
420
434
|
}
|
|
421
435
|
|
|
422
436
|
/**
|
|
@@ -469,6 +483,8 @@ export function toPortableDocument(
|
|
|
469
483
|
if (doc.$schema) out.$schema = doc.$schema;
|
|
470
484
|
if (doc.description) out.description = doc.description;
|
|
471
485
|
if (doc.walkthroughs) out.walkthroughs = doc.walkthroughs;
|
|
486
|
+
if (doc.createdAtCommits) out.createdAtCommits = doc.createdAtCommits;
|
|
487
|
+
if (doc.verifiedAtCommits) out.verifiedAtCommits = doc.verifiedAtCommits;
|
|
472
488
|
return out;
|
|
473
489
|
}
|
|
474
490
|
|