qfai 0.3.2 → 0.3.3
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 +7 -1
- package/assets/init/.qfai/README.md +2 -0
- package/assets/init/.qfai/prompts/README.md +6 -0
- package/assets/init/.qfai/prompts/require-to-spec.md +39 -0
- package/assets/init/.qfai/rules/pnpm.md +29 -0
- package/assets/init/root/require/README.md +28 -0
- package/dist/cli/index.cjs +20 -3
- package/dist/cli/index.cjs.map +1 -1
- package/dist/cli/index.mjs +20 -3
- package/dist/cli/index.mjs.map +1 -1
- package/dist/index.cjs +2 -2
- package/dist/index.mjs +2 -2
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# QFAI Toolkit (v0.3.
|
|
1
|
+
# QFAI Toolkit (v0.3.3)
|
|
2
2
|
|
|
3
3
|
Single-package distribution for QFAI.
|
|
4
4
|
|
|
@@ -16,6 +16,12 @@ npx qfai validate --fail-on error --format github
|
|
|
16
16
|
npx qfai report
|
|
17
17
|
```
|
|
18
18
|
|
|
19
|
+
## できること
|
|
20
|
+
|
|
21
|
+
- `npx qfai init` によるテンプレート生成(specs/contracts に加え、`require/README.md`、`.qfai/rules/pnpm.md`、`.qfai/prompts/require-to-spec.md` を含む)
|
|
22
|
+
- `npx qfai validate` による `.qfai/` 内ドキュメントの整合性・トレーサビリティ検査
|
|
23
|
+
- `npx qfai report` によるレポート出力
|
|
24
|
+
|
|
19
25
|
## Usage
|
|
20
26
|
|
|
21
27
|
`validate` は `--fail-on` / `--strict` によって CI ゲート化できます。`validate` は常に `.qfai/out/validate.json`(`output.validateJsonPath`)へ JSON を出力し、`--format` は表示形式(text/github)のみを制御します。
|
|
@@ -7,6 +7,12 @@
|
|
|
7
7
|
- Spec から overview / Business Flow を生成するための素材
|
|
8
8
|
- 将来(v0.9)の adapter/emit 実装に備えた配布物
|
|
9
9
|
|
|
10
|
+
## プロンプト一覧
|
|
11
|
+
|
|
12
|
+
- `makeOverview.md`: Spec 一覧(overview)生成
|
|
13
|
+
- `makeBusinessFlow.md`: 業務フロー(BF)整理
|
|
14
|
+
- `require-to-spec.md`: 既存要件から Spec Pack を起こす
|
|
15
|
+
|
|
10
16
|
## 使い方(例)
|
|
11
17
|
|
|
12
18
|
1. 目的のプロンプトを開く(例: `makeOverview.md`)
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# require-to-spec
|
|
2
|
+
|
|
3
|
+
あなたは仕様書作成アシスタントです。`require/` 配下の既存要件を読み取り、QFAI の Spec Pack を作成してください。
|
|
4
|
+
|
|
5
|
+
## Inputs
|
|
6
|
+
|
|
7
|
+
- `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.md`
|
|
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/DATA)。
|
|
23
|
+
- `spec.md` の必須セクションは `qfai.config.yaml` の設定に従う。
|
|
24
|
+
- BR は `## 業務ルール` にのみ定義し、`- [BR-0001][P1] ...` 形式で書く。
|
|
25
|
+
- `scenario.md` は Gherkin で書き、Feature に `@SPEC-xxxx` を付与する。
|
|
26
|
+
- 各 Scenario は `@SC-xxxx` を **ちょうど1つ**、`@BR-xxxx` を **1つ以上**持つこと。
|
|
27
|
+
- 契約 ID(UI/API/DATA)が必要なら、タグまたは本文に明示する。
|
|
28
|
+
- `delta.md` の「変更区分」は **Compatibility / Change/Improvement のいずれか1つにチェック**する。
|
|
29
|
+
- 判断できない場合は `Compatibility` を選び、`TBD` を理由欄に記載する。
|
|
30
|
+
|
|
31
|
+
## Output Format
|
|
32
|
+
|
|
33
|
+
- すべて Markdown
|
|
34
|
+
- 余計な説明文は出力しない(ファイル内容のみ)
|
|
35
|
+
|
|
36
|
+
## 参照ルール(重要)
|
|
37
|
+
|
|
38
|
+
- `.qfai/specs` や `contracts` は **require を参照してよい**。
|
|
39
|
+
- `require/` 側から `.qfai/specs` や `contracts` を参照するのは **禁止**。
|
|
@@ -0,0 +1,29 @@
|
|
|
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 の判断は各プロジェクトのセキュリティ方針に従ってください。
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# require/
|
|
2
|
+
|
|
3
|
+
既存の要件定義書や外部資料を集約するためのディレクトリです。
|
|
4
|
+
QFAI は `require/` を **入力(上流)** として扱い、ここに置かれた内容を根拠に Spec を作成します。
|
|
5
|
+
|
|
6
|
+
## 置き方(例)
|
|
7
|
+
|
|
8
|
+
- `require/req-0001-<slug>.md`
|
|
9
|
+
- `require/links.md`(外部ドキュメントへのリンク集)
|
|
10
|
+
- `require/raw/`(PDFや画像などの原本)
|
|
11
|
+
|
|
12
|
+
> 形式は限定しません。内容が参照可能であることを優先してください。
|
|
13
|
+
|
|
14
|
+
## 参照ルール(重要)
|
|
15
|
+
|
|
16
|
+
- `require/` は **上流のSSOT** です。
|
|
17
|
+
- `.qfai/specs` や `contracts` は **require を参照してよい**。
|
|
18
|
+
- `require/` 側から `.qfai/specs` や `contracts` を参照するのは **禁止**(循環参照防止)。
|
|
19
|
+
|
|
20
|
+
## AI プロンプトの利用
|
|
21
|
+
|
|
22
|
+
- `.qfai/prompts/require-to-spec.md` を使用し、要件から Spec を作成します。
|
|
23
|
+
- 生成後は必ず人間がレビューし、Spec/Scenario/Contracts の整合を確認してください。
|
|
24
|
+
|
|
25
|
+
## 注意
|
|
26
|
+
|
|
27
|
+
- `require/` の内容は QFAI の validate 対象外です。
|
|
28
|
+
- 機密情報の取り扱いは各プロジェクトのルールに従ってください。
|
package/dist/cli/index.cjs
CHANGED
|
@@ -109,12 +109,29 @@ async function exists(target) {
|
|
|
109
109
|
}
|
|
110
110
|
|
|
111
111
|
// src/cli/lib/assets.ts
|
|
112
|
+
var import_node_fs = require("fs");
|
|
112
113
|
var import_node_path2 = __toESM(require("path"), 1);
|
|
113
114
|
var import_node_url = require("url");
|
|
114
115
|
function getInitAssetsDir() {
|
|
115
116
|
const base = __filename;
|
|
116
117
|
const basePath = base.startsWith("file:") ? (0, import_node_url.fileURLToPath)(base) : base;
|
|
117
|
-
|
|
118
|
+
const baseDir = import_node_path2.default.dirname(basePath);
|
|
119
|
+
const candidates = [
|
|
120
|
+
import_node_path2.default.resolve(baseDir, "../../../assets/init"),
|
|
121
|
+
import_node_path2.default.resolve(baseDir, "../../assets/init")
|
|
122
|
+
];
|
|
123
|
+
for (const candidate of candidates) {
|
|
124
|
+
if ((0, import_node_fs.existsSync)(candidate)) {
|
|
125
|
+
return candidate;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
throw new Error(
|
|
129
|
+
[
|
|
130
|
+
"init \u7528\u30C6\u30F3\u30D7\u30EC\u30FC\u30C8\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093\u3002Template assets not found.",
|
|
131
|
+
"\u78BA\u8A8D\u3057\u305F\u30D1\u30B9 / Checked paths:",
|
|
132
|
+
...candidates.map((candidate) => `- ${candidate}`)
|
|
133
|
+
].join("\n")
|
|
134
|
+
);
|
|
118
135
|
}
|
|
119
136
|
|
|
120
137
|
// src/cli/lib/logger.ts
|
|
@@ -699,8 +716,8 @@ var import_promises6 = require("fs/promises");
|
|
|
699
716
|
var import_node_path7 = __toESM(require("path"), 1);
|
|
700
717
|
var import_node_url2 = require("url");
|
|
701
718
|
async function resolveToolVersion() {
|
|
702
|
-
if ("0.3.
|
|
703
|
-
return "0.3.
|
|
719
|
+
if ("0.3.3".length > 0) {
|
|
720
|
+
return "0.3.3";
|
|
704
721
|
}
|
|
705
722
|
try {
|
|
706
723
|
const packagePath = resolvePackageJsonPath();
|