qfai 0.6.2 → 0.6.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 CHANGED
@@ -1,16 +1,46 @@
1
1
  # QFAI Toolkit
2
2
 
3
- Single-package distribution for QFAI.
3
+ [![npm version](https://img.shields.io/npm/v/qfai.svg?style=flat)](https://www.npmjs.com/package/qfai)
4
+ [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/licenses/MIT)
5
+ [![Node.js](https://img.shields.io/badge/Node.js->=18-brightgreen.svg)](https://nodejs.org/)
6
+
7
+ 品質重視型AI駆動運用モデル(SDD × ATDD × TDD)を単一パッケージで提供するツールキットです。
8
+
9
+ ## 目次
10
+
11
+ - [インストール](#インストール)
12
+ - [Quick Start](#quick-start最短成功)
13
+ - [機能](#できること)
14
+ - [CLI リファレンス](#使い方cli)
15
+ - [設定](#設定)
16
+ - [契約](#契約contracts)
17
+ - [Monorepo 対応](#monorepo--サブディレクトリ)
18
+ - [CI 統合](#ci-と-hard-gate)
19
+ - [GitHub Actions](#github-actions-テンプレート)
20
+ - [開発](#開発)
21
+ - [ライセンス](#ライセンス)
22
+
23
+ ## インストール
24
+
25
+ ```sh
26
+ npm install qfai
27
+ ```
4
28
 
5
- ## Install
29
+ または
6
30
 
7
- ```
8
- npm i -D qfai
31
+ ```sh
32
+ npx qfai init
9
33
  ```
10
34
 
11
- ## Quick Start
35
+ **必要環境**: Node.js >= 18
12
36
 
13
- ```
37
+ ## パッケージ
38
+
39
+ - `qfai`: CLI + コア + テンプレートを同梱
40
+
41
+ ## Quick Start(最短成功)
42
+
43
+ ```sh
14
44
  npx qfai init
15
45
  npx qfai validate --fail-on error --format github
16
46
  npx qfai report
@@ -24,33 +54,76 @@ npx qfai report
24
54
  - `npx qfai doctor` による設定/探索/パス/glob/validate.json の事前診断
25
55
  - `npx qfai report` によるレポート出力
26
56
 
27
- ## Usage
57
+ 補足: v0.x は日本語テンプレ中心で提供します。将来は英語を正本、日本語を別ドキュメントに切り替える方針です。
58
+
59
+ ## 使い方(CLI)
60
+
61
+ `validate` は `--fail-on` / `--strict` によって CI ゲート化できます。`validate` は常に `.qfai/out/validate.json`(`output.validateJsonPath`)へ JSON を出力します。`--format` は画面表示(text/github)のみを制御します。`--format github` はアノテーションの上限と重複排除を行い、先頭にサマリを出します(全量は `validate.json` か `--format text` を参照)。
62
+ `report` は `.qfai/out/validate.json` を既定入力とし、`--in` で上書きできます(優先順位: CLI > config)。`--run-validate` を指定すると validate を実行してから report を生成します。出力先は `--out` で変更できます(`--format json` の場合は `.qfai/out/report.json`)。
63
+ `doctor` は validate/report の前段で設定/探索/パス/glob/validate.json を診断します。`--format text|json`、`--out` をサポートし、診断のみ(修復はしません)。`--fail-on warning|error` を指定すると該当 severity 以上で exit 1(未指定は常に exit 0)になります。
64
+ `report.json` は非契約(experimental / internal)として扱います。外部 consumer は依存しないでください。フィールドは例であり固定ではありません。短い例:
65
+
66
+ ```json
67
+ {
68
+ "tool": "qfai",
69
+ "summary": {
70
+ "specs": 1,
71
+ "scenarios": 1,
72
+ "contracts": { "api": 0, "ui": 1, "db": 0 },
73
+ "counts": { "info": 0, "warning": 0, "error": 0 }
74
+ }
75
+ }
76
+ ```
77
+
78
+ doctor(text)の例:
79
+
80
+ ```text
81
+ qfai doctor: root=. config=qfai.config.yaml (found)
82
+ [ok] config.search: qfai.config.yaml found
83
+ summary: ok=10 warning=2 error=0
84
+ ```
85
+
86
+ doctor の JSON も非契約(内部形式。将来予告なく変更あり)です。フィールドは例であり固定ではありません。短い例:
87
+
88
+ ```json
89
+ {
90
+ "tool": "qfai",
91
+ "checks": [
92
+ {
93
+ "id": "config.search",
94
+ "severity": "ok",
95
+ "message": "qfai.config.yaml found"
96
+ }
97
+ ]
98
+ }
99
+ ```
28
100
 
29
- `validate` は `--fail-on` / `--strict` によって CI ゲート化できます。`validate` は常に `.qfai/out/validate.json`(`output.validateJsonPath`)へ JSON を出力し、`--format` は表示形式(text/github)のみを制御します。
30
- `report` は `.qfai/out/validate.json` を読み、既定で `.qfai/out/report.md` を出力します(`--format json` の場合は `.qfai/out/report.json`)。出力先は `--out` で変更できます。入力パスは固定です。
31
- `doctor` は validate/report の前段で設定/探索/パス/glob/validate.json を診断します。`--format text|json`、`--out` をサポートします。`--fail-on warning|error` を指定すると該当 severity 以上で exit 1(未指定は常に exit 0)になります。
32
101
  `init --yes` は予約フラグです(現行の init は非対話のため挙動差はありません)。既存ファイルがある場合は `--force` が必要です。
33
- `report.json` / doctor JSON は experimental(互換保証なし)として扱います。フィールドは例であり固定ではありません。
102
+
103
+ ## 設定
34
104
 
35
105
  設定はリポジトリ直下の `qfai.config.yaml` で行います。
36
106
  命名規約は `docs/rules/naming.md` を参照してください。
37
107
 
38
- ## Contracts
108
+ ## 契約(Contracts
39
109
 
40
- Spec では `QFAI-CONTRACT-REF:` 行で参照する契約IDを宣言します(`none` 可、宣言行は必須)。
41
- Scenario では `# QFAI-CONTRACT-REF:` のコメント行で契約参照を宣言します(`none` 可、宣言行は必須)。
110
+ Spec では `QFAI-CONTRACT-REF:` 行で参照する契約IDを宣言します(`none` 可)。Spec の先頭 H1 に `SPEC-xxxx` が必須です。
111
+ Scenario では `# QFAI-CONTRACT-REF:` のコメント行で契約参照を宣言します(`none` 可)。
42
112
  契約ファイルは `QFAI-CONTRACT-ID: <ID>` を **1ファイル1ID** で宣言します。
43
- Contract ID prefix は `UI-0001` / `API-0001` / `DB-0001` です。
44
- 宣言では大文字(`UI-0001`)、ファイル名は小文字(`ui-0001-...`)を使用します。
113
+ `validate.json` / `report` file path は root 相対で出力します(absolute は出力しません)。
45
114
 
46
- 契約関連の検証は `validation.traceability` で制御します。
115
+ ## Monorepo / サブディレクトリ
47
116
 
48
- - `validation.traceability.orphanContractsPolicy`: Spec から参照されない契約の扱い(default: `error`、`error` / `warning` / `allow`)
49
- - `validation.traceability.unknownContractIdSeverity`: Scenario が参照した契約 ID が存在しない場合の severity(default: `error`、`error` / `warning` のみ)
50
- - Spec の `QFAI-CONTRACT-REF` が未知 ID を参照した場合は常に error(`QFAI-TRACE-024`)
51
- - `unknownContractIdSeverity` は Scenario 側(`QFAI-TRACE-008`)のみを制御
117
+ - `--root` 未指定時は cwd から親へ `qfai.config.yaml` を探索します(見つからない場合は defaultConfig + warning)。
118
+ - monorepo ではパッケージ単位に `qfai.config.yaml` を置くか、`--root` で明示します。
119
+ - `paths.outDir` はパッケージごとに分け、`out/` の衝突を避けてください。
52
120
 
53
- `npx qfai init` は `.qfai/contracts/` 配下に UI/API/DB のサンプルを生成します。
121
+ 例(pnpm workspace):
122
+
123
+ ```text
124
+ packages/<app-a>/qfai.config.yaml # paths.outDir: .qfai/out/<app-a>
125
+ packages/<app-b>/qfai.config.yaml # paths.outDir: .qfai/out/<app-b>
126
+ ```
54
127
 
55
128
  ## CI と Hard Gate
56
129
 
@@ -68,3 +141,114 @@ SC→Test 検証は `validation.traceability.scMustHaveTest` と
68
141
  - `validation.traceability.testFileExcludeGlobs`: 追加の除外 glob(配列、任意)
69
142
  - `validation.traceability.scMustHaveTest`: SC→Test 検証の有効/無効を制御(`true` で有効、`false` で無効)
70
143
  - `validation.traceability.scNoTestSeverity`: SC 未参照時の重要度を指定(`error` / `warning`)
144
+
145
+ ## GitHub Actions テンプレート
146
+
147
+ `npx qfai init` で `.github/workflows/qfai.yml` を生成します。テンプレートは `validate` ジョブで `.qfai/out/validate.json` を生成し、`qfai-validation` として artifact をアップロードします。`report` はテンプレートには含まれないため、必要なら別ジョブまたはローカルで `qfai report` を実行してください。
148
+
149
+ テンプレートは npm 前提です。pnpm を使う場合は `cache` と install コマンドを置き換えてください。
150
+ 各 Actions のバージョンは運用方針に合わせて指定してください。
151
+
152
+ 追加で `report` を回す場合の最小例:
153
+
154
+ ```yaml
155
+ jobs:
156
+ report:
157
+ needs: validate
158
+ runs-on: ubuntu-latest
159
+ steps:
160
+ - uses: actions/checkout@v4
161
+ - uses: actions/setup-node@v4
162
+ with:
163
+ node-version: lts/*
164
+ cache: npm
165
+ - run: npm ci
166
+ - uses: actions/download-artifact@v4
167
+ with:
168
+ name: qfai-validation
169
+ path: .qfai/out
170
+ - run: npx qfai report --out .qfai/out/report.md
171
+ - uses: actions/upload-artifact@v4
172
+ with:
173
+ name: qfai-report
174
+ path: .qfai/out/report.md
175
+ ```
176
+
177
+ validate.json のスキーマと例は `docs/schema` / `docs/examples` を参照してください。
178
+ PromptPack は非契約(互換保証なし)です。編集する場合はラップ運用を推奨します。
179
+
180
+ ## 生成される構成(例)
181
+
182
+ ```
183
+ qfai.config.yaml
184
+ .qfai/
185
+ README.md
186
+ require/
187
+ README.md
188
+ specs/
189
+ README.md
190
+ spec-0001/
191
+ spec.md
192
+ delta.md
193
+ scenario.md
194
+ rules/
195
+ conventions.md
196
+ pnpm.md
197
+ promptpack/
198
+ constitution.md
199
+ steering/
200
+ compatibility-vs-change.md
201
+ traceability.md
202
+ naming.md
203
+ commands/
204
+ plan.md
205
+ implement.md
206
+ review.md
207
+ release.md
208
+ roles/
209
+ qa.md
210
+ spec.md
211
+ test.md
212
+ modes/
213
+ compatibility.md
214
+ change.md
215
+ prompts/
216
+ README.md
217
+ makeOverview.md
218
+ makeBusinessFlow.md
219
+ require-to-spec.md
220
+ qfai-generate-test-globs.md
221
+ qfai-maintain-traceability.md
222
+ qfai-maintain-contracts.md
223
+ qfai-classify-change.md
224
+ contracts/
225
+ README.md
226
+ api/
227
+ api-0001-sample.yaml
228
+ ui/
229
+ ui-0001-sample.yaml
230
+ db/
231
+ db-0001-sample.sql
232
+ out/
233
+ README.md
234
+ tests/
235
+ qfai-traceability.sample.test.ts
236
+ .github/
237
+ workflows/
238
+ qfai.yml
239
+ ```
240
+
241
+ ## 開発
242
+
243
+ ```sh
244
+ pnpm install
245
+ pnpm build
246
+ pnpm format:check
247
+ pnpm lint
248
+ pnpm check-types
249
+ pnpm test:assets
250
+ ```
251
+
252
+ ## ライセンス
253
+
254
+ [MIT](https://github.com/aganesy/QFAI/blob/main/LICENSE)
@@ -889,8 +889,8 @@ var import_promises6 = require("fs/promises");
889
889
  var import_node_path6 = __toESM(require("path"), 1);
890
890
  var import_node_url = require("url");
891
891
  async function resolveToolVersion() {
892
- if ("0.6.2".length > 0) {
893
- return "0.6.2";
892
+ if ("0.6.3".length > 0) {
893
+ return "0.6.3";
894
894
  }
895
895
  try {
896
896
  const packagePath = resolvePackageJsonPath();
@@ -870,8 +870,8 @@ import { readFile as readFile3 } from "fs/promises";
870
870
  import path6 from "path";
871
871
  import { fileURLToPath } from "url";
872
872
  async function resolveToolVersion() {
873
- if ("0.6.2".length > 0) {
874
- return "0.6.2";
873
+ if ("0.6.3".length > 0) {
874
+ return "0.6.3";
875
875
  }
876
876
  try {
877
877
  const packagePath = resolvePackageJsonPath();
package/dist/index.cjs CHANGED
@@ -1232,8 +1232,8 @@ var import_promises7 = require("fs/promises");
1232
1232
  var import_node_path7 = __toESM(require("path"), 1);
1233
1233
  var import_node_url = require("url");
1234
1234
  async function resolveToolVersion() {
1235
- if ("0.6.2".length > 0) {
1236
- return "0.6.2";
1235
+ if ("0.6.3".length > 0) {
1236
+ return "0.6.3";
1237
1237
  }
1238
1238
  try {
1239
1239
  const packagePath = resolvePackageJsonPath();
package/dist/index.mjs CHANGED
@@ -1179,8 +1179,8 @@ import { readFile as readFile4 } from "fs/promises";
1179
1179
  import path7 from "path";
1180
1180
  import { fileURLToPath } from "url";
1181
1181
  async function resolveToolVersion() {
1182
- if ("0.6.2".length > 0) {
1183
- return "0.6.2";
1182
+ if ("0.6.3".length > 0) {
1183
+ return "0.6.3";
1184
1184
  }
1185
1185
  try {
1186
1186
  const packagePath = resolvePackageJsonPath();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "qfai",
3
- "version": "0.6.2",
3
+ "version": "0.6.3",
4
4
  "type": "module",
5
5
  "bin": {
6
6
  "qfai": "./dist/cli/index.mjs"