qfai 0.9.0 → 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
@@ -24,7 +24,7 @@
24
24
  ## インストール
25
25
 
26
26
  ```sh
27
- npm install qfai
27
+ npm install -D qfai
28
28
  ```
29
29
 
30
30
  または
@@ -33,6 +33,12 @@ npm install qfai
33
33
  npx qfai init
34
34
  ```
35
35
 
36
+ pnpm の場合(推奨):
37
+
38
+ ```sh
39
+ pnpm add -D qfai
40
+ ```
41
+
36
42
  **必要環境**: Node.js >= 18
37
43
 
38
44
  ## パッケージ
@@ -43,6 +49,7 @@ npx qfai init
43
49
 
44
50
  ```sh
45
51
  npx qfai init
52
+ npx qfai doctor --fail-on error
46
53
  npx qfai validate --fail-on error --format github
47
54
  npx qfai report
48
55
  ```
@@ -125,21 +132,24 @@ doctor の JSON も非契約(内部形式。将来予告なく変更あり)
125
132
 
126
133
  ### 使い方(最短)
127
134
 
128
- 1. `.qfai/prompts/analyze/**` から目的に合うプロンプトを選ぶ
129
- 2. 推奨入力(Spec/Scenario/validate結果/差分)を揃えて、AI に貼り付ける
130
- 3. 結果をレビューし、必要な修正や議論に落とす
135
+ 1. `npx qfai analyze --list` でプロンプト一覧を確認する
136
+ 2. `npx qfai analyze --prompt spec_to_scenario` のようにプロンプトを出力し、AI に貼り付ける
137
+ 3. 推奨入力(Spec/Scenario/Test/Contract の抜粋 + validate/report 要約 + 差分)を揃えて検討する
131
138
 
132
- 成果物を残す場合は、`npx qfai init` が同梱する `.qfai/samples/analyze/analysis.md`(テンプレ)を使う運用を推奨します。
139
+ 入力の用意に迷う場合は、`npx qfai init` が同梱する `.qfai/samples/analyze/input_bundle.md`(完成例)をコピーして編集してください。
140
+ 成果物を残す場合は `.qfai/samples/analyze/analysis.md`(テンプレ)を使う運用を推奨します。
133
141
 
134
142
  ### カスタマイズ(Overlay)
135
143
 
136
144
  analyze も `.qfai/prompts.local/**` の overlay 運用に従います。
137
145
  同じ相対パスのファイルがある場合は `.qfai/prompts.local` を優先して参照してください。
138
146
 
147
+ 例: `.qfai/prompts.local/analyze/` に `spec_to_scenario.md` を置くと標準を上書きできます。
148
+
139
149
  ## 設定
140
150
 
141
151
  設定はリポジトリ直下の `qfai.config.yaml` で行います。
142
- 命名規約は `docs/rules/naming.md` を参照してください。
152
+ 命名規約は GitHub の[命名規約ドキュメント](https://github.com/aganesy/QFAI/blob/main/docs/rules/naming.md)を参照してください。
143
153
 
144
154
  ## 契約(Contracts)
145
155
 
@@ -210,7 +220,9 @@ jobs:
210
220
  path: .qfai/out/report.md
211
221
  ```
212
222
 
213
- 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) を参照してください。
214
226
  PromptPack は非契約(互換保証なし)です。編集する場合はラップ運用を推奨します。
215
227
 
216
228
  ## 生成される構成(例)
@@ -46,10 +46,11 @@ npx qfai report
46
46
  - `prompts/qfai-maintain-traceability.md`
47
47
  - `prompts/qfai-maintain-contracts.md`
48
48
  - `prompts/qfai-classify-change.md`
49
- - `prompts/analyze/spec_scenario_consistency.md`
50
- - `prompts/analyze/spec_contract_consistency.md`
51
- - `prompts/analyze/scenario_test_consistency.md`
52
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`
53
54
  - `promptpack/constitution.md`
54
55
  - `out/README.md`
55
56
 
@@ -29,9 +29,9 @@
29
29
  - `qfai-maintain-contracts.md`: 契約 ID と参照の整合
30
30
  - `qfai-classify-change.md`: Compatibility / Change 分類支援
31
31
  - `analyze/README.md`: analyze の目的/入力/出力フォーマット
32
- - `analyze/spec_scenario_consistency.md`: Spec ↔ Scenario の意味整合
33
- - `analyze/spec_contract_consistency.md`: Spec ↔ Contract の意味整合
34
- - `analyze/scenario_test_consistency.md`: Scenario ↔ Test(SC参照)の表現妥当性
32
+ - `analyze/spec_to_scenario.md`: Spec ↔ Scenario の意味整合
33
+ - `analyze/spec_to_contract.md`: Spec ↔ Contract の対応漏れ/参照不整合
34
+ - `analyze/scenario_to_test.md`: Scenario ↔ Test の網羅/抜け/誤差
35
35
 
36
36
  ## 使い分け表
37
37
 
@@ -1,6 +1,6 @@
1
1
  # analyze(手動利用)
2
2
 
3
- このディレクトリは QFAI の `validate` が扱わない **意味矛盾(レベル1/2)** を、レビューのために洗い出すための **手動プロンプト集**です。
3
+ このディレクトリは QFAI の `validate` が扱わない **意味レベル** の矛盾/抜け/リスクを、レビューのために洗い出すための **手動プロンプト集**です。
4
4
 
5
5
  重要:
6
6
 
@@ -10,29 +10,12 @@
10
10
 
11
11
  ## 推奨入力(最小セット)
12
12
 
13
- - 対象 Spec Pack:
14
- - `.qfai/specs/<spec-id>/spec.md`
15
- - `.qfai/specs/<spec-id>/delta.md`
16
- - `.qfai/specs/<spec-id>/scenario.md`
17
- - `validate` の結果:
18
- - `.qfai/out/report.md`(または `.qfai/out/validate.json` の要約)
19
- - 変更差分:
20
- - PR diff(または変更ファイル一覧)
13
+ - Project Context / Spec / Scenario / Test / Contract のうち、今回関係する箇所を **抜粋**で用意する
14
+ - `validate` / `report` の結果(必要なら要約)
15
+ - 変更差分(PR diff / 変更ファイル一覧)
21
16
 
22
- 入力が不足すると見落としが増え、入力が多すぎると回答が拡散しやすくなります。まずは上記のセットに揃える運用を推奨します。
17
+ ## プロンプト一覧(v0.9.x)
23
18
 
24
- ## 推奨出力フォーマット
25
-
26
- 各指摘を「レビューで決めるべき論点」として、次の項目を固定して出してください。
27
-
28
- - 種別: `Contradiction` / `Ambiguity` / `Missing Case` / `Risk` / `Suggestion`
29
- - 影響範囲: `Spec` / `Scenario` / `Contract` / `Test` / `Docs`
30
- - 根拠: 入力の該当箇所を短く引用
31
- - 判断理由: なぜ矛盾/曖昧に見えるか
32
- - 推奨アクション: 次に何を直す/議論するか(CIを止める結論は出さない)
33
-
34
- ## プロンプト一覧
35
-
36
- - `spec_scenario_consistency.md`: Spec ↔ Scenario の意味整合
37
- - `spec_contract_consistency.md`: Spec ↔ Contract の意味整合
38
- - `scenario_test_consistency.md`: Scenario ↔ Test(SC参照)の表現妥当性
19
+ - `spec_to_scenario.md`: Spec ↔ Scenario の意味整合
20
+ - `spec_to_contract.md`: Spec ↔ Contract の参照整合(紐付け漏れ/根拠薄弱)
21
+ - `scenario_to_test.md`: Scenario ↔ Test の網羅性/ズレ
@@ -1,35 +1,8 @@
1
- # analyze: Scenario ↔ Test consistency
1
+ # Deprecated
2
2
 
3
- あなたは QFAI 運用におけるレビュー補助者です。
4
- 目的は Scenario の意図と、テスト(主に SC 参照)で表現している内容の **妥当性**(抜け/重複/過剰な固定)を候補として列挙することです。
3
+ このプロンプトは v0.9.1 で命名/雛形を整理しました。
5
4
 
6
- 重要:
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
7
 
8
- - これは Hard Gate ではありません(CI を落とす結論は出さない)。
9
- - 出力は候補です。根拠(引用)を必ず添えてください。
10
- - `validate` が扱う構造矛盾(SC 参照の欠落/未知IDなど)は対象外です。
11
-
12
- ## 入力
13
-
14
- - Scenario: <貼り付け>
15
- - テストコード抜粋(該当ファイル): <貼り付け>
16
- - validate/report 要約: <貼り付け>
17
- - 変更差分(任意): <貼り付け>
18
-
19
- ## 出力(厳守)
20
-
21
- 以下の形式で、見つかった分だけ列挙してください。最大 12 件まで。
22
-
23
- - 種別: Contradiction | Ambiguity | Missing Case | Risk | Suggestion
24
- - 影響範囲: Spec | Scenario | Contract | Test | Docs
25
- - 根拠: "..."(短い引用を 1〜2 個)
26
- - 判断理由: なぜ抜け/重複/過剰固定に見えるか
27
- - 推奨アクション: 次に何を直す/議論するか
28
-
29
- ## 観点
30
-
31
- - Scenario の受入条件に対してテストが不足している
32
- - テストが Scenario にない要件を固定してしまっている(過剰な固定)
33
- - 同じ意図のテストが重複している
34
- - 境界値/例外系/権限/並行性など、事故りやすい論点が抜けている
35
- - SC 参照はあるが、シナリオの主張を検証していない
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
+ - 追加で確認すべき質問:
@@ -1,36 +1,8 @@
1
- # analyze: Spec ↔ Contract consistency
1
+ # Deprecated
2
2
 
3
- あなたは QFAI 運用におけるレビュー補助者です。
4
- 目的は Spec と Contract の **意味整合**(期待する入出力/副作用/用語/エラーの扱い)を確認し、ズレを候補として列挙することです。
3
+ このプロンプトは v0.9.1 で命名/雛形を整理しました。
5
4
 
6
- 重要:
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
7
 
8
- - これは Hard Gate ではありません(CI を落とす結論は出さない)。
9
- - 出力は候補です。根拠(引用)を必ず添えてください。
10
- - `validate` が扱う構造矛盾(ID/参照/フォーマット)は対象外です。
11
-
12
- ## 入力
13
-
14
- - Spec: <貼り付け>
15
- - Contract: <貼り付け>
16
- - validate/report 要約: <貼り付け>
17
- - 変更差分(任意): <貼り付け>
18
-
19
- ## 出力(厳守)
20
-
21
- 以下の形式で、見つかった分だけ列挙してください。最大 12 件まで。
22
-
23
- - 種別: Contradiction | Ambiguity | Missing Case | Risk | Suggestion
24
- - 影響範囲: Spec | Scenario | Contract | Test | Docs
25
- - 根拠: "..."(短い引用を 1〜2 個)
26
- - 判断理由: なぜ矛盾/曖昧に見えるか
27
- - 推奨アクション: 次に何を直す/議論するか
28
-
29
- ## 観点
30
-
31
- - 用語/フィールド名/概念の不一致
32
- - Spec の期待(入力/出力/状態遷移)と Contract の定義の不一致
33
- - エラー/例外の扱い(HTTP status / error code / validation error の条件)
34
- - 非機能(性能/レート制限/タイムアウト/整合性)への言及のズレ
35
- - Contract が Spec の範囲を超えて規定している(過剰な固定)
36
- - Spec が Contract の重要条件を説明していない(根拠不足)
8
+ 以降は新しいプロンプトを利用してください。
@@ -1,35 +1,8 @@
1
- # analyze: Spec ↔ Scenario consistency
1
+ # Deprecated
2
2
 
3
- あなたは QFAI 運用におけるレビュー補助者です。
4
- 目的は `validate` が扱わない **意味矛盾**(用語/前提/例外/受入条件の齟齬)を、レビューで判断できる形で列挙することです。
3
+ このプロンプトは v0.9.1 で命名/雛形を整理しました。
5
4
 
6
- 重要:
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
7
 
8
- - これは Hard Gate ではありません。CI を落とす結論は出さないでください。
9
- - 出力は候補です。根拠(引用)を必ず添えてください。
10
- - `validate` が扱う構造矛盾(参照/フォーマット/ID)は対象外です。
11
-
12
- ## 入力
13
-
14
- - Spec: <貼り付け>
15
- - Scenario: <貼り付け>
16
- - validate/report 要約: <貼り付け>
17
- - 変更差分(任意): <貼り付け>
18
-
19
- ## 出力(厳守)
20
-
21
- 以下の形式で、見つかった分だけ列挙してください。最大 12 件まで。重大度の推定は不要です。
22
-
23
- - 種別: Contradiction | Ambiguity | Missing Case | Risk | Suggestion
24
- - 影響範囲: Spec | Scenario | Contract | Test | Docs
25
- - 根拠: "..."(短い引用を 1〜2 個)
26
- - 判断理由: なぜ矛盾/曖昧に見えるか
27
- - 推奨アクション: 次に何を直す/議論するか
28
-
29
- ## 観点
30
-
31
- - 用語の不一致(同じ概念が別名、別概念が同名)
32
- - 前提条件/制約の不一致(Spec にあるが Scenario にない、または逆)
33
- - 例外系/エラー系の扱いの不一致
34
- - Acceptance Criteria の抜け/過剰/言い回しのズレ
35
- - Scenario の手順が Spec の要求を満たしていない/逆に余計な要求を足している
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
+ - 追加で確認すべき質問:
@@ -19,9 +19,9 @@
19
19
 
20
20
  ## 実行したプロンプト
21
21
 
22
- - `.qfai/prompts/analyze/spec_scenario_consistency.md`
23
- - `.qfai/prompts/analyze/spec_contract_consistency.md`
24
- - `.qfai/prompts/analyze/scenario_test_consistency.md`
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
25
 
26
26
  ## 結果(候補)
27
27
 
@@ -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
+ - 監査ログの永続化