## 概要
`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` が正常動作すること
170 lines
4.5 KiB
Markdown
170 lines
4.5 KiB
Markdown
# スタンス スタイルガイド
|
||
|
||
このガイドは `stances/` のファイルを作成・編集する際のルールを定義する。
|
||
|
||
## テンプレート
|
||
|
||
`templates/stances/` にテンプレートファイルを用意している。新規作成時はコピーして使う。
|
||
|
||
| テンプレート | 用途 | 使用例 |
|
||
|------------|------|--------|
|
||
| `stance.md` | 共有行動規範 | coding, review, testing |
|
||
|
||
---
|
||
|
||
## スタンスとは
|
||
|
||
複数のエージェントが共有する行動規範。user message(instruction 内)に配置される。
|
||
|
||
| 項目 | 内容 |
|
||
|------|------|
|
||
| 目的 | 複数エージェントが共有する行動規範 |
|
||
| 配置 | user message(instruction 内) |
|
||
| 対象 | 複数のエージェント |
|
||
| 判断基準 | 「複数のエージェントが同じルールに従うか?」→ YES ならスタンス |
|
||
|
||
### ペルソナとの分離
|
||
|
||
```
|
||
このルール/知識は…
|
||
├── 特定のエージェントだけが必要 → ペルソナ(ドメイン知識)
|
||
├── 複数のエージェントが共有 → スタンス
|
||
└── 特定のピースの実行手順 → instruction_template(スタンスに書かない)
|
||
```
|
||
|
||
---
|
||
|
||
## フォーマット
|
||
|
||
```markdown
|
||
# {スタンス名}
|
||
|
||
{1文の目的説明。「〜する。」で終わる}
|
||
|
||
## 原則
|
||
|
||
| 原則 | 基準 |
|
||
|------|------|
|
||
| ... | ... |
|
||
|
||
## {ルールカテゴリ1}
|
||
|
||
{自由形式: テーブル、コード例、箇条書き}
|
||
|
||
## {ルールカテゴリ2}
|
||
...
|
||
```
|
||
|
||
---
|
||
|
||
## セクション詳細
|
||
|
||
### 目的説明(必須)
|
||
|
||
- 1文でスタンスの目的を宣言
|
||
- 体言止めまたは「〜する。」で終わる
|
||
|
||
```markdown
|
||
# 良い例
|
||
速さより丁寧さ、実装の楽さよりコードの正確さを優先する。
|
||
|
||
# 悪い例
|
||
コーディングに関するルールです。 ← 曖昧
|
||
```
|
||
|
||
### 原則テーブル(必須)
|
||
|
||
- スタンスの核心を5-10行のテーブルで表現
|
||
- 各行は「原則名 + 1行の基準」
|
||
|
||
### ルールカテゴリ(1つ以上)
|
||
|
||
- `##` で直接カテゴリを作る(`###` を挟まない)
|
||
- テーブル、コード例、箇条書きを自由に使う
|
||
- ネストは `###` まで(`####` は使わない)
|
||
|
||
---
|
||
|
||
## DO / DON'T
|
||
|
||
| DO | DON'T |
|
||
|----|-------|
|
||
| 複数エージェントに共通するルールを記載 | 特定エージェントにしか適用されない知識を含める |
|
||
| コード例で「良い例/悪い例」を示す | 抽象的な原則だけ列挙する |
|
||
| 目的説明は1文で簡潔に | 長い説明文を書く |
|
||
| `##` でカテゴリを直接分ける | `####` 以下のネストを使う |
|
||
|
||
---
|
||
|
||
## スタンスに書いてはいけないもの
|
||
|
||
1. **特定エージェント固有の知識**: Architecture Reviewer だけが使う検出手法等
|
||
2. **ピース固有の概念**: ムーブメント名、レポートファイル名
|
||
3. **ツール固有のパス**: `.takt/reports/` 等の具体的なディレクトリパス
|
||
4. **実行手順**: どのファイルを読め、何を実行しろ等
|
||
|
||
---
|
||
|
||
## 共通ルール
|
||
|
||
### 見出しの深さ
|
||
|
||
最大 `###` まで。`####` 以下は使わない。深くなる場合は構造を見直す。
|
||
|
||
### コード例
|
||
|
||
- 「良い例/悪い例」のペアで示す
|
||
- コメントで `// REJECT` `// OK` `// APPROVE` を付ける
|
||
- 言語は対象プロジェクトに合わせる(TypeScript が主)
|
||
|
||
```typescript
|
||
// REJECT - 問題の簡潔な説明
|
||
const bad = ...
|
||
|
||
// OK - 正しい理由の簡潔な説明
|
||
const good = ...
|
||
```
|
||
|
||
### テーブル
|
||
|
||
判定基準テーブルは「基準 → 判定」の形式で統一する。
|
||
|
||
```markdown
|
||
| 基準 | 判定 |
|
||
|------|------|
|
||
| 条件A | REJECT |
|
||
| 条件B | 警告 |
|
||
| 条件C | OK |
|
||
```
|
||
|
||
### 文体
|
||
|
||
- 体言止めまたは「〜する」の常体
|
||
- 丁寧語(です・ます)は使わない
|
||
- 簡潔に。冗長な説明は避ける
|
||
|
||
### ファイル命名
|
||
|
||
- `{category}.md`(例: `coding.md`, `review.md`, `testing.md`)
|
||
- ハイフン区切り(スネークケース不可)
|
||
- 英語小文字のみ
|
||
- ディレクトリでグルーピングしない(フラット構造)
|
||
|
||
### ファイルサイズ
|
||
|
||
| 目安 | 上限 |
|
||
|------|------|
|
||
| 60-250行 | 300行 |
|
||
|
||
---
|
||
|
||
## チェックリスト
|
||
|
||
- [ ] 目的説明が1文で書かれているか
|
||
- [ ] 原則テーブルがあるか
|
||
- [ ] 複数のエージェントに適用可能な内容か
|
||
- [ ] 特定エージェント固有の知識が混入していないか
|
||
- [ ] ピース固有の概念が含まれていないか
|
||
- [ ] ツール固有のパスが含まれていないか
|
||
- [ ] `####` 以下のネストがないか
|