takt 0.1.4 → 0.1.6
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/dist/agents/runner.d.ts +1 -1
- package/dist/agents/runner.d.ts.map +1 -1
- package/dist/agents/runner.js +13 -34
- package/dist/agents/runner.js.map +1 -1
- package/dist/claude/client.d.ts.map +1 -1
- package/dist/claude/client.js +4 -1
- package/dist/claude/client.js.map +1 -1
- package/dist/claude/executor.d.ts.map +1 -1
- package/dist/claude/executor.js +1 -0
- package/dist/claude/executor.js.map +1 -1
- package/dist/claude/types.d.ts +2 -0
- package/dist/claude/types.d.ts.map +1 -1
- package/dist/cli.d.ts +2 -3
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +5 -8
- package/dist/cli.js.map +1 -1
- package/dist/commands/help.d.ts.map +1 -1
- package/dist/commands/help.js +4 -8
- package/dist/commands/help.js.map +1 -1
- package/dist/commands/index.d.ts +1 -1
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js.map +1 -1
- package/dist/commands/taskExecution.d.ts +1 -6
- package/dist/commands/taskExecution.d.ts.map +1 -1
- package/dist/commands/taskExecution.js +2 -6
- package/dist/commands/taskExecution.js.map +1 -1
- package/dist/commands/workflowExecution.d.ts +0 -2
- package/dist/commands/workflowExecution.d.ts.map +1 -1
- package/dist/commands/workflowExecution.js +34 -13
- package/dist/commands/workflowExecution.js.map +1 -1
- package/dist/mock/client.d.ts +27 -0
- package/dist/mock/client.d.ts.map +1 -0
- package/dist/mock/client.js +56 -0
- package/dist/mock/client.js.map +1 -0
- package/dist/models/schemas.d.ts +6 -0
- package/dist/models/schemas.d.ts.map +1 -1
- package/dist/models/schemas.js +4 -4
- package/dist/models/schemas.js.map +1 -1
- package/dist/models/types.d.ts +6 -4
- package/dist/models/types.d.ts.map +1 -1
- package/dist/providers/claude.d.ts +11 -0
- package/dist/providers/claude.d.ts.map +1 -0
- package/dist/providers/claude.js +37 -0
- package/dist/providers/claude.js.map +1 -0
- package/dist/providers/codex.d.ts +11 -0
- package/dist/providers/codex.d.ts.map +1 -0
- package/dist/providers/codex.js +29 -0
- package/dist/providers/codex.js.map +1 -0
- package/dist/providers/index.d.ts +39 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +32 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/providers/mock.d.ts +11 -0
- package/dist/providers/mock.d.ts.map +1 -0
- package/dist/providers/mock.js +24 -0
- package/dist/providers/mock.js.map +1 -0
- package/dist/workflow/engine.d.ts.map +1 -1
- package/dist/workflow/engine.js +6 -3
- package/dist/workflow/engine.js.map +1 -1
- package/dist/workflow/instruction-builder.d.ts +5 -2
- package/dist/workflow/instruction-builder.d.ts.map +1 -1
- package/dist/workflow/instruction-builder.js +4 -2
- package/dist/workflow/instruction-builder.js.map +1 -1
- package/dist/workflow/state-manager.d.ts +4 -0
- package/dist/workflow/state-manager.d.ts.map +1 -1
- package/dist/workflow/state-manager.js +10 -0
- package/dist/workflow/state-manager.js.map +1 -1
- package/package.json +1 -1
- package/resources/global/en/agents/default/architect.md +67 -6
- package/resources/global/en/agents/default/coder.md +155 -1
- package/resources/global/en/workflows/default.yaml +36 -16
- package/resources/global/en/workflows/expert-review.yaml +47 -23
- package/resources/global/en/workflows/magi.yaml +10 -0
- package/resources/global/en/workflows/research.yaml +16 -3
- package/resources/global/ja/agents/default/architect.md +62 -1
- package/resources/global/ja/agents/default/coder.md +156 -2
- package/resources/global/ja/agents/expert-review/cqrs-es-reviewer.md +328 -8
- package/resources/global/ja/agents/expert-review/frontend-reviewer.md +303 -33
- package/resources/global/ja/workflows/default.yaml +36 -16
- package/resources/global/ja/workflows/expert-review.yaml +47 -23
- package/resources/global/ja/workflows/magi.yaml +10 -0
- package/resources/global/ja/workflows/research.yaml +16 -3
|
@@ -36,6 +36,15 @@
|
|
|
36
36
|
|
|
37
37
|
### 1. コンポーネント設計
|
|
38
38
|
|
|
39
|
+
**原則: 1ファイルにベタ書きしない。必ずコンポーネント分割する。**
|
|
40
|
+
|
|
41
|
+
**分離が必須なケース:**
|
|
42
|
+
- 独自のstateを持つ → 必ず分離
|
|
43
|
+
- 50行超のJSX → 分離
|
|
44
|
+
- 再利用可能 → 分離
|
|
45
|
+
- 責務が複数 → 分離
|
|
46
|
+
- ページ内の独立したセクション → 分離
|
|
47
|
+
|
|
39
48
|
**必須チェック:**
|
|
40
49
|
|
|
41
50
|
| 基準 | 判定 |
|
|
@@ -60,8 +69,44 @@
|
|
|
60
69
|
| Layout | 配置・構造 | `PageLayout`, `Grid` |
|
|
61
70
|
| Utility | 共通機能 | `ErrorBoundary`, `Portal` |
|
|
62
71
|
|
|
72
|
+
**ディレクトリ構成:**
|
|
73
|
+
```
|
|
74
|
+
features/{feature-name}/
|
|
75
|
+
├── components/
|
|
76
|
+
│ ├── {feature}-view.tsx # メインビュー(子を組み合わせる)
|
|
77
|
+
│ ├── {sub-component}.tsx # サブコンポーネント
|
|
78
|
+
│ └── index.ts
|
|
79
|
+
├── hooks/
|
|
80
|
+
├── types.ts
|
|
81
|
+
└── index.ts
|
|
82
|
+
```
|
|
83
|
+
|
|
63
84
|
### 2. 状態管理
|
|
64
85
|
|
|
86
|
+
**原則: 子コンポーネントは自身で状態を変更しない。イベントを親にバブリングし、親が状態を操作する。**
|
|
87
|
+
|
|
88
|
+
```tsx
|
|
89
|
+
// ❌ 子が自分で状態を変更
|
|
90
|
+
const ChildBad = ({ initialValue }: { initialValue: string }) => {
|
|
91
|
+
const [value, setValue] = useState(initialValue)
|
|
92
|
+
return <input value={value} onChange={e => setValue(e.target.value)} />
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
// ✅ 親が状態を管理、子はコールバックで通知
|
|
96
|
+
const ChildGood = ({ value, onChange }: { value: string; onChange: (v: string) => void }) => {
|
|
97
|
+
return <input value={value} onChange={e => onChange(e.target.value)} />
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
const Parent = () => {
|
|
101
|
+
const [value, setValue] = useState('')
|
|
102
|
+
return <ChildGood value={value} onChange={setValue} />
|
|
103
|
+
}
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
**例外(子がローカルstate持ってOK):**
|
|
107
|
+
- UI専用の一時状態(ホバー、フォーカス、アニメーション)
|
|
108
|
+
- 親に伝える必要がない完全にローカルな状態
|
|
109
|
+
|
|
65
110
|
**必須チェック:**
|
|
66
111
|
|
|
67
112
|
| 基準 | 判定 |
|
|
@@ -81,36 +126,81 @@
|
|
|
81
126
|
| 複数コンポーネントで共有 | Context or 状態管理ライブラリ |
|
|
82
127
|
| サーバーデータのキャッシュ | TanStack Query等のデータフェッチライブラリ |
|
|
83
128
|
|
|
84
|
-
### 3.
|
|
129
|
+
### 3. データ取得
|
|
85
130
|
|
|
86
|
-
|
|
131
|
+
**原則: API呼び出しはルート(View)コンポーネントで行い、子コンポーネントにはpropsで渡す。**
|
|
87
132
|
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
133
|
+
```tsx
|
|
134
|
+
// ✅ CORRECT - ルートでデータ取得、子に渡す
|
|
135
|
+
const OrderDetailView = () => {
|
|
136
|
+
const { data: order, isLoading, error } = useGetOrder(orderId)
|
|
137
|
+
const { data: items } = useListOrderItems(orderId)
|
|
138
|
+
|
|
139
|
+
if (isLoading) return <Skeleton />
|
|
140
|
+
if (error) return <ErrorDisplay error={error} />
|
|
141
|
+
|
|
142
|
+
return (
|
|
143
|
+
<OrderSummary
|
|
144
|
+
order={order}
|
|
145
|
+
items={items}
|
|
146
|
+
onItemSelect={handleItemSelect}
|
|
147
|
+
/>
|
|
148
|
+
)
|
|
149
|
+
}
|
|
95
150
|
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
151
|
+
// ❌ WRONG - 子コンポーネントが自分でデータ取得
|
|
152
|
+
const OrderSummary = ({ orderId }) => {
|
|
153
|
+
const { data: order } = useGetOrder(orderId)
|
|
154
|
+
// ...
|
|
155
|
+
}
|
|
156
|
+
```
|
|
101
157
|
|
|
102
|
-
|
|
158
|
+
**理由:**
|
|
159
|
+
- データフローが明示的で追跡しやすい
|
|
160
|
+
- 子コンポーネントは純粋なプレゼンテーション(テストしやすい)
|
|
161
|
+
- 子コンポーネントに隠れた依存関係がなくなる
|
|
162
|
+
|
|
163
|
+
**UIの状態変更でパラメータが変わる場合(週切り替え、フィルタ等):**
|
|
164
|
+
|
|
165
|
+
状態もViewレベルで管理し、コンポーネントにはコールバックを渡す。
|
|
103
166
|
|
|
104
167
|
```tsx
|
|
105
|
-
//
|
|
106
|
-
|
|
168
|
+
// ✅ CORRECT - 状態もViewで管理
|
|
169
|
+
const ScheduleView = () => {
|
|
170
|
+
const [currentWeek, setCurrentWeek] = useState(startOfWeek(new Date()))
|
|
171
|
+
const { data } = useListSchedules({
|
|
172
|
+
from: format(currentWeek, 'yyyy-MM-dd'),
|
|
173
|
+
to: format(endOfWeek(currentWeek), 'yyyy-MM-dd'),
|
|
174
|
+
})
|
|
175
|
+
|
|
176
|
+
return (
|
|
177
|
+
<WeeklyCalendar
|
|
178
|
+
schedules={data?.items ?? []}
|
|
179
|
+
currentWeek={currentWeek}
|
|
180
|
+
onWeekChange={setCurrentWeek}
|
|
181
|
+
/>
|
|
182
|
+
)
|
|
183
|
+
}
|
|
107
184
|
|
|
108
|
-
//
|
|
109
|
-
const
|
|
110
|
-
|
|
185
|
+
// ❌ WRONG - コンポーネント内で状態管理+データ取得
|
|
186
|
+
const WeeklyCalendar = ({ facilityId }) => {
|
|
187
|
+
const [currentWeek, setCurrentWeek] = useState(...)
|
|
188
|
+
const { data } = useListSchedules({ facilityId, from, to })
|
|
189
|
+
// ...
|
|
190
|
+
}
|
|
111
191
|
```
|
|
112
192
|
|
|
113
|
-
|
|
193
|
+
**例外(コンポーネント内フェッチが許容されるケース):**
|
|
194
|
+
|
|
195
|
+
| ケース | 理由 |
|
|
196
|
+
|--------|------|
|
|
197
|
+
| 無限スクロール | スクロール位置というUI内部状態に依存 |
|
|
198
|
+
| 検索オートコンプリート | 入力値に依存したリアルタイム検索 |
|
|
199
|
+
| 独立したウィジェット | 通知バッジ、天気等。親のデータと完全に無関係 |
|
|
200
|
+
| リアルタイム更新 | WebSocket/Pollingでの自動更新 |
|
|
201
|
+
| モーダル内の詳細取得 | 開いたときだけ追加データを取得 |
|
|
202
|
+
|
|
203
|
+
**判断基準: 「親が管理する意味がない / 親に影響を与えない」ケースのみ許容。**
|
|
114
204
|
|
|
115
205
|
**必須チェック:**
|
|
116
206
|
|
|
@@ -122,20 +212,195 @@ const style = useMemo(() => ({ color: 'red' }), []);
|
|
|
122
212
|
| キャンセル処理なし | 警告 |
|
|
123
213
|
| N+1クエリ的なフェッチ | REJECT |
|
|
124
214
|
|
|
125
|
-
|
|
215
|
+
### 4. 共有コンポーネントと抽象化
|
|
216
|
+
|
|
217
|
+
**原則: 同じパターンのUIは共有コンポーネント化する。インラインスタイルのコピペは禁止。**
|
|
218
|
+
|
|
219
|
+
```tsx
|
|
220
|
+
// ❌ WRONG - インラインスタイルのコピペ
|
|
221
|
+
<button className="p-2 text-[var(--text-secondary)] hover:...">
|
|
222
|
+
<X className="w-5 h-5" />
|
|
223
|
+
</button>
|
|
224
|
+
|
|
225
|
+
// ✅ CORRECT - 共有コンポーネント使用
|
|
226
|
+
<IconButton onClick={onClose} aria-label="閉じる">
|
|
227
|
+
<X className="w-5 h-5" />
|
|
228
|
+
</IconButton>
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
**共有コンポーネント化すべきパターン:**
|
|
232
|
+
- アイコンボタン(閉じる、編集、削除等)
|
|
233
|
+
- ローディング/エラー表示
|
|
234
|
+
- ステータスバッジ
|
|
235
|
+
- タブ切り替え
|
|
236
|
+
- ラベル+値の表示(詳細画面)
|
|
237
|
+
- 検索入力
|
|
238
|
+
- カラー凡例
|
|
239
|
+
|
|
240
|
+
**過度な汎用化を避ける:**
|
|
241
|
+
|
|
242
|
+
```tsx
|
|
243
|
+
// ❌ WRONG - IconButtonに無理やりステッパー用バリアントを追加
|
|
244
|
+
export const iconButtonVariants = cva('...', {
|
|
245
|
+
variants: {
|
|
246
|
+
variant: {
|
|
247
|
+
default: '...',
|
|
248
|
+
outlined: '...', // ← ステッパー専用、他で使わない
|
|
249
|
+
},
|
|
250
|
+
size: {
|
|
251
|
+
medium: 'p-2',
|
|
252
|
+
stepper: 'w-8 h-8', // ← outlinedとセットでしか使わない
|
|
253
|
+
},
|
|
254
|
+
},
|
|
255
|
+
})
|
|
256
|
+
|
|
257
|
+
// ✅ CORRECT - 用途別に専用コンポーネント
|
|
258
|
+
export function StepperButton(props) {
|
|
259
|
+
return (
|
|
260
|
+
<button className="w-8 h-8 rounded-full border ..." {...props}>
|
|
261
|
+
<Plus className="w-4 h-4" />
|
|
262
|
+
</button>
|
|
263
|
+
)
|
|
264
|
+
}
|
|
265
|
+
```
|
|
266
|
+
|
|
267
|
+
**別コンポーネントにすべきサイン:**
|
|
268
|
+
- 「このvariantはこのsizeとセット」のような暗黙の制約がある
|
|
269
|
+
- 追加したvariantが元のコンポーネントの用途と明らかに違う
|
|
270
|
+
- 使う側のprops指定が複雑になる
|
|
271
|
+
|
|
272
|
+
### 5. 抽象化レベルの評価
|
|
273
|
+
|
|
274
|
+
**条件分岐の肥大化検出:**
|
|
275
|
+
|
|
276
|
+
| パターン | 判定 |
|
|
277
|
+
|---------|------|
|
|
278
|
+
| 同じ条件分岐が3箇所以上 | 共通コンポーネントに抽出 → **REJECT** |
|
|
279
|
+
| propsによる分岐が5種類以上 | コンポーネント分割を検討 |
|
|
280
|
+
| render内の三項演算子のネスト | 早期リターンまたはコンポーネント分離 → **REJECT** |
|
|
281
|
+
| 型による分岐レンダリング | ポリモーフィックコンポーネントを検討 |
|
|
282
|
+
|
|
283
|
+
**抽象度の不一致検出:**
|
|
284
|
+
|
|
285
|
+
| パターン | 問題 | 修正案 |
|
|
286
|
+
|---------|------|--------|
|
|
287
|
+
| データ取得ロジックがJSXに混在 | 読みにくい | カスタムフックに抽出 |
|
|
288
|
+
| ビジネスロジックがコンポーネントに混在 | 責務違反 | hooks/utilsに分離 |
|
|
289
|
+
| スタイル計算ロジックが散在 | 保守困難 | ユーティリティ関数に抽出 |
|
|
290
|
+
| 同じ変換処理が複数箇所に | DRY違反 | 共通関数に抽出 |
|
|
291
|
+
|
|
292
|
+
**良い抽象化の例:**
|
|
293
|
+
```tsx
|
|
294
|
+
// ❌ 条件分岐が肥大化
|
|
295
|
+
function UserBadge({ user }) {
|
|
296
|
+
if (user.role === 'admin') {
|
|
297
|
+
return <span className="bg-red-500">管理者</span>
|
|
298
|
+
} else if (user.role === 'moderator') {
|
|
299
|
+
return <span className="bg-yellow-500">モデレーター</span>
|
|
300
|
+
} else if (user.role === 'premium') {
|
|
301
|
+
return <span className="bg-purple-500">プレミアム</span>
|
|
302
|
+
} else {
|
|
303
|
+
return <span className="bg-gray-500">一般</span>
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
// ✅ Mapで抽象化
|
|
308
|
+
const ROLE_CONFIG = {
|
|
309
|
+
admin: { label: '管理者', className: 'bg-red-500' },
|
|
310
|
+
moderator: { label: 'モデレーター', className: 'bg-yellow-500' },
|
|
311
|
+
premium: { label: 'プレミアム', className: 'bg-purple-500' },
|
|
312
|
+
default: { label: '一般', className: 'bg-gray-500' },
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
function UserBadge({ user }) {
|
|
316
|
+
const config = ROLE_CONFIG[user.role] ?? ROLE_CONFIG.default
|
|
317
|
+
return <span className={config.className}>{config.label}</span>
|
|
318
|
+
}
|
|
319
|
+
```
|
|
320
|
+
|
|
126
321
|
```tsx
|
|
127
|
-
//
|
|
128
|
-
function
|
|
129
|
-
const
|
|
322
|
+
// ❌ 抽象度が混在
|
|
323
|
+
function OrderList() {
|
|
324
|
+
const [orders, setOrders] = useState([])
|
|
325
|
+
useEffect(() => {
|
|
326
|
+
fetch('/api/orders')
|
|
327
|
+
.then(res => res.json())
|
|
328
|
+
.then(data => setOrders(data))
|
|
329
|
+
}, [])
|
|
330
|
+
|
|
331
|
+
return orders.map(order => (
|
|
332
|
+
<div>{order.total.toLocaleString()}円</div>
|
|
333
|
+
))
|
|
334
|
+
}
|
|
130
335
|
|
|
131
|
-
|
|
132
|
-
|
|
336
|
+
// ✅ 抽象度を揃える
|
|
337
|
+
function OrderList() {
|
|
338
|
+
const { data: orders } = useOrders() // データ取得を隠蔽
|
|
133
339
|
|
|
134
|
-
return
|
|
340
|
+
return orders.map(order => (
|
|
341
|
+
<OrderItem key={order.id} order={order} />
|
|
342
|
+
))
|
|
135
343
|
}
|
|
136
344
|
```
|
|
137
345
|
|
|
138
|
-
###
|
|
346
|
+
### 6. データと表示形式の責務分離
|
|
347
|
+
|
|
348
|
+
**原則: バックエンドは「データ」を返し、フロントエンドが「表示形式」に変換する。**
|
|
349
|
+
|
|
350
|
+
```tsx
|
|
351
|
+
// ✅ フロントエンド: 表示形式に変換
|
|
352
|
+
export function formatPrice(amount: number): string {
|
|
353
|
+
return `¥${amount.toLocaleString()}`
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
export function formatDate(date: Date): string {
|
|
357
|
+
return format(date, 'yyyy年M月d日')
|
|
358
|
+
}
|
|
359
|
+
```
|
|
360
|
+
|
|
361
|
+
**理由:**
|
|
362
|
+
- 表示形式はUI要件であり、バックエンドの責務ではない
|
|
363
|
+
- 国際化対応が容易
|
|
364
|
+
- フロントエンドが柔軟に表示を変更できる
|
|
365
|
+
|
|
366
|
+
**必須チェック:**
|
|
367
|
+
|
|
368
|
+
| 基準 | 判定 |
|
|
369
|
+
|------|------|
|
|
370
|
+
| バックエンドが表示用文字列を返している | 設計見直しを提案 |
|
|
371
|
+
| 同じフォーマット処理が複数箇所にコピペ | ユーティリティ関数に統一 |
|
|
372
|
+
| コンポーネント内でインラインフォーマット | 関数に抽出 |
|
|
373
|
+
|
|
374
|
+
### 7. パフォーマンス
|
|
375
|
+
|
|
376
|
+
**必須チェック:**
|
|
377
|
+
|
|
378
|
+
| 基準 | 判定 |
|
|
379
|
+
|------|------|
|
|
380
|
+
| 不要な再レンダリング | 最適化が必要 |
|
|
381
|
+
| 大きなリストの仮想化なし | 警告 |
|
|
382
|
+
| 画像の最適化なし | 警告 |
|
|
383
|
+
| バンドルに未使用コード | tree-shakingを確認 |
|
|
384
|
+
| メモ化の過剰使用 | 本当に必要か確認 |
|
|
385
|
+
|
|
386
|
+
**最適化チェックリスト:**
|
|
387
|
+
- [ ] `React.memo` / `useMemo` / `useCallback` は適切か
|
|
388
|
+
- [ ] 大きなリストは仮想スクロール対応か
|
|
389
|
+
- [ ] Code Splittingは適切か
|
|
390
|
+
- [ ] 画像はlazy loadingされているか
|
|
391
|
+
|
|
392
|
+
**アンチパターン:**
|
|
393
|
+
|
|
394
|
+
```tsx
|
|
395
|
+
// ❌ レンダリングごとに新しいオブジェクト
|
|
396
|
+
<Child style={{ color: 'red' }} />
|
|
397
|
+
|
|
398
|
+
// ✅ 定数化 or useMemo
|
|
399
|
+
const style = useMemo(() => ({ color: 'red' }), []);
|
|
400
|
+
<Child style={style} />
|
|
401
|
+
```
|
|
402
|
+
|
|
403
|
+
### 8. アクセシビリティ
|
|
139
404
|
|
|
140
405
|
**必須チェック:**
|
|
141
406
|
|
|
@@ -154,7 +419,7 @@ function UserPage() {
|
|
|
154
419
|
- [ ] スクリーンリーダーで意味が通じるか
|
|
155
420
|
- [ ] カラーコントラストは十分か
|
|
156
421
|
|
|
157
|
-
###
|
|
422
|
+
### 9. TypeScript/型安全性
|
|
158
423
|
|
|
159
424
|
**必須チェック:**
|
|
160
425
|
|
|
@@ -165,7 +430,7 @@ function UserPage() {
|
|
|
165
430
|
| Props型定義なし | REJECT |
|
|
166
431
|
| イベントハンドラの型が不適切 | 修正が必要 |
|
|
167
432
|
|
|
168
|
-
###
|
|
433
|
+
### 10. フロントエンドセキュリティ
|
|
169
434
|
|
|
170
435
|
**必須チェック:**
|
|
171
436
|
|
|
@@ -176,7 +441,7 @@ function UserPage() {
|
|
|
176
441
|
| 機密情報のフロントエンド保存 | REJECT |
|
|
177
442
|
| CSRFトークンの未使用 | 要確認 |
|
|
178
443
|
|
|
179
|
-
###
|
|
444
|
+
### 11. テスタビリティ
|
|
180
445
|
|
|
181
446
|
**必須チェック:**
|
|
182
447
|
|
|
@@ -186,7 +451,7 @@ function UserPage() {
|
|
|
186
451
|
| テスト困難な構造 | 分離を検討 |
|
|
187
452
|
| ビジネスロジックのUIへの埋め込み | REJECT |
|
|
188
453
|
|
|
189
|
-
###
|
|
454
|
+
### 12. アンチパターン検出
|
|
190
455
|
|
|
191
456
|
以下を見つけたら **REJECT**:
|
|
192
457
|
|
|
@@ -198,6 +463,8 @@ function UserPage() {
|
|
|
198
463
|
| useEffect地獄 | 依存関係が複雑すぎる |
|
|
199
464
|
| Premature Optimization | 不要なメモ化 |
|
|
200
465
|
| Magic Strings | ハードコードされた文字列 |
|
|
466
|
+
| Hidden Dependencies | 子コンポーネントの隠れたAPI呼び出し |
|
|
467
|
+
| Over-generalization | 無理やり汎用化したコンポーネント |
|
|
201
468
|
|
|
202
469
|
## 判定基準
|
|
203
470
|
|
|
@@ -206,6 +473,7 @@ function UserPage() {
|
|
|
206
473
|
| コンポーネント設計に問題 | REJECT |
|
|
207
474
|
| 状態管理に問題 | REJECT |
|
|
208
475
|
| アクセシビリティ違反 | REJECT |
|
|
476
|
+
| 抽象化レベルの不一致 | REJECT |
|
|
209
477
|
| パフォーマンス問題 | REJECT(重大な場合) |
|
|
210
478
|
| 軽微な改善点のみ | APPROVE(改善提案は付記) |
|
|
211
479
|
|
|
@@ -223,3 +491,5 @@ function UserPage() {
|
|
|
223
491
|
- **アクセシビリティは後付け困難**: 最初から組み込む
|
|
224
492
|
- **過度な抽象化を警戒**: シンプルに保つ
|
|
225
493
|
- **フレームワークの作法に従う**: 独自パターンより標準的なアプローチ
|
|
494
|
+
- **データ取得はルートで**: 子コンポーネントに隠れた依存を作らない
|
|
495
|
+
- **制御されたコンポーネント**: 状態の流れは単方向
|
|
@@ -1,5 +1,15 @@
|
|
|
1
1
|
# Default TAKT Workflow
|
|
2
2
|
# Plan -> Coder -> Architect Review -> AI Review -> Security Review -> Supervisor Approval
|
|
3
|
+
#
|
|
4
|
+
# Template Variables:
|
|
5
|
+
# {iteration} - Workflow-wide turn count (total steps executed across all agents)
|
|
6
|
+
# {max_iterations} - Maximum iterations allowed for the workflow
|
|
7
|
+
# {step_iteration} - Per-step iteration count (how many times THIS step has been executed)
|
|
8
|
+
# {task} - Original user request
|
|
9
|
+
# {previous_response} - Output from the previous step
|
|
10
|
+
# {git_diff} - Current uncommitted changes (git diff)
|
|
11
|
+
# {user_inputs} - Accumulated user inputs during workflow
|
|
12
|
+
# {report_dir} - Report directory name (e.g., "20250126-143052-task-summary")
|
|
3
13
|
|
|
4
14
|
name: default
|
|
5
15
|
description: Standard development workflow with planning and specialized reviews
|
|
@@ -55,7 +65,8 @@ steps:
|
|
|
55
65
|
```
|
|
56
66
|
instruction_template: |
|
|
57
67
|
## Workflow Context
|
|
58
|
-
- Iteration: {iteration}/{max_iterations}
|
|
68
|
+
- Iteration: {iteration}/{max_iterations}(ワークフロー全体)
|
|
69
|
+
- Step Iteration: {step_iteration}(このステップの実行回数)
|
|
59
70
|
- Step: plan (タスク分析)
|
|
60
71
|
- Report Directory: .takt/reports/{report_dir}/
|
|
61
72
|
- Report File: .takt/reports/{report_dir}/00-plan.md
|
|
@@ -79,7 +90,7 @@ steps:
|
|
|
79
90
|
|
|
80
91
|
**レポート出力:** 上記の `Report File` に出力してください。
|
|
81
92
|
- ファイルが存在しない場合: 新規作成
|
|
82
|
-
- ファイルが存在する場合: `## Iteration {
|
|
93
|
+
- ファイルが存在する場合: `## Iteration {step_iteration}` セクションを追記
|
|
83
94
|
|
|
84
95
|
**レポートフォーマット:**
|
|
85
96
|
```markdown
|
|
@@ -155,7 +166,8 @@ steps:
|
|
|
155
166
|
```
|
|
156
167
|
instruction_template: |
|
|
157
168
|
## Workflow Context
|
|
158
|
-
- Iteration: {iteration}/{max_iterations}
|
|
169
|
+
- Iteration: {iteration}/{max_iterations}(ワークフロー全体)
|
|
170
|
+
- Step Iteration: {step_iteration}(このステップの実行回数)
|
|
159
171
|
- Step: implement
|
|
160
172
|
- Report Directory: .takt/reports/{report_dir}/
|
|
161
173
|
- Report Files:
|
|
@@ -174,7 +186,7 @@ steps:
|
|
|
174
186
|
|
|
175
187
|
**レポート出力:** 上記の `Report Files` に出力してください。
|
|
176
188
|
- ファイルが存在しない場合: 新規作成
|
|
177
|
-
- ファイルが存在する場合: `## Iteration {
|
|
189
|
+
- ファイルが存在する場合: `## Iteration {step_iteration}` セクションを追記
|
|
178
190
|
|
|
179
191
|
**Scopeレポートフォーマット(実装開始時に作成):**
|
|
180
192
|
```markdown
|
|
@@ -279,7 +291,8 @@ steps:
|
|
|
279
291
|
```
|
|
280
292
|
instruction_template: |
|
|
281
293
|
## Workflow Context
|
|
282
|
-
- Iteration: {iteration}/{max_iterations}
|
|
294
|
+
- Iteration: {iteration}/{max_iterations}(ワークフロー全体)
|
|
295
|
+
- Step Iteration: {step_iteration}(このステップの実行回数)
|
|
283
296
|
- Step: review (アーキテクチャレビュー)
|
|
284
297
|
- Report Directory: .takt/reports/{report_dir}/
|
|
285
298
|
- Report File: .takt/reports/{report_dir}/03-architect-review.md
|
|
@@ -299,7 +312,7 @@ steps:
|
|
|
299
312
|
|
|
300
313
|
**レポート出力:** 上記の `Report File` に出力してください。
|
|
301
314
|
- ファイルが存在しない場合: 新規作成
|
|
302
|
-
- ファイルが存在する場合: `## Iteration {
|
|
315
|
+
- ファイルが存在する場合: `## Iteration {step_iteration}` セクションを追記
|
|
303
316
|
|
|
304
317
|
**レポートフォーマット:**
|
|
305
318
|
```markdown
|
|
@@ -382,7 +395,8 @@ steps:
|
|
|
382
395
|
```
|
|
383
396
|
instruction_template: |
|
|
384
397
|
## Workflow Context
|
|
385
|
-
- Iteration: {iteration}/{max_iterations}
|
|
398
|
+
- Iteration: {iteration}/{max_iterations}(ワークフロー全体)
|
|
399
|
+
- Step Iteration: {step_iteration}(このステップの実行回数)
|
|
386
400
|
- Step: improve
|
|
387
401
|
|
|
388
402
|
## Architect Feedback (これが最新の指示です - 優先して対応してください)
|
|
@@ -462,7 +476,8 @@ steps:
|
|
|
462
476
|
```
|
|
463
477
|
instruction_template: |
|
|
464
478
|
## Workflow Context
|
|
465
|
-
- Iteration: {iteration}/{max_iterations}
|
|
479
|
+
- Iteration: {iteration}/{max_iterations}(ワークフロー全体)
|
|
480
|
+
- Step Iteration: {step_iteration}(このステップの実行回数)
|
|
466
481
|
- Step: ai_review (AI生成コードレビュー)
|
|
467
482
|
- Report Directory: .takt/reports/{report_dir}/
|
|
468
483
|
- Report File: .takt/reports/{report_dir}/04-ai-review.md
|
|
@@ -484,7 +499,7 @@ steps:
|
|
|
484
499
|
|
|
485
500
|
**レポート出力:** 上記の `Report File` に出力してください。
|
|
486
501
|
- ファイルが存在しない場合: 新規作成
|
|
487
|
-
- ファイルが存在する場合: `## Iteration {
|
|
502
|
+
- ファイルが存在する場合: `## Iteration {step_iteration}` セクションを追記
|
|
488
503
|
|
|
489
504
|
**レポートフォーマット:**
|
|
490
505
|
```markdown
|
|
@@ -563,7 +578,8 @@ steps:
|
|
|
563
578
|
```
|
|
564
579
|
instruction_template: |
|
|
565
580
|
## Workflow Context
|
|
566
|
-
- Iteration: {iteration}/{max_iterations}
|
|
581
|
+
- Iteration: {iteration}/{max_iterations}(ワークフロー全体)
|
|
582
|
+
- Step Iteration: {step_iteration}(このステップの実行回数)
|
|
567
583
|
- Step: ai_fix
|
|
568
584
|
|
|
569
585
|
## AI Review Feedback (これが最新の指示です - 優先して対応してください)
|
|
@@ -638,7 +654,8 @@ steps:
|
|
|
638
654
|
```
|
|
639
655
|
instruction_template: |
|
|
640
656
|
## Workflow Context
|
|
641
|
-
- Iteration: {iteration}/{max_iterations}
|
|
657
|
+
- Iteration: {iteration}/{max_iterations}(ワークフロー全体)
|
|
658
|
+
- Step Iteration: {step_iteration}(このステップの実行回数)
|
|
642
659
|
- Step: security_review
|
|
643
660
|
- Report Directory: .takt/reports/{report_dir}/
|
|
644
661
|
- Report File: .takt/reports/{report_dir}/05-security-review.md
|
|
@@ -660,7 +677,7 @@ steps:
|
|
|
660
677
|
|
|
661
678
|
**レポート出力:** 上記の `Report File` に出力してください。
|
|
662
679
|
- ファイルが存在しない場合: 新規作成
|
|
663
|
-
- ファイルが存在する場合: `## Iteration {
|
|
680
|
+
- ファイルが存在する場合: `## Iteration {step_iteration}` セクションを追記
|
|
664
681
|
|
|
665
682
|
**レポートフォーマット:**
|
|
666
683
|
```markdown
|
|
@@ -742,7 +759,8 @@ steps:
|
|
|
742
759
|
```
|
|
743
760
|
instruction_template: |
|
|
744
761
|
## Workflow Context
|
|
745
|
-
- Iteration: {iteration}/{max_iterations}
|
|
762
|
+
- Iteration: {iteration}/{max_iterations}(ワークフロー全体)
|
|
763
|
+
- Step Iteration: {step_iteration}(このステップの実行回数)
|
|
746
764
|
- Step: security_fix
|
|
747
765
|
|
|
748
766
|
## Security Review Feedback (これが最新の指示です - 優先して対応してください)
|
|
@@ -810,7 +828,8 @@ steps:
|
|
|
810
828
|
```
|
|
811
829
|
instruction_template: |
|
|
812
830
|
## Workflow Context
|
|
813
|
-
- Iteration: {iteration}/{max_iterations}
|
|
831
|
+
- Iteration: {iteration}/{max_iterations}(ワークフロー全体)
|
|
832
|
+
- Step Iteration: {step_iteration}(このステップの実行回数)
|
|
814
833
|
- Step: fix
|
|
815
834
|
|
|
816
835
|
## Architect Feedback (これが最新の指示です - 優先して対応してください)
|
|
@@ -889,7 +908,8 @@ steps:
|
|
|
889
908
|
```
|
|
890
909
|
instruction_template: |
|
|
891
910
|
## Workflow Context
|
|
892
|
-
- Iteration: {iteration}/{max_iterations}
|
|
911
|
+
- Iteration: {iteration}/{max_iterations}(ワークフロー全体)
|
|
912
|
+
- Step Iteration: {step_iteration}(このステップの実行回数)
|
|
893
913
|
- Step: supervise (final verification)
|
|
894
914
|
- Report Directory: .takt/reports/{report_dir}/
|
|
895
915
|
- Report Files:
|
|
@@ -917,7 +937,7 @@ steps:
|
|
|
917
937
|
|
|
918
938
|
**レポート出力:** 上記の `Report Files` に出力してください。
|
|
919
939
|
- ファイルが存在しない場合: 新規作成
|
|
920
|
-
- ファイルが存在する場合: `## Iteration {
|
|
940
|
+
- ファイルが存在する場合: `## Iteration {step_iteration}` セクションを追記
|
|
921
941
|
|
|
922
942
|
**Validationレポートフォーマット:**
|
|
923
943
|
```markdown
|