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
package/README.md
CHANGED
|
@@ -20,7 +20,7 @@ npx qfai report
|
|
|
20
20
|
|
|
21
21
|
- `npx qfai init` によるテンプレート生成(specs/contracts に加え、`.qfai/require/README.md`、`.qfai/rules/pnpm.md`、`.qfai/prompts/require-to-spec.md`、`.qfai/promptpack/` を含む)
|
|
22
22
|
- `npx qfai validate` による `.qfai/` 内ドキュメントの整合性・トレーサビリティ検査
|
|
23
|
-
- `npx qfai validate` による SC→Test 参照の検証(`
|
|
23
|
+
- `npx qfai validate` による SC→Test 参照の検証(`validation.traceability.testFileGlobs` に一致するテストファイルから `QFAI:SC-xxxx` を抽出)
|
|
24
24
|
- `npx qfai report` によるレポート出力
|
|
25
25
|
|
|
26
26
|
## Usage
|
|
@@ -32,8 +32,27 @@ npx qfai report
|
|
|
32
32
|
設定はリポジトリ直下の `qfai.config.yaml` で行います。
|
|
33
33
|
命名規約は `docs/rules/naming.md` を参照してください。
|
|
34
34
|
|
|
35
|
+
## Contracts
|
|
36
|
+
|
|
37
|
+
Spec では `QFAI-CONTRACT-REF:` 行で参照する契約IDを宣言します(`none` 可、宣言行は必須)。
|
|
38
|
+
契約ファイルは `QFAI-CONTRACT-ID: <ID>` を **1ファイル1ID** で宣言します。
|
|
39
|
+
Contract ID prefix は `UI-0001` / `API-0001` / `DB-0001` です。
|
|
40
|
+
宣言では大文字(`UI-0001`)、ファイル名は小文字(`ui-0001-...`)を使用します。
|
|
41
|
+
|
|
42
|
+
契約関連の検証は `validation.traceability` で制御します。
|
|
43
|
+
|
|
44
|
+
- `validation.traceability.allowOrphanContracts`: Spec から参照されない契約の許可(default: `false`)
|
|
45
|
+
- `validation.traceability.unknownContractIdSeverity`: Spec が参照した契約 ID が存在しない場合の severity(default: `error`、`error` / `warning` のみ)
|
|
46
|
+
|
|
47
|
+
`npx qfai init` は `.qfai/contracts/` 配下に UI/API/DB のサンプルを生成します。
|
|
48
|
+
|
|
49
|
+
SC→Test の参照はテストコード内の `QFAI:SC-xxxx` アノテーションで宣言します。
|
|
50
|
+
SC→Test の対象ファイルは `validation.traceability.testFileGlobs` で指定します。
|
|
51
|
+
除外は `validation.traceability.testFileExcludeGlobs` で指定できます。
|
|
35
52
|
SC→Test 検証は `validation.traceability.scMustHaveTest` と
|
|
36
53
|
`validation.traceability.scNoTestSeverity` で制御できます。
|
|
37
54
|
|
|
55
|
+
- `validation.traceability.testFileGlobs`: SC→Test 判定に使用するテストファイル glob(配列)
|
|
56
|
+
- `validation.traceability.testFileExcludeGlobs`: 追加の除外 glob(配列、任意)
|
|
38
57
|
- `validation.traceability.scMustHaveTest`: SC→Test 検証の有効/無効を制御(`true` で有効、`false` で無効)
|
|
39
58
|
- `validation.traceability.scNoTestSeverity`: SC 未参照時の重要度を指定(`error` / `warning`)
|
|
@@ -11,7 +11,8 @@ npx qfai report
|
|
|
11
11
|
|
|
12
12
|
## トレーサビリティ(SC→Test)
|
|
13
13
|
|
|
14
|
-
- `
|
|
14
|
+
- `validation.traceability.testFileGlobs` に一致するテストコードで `QFAI:SC-xxxx` を参照する(コメント可)
|
|
15
|
+
- Spec→Contract は `spec.md` の `QFAI-CONTRACT-REF` 行で宣言する
|
|
15
16
|
|
|
16
17
|
## ディレクトリ概要
|
|
17
18
|
|
|
@@ -32,6 +33,7 @@ npx qfai report
|
|
|
32
33
|
- `rules/pnpm.md`
|
|
33
34
|
- `prompts/README.md`
|
|
34
35
|
- `prompts/require-to-spec.md`
|
|
36
|
+
- `prompts/qfai-generate-test-globs.md`
|
|
35
37
|
- `promptpack/constitution.md`
|
|
36
38
|
- `out/README.md`
|
|
37
39
|
|
|
@@ -6,11 +6,18 @@
|
|
|
6
6
|
|
|
7
7
|
- UI: `ui/ui-0001-<slug>.yaml` または `.yml`
|
|
8
8
|
- API: `api/api-0001-<slug>.yaml` / `.yml` / `.json`(OpenAPI)
|
|
9
|
-
- DB: `db/db-0001-<slug>.sql`(ID は `
|
|
9
|
+
- DB: `db/db-0001-<slug>.sql`(ID は `DB-xxxx`)
|
|
10
|
+
|
|
11
|
+
## 契約ID宣言(必須)
|
|
12
|
+
|
|
13
|
+
- 1ファイル = 1ID
|
|
14
|
+
- ファイル内に `QFAI-CONTRACT-ID: <ID>` をコメント行で宣言する
|
|
15
|
+
- 例: `# QFAI-CONTRACT-ID: API-0001` / `// QFAI-CONTRACT-ID: UI-0001` / `-- QFAI-CONTRACT-ID: DB-0001`
|
|
10
16
|
|
|
11
17
|
## 最小例(UI)
|
|
12
18
|
|
|
13
19
|
```yaml
|
|
20
|
+
# QFAI-CONTRACT-ID: UI-0001
|
|
14
21
|
id: UI-0001
|
|
15
22
|
name: 受注登録画面
|
|
16
23
|
refs:
|
|
@@ -20,6 +27,7 @@ refs:
|
|
|
20
27
|
## 最小例(API)
|
|
21
28
|
|
|
22
29
|
```yaml
|
|
30
|
+
# QFAI-CONTRACT-ID: API-0001
|
|
23
31
|
openapi: 3.0.0
|
|
24
32
|
info:
|
|
25
33
|
title: Sample API
|
|
@@ -36,7 +44,7 @@ paths:
|
|
|
36
44
|
## 最小例(DB)
|
|
37
45
|
|
|
38
46
|
```sql
|
|
39
|
-
--
|
|
47
|
+
-- QFAI-CONTRACT-ID: DB-0001
|
|
40
48
|
CREATE TABLE sample_table (
|
|
41
49
|
id INTEGER PRIMARY KEY
|
|
42
50
|
);
|
|
@@ -44,16 +52,17 @@ CREATE TABLE sample_table (
|
|
|
44
52
|
|
|
45
53
|
## CI でチェックされること(抜粋)
|
|
46
54
|
|
|
47
|
-
-
|
|
48
|
-
-
|
|
49
|
-
- API:
|
|
55
|
+
- 契約宣言: `QFAI-CONTRACT-ID` の未記載/複数宣言/重複IDは error
|
|
56
|
+
- 契約ID: 配置ディレクトリ(ui/api/db)と prefix(UI/API/DB)の不整合は error
|
|
57
|
+
- UI/API: パース失敗は error
|
|
58
|
+
- API: OpenAPI 定義があること(`openapi`)
|
|
50
59
|
- DB: 危険 SQL(DROP/TRUNCATE 等)の警告
|
|
51
|
-
- 共通: ID 形式(`PREFIX-0001
|
|
60
|
+
- 共通: ID 形式(`PREFIX-0001`)、ID の重複検知
|
|
52
61
|
|
|
53
62
|
## 依存関係
|
|
54
63
|
|
|
55
|
-
-
|
|
56
|
-
-
|
|
64
|
+
- Spec → Contracts(`QFAI-CONTRACT-REF` で宣言、`none` 可)
|
|
65
|
+
- Scenario → Contracts(UI/API/DB の参照は任意)
|
|
57
66
|
|
|
58
67
|
## 良い例 / 悪い例
|
|
59
68
|
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
+
# QFAI-CONTRACT-ID: API-0001
|
|
1
2
|
# OpenAPI contract sample (API-0001)
|
|
3
|
+
# - 必須: QFAI-CONTRACT-ID (1ファイル1ID)
|
|
2
4
|
# - 必須: openapi, info, paths
|
|
3
|
-
# - 重要: operationId に API-0001 のような ID を含める(validate が参照整合に利用)
|
|
4
5
|
openapi: 3.0.0
|
|
5
6
|
info:
|
|
6
7
|
title: QFAI Sample API
|
|
@@ -8,7 +9,7 @@ info:
|
|
|
8
9
|
paths:
|
|
9
10
|
/health:
|
|
10
11
|
get:
|
|
11
|
-
operationId:
|
|
12
|
+
operationId: healthCheck
|
|
12
13
|
responses:
|
|
13
14
|
"200":
|
|
14
15
|
description: OK
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# QFAI: テストファイル glob 生成(プロジェクト分析→qfai.config.yaml 更新)
|
|
2
|
+
|
|
3
|
+
あなたはリポジトリを解析し、QFAI の SC→Test 判定に使用する「テストファイル glob」を作成します。
|
|
4
|
+
|
|
5
|
+
## 目的
|
|
6
|
+
|
|
7
|
+
- SC→Test の根拠は **テストファイル内の `QFAI:SC-xxxx`** アノテーションです。
|
|
8
|
+
- その抽出対象(テストファイル集合)を、プロジェクト実態に合わせて **過不足なく**指定してください。
|
|
9
|
+
|
|
10
|
+
## 手順
|
|
11
|
+
|
|
12
|
+
1. どのテストフレームワーク/ランナーが使われているかを特定してください。
|
|
13
|
+
- 例: `package.json` の dependencies/devDependencies、設定ファイル(`vitest.config.*`, `jest.config.*`, `playwright.config.*` 等)、CI 設定など
|
|
14
|
+
2. テストファイルが存在するディレクトリと命名規則を列挙してください。
|
|
15
|
+
- `tests/` 配下だけでなく、**`src/` 同居**(`*.test.*`)も考慮すること
|
|
16
|
+
- e2e / integration / unit が分かれている場合はそれも考慮すること
|
|
17
|
+
3. 「テストファイル glob(含める)」を 3-10 個程度で提案してください。
|
|
18
|
+
- 過剰に広い `**/*` は禁止(性能・誤検知の観点)
|
|
19
|
+
4. 「除外 glob」を提案してください(既定除外に加えて必要なら)。
|
|
20
|
+
5. `qfai.config.yaml` を更新してください。
|
|
21
|
+
- `validation.traceability.testFileGlobs` に glob 配列を設定
|
|
22
|
+
- 必要なら `validation.traceability.testFileExcludeGlobs` も設定
|
|
23
|
+
6. 更新後、実在するテストファイルを 5-15 件サンプリングし、各ファイルが提案 glob にマッチすることを示してください。
|
|
24
|
+
7. 最後に、提案 glob を 1 行ずつコメント付きでまとめてください(採用理由を短く)。
|
|
25
|
+
|
|
26
|
+
## 制約
|
|
27
|
+
|
|
28
|
+
- `.qfai/` 配下、`node_modules/`、ビルド成果物(`dist/`, `build/` 等)は対象外
|
|
29
|
+
- 変更は **glob 設定に限定**(テストやソースの内容改変はしない)
|
|
@@ -19,12 +19,14 @@
|
|
|
19
19
|
## Rules
|
|
20
20
|
|
|
21
21
|
- **推測しない**。要件に書かれていないことは `TBD` と明記する。
|
|
22
|
-
- ID は `PREFIX-0001` 形式(SPEC/BR/SC/UI/API/
|
|
22
|
+
- ID は `PREFIX-0001` 形式(SPEC/BR/SC/UI/API/DB)。
|
|
23
23
|
- `spec.md` の必須セクションは `qfai.config.yaml` の設定に従う。
|
|
24
24
|
- BR は `## 業務ルール` にのみ定義し、`- [BR-0001][P1] ...` 形式で書く。
|
|
25
|
+
- `spec.md` に `QFAI-CONTRACT-REF:` を必ず記載する(不要なら `none`)。
|
|
25
26
|
- `scenario.md` は Gherkin で書き、Feature に `@SPEC-xxxx` を付与する。
|
|
26
27
|
- 各 Scenario は `@SC-xxxx` を **ちょうど1つ**、`@BR-xxxx` を **1つ以上**持つこと。
|
|
27
|
-
-
|
|
28
|
+
- 契約ファイルには `QFAI-CONTRACT-ID: <ID>` を宣言する。
|
|
29
|
+
- 契約 ID(UI/API/DB)を Scenario で参照する場合はタグまたは本文に明示する。
|
|
28
30
|
- `delta.md` の「変更区分」は **Compatibility / Change/Improvement のいずれか1つにチェック**する。
|
|
29
31
|
- 判断できない場合は `Compatibility` を選び、`TBD` を理由欄に記載する。
|
|
30
32
|
|
|
@@ -15,6 +15,8 @@
|
|
|
15
15
|
```md
|
|
16
16
|
# SPEC-0001: 注文登録の最小要件
|
|
17
17
|
|
|
18
|
+
QFAI-CONTRACT-REF: UI-0001, API-0001, DB-0001
|
|
19
|
+
|
|
18
20
|
## 背景
|
|
19
21
|
|
|
20
22
|
- 例: 受注の登録ルールを明文化し、手戻りを減らすため
|
|
@@ -30,6 +32,11 @@
|
|
|
30
32
|
- Priority は **P0/P1/P2/P3** のいずれかを必ず付与
|
|
31
33
|
- BR 定義は **`## 業務ルール` セクション内のみ**(他セクションは参照扱い)
|
|
32
34
|
|
|
35
|
+
### Contract 参照の書き方
|
|
36
|
+
|
|
37
|
+
- `QFAI-CONTRACT-REF:` 行で契約IDを宣言する(複数行可)
|
|
38
|
+
- 参照不要な場合は `QFAI-CONTRACT-REF: none`
|
|
39
|
+
|
|
33
40
|
## Delta(delta.md)
|
|
34
41
|
|
|
35
42
|
- 互換維持 / 仕様変更の **どちらか1つ**に必ずチェックする
|
|
@@ -44,8 +51,8 @@
|
|
|
44
51
|
|
|
45
52
|
## CI でチェックされること(抜粋)
|
|
46
53
|
|
|
47
|
-
- Spec: 必須セクション、SPEC/BR ID、BR Priority、ID 形式、Contract
|
|
54
|
+
- Spec: 必須セクション、SPEC/BR ID、BR Priority、ID 形式、Contract 参照の実在性、Contract 参照の必須宣言
|
|
48
55
|
- Delta: 変更区分(互換/変更)のチェック状態
|
|
49
56
|
- Scenario: Feature/Scenario の存在、タグ要件、Given/When/Then
|
|
50
|
-
- Traceability: BR→SC、SC
|
|
57
|
+
- Traceability: BR→SC、Spec→Contract、SC→Test の接続、BR の所属 SPEC 整合
|
|
51
58
|
- IDs: 定義 ID の重複検知(Spec/Scenario/Contracts)
|
|
@@ -19,8 +19,13 @@ validation:
|
|
|
19
19
|
- 業務ルール
|
|
20
20
|
traceability:
|
|
21
21
|
brMustHaveSc: true
|
|
22
|
-
scMustTouchContracts: true
|
|
23
22
|
scMustHaveTest: true
|
|
23
|
+
testFileGlobs:
|
|
24
|
+
- tests/**/*.test.ts
|
|
25
|
+
- tests/**/*.spec.ts
|
|
26
|
+
- src/**/*.test.ts
|
|
27
|
+
- src/**/*.spec.ts
|
|
28
|
+
testFileExcludeGlobs: []
|
|
24
29
|
scNoTestSeverity: error
|
|
25
30
|
allowOrphanContracts: false
|
|
26
31
|
unknownContractIdSeverity: error
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
// Traceability sample: reference SC IDs
|
|
2
|
-
// SC-0001
|
|
1
|
+
// Traceability sample: reference SC IDs via annotations (comments are enough).
|
|
2
|
+
// QFAI:SC-0001
|