qfai 1.0.1 → 1.0.2
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 +2 -2
- package/assets/init/.qfai/README.md +2 -2
- package/assets/init/.qfai/contracts/README.md +1 -1
- package/assets/init/.qfai/prompts/makeBusinessFlow.md +1 -1
- package/assets/init/.qfai/prompts/makeOverview.md +1 -1
- package/assets/init/.qfai/prompts/qfai-maintain-traceability.md +1 -1
- package/assets/init/.qfai/prompts/require-to-spec.md +2 -2
- package/assets/init/.qfai/samples/analyze/analysis.md +1 -1
- package/assets/init/.qfai/specs/README.md +2 -2
- package/assets/init/.qfai/specs/spec-0001/delta.md +1 -1
- package/dist/cli/index.cjs +6 -7
- package/dist/cli/index.cjs.map +1 -1
- package/dist/cli/index.mjs +6 -7
- package/dist/cli/index.mjs.map +1 -1
- package/dist/index.cjs +6 -7
- package/dist/index.cjs.map +1 -1
- package/dist/index.mjs +6 -7
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
- /package/assets/init/.qfai/specs/spec-0001/{scenario.md → scenario.feature} +0 -0
package/README.md
CHANGED
|
@@ -79,7 +79,7 @@ QFAI が提供するプロンプト資産は次の 2 つに分離します。
|
|
|
79
79
|
|
|
80
80
|
同じ相対パスのファイルがある場合は `.qfai/prompts.local` を優先して参照する運用とします。
|
|
81
81
|
|
|
82
|
-
`report.json` / `doctor.json` は内部表現で互換非保証です。外部連携は `report.md` など Markdown
|
|
82
|
+
`report.json` / `doctor.json` は内部表現で互換非保証です。外部連携は `report.md` など Markdown 出力を推奨します。破壊的変更は原則 SemVer で管理しますが、プロジェクト方針により例外的に minor/patch で破壊的変更を行う場合があります(CHANGELOG に明記)。JSON schema を固定する約束はしません。短い例:
|
|
83
83
|
|
|
84
84
|
```json
|
|
85
85
|
{
|
|
@@ -239,7 +239,7 @@ qfai.config.yaml
|
|
|
239
239
|
spec-0001/
|
|
240
240
|
spec.md
|
|
241
241
|
delta.md
|
|
242
|
-
scenario.
|
|
242
|
+
scenario.feature
|
|
243
243
|
rules/
|
|
244
244
|
conventions.md
|
|
245
245
|
pnpm.md
|
|
@@ -17,11 +17,11 @@ npx qfai report
|
|
|
17
17
|
|
|
18
18
|
- `validation.traceability.testFileGlobs` に一致するテストコードで `QFAI:SC-xxxx` を参照する(コメント可)
|
|
19
19
|
- Spec→Contract は `spec.md` の `QFAI-CONTRACT-REF` 行で宣言する
|
|
20
|
-
- Scenario→Contract は `scenario.
|
|
20
|
+
- Scenario→Contract は `scenario.feature` の `# QFAI-CONTRACT-REF` で宣言する(none 可)
|
|
21
21
|
|
|
22
22
|
## ディレクトリ概要
|
|
23
23
|
|
|
24
|
-
- `specs/` : Spec Pack(spec.md / delta.md / scenario.
|
|
24
|
+
- `specs/` : Spec Pack(spec.md / delta.md / scenario.feature)
|
|
25
25
|
- `contracts/` : UI / API / DB 契約を置く場所
|
|
26
26
|
- `require/` : 既存要件の集約(validate 対象外)
|
|
27
27
|
- `rules/` : 規約・運用ルール
|
|
@@ -63,7 +63,7 @@ CREATE TABLE sample_table (
|
|
|
63
63
|
## 依存関係
|
|
64
64
|
|
|
65
65
|
- Spec → Contracts(spec.md に `QFAI-CONTRACT-REF` を必ず1行以上宣言、0件は `none`。この行が SSOT)
|
|
66
|
-
- Scenario → Contracts(scenario.
|
|
66
|
+
- Scenario → Contracts(scenario.feature に `# QFAI-CONTRACT-REF` を必ず1行以上宣言、0件は `none`)
|
|
67
67
|
|
|
68
68
|
## 良い例 / 悪い例
|
|
69
69
|
|
|
@@ -5,7 +5,7 @@ Spec群を読み、Specに明示されている情報のみを根拠として、
|
|
|
5
5
|
|
|
6
6
|
## Inputs
|
|
7
7
|
|
|
8
|
-
- 対象: `.qfai/specs/spec-*/spec.md` 形式のファイル(Spec Pack の `spec.md`。必要に応じて `scenario.
|
|
8
|
+
- 対象: `.qfai/specs/spec-*/spec.md` 形式のファイル(Spec Pack の `spec.md`。必要に応じて `scenario.feature` / `delta.md` も補助参照)
|
|
9
9
|
|
|
10
10
|
## Output (Option)
|
|
11
11
|
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
|
|
10
10
|
## 必須入力
|
|
11
11
|
|
|
12
|
-
- `.qfai/specs/**/spec.md` / `scenario.
|
|
12
|
+
- `.qfai/specs/**/spec.md` / `scenario.feature` / `delta.md`
|
|
13
13
|
- `.qfai/out/validate.json`(あれば)
|
|
14
14
|
- `.qfai/out/report.md`(あれば)
|
|
15
15
|
- テストコード(`validation.traceability.testFileGlobs` に一致する範囲)
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
|
|
12
12
|
- `.qfai/specs/spec-0001/spec.md`
|
|
13
13
|
- `.qfai/specs/spec-0001/delta.md`
|
|
14
|
-
- `.qfai/specs/spec-0001/scenario.
|
|
14
|
+
- `.qfai/specs/spec-0001/scenario.feature`
|
|
15
15
|
- 必要に応じて `.qfai/contracts/{ui,api,db}` 配下
|
|
16
16
|
|
|
17
17
|
> Spec は `spec-0001` から開始し、必要なら連番で増やすこと。
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
- `spec.md` の必須セクションは `qfai.config.yaml` の設定に従う。
|
|
24
24
|
- BR は `## 業務ルール` にのみ定義し、`- [BR-0001][P1] ...` 形式で書く。
|
|
25
25
|
- `spec.md` に `QFAI-CONTRACT-REF:` を必ず記載する(不要なら `none`)。
|
|
26
|
-
- `scenario.
|
|
26
|
+
- `scenario.feature` は Gherkin で書き、Feature に `@SPEC-xxxx` を付与する。
|
|
27
27
|
- 各 Scenario は `@SC-xxxx` を **ちょうど1つ**、`@BR-xxxx` を **1つ以上**持つこと。
|
|
28
28
|
- 契約ファイルには `QFAI-CONTRACT-ID: <ID>` を宣言する。
|
|
29
29
|
- 契約 ID(UI/API/DB)を Scenario で参照する場合はタグまたは本文に明示する。
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
|
|
7
7
|
- `spec-0001/spec.md`(必須)
|
|
8
8
|
- `spec-0001/delta.md`(必須)
|
|
9
|
-
- `spec-0001/scenario.
|
|
9
|
+
- `spec-0001/scenario.feature`(必須・Gherkin)
|
|
10
10
|
|
|
11
11
|
> `spec-0001` は **4桁連番**。Spec ID も **4桁(SPEC-0001)** です。
|
|
12
12
|
|
|
@@ -42,7 +42,7 @@ QFAI-CONTRACT-REF: UI-0001, API-0001, DB-0001
|
|
|
42
42
|
- 互換維持 / 仕様変更の **どちらか1つ**に必ずチェックする
|
|
43
43
|
- 根拠と影響範囲を明記する
|
|
44
44
|
|
|
45
|
-
## Scenario(scenario.
|
|
45
|
+
## Scenario(scenario.feature)最小要件
|
|
46
46
|
|
|
47
47
|
- **Gherkin 記法**(Given/When/Then)
|
|
48
48
|
- **1ファイル = 1 Scenario**(Scenario Outline 含む)
|
package/dist/cli/index.cjs
CHANGED
|
@@ -650,7 +650,7 @@ async function collectSpecEntries(specsRoot) {
|
|
|
650
650
|
dir,
|
|
651
651
|
specPath: import_node_path4.default.join(dir, "spec.md"),
|
|
652
652
|
deltaPath: import_node_path4.default.join(dir, "delta.md"),
|
|
653
|
-
scenarioPath: import_node_path4.default.join(dir, "scenario.
|
|
653
|
+
scenarioPath: import_node_path4.default.join(dir, "scenario.feature")
|
|
654
654
|
}));
|
|
655
655
|
return entries.sort((a, b) => a.dir.localeCompare(b.dir));
|
|
656
656
|
}
|
|
@@ -1160,8 +1160,8 @@ var import_promises8 = require("fs/promises");
|
|
|
1160
1160
|
var import_node_path9 = __toESM(require("path"), 1);
|
|
1161
1161
|
var import_node_url2 = require("url");
|
|
1162
1162
|
async function resolveToolVersion() {
|
|
1163
|
-
if ("1.0.
|
|
1164
|
-
return "1.0.
|
|
1163
|
+
if ("1.0.2".length > 0) {
|
|
1164
|
+
return "1.0.2";
|
|
1165
1165
|
}
|
|
1166
1166
|
try {
|
|
1167
1167
|
const packagePath = resolvePackageJsonPath();
|
|
@@ -2625,12 +2625,11 @@ async function validateScenarios(root, config) {
|
|
|
2625
2625
|
const specsRoot = resolvePath(root, config, "specsDir");
|
|
2626
2626
|
const entries = await collectSpecEntries(specsRoot);
|
|
2627
2627
|
if (entries.length === 0) {
|
|
2628
|
-
const expected = "spec-0001/scenario.
|
|
2629
|
-
const legacy = "spec-001/scenario.md";
|
|
2628
|
+
const expected = "spec-0001/scenario.feature";
|
|
2630
2629
|
return [
|
|
2631
2630
|
issue4(
|
|
2632
2631
|
"QFAI-SC-000",
|
|
2633
|
-
`Scenario \u30D5\u30A1\u30A4\u30EB\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093\u3002\u914D\u7F6E\u5834\u6240: ${config.paths.specsDir} / \u671F\u5F85\u30D1\u30BF\u30FC\u30F3: ${expected}
|
|
2632
|
+
`Scenario \u30D5\u30A1\u30A4\u30EB\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093\u3002\u914D\u7F6E\u5834\u6240: ${config.paths.specsDir} / \u671F\u5F85\u30D1\u30BF\u30FC\u30F3: ${expected}`,
|
|
2634
2633
|
"info",
|
|
2635
2634
|
specsRoot,
|
|
2636
2635
|
"scenario.files"
|
|
@@ -2647,7 +2646,7 @@ async function validateScenarios(root, config) {
|
|
|
2647
2646
|
issues.push(
|
|
2648
2647
|
issue4(
|
|
2649
2648
|
"QFAI-SC-001",
|
|
2650
|
-
"scenario.
|
|
2649
|
+
"scenario.feature \u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093\u3002",
|
|
2651
2650
|
"error",
|
|
2652
2651
|
entry.scenarioPath,
|
|
2653
2652
|
"scenario.exists"
|