@intentset/architecture 0.1.0 → 0.2.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/check.d.ts +18 -1
- package/dist/check.d.ts.map +1 -1
- package/dist/check.js +27 -2
- package/dist/check.js.map +1 -1
- package/dist/claims.d.ts +2 -1
- package/dist/claims.d.ts.map +1 -1
- package/dist/claims.js +7 -2
- package/dist/claims.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/ownership.d.ts +3 -1
- package/dist/ownership.d.ts.map +1 -1
- package/dist/ownership.js +5 -1
- package/dist/ownership.js.map +1 -1
- package/package.json +2 -2
- package/src/check.ts +46 -2
- package/src/claims.ts +7 -2
- package/src/index.ts +1 -0
- package/src/ownership.ts +8 -2
package/dist/check.d.ts
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
* migration mode. What could not be checked is listed in `unresolved` and,
|
|
12
12
|
* for imports, reported as a TS004 warning: never a pass (invariant 6).
|
|
13
13
|
*/
|
|
14
|
-
import { type Diagnostic, type Graph, type Level, type Registries } from "@intentset/core";
|
|
14
|
+
import { type Diagnostic, type Graph, type Level, type OwnershipEntry, type OwnershipReportSection, type Registries } from "@intentset/core";
|
|
15
15
|
import { type BaselineEntry, type Mode } from "./baseline.ts";
|
|
16
16
|
import { type ArchitectureConfig } from "./config.ts";
|
|
17
17
|
import { type ExceptionRecord } from "./exceptions.ts";
|
|
@@ -64,10 +64,27 @@ export interface ArchitectureResult {
|
|
|
64
64
|
summary: ArchitectureSummary;
|
|
65
65
|
/** The resolved import graph, for reports and impact views. */
|
|
66
66
|
edges: ImportEdge[];
|
|
67
|
+
/**
|
|
68
|
+
* Where every file falls, sorted by path: each production file's region and
|
|
69
|
+
* owner, every test file with the slice its claims match, and nothing for a
|
|
70
|
+
* file in the external region (root configuration, scripts, documents that
|
|
71
|
+
* nothing claims). Out-of-scope files are attributed too: scope decides what
|
|
72
|
+
* is reported, not who owns what.
|
|
73
|
+
*/
|
|
74
|
+
ownership: OwnershipEntry[];
|
|
67
75
|
}
|
|
68
76
|
/** VSA §2: the rules that are review assertions, snapshot diffs or contract diffs rather than structure. */
|
|
69
77
|
export declare const REVIEW_REQUIRED: string[];
|
|
70
78
|
export declare function checkArchitecture(graph: Graph, registries: Registries, tree: {
|
|
71
79
|
files: ReadonlyMap<string, string>;
|
|
72
80
|
}, options?: CheckOptions): ArchitectureResult;
|
|
81
|
+
/**
|
|
82
|
+
* `reports.ownership` for the export (spec/export.md §4.4): the check's file
|
|
83
|
+
* attribution, stamped with the snapshot it was read at, so a consumer can
|
|
84
|
+
* turn a file from a stack frame into a slice, its behaviors and its owner.
|
|
85
|
+
*/
|
|
86
|
+
export declare function ownershipReport(result: ArchitectureResult, snapshot: {
|
|
87
|
+
commit: string | null;
|
|
88
|
+
graphHash: string;
|
|
89
|
+
}): OwnershipReportSection;
|
|
73
90
|
//# sourceMappingURL=check.d.ts.map
|
package/dist/check.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../src/check.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,
|
|
1
|
+
{"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../src/check.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,EACL,KAAK,UAAU,EACf,KAAK,KAAK,EACV,KAAK,KAAK,EACV,KAAK,cAAc,EACnB,KAAK,sBAAsB,EAC3B,KAAK,UAAU,EAEhB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAiB,KAAK,aAAa,EAAE,KAAK,IAAI,EAAE,MAAM,eAAe,CAAC;AAG7E,OAAO,EAA4B,KAAK,kBAAkB,EAAyC,MAAM,aAAa,CAAC;AAEvH,OAAO,EAAmB,KAAK,eAAe,EAAuC,MAAM,iBAAiB,CAAC;AAE7G,OAAO,EAAoB,KAAK,UAAU,EAAE,MAAM,cAAc,CAAC;AAOjE,MAAM,WAAW,YAAY;IAC3B,sEAAsE;IACtE,MAAM,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACrC,kEAAkE;IAClE,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,8FAA8F;IAC9F,UAAU,CAAC,EAAE,SAAS,CAAC,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC;IACpE,QAAQ,CAAC,EAAE,SAAS,aAAa,EAAE,CAAC;IACpC,gFAAgF;IAChF,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,0EAA0E;IAC1E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,+FAA+F;IAC/F,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,IAAI,CAAC;IACX,KAAK,EAAE,KAAK,CAAC;IACb,mCAAmC;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,qDAAqD;IACrD,YAAY,EAAE,MAAM,CAAC;IACrB,iGAAiG;IACjG,cAAc,EAAE,MAAM,CAAC;IACvB,4FAA4F;IAC5F,UAAU,EAAE,MAAM,CAAC;IACnB,yEAAyE;IACzE,KAAK,EAAE,MAAM,CAAC;IACd,oDAAoD;IACpD,eAAe,EAAE,MAAM,CAAC;IACxB,yDAAyD;IACzD,MAAM,EAAE,MAAM,CAAC;IACf,4DAA4D;IAC5D,QAAQ,EAAE,MAAM,CAAC;IACjB,2EAA2E;IAC3E,SAAS,EAAE,MAAM,CAAC;IAClB,gEAAgE;IAChE,aAAa,EAAE,MAAM,CAAC;IACtB,6DAA6D;IAC7D,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,gFAAgF;IAChF,cAAc,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED,MAAM,WAAW,kBAAkB;IACjC,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,OAAO,EAAE,mBAAmB,CAAC;IAC7B,+DAA+D;IAC/D,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB;;;;;;OAMG;IACH,SAAS,EAAE,cAAc,EAAE,CAAC;CAC7B;AAED,4GAA4G;AAC5G,eAAO,MAAM,eAAe,UAO3B,CAAC;AAMF,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,KAAK,EACZ,UAAU,EAAE,UAAU,EACtB,IAAI,EAAE;IAAE,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,EAC5C,OAAO,GAAE,YAAiB,GACzB,kBAAkB,CA4GpB;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,kBAAkB,EAC1B,QAAQ,EAAE;IAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GACrD,sBAAsB,CAOxB"}
|
package/dist/check.js
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
* migration mode. What could not be checked is listed in `unresolved` and,
|
|
12
12
|
* for imports, reported as a TS004 warning: never a pass (invariant 6).
|
|
13
13
|
*/
|
|
14
|
-
import { sortDiagnostics } from "@intentset/core";
|
|
14
|
+
import { sortDiagnostics, } from "@intentset/core";
|
|
15
15
|
import { applyBaseline } from "./baseline.js";
|
|
16
16
|
import { checkBoundaries, checkUnclassified } from "./boundaries.js";
|
|
17
17
|
import { checkClaims } from "./claims.js";
|
|
@@ -125,6 +125,31 @@ export function checkArchitecture(graph, registries, tree, options = {}) {
|
|
|
125
125
|
unresolved: [...new Set(unresolved)].sort(compareStrings),
|
|
126
126
|
reviewRequired: [...REVIEW_REQUIRED],
|
|
127
127
|
};
|
|
128
|
-
|
|
128
|
+
const ownership = [];
|
|
129
|
+
for (const path of model.files.keys()) {
|
|
130
|
+
if (model.isTest(path)) {
|
|
131
|
+
ownership.push({ path, region: "test", owner: model.testOwner(path) });
|
|
132
|
+
continue;
|
|
133
|
+
}
|
|
134
|
+
const region = model.regionOf(path);
|
|
135
|
+
if (region.kind === "external")
|
|
136
|
+
continue;
|
|
137
|
+
ownership.push({ path, region: region.kind, owner: region.owner ?? null });
|
|
138
|
+
}
|
|
139
|
+
ownership.sort((a, b) => compareStrings(a.path, b.path));
|
|
140
|
+
return { diagnostics, summary, edges: imports.edges, ownership };
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* `reports.ownership` for the export (spec/export.md §4.4): the check's file
|
|
144
|
+
* attribution, stamped with the snapshot it was read at, so a consumer can
|
|
145
|
+
* turn a file from a stack frame into a slice, its behaviors and its owner.
|
|
146
|
+
*/
|
|
147
|
+
export function ownershipReport(result, snapshot) {
|
|
148
|
+
return {
|
|
149
|
+
commit: snapshot.commit,
|
|
150
|
+
graphHash: snapshot.graphHash,
|
|
151
|
+
files: result.ownership.map((entry) => ({ ...entry })),
|
|
152
|
+
withheld: 0,
|
|
153
|
+
};
|
|
129
154
|
}
|
|
130
155
|
//# sourceMappingURL=check.js.map
|
package/dist/check.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check.js","sourceRoot":"","sources":["../src/check.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,
|
|
1
|
+
{"version":3,"file":"check.js","sourceRoot":"","sources":["../src/check.ts"],"names":[],"mappings":"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"}
|
package/dist/claims.d.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Path and resource ownership (VSA §3, §7; VSA009; profile AMP004).
|
|
3
3
|
*
|
|
4
|
-
* - A nonempty claim that matches no file is VSA009
|
|
4
|
+
* - A nonempty claim that matches no file is VSA009: a warning while the
|
|
5
|
+
* slice is draft (planned, not yet owned), an error once it is not.
|
|
5
6
|
* - Two slices resolving one file is VSA009, once per pair of claims, naming
|
|
6
7
|
* both slices, both claims and the files.
|
|
7
8
|
* - A file claimed by a slice and recorded as a registry resource has two
|
package/dist/claims.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claims.d.ts","sourceRoot":"","sources":["../src/claims.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"claims.d.ts","sourceRoot":"","sources":["../src/claims.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,OAAO,EAAE,KAAK,KAAK,EAAkB,MAAM,iBAAiB,CAAC;AAC7D,OAAO,EAAE,KAAK,OAAO,EAA6B,MAAM,cAAc,CAAC;AAGvE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAE1C,wBAAgB,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,GAAG,OAAO,EAAE,CA+MzF"}
|
package/dist/claims.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Path and resource ownership (VSA §3, §7; VSA009; profile AMP004).
|
|
3
3
|
*
|
|
4
|
-
* - A nonempty claim that matches no file is VSA009
|
|
4
|
+
* - A nonempty claim that matches no file is VSA009: a warning while the
|
|
5
|
+
* slice is draft (planned, not yet owned), an error once it is not.
|
|
5
6
|
* - Two slices resolving one file is VSA009, once per pair of claims, naming
|
|
6
7
|
* both slices, both claims and the files.
|
|
7
8
|
* - A file claimed by a slice and recorded as a registry resource has two
|
|
@@ -41,12 +42,16 @@ export function checkClaims(model, graph, registriesPath) {
|
|
|
41
42
|
return;
|
|
42
43
|
}
|
|
43
44
|
if (slice.claimFiles[i].length === 0) {
|
|
45
|
+
const planned = slice.artifact.meta.status === "draft";
|
|
44
46
|
findings.push(finding({
|
|
45
47
|
code: "VSA009",
|
|
48
|
+
...(planned ? { severity: "warning" } : {}),
|
|
46
49
|
artifact: slice.id,
|
|
47
50
|
path: slice.path,
|
|
48
51
|
field,
|
|
49
|
-
message:
|
|
52
|
+
message: planned
|
|
53
|
+
? `The ${claim.kind} claim ${claim.path} of draft slice ${slice.id} matches no file yet; it is planned, and an error once the slice leaves draft.`
|
|
54
|
+
: `The ${claim.kind} claim ${claim.path} of ${slice.id} matches no file in the repository.`,
|
|
50
55
|
remediation: "Correct the path, add the files it promises, or remove the claim; an empty claim is not ownership (VSA §3).",
|
|
51
56
|
}));
|
|
52
57
|
}
|
package/dist/claims.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claims.js","sourceRoot":"","sources":["../src/claims.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"claims.js","sourceRoot":"","sources":["../src/claims.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,OAAO,EAAc,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAC7D,OAAO,EAAgB,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACvE,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAGhE,MAAM,UAAU,WAAW,CAAC,KAAY,EAAE,KAAY,EAAE,cAAsB;IAC5E,MAAM,QAAQ,GAAc,EAAE,CAAC;IAE/B,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;QACjC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;YACrC,MAAM,KAAK,GAAG,2BAA2B,CAAC,OAAO,CAAC;YAClD,MAAM,GAAG,GAAG,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACxC,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;gBACjB,IAAI,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;oBACxC,QAAQ,CAAC,IAAI,CACX,OAAO,CAAC;wBACN,IAAI,EAAE,QAAQ;wBACd,QAAQ,EAAE,KAAK,CAAC,EAAE;wBAClB,IAAI,EAAE,KAAK,CAAC,IAAI;wBAChB,KAAK;wBACL,OAAO,EAAE,SAAS,CAAC,OAAO,KAAK,CAAC,EAAE,KAAK,KAAK,CAAC,IAAI,KAAK,GAAG,8BAA8B;wBACvF,WAAW,EAAE,2FAA2F;qBACzG,CAAC,CACH,CAAC;gBACJ,CAAC;gBACD,OAAO;YACT,CAAC;YACD,IAAI,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACrC,MAAM,OAAO,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,KAAK,OAAO,CAAC;gBACvD,QAAQ,CAAC,IAAI,CACX,OAAO,CAAC;oBACN,IAAI,EAAE,QAAQ;oBACd,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,SAAkB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBACpD,QAAQ,EAAE,KAAK,CAAC,EAAE;oBAClB,IAAI,EAAE,KAAK,CAAC,IAAI;oBAChB,KAAK;oBACL,OAAO,EAAE,OAAO;wBACd,CAAC,CAAC,OAAO,KAAK,CAAC,IAAI,UAAU,KAAK,CAAC,IAAI,mBAAmB,KAAK,CAAC,EAAE,gFAAgF;wBAClJ,CAAC,CAAC,OAAO,KAAK,CAAC,IAAI,UAAU,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,EAAE,qCAAqC;oBAC7F,WAAW,EACT,6GAA6G;iBAChH,CAAC,CACH,CAAC;YACJ,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED,wDAAwD;IACxD,MAAM,KAAK,GAAG,IAAI,GAAG,EAGlB,CAAC;IACJ,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7F,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACvC,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC3C,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK;oBAAE,SAAS;gBAClD,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;gBAC5G,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;gBAC1D,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;gBACpD,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACvB,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YACxB,CAAC;QACH,CAAC;IACH,CAAC;IACD,KAAK,MAAM,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC;QACzD,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAE,CAAC;QACxC,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAE,CAAC;QAC7C,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAE,CAAC;QAC7C,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC;QAChD,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC;QAChD,QAAQ,CAAC,IAAI,CACX,OAAO,CAAC;YACN,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,CAAC,CAAC,KAAK;YACjB,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;YACd,OAAO,EAAE,GAAG,CAAC,CAAC,KAAK,WAAW,MAAM,SAAS,CAAC,CAAC,KAAK,WAAW,MAAM,kBAAkB,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,QAAQ,CAAC,KAAK,CAAC,GAAG;YAC1I,WAAW,EAAE,wHAAwH;YACrI,KAAK,EAAE,CAAC,GAAG,KAAK,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC;YAC3C,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;SACxC,CAAC,CACH,CAAC;IACJ,CAAC;IAED,4EAA4E;IAC5E,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;QACnC,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;QACxC,MAAM,KAAK,GAAG,cAAc,KAAK,OAAO,CAAC;QACzC,MAAM,GAAG,GAAG,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC3C,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YACjB,QAAQ,CAAC,IAAI,CACX,OAAO,CAAC;gBACN,IAAI,EAAE,QAAQ;gBACd,QAAQ,EAAE,IAAI;gBACd,IAAI,EAAE,cAAc;gBACpB,KAAK;gBACL,OAAO,EAAE,YAAY,QAAQ,CAAC,EAAE,iBAAiB,QAAQ,CAAC,IAAI,WAAW,GAAG,GAAG;gBAC/E,WAAW,EAAE,8FAA8F;aAC5G,CAAC,CACH,CAAC;YACF,SAAS;QACX,CAAC;QACD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,QAAQ,CAAC,IAAI,CACX,OAAO,CAAC;gBACN,IAAI,EAAE,QAAQ;gBACd,QAAQ,EAAE,IAAI;gBACd,IAAI,EAAE,cAAc;gBACpB,KAAK;gBACL,OAAO,EAAE,YAAY,QAAQ,CAAC,EAAE,qBAAqB,QAAQ,CAAC,IAAI,4CAA4C;gBAC9G,WAAW,EAAE,wFAAwF;aACtG,CAAC,CACH,CAAC;QACJ,CAAC;QACD,MAAM,SAAS,GAAG,IAAI,GAAG,EAAoB,CAAC;QAC9C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;gBACtD,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;gBAC9C,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;oBAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC1C,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YACnC,CAAC;QACH,CAAC;QACD,KAAK,MAAM,OAAO,IAAI,CAAC,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC;YACjE,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,OAAO,CAAE,CAAC;YACxC,QAAQ,CAAC,IAAI,CACX,OAAO,CAAC;gBACN,IAAI,EAAE,QAAQ;gBACd,QAAQ,EAAE,OAAO;gBACjB,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;gBAChB,OAAO,EAAE,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,yBAAyB,QAAQ,CAAC,EAAE,cAAc,QAAQ,CAAC,KAAK,yBAAyB,OAAO,GAAG;gBACvK,WAAW,EAAE,mDAAmD,OAAO,SAAS,QAAQ,CAAC,EAAE,sEAAsE;gBACjK,KAAK,EAAE,CAAC,GAAG,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAE,CAAC,IAAI,CAAC;gBACvD,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,CAAC,EAAE,EAAE,CAAC;aAC5C,CAAC,CACH,CAAC;QACJ,CAAC;QAED,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC,EAAE,EAAE;YACzC,MAAM,QAAQ,GAAG,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAC/C,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;gBAC7D,QAAQ,CAAC,IAAI,CACX,OAAO,CAAC;oBACN,IAAI,EAAE,QAAQ;oBACd,QAAQ,EAAE,IAAI;oBACd,IAAI,EAAE,cAAc;oBACpB,KAAK,EAAE,cAAc,KAAK,cAAc,CAAC,EAAE;oBAC3C,OAAO,EAAE,YAAY,QAAQ,CAAC,EAAE,uBAAuB,QAAQ,sCAAsC;oBACrG,WAAW,EAAE,0FAA0F;iBACxG,CAAC,CACH,CAAC;YACJ,CAAC;iBAAM,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,aAAa,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;gBAC7E,QAAQ,CAAC,IAAI,CACX,OAAO,CAAC;oBACN,IAAI,EAAE,QAAQ;oBACd,QAAQ,EAAE,SAAS;oBACnB,QAAQ,EAAE,QAAQ;oBAClB,IAAI,EAAE,cAAc;oBACpB,KAAK,EAAE,cAAc,KAAK,cAAc,CAAC,EAAE;oBAC3C,OAAO,EAAE,YAAY,QAAQ,CAAC,EAAE,UAAU,QAAQ,uBAAuB,QAAQ,qCAAqC;oBACtH,WAAW,EAAE,OAAO,QAAQ,CAAC,EAAE,4BAA4B,QAAQ,eAAe,QAAQ,iCAAiC;iBAC5H,CAAC,CACH,CAAC;YACJ,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IACD,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC/F,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;QACjC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE;YACzC,MAAM,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACtC,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBAAE,OAAO;YAC5E,QAAQ,CAAC,IAAI,CACX,OAAO,CAAC;gBACN,IAAI,EAAE,QAAQ;gBACd,QAAQ,EAAE,SAAS;gBACnB,QAAQ,EAAE,KAAK,CAAC,EAAE;gBAClB,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,KAAK,EAAE,kCAAkC,CAAC,EAAE;gBAC5C,OAAO,EAAE,GAAG,KAAK,CAAC,EAAE,kBAAkB,EAAE,qEAAqE;gBAC7G,WAAW,EAAE,OAAO,KAAK,CAAC,EAAE,wBAAwB,EAAE,mEAAmE;aAC1H,CAAC,CACH,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IAED,2CAA2C;IAC3C,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;QACpC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;YAAE,SAAS;QACpD,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACpC,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC9B,QAAQ,CAAC,IAAI,CACX,OAAO,CAAC;gBACN,IAAI,EAAE,QAAQ;gBACd,QAAQ,EAAE,IAAI;gBACd,IAAI,EAAE,IAAI;gBACV,OAAO,EAAE,gBAAgB,IAAI,sDAAsD;gBACnF,WAAW,EACT,iIAAiI;aACpI,CAAC,CACH,CAAC;QACJ,CAAC;aAAM,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YACrC,QAAQ,CAAC,IAAI,CACX,OAAO,CAAC;gBACN,IAAI,EAAE,QAAQ;gBACd,QAAQ,EAAE,IAAI;gBACd,IAAI,EAAE,IAAI;gBACV,OAAO,EAAE,eAAe,IAAI,sFAAsF;gBAClH,WAAW,EAAE,2FAA2F;aACzG,CAAC,CACH,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
*/
|
|
7
7
|
export { applyBaseline, type BaselineEntry, fingerprint, type Mode, parseBaseline, plainMessage, writeBaseline, } from "./baseline.ts";
|
|
8
8
|
export { type BoundaryResult, checkBoundaries, checkUnclassified, type SliceEdge } from "./boundaries.ts";
|
|
9
|
-
export { type ArchitectureResult, type ArchitectureSummary, type CheckOptions, checkArchitecture, REVIEW_REQUIRED, } from "./check.ts";
|
|
9
|
+
export { type ArchitectureResult, type ArchitectureSummary, type CheckOptions, checkArchitecture, ownershipReport, REVIEW_REQUIRED, } from "./check.ts";
|
|
10
10
|
export { checkClaims } from "./claims.ts";
|
|
11
11
|
export { ARCHITECTURE_CONFIG_PATH, type ArchitectureConfig, DEFAULT_ARCHITECTURE_CONFIG, readArchitectureConfig, resolveConfig, } from "./config.ts";
|
|
12
12
|
export { checkDependencies, shortestCycle, stronglyConnected } from "./dependencies.ts";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EACL,aAAa,EACb,KAAK,aAAa,EAClB,WAAW,EACX,KAAK,IAAI,EACT,aAAa,EACb,YAAY,EACZ,aAAa,GACd,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,KAAK,cAAc,EAAE,eAAe,EAAE,iBAAiB,EAAE,KAAK,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC1G,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACxB,KAAK,YAAY,EACjB,iBAAiB,EACjB,eAAe,GAChB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EACL,wBAAwB,EACxB,KAAK,kBAAkB,EACvB,2BAA2B,EAC3B,sBAAsB,EACtB,aAAa,GACd,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACxF,OAAO,EACL,QAAQ,EACR,eAAe,EACf,MAAM,EACN,mBAAmB,EACnB,KAAK,eAAe,EACpB,mBAAmB,EACnB,cAAc,GACf,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,KAAK,UAAU,EAAE,cAAc,EAAE,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAC/E,YAAY,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,KAAK,UAAU,EAAE,KAAK,WAAW,EAAE,KAAK,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAC1G,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC/F,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACtF,OAAO,EACL,YAAY,EACZ,UAAU,EACV,KAAK,KAAK,EACV,KAAK,MAAM,EACX,KAAK,UAAU,EACf,WAAW,EACX,KAAK,SAAS,GACf,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,KAAK,UAAU,EAAE,QAAQ,EAAE,KAAK,GAAG,EAAE,MAAM,cAAc,CAAC;AACnE,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,KAAK,QAAQ,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EACL,aAAa,EACb,KAAK,aAAa,EAClB,WAAW,EACX,KAAK,IAAI,EACT,aAAa,EACb,YAAY,EACZ,aAAa,GACd,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,KAAK,cAAc,EAAE,eAAe,EAAE,iBAAiB,EAAE,KAAK,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC1G,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACxB,KAAK,YAAY,EACjB,iBAAiB,EACjB,eAAe,EACf,eAAe,GAChB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EACL,wBAAwB,EACxB,KAAK,kBAAkB,EACvB,2BAA2B,EAC3B,sBAAsB,EACtB,aAAa,GACd,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACxF,OAAO,EACL,QAAQ,EACR,eAAe,EACf,MAAM,EACN,mBAAmB,EACnB,KAAK,eAAe,EACpB,mBAAmB,EACnB,cAAc,GACf,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,KAAK,UAAU,EAAE,cAAc,EAAE,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAC/E,YAAY,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,KAAK,UAAU,EAAE,KAAK,WAAW,EAAE,KAAK,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAC1G,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC/F,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACtF,OAAO,EACL,YAAY,EACZ,UAAU,EACV,KAAK,KAAK,EACV,KAAK,MAAM,EACX,KAAK,UAAU,EACf,WAAW,EACX,KAAK,SAAS,GACf,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,KAAK,UAAU,EAAE,QAAQ,EAAE,KAAK,GAAG,EAAE,MAAM,cAAc,CAAC;AACnE,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,KAAK,QAAQ,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
*/
|
|
7
7
|
export { applyBaseline, fingerprint, parseBaseline, plainMessage, writeBaseline, } from "./baseline.js";
|
|
8
8
|
export { checkBoundaries, checkUnclassified } from "./boundaries.js";
|
|
9
|
-
export { checkArchitecture, REVIEW_REQUIRED, } from "./check.js";
|
|
9
|
+
export { checkArchitecture, ownershipReport, REVIEW_REQUIRED, } from "./check.js";
|
|
10
10
|
export { checkClaims } from "./claims.js";
|
|
11
11
|
export { ARCHITECTURE_CONFIG_PATH, DEFAULT_ARCHITECTURE_CONFIG, readArchitectureConfig, resolveConfig, } from "./config.js";
|
|
12
12
|
export { checkDependencies, shortestCycle, stronglyConnected } from "./dependencies.js";
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EACL,aAAa,EAEb,WAAW,EAEX,aAAa,EACb,YAAY,EACZ,aAAa,GACd,MAAM,eAAe,CAAC;AACvB,OAAO,EAAuB,eAAe,EAAE,iBAAiB,EAAkB,MAAM,iBAAiB,CAAC;AAC1G,OAAO,EAIL,iBAAiB,EACjB,eAAe,GAChB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EACL,wBAAwB,EAExB,2BAA2B,EAC3B,sBAAsB,EACtB,aAAa,GACd,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACxF,OAAO,EACL,QAAQ,EACR,eAAe,EACf,MAAM,EACN,mBAAmB,EAEnB,mBAAmB,EACnB,cAAc,GACf,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAmB,cAAc,EAAkB,MAAM,cAAc,CAAC;AAE/E,OAAO,EAAE,gBAAgB,EAA4D,MAAM,cAAc,CAAC;AAC1G,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC/F,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACtF,OAAO,EACL,YAAY,EACZ,UAAU,EAIV,WAAW,GAEZ,MAAM,cAAc,CAAC;AACtB,OAAO,EAAmB,QAAQ,EAAY,MAAM,cAAc,CAAC;AACnE,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAiB,SAAS,EAAE,MAAM,eAAe,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EACL,aAAa,EAEb,WAAW,EAEX,aAAa,EACb,YAAY,EACZ,aAAa,GACd,MAAM,eAAe,CAAC;AACvB,OAAO,EAAuB,eAAe,EAAE,iBAAiB,EAAkB,MAAM,iBAAiB,CAAC;AAC1G,OAAO,EAIL,iBAAiB,EACjB,eAAe,EACf,eAAe,GAChB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EACL,wBAAwB,EAExB,2BAA2B,EAC3B,sBAAsB,EACtB,aAAa,GACd,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACxF,OAAO,EACL,QAAQ,EACR,eAAe,EACf,MAAM,EACN,mBAAmB,EAEnB,mBAAmB,EACnB,cAAc,GACf,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAmB,cAAc,EAAkB,MAAM,cAAc,CAAC;AAE/E,OAAO,EAAE,gBAAgB,EAA4D,MAAM,cAAc,CAAC;AAC1G,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC/F,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACtF,OAAO,EACL,YAAY,EACZ,UAAU,EAIV,WAAW,GAEZ,MAAM,cAAc,CAAC;AACtB,OAAO,EAAmB,QAAQ,EAAY,MAAM,cAAc,CAAC;AACnE,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAiB,SAAS,EAAE,MAAM,eAAe,CAAC"}
|
package/dist/ownership.d.ts
CHANGED
|
@@ -10,7 +10,9 @@
|
|
|
10
10
|
* inside one of the slice's own source claims, and no two lie in the same
|
|
11
11
|
* package (the nearest directory above holding a package.json, or the
|
|
12
12
|
* repository root): a slice has one public surface per package it spans. An
|
|
13
|
-
* empty entrypoint module is allowed for a leaf.
|
|
13
|
+
* empty entrypoint module is allowed for a leaf. While the slice is draft, an
|
|
14
|
+
* entrypoint that is not a file yet is a warning: planned, not yet owned
|
|
15
|
+
* (VSA §3).
|
|
14
16
|
*
|
|
15
17
|
* VSA012 (deleting or splitting a slice dispositions its behavior, paths and
|
|
16
18
|
* contracts) is a diff between two snapshots. This check sees one snapshot,
|
package/dist/ownership.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ownership.d.ts","sourceRoot":"","sources":["../src/ownership.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"ownership.d.ts","sourceRoot":"","sources":["../src/ownership.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,OAAO,KAAK,EAAY,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAE9D,OAAO,EAAE,KAAK,OAAO,EAAW,MAAM,cAAc,CAAC;AAErD,OAAO,EAAmB,KAAK,KAAK,EAAE,MAAM,cAAc,CAAC;AAI3D,wBAAgB,cAAc,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO,EAAE,CA8GlF"}
|
package/dist/ownership.js
CHANGED
|
@@ -67,12 +67,16 @@ export function checkOwnership(model, graph, level) {
|
|
|
67
67
|
else
|
|
68
68
|
byPackage.set(pkg, entrypoint);
|
|
69
69
|
if (!model.files.has(entrypoint)) {
|
|
70
|
+
const planned = slice.artifact.meta.status === "draft";
|
|
70
71
|
findings.push(finding({
|
|
71
72
|
code: "VSA002",
|
|
73
|
+
...(planned ? { severity: "warning" } : {}),
|
|
72
74
|
artifact: slice.id,
|
|
73
75
|
path: slice.path,
|
|
74
76
|
field,
|
|
75
|
-
message:
|
|
77
|
+
message: planned
|
|
78
|
+
? `The entrypoint ${entrypoint} of draft slice ${slice.id} is not a file yet; it is planned, and an error once the slice leaves draft.`
|
|
79
|
+
: `The entrypoint ${entrypoint} of ${slice.id} is not a file in the repository.`,
|
|
76
80
|
remediation: "Create the entrypoint, empty if the slice exposes nothing yet, or correct the path (VSA002).",
|
|
77
81
|
paths: [entrypoint],
|
|
78
82
|
}));
|
package/dist/ownership.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ownership.js","sourceRoot":"","sources":["../src/ownership.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ownership.js","sourceRoot":"","sources":["../src/ownership.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@intentset/architecture",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "Traceable VSA checks: path claims, import graph, layer matrix, resources, exceptions, baseline.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
}
|
|
29
29
|
},
|
|
30
30
|
"dependencies": {
|
|
31
|
-
"@intentset/core": "^0.
|
|
31
|
+
"@intentset/core": "^0.2.0"
|
|
32
32
|
},
|
|
33
33
|
"peerDependencies": {
|
|
34
34
|
"typescript": "^7.0.2"
|
package/src/check.ts
CHANGED
|
@@ -11,7 +11,15 @@
|
|
|
11
11
|
* migration mode. What could not be checked is listed in `unresolved` and,
|
|
12
12
|
* for imports, reported as a TS004 warning: never a pass (invariant 6).
|
|
13
13
|
*/
|
|
14
|
-
import {
|
|
14
|
+
import {
|
|
15
|
+
type Diagnostic,
|
|
16
|
+
type Graph,
|
|
17
|
+
type Level,
|
|
18
|
+
type OwnershipEntry,
|
|
19
|
+
type OwnershipReportSection,
|
|
20
|
+
type Registries,
|
|
21
|
+
sortDiagnostics,
|
|
22
|
+
} from "@intentset/core";
|
|
15
23
|
import { applyBaseline, type BaselineEntry, type Mode } from "./baseline.ts";
|
|
16
24
|
import { checkBoundaries, checkUnclassified } from "./boundaries.ts";
|
|
17
25
|
import { checkClaims } from "./claims.ts";
|
|
@@ -76,6 +84,14 @@ export interface ArchitectureResult {
|
|
|
76
84
|
summary: ArchitectureSummary;
|
|
77
85
|
/** The resolved import graph, for reports and impact views. */
|
|
78
86
|
edges: ImportEdge[];
|
|
87
|
+
/**
|
|
88
|
+
* Where every file falls, sorted by path: each production file's region and
|
|
89
|
+
* owner, every test file with the slice its claims match, and nothing for a
|
|
90
|
+
* file in the external region (root configuration, scripts, documents that
|
|
91
|
+
* nothing claims). Out-of-scope files are attributed too: scope decides what
|
|
92
|
+
* is reported, not who owns what.
|
|
93
|
+
*/
|
|
94
|
+
ownership: OwnershipEntry[];
|
|
79
95
|
}
|
|
80
96
|
|
|
81
97
|
/** VSA §2: the rules that are review assertions, snapshot diffs or contract diffs rather than structure. */
|
|
@@ -193,5 +209,33 @@ export function checkArchitecture(
|
|
|
193
209
|
unresolved: [...new Set(unresolved)].sort(compareStrings),
|
|
194
210
|
reviewRequired: [...REVIEW_REQUIRED],
|
|
195
211
|
};
|
|
196
|
-
|
|
212
|
+
const ownership: OwnershipEntry[] = [];
|
|
213
|
+
for (const path of model.files.keys()) {
|
|
214
|
+
if (model.isTest(path)) {
|
|
215
|
+
ownership.push({ path, region: "test", owner: model.testOwner(path) });
|
|
216
|
+
continue;
|
|
217
|
+
}
|
|
218
|
+
const region = model.regionOf(path);
|
|
219
|
+
if (region.kind === "external") continue;
|
|
220
|
+
ownership.push({ path, region: region.kind, owner: region.owner ?? null });
|
|
221
|
+
}
|
|
222
|
+
ownership.sort((a, b) => compareStrings(a.path, b.path));
|
|
223
|
+
return { diagnostics, summary, edges: imports.edges, ownership };
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
/**
|
|
227
|
+
* `reports.ownership` for the export (spec/export.md §4.4): the check's file
|
|
228
|
+
* attribution, stamped with the snapshot it was read at, so a consumer can
|
|
229
|
+
* turn a file from a stack frame into a slice, its behaviors and its owner.
|
|
230
|
+
*/
|
|
231
|
+
export function ownershipReport(
|
|
232
|
+
result: ArchitectureResult,
|
|
233
|
+
snapshot: { commit: string | null; graphHash: string },
|
|
234
|
+
): OwnershipReportSection {
|
|
235
|
+
return {
|
|
236
|
+
commit: snapshot.commit,
|
|
237
|
+
graphHash: snapshot.graphHash,
|
|
238
|
+
files: result.ownership.map((entry) => ({ ...entry })),
|
|
239
|
+
withheld: 0,
|
|
240
|
+
};
|
|
197
241
|
}
|
package/src/claims.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Path and resource ownership (VSA §3, §7; VSA009; profile AMP004).
|
|
3
3
|
*
|
|
4
|
-
* - A nonempty claim that matches no file is VSA009
|
|
4
|
+
* - A nonempty claim that matches no file is VSA009: a warning while the
|
|
5
|
+
* slice is draft (planned, not yet owned), an error once it is not.
|
|
5
6
|
* - Two slices resolving one file is VSA009, once per pair of claims, naming
|
|
6
7
|
* both slices, both claims and the files.
|
|
7
8
|
* - A file claimed by a slice and recorded as a registry resource has two
|
|
@@ -46,13 +47,17 @@ export function checkClaims(model: Model, graph: Graph, registriesPath: string):
|
|
|
46
47
|
return;
|
|
47
48
|
}
|
|
48
49
|
if (slice.claimFiles[i].length === 0) {
|
|
50
|
+
const planned = slice.artifact.meta.status === "draft";
|
|
49
51
|
findings.push(
|
|
50
52
|
finding({
|
|
51
53
|
code: "VSA009",
|
|
54
|
+
...(planned ? { severity: "warning" as const } : {}),
|
|
52
55
|
artifact: slice.id,
|
|
53
56
|
path: slice.path,
|
|
54
57
|
field,
|
|
55
|
-
message:
|
|
58
|
+
message: planned
|
|
59
|
+
? `The ${claim.kind} claim ${claim.path} of draft slice ${slice.id} matches no file yet; it is planned, and an error once the slice leaves draft.`
|
|
60
|
+
: `The ${claim.kind} claim ${claim.path} of ${slice.id} matches no file in the repository.`,
|
|
56
61
|
remediation:
|
|
57
62
|
"Correct the path, add the files it promises, or remove the claim; an empty claim is not ownership (VSA §3).",
|
|
58
63
|
}),
|
package/src/index.ts
CHANGED
package/src/ownership.ts
CHANGED
|
@@ -10,7 +10,9 @@
|
|
|
10
10
|
* inside one of the slice's own source claims, and no two lie in the same
|
|
11
11
|
* package (the nearest directory above holding a package.json, or the
|
|
12
12
|
* repository root): a slice has one public surface per package it spans. An
|
|
13
|
-
* empty entrypoint module is allowed for a leaf.
|
|
13
|
+
* empty entrypoint module is allowed for a leaf. While the slice is draft, an
|
|
14
|
+
* entrypoint that is not a file yet is a warning: planned, not yet owned
|
|
15
|
+
* (VSA §3).
|
|
14
16
|
*
|
|
15
17
|
* VSA012 (deleting or splitting a slice dispositions its behavior, paths and
|
|
16
18
|
* contracts) is a diff between two snapshots. This check sees one snapshot,
|
|
@@ -98,13 +100,17 @@ export function checkOwnership(model: Model, graph: Graph, level: Level): Findin
|
|
|
98
100
|
);
|
|
99
101
|
} else byPackage.set(pkg, entrypoint);
|
|
100
102
|
if (!model.files.has(entrypoint)) {
|
|
103
|
+
const planned = slice.artifact.meta.status === "draft";
|
|
101
104
|
findings.push(
|
|
102
105
|
finding({
|
|
103
106
|
code: "VSA002",
|
|
107
|
+
...(planned ? { severity: "warning" as const } : {}),
|
|
104
108
|
artifact: slice.id,
|
|
105
109
|
path: slice.path,
|
|
106
110
|
field,
|
|
107
|
-
message:
|
|
111
|
+
message: planned
|
|
112
|
+
? `The entrypoint ${entrypoint} of draft slice ${slice.id} is not a file yet; it is planned, and an error once the slice leaves draft.`
|
|
113
|
+
: `The entrypoint ${entrypoint} of ${slice.id} is not a file in the repository.`,
|
|
108
114
|
remediation: "Create the entrypoint, empty if the slice exposes nothing yet, or correct the path (VSA002).",
|
|
109
115
|
paths: [entrypoint],
|
|
110
116
|
}),
|