qfai 0.2.5 → 0.2.8

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 (128) hide show
  1. package/README.md +1 -1
  2. package/assets/init/.qfai/README.md +42 -0
  3. package/assets/init/.qfai/contracts/README.md +61 -0
  4. package/assets/init/{qfai → .qfai}/contracts/api/api-0001-sample.yaml +3 -0
  5. package/assets/init/{qfai → .qfai}/contracts/db/db-0001-sample.sql +3 -2
  6. package/assets/init/.qfai/contracts/ui/ui-0001-sample.yaml +6 -0
  7. package/assets/init/.qfai/out/README.md +17 -0
  8. package/assets/init/.qfai/prompts/README.md +32 -0
  9. package/assets/init/{qfai → .qfai}/prompts/makeBusinessFlow.md +1 -1
  10. package/assets/init/{qfai → .qfai}/prompts/makeOverview.md +1 -1
  11. package/assets/init/.qfai/spec/README.md +80 -0
  12. package/assets/init/.qfai/spec/decisions/ADR-0001.md +9 -0
  13. package/assets/init/.qfai/spec/decisions/README.md +36 -0
  14. package/assets/init/.qfai/spec/scenarios/scenarios.feature +6 -0
  15. package/assets/init/.qfai/spec/spec-0001-sample.md +36 -0
  16. package/assets/init/root/qfai.config.yaml +8 -8
  17. package/dist/cli/index.cjs +498 -206
  18. package/dist/cli/index.cjs.map +1 -1
  19. package/dist/cli/index.d.ts +0 -2
  20. package/dist/cli/index.mjs +495 -203
  21. package/dist/cli/index.mjs.map +1 -1
  22. package/dist/index.cjs +471 -177
  23. package/dist/index.cjs.map +1 -1
  24. package/dist/index.d.cts +7 -4
  25. package/dist/index.d.ts +135 -2
  26. package/dist/index.mjs +470 -177
  27. package/dist/index.mjs.map +1 -1
  28. package/package.json +1 -1
  29. package/assets/init/qfai/README.md +0 -6
  30. package/assets/init/qfai/contracts/ui/ui-0001-sample.yaml +0 -4
  31. package/assets/init/qfai/spec/decisions/ADR-0001.md +0 -7
  32. package/assets/init/qfai/spec/scenarios.feature +0 -6
  33. package/assets/init/qfai/spec/spec-0001-sample.md +0 -29
  34. package/dist/cli/commands/init.d.ts +0 -8
  35. package/dist/cli/commands/init.d.ts.map +0 -1
  36. package/dist/cli/commands/init.js +0 -30
  37. package/dist/cli/commands/init.js.map +0 -1
  38. package/dist/cli/commands/report.d.ts +0 -8
  39. package/dist/cli/commands/report.d.ts.map +0 -1
  40. package/dist/cli/commands/report.js +0 -83
  41. package/dist/cli/commands/report.js.map +0 -1
  42. package/dist/cli/commands/validate.d.ts +0 -10
  43. package/dist/cli/commands/validate.d.ts.map +0 -1
  44. package/dist/cli/commands/validate.js +0 -66
  45. package/dist/cli/commands/validate.js.map +0 -1
  46. package/dist/cli/index.d.ts.map +0 -1
  47. package/dist/cli/index.js +0 -7
  48. package/dist/cli/index.js.map +0 -1
  49. package/dist/cli/lib/args.d.ts +0 -19
  50. package/dist/cli/lib/args.d.ts.map +0 -1
  51. package/dist/cli/lib/args.js +0 -107
  52. package/dist/cli/lib/args.js.map +0 -1
  53. package/dist/cli/lib/assets.d.ts +0 -2
  54. package/dist/cli/lib/assets.d.ts.map +0 -1
  55. package/dist/cli/lib/assets.js +0 -8
  56. package/dist/cli/lib/assets.js.map +0 -1
  57. package/dist/cli/lib/failOn.d.ts +0 -5
  58. package/dist/cli/lib/failOn.d.ts.map +0 -1
  59. package/dist/cli/lib/failOn.js +0 -10
  60. package/dist/cli/lib/failOn.js.map +0 -1
  61. package/dist/cli/lib/fs.d.ts +0 -11
  62. package/dist/cli/lib/fs.d.ts.map +0 -1
  63. package/dist/cli/lib/fs.js +0 -91
  64. package/dist/cli/lib/fs.js.map +0 -1
  65. package/dist/cli/lib/logger.d.ts +0 -4
  66. package/dist/cli/lib/logger.d.ts.map +0 -1
  67. package/dist/cli/lib/logger.js +0 -10
  68. package/dist/cli/lib/logger.js.map +0 -1
  69. package/dist/cli/main.d.ts +0 -2
  70. package/dist/cli/main.d.ts.map +0 -1
  71. package/dist/cli/main.js +0 -73
  72. package/dist/cli/main.js.map +0 -1
  73. package/dist/core/config.d.ts +0 -46
  74. package/dist/core/config.d.ts.map +0 -1
  75. package/dist/core/config.js +0 -224
  76. package/dist/core/config.js.map +0 -1
  77. package/dist/core/discovery.d.ts +0 -11
  78. package/dist/core/discovery.d.ts.map +0 -1
  79. package/dist/core/discovery.js +0 -31
  80. package/dist/core/discovery.js.map +0 -1
  81. package/dist/core/fs.d.ts +0 -6
  82. package/dist/core/fs.d.ts.map +0 -1
  83. package/dist/core/fs.js +0 -55
  84. package/dist/core/fs.js.map +0 -1
  85. package/dist/core/ids.d.ts +0 -5
  86. package/dist/core/ids.d.ts.map +0 -1
  87. package/dist/core/ids.js +0 -49
  88. package/dist/core/ids.js.map +0 -1
  89. package/dist/core/index.d.ts +0 -11
  90. package/dist/core/index.d.ts.map +0 -1
  91. package/dist/core/index.js +0 -11
  92. package/dist/core/index.js.map +0 -1
  93. package/dist/core/report.d.ts +0 -41
  94. package/dist/core/report.d.ts.map +0 -1
  95. package/dist/core/report.js +0 -238
  96. package/dist/core/report.js.map +0 -1
  97. package/dist/core/types.d.ts +0 -27
  98. package/dist/core/types.d.ts.map +0 -1
  99. package/dist/core/types.js +0 -2
  100. package/dist/core/types.js.map +0 -1
  101. package/dist/core/validate.d.ts +0 -4
  102. package/dist/core/validate.d.ts.map +0 -1
  103. package/dist/core/validate.js +0 -32
  104. package/dist/core/validate.js.map +0 -1
  105. package/dist/core/validators/contracts.d.ts +0 -5
  106. package/dist/core/validators/contracts.d.ts.map +0 -1
  107. package/dist/core/validators/contracts.js +0 -157
  108. package/dist/core/validators/contracts.js.map +0 -1
  109. package/dist/core/validators/scenario.d.ts +0 -5
  110. package/dist/core/validators/scenario.d.ts.map +0 -1
  111. package/dist/core/validators/scenario.js +0 -82
  112. package/dist/core/validators/scenario.js.map +0 -1
  113. package/dist/core/validators/spec.d.ts +0 -5
  114. package/dist/core/validators/spec.d.ts.map +0 -1
  115. package/dist/core/validators/spec.js +0 -69
  116. package/dist/core/validators/spec.js.map +0 -1
  117. package/dist/core/validators/traceability.d.ts +0 -4
  118. package/dist/core/validators/traceability.d.ts.map +0 -1
  119. package/dist/core/validators/traceability.js +0 -148
  120. package/dist/core/validators/traceability.js.map +0 -1
  121. package/dist/core/version.d.ts +0 -2
  122. package/dist/core/version.d.ts.map +0 -1
  123. package/dist/core/version.js +0 -25
  124. package/dist/core/version.js.map +0 -1
  125. package/dist/index.d.ts.map +0 -1
  126. package/dist/index.js +0 -2
  127. package/dist/index.js.map +0 -1
  128. package/dist/tsconfig.tsbuildinfo +0 -1
