qfai 0.8.1 → 0.9.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
@@ -12,6 +12,7 @@
12
12
  - [Quick Start](#quick-start最短成功)
13
13
  - [機能](#できること)
14
14
  - [CLI リファレンス](#使い方cli)
15
+ - [analyze(意味矛盾のレビュー補助)](#analyze意味矛盾のレビュー補助)
15
16
  - [設定](#設定)
16
17
  - [契約](#契約contracts)
17
18
  - [Monorepo 対応](#monorepo--サブディレクトリ)
@@ -23,7 +24,7 @@
23
24
  ## インストール
24
25
 
25
26
  ```sh
26
- npm install qfai
27
+ npm install -D qfai
27
28
  ```
28
29
 
29
30
  または
@@ -32,6 +33,12 @@ npm install qfai
32
33
  npx qfai init
33
34
  ```
34
35
 
36
+ pnpm の場合(推奨):
37
+
38
+ ```sh
39
+ pnpm add -D qfai
40
+ ```
41
+
35
42
  **必要環境**: Node.js >= 18
36
43
 
37
44
  ## パッケージ
@@ -42,13 +49,14 @@ npx qfai init
42
49
 
43
50
  ```sh
44
51
  npx qfai init
52
+ npx qfai doctor --fail-on error
45
53
  npx qfai validate --fail-on error --format github
46
54
  npx qfai report
47
55
  ```
48
56
 
49
57
  ## できること
50
58
 
51
- - `npx qfai init` によるテンプレート生成(specs/contracts に加え、`.qfai/require/README.md`、`.qfai/rules/pnpm.md`、`.qfai/prompts/**`、`.qfai/prompts.local/README.md`、`.qfai/promptpack/` を含む)
59
+ - `npx qfai init` によるテンプレート生成(specs/contracts に加え、`.qfai/require/README.md`、`.qfai/rules/pnpm.md`、`.qfai/prompts/**`、`.qfai/prompts.local/README.md`、`.qfai/prompts/analyze/**`、`.qfai/samples/**`、`.qfai/promptpack/` を含む)
52
60
  - `npx qfai validate` による `.qfai/` 内ドキュメントの整合性・トレーサビリティ検査
53
61
  - `npx qfai validate` による SC→Test 参照の検証(`validation.traceability.testFileGlobs` に一致するテストファイルから `QFAI:SC-xxxx` を抽出)
54
62
  - `npx qfai doctor` による設定/探索/パス/glob/validate.json の事前診断
@@ -107,12 +115,41 @@ doctor の JSON も非契約(内部形式。将来予告なく変更あり)
107
115
  }
108
116
  ```
109
117
 
110
- `init --yes` は予約フラグです(現行の init は非対話のため挙動差はありません)。既存ファイルがある場合は `--force` が必要です。
118
+ `init --yes` は予約フラグです(現行の init は非対話のため挙動差はありません)。
119
+
120
+ - `--force` は `.qfai/prompts/**` のみ上書きします(それ以外は既存があればスキップします)
121
+ - `specs/` `contracts/` は初回にサンプルが生成されますが、再実行(force の有無に関わらず)で上書きしません
122
+ - それ以外を再生成したい場合は、対象を手動で削除してから `qfai init` を実行してください(運用中成果物の破壊を避けるため)
123
+
124
+ ## analyze(意味矛盾のレビュー補助)
125
+
126
+ `validate` は deterministic な構造矛盾(参照/フォーマット/トレーサビリティ)を検査し、CI Hard Gate にできます。一方で、**意味矛盾(解釈/前提/用語/例外/受入条件の齟齬)**は deterministic に検出できないため、v0.9 では **手動プロンプト**として導線を提供します。
127
+
128
+ 重要:
129
+
130
+ - analyze は **Hard Gate ではありません**(CI を落とさない想定)
131
+ - 出力は **候補**です。根拠(引用)を確認し、最終判断はレビューで行ってください
132
+
133
+ ### 使い方(最短)
134
+
135
+ 1. `npx qfai analyze --list` でプロンプト一覧を確認する
136
+ 2. `npx qfai analyze --prompt spec_to_scenario` のようにプロンプトを出力し、AI に貼り付ける
137
+ 3. 推奨入力(Spec/Scenario/Test/Contract の抜粋 + validate/report 要約 + 差分)を揃えて検討する
138
+
139
+ 入力の用意に迷う場合は、`npx qfai init` が同梱する `.qfai/samples/analyze/input_bundle.md`(完成例)をコピーして編集してください。
140
+ 成果物を残す場合は `.qfai/samples/analyze/analysis.md`(テンプレ)を使う運用を推奨します。
141
+
142
+ ### カスタマイズ(Overlay)
143
+
144
+ analyze も `.qfai/prompts.local/**` の overlay 運用に従います。
145
+ 同じ相対パスのファイルがある場合は `.qfai/prompts.local` を優先して参照してください。
146
+
147
+ 例: `.qfai/prompts.local/analyze/` に `spec_to_scenario.md` を置くと標準を上書きできます。
111
148
 
112
149
  ## 設定
113
150
 
114
151
  設定はリポジトリ直下の `qfai.config.yaml` で行います。
115
- 命名規約は `docs/rules/naming.md` を参照してください。
152
+ 命名規約は GitHub の[命名規約ドキュメント](https://github.com/aganesy/QFAI/blob/main/docs/rules/naming.md)を参照してください。
116
153
 
117
154
  ## 契約(Contracts)
118
155
 
@@ -183,7 +220,9 @@ jobs:
183
220
  path: .qfai/out/report.md
184
221
  ```
185
222
 
186
- validate.json のスキーマと例は `docs/schema` / `docs/examples` を参照してください。
223
+ validate.json のスキーマと例は GitHub
224
+ [schema](https://github.com/aganesy/QFAI/tree/main/docs/schema) /
225
+ [examples](https://github.com/aganesy/QFAI/tree/main/docs/examples) を参照してください。
187
226
  PromptPack は非契約(互換保証なし)です。編集する場合はラップ運用を推奨します。
188
227
 
189
228
  ## 生成される構成(例)
@@ -26,6 +26,7 @@ npx qfai report
26
26
  - `require/` : 既存要件の集約(validate 対象外)
27
27
  - `rules/` : 規約・運用ルール
28
28
  - `prompts/` : QFAI 標準のプロンプト資産(自動読取はしない。更新や再 init で上書きされ得る)
29
+ - `samples/` : analyze 等の手動運用で使う成果物テンプレ(create-only)
29
30
  - `prompts.local/` : 利用者カスタムのプロンプト資産(存在する場合は overlay でこちらを優先して読む運用)
30
31
  - `promptpack/` : PromptPack(SSOT、運用ルール/観点の正本)
31
32
  - `out/` : `validate` / `report` の出力先(gitignore 推奨)
@@ -38,12 +39,18 @@ npx qfai report
38
39
  - `rules/conventions.md`
39
40
  - `rules/pnpm.md`
40
41
  - `prompts/README.md`
42
+ - `prompts/analyze/README.md`
41
43
  - `prompts.local/README.md`
42
44
  - `prompts/require-to-spec.md`
43
45
  - `prompts/qfai-generate-test-globs.md`
44
46
  - `prompts/qfai-maintain-traceability.md`
45
47
  - `prompts/qfai-maintain-contracts.md`
46
48
  - `prompts/qfai-classify-change.md`
49
+ - `samples/analyze/analysis.md`
50
+ - `samples/analyze/input_bundle.md`
51
+ - `prompts/analyze/spec_to_scenario.md`
52
+ - `prompts/analyze/spec_to_contract.md`
53
+ - `prompts/analyze/scenario_to_test.md`
47
54
  - `promptpack/constitution.md`
48
55
  - `out/README.md`
49
56
 
@@ -63,7 +70,8 @@ v0.7 以降、プロンプト資産のカスタマイズは `.qfai/prompts.local
63
70
  - 利用者が `.qfai/prompts/**` を直接編集することは非推奨・非サポートです
64
71
  - 変更したい場合は同一相対パスで `.qfai/prompts.local/**` に置いて上書きしてください
65
72
  - `qfai init` は `.qfai/prompts.local/**` を **保護**します(`--force` でも上書きしません)
66
- - 現時点の保護対象は `prompts.local` のみです(それ以外は上書きされ得ます)
73
+ - `qfai init``root/` と `.qfai/` を create-only(既存があればスキップ)で運用します
74
+ - `--force` は `.qfai/prompts/**` のみ上書きします(`specs/` `contracts/` を含め、その他は上書きしません)
67
75
 
68
76
  例:
69
77
 
@@ -9,7 +9,8 @@
9
9
 
10
10
  - Spec から overview / Business Flow を生成するための素材
11
11
  - トレーサビリティ/契約/変更区分の運用支援(CIで止めない領域)
12
- - 将来(v0.9)の adapter/emit 実装に備えた配布物
12
+ - 意味矛盾(解釈/前提/用語/受入条件の齟齬)のレビュー補助(analyze)
13
+ - 将来の CLI 連携に備えた配布物(現時点では手動利用のみ)
13
14
 
14
15
  ## Overlay(prompts.local)
15
16
 
@@ -27,6 +28,10 @@
27
28
  - `qfai-maintain-traceability.md`: 参照切れの修復(Spec/Scenario/Test)
28
29
  - `qfai-maintain-contracts.md`: 契約 ID と参照の整合
29
30
  - `qfai-classify-change.md`: Compatibility / Change 分類支援
31
+ - `analyze/README.md`: analyze の目的/入力/出力フォーマット
32
+ - `analyze/spec_to_scenario.md`: Spec ↔ Scenario の意味整合
33
+ - `analyze/spec_to_contract.md`: Spec ↔ Contract の対応漏れ/参照不整合
34
+ - `analyze/scenario_to_test.md`: Scenario ↔ Test の網羅/抜け/誤差
30
35
 
31
36
  ## 使い分け表
32
37
 
@@ -0,0 +1,21 @@
1
+ # analyze(手動利用)
2
+
3
+ このディレクトリは QFAI の `validate` が扱わない **意味レベル** の矛盾/抜け/リスクを、レビューのために洗い出すための **手動プロンプト集**です。
4
+
5
+ 重要:
6
+
7
+ - analyze は **Hard Gate ではありません**(CI を落とさない想定)
8
+ - 出力は **候補**です。根拠(引用)を必ず確認し、最終判断はレビューで行ってください
9
+ - `validate` が扱う **構造矛盾(参照/フォーマット/トレーサビリティ)** は対象外です
10
+
11
+ ## 推奨入力(最小セット)
12
+
13
+ - Project Context / Spec / Scenario / Test / Contract のうち、今回関係する箇所を **抜粋**で用意する
14
+ - `validate` / `report` の結果(必要なら要約)
15
+ - 変更差分(PR diff / 変更ファイル一覧)
16
+
17
+ ## プロンプト一覧(v0.9.x)
18
+
19
+ - `spec_to_scenario.md`: Spec ↔ Scenario の意味整合
20
+ - `spec_to_contract.md`: Spec ↔ Contract の参照整合(紐付け漏れ/根拠薄弱)
21
+ - `scenario_to_test.md`: Scenario ↔ Test の網羅性/ズレ
@@ -0,0 +1,8 @@
1
+ # Deprecated
2
+
3
+ このプロンプトは v0.9.1 で命名/雛形を整理しました。
4
+
5
+ - 代替: `.qfai/prompts/analyze/scenario_to_test.md`
6
+ - 理由: v0.9.1 の `qfai analyze --list` / `--prompt` が標準3本(spec_to_scenario/spec_to_contract/scenario_to_test)に揃えているため
7
+
8
+ 以降は新しいプロンプトを利用してください。
@@ -0,0 +1,56 @@
1
+ # analyze: Scenario ↔ Test 網羅性/ズレチェック
2
+
3
+ ## 目的
4
+
5
+ - Scenario(受入条件)が Test で担保されているかを確認する
6
+ - Test が Scenario の意図を誤解していないかを確認する
7
+
8
+ ## 入力の前提(貼り付けて埋める)
9
+
10
+ 入力が多すぎる場合は「抜粋にする」「代表ケースだけに絞る」を優先してください。
11
+
12
+ ### Project Context(任意)
13
+
14
+ - 対象機能:
15
+ - 前提/制約:
16
+ - 対象外(Non-goals):
17
+
18
+ ### Scenario Excerpts
19
+
20
+ - ...
21
+
22
+ ### Test Excerpts
23
+
24
+ - ...
25
+
26
+ ### Spec Excerpts(任意)
27
+
28
+ - ...
29
+
30
+ ### Contract / Trace Links(任意)
31
+
32
+ - (Scenario ID)→(Test名/ファイル など)
33
+ - ...
34
+
35
+ ### Open Concerns(任意)
36
+
37
+ - ...
38
+
39
+ ## チェック観点
40
+
41
+ - シナリオの各条件がテストに対応しているか(対応表を作る)
42
+ - 例外系・境界条件がテストされているか
43
+ - テスト名/説明がシナリオ用語と一致しているか
44
+ - テストが多すぎる/少なすぎることによるリスク
45
+
46
+ ## 期待する出力形式
47
+
48
+ - 対応表(Scenario項目 → Test名/箇所)
49
+ - 漏れ(未テスト)とズレ(誤解)のリスト
50
+ - 優先度(高/中/低)を付ける
51
+
52
+ ## 次アクション
53
+
54
+ - Test追加/修正案:
55
+ - Scenario追加/修正案:
56
+ - 追加で確認すべき質問:
@@ -0,0 +1,8 @@
1
+ # Deprecated
2
+
3
+ このプロンプトは v0.9.1 で命名/雛形を整理しました。
4
+
5
+ - 代替: `.qfai/prompts/analyze/spec_to_contract.md`
6
+ - 理由: v0.9.1 の `qfai analyze --list` / `--prompt` が標準3本(spec_to_scenario/spec_to_contract/scenario_to_test)に揃えているため
7
+
8
+ 以降は新しいプロンプトを利用してください。
@@ -0,0 +1,8 @@
1
+ # Deprecated
2
+
3
+ このプロンプトは v0.9.1 で命名/雛形を整理しました。
4
+
5
+ - 代替: `.qfai/prompts/analyze/spec_to_scenario.md`
6
+ - 理由: v0.9.1 の `qfai analyze --list` / `--prompt` が標準3本(spec_to_scenario/spec_to_contract/scenario_to_test)に揃えているため
7
+
8
+ 以降は新しいプロンプトを利用してください。
@@ -0,0 +1,54 @@
1
+ # analyze: Spec ↔ Contract トレーサビリティチェック
2
+
3
+ ## 目的
4
+
5
+ - Spec と Contract(参照関係)が噛み合っているかを確認する
6
+ - 紐付け漏れ・参照の根拠薄弱を抽出する
7
+
8
+ ## 入力の前提(貼り付けて埋める)
9
+
10
+ 入力が多すぎる場合は「抜粋にする」「代表ケースだけに絞る」を優先してください。
11
+
12
+ ### Project Context
13
+
14
+ - 対象機能:
15
+ - 前提/制約:
16
+ - 対象外(Non-goals):
17
+
18
+ ### Spec Excerpts
19
+
20
+ - ...
21
+
22
+ ### Contract / Trace Links
23
+
24
+ - (Spec ID)→(Scenario ID / Test ID など)
25
+ - ...
26
+
27
+ ### Scenario Excerpts(任意)
28
+
29
+ - ...
30
+
31
+ ### Test Excerpts(任意)
32
+
33
+ - ...
34
+
35
+ ### Open Concerns(任意)
36
+
37
+ - ...
38
+
39
+ ## チェック観点
40
+
41
+ - Spec に対してリンクが存在しない箇所(紐付け漏れ)
42
+ - Contract で参照しているが、Spec 側に根拠が見当たらない箇所
43
+ - 参照の向きが不自然な箇所(誤ったID、転記ミスの疑い)
44
+
45
+ ## 期待する出力形式
46
+
47
+ - 「紐付け漏れ」「根拠薄弱」「参照ミス疑い」に分類
48
+ - それぞれに修正案(Contract修正 / Spec補強 / Scenario追加)を付ける
49
+
50
+ ## 次アクション
51
+
52
+ - Contract修正案:
53
+ - Spec補強案:
54
+ - 追加で確認すべき質問:
@@ -0,0 +1,56 @@
1
+ # analyze: Spec ↔ Scenario 整合性チェック
2
+
3
+ ## 目的
4
+
5
+ - Spec(仕様)の主張が Scenario(受入シナリオ)に反映されているかを確認する
6
+ - Scenario が Spec を逸脱していないかを確認する
7
+
8
+ ## 入力の前提(貼り付けて埋める)
9
+
10
+ 入力が多すぎる場合は「抜粋にする」「代表ケースだけに絞る」を優先してください。
11
+
12
+ ### Project Context
13
+
14
+ - 対象機能:
15
+ - 前提/制約:
16
+ - 対象外(Non-goals):
17
+
18
+ ### Spec Excerpts
19
+
20
+ - ...
21
+
22
+ ### Scenario Excerpts
23
+
24
+ - ...
25
+
26
+ ### Test Excerpts(任意)
27
+
28
+ - ...
29
+
30
+ ### Contract / Trace Links(任意)
31
+
32
+ - (Spec ID)→(Scenario ID / Test ID など)
33
+ - ...
34
+
35
+ ### Open Concerns(任意)
36
+
37
+ - ...
38
+
39
+ ## チェック観点
40
+
41
+ - 用語定義の不一致(同じ言葉で別の意味)
42
+ - 例外条件/境界条件の不足
43
+ - 受入条件(Given/When/Then 等)が仕様の制約を満たすか
44
+ - 仕様にあるのにシナリオがない項目(漏れ)
45
+ - シナリオにあるのに仕様に根拠がない項目(逸脱)
46
+
47
+ ## 期待する出力形式
48
+
49
+ - 矛盾 / 不明点 / 漏れ をそれぞれ箇条書き
50
+ - それぞれに「根拠(Spec/Scenario抜粋の引用)」と「提案(修正案)」を付ける
51
+
52
+ ## 次アクション
53
+
54
+ - Spec修正案:
55
+ - Scenario追加/修正案:
56
+ - 追加で確認すべき質問:
@@ -27,4 +27,5 @@ QFAI v0.7 以降は、プロンプト資産のカスタマイズ手段を **over
27
27
  ## init 再実行時の保護(契約)
28
28
 
29
29
  - `qfai init` は `.qfai/prompts.local/**` を **保護**します(`--force` を付けても上書きしません)。
30
- - 現時点でこの保護対象は `prompts.local` のみです。
30
+ - `--force` は `.qfai/prompts/**` のみ上書きします。
31
+ - `specs/` `contracts/` を含め、その他の領域は既存があればスキップします(上書きしません)。
@@ -0,0 +1,38 @@
1
+ # analyze 実施ログ(テンプレート)
2
+
3
+ > 目的: analyze は `validate` が扱わない「意味矛盾」の候補を抽出するための **レビュー補助**です。
4
+ > 結果は正解判定ではありません。根拠(引用)を確認し、レビューで判断してください。
5
+
6
+ ## メタ
7
+
8
+ - 実施日: YYYY-MM-DD
9
+ - 対象: <PR番号 / ブランチ / 変更スコープ>
10
+ - 利用モデル/環境: <任意>
11
+
12
+ ## 入力(貼り付けたもの)
13
+
14
+ - Spec: <spec.md / delta.md の該当範囲>
15
+ - Scenario: <scenario.md の該当範囲>
16
+ - Contract(任意): <該当契約>
17
+ - validate/report 要約: <report.md または validate.json の要約>
18
+ - 差分: <PR diff / 変更ファイル一覧>
19
+
20
+ ## 実行したプロンプト
21
+
22
+ - `.qfai/prompts/analyze/spec_to_scenario.md`
23
+ - `.qfai/prompts/analyze/spec_to_contract.md`
24
+ - `.qfai/prompts/analyze/scenario_to_test.md`
25
+
26
+ ## 結果(候補)
27
+
28
+ - <貼り付け>
29
+
30
+ ## レビュー判断
31
+
32
+ - 採用(修正する): <項目>
33
+ - 却下(問題なし/誤検知): <項目>
34
+ - 保留(追加調査/議論): <項目>
35
+
36
+ ## 次アクション
37
+
38
+ - <誰が/何を/いつまでに>
@@ -0,0 +1,54 @@
1
+ # analyze 入力バンドル(サンプル)
2
+
3
+ > 目的: `analyze` 用の入力をブレなく用意するための完成例です。
4
+ > 本ファイルは架空の小規模機能を題材にしています。自プロジェクトではコピーして編集してください。
5
+
6
+ ## Project Context
7
+
8
+ - 対象機能: パスワードリセット(メールでワンタイムリンクを送る)
9
+ - 前提/制約:
10
+ - リンクは 15 分で失効
11
+ - 送信頻度制限(IP + アカウント単位)
12
+ - 失効後は再送が必要
13
+ - 対象外(Non-goals):
14
+ - 多要素認証
15
+ - 端末認証
16
+
17
+ ## Spec Excerpts
18
+
19
+ - ユーザーがメールアドレスを入力すると、登録済みならリセットリンクを送る
20
+ - 未登録メールでも挙動は同じに見せる(ユーザー列挙防止)
21
+ - リンクは 15 分で失効し、失効後はエラーを表示する
22
+
23
+ ## Scenario Excerpts
24
+
25
+ - Given 登録済みユーザーがいる
26
+ When パスワードリセットを要求する
27
+ Then リセットメールが送信される
28
+ - Given 未登録のメールアドレス
29
+ When パスワードリセットを要求する
30
+ Then 同じメッセージが表示される(送信の有無は漏らさない)
31
+ - Given 期限切れのリセットリンク
32
+ When リセットリンクを開く
33
+ Then 期限切れとして扱われ、再送導線が提示される
34
+
35
+ ## Test Excerpts
36
+
37
+ - unit: `requestPasswordReset` は常に成功レスポンスを返す(登録有無を分岐しない)
38
+ - unit: `verifyResetToken` は失効時に `TokenExpired` を返す
39
+ - integration: 送信頻度制限が発動した場合でも同じメッセージを返す
40
+
41
+ ## Contract / Trace Links
42
+
43
+ - Spec: SPEC-RESET-001 → Scenario: SC-RESET-001, SC-RESET-002, SC-RESET-003
44
+ - Scenario: SC-RESET-003 → Test: tests/auth/reset.test.ts#expired
45
+
46
+ ## Open Concerns
47
+
48
+ - 送信頻度制限のしきい値(運用で調整するか、固定か)
49
+ - 期限切れ時のUX(単に失敗か、再送導線を必須にするか)
50
+
51
+ ## Non-goals
52
+
53
+ - メール配信基盤の冗長化
54
+ - 監査ログの永続化