qfai 1.0.3 → 1.0.5

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.
Files changed (99) hide show
  1. package/README.md +53 -74
  2. package/assets/init/.qfai/README.md +17 -82
  3. package/assets/init/.qfai/assistant/README.md +9 -0
  4. package/assets/init/.qfai/assistant/agents/README.md +34 -0
  5. package/assets/init/.qfai/assistant/agents/architect.md +73 -0
  6. package/assets/init/.qfai/assistant/agents/backend-engineer.md +73 -0
  7. package/assets/init/.qfai/assistant/agents/code-reviewer.md +73 -0
  8. package/assets/init/.qfai/assistant/agents/contract-designer.md +73 -0
  9. package/assets/init/.qfai/assistant/agents/devops-ci-engineer.md +73 -0
  10. package/assets/init/.qfai/assistant/agents/facilitator.md +74 -0
  11. package/assets/init/.qfai/assistant/agents/frontend-engineer.md +73 -0
  12. package/assets/init/.qfai/assistant/agents/interviewer.md +72 -0
  13. package/assets/init/.qfai/assistant/agents/planner.md +73 -0
  14. package/assets/init/.qfai/assistant/agents/qa-engineer.md +73 -0
  15. package/assets/init/.qfai/assistant/agents/requirements-analyst.md +73 -0
  16. package/assets/init/.qfai/assistant/agents/test-engineer.md +73 -0
  17. package/assets/init/.qfai/assistant/instructions/README.md +6 -0
  18. package/assets/init/.qfai/assistant/instructions/constitution.md +131 -0
  19. package/assets/init/.qfai/assistant/instructions/workflow.md +75 -0
  20. package/assets/init/.qfai/assistant/prompts/README.md +19 -0
  21. package/assets/init/.qfai/assistant/prompts/qfai-discuss.md +173 -0
  22. package/assets/init/.qfai/assistant/prompts/qfai-implement.md +239 -0
  23. package/assets/init/.qfai/assistant/prompts/qfai-pr.md +218 -0
  24. package/assets/init/.qfai/assistant/prompts/qfai-require.md +273 -0
  25. package/assets/init/.qfai/assistant/prompts/qfai-scenario-test.md +229 -0
  26. package/assets/init/.qfai/assistant/prompts/qfai-spec.md +287 -0
  27. package/assets/init/.qfai/assistant/prompts/qfai-unit-test.md +202 -0
  28. package/assets/init/.qfai/assistant/prompts/qfai-verify.md +231 -0
  29. package/assets/init/.qfai/assistant/prompts.local/README.md +6 -0
  30. package/assets/init/.qfai/assistant/steering/README.md +33 -0
  31. package/assets/init/.qfai/assistant/steering/product.md +32 -0
  32. package/assets/init/.qfai/assistant/steering/structure.md +34 -0
  33. package/assets/init/.qfai/assistant/steering/tech.md +37 -0
  34. package/assets/init/.qfai/contracts/README.md +7 -87
  35. package/assets/init/.qfai/contracts/api/README.md +8 -0
  36. package/assets/init/.qfai/contracts/db/README.md +8 -0
  37. package/assets/init/.qfai/contracts/ui/README.md +8 -0
  38. package/assets/init/.qfai/report/README.md +13 -0
  39. package/assets/init/.qfai/require/README.md +4 -26
  40. package/assets/init/.qfai/require/require.md +74 -0
  41. package/assets/init/.qfai/specs/README.md +6 -57
  42. package/assets/init/root/.github/workflows/qfai.yml +1 -1
  43. package/assets/init/root/qfai.config.yaml +3 -4
  44. package/dist/cli/index.cjs +313 -472
  45. package/dist/cli/index.cjs.map +1 -1
  46. package/dist/cli/index.mjs +295 -454
  47. package/dist/cli/index.mjs.map +1 -1
  48. package/dist/index.cjs +37 -63
  49. package/dist/index.cjs.map +1 -1
  50. package/dist/index.d.cts +0 -1
  51. package/dist/index.d.ts +0 -1
  52. package/dist/index.mjs +37 -63
  53. package/dist/index.mjs.map +1 -1
  54. package/package.json +1 -1
  55. package/assets/init/.qfai/contracts/api/api-0001-sample.yaml +0 -15
  56. package/assets/init/.qfai/contracts/db/db-0001-sample.sql +0 -7
  57. package/assets/init/.qfai/contracts/ui/assets/thema-001-facebook-like/assets.yaml +0 -6
  58. package/assets/init/.qfai/contracts/ui/assets/thema-001-facebook-like/palette.png +0 -0
  59. package/assets/init/.qfai/contracts/ui/assets/ui-0001-sample/assets.yaml +0 -6
  60. package/assets/init/.qfai/contracts/ui/assets/ui-0001-sample/snapshots/login__desktop__light__default.png +0 -0
  61. package/assets/init/.qfai/contracts/ui/thema-001-facebook-like.yml +0 -13
  62. package/assets/init/.qfai/contracts/ui/ui-0001-sample.yaml +0 -17
  63. package/assets/init/.qfai/out/README.md +0 -17
  64. package/assets/init/.qfai/promptpack/commands/implement.md +0 -8
  65. package/assets/init/.qfai/promptpack/commands/plan.md +0 -11
  66. package/assets/init/.qfai/promptpack/commands/release.md +0 -6
  67. package/assets/init/.qfai/promptpack/commands/review.md +0 -7
  68. package/assets/init/.qfai/promptpack/constitution.md +0 -15
  69. package/assets/init/.qfai/promptpack/modes/change.md +0 -5
  70. package/assets/init/.qfai/promptpack/modes/compatibility.md +0 -6
  71. package/assets/init/.qfai/promptpack/roles/qa.md +0 -4
  72. package/assets/init/.qfai/promptpack/roles/spec.md +0 -4
  73. package/assets/init/.qfai/promptpack/roles/test.md +0 -4
  74. package/assets/init/.qfai/promptpack/steering/compatibility-vs-change.md +0 -42
  75. package/assets/init/.qfai/promptpack/steering/naming.md +0 -7
  76. package/assets/init/.qfai/promptpack/steering/traceability.md +0 -25
  77. package/assets/init/.qfai/prompts/README.md +0 -70
  78. package/assets/init/.qfai/prompts/analyze/README.md +0 -21
  79. package/assets/init/.qfai/prompts/analyze/scenario_test_consistency.md +0 -8
  80. package/assets/init/.qfai/prompts/analyze/scenario_to_test.md +0 -56
  81. package/assets/init/.qfai/prompts/analyze/spec_contract_consistency.md +0 -8
  82. package/assets/init/.qfai/prompts/analyze/spec_scenario_consistency.md +0 -8
  83. package/assets/init/.qfai/prompts/analyze/spec_to_contract.md +0 -54
  84. package/assets/init/.qfai/prompts/analyze/spec_to_scenario.md +0 -56
  85. package/assets/init/.qfai/prompts/makeBusinessFlow.md +0 -34
  86. package/assets/init/.qfai/prompts/makeOverview.md +0 -27
  87. package/assets/init/.qfai/prompts/qfai-classify-change.md +0 -33
  88. package/assets/init/.qfai/prompts/qfai-generate-test-globs.md +0 -29
  89. package/assets/init/.qfai/prompts/qfai-maintain-contracts.md +0 -35
  90. package/assets/init/.qfai/prompts/qfai-maintain-traceability.md +0 -36
  91. package/assets/init/.qfai/prompts/require-to-spec.md +0 -41
  92. package/assets/init/.qfai/prompts.local/README.md +0 -31
  93. package/assets/init/.qfai/rules/conventions.md +0 -27
  94. package/assets/init/.qfai/rules/pnpm.md +0 -29
  95. package/assets/init/.qfai/samples/analyze/analysis.md +0 -38
  96. package/assets/init/.qfai/samples/analyze/input_bundle.md +0 -54
  97. package/assets/init/.qfai/specs/spec-0001/delta.md +0 -30
  98. package/assets/init/.qfai/specs/spec-0001/scenario.feature +0 -11
  99. package/assets/init/.qfai/specs/spec-0001/spec.md +0 -40