package/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # QFAI Toolkit (v0.2.5)
1
+ # QFAI Toolkit (v0.2.8)
2
2
 
3
3
  Single-package distribution for QFAI.
4
4
 
@@ -0,0 +1,42 @@
1
+ # QFAI Project Kit (.qfai)
2
+
3
+ このディレクトリは QFAI の成果物を集約する専用領域です。`.qfai` 配下だけを見れば「何を書くか」「どこから始めるか」が分かる構成にしています。
4
+
5
+ ## 最短成功(init → validate → report)
6
+
7
+ ```bash
8
+ npx qfai validate --fail-on error --format github --json-path .qfai/out/validate.json
9
+ npx qfai report --json-path .qfai/out/validate.json --out .qfai/out/report.md
10
+ ```
11
+
12
+ ## ディレクトリ概要
13
+
14
+ - `spec/` : 仕様・シナリオ・ADR(意思決定)を置く場所
15
+ - `contracts/` : UI / API / DB 契約を置く場所
16
+ - `prompts/` : 生成プロンプト資産(自動読取はしない)
17
+ - `out/` : `validate` / `report` の出力先(gitignore 推奨)
18
+
19
+ 詳細は各 README を参照してください。
20
+
21
+ - `spec/README.md`
22
+ - `spec/decisions/README.md`
23
+ - `contracts/README.md`
24
+ - `prompts/README.md`
25
+ - `out/README.md`
26
+
27
+ ## 設定と CI
28
+
29
+ - 設定ファイル: `qfai.config.yaml`(リポジトリ直下)
30
+ - CI テンプレ: `.github/workflows/qfai.yml`
31
+
32
+ ## Prompts の使い方(重要)
33
+
34
+ `prompts/` は **人間が手動で使う資産**です。v0.2.6 では自動読取を行いません。
35
+
36
+ 例:
37
+
38
+ - Copilot: `.github/copilot-instructions.md` に要旨を転記
39
+ - Claude: `CLAUDE.md` に要旨を転記
40
+ - Codex: `AGENTS.md` に要旨を転記
41
+
42
+ 詳細は `prompts/README.md` を参照してください。
@@ -0,0 +1,61 @@
1
+ # Contracts (UI / API / DB)
2
+
3
+ 契約は「システム外部との約束」を明文化する場所です。Scenario または Spec から参照される前提で作成します。
4
+
5
+ ## 置くべきファイル
6
+
7
+ - UI: `ui/ui-0001-<slug>.yaml` または `.yml`
8
+ - API: `api/api-0001-<slug>.yaml` / `.yml` / `.json`(OpenAPI)
9
+ - DB: `db/db-0001-<slug>.sql`(ID は `DATA-xxxx`)
10
+
11
+ ## 最小例(UI)
12
+
13
+ ```yaml
14
+ id: UI-0001
15
+ name: 受注登録画面
16
+ refs:
17
+ - BR-0001
18
+ ```
19
+
20
+ ## 最小例(API)
21
+
22
+ ```yaml
23
+ openapi: 3.0.0
24
+ info:
25
+ title: Sample API
26
+ version: 0.1.0
27
+ paths:
28
+ /health:
29
+ get:
30
+ operationId: API-0001
31
+ responses:
32
+ "200":
33
+ description: OK
34
+ ```
35
+
36
+ ## 最小例(DB)
37
+
38
+ ```sql
39
+ -- DATA-0001
40
+ CREATE TABLE sample_table (
41
+ id INTEGER PRIMARY KEY
42
+ );
43
+ ```
44
+
45
+ ## CI でチェックされること(抜粋)
46
+
47
+ - UI/API: パース失敗は error、ID 未定義は error
48
+ - UI: `UI-xxxx` の ID が必要
49
+ - API: OpenAPI 定義があること、`API-xxxx` の operationId が必要
50
+ - DB: 危険 SQL(DROP/TRUNCATE 等)の警告
51
+ - 共通: ID 形式(`PREFIX-0001`)、定義 ID の重複検知
52
+
53
+ ## 依存関係
54
+
55
+ - Scenario → Contracts(UI/API/DATA のいずれかへ接続)
56
+ - Spec → Contracts(参照は許容)
57
+
58
+ ## 良い例 / 悪い例
59
+
60
+ - 良い例: `@SC-xxxx` から `UI-xxxx` が参照されている
61
+ - 悪い例: 契約が Scenario から一切参照されない
@@ -1,3 +1,6 @@
1
+ # OpenAPI contract sample (API-0001)
2
+ # - 必須: openapi, info, paths
3
+ # - 参照: BR/SC の ID を x-qfai-refs に記載
1
4
  openapi: 3.0.0
