takt/builtins/ja/STANCE_STYLE_GUIDE.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

170 lines
4.5 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.

# スタンス スタイルガイド
このガイドは `stances/` のファイルを作成・編集する際のルールを定義する。
## テンプレート
`templates/stances/` にテンプレートファイルを用意している。新規作成時はコピーして使う。
| テンプレート | 用途 | 使用例 |
|------------|------|--------|
| `stance.md` | 共有行動規範 | coding, review, testing |
---
## スタンスとは
複数のエージェントが共有する行動規範。user messageinstruction 内)に配置される。
| 項目 | 内容 |
|------|------|
| 目的 | 複数エージェントが共有する行動規範 |
| 配置 | user messageinstruction 内) |
| 対象 | 複数のエージェント |
| 判断基準 | 「複数のエージェントが同じルールに従うか?」→ 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文で書かれているか
- [ ] 原則テーブルがあるか
- [ ] 複数のエージェントに適用可能な内容か
- [ ] 特定エージェント固有の知識が混入していないか
- [ ] ピース固有の概念が含まれていないか
- [ ] ツール固有のパスが含まれていないか
- [ ] `####` 以下のネストがないか