Repository navigation
Add LSP support to all commands and skills - #3
Conversation
Add comprehensive LSP (Language Server Protocol) integration: - New docs/LSP_INTEGRATION.md with complete LSP usage guide - Add LSP sections to 5 core commands (work, harness-review, validate, refactor, ci-setup) - Add LSP sections to 4 key skills (impl, review, troubleshoot, verify) - Update generate-claude-settings with CCLSP MCP server configuration - Add CCLSP to settings.security.json.template LSP features enabled: - Go-to-definition for code navigation - Find-references for impact analysis - LSP Diagnostics for pre-build error detection - LSP Rename for safe refactoring
|
Caution Review failedThe pull request is closed. WalkthroughClaude CodeのLSP統合に関する新規ガイド追加、既存コマンド/スキル文書へ「🔧 LSP 機能の活用」セクション追記、MCP設定テンプレート追加およびバージョンを2.5.7→2.5.8に更新したドキュメント/設定中心の変更です。 Changes
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~25 minutes
Possibly related PRs
Poem
Pre-merge checks and finishing touches✅ Passed checks (3 passed)
📜 Recent review detailsConfiguration used: Organization UI Review profile: CHILL Plan: Pro 📒 Files selected for processing (1)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Actionable comments posted: 6
🧹 Nitpick comments (4)
skills/troubleshoot/SKILL.md (1)
250-262: コードブロックに言語識別子を追加することを推奨します。コードブロックに言語識別子が指定されていません。テキスト出力例の場合でも、一貫性とレンダリングの正確性のため、識別子を追加することをお勧めします。
🔎 提案する修正
-``` +```text 🔍 LSP 診断実行中... 📊 診断結果:-``` +```text 🔍 原因追跡 エラー: Cannot read property 'name' of undefined静的解析ツールからの指摘: markdownlint MD040 (fenced-code-language)
Also applies to: 266-277
skills/impl/SKILL.md (1)
62-67: コードブロックに言語識別子を追加することを推奨します。チェックリスト形式のテキストブロックに言語識別子が指定されていません。一貫性のため、
textまたはmarkdownの識別子を追加することをお勧めします。🔎 提案する修正
-``` +```text 実装完了時チェック: 1. LSP Diagnostics を実行 2. エラー: 0件を確認 3. 警告: 必要に応じて対応</details> 静的解析ツールからの指摘: markdownlint MD040 (fenced-code-language) </blockquote></details> <details> <summary>skills/verify/SKILL.md (1)</summary><blockquote> `46-52`: **コードブロックに言語識別子を追加することを推奨します。** ワークフローテキストを含むコードブロックに言語識別子が指定されていません。マークダウンレンダリングの一貫性のため、識別子を追加することをお勧めします。 <details> <summary>🔎 提案する修正</summary> ```diff -``` +```text ビルド前チェック: 1. LSP Diagnostics を実行 2. エラー: 0件を確認 → ビルド実行 3. エラーあり → 先にエラーを修正```diff -``` +```text 📊 LSP 検証結果 Step 1: Diagnostics ├── エラー: 0件 ✅ └── 警告: 2件 ⚠️ Step 2: ビルド └── 成功 ✅ Step 3: テスト └── 15/15 通過 ✅ → 検証完了</details> 静的解析ツールからの指摘: markdownlint MD040 (fenced-code-language) Also applies to: 64-78 </blockquote></details> <details> <summary>commands/core/work.md (1)</summary><blockquote> `104-141`: **実装ワークフローにおけるLSP活用ガイドが分かりやすいです!** 実装の各段階(実装前・実装中・実装後)でのLSP機能の活用方法が明確に整理されています。特に、各LSP機能の具体的な効果(「意図しない破壊的変更を防止」「ビルド前に問題を発見」など)が記載されており、実装者にとって有用な情報となっています。 一貫性のため、Lines 125-130のコードブロックに言語識別子(`text`)を追加することを検討してください: <details> <summary>🔎 提案する修正</summary> ```diff -``` +```text 実装完了後に LSP Diagnostics を実行: → 型エラーがないことを確認 → 未使用変数・import を検出 → 潜在的な問題を早期発見</details> </blockquote></details> </blockquote></details> <details> <summary>📜 Review details</summary> **Configuration used**: Organization UI **Review profile**: CHILL **Plan**: Pro <details> <summary>📥 Commits</summary> Reviewing files that changed from the base of the PR and between cd91f47dc37376502340134a251828baf281f911 and 237ba1f866b087ff4352088892bdca962996aaa2. </details> <details> <summary>📒 Files selected for processing (13)</summary> * `CHANGELOG.md` (1 hunks) * `commands/core/harness-review.md` (1 hunks) * `commands/core/validate.md` (1 hunks) * `commands/core/work.md` (1 hunks) * `commands/optional/ci-setup.md` (1 hunks) * `commands/optional/refactor.md` (1 hunks) * `docs/LSP_INTEGRATION.md` (1 hunks) * `skills/impl/SKILL.md` (1 hunks) * `skills/review/SKILL.md` (1 hunks) * `skills/setup/generate-claude-settings/doc.md` (1 hunks) * `skills/troubleshoot/SKILL.md` (1 hunks) * `skills/verify/SKILL.md` (1 hunks) * `templates/claude/settings.security.json.template` (2 hunks) </details> <details> <summary>🧰 Additional context used</summary> <details> <summary>🪛 markdownlint-cli2 (0.18.1)</summary> <details> <summary>skills/impl/SKILL.md</summary> 62-62: Fenced code blocks should have a language specified (MD040, fenced-code-language) </details> <details> <summary>skills/troubleshoot/SKILL.md</summary> 250-250: Fenced code blocks should have a language specified (MD040, fenced-code-language) --- 266-266: Fenced code blocks should have a language specified (MD040, fenced-code-language) </details> <details> <summary>commands/core/validate.md</summary> 38-38: Fenced code blocks should have a language specified (MD040, fenced-code-language) --- 56-56: Fenced code blocks should have a language specified (MD040, fenced-code-language) </details> <details> <summary>skills/verify/SKILL.md</summary> 46-46: Fenced code blocks should have a language specified (MD040, fenced-code-language) --- 64-64: Fenced code blocks should have a language specified (MD040, fenced-code-language) </details> <details> <summary>commands/optional/refactor.md</summary> 47-47: Fenced code blocks should have a language specified (MD040, fenced-code-language) --- 68-68: Fenced code blocks should have a language specified (MD040, fenced-code-language) --- 86-86: Fenced code blocks should have a language specified (MD040, fenced-code-language) </details> <details> <summary>commands/core/harness-review.md</summary> 44-44: Fenced code blocks should have a language specified (MD040, fenced-code-language) --- 62-62: Fenced code blocks should have a language specified (MD040, fenced-code-language) </details> <details> <summary>docs/LSP_INTEGRATION.md</summary> 85-85: Fenced code blocks should have a language specified (MD040, fenced-code-language) --- 94-94: Fenced code blocks should have a language specified (MD040, fenced-code-language) --- 103-103: Fenced code blocks should have a language specified (MD040, fenced-code-language) --- 112-112: Fenced code blocks should have a language specified (MD040, fenced-code-language) --- 121-121: Fenced code blocks should have a language specified (MD040, fenced-code-language) --- 132-132: Fenced code blocks should have a language specified (MD040, fenced-code-language) --- 152-152: Fenced code blocks should have a language specified (MD040, fenced-code-language) --- 161-161: Fenced code blocks should have a language specified (MD040, fenced-code-language) --- 170-170: Fenced code blocks should have a language specified (MD040, fenced-code-language) </details> </details> </details> <details> <summary>🔇 Additional comments (4)</summary><blockquote> <details> <summary>CHANGELOG.md (1)</summary><blockquote> `13-66`: **変更履歴の記載が充実しています!** LSP統合に関する変更履歴が非常に分かりやすく記載されています。Before/After形式での説明、VibeCoder向けの具体的な使い方、変更内容の詳細なリストなど、ユーザー目線で必要な情報が網羅されています。 </blockquote></details> <details> <summary>skills/setup/generate-claude-settings/doc.md (1)</summary><blockquote> `66-94`: **LSP設定ドキュメントが充実しています!** CCLSP の設定方法と利用可能なLSP機能(`lookup_symbol_definition`、`find_symbol_references`、`rename_symbol`、`get_diagnostics`)が明確に文書化されています。JSON設定例も正しく、実装者にとって分かりやすい内容です。 </blockquote></details> <details> <summary>commands/optional/ci-setup.md (1)</summary><blockquote> `89-89`: 参照ドキュメント `docs/LSP_INTEGRATION.md` は存在し、LSP統合機能について詳細に記載されています。ファイルは198行で構成され、LSP機能の概要、対応言語、および活用シーンなどの内容を含んでいます。相対パスの参照も正しく設定されています。 </blockquote></details> <details> <summary>docs/LSP_INTEGRATION.md (1)</summary><blockquote> `38-63`: **マークダウンリント:フェンスコードブロックに言語指定を追加してください** 複数のコードブロックで言語指定がありません。マークダウンリント(MD040)を解決するために、各コードブロックに言語タイプを指定してください。 <details> <summary>🔎 修正提案</summary> ```diff ## LSP の有効化 ### 方法1: 環境変数(推奨) -```bash +``` export ENABLE_LSP_TOOL=1 claude -``` +``` ### 方法2: MCP サーバー経由(より安定) `.claude/settings.json`: -```json +``` { "mcpServers": { "cclsp": { "command": "npx", "args": ["@ktnyt/cclsp"] } }, "permissions": { "allow": [ "mcp__cclsp__*" ] } } -``` +```Likely an incorrect or invalid review comment.
| ``` | ||
| 📊 LSP 診断結果 | ||
|
|
||
| ファイル: src/components/UserForm.tsx | ||
|
|
||
| | 行 | 重要度 | メッセージ | | ||
| |----|--------|-----------| | ||
| | 15 | Error | 型 'string' を型 'number' に割り当てることはできません | | ||
| | 23 | Warning | 'tempData' は宣言されていますが、使用されていません | | ||
| | 42 | Info | この async 関数には await がありません | | ||
|
|
||
| → 型エラー・未使用変数を自動検出 | ||
| ``` | ||
|
|
||
| ### LSP Find-references による影響範囲分析 | ||
|
|
||
| 変更されたコードがどこで使われているかを LSP で分析: | ||
|
|
||
| ``` | ||
| 🔍 変更の影響範囲 | ||
|
|
||
| 変更: src/utils/formatDate.ts | ||
|
|
||
| 参照箇所: | ||
| ├── src/components/DateDisplay.tsx:12 | ||
| ├── src/components/EventCard.tsx:45 | ||
| ├── src/pages/Dashboard.tsx:78 | ||
| └── tests/utils/formatDate.test.ts:5 | ||
|
|
||
| → 4ファイルに影響 | ||
| → テストでカバーされていることを確認 ✅ | ||
| ``` |
There was a problem hiding this comment.
🛠️ Refactor suggestion | 🟠 Major
マークダウンリント(MD040):フェンスコードブロックに言語指定を追加
セクション内のコードブロック(行 44-56、62-75)に言語指定がありません。出力テーブル形式なので text を指定してください。
🔎 修正提案
### LSP Diagnostics によるコード品質チェック
-```
+```text
📊 LSP 診断結果
...
-```
+```
### LSP Find-references による影響範囲分析
-```
+```text
🔍 変更の影響範囲
...
-```
+```🧰 Tools
🪛 markdownlint-cli2 (0.18.1)
44-44: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
62-62: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
🤖 Prompt for AI Agents
In commands/core/harness-review.md around lines 44 to 75, the fenced code blocks
lack a language specifier causing MD040; add the language tag "text" to both
code block openings (the block containing the LSP 診断結果 at ~44-56 and the block
for LSP Find-references at ~62-75) so they read ```text, and ensure their
corresponding closing fences remain unchanged.
| ``` | ||
| 📊 LSP 診断結果(プロジェクト全体) | ||
|
|
||
| ファイル数: 42 | ||
| エラー: 0件 ✅ | ||
| 警告: 3件 ⚠️ | ||
| 情報: 5件 | ||
|
|
||
| ⚠️ 警告: | ||
| ├── src/components/Header.tsx:15 - 未使用の変数 'debug' | ||
| ├── src/utils/helpers.ts:23 - 非推奨の API 使用 | ||
| └── src/pages/Settings.tsx:45 - any 型の使用 | ||
|
|
||
| → ビルドは通るが、品質改善の余地あり | ||
| ``` | ||
|
|
||
| ### 検証フローへの統合 | ||
|
|
||
| ``` | ||
| /validate full 実行時の流れ: | ||
|
|
||
| 1. 環境変数チェック | ||
| 2. 依存関係チェック | ||
| 3. LSP Diagnostics ← NEW | ||
| 4. Lint | ||
| 5. 型チェック | ||
| 6. ビルド | ||
| 7. テスト | ||
| 8. セキュリティ監査 | ||
| ``` |
There was a problem hiding this comment.
🛠️ Refactor suggestion | 🟠 Major
マークダウンリント(MD040):フェンスコードブロックに言語を指定してください
セクション内のコードブロック(行 38-52、56-67)に言語指定がありません。出力例のテキスト形式なので text を指定してください。
🔎 修正提案
### LSP Diagnostics による事前検証
-```
+```text
📊 LSP 診断結果(プロジェクト全体)
...
-```
+```
### 検証フローへの統合
-```
+```text
/validate full 実行時の流れ:
...
-```
+```🧰 Tools
🪛 markdownlint-cli2 (0.18.1)
38-38: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
56-56: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
🤖 Prompt for AI Agents
In commands/core/validate.md around lines 38-67, the fenced code blocks used for
the LSP diagnostics and the validation flow examples lack a language tag which
triggers MD040; add the language identifier "text" to both code fences (the
block spanning lines 38-52 and the block spanning lines 56-67) so they become
```text ... ``` to satisfy Markdown linting.
| ``` | ||
| 🔄 LSP Rename 実行 | ||
|
|
||
| 対象: formatDate → formatDateToJapanese | ||
|
|
||
| 変更箇所: | ||
| ├── src/utils/date.ts:15 (定義) | ||
| ├── src/components/DateDisplay.tsx:5 (import) | ||
| ├── src/components/DateDisplay.tsx:12 (使用) | ||
| ├── src/components/EventCard.tsx:8 (import) | ||
| ├── src/components/EventCard.tsx:23 (使用) | ||
| └── tests/utils/date.test.ts:3 (import) | ||
|
|
||
| 合計: 6箇所を一括変更 | ||
| → 漏れなく安全にリネーム完了 ✅ | ||
| ``` | ||
|
|
||
| ### LSP Find-references による影響分析 | ||
|
|
||
| リファクタリング前に必ず実行: | ||
|
|
||
| ``` | ||
| 🔍 参照分析 | ||
|
|
||
| 対象: validateEmail 関数 | ||
|
|
||
| 参照箇所: | ||
| ├── src/components/SignupForm.tsx:45 | ||
| ├── src/components/SettingsForm.tsx:23 | ||
| ├── src/api/auth/register.ts:12 | ||
| └── tests/utils/validate.test.ts:8 | ||
|
|
||
| → 4箇所で使用中 | ||
| → テストあり ✅ | ||
| → リファクタリング可能 | ||
| ``` | ||
|
|
||
| ### LSP Diagnostics による変更後検証 | ||
|
|
||
| ``` | ||
| リファクタリング後: | ||
|
|
||
| 📊 LSP 診断結果 | ||
|
|
||
| エラー: 0件 ✅ | ||
| 警告: 0件 ✅ | ||
|
|
||
| → 変更による問題なし | ||
| → ビルド・テスト実行へ進む | ||
| ``` | ||
|
|
||
| ### VibeCoder 向けの言い方 | ||
|
|
||
| | やりたいこと | 言い方 | | ||
| |-------------|--------| | ||
| | 名前を変えたい | 「`getData` を `fetchUserData` にリネームして」 | | ||
| | 使用箇所を調べたい | 「この関数はどこで使われてる?」 | | ||
| | 変更後のエラーをチェック | 「リファクタリング後に診断して」 | | ||
|
|
||
| 詳細: [docs/LSP_INTEGRATION.md](../../docs/LSP_INTEGRATION.md) |
There was a problem hiding this comment.
🛠️ Refactor suggestion | 🟠 Major
マークダウンリント(MD040):コードブロックに言語指定を追加
複数のコードブロック(行 47-62、68-82、86-96)に言語指定がありません。出力例やテキスト形式なので text を指定してください。
🔎 修正パターン
### LSP Rename による安全なリネーム
-```
+```text
🔄 LSP Rename 実行
...
-```
+```
### LSP Find-references による影響分析
-```
+```text
🔍 参照分析
...
-```
+```
### LSP Diagnostics による変更後検証
-```
+```text
リファクタリング後:
...
-```
+```🧰 Tools
🪛 markdownlint-cli2 (0.18.1)
47-47: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
68-68: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
86-86: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
🤖 Prompt for AI Agents
commands/optional/refactor.md lines 47-106: Several fenced code blocks (lines
47-62, 68-82, 86-96) lack a language identifier which triggers MD040; update
each opening fence to use ```text and ensure matching closing fences remain ```
so the blocks are explicitly marked as plain text, i.e., replace each ``` with
```text for the three code block ranges and keep the corresponding closing ```
intact.
| ``` | ||
| LSP 活用ポイント: | ||
| - 定義ジャンプで既存コードの理解を高速化 | ||
| - 参照検索で影響範囲を事前把握 | ||
| - 診断で実装中のエラーを即座に検出 | ||
| ``` | ||
|
|
||
| ### `/harness-review` - レビュー時 | ||
|
|
||
| ``` | ||
| LSP 活用ポイント: | ||
| - Diagnostics で型エラー・未使用変数を自動検出 | ||
| - Find-references で変更の影響範囲を確認 | ||
| - 静的解析結果をレビュー観点に追加 | ||
| ``` | ||
|
|
||
| ### `/refactor` - リファクタリング時 | ||
|
|
||
| ``` | ||
| LSP 活用ポイント: | ||
| - Rename でシンボルを安全に一括変更 | ||
| - Find-references で漏れのない変更を保証 | ||
| - Diagnostics で変更後の問題を即座に検出 | ||
| ``` | ||
|
|
||
| ### `/troubleshoot` - 問題解決時 | ||
|
|
||
| ``` | ||
| LSP 活用ポイント: | ||
| - Diagnostics でエラー箇所を正確に特定 | ||
| - Go-to-definition で問題のあるコードの原因を追跡 | ||
| - 型情報で期待値と実際の不一致を発見 | ||
| ``` | ||
|
|
||
| ### `/validate` - 検証時 | ||
|
|
||
| ``` | ||
| LSP 活用ポイント: | ||
| - プロジェクト全体の Diagnostics を実行 | ||
| - 型エラー・警告の一覧を生成 | ||
| - ビルド前に問題を検出 | ||
| ``` |
There was a problem hiding this comment.
🛠️ Refactor suggestion | 🟠 Major
マークダウンリント:VibeCoder向けセクションのコードブロックに言語指定を追加
セクション内の複数のコードブロック(行 85, 94, 103, 112, 121)に言語指定がありません。すべて同じパターンで修正可能です:
🔎 修正パターン
-```
+```text
LSP 活用ポイント:
- 定義ジャンプで既存コードの理解を高速化
- 参照検索で影響範囲を事前把握
- 診断で実装中のエラーを即座に検出
-```
+```各コードブロックに text または plaintext を言語タイプとして指定してください。
🧰 Tools
🪛 markdownlint-cli2 (0.18.1)
85-85: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
94-94: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
103-103: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
112-112: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
121-121: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
🤖 Prompt for AI Agents
docs/LSP_INTEGRATION.md around lines 85 to 126: several code fences used for
"LSP 活用ポイント" blocks are missing a language specifier; update each opening fence
at lines ~85, 94, 103, 112, and 121 from ``` to ```text (or ```plaintext) so
they become fenced as ```text and keep the corresponding closing ``` unchanged,
ensuring consistent markdown linting.
| ## LSP 診断の出力形式 | ||
|
|
||
| ``` | ||
| 📊 LSP 診断結果 | ||
|
|
||
| ファイル: src/components/UserForm.tsx | ||
|
|
||
| | 行 | 重要度 | メッセージ | | ||
| |----|--------|-----------| | ||
| | 15 | Error | 型 'string' を型 'number' に割り当てることはできません | | ||
| | 23 | Warning | 'tempData' は宣言されていますが、使用されていません | | ||
| | 42 | Info | この条件は常に true です | | ||
|
|
||
| 合計: エラー 1件 / 警告 1件 / 情報 1件 | ||
| ``` | ||
|
|
||
| --- | ||
|
|
||
| ## LSP 活用のベストプラクティス | ||
|
|
||
| ### 1. 実装前に定義を確認 | ||
|
|
||
| ``` | ||
| 実装前: | ||
| 1. 関連するシンボルの定義を LSP で確認 | ||
| 2. 既存のパターンを把握 | ||
| 3. 影響範囲を Find-references で調査 | ||
| ``` | ||
|
|
||
| ### 2. 変更後に診断を実行 | ||
|
|
||
| ``` | ||
| 変更後: | ||
| 1. LSP Diagnostics を実行 | ||
| 2. エラー・警告を確認 | ||
| 3. 問題があれば即座に修正 | ||
| ``` | ||
|
|
||
| ### 3. リファクタリングは LSP Rename を使用 | ||
|
|
||
| ``` | ||
| リファクタリング: | ||
| 1. 変更対象を Find-references で確認 | ||
| 2. LSP Rename で一括変更 | ||
| 3. Diagnostics で問題がないことを確認 | ||
| ``` |
There was a problem hiding this comment.
🛠️ Refactor suggestion | 🟠 Major
マークダウンリント:診断出力形式とベストプラクティスセクションのコードブロック言語指定
行 132-144、152-157、161-166、170-175 のコードブロックに言語指定がありません。出力例やリスト形式なので text または plaintext を指定してください。
🔎 修正例(行 132)
## LSP 診断の出力形式
-```
+```text
📊 LSP 診断結果
ファイル: src/components/UserForm.tsx
...
-```
+```他の同様のコードブロックも同じパターンで修正してください。
Committable suggestion skipped: line range outside the PR's diff.
🧰 Tools
🪛 markdownlint-cli2 (0.18.1)
132-132: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
152-152: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
161-161: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
170-170: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
🤖 Prompt for AI Agents
In docs/LSP_INTEGRATION.md around lines 130 to 175, several fenced code blocks
(the LSP diagnostic example and the best-practices snippets) lack a language
specifier; update each triple-backtick fence at lines ~132-144, ~152-157,
~161-166, and ~170-175 to include a language token such as text or plaintext
(e.g., ```text) so the blocks are treated as plain text and rendered/linted
correctly; make the change consistently for all four blocks.
| "allow": [ | ||
| "mcp__cclsp__*" | ||
| ], |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
cat -n templates/claude/settings.security.json.templateRepository: Chachamaru127/claude-code-harness
Length of output: 1189
npm パッケージ名が間違っています。修正が必要です。
npm パッケージは @ktnyt/cclsp ではなく cclsp として公開されており、バージョン 0.6.2 が最新版です。33行目の args を "@ktnyt/cclsp" から "cclsp" に修正してください。公式ドキュメントでは npx cclsp@latest setup を推奨しています。
🤖 Prompt for AI Agents
In templates/claude/settings.security.json.template around line 33, the npm
package arg is incorrect; change the args value from "@ktnyt/cclsp" to "cclsp"
(keeping any existing quoting/formatting), and if there's a hardcoded version
reference update it to the current 0.6.2 or remove the pinned version so callers
can use npx cclsp@latest as recommended.
- Bump version to 2.5.8 (VERSION, plugin.json, README badge) - Fix Claude Code version in LSP_INTEGRATION.md (v2.0.30+ → v2.0.74+) - Update CHANGELOG references to use official source URLs 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add clear guidelines for when to use LSP vs Grep: - Usage comparison table (symbols → LSP, text search → Grep) - Concrete examples with user questions - VibeCoder-friendly decision criteria 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
When /HAR:review is invoked bare (no arguments) and many commits have accumulated since the last release tag, the Step 0.1 auto- detection used the tag as BASE_REF, producing an oversized review scope. Yesterday's session had 17+ commits since v4.0.0, and the reviewer had to manually narrow to HEAD~6 to produce a usable review. Fix: add an upper-bound fallback in Step 0.1: - Lower bound (existing): 0 commits → HEAD~5 fallback - Upper bound (new): >10 commits → HEAD~10 fallback Result: bare review scope is clamped to [1, 10] commits, which fits Claude's working memory for detailed 5-perspective review. Users who want the full range can still specify `code` explicitly or pass an older ref as argument. Scope: - skills/harness-review/SKILL.md (main) - codex/.codex/skills/harness-review/SKILL.md (mirror) - opencode/skills/harness-review/SKILL.md (mirror) All 3 files kept in sync; check-consistency.sh passes. Closes review finding #3 (Claude Sonnet 4.6 review, Apr 11 2026). Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Previous Japanese/summary-first output still carried 3 barriers for non-expert readers: 1. Technical identifiers (validTargets, HookEventName, etc.) inlined in issue descriptions blocked comprehension 2. JSON output occupied visual center, forcing non-experts to scroll past 100+ lines of machine-readable data 3. Severity used English words (critical/major/minor/recommendation) mixed with Japanese body Redesign the Step 3 result summary template with explicit UX axes: Information density: MID (not LOW, not HIGH) Cognitive load: MIN ## New template structure (top to bottom) 1. Verdict headline: one-line Japanese conclusion with bilingual verdict (✅ 合格 (APPROVE) / ❌ 要修正 (REQUEST_CHANGES)) 2. ✨ 良かったところ: 2-3 positive findings in plain Japanese — new required section, acts as reassurance anchor for non-experts (technical reviews usually skip positive feedback) 3.⚠️ 気になったところ: each finding uses strict 4-layer structure - Japanese title (no jargon) - 問題 (plain-language description) - 対応 (actionable next step, verb-led) - 重要度 (Japanese + emoji: 🔴 致命的 / 🟠 重要 / 🟡 軽微 / 🟢 推奨) - 技術的位置 (開発者向け) — isolated pocket for file:line + jargon 4. 🎬 次のアクション: 1-3 items in Japanese 5. 📊 自動検証の結果: checklist in Japanese 6. 📦 詳細データ: demoted section for JSON + detail tables, marked "非専門家は読み飛ばし可" ## New prohibitions (UX guards) - No English severity words in body text - No jargon in 問題/対応 — isolate to 技術的位置 only - No JSON-first output - 良かったところ mandatory even for APPROVE (reassurance) ## Base ref transparency (fixes review finding #3 from last session) When Step 0.1 upper-bound cap fires (>10 commits → HEAD~10), the 対象 line MUST show both original candidate ref and scoped range: 対象: HEAD~10..HEAD (v4.0.0 から 21 commits のうち直近 10 を対象) Prevents silent omission when commits get truncated. ## Verification - ./tests/validate-plugin.sh: 42 pass / 0 fail - ./scripts/ci/check-consistency.sh: all pass - 3-way mirror sync verified with diff -q Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
旧テストは初回 sync 後に checksum を取っていたため、checked-in plugin.json が古い場合でも sync が黙って書き換えて 2nd/3rd run と一致してしまい drift を masked していた。 修正: pre-sync (checked-in) の checksum を取り、初回 sync 後と比較。 drift 検出時は明示的な FAIL メッセージで再生成手順を案内。
Two semantic/security fixes surfaced by CodeRabbit review. Kept scope to the critical items; cosmetic findings (deleted-concepts.yaml allowlist, CHANGELOG markdownlint, scanner ring buffer optimization, jq null-safe mapping) are deferred to a 4.3.2 follow-up issue. Fix #3 — mem health subcommand now probes the daemon (DoD alignment): - previously runMemHealthCheck() only inspected ~/.claude-mem/ files, so a dead daemon would still report healthy if settings.json existed - added probeHarnessMemDaemon(): TCP connect to HARNESS_MEM_HOST:HARNESS_MEM_PORT (default 127.0.0.1:37888) with 500ms timeout - probe runs after file integrity check; failure returns {healthy:false, reason:"daemon-unreachable"} and exit 1 - package-level daemonProbe variable enables test injection; existing 3 tests stub it (healthy→nil, not-initialized/corrupted→early-exit), new TestRunMemHealth_DaemonUnreachable verifies the TCP-failure path Fix #4 — defaultMemHealthCheck no longer executes projectRoot/bin/harness: - previous resolution (projectRoot/bin/harness → PATH fallback) exposed a guardrail-bypass risk if a malicious binary was committed to the repo - new resolveHarnessBinary() uses os.Executable() → CLAUDE_PLUGIN_ROOT/bin/harness → exec.LookPath("harness"), never touching the repo path - projectRoot arg retained in signature for backward compatibility, marked unused with _ prefix and documented CHANGELOG [4.3.1] — Phase 48.1.1 description updated to reflect the 2-stage health check (file integrity + daemon TCP probe) and trusted binary resolution. Deferred to 4.3.2 follow-up: - .claude/rules/deleted-concepts.yaml:180 bin/ prefix too broad - CHANGELOG MD040 fenced code language tag - monitor.go scanner → ring buffer for last 200 lines - test-memory-hook-wiring.sh jq map(.command) null-safe verify: - go vet ./... → no warnings - go test ./internal/session/... ./cmd/harness/... → all PASS (incl. new TestRunMemHealth_DaemonUnreachable) - tests/validate-plugin.sh → 41 pass / 0 fail Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
…ng (#93) * feat(session-monitor): Phase 48 — harness-mem health / advisor drift / Plans.md 閾値の 3 能動監視を追加 - 48.1.1: `bin/harness mem health` サブコマンドを新設。~/.claude-mem/ の存在・設定ファイルチェックを行い JSON で healthy/reason を返す。MonitorHandler.MemHealthCommand テスト注入フィールドを追加し、 session.json に harness_mem フィールドを記録。unhealthy 時は `⚠️ harness-mem unhealthy: {reason}` を出力。 - 48.1.2: session.events.jsonl を末尾 200 行スキャンし TTL 超過の未応答 advisor-request.v1 を `⚠️ advisor drift: request_id={id}, waiting {elapsed}s` で報告。orchestration.advisor_ttl_seconds (default 600) で上書き可能。reviewer drift(review-result.v1 未応答)も同ロジック。 - 48.1.3: Plans.md の WIP>=wip_threshold(5) または stale_for>=stale_hours(24)h で `⚠️ plans drift: WIP={n}, stale_for={hours}h` を出力。monitor.plans_drift config で上書き可能。 - config.yaml に Phase 48 のデフォルト閾値セクションを追加。 - deleted-concepts.yaml の claude-mem allowlist に mem.go / mem_test.go / go/harness バイナリを追加。 全テスト pass: go test ./... (TestDoctor_Residue 含む) パフォーマンス: time go run session-monitor → 1.5s (< 3s 要件) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * docs(plans): mark Phase 48 cc:完了 [888b195] and log in CHANGELOG Phase 48 の 3 能動監視(harness-mem health / advisor drift / Plans.md 閾値)は commit 888b195 で実装済み。Plans.md に Phase 48 entries を cc:完了 [888b195] で反映し、CHANGELOG [Unreleased] に「今まで / 今後」形式で記録。 Reviewer minor 3 件は「既知の non-blocker」として CHANGELOG に明記。 併せて別セッションが起票した Phase 49 (XR-003 resume_pack 注入) の entries も working tree 上で共存していたため同一 commit で取り込む。 Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> * docs(plans): file Phase 48.2.1 for Reviewer minor follow-up (3 findings) Phase 48 Reviewer APPROVE 時の minor 3 件を次 minor にまとめて潰すタスクとして起票。 - monitor.go:751-754 checkPlansDrift の dead-code 分岐統合 - monitor.go:691/763 config reader に filepath.Clean 適用 - monitor_test.go に TestMonitorHandler_ReviewerDrift_* 3 ケース追加 DoD はいずれも機械検証可能(go vet / go test / validate-plugin.sh)な形に揃えた。 Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> * fix(session-monitor): address Phase 48 Reviewer minor findings (#48.2.1) - checkPlansDrift の staleHit 分岐で同一 sprintf を 2 回書いていた dead code を削除し単一 return に統合 (monitor.go:747-752) - readAdvisorTTL / readPlansDriftConfig の configPath を filepath.Clean で正規化してパス構築の定石を揃えた - reviewer drift の TTL ロジックは advisor と共有しているが テストが欠落していたため TestMonitorHandler_ReviewerDrift_Hit / _Miss / _ConfigOverride の 3 ケースを追加 verify: - go test ./internal/session/... -run TestMonitorHandler_ReviewerDrift → 3/3 PASS - go test ./internal/session/... ./cmd/harness/... → 全 PASS (無回帰) - go vet ./... → warning 0 - tests/validate-plugin.sh → 41 pass / 0 fail Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> * docs(plans): mark Phase 48.2.1 cc:完了 [bdbcb70] and close CHANGELOG non-blocker - Plans.md: 48.2.1 を cc:完了 [bdbcb70] に更新 - CHANGELOG [Unreleased]: 「既知の non-blocker」節をクローズ記述に差し替え、 3 件の finding がそれぞれどう解消されたかを具体的に明記 Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> * fix(hooks): wire memory-session-start + userprompt-inject-policy scripts (XR-003 / Phase 49) harness-mem の記憶注入 shell scripts は plugin に bundle 済だったが .claude-plugin/hooks.json から一度も呼ばれていなかった。結果として 新 session で直前 session の summary が additionalContext に注入されず、 このマシンでは memory-resume-pack.json が 12 日前のまま固まっていた。 - SessionStart の hooks 配列末尾に bash memory-session-start.sh を追加 (timeout 30, once=true)。既存の Go 実装 (harness hook session-start / memory-bridge) は並走。 - UserPromptSubmit の hooks 配列に bash userprompt-inject-policy.sh を memory-bridge と inject-policy の間に挿入 (timeout 15)。既存 Go 実装の harness hook inject-policy は additionalContext を返さない stub なので shell 版が記憶本体を載せる。 - CHANGELOG Unreleased に XR-003 / Phase 49 を追加。 - Plans.md Phase 49 を新設計 (hooks.json wiring) に書き換え。 Refs: XR-003, harness-mem Plans.md §90 / S90-001 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * chore(release): v4.3.1 — Session Monitor active watching + XR-003 hooks wiring Bundled patch release covering Phase 48, 48.2.1, and 49. Phase 48 (session-monitor active watching): - harness-mem health probe +⚠️ output - advisor/reviewer drift detection via session.events.jsonl TTL scan - Plans.md drift thresholds (WIP >= 5 / stale >= 24h) Phase 48.2.1 (Reviewer minor findings): - checkPlansDrift dead-code merged into single return - filepath.Clean applied in config readers - TestMonitorHandler_ReviewerDrift_* (hit/miss/config-override) added Phase 49 (XR-003 resume-pack injection wiring): - cherry-picked 2c60972 (hooks.json wiring of memory-session-start.sh and userprompt-inject-policy.sh) - dual sync fix: hooks/hooks.json now carries the same Phase 49 entries (PR #92 left hooks/hooks.json stale — this would have been silently clobbered by sync-plugin-cache.sh) - test-memory-hook-wiring.sh extended with: * presence checks for memory-session-start.sh / userprompt-inject-policy.sh in BOTH hooks.json files (DoD a) * hook order assertion: memory-bridge → userprompt-inject-policy → inject-policy in UserPromptSubmit (DoD d) * silent-skip verification when harness-mem daemon unreachable (DoD c) Version triple sync: 4.3.0 → 4.3.1 (VERSION / plugin.json / harness.toml) CHANGELOG: [Unreleased] → [4.3.1] - 2026-04-19 Supersedes PR #92 (single-hooks-file defective change). verify: - tests/test-memory-hook-wiring.sh → OK - tests/validate-plugin.sh → 41 pass / 0 fail - go test ./internal/session/... ./cmd/harness/... → all PASS Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> * fix(mem-health,monitor): address CodeRabbit critical findings on PR #93 Two semantic/security fixes surfaced by CodeRabbit review. Kept scope to the critical items; cosmetic findings (deleted-concepts.yaml allowlist, CHANGELOG markdownlint, scanner ring buffer optimization, jq null-safe mapping) are deferred to a 4.3.2 follow-up issue. Fix #3 — mem health subcommand now probes the daemon (DoD alignment): - previously runMemHealthCheck() only inspected ~/.claude-mem/ files, so a dead daemon would still report healthy if settings.json existed - added probeHarnessMemDaemon(): TCP connect to HARNESS_MEM_HOST:HARNESS_MEM_PORT (default 127.0.0.1:37888) with 500ms timeout - probe runs after file integrity check; failure returns {healthy:false, reason:"daemon-unreachable"} and exit 1 - package-level daemonProbe variable enables test injection; existing 3 tests stub it (healthy→nil, not-initialized/corrupted→early-exit), new TestRunMemHealth_DaemonUnreachable verifies the TCP-failure path Fix #4 — defaultMemHealthCheck no longer executes projectRoot/bin/harness: - previous resolution (projectRoot/bin/harness → PATH fallback) exposed a guardrail-bypass risk if a malicious binary was committed to the repo - new resolveHarnessBinary() uses os.Executable() → CLAUDE_PLUGIN_ROOT/bin/harness → exec.LookPath("harness"), never touching the repo path - projectRoot arg retained in signature for backward compatibility, marked unused with _ prefix and documented CHANGELOG [4.3.1] — Phase 48.1.1 description updated to reflect the 2-stage health check (file integrity + daemon TCP probe) and trusted binary resolution. Deferred to 4.3.2 follow-up: - .claude/rules/deleted-concepts.yaml:180 bin/ prefix too broad - CHANGELOG MD040 fenced code language tag - monitor.go scanner → ring buffer for last 200 lines - test-memory-hook-wiring.sh jq map(.command) null-safe verify: - go vet ./... → no warnings - go test ./internal/session/... ./cmd/harness/... → all PASS (incl. new TestRunMemHealth_DaemonUnreachable) - tests/validate-plugin.sh → 41 pass / 0 fail Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> --------- Co-authored-by: CJ2 <tachibanashuuta@CJs-MacBook-Pro.local> Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
…amaru127#16 in known-limits.md
…irty-tree filter + --only pathspec + post-Ratified test Fix Chachamaru127#2 (UX blocker): git_dirty() now filters out untracked files (?? prefix). Untracked files don't risk commit-bleed since orchestrator commits use --only pathspec, and a leftover sample file or IDE swap file should not block init. Fix Chachamaru127#2 (related): all three orchestrator commit sites (init, commit-or-forfeit, ratify) now use 'git commit --only <pathspec>' so foreign staged work doesn't silently ride along with epoch commits. Fix Chachamaru127#3: new test TestParser_PostcheckRejectsAppendAfterRatified pins the boundary edge case where a persona appends content below the final top-level section. The new section-boundary parsing in lib/sketchboard already rejects this (additions land in the wrong epoch range); this commit ensures it stays covered.
…+ gc + persona prompt rewrites
Wires the per-persona reasoning branch model end-to-end. Personas now reason
freely on their own worktree-isolated branches and a separate extraction call
(temperature=0, general-purpose) reformats the free-form reasoning into the
canonical BID JSON or WRITE block schema. This eliminates the prose-around-JSON
contract violations the v0.1.1 user smoke surfaced — the LLM is no longer asked
to reason and format simultaneously.
spawn_winner.py:
- reasoning-manifest: BID-REASONING or WRITE-REASONING manifest with
worktree_path, reasoning_branch, expected_commit_msg sidecars. Bid memory
+ eavesdrop excerpts injected by collect-bids upstream.
- extraction-manifest: reads reasoning branch HEAD, emits fixed extraction
prompt with model_config.temperature from harness.toml (default 0.0).
For BID: emits JSON-only instructions. For WRITE: instructs the extractor
to Edit Sketchboard.md directly with the canonical block format.
- manifest / postcheck / bid-postcheck / validate-bids preserved for
sequential mode fallback + existing test fixtures.
collect_bids.py:
- Loads per-persona bid history from epoch-N-bids.jsonl, injects into
reasoning prompt as 'Your prior bids this epoch:' block (audit fix Chachamaru127#3 —
inter-spawn bid memory was missing).
- Eavesdrop infrastructure: when eavesdrop_enabled=true (off by default),
probabilistically samples other personas' latest reasoning branches and
injects 300-char excerpts. v0.1.2 limit: naive first-N-chars excerpt;
v0.1.3 upgrades to structured-extract.
- Manifest now sidecars reasoning_branch + worktree_path + bid_history +
eavesdrop_excerpts so SKILL.md can drive worktree_create / two-turn flow.
- Lazy orphan-worktree audit on every call (crash recovery).
- Reports spawn_mode from config.
orchestrate_epoch.py:
- New cmd_gc with --dry-run and --keep-last <N>. Removes worktrees + branches
older than gc_keep_epochs (default 3). Logs to gc.log.
- cmd_begin now runs orphan-worktree audit before initializing epoch state.
agents/{scaling-optimist,architecture-skeptic,bias-auditor}.md:
- Rewritten initialPrompt to describe both two-turn (default) and
single-turn (sequential fallback) modes. Drops the rigid 'output JSON
line' instruction — that's now extraction's job.
- bias-auditor includes a v0.1.2 ACCESS CONSTRAINT block explicitly stating
the auditor reads main Sketchboard.md only, never other personas'
reasoning branches. Per plan decision: auditor audits committed
deliberation record, not reasoning process.
skills/harness-deliberate/SKILL.md:
- Procedure step 3 rewritten for two-turn flow with explicit worktree
creation, reasoning spawn, branch isolation check, extraction spawn, and
worktree cleanup per slot. Legacy single-turn flow preserved as sequential
fallback.
tests/test-deliberation-two-turn.sh (new, 8 assertions):
- BID reasoning manifest structure (worktree_path, branch, commit msg)
- BID extraction manifest structure (temperature=0.0, JSON instructions)
- WRITE reasoning manifest --bid/--reason validation
- Bid history injection per persona
- collect-bids sidecars (reasoning_branch, worktree_path, eavesdrop_excerpts)
- Eavesdrop disabled by default
- gc subcommand dry-run
- Persona prompts rewritten for reasoning mode
Test gate (31/32 deliberation assertions):
test-deliberation-worktrees: 7/7
test-deliberation-two-turn: 8/8 (new)
test-sketchboard-parser: 5/5
test-deliberation-bidding: 4/4
test-sketchboard-conflict-detection: 5/5
test-deliberation-personas: 2/3 (1 leftover enabled=true from user smoke)
validate-plugin.sh: 46/1/1 (same as baseline, no regressions)
Add comprehensive LSP (Language Server Protocol) integration:
LSP features enabled:
Summary by CodeRabbit
新機能
ドキュメント
その他
✏️ Tip: You can customize this high-level summary in your review settings.