## 概要
`resources/` ディレクトリを `builtins/` にリネームし、用途を明確化。同時に export-cc コマンドを拡張して全リソースをコピーするように修正する。
---
## タスク一覧
### 1. ディレクトリリネーム(優先度: 高)
| 変更前 | 変更後 |
|--------|--------|
| `resources/` | `builtins/` |
| `resources/global/{lang}/` | `builtins/{lang}/`(global/ 階層を除去) |
| `resources/project/` | `builtins/project/` |
| `resources/skill/` | `builtins/skill/` |
### 2. 不要ファイル削除(優先度: 高)
- `builtins/{lang}/prompts/` を削除
- 対象: `interactive-system.md`, `interactive-summary.md`
- 理由: コードから未参照、実体は `src/shared/prompts/`
### 3. コード修正 — パス参照(優先度: 高)
`resources` → `builtins`、`global/{lang}` → `{lang}` に更新:
| ファイル | 修正内容 |
|----------|----------|
| `src/infra/resources/index.ts` | `getResourcesDir()`, `getGlobalResourcesDir()`, `getLanguageResourcesDir()` 等のパス |
| `src/infra/config/paths.ts` | `getBuiltinPiecesDir()`, `getBuiltinPersonasDir()` |
| `src/infra/config/global/initialization.ts` | `copyLanguageConfigYaml()` |
| `src/infra/config/loaders/pieceCategories.ts` | `getLanguageResourcesDir()` 参照 |
| `src/features/config/ejectBuiltin.ts` | `getLanguageResourcesDir()` 参照 |
| `src/features/config/deploySkill.ts` | `getResourcesDir()` 参照 |
### 4. export-cc 修正(優先度: 高)
ファイル: `src/features/config/deploySkill.ts`
**現状**: pieces/ と personas/ のみコピー
**修正後**:
- `builtins/{lang}/` 全体を `~/.claude/skills/takt/` にコピー
- `skill/` のファイル(SKILL.md, references/, takt-command.md)は従来通り
- サマリー表示を新リソースタイプ(stances, instructions, knowledge 等)に対応
- confirm メッセージ修正:
- 現状: `'上書きしますか?'`
- 修正後: `'既存のスキルファイルをすべて削除し、最新版に置き換えます。続行しますか?'`
### 5. テスト修正(優先度: 中)
| ファイル | 修正内容 |
|----------|----------|
| `src/__tests__/initialization.test.ts` | `getLanguageResourcesDir` のパス期待値 |
| `src/__tests__/piece-category-config.test.ts` | mock パス |
| その他 `resources` パスを参照しているテスト | パス更新 |
### 6. ビルド・パッケージ設定(優先度: 中)
| ファイル | 修正内容 |
|----------|----------|
| `package.json` | `files` フィールドで `resources/` → `builtins/` |
| `tsconfig.json` | `resources/` への参照があれば更新 |
| `.gitignore` | 必要に応じて更新 |
### 7. ドキュメント(優先度: 低)
- `CLAUDE.md` の Directory Structure セクションを更新
- JSDoc コメントから `prompts/` 記述を削除
---
## 制約
- `builtins/{lang}/` のフラット構造は変更不可(ピースYAML内の相対パス依存)
- eject のセーフティ(skip-if-exists)は変更不要
- export-cc のセーフティ(SKILL.md 存在チェック + confirm)は維持
---
## 確認方法
- `npm run build` が成功すること
- `npm test` が全てパスすること
- `takt init` / `takt eject` / `takt export-cc` が正常動作すること
5.4 KiB
5.4 KiB
レビュースタンス
全レビュアーが共有する判断基準と行動原則を定義する。
原則
| 原則 | 基準 |
|---|---|
| 即座修正 | 軽微でも「次のタスク」にしない。今修正できる問題は今修正させる |
| 曖昧さ排除 | 「もう少し整理して」等の曖昧な指摘は禁止。ファイル・行・修正案を具体的に示す |
| ファクトチェック | 推測ではなく実コードを確認してから指摘する |
| 実践的修正案 | 理想論ではなく実装可能な対策を提示する |
| ボーイスカウト | 変更したファイルに問題があれば、タスクスコープ内で改善させる |
スコープ判定
| 状況 | 判定 | 対応 |
|---|---|---|
| 今回の変更で導入された問題 | ブロッキング | REJECT |
| 変更ファイル内の既存問題 | ブロッキング | REJECT(ボーイスカウトルール) |
| 変更モジュール内の構造的問題 | ブロッキング | スコープ内なら REJECT |
| 変更外ファイルの問題 | 非ブロッキング | 記録のみ(参考情報) |
| タスクスコープを大きく逸脱するリファクタリング | 非ブロッキング | 提案として記載 |
判定基準
REJECT(差し戻し)
以下のいずれかに該当する場合、例外なく REJECT する。
- テストがない新しい振る舞い
- バグ修正にリグレッションテストがない
any型の使用- フォールバック値の乱用(
?? 'unknown') - 説明コメント(What/How のコメント)
- 未使用コード(「念のため」のコード)
- オブジェクト/配列の直接変更
- エラーの握りつぶし(空の catch)
- TODO コメント(Issue化されていないもの)
- 3箇所以上の重複コード(DRY違反)
- 同じことをするメソッドの増殖(構成の違いで吸収すべき)
- 特定実装の汎用層への漏洩(汎用層に特定実装のインポート・分岐がある)
- 関連フィールドのクロスバリデーション欠如(意味的に結合した設定値の不変条件が未検証)
Warning(警告)
ブロッキングではないが改善を推奨する。
- エッジケース・境界値のテスト不足
- テストが実装の詳細に依存
- 関数/ファイルが複雑すぎる
- 命名が不明確
- TODO/FIXME の放置(Issue番号付きは許容)
- 理由なしの
@ts-ignore、eslint-disable
APPROVE(承認)
全ての REJECT 基準をクリアし、品質基準を満たしている場合に承認する。「条件付き承認」はしない。問題があれば差し戻す。
ファクトチェック
指摘する前に必ず事実を確認する。
| やるべきこと | やってはいけないこと |
|---|---|
| ファイルを開いて実コードを確認 | 「修正済みのはず」と思い込む |
| grep で呼び出し元・使用箇所を検索 | 記憶に基づいて指摘する |
| 型定義・スキーマを突合 | 推測でデッドコードと判断する |
| 生成ファイル(レポート等)とソースを区別 | 生成ファイルをソースコードとしてレビュー |
具体的な指摘の書き方
全ての指摘には以下を含める。
- どのファイルの何行目か
- 何が問題か
- どう修正すべきか
❌ 「構造を見直してください」
❌ 「もう少し整理してください」
❌ 「リファクタリングが必要です」
✅ 「src/auth/service.ts:45 — validateUser() が3箇所で重複。
共通関数に抽出してください」
ボーイスカウトルール
来たときよりも美しく。
対象
- 変更したファイル内の既存の問題(未使用コード、不適切な命名、壊れた抽象化)
- 変更したモジュール内の構造的な問題(責務の混在、不要な依存)
対象外
- 変更していないファイル(既存問題として記録のみ)
- タスクスコープを大きく逸脱するリファクタリング(提案として記載、非ブロッキング)
判定
| 状況 | 判定 |
|---|---|
| 変更ファイル内に明らかな問題がある | REJECT — 一緒に修正させる |
| 冗長な式(同値の短い書き方がある) | REJECT |
| 不要な分岐・条件(到達しない、または常に同じ結果) | REJECT |
| 数秒〜数分で修正可能な問題 | REJECT(「非ブロッキング」にしない) |
| 修正にリファクタリングが必要(スコープが大きい) | 記録のみ(技術的負債) |
既存コードの踏襲を理由にした問題の放置は認めない。既存コードが悪い場合、それに合わせるのではなく改善する。
堂々巡りの検出
同じ種類の指摘が繰り返されている場合、修正指示の繰り返しではなくアプローチ自体を見直す。
同じ問題が繰り返されたら
- 同じ種類の問題が繰り返されていないか確認
- 繰り返されている場合、細かい修正指示ではなくアプローチ自体の代替案を提示
- REJECT する場合でも、「別のアプローチを検討すべき」という観点を含める
「もう一度修正して」と繰り返すより、立ち止まって別の道を示す。