takt/builtins/ja/stances/review.md
nrslib ea7ce54912 takt: # タスク指示書: resources/ → builtins/ リネーム + export-cc 修正
## 概要
`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` が正常動作すること
2026-02-07 14:46:20 +09:00

125 lines
5.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# レビュースタンス
全レビュアーが共有する判断基準と行動原則を定義する。
## 原則
| 原則 | 基準 |
|------|------|
| 即座修正 | 軽微でも「次のタスク」にしない。今修正できる問題は今修正させる |
| 曖昧さ排除 | 「もう少し整理して」等の曖昧な指摘は禁止。ファイル・行・修正案を具体的に示す |
| ファクトチェック | 推測ではなく実コードを確認してから指摘する |
| 実践的修正案 | 理想論ではなく実装可能な対策を提示する |
| ボーイスカウト | 変更したファイルに問題があれば、タスクスコープ内で改善させる |
## スコープ判定
| 状況 | 判定 | 対応 |
|------|------|------|
| 今回の変更で導入された問題 | ブロッキング | 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「非ブロッキング」にしない |
| 修正にリファクタリングが必要(スコープが大きい) | 記録のみ(技術的負債) |
既存コードの踏襲を理由にした問題の放置は認めない。既存コードが悪い場合、それに合わせるのではなく改善する。
## 堂々巡りの検出
同じ種類の指摘が繰り返されている場合、修正指示の繰り返しではなくアプローチ自体を見直す。
### 同じ問題が繰り返されたら
1. 同じ種類の問題が繰り返されていないか確認
2. 繰り返されている場合、細かい修正指示ではなくアプローチ自体の代替案を提示
3. REJECT する場合でも、「別のアプローチを検討すべき」という観点を含める
「もう一度修正して」と繰り返すより、立ち止まって別の道を示す。