qfai 0.2.5 → 0.2.6
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 +1 -1
- package/assets/init/.qfai/README.md +42 -0
- package/assets/init/.qfai/contracts/README.md +59 -0
- package/assets/init/{qfai → .qfai}/contracts/api/api-0001-sample.yaml +3 -0
- package/assets/init/{qfai → .qfai}/contracts/db/db-0001-sample.sql +3 -2
- package/assets/init/.qfai/contracts/ui/ui-0001-sample.yaml +6 -0
- package/assets/init/.qfai/out/README.md +17 -0
- package/assets/init/.qfai/prompts/README.md +32 -0
- package/assets/init/{qfai → .qfai}/prompts/makeBusinessFlow.md +1 -1
- package/assets/init/{qfai → .qfai}/prompts/makeOverview.md +1 -1
- package/assets/init/.qfai/spec/README.md +77 -0
- package/assets/init/.qfai/spec/decisions/ADR-0001.md +9 -0
- package/assets/init/.qfai/spec/decisions/README.md +36 -0
- package/assets/init/.qfai/spec/scenarios/scenarios.feature +6 -0
- package/assets/init/.qfai/spec/spec-0001-sample.md +36 -0
- package/assets/init/root/qfai.config.yaml +8 -8
- package/dist/cli/index.cjs +16 -16
- package/dist/cli/index.cjs.map +1 -1
- package/dist/cli/index.d.ts +0 -2
- package/dist/cli/index.mjs +16 -16
- package/dist/cli/index.mjs.map +1 -1
- package/dist/index.cjs +14 -14
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +132 -2
- package/dist/index.mjs +14 -14
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
- package/assets/init/qfai/README.md +0 -6
- package/assets/init/qfai/contracts/ui/ui-0001-sample.yaml +0 -4
- package/assets/init/qfai/spec/decisions/ADR-0001.md +0 -7
- package/assets/init/qfai/spec/scenarios.feature +0 -6
- package/assets/init/qfai/spec/spec-0001-sample.md +0 -29
- package/dist/cli/commands/init.d.ts +0 -8
- package/dist/cli/commands/init.d.ts.map +0 -1
- package/dist/cli/commands/init.js +0 -30
- package/dist/cli/commands/init.js.map +0 -1
- package/dist/cli/commands/report.d.ts +0 -8
- package/dist/cli/commands/report.d.ts.map +0 -1
- package/dist/cli/commands/report.js +0 -83
- package/dist/cli/commands/report.js.map +0 -1
- package/dist/cli/commands/validate.d.ts +0 -10
- package/dist/cli/commands/validate.d.ts.map +0 -1
- package/dist/cli/commands/validate.js +0 -66
- package/dist/cli/commands/validate.js.map +0 -1
- package/dist/cli/index.d.ts.map +0 -1
- package/dist/cli/index.js +0 -7
- package/dist/cli/index.js.map +0 -1
- package/dist/cli/lib/args.d.ts +0 -19
- package/dist/cli/lib/args.d.ts.map +0 -1
- package/dist/cli/lib/args.js +0 -107
- package/dist/cli/lib/args.js.map +0 -1
- package/dist/cli/lib/assets.d.ts +0 -2
- package/dist/cli/lib/assets.d.ts.map +0 -1
- package/dist/cli/lib/assets.js +0 -8
- package/dist/cli/lib/assets.js.map +0 -1
- package/dist/cli/lib/failOn.d.ts +0 -5
- package/dist/cli/lib/failOn.d.ts.map +0 -1
- package/dist/cli/lib/failOn.js +0 -10
- package/dist/cli/lib/failOn.js.map +0 -1
- package/dist/cli/lib/fs.d.ts +0 -11
- package/dist/cli/lib/fs.d.ts.map +0 -1
- package/dist/cli/lib/fs.js +0 -91
- package/dist/cli/lib/fs.js.map +0 -1
- package/dist/cli/lib/logger.d.ts +0 -4
- package/dist/cli/lib/logger.d.ts.map +0 -1
- package/dist/cli/lib/logger.js +0 -10
- package/dist/cli/lib/logger.js.map +0 -1
- package/dist/cli/main.d.ts +0 -2
- package/dist/cli/main.d.ts.map +0 -1
- package/dist/cli/main.js +0 -73
- package/dist/cli/main.js.map +0 -1
- package/dist/core/config.d.ts +0 -46
- package/dist/core/config.d.ts.map +0 -1
- package/dist/core/config.js +0 -224
- package/dist/core/config.js.map +0 -1
- package/dist/core/discovery.d.ts +0 -11
- package/dist/core/discovery.d.ts.map +0 -1
- package/dist/core/discovery.js +0 -31
- package/dist/core/discovery.js.map +0 -1
- package/dist/core/fs.d.ts +0 -6
- package/dist/core/fs.d.ts.map +0 -1
- package/dist/core/fs.js +0 -55
- package/dist/core/fs.js.map +0 -1
- package/dist/core/ids.d.ts +0 -5
- package/dist/core/ids.d.ts.map +0 -1
- package/dist/core/ids.js +0 -49
- package/dist/core/ids.js.map +0 -1
- package/dist/core/index.d.ts +0 -11
- package/dist/core/index.d.ts.map +0 -1
- package/dist/core/index.js +0 -11
- package/dist/core/index.js.map +0 -1
- package/dist/core/report.d.ts +0 -41
- package/dist/core/report.d.ts.map +0 -1
- package/dist/core/report.js +0 -238
- package/dist/core/report.js.map +0 -1
- package/dist/core/types.d.ts +0 -27
- package/dist/core/types.d.ts.map +0 -1
- package/dist/core/types.js +0 -2
- package/dist/core/types.js.map +0 -1
- package/dist/core/validate.d.ts +0 -4
- package/dist/core/validate.d.ts.map +0 -1
- package/dist/core/validate.js +0 -32
- package/dist/core/validate.js.map +0 -1
- package/dist/core/validators/contracts.d.ts +0 -5
- package/dist/core/validators/contracts.d.ts.map +0 -1
- package/dist/core/validators/contracts.js +0 -157
- package/dist/core/validators/contracts.js.map +0 -1
- package/dist/core/validators/scenario.d.ts +0 -5
- package/dist/core/validators/scenario.d.ts.map +0 -1
- package/dist/core/validators/scenario.js +0 -82
- package/dist/core/validators/scenario.js.map +0 -1
- package/dist/core/validators/spec.d.ts +0 -5
- package/dist/core/validators/spec.d.ts.map +0 -1
- package/dist/core/validators/spec.js +0 -69
- package/dist/core/validators/spec.js.map +0 -1
- package/dist/core/validators/traceability.d.ts +0 -4
- package/dist/core/validators/traceability.d.ts.map +0 -1
- package/dist/core/validators/traceability.js +0 -148
- package/dist/core/validators/traceability.js.map +0 -1
- package/dist/core/version.d.ts +0 -2
- package/dist/core/version.d.ts.map +0 -1
- package/dist/core/version.js +0 -25
- package/dist/core/version.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -2
- package/dist/index.js.map +0 -1
- package/dist/tsconfig.tsbuildinfo +0 -1
package/README.md
CHANGED
|
@@ -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,59 @@
|
|
|
1
|
+
# Contracts (UI / API / DB)
|
|
2
|
+
|
|
3
|
+
契約は「システム外部との約束」を明文化する場所です。Scenario から参照される前提で作成します。
|
|
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: YAML 解析、`id` が `UI-` で始まる
|
|
48
|
+
- API: OpenAPI 定義があること
|
|
49
|
+
- DB: 危険 SQL(DROP/TRUNCATE 等)の警告
|
|
50
|
+
- 共通: ID 形式の検証
|
|
51
|
+
|
|
52
|
+
## 依存関係
|
|
53
|
+
|
|
54
|
+
- Scenario → Contracts(UI/API/DATA のいずれかへ接続)
|
|
55
|
+
|
|
56
|
+
## 良い例 / 悪い例
|
|
57
|
+
|
|
58
|
+
- 良い例: `@SC-xxxx` から `UI-xxxx` が参照されている
|
|
59
|
+
- 悪い例: 契約が Scenario から一切参照されない
|
|
@@ -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
|
-
- 対象:
|
|
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
|
-
- 対象:
|
|
7
|
+
- 対象: .qfai/spec/spec-0001-\*.md 形式のファイル(4 桁の数字 + ハイフン + slug。実際のパターン: `spec-\d{4}-[^/\\]+\.md`。存在するもの全て)
|
|
8
8
|
|
|
9
9
|
## Output
|
|
10
10
|
|
|
@@ -0,0 +1,77 @@
|
|
|
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
|
+
- `Given / When / Then` を含める
|
|
56
|
+
- UI/API/DATA 契約に接続する(トレーサビリティのエラー回避)
|
|
57
|
+
|
|
58
|
+
## CI でチェックされること(抜粋)
|
|
59
|
+
|
|
60
|
+
- Spec: 必須セクションの有無、SPEC/BR ID の存在、ID 形式
|
|
61
|
+
- Scenario: SC/SPEC/BR の参照、Given/When/Then の有無
|
|
62
|
+
- Traceability: BR→SC、SC→契約(UI/API/DATA)の接続
|
|
63
|
+
|
|
64
|
+
## 依存関係
|
|
65
|
+
|
|
66
|
+
- Spec → Scenario → Contracts
|
|
67
|
+
- Decisions(ADR)→ Spec / BR
|
|
68
|
+
|
|
69
|
+
## 良い例 / 悪い例
|
|
70
|
+
|
|
71
|
+
- 良い例: `BR-0001` が Scenario で参照され、UI/API/DATA のいずれかに接続している
|
|
72
|
+
- 悪い例: Spec に `SC-xxxx` を書く(Spec は SC を参照しない)
|
|
73
|
+
|
|
74
|
+
## 良い運用 / 悪い運用
|
|
75
|
+
|
|
76
|
+
- 良い運用: Spec/Scenario/Contracts を同じ ID でつなぐ
|
|
77
|
+
- 悪い運用: Spec の BR が Scenario に出てこない(孤立)
|
|
@@ -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 形式(`BR-xxxx` / `SPEC-xxxx` など)
|
|
26
|
+
- 参照 ID の整合性(トレーサビリティ)
|
|
27
|
+
|
|
28
|
+
## 依存関係
|
|
29
|
+
|
|
30
|
+
- ADR は Spec / BR と一緒に参照される
|
|
31
|
+
- Scenario/Contracts から参照されることは少ない
|
|
32
|
+
|
|
33
|
+
## 良い例 / 悪い例
|
|
34
|
+
|
|
35
|
+
- 良い例: Context/Decision/Consequences が簡潔に書かれている
|
|
36
|
+
- 悪い例: Decision が空のまま放置されている
|
|
@@ -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,12 @@
|
|
|
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
|
+
rulesDir: .qfai/rules
|
|
6
|
+
contractsDir: .qfai/contracts
|
|
7
|
+
uiContractsDir: .qfai/contracts/ui
|
|
8
|
+
apiContractsDir: .qfai/contracts/api
|
|
9
|
+
dataContractsDir: .qfai/contracts/db
|
|
10
10
|
srcDir: src
|
|
11
11
|
testsDir: tests
|
|
12
12
|
validation:
|
package/dist/cli/index.cjs
CHANGED
|
@@ -131,9 +131,9 @@ function error(message) {
|
|
|
131
131
|
async function runInit(options) {
|
|
132
132
|
const assetsRoot = getInitAssetsDir();
|
|
133
133
|
const rootAssets = import_node_path3.default.join(assetsRoot, "root");
|
|
134
|
-
const qfaiAssets = import_node_path3.default.join(assetsRoot, "qfai");
|
|
134
|
+
const qfaiAssets = import_node_path3.default.join(assetsRoot, ".qfai");
|
|
135
135
|
const destRoot = import_node_path3.default.resolve(options.dir);
|
|
136
|
-
const destQfai = import_node_path3.default.join(destRoot, "qfai");
|
|
136
|
+
const destQfai = import_node_path3.default.join(destRoot, ".qfai");
|
|
137
137
|
const rootResult = await copyTemplateTree(rootAssets, destRoot, {
|
|
138
138
|
force: options.force,
|
|
139
139
|
dryRun: options.dryRun
|
|
@@ -169,14 +169,14 @@ var import_node_path4 = __toESM(require("path"), 1);
|
|
|
169
169
|
var import_yaml = require("yaml");
|
|
170
170
|
var defaultConfig = {
|
|
171
171
|
paths: {
|
|
172
|
-
specDir: "qfai/spec",
|
|
173
|
-
decisionsDir: "qfai/spec/decisions",
|
|
174
|
-
scenariosDir: "qfai/spec",
|
|
175
|
-
rulesDir: "qfai/rules",
|
|
176
|
-
contractsDir: "qfai/contracts",
|
|
177
|
-
uiContractsDir: "qfai/contracts/ui",
|
|
178
|
-
apiContractsDir: "qfai/contracts/api",
|
|
179
|
-
dataContractsDir: "qfai/contracts/db",
|
|
172
|
+
specDir: ".qfai/spec",
|
|
173
|
+
decisionsDir: ".qfai/spec/decisions",
|
|
174
|
+
scenariosDir: ".qfai/spec/scenarios",
|
|
175
|
+
rulesDir: ".qfai/rules",
|
|
176
|
+
contractsDir: ".qfai/contracts",
|
|
177
|
+
uiContractsDir: ".qfai/contracts/ui",
|
|
178
|
+
apiContractsDir: ".qfai/contracts/api",
|
|
179
|
+
dataContractsDir: ".qfai/contracts/db",
|
|
180
180
|
srcDir: "src",
|
|
181
181
|
testsDir: "tests"
|
|
182
182
|
},
|
|
@@ -582,8 +582,7 @@ async function exists2(target) {
|
|
|
582
582
|
}
|
|
583
583
|
|
|
584
584
|
// src/core/discovery.ts
|
|
585
|
-
var
|
|
586
|
-
var SPEC_NAMED_PATTERN = /^spec-\d{4}-[^/\\]+\.md$/i;
|
|
585
|
+
var SPEC_NAMED_PATTERN = /^spec-\d{4}-[^/\\]+\.md$/;
|
|
587
586
|
async function collectSpecFiles(specRoot) {
|
|
588
587
|
const files = await collectFiles(specRoot, { extensions: [".md"] });
|
|
589
588
|
return files.filter((file) => isSpecFile(file));
|
|
@@ -607,7 +606,7 @@ async function collectContractFiles(uiRoot, apiRoot, dataRoot) {
|
|
|
607
606
|
}
|
|
608
607
|
function isSpecFile(filePath) {
|
|
609
608
|
const name = import_node_path6.default.basename(filePath).toLowerCase();
|
|
610
|
-
return
|
|
609
|
+
return SPEC_NAMED_PATTERN.test(name);
|
|
611
610
|
}
|
|
612
611
|
|
|
613
612
|
// src/core/ids.ts
|
|
@@ -668,8 +667,8 @@ var import_promises4 = require("fs/promises");
|
|
|
668
667
|
var import_node_path7 = __toESM(require("path"), 1);
|
|
669
668
|
var import_node_url2 = require("url");
|
|
670
669
|
async function resolveToolVersion() {
|
|
671
|
-
if ("0.2.
|
|
672
|
-
return "0.2.
|
|
670
|
+
if ("0.2.6".length > 0) {
|
|
671
|
+
return "0.2.6";
|
|
673
672
|
}
|
|
674
673
|
try {
|
|
675
674
|
const packagePath = resolvePackageJsonPath();
|
|
@@ -1068,10 +1067,11 @@ async function validateSpecs(root, config) {
|
|
|
1068
1067
|
const specsRoot = resolvePath(root, config, "specDir");
|
|
1069
1068
|
const files = await collectSpecFiles(specsRoot);
|
|
1070
1069
|
if (files.length === 0) {
|
|
1070
|
+
const expected = "spec-0001-<slug>.md";
|
|
1071
1071
|
return [
|
|
1072
1072
|
issue3(
|
|
1073
1073
|
"QFAI-SPEC-000",
|
|
1074
|
-
|
|
1074
|
+
`Spec \u30D5\u30A1\u30A4\u30EB\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093\u3002\u914D\u7F6E\u5834\u6240: ${config.paths.specDir} / \u671F\u5F85\u30D1\u30BF\u30FC\u30F3: ${expected}`,
|
|
1075
1075
|
"info",
|
|
1076
1076
|
specsRoot,
|
|
1077
1077
|
"spec.files"
|