2
5
  info:
3
6
  title: QFAI Sample API
@@ -1,5 +1,6 @@
1
- -- DATA-0001
1
+ -- DATA-0001 (DB contract sample)
2
+ -- 破壊的 SQL (削除/破棄系) は警告対象
2
3
  CREATE TABLE sample_table (
3
4
  id INTEGER PRIMARY KEY,
4
5
  name VARCHAR(255) NOT NULL
5
- );
6
+ );
@@ -0,0 +1,6 @@
1
+ # UI contract sample (UI-0001)
2
+ # - 必須: id (例: UI-0001), name, refs
3
+ id: UI-0001
4
+ name: Order Registration
5
+ refs:
6
+ - BR-0001
@@ -0,0 +1,17 @@
1
+ # Output (.qfai/out)
2
+
3
+ `qfai validate` と `qfai report` の出力先です。
4
+
5
+ ## 生成されるファイル
6
+
7
+ - `validate.json` : 検証結果(JSON)
8
+ - `report.md` / `report.json` : レポート
9
+
10
+ ## 運用メモ
11
+
12
+ - 原則として **コミットしない** ことを推奨します
13
+ - `.gitignore` への追記例:
14
+
15
+ ```
16
+ .qfai/out/
17
+ ```
@@ -0,0 +1,32 @@
1
+ # Prompts (手動利用)
2
+
3
+ このディレクトリのプロンプトは **手動で使う資産**です。v0.2.6 では自動読取を行いません。
4
+
5
+ ## 目的
6
+
7
+ - Spec から overview / Business Flow を生成するための素材
8
+ - 将来(v0.9)の adapter/emit 実装に備えた配布物
9
+
10
+ ## 使い方(例)
11
+
12
+ 1. 目的のプロンプトを開く(例: `makeOverview.md`)
13
+ 2. そのまま AI エージェントに貼り付ける
14
+ 3. 指示された出力先に生成結果を保存する
15
+
16
+ ### エージェント別の手動導線(例)
17
+
18
+ - Copilot: `.github/copilot-instructions.md` に要旨を転記
19
+ - Claude: `CLAUDE.md` に要旨を転記
20
+ - Codex: `AGENTS.md` に要旨を転記
21
+
22
+ ※ いずれも **自動生成はしません**。必要に応じて人手で同期してください。
23
+
24
+ ## 出力先の例
25
+
26
+ - Overview: `docs/specs/overview.md`
27
+ - Business Flow: `docs/flows/bf-0001-<slug>.md`
28
+
29
+ ## CI との関係
30
+
31
+ - プロンプト自体は CI の検査対象ではありません
32
+ - 生成物をレビューし、Spec/Scenario/Contracts と整合しているかを確認してください
@@ -5,7 +5,7 @@ Spec群を読み、Specに明示されている情報のみを根拠として、
5
5
 
