Skip to content

Commit bb1dfdb

Browse files
authored
Merge pull request #15 from tango238/feature/workflow-swimlane-structure
refactor: workflow.yml の構造をスイムレーン対応に変更
2 parents 1dd2f3b + d66d224 commit bb1dfdb

7 files changed

Lines changed: 322 additions & 156 deletions

File tree

.claude/agents/verifier.md

Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,120 @@ install.sh のファイルコピー行を検証:
4848
- 削除対象ファイルが存在しないこと
4949
- CLAUDE.md の SKILL ルールが正しいこと
5050

51+
### 5. Workflow Structure Verification
52+
53+
`feature``workflow` 構造変更に関する整合性を検証する。
54+
55+
#### 5-1. generate-workflow.md の検証
56+
57+
対象ファイル: `.claude/commands/teamkit/generate-workflow.md`
58+
59+
**YAML 出力フォーマットが新構造であること**:
60+
- `workflow:` キーが Output Format セクションに存在すること
61+
- `feature:` キーが Output Format セクションに**存在しない**こと
62+
- 各ステップに `actor`, `activity` フィールドが定義されていること
63+
- オプションフィールド `aggregate`, `event`, `policy` が定義されていること
64+
65+
```bash
66+
# 新構造の存在確認
67+
grep -n "^workflow:" .claude/commands/teamkit/generate-workflow.md
68+
grep -n "actor:" .claude/commands/teamkit/generate-workflow.md | head -5
69+
grep -n "activity:" .claude/commands/teamkit/generate-workflow.md | head -5
70+
71+
# 旧構造が残っていないこと(YAML キーとしての feature:)
72+
grep -n "^feature:" .claude/commands/teamkit/generate-workflow.md
73+
grep -n "scenarios:" .claude/commands/teamkit/generate-workflow.md
74+
```
75+
76+
**Step Field Reference テーブルが存在すること**:
77+
- `| actor |`, `| activity |`, `| aggregate |`, `| event |`, `| policy |` の5行が存在すること
78+
79+
**Actor Usage Guidelines セクションが存在すること**:
80+
- `system` アクターの説明があること
81+
- 外部システムアクターの説明があること
82+
83+
**Execution Example が新構造であること**:
84+
- Output (workflow.yml) の例に `workflow:` が使われていること
85+
- 各ステップに `actor:``activity:` があること
86+
87+
#### 5-2. show-event.md の検証
88+
89+
対象ファイル: `.claude/commands/teamkit/show-event.md`
90+
91+
**Step 2 (Read Input) が新構造を参照していること**:
92+
- `workflow` リストの読み取り指示があること
93+
- `steps` の各フィールド(`actor`, `activity`, `aggregate`, `event`, `policy`)への言及があること
94+
- `feature` リストの読み取り指示が**存在しない**こと
95+
96+
```bash
97+
# 新構造の参照確認
98+
grep -n "workflow.*steps" .claude/commands/teamkit/show-event.md
99+
grep -n "step\.actor\|step\.event\|step\.policy" .claude/commands/teamkit/show-event.md
100+
101+
# 旧構造が残っていないこと
102+
grep -n "feature.*events\|feature.*policy" .claude/commands/teamkit/show-event.md
103+
```
104+
105+
**Step 4 (Analyze Business Flow) が新構造ベースであること**:
106+
- `workflow[].trigger` への参照があること
107+
- `workflow[].steps` を順に辿る指示があること
108+
109+
**Example の Input が新構造であること**:
110+
- Input (workflow.yml) に `workflow:` セクションがあること
111+
- `feature:` セクションが**存在しない**こと
112+
113+
#### 5-3. generate-usecase.md の検証
114+
115+
対象ファイル: `.claude/commands/teamkit/generate-usecase.md`
116+
117+
**Step 3 (Read Input) が新構造を参照していること**:
118+
- `workflow.yml` の説明に `actor`, `activity`, `aggregate`, `event`, `policy` への言及があること
119+
- `Feature definitions and scenarios` という旧説明が**存在しない**こと
120+
121+
```bash
122+
# 新構造の参照確認
123+
grep -n "actor.*activity.*aggregate" .claude/commands/teamkit/generate-usecase.md
124+
125+
# 旧構造が残っていないこと
126+
grep -n "Feature definitions and scenarios" .claude/commands/teamkit/generate-usecase.md
127+
grep -n "feature\.scenarios\|feature scenario" .claude/commands/teamkit/generate-usecase.md
128+
```
129+
130+
**Step 5 の Rules にアクター/エンティティ抽出ルールがあること**:
131+
- `Actor extraction` ルールが存在すること
132+
- `Entity extraction` ルールが存在すること
133+
134+
**Step 6 (Verification) が workflow を参照していること**:
135+
- "EVERY workflow" という表現があること
136+
- "EVERY feature scenario" が**存在しない**こと
137+
138+
**Example の Input が新構造であること**:
139+
- Input (workflow.yml) に `workflow:``steps:` があること
140+
- `feature:``scenarios:`**存在しない**こと
141+
142+
#### 5-4. 横断的整合性チェック
143+
144+
3つのコマンドファイル間で、workflow.yml 構造の理解が一致していること:
145+
146+
```bash
147+
# 3ファイルすべてで workflow 構造を参照していること
148+
for f in generate-workflow.md show-event.md generate-usecase.md; do
149+
echo "=== $f ==="
150+
grep -c "workflow" .claude/commands/teamkit/$f
151+
done
152+
153+
# YAML キーとしての feature: が3ファイルのいずれにも残っていないこと
154+
# (status.json の feature_name は許容)
155+
for f in generate-workflow.md show-event.md generate-usecase.md; do
156+
echo "=== $f ==="
157+
grep -n "^ - name:.*Feature\|^feature:\|feature\.scenarios\|feature\.events\|feature\.policy" .claude/commands/teamkit/$f
158+
done
159+
```
160+
161+
**ステップフィールドの一貫性**:
162+
- 3ファイルすべてで `actor`, `activity` が必須フィールドとして扱われていること
163+
- 3ファイルすべてで `aggregate`, `event`, `policy` がオプションフィールドとして扱われていること
164+
51165
## Output
52166

