spec-runner 1.0.10 → 1.0.12

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "spec-runner",
3
- "version": "1.0.10",
3
+ "version": "1.0.12",
4
4
  "description": "フェーズ駆動で設計先行を強制。npx で .spec-runner を展開し、次のステップ .md に従って進める",
5
5
  "license": "MIT",
6
6
  "bin": {
@@ -297,6 +297,13 @@ schema_drift_check() {
297
297
 
298
298
  run_health_check() {
299
299
  local drifts=()
300
+ local current_phase=0
301
+
302
+ # フェーズに応じてチェック強度を段階適用する
303
+ if [[ -x ".spec-runner/scripts/spec-runner-core.sh" ]] && command -v jq >/dev/null 2>&1; then
304
+ current_phase="$(.spec-runner/scripts/spec-runner-core.sh --json 2>/dev/null | jq -r '.phase // 0' 2>/dev/null)"
305
+ [[ -n "$current_phase" && "$current_phase" != "null" ]] || current_phase=0
306
+ fi
300
307
 
301
308
  UC_ROOT="$(get_steps_common_doc "uc_root")"
302
309
  DOMAIN_ROOT="$(get_steps_common_doc "domain_root")"
@@ -317,16 +324,20 @@ run_health_check() {
317
324
  grep -qE '^## タスク一覧|^## タスク\\b' "$f" 2>/dev/null || drifts+=("UC ${base}: 「## タスク」または「## タスク一覧」の見出しがありません(UC 仕様書の一番下に記載すること)")
318
325
  done
319
326
 
320
- adr_count=$(find "$ARCH_ROOT/設計判断記録" -name "*.md" 2>/dev/null | wc -l)
321
- [[ "${adr_count:-0}" -lt 1 ]] && drifts+=("ADR が 1 件もありません(設計判断記録)")
322
-
323
- if [[ ! -f "$DOMAIN_ROOT/ユビキタス言語辞書.md" ]]; then
324
- drifts+=("ユビキタス言語辞書.md が存在しません")
325
- else
326
- grep -qE '禁止語|forbidden' "$DOMAIN_ROOT/ユビキタス言語辞書.md" 2>/dev/null || drifts+=("ユビキタス言語辞書に禁止語欄が定義されていません")
327
+ if [[ "$current_phase" -ge 3 ]]; then
328
+ adr_count=$(find "$ARCH_ROOT/設計判断記録" -name "*.md" 2>/dev/null | wc -l)
329
+ [[ "${adr_count:-0}" -lt 1 ]] && drifts+=("ADR が 1 件もありません(設計判断記録)")
327
330
  fi
328
- if [[ -f "$DOMAIN_ROOT/集約.md" ]]; then
329
- grep -q '対応テーブル' "$DOMAIN_ROOT/集約.md" 2>/dev/null || drifts+=("集約.md に「対応テーブル」欄がありません")
331
+
332
+ if [[ "$current_phase" -ge 2 ]]; then
333
+ if [[ ! -f "$DOMAIN_ROOT/ユビキタス言語辞書.md" ]]; then
334
+ drifts+=("ユビキタス言語辞書.md が存在しません")
335
+ else
336
+ grep -qE '禁止語|forbidden' "$DOMAIN_ROOT/ユビキタス言語辞書.md" 2>/dev/null || drifts+=("ユビキタス言語辞書に禁止語欄が定義されていません")
337
+ fi
338
+ if [[ -f "$DOMAIN_ROOT/集約.md" ]]; then
339
+ grep -q '対応テーブル' "$DOMAIN_ROOT/集約.md" 2>/dev/null || drifts+=("集約.md に「対応テーブル」欄がありません")
340
+ fi
330
341
  fi
331
342
 
332
343
  if [[ ! -f ".spec-runner/grade-history.json" ]]; then
@@ -334,13 +345,15 @@ run_health_check() {
334
345
  elif command -v jq >/dev/null 2>&1; then
335
346
  grade=$(jq -r '.current_grade' .spec-runner/grade-history.json)
336
347
  [[ -n "$grade" && "$grade" != "null" ]] || drifts+=("grade-history.json の current_grade が未設定です")
337
- if [[ "$grade" == "A" ]]; then
348
+ if [[ "$grade" == "A" && "$current_phase" -ge 4 ]]; then
338
349
  [[ ! -f "$INFRA_ROOT/schema.dbml" ]] && drifts+=("Grade A 必須: schema.dbml が存在しません")
339
350
  schema_sync_check >/dev/null 2>&1 || drifts+=("Prisma と schema.dbml のテーブルが一致していません(スキーマ同期チェック)")
340
351
  fi
341
352
  fi
342
353
 
343
- [[ ! -f "$OPENAPI_PATH" ]] && drifts+=("openapi.yaml が存在しません")
354
+ if [[ "$current_phase" -ge 3 ]]; then
355
+ [[ ! -f "$OPENAPI_PATH" ]] && drifts+=("openapi.yaml が存在しません")
356
+ fi
344
357
 
345
358
  if [[ ${#drifts[@]} -eq 0 ]]; then
346
359
  ok "健全性確認: 問題なし"
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  step_id: checklist
3
- phase: quality
3
+ phase: null
4
4
  ---
5
5
 
6
6
  # チェックリスト(品質フロー)
@@ -6,13 +6,13 @@ primary_output: docs/02_ユースケース仕様/<カテゴリ>/UC-N-xxx.md
6
6
 
7
7
  # ユースケース仕様(UC 仕様書)
8
8
 
9
- **やること**: 機能説明(`$ARGUMENTS`)から UC ブランチと UC 仕様書を作成し、テンプレに沿って埋める。その後 clarify → analyze / checklist review-pass
9
+ **やること**: 機能説明(`$ARGUMENTS`)から UC ブランチと UC 仕様書を作成し、テンプレに沿って埋める。その後 quality フロー(clarify → analyze)を回し、必要に応じて checklist を実施して review-pass へ進む。
10
10
 
11
11
  | 項目 | 内容 |
12
12
  |------|------|
13
13
  | **成果物** | `docs/02_ユースケース仕様/<カテゴリ>/UC-N-xxx.md`(1 UC = 1 本) |
14
14
  | **main** | **必ず UC 用ブランチを作成してから**仕様を書く。main で直接編集しない |
15
- | **品質フロー** | clarify → analyze / checklist review-pass |
15
+ | **品質フロー** | `phase-locks.json` の `quality` を使って **clarify → analyze** を自動進行。必要なら checklist を追加で実施 |
16
16
  | **判断ログ(任意)** | `docs/02_.../<カテゴリ>/判断記録/UC-N-MMDD-題名.md`。テンプレ: `.spec-runner/templates/UC-N-MMDD-判断記録テンプレ.md` |
17
17
 
18
18
  ## ユーザー入力
@@ -54,13 +54,17 @@ $ARGUMENTS
54
54
 
55
55
  5. **回答ごとの反映(増分)**
56
56
  - メモリとファイル内容を保持
57
- - 初回反映時: `## 解消事項` が無ければ概要直後に作成。`### Session YYYY-MM-DD` を今日で作成
58
- - 採用直後: `- Q: <質問> → A: <回答>` を追記
59
- - 内容を適切セクションへ(機能→機能要件、操作→ストーリー/アクター、データ→データモデル、非機能→測定可能な基準、エッジ→エッジケース、用語→統一・旧表記は一度だけ (旧: "X"))
60
- - 古い曖昧記述は置換し矛盾を残さない。**各反映の直後にファイル保存**。見出し階層維持。新規見出しは **`## 解消事項`**, **`### Session YYYY-MM-DD`** のみ可
57
+ - **本文更新を必須**: 採用回答を必ず該当セクションへ反映(機能→機能要件、操作→ストーリー/アクター、データ→データモデル、非機能→測定可能な基準、エッジ→エッジケース、用語→統一・旧表記は一度だけ (旧: "X"))
58
+ - `## 解消事項` は任意。必要な場合のみ最小限を残す(本文の代替にしない)
59
+ - 記録する場合は次の改行形式:
60
+ ```markdown
61
+ - Q: <質問>
62
+ A: <回答>
63
+ ```
64
+ - 古い曖昧記述は置換し矛盾を残さない。**各反映の直後にファイル保存**。見出し階層維持。新規見出しは **`## 解消事項`** のみ可
61
65
 
62
66
  6. **検証(各書き込み後・最終)**
63
- - 解消セッションは採用回答ごと 1 箇条(重複なし)
67
+ - 本文に解消済み内容が反映され、本文だけ読めば仕様が確定している
64
68
  - 質問数(採用分)≤ 5
65
69
  - 更新セクションに解消済みの曖昧プレースホルダが残っていない
66
70
  - 矛盾なし、Markdown 有効、用語一貫
@@ -77,7 +81,8 @@ $ARGUMENTS
77
81
  - 仕様ファイルがない: 対象仕様(憲章 / UC / ドメイン / アーキ)の作成を案内(ここでは新規作成しない)
78
82
  - `[要確認: ...]` が残っている項目を優先して質問対象にする
79
83
  - `[要確認: ...]` が無くても、文脈から曖昧・未決定な表現を検出して質問対象に含める
80
- - 完了時に `.spec-runner/phase-locks.json` の `quality.clarified.<scope>` に対象ドキュメントのベース名を追加する(scope: `charter` / `domain` / `architecture` / `uc`)
84
+ - 実行状態は `.spec-runner/phase-locks.json` の `quality.clarified.<scope>` で管理し、本文に余計な状態メタ情報は残さない
85
+ - `## 解消事項` を残す場合も最小限にし、判断の正本は常に本文とする
81
86
  - 質問は合計 5 を超えない(聞き直しは新規に数えない)
82
87
  - 機能の明確さを妨げない限り技術スタックの推測質問は避ける
83
88
  - 「ストップ」「完了」「進めて」等を尊重