spec-runner 1.0.22 → 1.0.24
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
|
@@ -18,6 +18,11 @@ REPO_ROOT="${REPO_ROOT:-$(git rev-parse --show-toplevel 2>/dev/null || echo ".")
|
|
|
18
18
|
cd "$REPO_ROOT"
|
|
19
19
|
BRANCH_DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
20
20
|
|
|
21
|
+
# Git 未初期化ワークスペースでは最小構成で初期化する(main を既定化)
|
|
22
|
+
if ! git rev-parse --is-inside-work-tree >/dev/null 2>&1; then
|
|
23
|
+
git init -b main >/dev/null 2>&1 || git init >/dev/null 2>&1
|
|
24
|
+
fi
|
|
25
|
+
|
|
21
26
|
YES_MODE=false
|
|
22
27
|
ARGS=()
|
|
23
28
|
for a in "$@"; do
|
|
@@ -44,6 +49,17 @@ BRANCH_PREFIX="$(jq -r '.naming.branch_prefix' "$PROJECT_JSON")"
|
|
|
44
49
|
exit 1
|
|
45
50
|
}
|
|
46
51
|
|
|
52
|
+
# 憲章の未コミット変更があれば、AI によるレビュー付きコミットを先に行う
|
|
53
|
+
CHARTER_DOC="$REPO_ROOT/docs/01_憲章/憲章.md"
|
|
54
|
+
if [[ -f "$CHARTER_DOC" ]]; then
|
|
55
|
+
if [[ -n "$(git status --porcelain -- "$CHARTER_DOC")" ]]; then
|
|
56
|
+
echo "Error: 憲章に未コミット変更があります: $CHARTER_DOC" >&2
|
|
57
|
+
echo " 先に AI に差分を確認させ、適切なコミットメッセージでコミットしてください。" >&2
|
|
58
|
+
echo " その後に uc-next-start.sh を再実行してください。" >&2
|
|
59
|
+
exit 1
|
|
60
|
+
fi
|
|
61
|
+
fi
|
|
62
|
+
|
|
47
63
|
next_uc_id() {
|
|
48
64
|
# docs/02_ユースケース仕様/<カテゴリ>/UC-*.md から次に使う UC-N を返す
|
|
49
65
|
local dir="$REPO_ROOT/docs/02_ユースケース仕様"
|
|
@@ -158,8 +174,20 @@ if [[ "$YES_MODE" != true ]]; then
|
|
|
158
174
|
esac
|
|
159
175
|
fi
|
|
160
176
|
|
|
161
|
-
|
|
162
|
-
git
|
|
177
|
+
# 初回コミット前(unborn HEAD)は checkout main が失敗し得るためフォールバックする
|
|
178
|
+
if git rev-parse --verify HEAD >/dev/null 2>&1; then
|
|
179
|
+
git checkout "$MAIN_BRANCH"
|
|
180
|
+
git pull --ff-only 2>/dev/null || true
|
|
181
|
+
else
|
|
182
|
+
CURRENT_HEAD="$(git symbolic-ref --short -q HEAD 2>/dev/null || echo "")"
|
|
183
|
+
if [[ -z "$MAIN_BRANCH" ]]; then
|
|
184
|
+
MAIN_BRANCH="${CURRENT_HEAD:-main}"
|
|
185
|
+
fi
|
|
186
|
+
if [[ "$CURRENT_HEAD" != "$MAIN_BRANCH" ]]; then
|
|
187
|
+
git checkout -b "$MAIN_BRANCH" >/dev/null 2>&1 || true
|
|
188
|
+
fi
|
|
189
|
+
echo "Info: 初回コミット前のため pull はスキップします。"
|
|
190
|
+
fi
|
|
163
191
|
|
|
164
192
|
# ブランチ作成 + UC 仕様書作成(統合)
|
|
165
193
|
UC_ID_PATTERN="^${UC_ID_RE}$"
|
|
@@ -288,7 +288,11 @@ run_phase() {
|
|
|
288
288
|
local kind="$1" # clarified | analyzed
|
|
289
289
|
local scope="$2" # charter | domain | architecture | uc
|
|
290
290
|
local key="$3"
|
|
291
|
-
|
|
291
|
+
# 互換性のため、quality には「ベース名」と「.md 付き」の両方を許容する
|
|
292
|
+
local key_md="${key}.md"
|
|
293
|
+
jq -e --arg k "$key" --arg km "$key_md" --arg s "$scope" \
|
|
294
|
+
".quality.${kind}[\$s][]? | select(. == \$k or . == \$km)" \
|
|
295
|
+
"$LOCK_FILE" >/dev/null 2>&1
|
|
292
296
|
}
|
|
293
297
|
|
|
294
298
|
resolve_step() {
|
|
@@ -18,6 +18,7 @@ primary_output: docs/02_ユースケース仕様/<カテゴリ>/UC-N-xxx.md
|
|
|
18
18
|
## ユーザー入力
|
|
19
19
|
|
|
20
20
|
`$ARGUMENTS` が機能説明。空でコマンドしていない限り、繰り返し入力を求めない。
|
|
21
|
+
ただし **`$ARGUMENTS` が空** の場合は停止せず、AI 側で候補提案を行ってユーザー選択に進む。
|
|
21
22
|
|
|
22
23
|
```text
|
|
23
24
|
$ARGUMENTS
|
|
@@ -41,6 +42,17 @@ $ARGUMENTS
|
|
|
41
42
|
- まず作る 1 件(最小価値)
|
|
42
43
|
- 合意後は **1 件ずつ** `uc-next-start.sh` で作成する(CRUD は原則別 UC)。
|
|
43
44
|
|
|
45
|
+
### 0.5. 引数なし時の候補提示(必須)
|
|
46
|
+
|
|
47
|
+
- 条件: `$ARGUMENTS` が空。
|
|
48
|
+
- 挙動:
|
|
49
|
+
1. AI がこのプロジェクト向けの機能案を **3〜5 件**提示する。
|
|
50
|
+
2. 各案は 1 行で、`案N: 目的 / 主な利用者 / 想定カテゴリ` の形式で簡潔に示す。
|
|
51
|
+
3. 「番号で選択」または「自由入力で別案指定」を案内する。
|
|
52
|
+
4. **ユーザーが選ぶまで `uc-next-start.sh` を実行しない**。
|
|
53
|
+
- ユーザー回答後:
|
|
54
|
+
- 選択された案(または自由入力文)を今回の機能説明として扱い、以降のステップを通常どおり実行する。
|
|
55
|
+
|
|
44
56
|
### 1. ブランチ用短名(2〜4 語)
|
|
45
57
|
|
|
46
58
|
- 機能説明からキーワード抽出。**ブランチ名は ASCII のみ**、kebab-case(例: order-placement, user-auth)。
|
|
@@ -50,6 +62,7 @@ $ARGUMENTS
|
|
|
50
62
|
|
|
51
63
|
### 2. ブランチと仕様の作成
|
|
52
64
|
|
|
65
|
+
- `docs/01_憲章/憲章.md` は先に確定する。未コミット差分がある場合は、**AI が差分を確認してコミットメッセージを作成し、コミット完了後**に `uc-next-start.sh` を実行する。
|
|
53
66
|
- `.spec-runner/scripts/branch/uc-next-start.sh [UC-ID] "$SLUG" "$TITLE" "$CATEGORY" [--yes]`
|
|
54
67
|
- UC-ID は省略可(省略時は自動採番)。**SLUG / TITLE / CATEGORY は必須**(空文字禁止)。
|
|
55
68
|
- CATEGORY で配置先が決まる(カテゴリ名は日本語可)。**機能ごとに 1 回だけ**。
|
|
@@ -65,7 +78,7 @@ $ARGUMENTS
|
|
|
65
78
|
|
|
66
79
|
### 4. 本文生成の内訳
|
|
67
80
|
|
|
68
|
-
1.
|
|
81
|
+
1. 入力パース。空なら「0.5 引数なし時の候補提示」を実施し、選択後に続行する(即 ERROR にしない)
|
|
69
82
|
2. 重要概念(アクター・アクション・データ・制約)
|
|
70
83
|
3. 不明点: **推測で確定しない** → **`[要確認: ...]`**。付けるのは影響大・解釈複数・デフォルト無しのときのみ。**上限 3 個**。優先: スコープ > セキュリティ > UX > 技術詳細
|
|
71
84
|
4. 「ユーザーシナリオとテスト」を埋める。フロー特定できなければ ERROR
|