6
6
  ## Inputs
7
7
 
8
- - 対象: qfai/spec/spec.md と qfai/spec/spec-0001-\*.md 形式のファイル(4 桁の数字 + ハイフン + slug。実際のパターン: `spec-\d{4}-[^/\\]+\.md`。存在するもの全て)
8
+ - 対象: .qfai/spec/spec-0001-\*.md 形式のファイル(4 桁の数字 + ハイフン + slug。実際のパターン: `spec-\d{4}-[^/\\]+\.md`。存在するもの全て)
9
9
 
10
10
  ## Output (Option)
11
11
 
@@ -4,7 +4,7 @@
4
4
 
5
5
  ## Inputs
6
6
 
7
- - 対象: qfai/spec/spec.md と qfai/spec/spec-0001-\*.md 形式のファイル(4 桁の数字 + ハイフン + slug。実際のパターン: `spec-\d{4}-[^/\\]+\.md`。存在するもの全て)
7
+ - 対象: .qfai/spec/spec-0001-\*.md 形式のファイル(4 桁の数字 + ハイフン + slug。実際のパターン: `spec-\d{4}-[^/\\]+\.md`。存在するもの全て)
8
8
 
9
9
  ## Output
10
10
 
@@ -0,0 +1,80 @@
1
+ # Spec / Scenario / Decisions
2
+
3
+ このディレクトリは「仕様(Spec)」「シナリオ(Scenario)」「意思決定(ADR)」の入口です。
4
+
5
+ ## 置くべきファイル
6
+
7
+ - Spec: `spec-0001-<slug>.md`(必須)
8
+ - Scenario: `scenarios/*.feature`
9
+ - Decisions: `decisions/ADR-0001.md` など
10
+
11
+ ## 最小例(Spec)
12
+
13
+ ```md
14
+ # SPEC-0001: 注文登録の最小要件
15
+
16
+ ## 背景
17
+
18
+ - 例: 受注の登録ルールを明文化し、手戻りを減らすため
19
+
20
+ ## スコープ
21
+
22
+ - 例: 新規受注の登録と承認
23
+
24
+ ## 非ゴール
25
+
26
+ - 例: 既存受注の履歴移行は対象外
27
+
28
+ ## 用語
29
+
30
+ - 例: 受注 = 顧客からの注文情報
31
+
32
+ ## 前提
33
+
34
+ - 例: 承認者は1名以上配置されている
35
+
36
+ ## 決定事項
37
+
38
+ - 例: 承認は1段階で完了とする
39
+
40
+ ## 業務ルール
41
+
42
+ - [BR-0001] 受注は承認者が承認するまで確定しない
43
+ - [BR-0002] 承認済みの受注のみ出荷依頼に進める
44
+ ```
45
+
46
+ ## BR の書き方(重要)
47
+
48
+ - **1 ルール = 1 BR** を守る
49
+ - 小項目がある場合は **別 BR を採番**する(`BR-0001.1` は使わない)
50
+ - 参照は常に BR ID を使う
51
+
52
+ ## Scenario の最小要件
53
+
54
+ - `@SC-xxxx` / `@SPEC-xxxx` / `@BR-xxxx` をタグで明示
55
+ - Scenario は複数の SPEC を参照してよい(`@SPEC-xxxx` を複数記載可能)
56
+ - `Given / When / Then` を含める
57
+ - UI/API/DATA 契約に接続する(トレーサビリティのエラー回避)
58
+
59
+ ## CI でチェックされること(抜粋)
60
+
61
+ - Spec: 必須セクションの有無、SPEC/BR ID の存在、ID 形式(`PREFIX-0001`)、Contract 参照の実在性
62
+ - Scenario: SC/SPEC/BR の参照、Given/When/Then の有無、参照IDの実在性
63
+ - Traceability: BR→SC、SC→契約(UI/API/DATA)の接続、BR の所属 SPEC 整合
64
+ - IDs: 定義 ID の重複検知(Spec/Scenario/Contracts)
65
+
66
+ ## 依存関係
67
+
68
+ - Spec → Scenario → Contracts
69
+ - Spec → Contracts(参照は許容)
70
+ - Decisions(ADR)→ Spec / BR
71
+
72
+ ## 良い例 / 悪い例
73
+
74
+ - 良い例: `BR-0001` が Scenario で参照され、UI/API/DATA のいずれかに接続している
75
+ - 悪い例: Spec に `SC-xxxx` を書く(Spec は SC を参照しない)
76
+
77
+ ## 良い運用 / 悪い運用
78
+
79
+ - 良い運用: Spec/Scenario/Contracts を同じ ID でつなぐ
80
+ - 悪い運用: Spec の BR が Scenario に出てこない(孤立)
@@ -0,0 +1,9 @@
1
+ # ADR-0001: 承認フローは1段階にする
2
+
3
+ > このファイルは「なぜその判断をしたか」を残すためのテンプレです。
4
+
5
+ - Status: Proposed
6
+ - Context: 承認者を増やすと運用が複雑になる
7
+ - Decision: v0.2.6 では1段階の承認に固定する
8
+ - Consequences: 多段承認が必要な場合は拡張が必要
9
+ - Related: BR-0001, SPEC-0001
@@ -0,0 +1,36 @@
1
+ # ADR (Architecture Decision Record)
2
+
3
+ ADR は「なぜその判断をしたか」を記録するための軽量な意思決定ログです。
4
+
5
+ ## いつ書くか
6
+
7
+ - 仕様の前提や制約が変わるとき
8
+ - 技術選定や設計方針を決めたとき
9
+ - 重要なトレードオフがあるとき
10
+
11
+ ## 最小例
12
+
13
+ ```md
14
+ # ADR-0001: 承認フローは1段階にする
15
+
16
+ - Status: Proposed
17
+ - Context: 承認者を増やすと運用が複雑になる
18
+ - Decision: v0.2.6 では1段階の承認に固定する
19
+ - Consequences: 多段承認が必要な場合は拡張が必要
20
+ - Related: BR-0001, SPEC-0001
21
+ ```
22
+
23
+ ## CI でチェックされること(抜粋)
24
+
25
+ - ID 形式(`PREFIX-0001`。ADR を含む)
26
+ - 参照 ID の整合性(トレーサビリティ)
27
+
28
+ ## 依存関係
29
+
30
+ - ADR は Spec / BR と一緒に参照される
31
+ - Scenario/Contracts から参照されることは少ない
32
+
33
+ ## 良い例 / 悪い例
34
+
35
+ - 良い例: Context/Decision/Consequences が簡潔に書かれている
36
+ - 悪い例: Decision が空のまま放置されている
@@ -0,0 +1,6 @@
1
+ @SC-0001 @BR-0001 @SPEC-0001 @UI-0001 @API-0001 @DATA-0001
2
+ Feature: Order registration
3
+ Scenario: Register a new order
4
+ Given no order exists for the customer
5
+ When the user submits a new order
6
+ Then the order is created as pending approval
@@ -0,0 +1,36 @@
1
+ # SPEC-0001: 注文登録の最小仕様(サンプル)
2
+
3
+ > このテンプレは **最小例** です。実際の仕様に合わせて書き換えてください。
4
+
5
+ ## 背景
6
+
7
+ - 例: 受注の登録ルールを統一し、手戻りを減らす
8
+
9
+ ## スコープ
10
+
11
+ - 例: 新規受注の登録と承認
12
+
13
+ ## 非ゴール
14
+
15
+ - 例: 既存受注の履歴移行は対象外
16
+
17
+ ## 用語
18
+
19
+ - 例: 受注 = 顧客からの注文情報
20
+
21
+ ## 前提
22
+
23
+ - 例: 承認者は1名以上配置されている
24
+
25
+ ## 決定事項
26
+
27
+ - 例: 承認は1段階で完了とする
28
+
29
+ ## 業務ルール
30
+
31
+ - [BR-0001] 受注は承認者が承認するまで確定しない
32
+
33
+ ### 書き方メモ
34
+
35
+ - BR は **原子ルール** として採番する(`BR-0001.1` は使わない)
36
+ - Spec では **SC ID** を参照しない
@@ -1,12 +1,11 @@
1
1
  paths:
2
- specDir: qfai/spec
3
- decisionsDir: qfai/spec/decisions
4
- scenariosDir: qfai/spec
5
- rulesDir: qfai/rules
6
- contractsDir: qfai/contracts
7
- uiContractsDir: qfai/contracts/ui
8
- apiContractsDir: qfai/contracts/api
9
- dataContractsDir: qfai/contracts/db
2
+ specDir: .qfai/spec
3
+ decisionsDir: .qfai/spec/decisions
4
+ scenariosDir: .qfai/spec/scenarios
5
+ contractsDir: .qfai/contracts
6
+ uiContractsDir: .qfai/contracts/ui
7
+ apiContractsDir: .qfai/contracts/api
8
+ dataContractsDir: .qfai/contracts/db
10
9
  srcDir: src
11
10
  testsDir: tests
12
11
  validation:
@@ -24,6 +23,7 @@ validation:
24
23
  brMustHaveSc: true
25
24
  scMustTouchContracts: true
26
25
  allowOrphanContracts: false
26
+ unknownContractIdSeverity: error
27
27
  output:
28
28
  format: text
29
29
  jsonPath: .qfai/out/validate.json