53167
検証結果をマークダウン形式のレポートファイルに保存する。

.claude/commands/teamkit/generate-usecase.md

Lines changed: 38 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ Execute the following instructions using `baseDir` and `specDir`.
2828

2929
## Purpose
3030
Extract use cases from `{{baseDir}}/{{specDir}}/workflow.yml` and document them in YAML format based on **Robustness Analysis**.
31-
Ensure all features in `workflow.yml` are covered (Tracking is mandatory).
31+
Ensure all workflows in `workflow.yml` are covered (Tracking is mandatory).
3232

3333
## Execution Steps
3434

@@ -54,7 +54,7 @@ Ensure all features in `workflow.yml` are covered (Tracking is mandatory).
5454

5555
### 3. Read Input Files
5656
Read the following files and understand their content:
57-
- `{{baseDir}}/{{specDir}}/workflow.yml`: Feature definitions and scenarios
57+
- `{{baseDir}}/{{specDir}}/workflow.yml`: Workflow definitions with structured steps (actor, activity, aggregate, event, policy)
5858

5959
### 4. Use Case Creation Policy (Robustness Analysis)
6060

@@ -75,7 +75,7 @@ Instead of just listing steps, identify the **Actor**, **Boundary**, **Control**
7575
### 5. Generate Use Cases
7676

7777
Generate the content for `usecase.yml` following the format below.
78-
**Group by Use Case**, not by Feature.
78+
**Group by Use Case**, not by Workflow.
7979

8080
**Output Format**:
8181
```yaml
@@ -119,13 +119,15 @@ usecases:
119119
- Aliases (as) should be short English identifiers (e.g., Host1, LoginUI).
120120
- Names should be descriptive in Japanese.
121121
- `usecase` key should be empty (null).
122+
- **Actor extraction**: Use the `actor` field from workflow steps directly. Actors defined in workflow steps map to the Actor element in Robustness Analysis.
123+
- **Entity extraction**: Use the `aggregate` field from workflow steps as candidates for Entity elements.
122124

123125
### 6. Verification (Self-Correction)
124126

125127
**After generating the initial list of use cases, perform a check:**
126-
1. Review `workflow.yml` and ensure **EVERY** feature scenario is referenced in the `trackings` of at least one use case.
127-
2. If any feature scenario is missing, create an additional use case to cover it.
128-
3. Ensure no "orphan" features are left behind.
128+
1. Review `workflow.yml` and ensure **EVERY** workflow is referenced in the `trackings` of at least one use case.
129+
2. If any workflow is missing, create an additional use case to cover it.
130+
3. Ensure no "orphan" workflows are left behind.
129131

130132
### 7. File Saving
131133
- **Determine Output Filename**:
@@ -156,17 +158,36 @@ usecases:
156158

157159
### Input Example (workflow.yml)
158160
```yaml
159-
feature:
160-
- name: 契約管理
161-
description: ホストがサービスを利用開始するための契約機能
162-
scenarios:
163-
- name: サービス契約の申し込みフロー
164-
precondition: ホストがサービス利用を希望している
165-
steps:
166-
- サービス契約画面を開く
167-
- 基本情報を入力する
168-
- 契約内容を確認し確定する
169-
postcondition: 契約が完了し管理アカウントが発行される
161+
actor:
162+
- name: ホスト
163+
description: スペース掲載者としてサービスを利用するユーザー
164+
165+
aggregate:
166+
- 契約
167+
- ホストアカウント
168+
169+
workflow:
170+
- name: サービス契約の申し込みフロー
171+
description: ホストがサービスを利用開始するための契約申し込みフロー
172+
trigger: ホストがサービス利用を希望する
173+
precondition: ホストがサービス利用を希望している
174+
steps:
175+
- actor: ホスト
176+
activity: サービス契約画面を開く
177+
aggregate: 契約
178+
- actor: ホスト
179+
activity: 基本情報を入力する
180+
aggregate: 契約
181+
- actor: ホスト
182+
activity: 契約内容を確認し確定する
183+
aggregate: 契約
184+
event: 契約が作成された
185+
- actor: system
186+
activity: 管理アカウントを発行する
187+
aggregate: ホストアカウント
188+
event: アカウントが発行された
189+
policy: アカウント自動発行ポリシー
190+
postcondition: 契約が完了し管理アカウントが発行される
170191
```
171192

172193
### Output Example (usecase.yml)

0 commit comments

Comments
 (0)