takt 0.1.7 → 0.2.0
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 +136 -40
- package/dist/cli.js +11 -2
- package/dist/cli.js.map +1 -1
- package/dist/commands/addTask.d.ts +15 -0
- package/dist/commands/addTask.d.ts.map +1 -0
- package/dist/commands/addTask.js +101 -0
- package/dist/commands/addTask.js.map +1 -0
- package/dist/commands/help.d.ts.map +1 -1
- package/dist/commands/help.js +16 -5
- package/dist/commands/help.js.map +1 -1
- package/dist/commands/index.d.ts +3 -0
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +3 -0
- package/dist/commands/index.js.map +1 -1
- package/dist/commands/refreshBuiltin.d.ts +11 -0
- package/dist/commands/refreshBuiltin.d.ts.map +1 -0
- package/dist/commands/refreshBuiltin.js +37 -0
- package/dist/commands/refreshBuiltin.js.map +1 -0
- package/dist/commands/taskExecution.d.ts +9 -0
- package/dist/commands/taskExecution.d.ts.map +1 -1
- package/dist/commands/taskExecution.js +30 -2
- package/dist/commands/taskExecution.js.map +1 -1
- package/dist/commands/watchTasks.d.ts +12 -0
- package/dist/commands/watchTasks.d.ts.map +1 -0
- package/dist/commands/watchTasks.js +98 -0
- package/dist/commands/watchTasks.js.map +1 -0
- package/dist/resources/index.d.ts +5 -0
- package/dist/resources/index.d.ts.map +1 -1
- package/dist/resources/index.js +33 -9
- package/dist/resources/index.js.map +1 -1
- package/dist/task/display.d.ts.map +1 -1
- package/dist/task/display.js +19 -1
- package/dist/task/display.js.map +1 -1
- package/dist/task/index.d.ts +4 -0
- package/dist/task/index.d.ts.map +1 -1
- package/dist/task/index.js +4 -0
- package/dist/task/index.js.map +1 -1
- package/dist/task/parser.d.ts +33 -0
- package/dist/task/parser.d.ts.map +1 -0
- package/dist/task/parser.js +86 -0
- package/dist/task/parser.js.map +1 -0
- package/dist/task/runner.d.ts +6 -0
- package/dist/task/runner.d.ts.map +1 -1
- package/dist/task/runner.js +33 -42
- package/dist/task/runner.js.map +1 -1
- package/dist/task/schema.d.ts +32 -0
- package/dist/task/schema.d.ts.map +1 -0
- package/dist/task/schema.js +31 -0
- package/dist/task/schema.js.map +1 -0
- package/dist/task/watcher.d.ts +33 -0
- package/dist/task/watcher.d.ts.map +1 -0
- package/dist/task/watcher.js +69 -0
- package/dist/task/watcher.js.map +1 -0
- package/dist/task/worktree.d.ts +31 -0
- package/dist/task/worktree.d.ts.map +1 -0
- package/dist/task/worktree.js +112 -0
- package/dist/task/worktree.js.map +1 -0
- package/dist/utils/slug.d.ts +12 -0
- package/dist/utils/slug.d.ts.map +1 -0
- package/dist/utils/slug.js +18 -0
- package/dist/utils/slug.js.map +1 -0
- package/package.json +3 -2
- package/resources/global/ja/agents/default/architect.md +120 -0
- package/resources/global/ja/workflows/default.yaml +12 -0
|
@@ -264,6 +264,126 @@ function createUser(data: UserData) {
|
|
|
264
264
|
|
|
265
265
|
**これらを見つけたら必ず指摘する。** 一時的な対応でも本番に残る。
|
|
266
266
|
|
|
267
|
+
### 7.5. TODOコメントの厳格な禁止
|
|
268
|
+
|
|
269
|
+
**「将来やる」は決してやらない。今やらないことは永遠にやらない。**
|
|
270
|
+
|
|
271
|
+
**原則: TODOコメントは即REJECT**
|
|
272
|
+
|
|
273
|
+
```kotlin
|
|
274
|
+
// ❌ REJECT - 将来を見越したTODO
|
|
275
|
+
// TODO: 施設IDによる認可チェックを追加
|
|
276
|
+
fun deleteCustomHoliday(@PathVariable id: String) {
|
|
277
|
+
deleteCustomHolidayInputPort.execute(input)
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
// ✅ APPROVE - 今実装する
|
|
281
|
+
fun deleteCustomHoliday(@PathVariable id: String) {
|
|
282
|
+
val currentUserFacilityId = getCurrentUserFacilityId()
|
|
283
|
+
val holiday = findHolidayById(id)
|
|
284
|
+
require(holiday.facilityId == currentUserFacilityId) {
|
|
285
|
+
"Cannot delete holiday from another facility"
|
|
286
|
+
}
|
|
287
|
+
deleteCustomHolidayInputPort.execute(input)
|
|
288
|
+
}
|
|
289
|
+
```
|
|
290
|
+
|
|
291
|
+
**TODOが許容される唯一のケース:**
|
|
292
|
+
|
|
293
|
+
| 条件 | 例 | 判定 |
|
|
294
|
+
|------|-----|------|
|
|
295
|
+
| 外部依存で今は実装不可 + Issue化済み | `// TODO(#123): APIキー取得後に実装` | 許容 |
|
|
296
|
+
| 技術的制約で回避不可 + Issue化済み | `// TODO(#456): ライブラリバグ修正待ち` | 許容 |
|
|
297
|
+
| 「将来実装」「後で追加」 | `// TODO: バリデーション追加` | **REJECT** |
|
|
298
|
+
| 「時間がないので」 | `// TODO: リファクタリング` | **REJECT** |
|
|
299
|
+
|
|
300
|
+
**判断基準:**
|
|
301
|
+
1. **今実装できるか?** → できるなら今やる。TODOは禁止
|
|
302
|
+
2. **外部要因で不可能か?** → Issue化して番号をコメントに記載。それ以外は禁止
|
|
303
|
+
3. **「後でやる」か?** → それは「やらない」と同義。今やるかコードから削除
|
|
304
|
+
|
|
305
|
+
**なぜTODOは悪か:**
|
|
306
|
+
- 時間が経つと文脈が失われる
|
|
307
|
+
- 誰も気づかなくなる
|
|
308
|
+
- セキュリティホールや技術的負債として残る
|
|
309
|
+
- Issue管理と二重管理になる
|
|
310
|
+
|
|
311
|
+
**正しい対処:**
|
|
312
|
+
- 今必要 → 今実装する
|
|
313
|
+
- 今不要 → コードを削除する
|
|
314
|
+
- 外部要因で不可 → Issue化してチケット番号をコメントに入れる
|
|
315
|
+
|
|
316
|
+
### 7.6. DRY原則の即時適用
|
|
317
|
+
|
|
318
|
+
**「後でまとめる」は決して実現しない。重複は見つけた瞬間に抽出する。**
|
|
319
|
+
|
|
320
|
+
**原則: 3回以上の重複を見つけたら即REJECT**
|
|
321
|
+
|
|
322
|
+
```typescript
|
|
323
|
+
// ❌ REJECT - 3箇所で同じバリデーション
|
|
324
|
+
function createOrder(data: OrderData) {
|
|
325
|
+
if (!data.customerId) throw new Error('Customer ID required')
|
|
326
|
+
if (!data.items || data.items.length === 0) throw new Error('Items required')
|
|
327
|
+
// ...
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
function updateOrder(id: string, data: OrderData) {
|
|
331
|
+
if (!data.customerId) throw new Error('Customer ID required')
|
|
332
|
+
if (!data.items || data.items.length === 0) throw new Error('Items required')
|
|
333
|
+
// ...
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
function validateOrder(data: OrderData) {
|
|
337
|
+
if (!data.customerId) throw new Error('Customer ID required')
|
|
338
|
+
if (!data.items || data.items.length === 0) throw new Error('Items required')
|
|
339
|
+
// ...
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
// ✅ APPROVE - 共通化
|
|
343
|
+
function validateOrderData(data: OrderData) {
|
|
344
|
+
if (!data.customerId) throw new Error('Customer ID required')
|
|
345
|
+
if (!data.items || data.items.length === 0) throw new Error('Items required')
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
function createOrder(data: OrderData) {
|
|
349
|
+
validateOrderData(data)
|
|
350
|
+
// ...
|
|
351
|
+
}
|
|
352
|
+
```
|
|
353
|
+
|
|
354
|
+
**DRY違反の検出:**
|
|
355
|
+
|
|
356
|
+
| パターン | 判定 |
|
|
357
|
+
|---------|------|
|
|
358
|
+
| 同じロジックが3箇所以上 | **即REJECT** - 関数/メソッドに抽出 |
|
|
359
|
+
| 同じバリデーションが2箇所以上 | **即REJECT** - バリデーター関数に抽出 |
|
|
360
|
+
| 似たようなコンポーネントが3個以上 | **即REJECT** - 共通コンポーネント化 |
|
|
361
|
+
| コピペで派生したコード | **即REJECT** - パラメータ化または抽象化 |
|
|
362
|
+
|
|
363
|
+
**「後でまとめる」が実現しない理由:**
|
|
364
|
+
1. **気づけない** - 新しいコードを書く人は既存の重複に気づかない
|
|
365
|
+
2. **忘れる** - 「次のタスクでまとめよう」は忘れられる
|
|
366
|
+
3. **コストが増す** - 後から抽出するより今抽出する方が簡単
|
|
367
|
+
4. **バグが増殖** - 重複コードはバグ修正時に修正漏れを生む
|
|
368
|
+
|
|
369
|
+
**正しい対処:**
|
|
370
|
+
- 2回目の重複を書く時点で「3回目が来る」と予測し、抽出を検討
|
|
371
|
+
- 3回目の重複を見つけたら即座に抽出
|
|
372
|
+
- 「似ているが微妙に違う」場合はパラメータ化を検討
|
|
373
|
+
|
|
374
|
+
**例外: 抽象化が早すぎる場合**
|
|
375
|
+
|
|
376
|
+
| 状況 | 対応 |
|
|
377
|
+
|------|------|
|
|
378
|
+
| 2回しか使われていない | 様子見(3回目で抽出) |
|
|
379
|
+
| 偶然似ているだけ | 抽象化しない |
|
|
380
|
+
| ドメインが異なる | 別々に保つ(AHA原則) |
|
|
381
|
+
|
|
382
|
+
**AHA原則(Avoid Hasty Abstractions)とのバランス:**
|
|
383
|
+
- 2回の重複 → 様子見
|
|
384
|
+
- 3回の重複 → 即抽出
|
|
385
|
+
- ドメインが異なる重複 → 抽象化しない(例: 顧客用バリデーションと管理者用バリデーションは別物)
|
|
386
|
+
|
|
267
387
|
### 8. 品質特性
|
|
268
388
|
|
|
269
389
|
| 特性 | 確認観点 |
|
|
@@ -184,6 +184,11 @@ steps:
|
|
|
184
184
|
planステップで立てた計画に従って実装してください。
|
|
185
185
|
計画レポート(00-plan.md)を参照し、実装を進めてください。
|
|
186
186
|
|
|
187
|
+
**重要**: 実装と同時に単体テストを追加してください。
|
|
188
|
+
- 新規作成したクラス・関数には単体テストを追加
|
|
189
|
+
- 既存コードを変更した場合は該当するテストを更新
|
|
190
|
+
- テストファイルの配置: プロジェクトの規約に従う(例: `__tests__/`, `*.test.ts`)
|
|
191
|
+
|
|
187
192
|
**レポート出力:** 上記の `Report Files` に出力してください。
|
|
188
193
|
- ファイルが存在しない場合: 新規作成
|
|
189
194
|
- ファイルが存在する場合: `## Iteration {step_iteration}` セクションを追記
|
|
@@ -310,6 +315,12 @@ steps:
|
|
|
310
315
|
|
|
311
316
|
変更をレビューしてフィードバックを提供してください。
|
|
312
317
|
|
|
318
|
+
**レビュー観点:**
|
|
319
|
+
- 構造・設計の妥当性
|
|
320
|
+
- コード品質
|
|
321
|
+
- 変更スコープの適切性
|
|
322
|
+
- **テストカバレッジ**: 実装に対応する単体テストが追加されているか
|
|
323
|
+
|
|
313
324
|
**レポート出力:** 上記の `Report File` に出力してください。
|
|
314
325
|
- ファイルが存在しない場合: 新規作成
|
|
315
326
|
- ファイルが存在する場合: `## Iteration {step_iteration}` セクションを追記
|
|
@@ -327,6 +338,7 @@ steps:
|
|
|
327
338
|
- [x] 構造・設計
|
|
328
339
|
- [x] コード品質
|
|
329
340
|
- [x] 変更スコープ
|
|
341
|
+
- [x] テストカバレッジ
|
|
330
342
|
|
|
331
343
|
## 問題点(REJECTの場合)
|
|
332
344
|
| # | 場所 | 問題 | 修正案 |
|