@@ -1,33 +0,0 @@
1
- # QFAI: Compatibility / Change 分類(変更区分の判断支援)
2
-
3
- あなたは差分を分析し、変更が Compatibility か Change かを分類します。
4
-
5
- ## 目的
6
-
7
- - delta.md の変更区分を明確にし、レビューポイントを固定する
8
- - 影響範囲(Spec/Scenario/Test/Contract)を明示する
9
-
10
- ## 必須入力
11
-
12
- - `.qfai/specs/**/delta.md`
13
- - 変更差分(`git diff`)
14
- - 参照元の Spec/Scenario/Contracts(必要に応じて)
15
-
16
- ## 手順
17
-
18
- 1. 差分を読み、ユーザー影響(互換維持/破壊)を分類する。
19
- 2. 影響範囲(Spec/Scenario/Test/Contract)を列挙する。
20
- 3. 変更区分の根拠を簡潔にまとめる。
21
- 4. 必要なドキュメント更新(README/CHANGELOG/Spec)を列挙する。
22
-
23
- ## 禁止事項
24
-
25
- - 仕様を勝手に変更しない
26
- - delta.md の内容を無断で上書きしない
27
- - 変更理由の捏造をしない
28
-
29
- ## 出力フォーマット
30
-
31
- - 分類(Compatibility / Change)と根拠
32
- - 影響範囲(ファイル/機能/テスト)
33
- - 追記すべきドキュメントのチェックリスト
@@ -1,29 +0,0 @@
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 設定に限定**(テストやソースの内容改変はしない)
@@ -1,35 +0,0 @@
1
- # QFAI: 契約保守(Contract ID と Spec 参照の整合)
2
-
3
- あなたは契約ファイルの追加/変更に合わせて、ID と参照の整合を保ちます。
4
-
5
- ## 目的
6
-
7
- - `QFAI-CONTRACT-ID` と `QFAI-CONTRACT-REF` の整合を保つ
8
- - orphan contract を発生させずに運用できるようにする
9
-
10
- ## 必須入力
11
-
12
- - `.qfai/contracts/**`(追加/変更した契約)
13
- - 関連する `spec.md`(候補は report の Spec→契約一覧)
14
- - `.qfai/out/report.md` / `.qfai/out/validate.json`(あれば)
15
-
16
- ## 手順
17
-
18
- 1. 追加/変更した契約の種別(UI/API/DB)と命名規約を確認する。
19
- 2. `QFAI-CONTRACT-ID` の採番案を作り、ファイル名と一致させる。
20
- 3. 参照すべき Spec を特定し、`QFAI-CONTRACT-REF` へ追記案を作る。
21
- 4. orphan contract が出る場合は、Spec 追加/更新の方針を提示する。
22
- 5. 変更後の validate / report 手順を示す。
23
-
24
- ## 禁止事項
25
-
26
- - 既存の Contract ID を無断で変更しない
27
- - ID 形式(`UI|API|DB-0001`)を崩さない
28
- - orphanContractsPolicy の変更を無断で行わない
29
-
30
- ## 出力フォーマット
31
-
32
- - 追加/変更する Contract ID と根拠
33
- - 参照を追加する Spec 一覧と編集案
34
- - 提案 diff(またはパッチ単位)
35
- - 再実行コマンド(`qfai validate` / `qfai report`)
@@ -1,36 +0,0 @@
1
- # QFAI: トレーサビリティ保守(Spec/Scenario/Test の参照整合)
2
-
3
- あなたは QFAI の成果物を分析し、壊れた参照(Spec/Scenario/Test)を修復します。
4
-
5
- ## 目的
6
-
7
- - Spec/Scenario/Test の ID 参照が壊れた箇所を特定し、整合させる
8
- - 互換維持/変更(Compatibility/Change)の区分を明確にする
9
-
10
- ## 必須入力
11
-
12
- - `.qfai/specs/**/spec.md` / `scenario.feature` / `delta.md`
13
- - `.qfai/out/validate.json`(あれば)
14
- - `.qfai/out/report.md`(あれば)
15
- - テストコード(`validation.traceability.testFileGlobs` に一致する範囲)
16
-
17
- ## 手順
18
-
19
- 1. validate/report の結果から、壊れている参照(Spec/BR/SC/Contract/Test)を列挙する。
20
- 2. Spec Pack(spec/delta/scenario)を読み、ID と参照の意図を把握する。
21
- 3. 修正が Compatibility か Change かを判断し、根拠を整理する。
22
- 4. 参照切れを解消する最小修正案(Spec/Scenario/Test)を作る。
23
- 5. 変更後の validate / report 手順を示す。
24
-
25
- ## 禁止事項
26
-
27
- - 仕様の勝手な拡張や要件追加をしない
28
- - ID 形式(`PREFIX-0001`)を崩さない
29
- - 参照の SSOT を変更しない(Spec→Contract は Spec の `QFAI-CONTRACT-REF` が正)
30
-
31
- ## 出力フォーマット
32
-
33
- - 変更区分(Compatibility / Change)と根拠
34
- - 修正対象一覧(ファイル/ID/理由)
35
- - 提案 diff(またはパッチ単位)
36
- - 再実行コマンド(`qfai validate` / `qfai report` / テスト)
@@ -1,41 +0,0 @@
1
- # require-to-spec
2
-
3
- あなたは仕様書作成アシスタントです。`.qfai/require/` 配下の既存要件を読み取り、QFAI の Spec Pack を作成してください。
4
-
5
- ## Inputs
6
-
7
- - `.qfai/require/` 配下の要件定義書・リンク・原本(読み取れる範囲で)
8
- - 追加資料がある場合は、それも参照して良い
9
-
10
- ## Output
11
-
12
- - `.qfai/specs/spec-0001/spec.md`
13
- - `.qfai/specs/spec-0001/delta.md`
14
- - `.qfai/specs/spec-0001/scenario.feature`
15
- - 必要に応じて `.qfai/contracts/{ui,api,db}` 配下
16
-
17
- > Spec は `spec-0001` から開始し、必要なら連番で増やすこと。
18
-
19
- ## Rules
20
-
21
- - **推測しない**。要件に書かれていないことは `TBD` と明記する。
22
- - ID は `PREFIX-0001` 形式(SPEC/BR/SC/UI/API/DB)。
23
- - `spec.md` の必須セクションは `qfai.config.yaml` の設定に従う。
24
- - BR は `## 業務ルール` にのみ定義し、`- [BR-0001][P1] ...` 形式で書く。
25
- - `spec.md` に `QFAI-CONTRACT-REF:` を必ず記載する(不要なら `none`)。
26
- - `scenario.feature` は Gherkin で書き、Feature に `@SPEC-xxxx` を付与する。
27
- - 各 Scenario は `@SC-xxxx` を **ちょうど1つ**、`@BR-xxxx` を **1つ以上**持つこと。
28
- - 契約ファイルには `QFAI-CONTRACT-ID: <ID>` を宣言する。
29
- - 契約 ID(UI/API/DB)を Scenario で参照する場合はタグまたは本文に明示する。
30
- - `delta.md` の「変更区分」は **Compatibility / Change/Improvement のいずれか1つにチェック**する。
31
- - 判断できない場合は `Compatibility` を選び、`TBD` を理由欄に記載する。
32
-
33
- ## Output Format
34
-
35
- - すべて Markdown
36
- - 余計な説明文は出力しない(ファイル内容のみ)
37
-
38
- ## 参照ルール(重要)
39
-
40
- - `.qfai/specs` や `contracts` は **.qfai/require を参照してよい**。
41
- - `.qfai/require` 側から `.qfai/specs` や `contracts` を参照するのは **禁止**。
@@ -1,31 +0,0 @@
1
- # Prompts Local(利用者カスタム / Overlay)
2
-
3
- このディレクトリは **利用者が自由に編集・追加できるプロンプト資産**の置き場です。
4
-
5
- QFAI v0.7 以降は、プロンプト資産のカスタマイズ手段を **overlay(prompts.local 優先)**に一本化します。
6
-
7
- ## Overlay ルール(重要)
8
-
9
- 同じ相対パスのファイルが存在する場合、次の優先順位で参照する運用とします。
10
-
11
- 1. `.qfai/prompts.local/<relativePath>`(存在すればこちらを優先)
12
- 2. `.qfai/prompts/<relativePath>`(無ければ base を参照)
13
-
14
- 例:
15
-
16
- - base: `.qfai/prompts/require-to-spec.md`
17
- - local override: `.qfai/prompts.local/require-to-spec.md`
18
-
19
- → `prompts.local` に同じ相対パスで置けば、以降は local を読む運用にできます。
20
-
21
- ## 重要な注意(サポート境界)
22
-
23
- - `.qfai/prompts/**` は **QFAI 標準資産**です(更新や `qfai init` の再実行で上書きされ得ます)。
24
- - 利用者が `.qfai/prompts/**` を直接編集することは **非推奨・非サポート(ほぼ禁止)**です。
25
- - 変更したい場合は、対象ファイルを `prompts.local` にコピーして上書きしてください。
26
-
27
- ## init 再実行時の保護(契約)
28
-
29
- - `qfai init` は `.qfai/prompts.local/**` を **保護**します(`--force` を付けても上書きしません)。
30
- - `--force` は `.qfai/prompts/**` のみ上書きします。
31
- - `specs/` `contracts/` を含め、その他の領域は既存があればスキップします(上書きしません)。
@@ -1,27 +0,0 @@
1
- # 互換維持 / 仕様変更の分類ルール
2
-
3
- 本ドキュメントは `delta.md` の「変更区分」を一貫させるための規約です。
4
-
5
- ## Compatibility(互換維持)
6
-
7
- - 既存の仕様と整合しており、期待値の変更がない
8
- - 既存の受入テスト/シナリオがそのまま成立する
9
- - 互換性の維持を前提とした改善・整理に留まる
10
-
11
- ## Change/Improvement(改善/仕様変更)
12
-
13
- - 期待値や振る舞いが変更される、または明確に追加される
14
- - 既存の受入テスト/シナリオの修正が必要になる
15
- - 互換性の破壊または新しい制約が生じる
16
-
17
- ## 運用ルール
18
-
19
- - `delta.md` では **必ずどちらか1つにチェック**する
20
- - 両方ON/両方OFFは無効(エラー)
21
- - 迷った場合は「影響範囲」「受入観点」を追記して明文化する
22
-
23
- ## OQ表記の扱い(対象範囲の限定)
24
-
25
- - OQ表記の排除は、現行仕様として参照される場所に限定する
26
- - 対象例: `packages/qfai/assets/init/.qfai/`, `.github/PULL_REQUEST_TEMPLATE.md`, `README.md`, `packages/qfai/README.md`
27
- - 意思決定ログ/補助資料(例: `docs/examples/`)は対象外とし、履歴の削除を誘発しない
@@ -1,29 +0,0 @@
1
- # pnpm lifecycle script 許可リスト(allowlist)運用ガイド
2
-
3
- ## 目的
4
-
5
- pnpm 環境で表示される `Ignored build scripts: ...` に対し、依存パッケージのビルドスクリプトを
6
- **安全に許可するための運用手順**を提示します。これは QFAI の validate 対象外です。
7
-
8
- ## 典型的な事象
9
-
10
- - `Ignored build scripts: esbuild` などの警告が表示される
11
-
12
- ## 影響例
13
-
14
- - ビルド成果物が生成されず、実行時エラーや動作不整合が起きる
15
- - ローカルは動くが CI で失敗するなど、環境差分が発生する
16
-
17
- ## 最小運用フロー(例)
18
-
19
- 1. 警告に出た依存を特定する(lockfile/依存ツリーで確認)
20
- 2. 依存の出所・信頼性を確認する(公式パッケージ/署名/公開元など)
21
- 3. チームで許可判断を行う(承認者・記録方法を決める)
22
- 4. pnpm の設定(例: `onlyBuiltDependencies` など)を更新し、許可対象を管理する
23
- 5. 変更内容を記録し、再現可能性を担保する(README/CHANGELOG など)
24
-
25
- ## 注意
26
-
27
- - pnpm のバージョンや設定により手順が変わる場合があります。
28
- - 実際のコマンドやオプションは **pnpm の公式ドキュメント**を参照してください。
29
- - allowlist の判断は各プロジェクトのセキュリティ方針に従ってください。
@@ -1,38 +0,0 @@
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.feature の該当範囲>
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
- - <誰が/何を/いつまでに>
@@ -1,54 +0,0 @@
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
- - 監査ログの永続化
@@ -1,30 +0,0 @@
1
- # Delta: SPEC-0001
2
-
3
- ## 変更区分
4
-
5
- - [x] Compatibility(互換維持: 既存仕様と整合)
6
- - [ ] Change/Improvement(改善/仕様変更: 期待値の変更を含む)
7
-
8
- ## 変更の要約(What)
9
-
10
- - ...
11
-
12
- ## 根拠(Why)
13
-
14
- - ...
15
-
16
- ## 影響範囲(Impact)
17
-
18
- - 仕様(spec.md):
19
- - シナリオ(scenario.feature):
20
- - 契約(contracts):
21
- - 実装(src):
22
- - テスト(tests):
23
-
24
- ## 受入観点(ATDD/QA)
25
-
26
- - ...
27
-
28
- ## 移行メモ(任意)
29
-
30
- - ...
@@ -1,11 +0,0 @@
1
- @SPEC-0001
2
- Feature: 注文登録
3
-
4
- Rule: 承認者が存在する
5
-
6
- # QFAI-CONTRACT-REF: UI-0001, API-0001, DB-0001, THEMA-001
7
- @SC-0001 @BR-0001
8
- Scenario: 承認者が承認するまで注文は確定しない
9
- Given ...
10
- When ...
11
- Then ...
@@ -1,40 +0,0 @@
1
- # SPEC-0001: 注文登録の最小仕様(サンプル)
2
-
3
- QFAI-CONTRACT-REF: API-0001, UI-0001, DB-0001, THEMA-001
4
-
5
- > このテンプレは **最小例** です。実際の仕様に合わせて書き換えてください。
6
-
7
- ## 背景
8
-
9
- - 例: 受注の登録ルールを統一し、手戻りを減らす
10
-
11
- ## スコープ
12
-
13
- - 例: 新規受注の登録と承認
14
-
15
- ## 非ゴール
16
-
17
- - 例: 既存受注の履歴移行は対象外
18
-
19
- ## 用語
20
-
21
- - 例: 受注 = 顧客からの注文情報
22
-
23
- ## 前提
24
-
25
- - 例: 承認者は1名以上配置されている
26
-
27
- ## 決定事項
28
-
29
- - 例: 承認は1段階で完了とする
30
-
31
- ## 業務ルール
32
-
33
- - [BR-0001][P2] 受注は承認者が承認するまで確定しない
34
-
35
- ### 書き方メモ
36
-
37
- - BR は **原子ルール** として採番する(`BR-0001.1` は使わない)
38
- - BR には **Priority(P0〜P3)** を必ず付与する
39
- - BR 定義は `## 業務ルール` セクション内に置く
40
- - Spec では **SC ID** を参照しない