ai-spector 0.2.4 → 0.2.6
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/cli.js +30 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/graph-merge.d.ts +2 -0
- package/dist/commands/graph-merge.d.ts.map +1 -1
- package/dist/commands/graph-merge.js +9 -2
- package/dist/commands/graph-merge.js.map +1 -1
- package/dist/commands/graph-report.d.ts +7 -0
- package/dist/commands/graph-report.d.ts.map +1 -0
- package/dist/commands/graph-report.js +39 -0
- package/dist/commands/graph-report.js.map +1 -0
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +45 -0
- package/dist/commands/index.js.map +1 -1
- package/dist/graph/bundles.d.ts +32 -0
- package/dist/graph/bundles.d.ts.map +1 -0
- package/dist/graph/bundles.js +109 -0
- package/dist/graph/bundles.js.map +1 -0
- package/dist/graph/defaults.d.ts +11 -0
- package/dist/graph/defaults.d.ts.map +1 -1
- package/dist/graph/defaults.js +11 -0
- package/dist/graph/defaults.js.map +1 -1
- package/dist/graph/detail-sections.d.ts.map +1 -1
- package/dist/graph/detail-sections.js +17 -4
- package/dist/graph/detail-sections.js.map +1 -1
- package/dist/graph/doc-extract.d.ts +7 -1
- package/dist/graph/doc-extract.d.ts.map +1 -1
- package/dist/graph/doc-extract.js +195 -44
- package/dist/graph/doc-extract.js.map +1 -1
- package/dist/graph/layer-audit.d.ts +48 -0
- package/dist/graph/layer-audit.d.ts.map +1 -0
- package/dist/graph/layer-audit.js +229 -0
- package/dist/graph/layer-audit.js.map +1 -0
- package/dist/graph/merge.d.ts +5 -1
- package/dist/graph/merge.d.ts.map +1 -1
- package/dist/graph/merge.js +70 -3
- package/dist/graph/merge.js.map +1 -1
- package/dist/graph/provenance.d.ts.map +1 -1
- package/dist/graph/provenance.js +9 -4
- package/dist/graph/provenance.js.map +1 -1
- package/dist/index/doc-semantics.d.ts.map +1 -1
- package/dist/index/doc-semantics.js +6 -1
- package/dist/index/doc-semantics.js.map +1 -1
- package/dist/types.d.ts +3 -2
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/scaffold/.ai-spector/.docflow/extract/semantic-links.patch.example.json +17 -0
- package/scaffold/.cursor/commands/index.md +3 -1
- package/scaffold/.cursor/commands/link-graph.md +43 -0
- package/schemas/schema.graph.json +11 -3
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
import { readdir } from "node:fs/promises";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import { isPerDomainInstanceDocument } from "./detail-sections.js";
|
|
4
|
+
import { BUNDLE_BUSINESS_ID, BUNDLE_SOURCE_ID } from "./bundles.js";
|
|
5
|
+
const DOMAIN_TYPES = new Set([
|
|
6
|
+
"actor",
|
|
7
|
+
"useCase",
|
|
8
|
+
"feature",
|
|
9
|
+
"requirement",
|
|
10
|
+
"dataEntity",
|
|
11
|
+
]);
|
|
12
|
+
function countType(graph, type) {
|
|
13
|
+
let n = 0;
|
|
14
|
+
for (const node of graph.nodesById.values()) {
|
|
15
|
+
if (node.type === type) {
|
|
16
|
+
n++;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
return n;
|
|
20
|
+
}
|
|
21
|
+
function perDomainSpecDocs(graph) {
|
|
22
|
+
let useCaseDocs = 0;
|
|
23
|
+
let featureDocs = 0;
|
|
24
|
+
for (const node of graph.nodesById.values()) {
|
|
25
|
+
if (node.type !== "document" || !isPerDomainInstanceDocument(node)) {
|
|
26
|
+
continue;
|
|
27
|
+
}
|
|
28
|
+
if (node.perDomain === "useCase") {
|
|
29
|
+
useCaseDocs++;
|
|
30
|
+
}
|
|
31
|
+
else if (node.perDomain === "feature") {
|
|
32
|
+
featureDocs++;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
return { useCaseDocs, featureDocs };
|
|
36
|
+
}
|
|
37
|
+
function detailSectionCount(graph) {
|
|
38
|
+
let n = 0;
|
|
39
|
+
for (const node of graph.nodesById.values()) {
|
|
40
|
+
if (node.type !== "section") {
|
|
41
|
+
continue;
|
|
42
|
+
}
|
|
43
|
+
const docId = String(node.documentId ?? "");
|
|
44
|
+
if (!docId.startsWith("doc.srs.uc-") && !docId.startsWith("doc.srs.f-")) {
|
|
45
|
+
continue;
|
|
46
|
+
}
|
|
47
|
+
n++;
|
|
48
|
+
}
|
|
49
|
+
return n;
|
|
50
|
+
}
|
|
51
|
+
function edgeCount(graph, type) {
|
|
52
|
+
return graph.toTraceabilityGraph().edges.filter((e) => e.type === type).length;
|
|
53
|
+
}
|
|
54
|
+
function domainsWithDerivedFrom(graph) {
|
|
55
|
+
const out = new Set();
|
|
56
|
+
for (const e of graph.toTraceabilityGraph().edges) {
|
|
57
|
+
if (e.type !== "derivedFrom") {
|
|
58
|
+
continue;
|
|
59
|
+
}
|
|
60
|
+
const from = graph.nodesById.get(e.from);
|
|
61
|
+
if (from && DOMAIN_TYPES.has(from.type)) {
|
|
62
|
+
out.add(e.from);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
return out;
|
|
66
|
+
}
|
|
67
|
+
function domainsWithRelatesTo(graph) {
|
|
68
|
+
const out = new Set();
|
|
69
|
+
for (const e of graph.toTraceabilityGraph().edges) {
|
|
70
|
+
if (e.type !== "relatesTo") {
|
|
71
|
+
continue;
|
|
72
|
+
}
|
|
73
|
+
const from = graph.nodesById.get(e.from);
|
|
74
|
+
const to = graph.nodesById.get(e.to);
|
|
75
|
+
if (from && DOMAIN_TYPES.has(from.type)) {
|
|
76
|
+
out.add(e.from);
|
|
77
|
+
}
|
|
78
|
+
if (to && DOMAIN_TYPES.has(to.type)) {
|
|
79
|
+
out.add(e.to);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
return out;
|
|
83
|
+
}
|
|
84
|
+
function listDomainsMissingProvenance(graph) {
|
|
85
|
+
const withDerived = domainsWithDerivedFrom(graph);
|
|
86
|
+
const missing = [];
|
|
87
|
+
for (const node of graph.nodesById.values()) {
|
|
88
|
+
if (node.type === "useCase" && !withDerived.has(node.id)) {
|
|
89
|
+
missing.push(node.id);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
return missing.sort();
|
|
93
|
+
}
|
|
94
|
+
function listDomainsNeedingSemanticLinks(graph) {
|
|
95
|
+
const withDerived = domainsWithDerivedFrom(graph);
|
|
96
|
+
const withRelates = domainsWithRelatesTo(graph);
|
|
97
|
+
const out = [];
|
|
98
|
+
for (const id of withDerived) {
|
|
99
|
+
if (!withRelates.has(id)) {
|
|
100
|
+
out.push(id);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
return out.sort();
|
|
104
|
+
}
|
|
105
|
+
async function listUseCaseDetailPathsOnDisk(projectRoot) {
|
|
106
|
+
const base = join(projectRoot, "docs/srs/03-use-cases");
|
|
107
|
+
const paths = [];
|
|
108
|
+
try {
|
|
109
|
+
const entries = await readdir(base, { withFileTypes: true });
|
|
110
|
+
for (const ent of entries) {
|
|
111
|
+
if (ent.isFile() && /^uc-\d+.*\.md$/i.test(ent.name)) {
|
|
112
|
+
paths.push(`docs/srs/03-use-cases/${ent.name}`);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
catch {
|
|
117
|
+
return [];
|
|
118
|
+
}
|
|
119
|
+
return paths.sort();
|
|
120
|
+
}
|
|
121
|
+
function graphOutputPathsForUseCaseDocs(graph) {
|
|
122
|
+
const out = new Set();
|
|
123
|
+
for (const node of graph.nodesById.values()) {
|
|
124
|
+
if (node.type === "document" &&
|
|
125
|
+
node.perDomain === "useCase" &&
|
|
126
|
+
typeof node.output === "string") {
|
|
127
|
+
out.add(node.output.replace(/\\/g, "/"));
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
return out;
|
|
131
|
+
}
|
|
132
|
+
function suggestCommands(layers) {
|
|
133
|
+
let suggestedCommand;
|
|
134
|
+
let suggestedAgentCommand;
|
|
135
|
+
if (layers.semanticLinks.domainsWithoutSemanticLinks.length > 0) {
|
|
136
|
+
const seed = layers.semanticLinks.domainsWithoutSemanticLinks[0];
|
|
137
|
+
suggestedAgentCommand = seed ? `/link-graph ${seed}` : "/link-graph";
|
|
138
|
+
}
|
|
139
|
+
if (!layers.specInstances.ok && layers.domain.useCases > 0) {
|
|
140
|
+
suggestedCommand = "ai-spector index";
|
|
141
|
+
}
|
|
142
|
+
else if (!layers.sourceHub.ok && layers.domain.ok) {
|
|
143
|
+
suggestedCommand = "ai-spector index";
|
|
144
|
+
}
|
|
145
|
+
else if (layers.provenance.domainsWithoutSource.length > 0) {
|
|
146
|
+
suggestedAgentCommand = suggestedAgentCommand ?? "/analyze";
|
|
147
|
+
suggestedCommand = "ai-spector index";
|
|
148
|
+
}
|
|
149
|
+
return { suggestedCommand, suggestedAgentCommand };
|
|
150
|
+
}
|
|
151
|
+
export async function auditGraphLayers(graph, projectRoot) {
|
|
152
|
+
const documents = countType(graph, "document");
|
|
153
|
+
const sections = countType(graph, "section");
|
|
154
|
+
const { useCaseDocs, featureDocs } = perDomainSpecDocs(graph);
|
|
155
|
+
const detailSections = detailSectionCount(graph);
|
|
156
|
+
const useCases = countType(graph, "useCase");
|
|
157
|
+
const features = countType(graph, "feature");
|
|
158
|
+
const actors = countType(graph, "actor");
|
|
159
|
+
const bundleSource = graph.nodesById.has(BUNDLE_SOURCE_ID);
|
|
160
|
+
const sourceFiles = countType(graph, "sourceFile");
|
|
161
|
+
const bundleBusiness = graph.nodesById.has(BUNDLE_BUSINESS_ID);
|
|
162
|
+
let domainMembers = 0;
|
|
163
|
+
if (bundleBusiness) {
|
|
164
|
+
for (const e of graph.toTraceabilityGraph().edges) {
|
|
165
|
+
if (e.type === "contains" && e.from === BUNDLE_BUSINESS_ID) {
|
|
166
|
+
domainMembers++;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
const derivedFrom = edgeCount(graph, "derivedFrom");
|
|
171
|
+
const domainsWithoutSource = listDomainsMissingProvenance(graph);
|
|
172
|
+
const relatesTo = edgeCount(graph, "relatesTo");
|
|
173
|
+
const domainsWithoutSemanticLinks = listDomainsNeedingSemanticLinks(graph);
|
|
174
|
+
let missingOnDisk = [];
|
|
175
|
+
if (projectRoot) {
|
|
176
|
+
const diskPaths = await listUseCaseDetailPathsOnDisk(projectRoot);
|
|
177
|
+
const graphPaths = graphOutputPathsForUseCaseDocs(graph);
|
|
178
|
+
missingOnDisk = diskPaths.filter((p) => !graphPaths.has(p));
|
|
179
|
+
}
|
|
180
|
+
const specInstancesOk = useCaseDocs > 0 &&
|
|
181
|
+
detailSections > 0 &&
|
|
182
|
+
missingOnDisk.length === 0;
|
|
183
|
+
const layers = {
|
|
184
|
+
structure: {
|
|
185
|
+
documents,
|
|
186
|
+
sections,
|
|
187
|
+
ok: documents > 0 && sections > 0,
|
|
188
|
+
},
|
|
189
|
+
specInstances: {
|
|
190
|
+
useCaseDocs,
|
|
191
|
+
featureDocs,
|
|
192
|
+
sections: detailSections,
|
|
193
|
+
ok: specInstancesOk,
|
|
194
|
+
missingOnDisk,
|
|
195
|
+
},
|
|
196
|
+
domain: {
|
|
197
|
+
useCases,
|
|
198
|
+
features,
|
|
199
|
+
actors,
|
|
200
|
+
ok: useCases > 0 || features > 0,
|
|
201
|
+
},
|
|
202
|
+
sourceHub: {
|
|
203
|
+
bundlePresent: bundleSource,
|
|
204
|
+
sourceFiles,
|
|
205
|
+
ok: bundleSource,
|
|
206
|
+
},
|
|
207
|
+
businessHub: {
|
|
208
|
+
bundlePresent: bundleBusiness,
|
|
209
|
+
domainMembers,
|
|
210
|
+
ok: bundleBusiness &&
|
|
211
|
+
domainMembers >= useCases + features + actors,
|
|
212
|
+
},
|
|
213
|
+
provenance: {
|
|
214
|
+
derivedFrom,
|
|
215
|
+
domainsWithoutSource,
|
|
216
|
+
ok: useCases === 0 ||
|
|
217
|
+
domainsWithoutSource.length === 0,
|
|
218
|
+
},
|
|
219
|
+
semanticLinks: {
|
|
220
|
+
relatesTo,
|
|
221
|
+
domainsWithoutSemanticLinks,
|
|
222
|
+
ok: domainsWithoutSemanticLinks.length === 0 ||
|
|
223
|
+
derivedFrom === 0,
|
|
224
|
+
},
|
|
225
|
+
};
|
|
226
|
+
const suggestions = suggestCommands(layers);
|
|
227
|
+
return { layers, ...suggestions };
|
|
228
|
+
}
|
|
229
|
+
//# sourceMappingURL=layer-audit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"layer-audit.js","sourceRoot":"","sources":["../../src/graph/layer-audit.ts"],"names":[],"mappings":"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"}
|
package/dist/graph/merge.d.ts
CHANGED
|
@@ -10,6 +10,10 @@ export interface MergeResult {
|
|
|
10
10
|
graph: InMemoryGraph;
|
|
11
11
|
stats: MergeStats;
|
|
12
12
|
}
|
|
13
|
+
export interface MergePatchOptions {
|
|
14
|
+
/** Agent semantic patch: no structure nodes; only relatesTo/references + domain field updates. */
|
|
15
|
+
semanticOnly?: boolean;
|
|
16
|
+
}
|
|
13
17
|
export declare function normalizePatch(input: ExtractPatch | Partial<ExtractPatch>): ExtractPatch;
|
|
14
|
-
export declare function mergePatch(graph: InMemoryGraph, patch: ExtractPatch): MergeResult;
|
|
18
|
+
export declare function mergePatch(graph: InMemoryGraph, patch: ExtractPatch, options?: MergePatchOptions): MergeResult;
|
|
15
19
|
//# sourceMappingURL=merge.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"merge.d.ts","sourceRoot":"","sources":["../../src/graph/merge.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"merge.d.ts","sourceRoot":"","sources":["../../src/graph/merge.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAiCnD,MAAM,WAAW,UAAU;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,aAAa,CAAC;IACrB,KAAK,EAAE,UAAU,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC,kGAAkG;IAClG,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC,GAAG,YAAY,CAMxF;AAoBD,wBAAgB,UAAU,CACxB,KAAK,EAAE,aAAa,EACpB,KAAK,EAAE,YAAY,EACnB,OAAO,CAAC,EAAE,iBAAiB,GAC1B,WAAW,CA0Eb"}
|
package/dist/graph/merge.js
CHANGED
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
import { isPathTargetEdge } from "./path-target-edges.js";
|
|
2
2
|
import { isPerDomainInstanceDocument } from "./detail-sections.js";
|
|
3
|
-
const STRUCTURE_TYPES = new Set([
|
|
3
|
+
const STRUCTURE_TYPES = new Set([
|
|
4
|
+
"document",
|
|
5
|
+
"section",
|
|
6
|
+
"table",
|
|
7
|
+
"diagram",
|
|
8
|
+
]);
|
|
9
|
+
const HUB_TYPES = new Set(["bundle", "sourceFile"]);
|
|
4
10
|
const DOMAIN_TYPES = new Set([
|
|
5
11
|
"actor",
|
|
6
12
|
"useCase",
|
|
@@ -8,6 +14,19 @@ const DOMAIN_TYPES = new Set([
|
|
|
8
14
|
"requirement",
|
|
9
15
|
"dataEntity",
|
|
10
16
|
]);
|
|
17
|
+
const STRUCTURE_CREATE_TYPES = new Set([
|
|
18
|
+
"document",
|
|
19
|
+
"section",
|
|
20
|
+
"table",
|
|
21
|
+
"diagram",
|
|
22
|
+
]);
|
|
23
|
+
const SEMANTIC_EDGE_TYPES = new Set(["relatesTo", "references"]);
|
|
24
|
+
const RELATES_TO_ENDPOINT_TYPES = new Set([
|
|
25
|
+
...DOMAIN_TYPES,
|
|
26
|
+
"section",
|
|
27
|
+
"sourceFile",
|
|
28
|
+
"bundle",
|
|
29
|
+
]);
|
|
11
30
|
export function normalizePatch(input) {
|
|
12
31
|
return {
|
|
13
32
|
version: 1,
|
|
@@ -16,6 +35,8 @@ export function normalizePatch(input) {
|
|
|
16
35
|
};
|
|
17
36
|
}
|
|
18
37
|
const PATCH_NODE_ORDER = {
|
|
38
|
+
bundle: -2,
|
|
39
|
+
sourceFile: -1,
|
|
19
40
|
document: 0,
|
|
20
41
|
actor: 1,
|
|
21
42
|
useCase: 1,
|
|
@@ -29,15 +50,21 @@ const PATCH_NODE_ORDER = {
|
|
|
29
50
|
function patchNodeSortKey(node) {
|
|
30
51
|
return PATCH_NODE_ORDER[node.type] ?? 9;
|
|
31
52
|
}
|
|
32
|
-
export function mergePatch(graph, patch) {
|
|
53
|
+
export function mergePatch(graph, patch, options) {
|
|
33
54
|
const stats = {
|
|
34
55
|
nodesCreated: 0,
|
|
35
56
|
nodesUpdated: 0,
|
|
36
57
|
edgesAdded: 0,
|
|
37
58
|
nodesSkipped: 0,
|
|
38
59
|
};
|
|
60
|
+
if (options?.semanticOnly) {
|
|
61
|
+
validateSemanticPatch(patch);
|
|
62
|
+
}
|
|
39
63
|
const sortedNodes = [...patch.nodes].sort((a, b) => patchNodeSortKey(a) - patchNodeSortKey(b));
|
|
40
64
|
for (const node of sortedNodes) {
|
|
65
|
+
if (options?.semanticOnly && STRUCTURE_CREATE_TYPES.has(node.type)) {
|
|
66
|
+
throw new Error(`Semantic patch cannot create structure node ${node.id} (${node.type})`);
|
|
67
|
+
}
|
|
41
68
|
if (node.type === "section") {
|
|
42
69
|
const parentDoc = graph.nodesById.get(String(node.documentId ?? ""));
|
|
43
70
|
if (parentDoc && isPerDomainInstanceDocument(parentDoc)) {
|
|
@@ -58,7 +85,7 @@ export function mergePatch(graph, patch) {
|
|
|
58
85
|
stats.nodesSkipped++;
|
|
59
86
|
continue;
|
|
60
87
|
}
|
|
61
|
-
if (node.type === "document") {
|
|
88
|
+
if (HUB_TYPES.has(node.type) || node.type === "document") {
|
|
62
89
|
const outcome = graph.upsertNode(node);
|
|
63
90
|
if (outcome === "created") {
|
|
64
91
|
stats.nodesCreated++;
|
|
@@ -80,6 +107,9 @@ export function mergePatch(graph, patch) {
|
|
|
80
107
|
}
|
|
81
108
|
}
|
|
82
109
|
for (const edge of patch.edges) {
|
|
110
|
+
if (options?.semanticOnly && !SEMANTIC_EDGE_TYPES.has(edge.type)) {
|
|
111
|
+
throw new Error(`Semantic patch edge type not allowed: ${edge.type} (use relatesTo or references)`);
|
|
112
|
+
}
|
|
83
113
|
assertMergeEdgeAllowed(graph, edge);
|
|
84
114
|
if (graph.addEdgeIfAbsent(edge)) {
|
|
85
115
|
stats.edgesAdded++;
|
|
@@ -87,7 +117,21 @@ export function mergePatch(graph, patch) {
|
|
|
87
117
|
}
|
|
88
118
|
return { graph, stats };
|
|
89
119
|
}
|
|
120
|
+
function validateSemanticPatch(patch) {
|
|
121
|
+
for (const node of patch.nodes) {
|
|
122
|
+
if (STRUCTURE_CREATE_TYPES.has(node.type)) {
|
|
123
|
+
throw new Error(`Semantic patch cannot add structure node ${node.id} (${node.type})`);
|
|
124
|
+
}
|
|
125
|
+
if (HUB_TYPES.has(node.type)) {
|
|
126
|
+
throw new Error(`Semantic patch cannot add hub node ${node.id}`);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
}
|
|
90
130
|
function assertMergeEdgeAllowed(graph, edge) {
|
|
131
|
+
if (edge.type === "relatesTo") {
|
|
132
|
+
assertRelatesToEdge(graph, edge);
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
91
135
|
const from = graph.nodesById.get(edge.from);
|
|
92
136
|
if (isPathTargetEdge(edge.type)) {
|
|
93
137
|
if (!from) {
|
|
@@ -120,6 +164,7 @@ function assertMergeEdgeAllowed(graph, edge) {
|
|
|
120
164
|
"describedIn",
|
|
121
165
|
"references",
|
|
122
166
|
"dependsOn",
|
|
167
|
+
"tracesTo",
|
|
123
168
|
"contains",
|
|
124
169
|
"partOf",
|
|
125
170
|
"follows",
|
|
@@ -128,5 +173,27 @@ function assertMergeEdgeAllowed(graph, edge) {
|
|
|
128
173
|
throw new Error(`Edge ${edge.type} cannot target structure node ${edge.to}`);
|
|
129
174
|
}
|
|
130
175
|
}
|
|
176
|
+
if (HUB_TYPES.has(to.type) || HUB_TYPES.has(from.type)) {
|
|
177
|
+
const allowedHub = new Set(["contains", "partOf", "relatesTo", "references"]);
|
|
178
|
+
if (!allowedHub.has(edge.type)) {
|
|
179
|
+
throw new Error(`Edge ${edge.type} cannot connect hub nodes ${edge.from} → ${edge.to}`);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
function assertRelatesToEdge(graph, edge) {
|
|
184
|
+
const from = graph.nodesById.get(edge.from);
|
|
185
|
+
const to = graph.nodesById.get(edge.to);
|
|
186
|
+
if (!from) {
|
|
187
|
+
throw new Error(`relatesTo missing source node: ${edge.from}`);
|
|
188
|
+
}
|
|
189
|
+
if (!to) {
|
|
190
|
+
throw new Error(`relatesTo missing target node: ${edge.to}`);
|
|
191
|
+
}
|
|
192
|
+
if (!RELATES_TO_ENDPOINT_TYPES.has(from.type)) {
|
|
193
|
+
throw new Error(`relatesTo invalid source type ${from.type}: ${edge.from}`);
|
|
194
|
+
}
|
|
195
|
+
if (!RELATES_TO_ENDPOINT_TYPES.has(to.type)) {
|
|
196
|
+
throw new Error(`relatesTo invalid target type ${to.type}: ${edge.to}`);
|
|
197
|
+
}
|
|
131
198
|
}
|
|
132
199
|
//# sourceMappingURL=merge.js.map
|
package/dist/graph/merge.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"merge.js","sourceRoot":"","sources":["../../src/graph/merge.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,2BAA2B,EAAE,MAAM,sBAAsB,CAAC;AAInE,MAAM,eAAe,GAAG,IAAI,GAAG,CAAW,CAAC,
|
|
1
|
+
{"version":3,"file":"merge.js","sourceRoot":"","sources":["../../src/graph/merge.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provenance.d.ts","sourceRoot":"","sources":["../../src/graph/provenance.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"provenance.d.ts","sourceRoot":"","sources":["../../src/graph/provenance.ts"],"names":[],"mappings":"AAwBA,MAAM,WAAW,qBAAqB;IACpC,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAqED,4EAA4E;AAC5E,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,MAAM,EACX,cAAc,EAAE,MAAM,GACrB,MAAM,GAAG,SAAS,CA4BpB;AAkDD,wBAAsB,2BAA2B,CAC/C,IAAI,EAAE,qBAAqB,GAAG;IAAE,cAAc,EAAE,MAAM,CAAA;CAAE,GACvD,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAiFnC;AAED,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,qBAAqB,GAC1B,OAAO,CAAC,oBAAoB,CAAC,CAkD/B"}
|
package/dist/graph/provenance.js
CHANGED
|
@@ -8,6 +8,7 @@ import { pathExists, readJson, writeJson } from "../util/fs.js";
|
|
|
8
8
|
import { discoverMarkdownFiles } from "../index/docs-build.js";
|
|
9
9
|
import { indexDocsConfigPath } from "../index/docs-config.js";
|
|
10
10
|
import { extractSourceRefsFromMarkdown } from "./source-refs.js";
|
|
11
|
+
import { knownSourceFileNodeIds, provenanceTargetId, } from "./bundles.js";
|
|
11
12
|
function collectKnowledgeRefs(item) {
|
|
12
13
|
const out = [];
|
|
13
14
|
const fields = [
|
|
@@ -102,7 +103,7 @@ function domainIdFromDetailContent(content, kind) {
|
|
|
102
103
|
const m = content.match(/\*\*Feature ID:\*\*\s*(F-\d+)/i);
|
|
103
104
|
return m?.[1] ? m[1].replace(/(F-)(\d+)/i, (_, p, n) => `${p}${n.padStart(2, "0")}`) : null;
|
|
104
105
|
}
|
|
105
|
-
function buildProvenancePatch(domainRefs, dataSourceRoot, graphify, validDomainIds) {
|
|
106
|
+
function buildProvenancePatch(domainRefs, dataSourceRoot, graphify, validDomainIds, knownSourceFiles) {
|
|
106
107
|
const edges = [];
|
|
107
108
|
const edgeKeys = new Set();
|
|
108
109
|
for (const [domainId, refs] of domainRefs) {
|
|
@@ -110,10 +111,13 @@ function buildProvenancePatch(domainRefs, dataSourceRoot, graphify, validDomainI
|
|
|
110
111
|
continue;
|
|
111
112
|
}
|
|
112
113
|
for (const ref of refs) {
|
|
113
|
-
for (const
|
|
114
|
-
if (isGraphifyNodeTarget(
|
|
114
|
+
for (const rawTo of resolveRefToTargets(ref, dataSourceRoot, graphify)) {
|
|
115
|
+
if (isGraphifyNodeTarget(rawTo) && !graphify) {
|
|
115
116
|
continue;
|
|
116
117
|
}
|
|
118
|
+
const to = !isGraphifyNodeTarget(rawTo) && rawTo.startsWith("docs/data-source/")
|
|
119
|
+
? provenanceTargetId(rawTo, knownSourceFiles)
|
|
120
|
+
: rawTo;
|
|
117
121
|
const key = `${domainId}|derivedFrom|${to}`;
|
|
118
122
|
if (edgeKeys.has(key)) {
|
|
119
123
|
continue;
|
|
@@ -208,7 +212,8 @@ export async function runProvenanceLink(opts) {
|
|
|
208
212
|
const validDomainIds = new Set([...graph.nodesById.values()]
|
|
209
213
|
.filter((n) => ["actor", "useCase", "feature", "requirement", "dataEntity"].includes(n.type))
|
|
210
214
|
.map((n) => n.id));
|
|
211
|
-
const
|
|
215
|
+
const knownSourceFiles = knownSourceFileNodeIds(graph);
|
|
216
|
+
const patch = buildProvenancePatch(domainRefs, dataSourceRoot, graphify, validDomainIds, knownSourceFiles);
|
|
212
217
|
if (patch.edges.length === 0) {
|
|
213
218
|
return {
|
|
214
219
|
merged: false,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provenance.js","sourceRoot":"","sources":["../../src/graph/provenance.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EACL,uBAAuB,EACvB,oBAAoB,EACpB,oBAAoB,EACpB,iBAAiB,GAElB,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EAAE,kBAAkB,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAC;AAC/E,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAGnD,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAwB,MAAM,yBAAyB,CAAC;AACpF,OAAO,EAAE,6BAA6B,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"provenance.js","sourceRoot":"","sources":["../../src/graph/provenance.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EACL,uBAAuB,EACvB,oBAAoB,EACpB,oBAAoB,EACpB,iBAAiB,GAElB,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EAAE,kBAAkB,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAC;AAC/E,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAGnD,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAwB,MAAM,yBAAyB,CAAC;AACpF,OAAO,EAAE,6BAA6B,EAAE,MAAM,kBAAkB,CAAC;AACjE,OAAO,EACL,sBAAsB,EACtB,kBAAkB,GACnB,MAAM,cAAc,CAAC;AAiBtB,SAAS,oBAAoB,CAC3B,IAA6B;IAE7B,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,MAAM,MAAM,GAAG;QACb,aAAa;QACb,WAAW;QACX,YAAY;QACZ,SAAS;QACT,aAAa;QACb,QAAQ;KACT,CAAC;IACF,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;QACzB,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;QACpB,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;YACtC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QACrB,CAAC;aAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;YAC5B,KAAK,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;gBAClB,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;oBACtC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;gBACrB,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,mBAAmB,CAC1B,GAAW,EACX,cAAsB,EACtB,QAA8B;IAE9B,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAElC,IAAI,GAAG,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,QAAQ,EAAE,CAAC;QAC5C,MAAM,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QACzC,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;YAC5C,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACnB,CAAC;QACD,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC;IACtB,CAAC;IAED,MAAM,UAAU,GAAG,uBAAuB,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;IAChE,IAAI,UAAU,EAAE,CAAC;QACf,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACxB,MAAM,OAAO,GAAG,QAAQ,EAAE,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACrD,IAAI,OAAO,EAAE,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC;QACjD,CAAC;QACD,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC;IACtB,CAAC;IAED,IAAI,QAAQ,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACnC,MAAM,GAAG,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACrC,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC1C,IAAI,OAAO,EAAE,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC;QACjD,CAAC;QACD,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC;QACzD,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC;AACtB,CAAC;AAED,4EAA4E;AAC5E,MAAM,UAAU,uBAAuB,CACrC,GAAW,EACX,cAAsB;IAEtB,IAAI,CAAC,GAAG,GAAG;SACR,IAAI,EAAE;SACN,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC;SAC/B,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACvB,IAAI,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACpB,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAE,CAAC,IAAI,EAAE,CAAC;IACjC,CAAC;IACD,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5B,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,IAAI,GAAG,cAAc,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACnE,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,GAAG,GAAG,CAAC,EAAE,CAAC;QAC7B,OAAO,CAAC,CAAC;IACX,CAAC;IACD,IAAI,CAAC,CAAC,UAAU,CAAC,mBAAmB,CAAC,EAAE,CAAC;QACtC,OAAO,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAChC,CAAC;IACD,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QACpD,OAAO,GAAG,IAAI,IAAI,CAAC,EAAE,CAAC;IACxB,CAAC;IACD,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACjD,MAAM,SAAS,GAAG,GAAG,IAAI,IAAI,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC;QACtD,IAAI,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YAC/B,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,yBAAyB,CAChC,OAAe,EACf,IAA2B;IAE3B,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,MAAM,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC;QAC5D,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC/F,CAAC;IACD,MAAM,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;IAC1D,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAC9F,CAAC;AAED,SAAS,oBAAoB,CAC3B,UAAoC,EACpC,cAAsB,EACtB,QAA8B,EAC9B,cAA2B,EAC3B,gBAAqC;IAErC,MAAM,KAAK,GAAgB,EAAE,CAAC;IAC9B,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;IAEnC,KAAK,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,UAAU,EAAE,CAAC;QAC1C,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YAClC,SAAS;QACX,CAAC;QACD,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,KAAK,MAAM,KAAK,IAAI,mBAAmB,CAAC,GAAG,EAAE,cAAc,EAAE,QAAQ,CAAC,EAAE,CAAC;gBACvE,IAAI,oBAAoB,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;oBAC7C,SAAS;gBACX,CAAC;gBACD,MAAM,EAAE,GACN,CAAC,oBAAoB,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,mBAAmB,CAAC;oBACnE,CAAC,CAAC,kBAAkB,CAAC,KAAK,EAAE,gBAAgB,CAAC;oBAC7C,CAAC,CAAC,KAAK,CAAC;gBACZ,MAAM,GAAG,GAAG,GAAG,QAAQ,gBAAgB,EAAE,EAAE,CAAC;gBAC5C,IAAI,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;oBACtB,SAAS;gBACX,CAAC;gBACD,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBAClB,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;YAC1D,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC;AAC1C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAC/C,IAAwD;IAExD,MAAM,UAAU,GAAG,IAAI,GAAG,EAAuB,CAAC;IAClD,MAAM,MAAM,GAAG,CAAC,QAAgB,EAAE,GAAW,EAAE,EAAE;QAC/C,IAAI,CAAC,QAAQ,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC;YAC7B,OAAO;QACT,CAAC;QACD,MAAM,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,IAAI,GAAG,EAAU,CAAC;QAC1D,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;QACpB,UAAU,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;IAChC,CAAC,CAAC;IAEF,MAAM,aAAa,GACjB,IAAI,CAAC,aAAa;QAClB,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,8CAA8C,CAAC,CAAC;IACzE,IAAI,MAAM,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;QACpC,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAU,aAAa,CAAC,CAAC;QACnD,IAAI,kBAAkB,CAAC,GAAG,CAAC,IAAI,yBAAyB,CAAC,GAAwB,CAAC,EAAE,CAAC;YACnF,MAAM,CAAC,GAAG,GAAwB,CAAC;YACnC,MAAM,KAAK,GAAsD;gBAC/D,EAAE,KAAK,EAAE,CAAC,CAAC,QAAsD,EAAE;gBACnE,EAAE,KAAK,EAAE,CAAC,CAAC,QAAsD,EAAE;gBACnE,EAAE,KAAK,EAAE,CAAC,CAAC,MAAoD,EAAE;gBACjE,EAAE,KAAK,EAAE,CAAC,CAAC,sBAAoE,EAAE;gBACjF,EAAE,KAAK,EAAE,CAAC,CAAC,IAAkD,EAAE;gBAC/D,EAAE,KAAK,EAAE,CAAC,CAAC,QAAsD,EAAE;aACpE,CAAC;YACF,KAAK,MAAM,EAAE,KAAK,EAAE,IAAI,KAAK,EAAE,CAAC;gBAC9B,KAAK,MAAM,IAAI,IAAI,KAAK,IAAI,EAAE,EAAE,CAAC;oBAC/B,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;oBACjC,KAAK,MAAM,GAAG,IAAI,oBAAoB,CAAC,IAAI,CAAC,EAAE,CAAC;wBAC7C,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;oBAClB,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,UAAU,GAAG,mBAAmB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACzD,IAAI,MAAM,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QACjC,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAkB,UAAU,CAAC,CAAC;QAC3D,MAAM,OAAO,GAAqD,EAAE,CAAC;QACrE,KAAK,MAAM,GAAG,IAAI,CAAC,KAAK,EAAE,aAAa,CAAU,EAAE,CAAC;YAClD,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACnC,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC;gBAClB,SAAS;YACX,CAAC;YACD,MAAM,KAAK,GAAG,MAAM,qBAAqB,CACvC,IAAI,CAAC,WAAW,EAChB,MAAM,CAAC,IAAI,EACX,MAAM,CAAC,IAAI,IAAI,SAAS,CACzB,CAAC;YACF,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;gBACtB,MAAM,OAAO,GAAG,MAAM,QAAQ,CAC5B,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,YAAY,CAAC,EACtC,MAAM,CACP,CAAC;gBACF,OAAO,CAAC,IAAI,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,YAAY,EAAE,OAAO,EAAE,CAAC,CAAC;YAC1D,CAAC;QACH,CAAC;QAED,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACxB,MAAM,IAAI,GAAG,6BAA6B,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;YACtD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACtB,SAAS;YACX,CAAC;YACD,IAAI,QAAQ,GAAkB,IAAI,CAAC;YACnC,IAAI,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC;gBACjF,QAAQ,GAAG,yBAAyB,CAAC,CAAC,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;YAC7D,CAAC;iBAAM,IAAI,8BAA8B,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC;gBAC/D,QAAQ,GAAG,yBAAyB,CAAC,CAAC,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;YAC7D,CAAC;YACD,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,SAAS;YACX,CAAC;YACD,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;gBACvB,MAAM,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;YACxB,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,IAA2B;IAE3B,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,IAAI,kBAAkB,CAAC;IACjE,MAAM,YAAY,GAChB,IAAI,CAAC,gBAAgB,IAAI,uBAAuB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACrE,MAAM,QAAQ,GAAG,MAAM,iBAAiB,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;IAEvE,MAAM,UAAU,GAAG,MAAM,2BAA2B,CAAC;QACnD,GAAG,IAAI;QACP,cAAc;KACf,CAAC,CAAC;IAEH,MAAM,KAAK,GAAG,MAAM,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACtD,MAAM,cAAc,GAAG,IAAI,GAAG,CAC5B,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;SAC1B,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CACZ,CAAC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,aAAa,EAAE,YAAY,CAAC,CAAC,QAAQ,CACnE,CAAC,CAAC,IAAI,CACP,CACF;SACA,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CACpB,CAAC;IAEF,MAAM,gBAAgB,GAAG,sBAAsB,CAAC,KAAK,CAAC,CAAC;IACvD,MAAM,KAAK,GAAG,oBAAoB,CAChC,UAAU,EACV,cAAc,EACd,QAAQ,EACR,cAAc,EACd,gBAAgB,CACjB,CAAC;IACF,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7B,OAAO;YACL,MAAM,EAAE,KAAK;YACb,MAAM,EAAE,sDAAsD;YAC9D,UAAU,EAAE,CAAC;YACb,iBAAiB,EAAE,CAAC;SACrB,CAAC;IACJ,CAAC;IAED,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAC9D,MAAM,EAAE,KAAK,EAAE,GAAG,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAC3C,MAAM,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,mBAAmB,EAAE,CAAC,CAAC;IAE7D,MAAM,QAAQ,GAAG,CAAC,GAAG,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5E,OAAO;QACL,MAAM,EAAE,IAAI;QACZ,MAAM,EAAE,UAAU,QAAQ,CAAC,MAAM,qBAAqB,KAAK,CAAC,UAAU,sBAAsB;QAC5F,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,iBAAiB,EAAE,QAAQ,CAAC,MAAM;KACnC,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doc-semantics.d.ts","sourceRoot":"","sources":["../../src/index/doc-semantics.ts"],"names":[],"mappings":"AASA,OAAO,EAAuB,KAAK,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAG7E,MAAM,WAAW,uBAAuB;IACtC,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,eAAe,CAAC;CAC1B;AAED,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACtC;AAED,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,uBAAuB,GAC5B,OAAO,CAAC,sBAAsB,CAAC,
|
|
1
|
+
{"version":3,"file":"doc-semantics.d.ts","sourceRoot":"","sources":["../../src/index/doc-semantics.ts"],"names":[],"mappings":"AASA,OAAO,EAAuB,KAAK,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAG7E,MAAM,WAAW,uBAAuB;IACtC,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,eAAe,CAAC;CAC1B;AAED,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACtC;AAED,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,uBAAuB,GAC5B,OAAO,CAAC,sBAAsB,CAAC,CAkFjC;AAED,wBAAsB,qBAAqB,CACzC,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAChC,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAwB7B"}
|
|
@@ -62,7 +62,12 @@ export async function runDocSemanticMerge(opts) {
|
|
|
62
62
|
return {
|
|
63
63
|
merged: true,
|
|
64
64
|
detail: `${stats.filesScanned} files → ${stats.useCases} use cases, ${stats.features} features, ${stats.actors} actors` +
|
|
65
|
-
(stats.detailDocuments > 0
|
|
65
|
+
(stats.detailDocuments > 0
|
|
66
|
+
? `, ${stats.detailDocuments} detail documents` +
|
|
67
|
+
(stats.bdDetailDocuments > 0
|
|
68
|
+
? ` (${stats.srsDetailDocuments} SRS, ${stats.bdDetailDocuments} basic-design)`
|
|
69
|
+
: "")
|
|
70
|
+
: "") +
|
|
66
71
|
(stats.detailSections > 0 ? `, ${stats.detailSections} detail sections` : "") +
|
|
67
72
|
` (+${mergeStats.nodesCreated} nodes, ~${mergeStats.nodesUpdated} updated, +${mergeStats.edgesAdded} edges)`,
|
|
68
73
|
sourceHashes,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doc-semantics.js","sourceRoot":"","sources":["../../src/index/doc-semantics.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EACL,sBAAsB,EACtB,qBAAqB,GACtB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,mBAAmB,EAAwB,MAAM,kBAAkB,CAAC;AAC7E,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAchE,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,IAA6B;IAE7B,MAAM,UAAU,GAAG,mBAAmB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACzD,IAAI,CAAC,CAAC,MAAM,UAAU,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC;QACpC,OAAO;YACL,MAAM,EAAE,KAAK;YACb,MAAM,EAAE,WAAW,UAAU,EAAE;YAC/B,YAAY,EAAE,EAAE;SACjB,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GACV,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,QAAQ,CAAkB,UAAU,CAAC,CAAC,CAAC;IAC/D,MAAM,OAAO,GAAqD,EAAE,CAAC;IACrE,MAAM,YAAY,GAA2B,EAAE,CAAC;IAEhD,KAAK,MAAM,GAAG,IAAI,CAAC,KAAK,EAAE,aAAa,CAAU,EAAE,CAAC;QAClD,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACnC,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC;YAClB,SAAS;QACX,CAAC;QACD,MAAM,KAAK,GAAG,MAAM,qBAAqB,CACvC,IAAI,CAAC,WAAW,EAChB,MAAM,CAAC,IAAI,EACX,MAAM,CAAC,IAAI,IAAI,SAAS,CACzB,CAAC;QACF,YAAY,CAAC,GAAG,CAAC,GAAG,sBAAsB,CAAC,KAAK,CAAC,CAAC;QAClD,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;YACtB,MAAM,OAAO,GAAG,MAAM,QAAQ,CAC5B,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,YAAY,CAAC,EACtC,MAAM,CACP,CAAC;YACF,OAAO,CAAC,IAAI,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,YAAY,EAAE,OAAO,EAAE,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO;YACL,MAAM,EAAE,KAAK;YACb,MAAM,EAAE,iDAAiD;YACzD,YAAY;SACb,CAAC;IACJ,CAAC;IAED,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;IACvD,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzD,OAAO;YACL,MAAM,EAAE,KAAK;YACb,MAAM,EAAE,WAAW,KAAK,CAAC,YAAY,+CAA+C;YACpF,YAAY;SACb,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACtD,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IACvD,MAAM,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,mBAAmB,EAAE,CAAC,CAAC;IAE7D,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,iCAAiC,CAAC,CAAC;IAC5E,MAAM,KAAK,GAAG,MAAM,QAAQ,CAA0B,SAAS,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;QAC5E,OAAO,EAAE,CAAC;QACV,YAAY,EAAE,EAAE;KACjB,CAAC,CAAC,CAAC;IACJ,MAAM,YAAY,GAAI,KAAK,CAAC,YAAwC,IAAI,EAAE,CAAC;IAC3E,YAAY,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAClD,YAAY,CAAC,YAAY,GAAG,YAAY,CAAC;IACzC,YAAY,CAAC,SAAS,GAAG,KAAK,CAAC;IAC/B,KAAK,CAAC,YAAY,GAAG,YAAY,CAAC;IAClC,MAAM,SAAS,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IAElC,OAAO;QACL,MAAM,EAAE,IAAI;QACZ,MAAM,EACJ,GAAG,KAAK,CAAC,YAAY,YAAY,KAAK,CAAC,QAAQ,eAAe,KAAK,CAAC,QAAQ,cAAc,KAAK,CAAC,MAAM,SAAS;YAC/G,CAAC,KAAK,CAAC,eAAe,GAAG,CAAC,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"doc-semantics.js","sourceRoot":"","sources":["../../src/index/doc-semantics.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
export type NodeType = "document" | "section" | "table" | "diagram" | "actor" | "useCase" | "feature" | "requirement" | "dataEntity";
|
|
2
|
-
export type
|
|
1
|
+
export type NodeType = "bundle" | "sourceFile" | "document" | "section" | "table" | "diagram" | "actor" | "useCase" | "feature" | "requirement" | "dataEntity";
|
|
2
|
+
export type BundleRole = "source" | "business" | "spec";
|
|
3
|
+
export type EdgeType = "partOf" | "contains" | "follows" | "references" | "listedIn" | "definedIn" | "describedIn" | "satisfies" | "dependsOn" | "requires" | "tracesTo" | "derivedFrom" | "rendersTo" | "relatesTo";
|
|
3
4
|
export interface GraphNode {
|
|
4
5
|
id: string;
|
|
5
6
|
type: NodeType;
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,QAAQ,GAChB,UAAU,GACV,SAAS,GACT,OAAO,GACP,SAAS,GACT,OAAO,GACP,SAAS,GACT,SAAS,GACT,aAAa,GACb,YAAY,CAAC;AAEjB,MAAM,MAAM,QAAQ,GAChB,QAAQ,GACR,UAAU,GACV,SAAS,GACT,YAAY,GACZ,UAAU,GACV,WAAW,GACX,aAAa,GACb,WAAW,GACX,WAAW,GACX,UAAU,GACV,UAAU,GACV,aAAa,GACb,WAAW,CAAC;AAEhB,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,QAAQ,CAAC;IACf,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,QAAQ,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,KAAK,EAAE,SAAS,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IAClC,QAAQ,EAAE,eAAe,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,gBAAgB,EAAE,CAAC;CAC/B;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,OAAO,GAAG,MAAM,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,SAAS,CAAC;CAClB"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,QAAQ,GAChB,QAAQ,GACR,YAAY,GACZ,UAAU,GACV,SAAS,GACT,OAAO,GACP,SAAS,GACT,OAAO,GACP,SAAS,GACT,SAAS,GACT,aAAa,GACb,YAAY,CAAC;AAEjB,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,UAAU,GAAG,MAAM,CAAC;AAExD,MAAM,MAAM,QAAQ,GAChB,QAAQ,GACR,UAAU,GACV,SAAS,GACT,YAAY,GACZ,UAAU,GACV,WAAW,GACX,aAAa,GACb,WAAW,GACX,WAAW,GACX,UAAU,GACV,UAAU,GACV,aAAa,GACb,WAAW,GACX,WAAW,CAAC;AAEhB,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,QAAQ,CAAC;IACf,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,QAAQ,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,KAAK,EAAE,SAAS,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IAClC,QAAQ,EAAE,eAAe,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,gBAAgB,EAAE,CAAC;CAC/B;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,OAAO,GAAG,MAAM,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,SAAS,CAAC;CAClB"}
|
package/package.json
CHANGED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 1,
|
|
3
|
+
"meta": {
|
|
4
|
+
"seed": "UC-03",
|
|
5
|
+
"generatedAt": "2026-05-21T00:00:00.000Z",
|
|
6
|
+
"agent": "cursor"
|
|
7
|
+
},
|
|
8
|
+
"nodes": [],
|
|
9
|
+
"edges": [
|
|
10
|
+
{
|
|
11
|
+
"type": "relatesTo",
|
|
12
|
+
"from": "sec.srs.uc-UC-03.l3.1.use-case-overview",
|
|
13
|
+
"to": "source.file:docs/data-source/requirement/outline.md",
|
|
14
|
+
"role": "evidence"
|
|
15
|
+
}
|
|
16
|
+
]
|
|
17
|
+
}
|
|
@@ -31,7 +31,9 @@ After **`/generate-srs`** (recommended):
|
|
|
31
31
|
ai-spector index
|
|
32
32
|
```
|
|
33
33
|
|
|
34
|
-
Index steps (default): registry/bootstrap → knowledge merge → **SRS/docs body extract** → Graphify (changed paths only) → **
|
|
34
|
+
Index steps (default): registry/bootstrap → knowledge merge → **SRS/docs body extract** → Graphify (changed paths only) → **source hub** → **provenance (`derivedFrom`)** → **business hub** → validate → doc indexes.
|
|
35
|
+
|
|
36
|
+
**CLI alone is not full semantics:** Index builds structure + parseable meaning. For cross-hub evidence links (`relatesTo`), run **`/link-graph`** after index, then `ai-spector graph merge --semantic`. Check gaps with `ai-spector graph report --json`.
|
|
35
37
|
|
|
36
38
|
**Provenance:** UC/F/requirement/actor nodes get **`derivedFrom`** edges to `docs/data-source/**` paths (from `knowledge.json` **`sourceRef`** / `sourceRefs` / `derivedFrom`, SRS detail **`Source:`** lines, or inline `docs/data-source/…` mentions) and optionally **`graphify:<nodeId>`** when Graphify `graph.json` matches a single symbol in that file. No evidence → no edge.
|
|
37
39
|
|