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 CHANGED
@@ -79,7 +79,7 @@ QFAI が提供するプロンプト資産は次の 2 つに分離します。
79
79
 
80
80
  同じ相対パスのファイルがある場合は `.qfai/prompts.local` を優先して参照する運用とします。
81
81
 
82
- `report.json` / `doctor.json` は内部表現で互換非保証です。外部連携は `report.md` など Markdown 出力を推奨します。破壊的変更は SemVer で管理しますが、JSON schema を固定する約束はしません。短い例:
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.md
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.md` の `# QFAI-CONTRACT-REF` で宣言する(none 可)
20
+ - Scenario→Contract は `scenario.feature` の `# QFAI-CONTRACT-REF` で宣言する(none 可)
21
21
 
22
22
  ## ディレクトリ概要
23
23
 
24
- - `specs/` : Spec Pack(spec.md / delta.md / scenario.md
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.md に `# QFAI-CONTRACT-REF` を必ず1行以上宣言、0件は `none`)
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.md` / `delta.md` も補助参照)
8
+ - 対象: `.qfai/specs/spec-*/spec.md` 形式のファイル(Spec Pack の `spec.md`。必要に応じて `scenario.feature` / `delta.md` も補助参照)
9
9
 
10
10
  ## Output (Option)
11
11
 
@@ -4,7 +4,7 @@
4
4
 
5
5
  ## Inputs
6
6
 
7
- - 対象: `.qfai/specs/spec-*/spec.md` 形式のファイル(Spec Pack の `spec.md`。必要に応じて `scenario.md` / `delta.md` も補助参照)
7
+ - 対象: `.qfai/specs/spec-*/spec.md` 形式のファイル(Spec Pack の `spec.md`。必要に応じて `scenario.feature` / `delta.md` も補助参照)
8
8
 
9
9
  ## Output
10
10
 
@@ -9,7 +9,7 @@
9
9
 
10
10
  ## 必須入力
11
11
 
12
- - `.qfai/specs/**/spec.md` / `scenario.md` / `delta.md`
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.md`
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.md` は Gherkin で書き、Feature に `@SPEC-xxxx` を付与する。
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 で参照する場合はタグまたは本文に明示する。
@@ -12,7 +12,7 @@
12
12
  ## 入力(貼り付けたもの)
13
13
 
14
14
  - Spec: <spec.md / delta.md の該当範囲>
15
- - Scenario: <scenario.md の該当範囲>
15
+ - Scenario: <scenario.feature の該当範囲>
16
16
  - Contract(任意): <該当契約>
17
17
  - validate/report 要約: <report.md または validate.json の要約>
18
18
  - 差分: <PR diff / 変更ファイル一覧>
@@ -6,7 +6,7 @@
6
6
 
7
7
  - `spec-0001/spec.md`(必須)
8
8
  - `spec-0001/delta.md`(必須)
9
- - `spec-0001/scenario.md`(必須・Gherkin)
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.md)最小要件
45
+ ## Scenario(scenario.feature)最小要件
46
46
 
47
47
  - **Gherkin 記法**(Given/When/Then)
48
48
  - **1ファイル = 1 Scenario**(Scenario Outline 含む)
@@ -16,7 +16,7 @@
16
16
  ## 影響範囲(Impact)
17
17
 
18
18
  - 仕様(spec.md):
19
- - シナリオ(scenario.md):
19
+ - シナリオ(scenario.feature):
20
20
  - 契約(contracts):
21
21
  - 実装(src):
22
22
  - テスト(tests):
@@ -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.md")
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.1".length > 0) {
1164
- return "1.0.1";
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.md";
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} (${legacy} \u306F\u975E\u5BFE\u5FDC)`,
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.md \u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093\u3002",
2649
+ "scenario.feature \u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093\u3002",
2651
2650
  "error",
2652
2651
  entry.scenarioPath,
2653
2652
  "scenario.exists"