qfai 0.4.0 → 0.4.4
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/README.md +20 -1
- package/assets/init/.qfai/README.md +3 -1
- package/assets/init/.qfai/contracts/README.md +17 -8
- package/assets/init/.qfai/contracts/api/api-0001-sample.yaml +3 -2
- package/assets/init/.qfai/contracts/db/db-0001-sample.sql +2 -1
- package/assets/init/.qfai/contracts/ui/ui-0001-sample.yaml +3 -1
- package/assets/init/.qfai/promptpack/modes/change.md +3 -2
- package/assets/init/.qfai/promptpack/modes/compatibility.md +2 -0
- package/assets/init/.qfai/prompts/README.md +1 -0
- package/assets/init/.qfai/prompts/qfai-generate-test-globs.md +29 -0
- package/assets/init/.qfai/prompts/require-to-spec.md +4 -2
- package/assets/init/.qfai/specs/README.md +9 -2
- package/assets/init/.qfai/specs/spec-0001/spec.md +2 -0
- package/assets/init/root/qfai.config.yaml +6 -1
- package/assets/init/root/tests/qfai-traceability.sample.test.ts +2 -2
- package/dist/cli/index.cjs +885 -489
- package/dist/cli/index.cjs.map +1 -1
- package/dist/cli/index.mjs +885 -489
- package/dist/cli/index.mjs.map +1 -1
- package/dist/core/config.d.ts +2 -1
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/config.js +4 -2
- package/dist/core/config.js.map +1 -1
- package/dist/core/contractIndex.d.ts +1 -2
- package/dist/core/contractIndex.d.ts.map +1 -1
- package/dist/core/contractIndex.js +10 -38
- package/dist/core/contractIndex.js.map +1 -1
- package/dist/core/contractsDecl.d.ts +3 -0
- package/dist/core/contractsDecl.d.ts.map +1 -0
- package/dist/core/contractsDecl.js +19 -0
- package/dist/core/contractsDecl.js.map +1 -0
- package/dist/core/fs.d.ts +5 -0
- package/dist/core/fs.d.ts.map +1 -1
- package/dist/core/fs.js +13 -0
- package/dist/core/fs.js.map +1 -1
- package/dist/core/ids.d.ts +1 -1
- package/dist/core/ids.d.ts.map +1 -1
- package/dist/core/ids.js +3 -3
- package/dist/core/ids.js.map +1 -1
- package/dist/core/parse/spec.d.ts +8 -0
- package/dist/core/parse/spec.d.ts.map +1 -1
- package/dist/core/parse/spec.js +43 -0
- package/dist/core/parse/spec.js.map +1 -1
- package/dist/core/report.d.ts +16 -2
- package/dist/core/report.d.ts.map +1 -1
- package/dist/core/report.js +144 -11
- package/dist/core/report.js.map +1 -1
- package/dist/core/scenarioModel.d.ts.map +1 -1
- package/dist/core/scenarioModel.js +3 -5
- package/dist/core/scenarioModel.js.map +1 -1
- package/dist/core/traceability.d.ts +15 -1
- package/dist/core/traceability.d.ts.map +1 -1
- package/dist/core/traceability.js +96 -9
- package/dist/core/traceability.js.map +1 -1
- package/dist/core/types.d.ts +6 -0
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/validate.d.ts.map +1 -1
- package/dist/core/validate.js +12 -1
- package/dist/core/validate.js.map +1 -1
- package/dist/core/validators/contracts.d.ts.map +1 -1
- package/dist/core/validators/contracts.js +45 -18
- package/dist/core/validators/contracts.js.map +1 -1
- package/dist/core/validators/scenario.d.ts.map +1 -1
- package/dist/core/validators/scenario.js +2 -15
- package/dist/core/validators/scenario.js.map +1 -1
- package/dist/core/validators/spec.js +1 -1
- package/dist/core/validators/spec.js.map +1 -1
- package/dist/core/validators/traceability.d.ts.map +1 -1
- package/dist/core/validators/traceability.js +66 -34
- package/dist/core/validators/traceability.js.map +1 -1
- package/dist/index.cjs +869 -473
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +37 -12
- package/dist/index.mjs +869 -473
- package/dist/index.mjs.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +2 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/core/validate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAyB,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/core/validate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAyB,MAAM,aAAa,CAAC;AAC7E,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EACL,eAAe,EACf,6BAA6B,EAC7B,uBAAuB,GACxB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AAEpE,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,IAAY,EACZ,YAA+B;IAE/B,MAAM,QAAQ,GAAG,YAAY,IAAI,CAAC,MAAM,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;IAC1D,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,QAAQ,CAAC;IAClD,MAAM,MAAM,GAAG;QACb,GAAG,YAAY;QACf,GAAG,CAAC,MAAM,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACtC,GAAG,CAAC,MAAM,cAAc,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACvC,GAAG,CAAC,MAAM,iBAAiB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAC1C,GAAG,CAAC,MAAM,iBAAiB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAC1C,GAAG,CAAC,MAAM,kBAAkB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAC3C,GAAG,CAAC,MAAM,oBAAoB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;KAC9C,CAAC;IAEF,MAAM,SAAS,GAAG,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;IACxD,MAAM,aAAa,GAAG,MAAM,oBAAoB,CAAC,SAAS,CAAC,CAAC;IAC5D,MAAM,KAAK,GAAG,MAAM,6BAA6B,CAAC,aAAa,CAAC,CAAC;IACjE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,MAAM,uBAAuB,CACzE,IAAI,EACJ,MAAM,CAAC,UAAU,CAAC,YAAY,CAAC,aAAa,EAC5C,MAAM,CAAC,UAAU,CAAC,YAAY,CAAC,oBAAoB,CACpD,CAAC;IACF,MAAM,UAAU,GAAG,eAAe,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;IAEtD,MAAM,WAAW,GAAG,MAAM,kBAAkB,EAAE,CAAC;IAC/C,OAAO;QACL,WAAW;QACX,MAAM;QACN,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC;QAC3B,YAAY,EAAE;YACZ,EAAE,EAAE,UAAU;YACd,SAAS;SACV;KACF,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAAC,MAAe;IAClC,OAAO,MAAM,CAAC,MAAM,CAClB,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE;QACb,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACzB,OAAO,GAAG,CAAC;IACb,CAAC,EACD,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAClC,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contracts.d.ts","sourceRoot":"","sources":["../../../src/core/validators/contracts.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"contracts.d.ts","sourceRoot":"","sources":["../../../src/core/validators/contracts.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAc/C,OAAO,KAAK,EAAE,KAAK,EAAiB,MAAM,aAAa,CAAC;AAYxD,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,UAAU,GACjB,OAAO,CAAC,KAAK,EAAE,CAAC,CAWlB;AAkLD,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,KAAK,EAAE,CAgB3D"}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { readFile } from "node:fs/promises";
|
|
2
2
|
import path from "node:path";
|
|
3
3
|
import { resolvePath } from "../config.js";
|
|
4
|
-
import {
|
|
4
|
+
import { parseStructuredContract } from "../contracts.js";
|
|
5
|
+
import { buildContractIndex } from "../contractIndex.js";
|
|
6
|
+
import { extractDeclaredContractIds, stripContractDeclarationLines, } from "../contractsDecl.js";
|
|
5
7
|
import { collectApiContractFiles, collectDataContractFiles, collectUiContractFiles, } from "../discovery.js";
|
|
6
8
|
import { extractInvalidIds } from "../ids.js";
|
|
7
9
|
const SQL_DANGEROUS_PATTERNS = [
|
|
@@ -19,6 +21,8 @@ export async function validateContracts(root, config) {
|
|
|
19
21
|
issues.push(...(await validateUiContracts(path.join(contractsRoot, "ui"))));
|
|
20
22
|
issues.push(...(await validateApiContracts(path.join(contractsRoot, "api"))));
|
|
21
23
|
issues.push(...(await validateDataContracts(path.join(contractsRoot, "db"))));
|
|
24
|
+
const contractIndex = await buildContractIndex(root, config);
|
|
25
|
+
issues.push(...validateDuplicateContractIds(contractIndex));
|
|
22
26
|
return issues;
|
|
23
27
|
}
|
|
24
28
|
async function validateUiContracts(uiRoot) {
|
|
@@ -37,23 +41,19 @@ async function validateUiContracts(uiRoot) {
|
|
|
37
41
|
"SC",
|
|
38
42
|
"UI",
|
|
39
43
|
"API",
|
|
40
|
-
"
|
|
44
|
+
"DB",
|
|
41
45
|
"ADR",
|
|
42
46
|
]);
|
|
43
47
|
if (invalidIds.length > 0) {
|
|
44
48
|
issues.push(issue("QFAI-ID-002", `ID フォーマットが不正です: ${invalidIds.join(", ")}`, "error", file, "id.format", invalidIds));
|
|
45
49
|
}
|
|
46
|
-
|
|
50
|
+
const declaredIds = extractDeclaredContractIds(text);
|
|
51
|
+
issues.push(...validateDeclaredContractIds(declaredIds, file, "UI"));
|
|
47
52
|
try {
|
|
48
|
-
|
|
53
|
+
parseStructuredContract(file, stripContractDeclarationLines(text));
|
|
49
54
|
}
|
|
50
55
|
catch (error) {
|
|
51
56
|
issues.push(issue("QFAI-CONTRACT-001", `UI 契約ファイルの解析に失敗しました: ${file} (${formatError(error)})`, "error", file, "contracts.ui.parse"));
|
|
52
|
-
continue;
|
|
53
|
-
}
|
|
54
|
-
const uiIds = extractUiContractIds(doc);
|
|
55
|
-
if (uiIds.length === 0) {
|
|
56
|
-
issues.push(issue("QFAI-CONTRACT-002", `UI 契約に ID(UI-xxxx) が見つかりません: ${file}`, "error", file, "contracts.ui.id"));
|
|
57
57
|
}
|
|
58
58
|
}
|
|
59
59
|
return issues;
|
|
@@ -74,15 +74,17 @@ async function validateApiContracts(apiRoot) {
|
|
|
74
74
|
"SC",
|
|
75
75
|
"UI",
|
|
76
76
|
"API",
|
|
77
|
-
"
|
|
77
|
+
"DB",
|
|
78
78
|
"ADR",
|
|
79
79
|
]);
|
|
80
80
|
if (invalidIds.length > 0) {
|
|
81
81
|
issues.push(issue("QFAI-ID-002", `ID フォーマットが不正です: ${invalidIds.join(", ")}`, "error", file, "id.format", invalidIds));
|
|
82
82
|
}
|
|
83
|
+
const declaredIds = extractDeclaredContractIds(text);
|
|
84
|
+
issues.push(...validateDeclaredContractIds(declaredIds, file, "API"));
|
|
83
85
|
let doc;
|
|
84
86
|
try {
|
|
85
|
-
doc = parseStructuredContract(file, text);
|
|
87
|
+
doc = parseStructuredContract(file, stripContractDeclarationLines(text));
|
|
86
88
|
}
|
|
87
89
|
catch (error) {
|
|
88
90
|
issues.push(issue("QFAI-CONTRACT-001", `API 契約ファイルの解析に失敗しました: ${file} (${formatError(error)})`, "error", file, "contracts.api.parse"));
|
|
@@ -91,10 +93,6 @@ async function validateApiContracts(apiRoot) {
|
|
|
91
93
|
if (!hasOpenApi(doc)) {
|
|
92
94
|
issues.push(issue("QFAI-API-001", "OpenAPI 定義が見つかりません。", "error", file, "contracts.api.openapi"));
|
|
93
95
|
}
|
|
94
|
-
const apiIds = extractApiContractIds(doc);
|
|
95
|
-
if (apiIds.length === 0) {
|
|
96
|
-
issues.push(issue("QFAI-CONTRACT-002", `API 契約に ID(API-xxxx) が見つかりません: ${file}`, "error", file, "contracts.api.id"));
|
|
97
|
-
}
|
|
98
96
|
}
|
|
99
97
|
return issues;
|
|
100
98
|
}
|
|
@@ -102,7 +100,7 @@ async function validateDataContracts(dataRoot) {
|
|
|
102
100
|
const files = await collectDataContractFiles(dataRoot);
|
|
103
101
|
if (files.length === 0) {
|
|
104
102
|
return [
|
|
105
|
-
issue("QFAI-
|
|
103
|
+
issue("QFAI-DB-000", "DB 契約ファイルが見つかりません。", "info", dataRoot, "contracts.db.files"),
|
|
106
104
|
];
|
|
107
105
|
}
|
|
108
106
|
const issues = [];
|
|
@@ -114,12 +112,14 @@ async function validateDataContracts(dataRoot) {
|
|
|
114
112
|
"SC",
|
|
115
113
|
"UI",
|
|
116
114
|
"API",
|
|
117
|
-
"
|
|
115
|
+
"DB",
|
|
118
116
|
"ADR",
|
|
119
117
|
]);
|
|
120
118
|
if (invalidIds.length > 0) {
|
|
121
119
|
issues.push(issue("QFAI-ID-002", `ID フォーマットが不正です: ${invalidIds.join(", ")}`, "error", file, "id.format", invalidIds));
|
|
122
120
|
}
|
|
121
|
+
const declaredIds = extractDeclaredContractIds(text);
|
|
122
|
+
issues.push(...validateDeclaredContractIds(declaredIds, file, "DB"));
|
|
123
123
|
issues.push(...lintSql(text, file));
|
|
124
124
|
}
|
|
125
125
|
return issues;
|
|
@@ -128,8 +128,35 @@ export function lintSql(text, file) {
|
|
|
128
128
|
const issues = [];
|
|
129
129
|
for (const { pattern, label } of SQL_DANGEROUS_PATTERNS) {
|
|
130
130
|
if (pattern.test(text)) {
|
|
131
|
-
issues.push(issue("QFAI-
|
|
131
|
+
issues.push(issue("QFAI-DB-001", `危険な SQL 操作が含まれています: ${label}`, "warning", file, "contracts.db.sql"));
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
return issues;
|
|
135
|
+
}
|
|
136
|
+
function validateDeclaredContractIds(ids, file, kind) {
|
|
137
|
+
const issues = [];
|
|
138
|
+
if (ids.length === 0) {
|
|
139
|
+
issues.push(issue("QFAI-CONTRACT-010", `契約ファイルに QFAI-CONTRACT-ID がありません: ${file}`, "error", file, "contracts.declaration"));
|
|
140
|
+
return issues;
|
|
141
|
+
}
|
|
142
|
+
if (ids.length > 1) {
|
|
143
|
+
issues.push(issue("QFAI-CONTRACT-011", `契約ファイルに複数の QFAI-CONTRACT-ID が宣言されています: ${ids.join(", ")}`, "error", file, "contracts.declaration", ids));
|
|
144
|
+
return issues;
|
|
145
|
+
}
|
|
146
|
+
const [id] = ids;
|
|
147
|
+
if (id && !id.startsWith(`${kind}-`)) {
|
|
148
|
+
issues.push(issue("QFAI-CONTRACT-013", `契約ファイルの QFAI-CONTRACT-ID が ${kind}- ではありません: ${id}`, "error", file, "contracts.declarationPrefix", [id]));
|
|
149
|
+
}
|
|
150
|
+
return issues;
|
|
151
|
+
}
|
|
152
|
+
function validateDuplicateContractIds(contractIndex) {
|
|
153
|
+
const issues = [];
|
|
154
|
+
for (const [id, files] of contractIndex.idToFiles.entries()) {
|
|
155
|
+
if (files.size <= 1) {
|
|
156
|
+
continue;
|
|
132
157
|
}
|
|
158
|
+
const sortedFiles = Array.from(files).sort((a, b) => a.localeCompare(b));
|
|
159
|
+
issues.push(issue("QFAI-CONTRACT-012", `契約 ID が複数ファイルで宣言されています: ${id} (${sortedFiles.join(", ")})`, "error", sortedFiles[0], "contracts.idDuplicate", [id]));
|
|
133
160
|
}
|
|
134
161
|
return issues;
|
|
135
162
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contracts.js","sourceRoot":"","sources":["../../../src/core/validators/contracts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,IAAI,MAAM,WAAW,CAAC;AAG7B,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,
|
|
1
|
+
{"version":3,"file":"contracts.js","sourceRoot":"","sources":["../../../src/core/validators/contracts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,IAAI,MAAM,WAAW,CAAC;AAG7B,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EACL,0BAA0B,EAC1B,6BAA6B,GAC9B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,uBAAuB,EACvB,wBAAwB,EACxB,sBAAsB,GACvB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAG9C,MAAM,sBAAsB,GAA8C;IACxE,EAAE,OAAO,EAAE,mBAAmB,EAAE,KAAK,EAAE,YAAY,EAAE;IACrD,EAAE,OAAO,EAAE,sBAAsB,EAAE,KAAK,EAAE,eAAe,EAAE;IAC3D,EAAE,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE,UAAU,EAAE;IAC/C;QACE,OAAO,EAAE,mCAAmC;QAC5C,KAAK,EAAE,sBAAsB;KAC9B;CACF,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,IAAY,EACZ,MAAkB;IAElB,MAAM,MAAM,GAAY,EAAE,CAAC;IAC3B,MAAM,aAAa,GAAG,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,cAAc,CAAC,CAAC;IAEhE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5E,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9E,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9E,MAAM,aAAa,GAAG,MAAM,kBAAkB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC7D,MAAM,CAAC,IAAI,CAAC,GAAG,4BAA4B,CAAC,aAAa,CAAC,CAAC,CAAC;IAE5D,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,KAAK,UAAU,mBAAmB,CAAC,MAAc;IAC/C,MAAM,KAAK,GAAG,MAAM,sBAAsB,CAAC,MAAM,CAAC,CAAC;IACnD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO;YACL,KAAK,CACH,aAAa,EACb,oBAAoB,EACpB,MAAM,EACN,MAAM,EACN,oBAAoB,CACrB;SACF,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAY,EAAE,CAAC;IAC3B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC3C,MAAM,UAAU,GAAG,iBAAiB,CAAC,IAAI,EAAE;YACzC,MAAM;YACN,IAAI;YACJ,IAAI;YACJ,IAAI;YACJ,KAAK;YACL,IAAI;YACJ,KAAK;SACN,CAAC,CAAC;QACH,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1B,MAAM,CAAC,IAAI,CACT,KAAK,CACH,aAAa,EACb,mBAAmB,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAC1C,OAAO,EACP,IAAI,EACJ,WAAW,EACX,UAAU,CACX,CACF,CAAC;QACJ,CAAC;QACD,MAAM,WAAW,GAAG,0BAA0B,CAAC,IAAI,CAAC,CAAC;QACrD,MAAM,CAAC,IAAI,CAAC,GAAG,2BAA2B,CAAC,WAAW,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;QACrE,IAAI,CAAC;YACH,uBAAuB,CAAC,IAAI,EAAE,6BAA6B,CAAC,IAAI,CAAC,CAAC,CAAC;QACrE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,IAAI,CACT,KAAK,CACH,mBAAmB,EACnB,wBAAwB,IAAI,KAAK,WAAW,CAAC,KAAK,CAAC,GAAG,EACtD,OAAO,EACP,IAAI,EACJ,oBAAoB,CACrB,CACF,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,KAAK,UAAU,oBAAoB,CAAC,OAAe;IACjD,MAAM,KAAK,GAAG,MAAM,uBAAuB,CAAC,OAAO,CAAC,CAAC;IACrD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO;YACL,KAAK,CACH,cAAc,EACd,qBAAqB,EACrB,MAAM,EACN,OAAO,EACP,qBAAqB,CACtB;SACF,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAY,EAAE,CAAC;IAC3B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC3C,MAAM,UAAU,GAAG,iBAAiB,CAAC,IAAI,EAAE;YACzC,MAAM;YACN,IAAI;YACJ,IAAI;YACJ,IAAI;YACJ,KAAK;YACL,IAAI;YACJ,KAAK;SACN,CAAC,CAAC;QACH,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1B,MAAM,CAAC,IAAI,CACT,KAAK,CACH,aAAa,EACb,mBAAmB,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAC1C,OAAO,EACP,IAAI,EACJ,WAAW,EACX,UAAU,CACX,CACF,CAAC;QACJ,CAAC;QACD,MAAM,WAAW,GAAG,0BAA0B,CAAC,IAAI,CAAC,CAAC;QACrD,MAAM,CAAC,IAAI,CAAC,GAAG,2BAA2B,CAAC,WAAW,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;QACtE,IAAI,GAA4B,CAAC;QACjC,IAAI,CAAC;YACH,GAAG,GAAG,uBAAuB,CAAC,IAAI,EAAE,6BAA6B,CAAC,IAAI,CAAC,CAAC,CAAC;QAC3E,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,IAAI,CACT,KAAK,CACH,mBAAmB,EACnB,yBAAyB,IAAI,KAAK,WAAW,CAAC,KAAK,CAAC,GAAG,EACvD,OAAO,EACP,IAAI,EACJ,qBAAqB,CACtB,CACF,CAAC;YACF,SAAS;QACX,CAAC;QAED,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACrB,MAAM,CAAC,IAAI,CACT,KAAK,CACH,cAAc,EACd,qBAAqB,EACrB,OAAO,EACP,IAAI,EACJ,uBAAuB,CACxB,CACF,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,KAAK,UAAU,qBAAqB,CAAC,QAAgB;IACnD,MAAM,KAAK,GAAG,MAAM,wBAAwB,CAAC,QAAQ,CAAC,CAAC;IACvD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO;YACL,KAAK,CACH,aAAa,EACb,oBAAoB,EACpB,MAAM,EACN,QAAQ,EACR,oBAAoB,CACrB;SACF,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAY,EAAE,CAAC;IAC3B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC3C,MAAM,UAAU,GAAG,iBAAiB,CAAC,IAAI,EAAE;YACzC,MAAM;YACN,IAAI;YACJ,IAAI;YACJ,IAAI;YACJ,KAAK;YACL,IAAI;YACJ,KAAK;SACN,CAAC,CAAC;QACH,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1B,MAAM,CAAC,IAAI,CACT,KAAK,CACH,aAAa,EACb,mBAAmB,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAC1C,OAAO,EACP,IAAI,EACJ,WAAW,EACX,UAAU,CACX,CACF,CAAC;QACJ,CAAC;QACD,MAAM,WAAW,GAAG,0BAA0B,CAAC,IAAI,CAAC,CAAC;QACrD,MAAM,CAAC,IAAI,CAAC,GAAG,2BAA2B,CAAC,WAAW,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;QACrE,MAAM,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;IACtC,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,IAAY,EAAE,IAAY;IAChD,MAAM,MAAM,GAAY,EAAE,CAAC;IAC3B,KAAK,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,sBAAsB,EAAE,CAAC;QACxD,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACvB,MAAM,CAAC,IAAI,CACT,KAAK,CACH,aAAa,EACb,uBAAuB,KAAK,EAAE,EAC9B,SAAS,EACT,IAAI,EACJ,kBAAkB,CACnB,CACF,CAAC;QACJ,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAID,SAAS,2BAA2B,CAClC,GAAa,EACb,IAAY,EACZ,IAAkB;IAElB,MAAM,MAAM,GAAY,EAAE,CAAC;IAC3B,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrB,MAAM,CAAC,IAAI,CACT,KAAK,CACH,mBAAmB,EACnB,oCAAoC,IAAI,EAAE,EAC1C,OAAO,EACP,IAAI,EACJ,uBAAuB,CACxB,CACF,CAAC;QACF,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACnB,MAAM,CAAC,IAAI,CACT,KAAK,CACH,mBAAmB,EACnB,0CAA0C,GAAG,CAAC,IAAI,CAChD,IAAI,CACL,EAAE,EACH,OAAO,EACP,IAAI,EACJ,uBAAuB,EACvB,GAAG,CACJ,CACF,CAAC;QACF,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,MAAM,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;IACjB,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,IAAI,GAAG,CAAC,EAAE,CAAC;QACrC,MAAM,CAAC,IAAI,CACT,KAAK,CACH,mBAAmB,EACnB,8BAA8B,IAAI,cAAc,EAAE,EAAE,EACpD,OAAO,EACP,IAAI,EACJ,6BAA6B,EAC7B,CAAC,EAAE,CAAC,CACL,CACF,CAAC;IACJ,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,4BAA4B,CAAC,aAErC;IACC,MAAM,MAAM,GAAY,EAAE,CAAC;IAC3B,KAAK,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,aAAa,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,CAAC;QAC5D,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,EAAE,CAAC;YACpB,SAAS;QACX,CAAC;QACD,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;QACzE,MAAM,CAAC,IAAI,CACT,KAAK,CACH,mBAAmB,EACnB,2BAA2B,EAAE,KAAK,WAAW,CAAC,IAAI,CAChD,IAAI,CACL,GAAG,EACJ,OAAO,EACP,WAAW,CAAC,CAAC,CAAC,EACd,uBAAuB,EACvB,CAAC,EAAE,CAAC,CACL,CACF,CAAC;IACJ,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,UAAU,CAAC,GAA4B;IAC9C,OAAO,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,IAAI,GAAG,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;AACnE,CAAC;AAED,SAAS,WAAW,CAAC,KAAc;IACjC,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAC3B,OAAO,KAAK,CAAC,OAAO,CAAC;IACvB,CAAC;IACD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AACvB,CAAC;AAED,SAAS,KAAK,CACZ,IAAY,EACZ,OAAe,EACf,QAAuB,EACvB,IAAa,EACb,IAAa,EACb,IAAe;IAEf,MAAM,KAAK,GAAU;QACnB,IAAI;QACJ,QAAQ;QACR,OAAO;KACR,CAAC;IACF,IAAI,IAAI,EAAE,CAAC;QACT,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;IACpB,CAAC;IACD,IAAI,IAAI,EAAE,CAAC;QACT,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;IACpB,CAAC;IACD,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;IACpB,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scenario.d.ts","sourceRoot":"","sources":["../../../src/core/validators/scenario.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAK/C,OAAO,KAAK,EAAE,KAAK,EAAiB,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"scenario.d.ts","sourceRoot":"","sources":["../../../src/core/validators/scenario.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAK/C,OAAO,KAAK,EAAE,KAAK,EAAiB,MAAM,aAAa,CAAC;AAQxD,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,UAAU,GACjB,OAAO,CAAC,KAAK,EAAE,CAAC,CA0ClB;AAED,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,KAAK,EAAE,CAwI3E"}
|
|
@@ -8,7 +8,6 @@ const WHEN_PATTERN = /\bWhen\b/;
|
|
|
8
8
|
const THEN_PATTERN = /\bThen\b/;
|
|
9
9
|
const SC_TAG_RE = /^SC-\d{4}$/;
|
|
10
10
|
const SPEC_TAG_RE = /^SPEC-\d{4}$/;
|
|
11
|
-
const BR_TAG_RE = /^BR-\d{4}$/;
|
|
12
11
|
export async function validateScenarios(root, config) {
|
|
13
12
|
const specsRoot = resolvePath(root, config, "specsDir");
|
|
14
13
|
const entries = await collectSpecEntries(specsRoot);
|
|
@@ -44,7 +43,7 @@ export function validateScenarioContent(text, file) {
|
|
|
44
43
|
"SC",
|
|
45
44
|
"UI",
|
|
46
45
|
"API",
|
|
47
|
-
"
|
|
46
|
+
"DB",
|
|
48
47
|
"ADR",
|
|
49
48
|
]);
|
|
50
49
|
if (invalidIds.length > 0) {
|
|
@@ -56,10 +55,7 @@ export function validateScenarioContent(text, file) {
|
|
|
56
55
|
return issues;
|
|
57
56
|
}
|
|
58
57
|
const featureSpecTags = document.featureTags.filter((tag) => SPEC_TAG_RE.test(tag));
|
|
59
|
-
if (featureSpecTags.length
|
|
60
|
-
issues.push(issue("QFAI-SC-009", "Feature タグに SPEC が見つかりません。", "error", file, "scenario.featureSpec"));
|
|
61
|
-
}
|
|
62
|
-
else if (featureSpecTags.length > 1) {
|
|
58
|
+
if (featureSpecTags.length > 1) {
|
|
63
59
|
issues.push(issue("QFAI-SC-009", `Feature の SPEC タグが複数あります: ${featureSpecTags.join(", ")}`, "error", file, "scenario.featureSpec", featureSpecTags));
|
|
64
60
|
}
|
|
65
61
|
const missingStructure = [];
|
|
@@ -70,9 +66,6 @@ export function validateScenarioContent(text, file) {
|
|
|
70
66
|
if (missingStructure.length > 0) {
|
|
71
67
|
issues.push(issue("QFAI-SC-006", `Scenario ファイルに必要な構造がありません: ${missingStructure.join(", ")}`, "error", file, "scenario.structure"));
|
|
72
68
|
}
|
|
73
|
-
if (document.scenarios.length > 1) {
|
|
74
|
-
issues.push(issue("QFAI-SC-011", `Scenario は1つのみ許可されています(検出: ${document.scenarios.length}件)`, "error", file, "scenario.single"));
|
|
75
|
-
}
|
|
76
69
|
for (const scenario of document.scenarios) {
|
|
77
70
|
if (scenario.tags.length === 0) {
|
|
78
71
|
issues.push(issue("QFAI-SC-007", `Scenario タグが見つかりません: ${scenario.name}`, "error", file, "scenario.tags"));
|
|
@@ -86,12 +79,6 @@ export function validateScenarioContent(text, file) {
|
|
|
86
79
|
else if (scTags.length > 1) {
|
|
87
80
|
missingTags.push(`SC(${scTags.length}件/1件必須)`);
|
|
88
81
|
}
|
|
89
|
-
if (!scenario.tags.some((tag) => SPEC_TAG_RE.test(tag))) {
|
|
90
|
-
missingTags.push("SPEC");
|
|
91
|
-
}
|
|
92
|
-
if (!scenario.tags.some((tag) => BR_TAG_RE.test(tag))) {
|
|
93
|
-
missingTags.push("BR");
|
|
94
|
-
}
|
|
95
82
|
if (missingTags.length > 0) {
|
|
96
83
|
issues.push(issue("QFAI-SC-008", `Scenario タグに不足があります: ${missingTags.join(", ")} (${scenario.name})`, "error", file, "scenario.tagIds"));
|
|
97
84
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scenario.js","sourceRoot":"","sources":["../../../src/core/validators/scenario.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAG5C,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAG5D,MAAM,aAAa,GAAG,WAAW,CAAC;AAClC,MAAM,YAAY,GAAG,UAAU,CAAC;AAChC,MAAM,YAAY,GAAG,UAAU,CAAC;AAChC,MAAM,SAAS,GAAG,YAAY,CAAC;AAC/B,MAAM,WAAW,GAAG,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"scenario.js","sourceRoot":"","sources":["../../../src/core/validators/scenario.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spec.js","sourceRoot":"","sources":["../../../src/core/validators/spec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAGtD,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,IAAY,EACZ,MAAkB;IAElB,MAAM,SAAS,GAAG,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;IACxD,MAAM,OAAO,GAAG,MAAM,kBAAkB,CAAC,SAAS,CAAC,CAAC;IAEpD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,QAAQ,GAAG,mBAAmB,CAAC;QACrC,MAAM,MAAM,GAAG,kBAAkB,CAAC;QAClC,OAAO;YACL,KAAK,CACH,eAAe,EACf,2BAA2B,MAAM,CAAC,KAAK,CAAC,QAAQ,cAAc,QAAQ,KAAK,MAAM,QAAQ,EACzF,MAAM,EACN,SAAS,EACT,YAAY,CACb;SACF,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAY,EAAE,CAAC;IAC3B,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,IAAI,IAAY,CAAC;QACjB,IAAI,CAAC;YACH,IAAI,GAAG,MAAM,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACjD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC9B,MAAM,CAAC,IAAI,CACT,KAAK,CACH,eAAe,EACf,mBAAmB,EACnB,OAAO,EACP,KAAK,CAAC,QAAQ,EACd,aAAa,CACd,CACF,CAAC;gBACF,SAAS;YACX,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;QACD,MAAM,CAAC,IAAI,CACT,GAAG,mBAAmB,CACpB,IAAI,EACJ,KAAK,CAAC,QAAQ,EACd,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,YAAY,CACvC,CACF,CAAC;IACJ,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,IAAY,EACZ,IAAY,EACZ,gBAA0B;IAE1B,MAAM,MAAM,GAAY,EAAE,CAAC;IAE3B,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAErC,MAAM,UAAU,GAAG,iBAAiB,CAAC,IAAI,EAAE;QACzC,MAAM;QACN,IAAI;QACJ,IAAI;QACJ,IAAI;QACJ,KAAK;QACL,
|
|
1
|
+
{"version":3,"file":"spec.js","sourceRoot":"","sources":["../../../src/core/validators/spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"traceability.d.ts","sourceRoot":"","sources":["../../../src/core/validators/traceability.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAS/C,OAAO,KAAK,EAAE,KAAK,EAAiB,MAAM,aAAa,CAAC;AAKxD,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,UAAU,GACjB,OAAO,CAAC,KAAK,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"traceability.d.ts","sourceRoot":"","sources":["../../../src/core/validators/traceability.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAS/C,OAAO,KAAK,EAAE,KAAK,EAAiB,MAAM,aAAa,CAAC;AAKxD,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,UAAU,GACjB,OAAO,CAAC,KAAK,EAAE,CAAC,CAkXlB"}
|
|
@@ -3,7 +3,7 @@ import { resolvePath } from "../config.js";
|
|
|
3
3
|
import { buildContractIndex } from "../contractIndex.js";
|
|
4
4
|
import { collectScenarioFiles, collectSpecFiles } from "../discovery.js";
|
|
5
5
|
import { collectFiles } from "../fs.js";
|
|
6
|
-
import { extractAllIds
|
|
6
|
+
import { extractAllIds } from "../ids.js";
|
|
7
7
|
import { parseSpec } from "../parse/spec.js";
|
|
8
8
|
import { buildScenarioAtoms, parseScenarioDocument } from "../scenarioModel.js";
|
|
9
9
|
import { SC_TAG_RE, collectScTestReferences } from "../traceability.js";
|
|
@@ -21,8 +21,7 @@ export async function validateTraceability(root, config) {
|
|
|
21
21
|
const brIdsInSpecs = new Set();
|
|
22
22
|
const brIdsInScenarios = new Set();
|
|
23
23
|
const scIdsInScenarios = new Set();
|
|
24
|
-
const
|
|
25
|
-
const scWithContracts = new Set();
|
|
24
|
+
const specContractIds = new Set();
|
|
26
25
|
const specToBrIds = new Map();
|
|
27
26
|
const contractIndex = await buildContractIndex(root, config);
|
|
28
27
|
const contractIds = contractIndex.ids;
|
|
@@ -35,20 +34,30 @@ export async function validateTraceability(root, config) {
|
|
|
35
34
|
}
|
|
36
35
|
const brIds = parsed.brs.map((br) => br.id);
|
|
37
36
|
brIds.forEach((id) => brIdsInSpecs.add(id));
|
|
38
|
-
const referencedContractIds = new Set([
|
|
39
|
-
...extractIds(text, "UI"),
|
|
40
|
-
...extractIds(text, "API"),
|
|
41
|
-
...extractIds(text, "DATA"),
|
|
42
|
-
]);
|
|
43
|
-
const unknownContractIds = Array.from(referencedContractIds).filter((id) => !contractIds.has(id));
|
|
44
|
-
if (unknownContractIds.length > 0) {
|
|
45
|
-
issues.push(issue("QFAI-TRACE-009", `Spec が存在しない契約 ID を参照しています: ${unknownContractIds.join(", ")}`, "error", file, "traceability.specContractExists", unknownContractIds));
|
|
46
|
-
}
|
|
47
37
|
if (parsed.specId) {
|
|
48
38
|
const current = specToBrIds.get(parsed.specId) ?? new Set();
|
|
49
39
|
brIds.forEach((id) => current.add(id));
|
|
50
40
|
specToBrIds.set(parsed.specId, current);
|
|
51
41
|
}
|
|
42
|
+
const contractRefs = parsed.contractRefs;
|
|
43
|
+
if (contractRefs.lines.length === 0) {
|
|
44
|
+
issues.push(issue("QFAI-TRACE-020", "Spec に QFAI-CONTRACT-REF がありません。", "error", file, "traceability.specContractRefRequired"));
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
if (contractRefs.hasNone && contractRefs.ids.length > 0) {
|
|
48
|
+
issues.push(issue("QFAI-TRACE-021", "Spec の QFAI-CONTRACT-REF に none と契約 ID が混在しています。", "error", file, "traceability.specContractRefFormat"));
|
|
49
|
+
}
|
|
50
|
+
if (contractRefs.invalidTokens.length > 0) {
|
|
51
|
+
issues.push(issue("QFAI-TRACE-021", `Spec の契約 ID が不正です: ${contractRefs.invalidTokens.join(", ")}`, "error", file, "traceability.specContractRefFormat", contractRefs.invalidTokens));
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
contractRefs.ids.forEach((id) => {
|
|
55
|
+
specContractIds.add(id);
|
|
56
|
+
});
|
|
57
|
+
const unknownContractIds = contractRefs.ids.filter((id) => !contractIds.has(id));
|
|
58
|
+
if (unknownContractIds.length > 0) {
|
|
59
|
+
issues.push(issue("QFAI-TRACE-021", `Spec が未知の契約 ID を参照しています: ${unknownContractIds.join(", ")}`, "error", file, "traceability.specContractExists", unknownContractIds));
|
|
60
|
+
}
|
|
52
61
|
}
|
|
53
62
|
for (const file of scenarioFiles) {
|
|
54
63
|
const text = await readFile(file, "utf-8");
|
|
@@ -58,6 +67,7 @@ export async function validateTraceability(root, config) {
|
|
|
58
67
|
continue;
|
|
59
68
|
}
|
|
60
69
|
const atoms = buildScenarioAtoms(document);
|
|
70
|
+
const scIdsInFile = new Set();
|
|
61
71
|
for (const [index, scenario] of document.scenarios.entries()) {
|
|
62
72
|
const atom = atoms[index];
|
|
63
73
|
if (!atom) {
|
|
@@ -66,12 +76,17 @@ export async function validateTraceability(root, config) {
|
|
|
66
76
|
const specTags = scenario.tags.filter((tag) => SPEC_TAG_RE.test(tag));
|
|
67
77
|
const brTags = scenario.tags.filter((tag) => BR_TAG_RE.test(tag));
|
|
68
78
|
const scTags = scenario.tags.filter((tag) => SC_TAG_RE.test(tag));
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
if (
|
|
73
|
-
|
|
79
|
+
if (specTags.length === 0) {
|
|
80
|
+
issues.push(issue("QFAI-TRACE-014", `Scenario が SPEC タグを持っていません: ${scenario.name}`, "error", file, "traceability.scenarioSpecRequired"));
|
|
81
|
+
}
|
|
82
|
+
if (brTags.length === 0) {
|
|
83
|
+
issues.push(issue("QFAI-TRACE-015", `Scenario が BR タグを持っていません: ${scenario.name}`, "error", file, "traceability.scenarioBrRequired"));
|
|
74
84
|
}
|
|
85
|
+
brTags.forEach((id) => brIdsInScenarios.add(id));
|
|
86
|
+
scTags.forEach((id) => {
|
|
87
|
+
scIdsInScenarios.add(id);
|
|
88
|
+
scIdsInFile.add(id);
|
|
89
|
+
});
|
|
75
90
|
const unknownSpecIds = specTags.filter((id) => !specIds.has(id));
|
|
76
91
|
if (unknownSpecIds.length > 0) {
|
|
77
92
|
issues.push(issue("QFAI-TRACE-005", `Scenario が存在しない SPEC を参照しています: ${unknownSpecIds.join(", ")} (${scenario.name})`, "error", file, "traceability.scenarioSpecExists", unknownSpecIds));
|
|
@@ -99,6 +114,13 @@ export async function validateTraceability(root, config) {
|
|
|
99
114
|
}
|
|
100
115
|
}
|
|
101
116
|
}
|
|
117
|
+
if (scIdsInFile.size !== 1) {
|
|
118
|
+
const invalidScIds = Array.from(scIdsInFile).sort((a, b) => a.localeCompare(b));
|
|
119
|
+
const detail = invalidScIds.length === 0
|
|
120
|
+
? "SC が見つかりません"
|
|
121
|
+
: `複数の SC が存在します: ${invalidScIds.join(", ")}`;
|
|
122
|
+
issues.push(issue("QFAI-TRACE-012", `Spec entry が Spec:SC=1:1 を満たしていません: ${detail}`, "error", file, "traceability.specScOneToOne", invalidScIds));
|
|
123
|
+
}
|
|
102
124
|
}
|
|
103
125
|
if (upstreamIds.size === 0) {
|
|
104
126
|
return [
|
|
@@ -111,28 +133,38 @@ export async function validateTraceability(root, config) {
|
|
|
111
133
|
issues.push(issue("QFAI_TRACE_BR_ORPHAN", `BR が SC に紐づいていません: ${orphanBrIds.join(", ")}`, "error", specsRoot, "traceability.brMustHaveSc", orphanBrIds));
|
|
112
134
|
}
|
|
113
135
|
}
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
136
|
+
const scRefsResult = await collectScTestReferences(root, config.validation.traceability.testFileGlobs, config.validation.traceability.testFileExcludeGlobs);
|
|
137
|
+
const scTestRefs = scRefsResult.refs;
|
|
138
|
+
const testFileScan = scRefsResult.scan;
|
|
139
|
+
const hasScenarios = scIdsInScenarios.size > 0;
|
|
140
|
+
const hasGlobConfig = testFileScan.globs.length > 0;
|
|
141
|
+
const hasMatchedTests = testFileScan.matchedFileCount > 0;
|
|
142
|
+
if (hasScenarios &&
|
|
143
|
+
(!hasGlobConfig || !hasMatchedTests || scRefsResult.error)) {
|
|
144
|
+
const detail = scRefsResult.error ? `(詳細: ${scRefsResult.error})` : "";
|
|
145
|
+
issues.push(issue("QFAI-TRACE-013", `テスト探索 glob が未設定/不正/一致ファイル0のため SC→Test を判定できません。${detail}`, "error", testsRoot, "traceability.testFileGlobs"));
|
|
120
146
|
}
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
const
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
147
|
+
else {
|
|
148
|
+
if (config.validation.traceability.scMustHaveTest &&
|
|
149
|
+
scIdsInScenarios.size) {
|
|
150
|
+
const scWithoutTests = Array.from(scIdsInScenarios).filter((id) => {
|
|
151
|
+
const refs = scTestRefs.get(id);
|
|
152
|
+
return !refs || refs.size === 0;
|
|
153
|
+
});
|
|
154
|
+
if (scWithoutTests.length > 0) {
|
|
155
|
+
issues.push(issue("QFAI-TRACE-010", `SC がテストで参照されていません: ${scWithoutTests.join(", ")}。testFileGlobs に一致するテストファイルへ QFAI:SC-xxxx を記載してください。`, config.validation.traceability.scNoTestSeverity, testsRoot, "traceability.scMustHaveTest", scWithoutTests));
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
const unknownScIds = Array.from(scTestRefs.keys()).filter((id) => !scIdsInScenarios.has(id));
|
|
159
|
+
if (unknownScIds.length > 0) {
|
|
160
|
+
issues.push(issue("QFAI-TRACE-011", `テストが未知の SC をアノテーション参照しています: ${unknownScIds.join(", ")}`, "error", testsRoot, "traceability.scUnknownInTests", unknownScIds));
|
|
129
161
|
}
|
|
130
162
|
}
|
|
131
163
|
if (!config.validation.traceability.allowOrphanContracts) {
|
|
132
164
|
if (contractIds.size > 0) {
|
|
133
|
-
const orphanContracts = Array.from(contractIds).filter((id) => !
|
|
165
|
+
const orphanContracts = Array.from(contractIds).filter((id) => !specContractIds.has(id));
|
|
134
166
|
if (orphanContracts.length > 0) {
|
|
135
|
-
issues.push(issue("
|
|
167
|
+
issues.push(issue("QFAI-TRACE-022", `契約が Spec から参照されていません: ${orphanContracts.join(", ")}`, "error", specsRoot, "traceability.contractCoverage", orphanContracts));
|
|
136
168
|
}
|
|
137
169
|
}
|
|
138
170
|
}
|
|
@@ -162,7 +194,7 @@ async function validateCodeReferences(upstreamIds, srcRoot, testsRoot) {
|
|
|
162
194
|
}
|
|
163
195
|
}
|
|
164
196
|
if (!found) {
|
|
165
|
-
issues.push(issue("QFAI-TRACE-002", "上流 ID
|
|
197
|
+
issues.push(issue("QFAI-TRACE-002", "上流 ID がコード/テストに参照されていません(参考情報)。", "info", srcRoot, "traceability.codeReferences"));
|
|
166
198
|
}
|
|
167
199
|
return issues;
|
|
168
200
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"traceability.js","sourceRoot":"","sources":["../../../src/core/validators/traceability.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"traceability.js","sourceRoot":"","sources":["../../../src/core/validators/traceability.ts"],"names":[],"mappings":"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"}
|