Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
2f92f1f
fix(626): use tool-specific permission for daily summary generation
Kewton Apr 5, 2026
b8088a7
feat(627): add commit log collection for daily report generation
Kewton Apr 5, 2026
1973ff6
refactor(utils): fix JSDoc association and organize timeout utilities
Kewton Apr 5, 2026
6c79104
Merge pull request #628 from Kewton/fix/626-codex-sandbox-param
Kewton Apr 5, 2026
a598fce
merge: resolve conflict with develop (integrate #626 permission fix)
Kewton Apr 5, 2026
c1cccdc
Merge pull request #629 from Kewton/feature/627-commit-log-in-report
Kewton Apr 5, 2026
82397ae
Merge remote-tracking branch 'origin/main' into develop
Kewton Apr 5, 2026
b7e85fa
feat(report): add GitHub Issue context to daily report prompts (#630)
Kewton Apr 5, 2026
fc377f4
Merge pull request #631 from Kewton/feature/630-issue-context-in-report
Kewton Apr 5, 2026
c4b52a7
fix(report): filter invalid repositories before commit log collection
Kewton Apr 5, 2026
9308b79
Merge pull request #633 from Kewton/fix/632-repo-filter
Kewton Apr 5, 2026
463e444
fix(report): use section-based prompt length limits to preserve commi…
Kewton Apr 5, 2026
ae9d940
Merge pull request #635 from Kewton/fix/634-prompt-length
Kewton Apr 5, 2026
172e5de
feat(cli): add report command for daily report generation, display, a…
Kewton Apr 5, 2026
c23130c
Merge pull request #637 from Kewton/feature/636-cli-report
Kewton Apr 5, 2026
4a14ec5
feat(report): add generation status visibility for UI and CLI
Kewton Apr 5, 2026
8f88208
Merge pull request #639 from Kewton/feature/638-report-status
Kewton Apr 5, 2026
caa031d
fix(report): force dynamic rendering for status endpoint
Kewton Apr 5, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -218,11 +218,11 @@ tests/
| `src/lib/file-search.ts` | ファイル内容検索 |
| `src/lib/terminal-highlight.ts` | CSS Custom Highlight API ラッパー(Issue #47)XSS安全なターミナルハイライト |
| `src/lib/file-tree.ts` | ディレクトリツリー構造生成 |
| `src/lib/git/git-utils.ts` | Git情報取得・コミット履歴/diff取得(Issue #447) |
| `src/types/git.ts` | Git関連型定義(CommitInfo, ChangedFile, GitLogResponse等)(Issue #447) |
| `src/lib/git/git-utils.ts` | Git情報取得・コミット履歴/diff取得(Issue #447)、getCommitsByDateRange/collectRepositoryCommitLogs追加(Issue #627) |
| `src/types/git.ts` | Git関連型定義(CommitInfo, ChangedFile, GitLogResponse等)(Issue #447)、CommitLogEntry/RepositoryCommitLogs追加(Issue #627) |
| `src/lib/sidebar-utils.ts` | サイドバーソート・グループ化ユーティリティ(SortKey, SortDirection, ViewMode型, BranchGroup型, sortBranches(), groupBranches(), generateRepositoryColor())(Issue #449, #504) |
| `src/contexts/SidebarContext.tsx` | サイドバー状態管理Context(isOpen, sortKey, viewMode, localStorageパターン)(Issue #449) |
| `src/lib/utils.ts` | 汎用ユーティリティ |
| `src/lib/utils.ts` | 汎用ユーティリティ(withTimeout追加: Issue #627) |
| `src/lib/date-utils.ts` | 相対時刻フォーマット |
| `src/lib/clipboard-utils.ts` | クリップボードコピー |
| `src/lib/pasted-text-helper.ts` | Pasted text検知・Enter再送 |
Expand Down Expand Up @@ -281,7 +281,7 @@ tests/
| `src/cli/config/duration-constants.ts` | CLI側duration定数(DURATION_MAP, parseDurationToMs)(Issue #518) |
| `src/cli/config/cli-tool-ids.ts` | CLI側ツールID定義(CLI_TOOL_IDS, isCliToolId、copilot含む6ツール)(Issue #518, #545) |
| `src/cli/config/model-validation.ts` | CLI側model名バリデーション(validateCopilotModelName、MODEL_NAME_PATTERN、クロスバリデーション対象)(Issue #588) |
| `src/config/review-config.ts` | Review設定定数・テンプレート定数(STALLED_THRESHOLD_MS, REVIEW_POLL_INTERVAL_MS, MAX_TEMPLATES, MAX_TEMPLATE_NAME_LENGTH, MAX_TEMPLATE_CONTENT_LENGTH)(Issue #600, #618) |
| `src/config/review-config.ts` | Review設定定数・テンプレート定数(STALLED_THRESHOLD_MS, REVIEW_POLL_INTERVAL_MS, MAX_TEMPLATES, MAX_TEMPLATE_NAME_LENGTH, MAX_TEMPLATE_CONTENT_LENGTH)(Issue #600, #618)、MAX_COMMIT_LOG_LENGTH/GIT_LOG_TOTAL_TIMEOUT_MS追加(Issue #627) |
| `src/lib/session/next-action-helper.ts` | 次アクション算出ヘルパー(getNextAction, getReviewStatus, ReviewStatus型)(Issue #600) |
| `src/lib/detection/stalled-detector.ts` | Stalled判定(isWorktreeStalled)(Issue #600) |
| `src/lib/deep-link-validator.ts` | Deep linkバリデーション(isDeepLinkPane, normalizeDeepLinkPane, VALID_PANES, DeepLinkPane型)(Issue #600) |
Expand Down
498 changes: 498 additions & 0 deletions dev-reports/design/issue-627-commit-log-in-report-design-policy.md

Large diffs are not rendered by default.

82 changes: 82 additions & 0 deletions dev-reports/issue/627/issue-review/hypothesis-verification.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
# Issue #627 仮説検証レポート

## 対象Issue
feat: レポート生成時に全リポジトリの当日コミットログをプロンプトに含める

## 検証結果サマリー

| # | 仮説/前提条件 | 判定 | 備考 |
|---|--------------|------|------|
| 1 | 現在のレポート生成は `chat_messages` テーブルのみをデータソースとしている | Confirmed | `daily-summary-generator.ts` の `getMessagesByDateRange` 参照 |
| 2 | `git-utils.ts` に `getCommitsByDateRange` 関数が未実装 | Confirmed | 現在は `getGitLog`, `getGitShow`, `getGitDiff` 等のみ存在 |
| 3 | `summary-prompt-builder.ts` が存在し、コミットログセクション追加対象 | Confirmed | `buildSummaryPrompt` 関数が存在、引数拡張が必要 |
| 4 | `daily-summary-generator.ts` にリポジトリ一覧取得を追加する必要がある | Confirmed | 現在は `getWorktrees` でworktree一覧のみ取得 |
| 5 | プロンプト長制限が `10000` 文字 | Confirmed | `claude-executor.ts` の `MAX_MESSAGE_LENGTH = 10000` |
| 6 | `worktree-db.ts` からリポジトリパスが取得可能 | Confirmed | `getRepositories(db)` 関数が存在しリポジトリパス・名前を返す |
| 7 | `db-repository.ts` からリポジトリ情報が取得可能 | Confirmed | `getAllRepositories(db)` 関数が存在 |

## 詳細検証

### 仮説1: chat_messagesテーブルのみをデータソースとしている

**コード証拠** (`src/lib/daily-summary-generator.ts:144`):
```typescript
const messages = getMessagesByDateRange(db, { after: dayStart, before: dayEnd });
```
コミットログの取得は一切行われていない。→ **Confirmed**

### 仮説2: git-utils.ts に日付範囲コミット取得関数が未実装

**確認結果**: `src/lib/git/git-utils.ts` には以下の関数が存在するが、日付範囲指定の全ブランチコミット取得は未実装:
- `getGitStatus`
- `getGitLog` (特定commitのログ取得)
- `getGitShow`
- `getGitDiff`

→ **Confirmed** (新規追加が必要)

### 仮説3: summary-prompt-builder.ts がコミットログセクション追加対象

**確認結果**: `buildSummaryPrompt(messages, worktrees, userInstruction?)` 関数が存在し、現在は `chat_messages` のみをプロンプトに含める。コミットログ用の引数・セクション構築が未実装。→ **Confirmed**

### 仮説4: daily-summary-generator.ts にリポジトリ一覧取得を追加

**確認結果**: 現在の実装(line 151)では `getWorktrees(db)` でworktreeマップのみ構築しているが、コミットログ収集のためのリポジトリパス取得は未実装。

なお、`worktree-db.ts` の `getRepositories(db)` 関数(line 167)はリポジトリパスを一意に返す関数として既存。これを活用可能。→ **Confirmed**

### 仮説5: 10000文字制限

**コード証拠** (`src/lib/session/claude-executor.ts:36`):
```typescript
export const MAX_MESSAGE_LENGTH = 10000;
```
`summary-prompt-builder.ts` では `MAX_TOTAL_MESSAGE_LENGTH = MAX_MESSAGE_LENGTH` として使用。コミットログ追加でこの制限に到達しやすくなる可能性がある。→ **Confirmed**

### 仮説6: worktree-db.ts にリポジトリパス取得関数が存在

**コード証拠** (`src/lib/db/worktree-db.ts:167`):
```typescript
export function getRepositories(db: Database.Database): Array<{
path: string;
name: string;
worktreeCount: number;
}>
```
SQLでは `GROUP BY repository_path, repository_name` を使って重複を排除。→ **Confirmed**

### 仮説7: db-repository.ts にリポジトリ情報取得関数が存在

**コード証拠** (`src/lib/db/db-repository.ts:281`):
```typescript
export function getAllRepositories(db: Database.Database): Repository[]
```
→ **Confirmed**

## 注意事項(Stage 1への申し送り)

1. **リポジトリパス取得の選択**: Issue では「worktreeテーブルから取得」と記載されているが、`worktree-db.ts` の `getRepositories()` 関数が既存で最適。`db-repository.ts` の `getAllRepositories()` も利用可能だが、worktreeテーブルの方がCommandMateが管理するリポジトリに限定できる。

2. **プロンプト長制限の実際**: 現在 `MAX_TOTAL_MESSAGE_LENGTH = MAX_MESSAGE_LENGTH = 10000` 文字。コミットログが追加されると合計文字数が増えるため、コミットログ専用の文字数上限を設けるか、既存制限との調整が必要。

3. **`getRepositories` vs `getAllRepositories`**: Issue に記載の `db-repository.ts` の利用について検討が必要。worktreeテーブルからのリポジトリパス取得の方が既存コードで直接利用可能。
1 change: 1 addition & 0 deletions dev-reports/issue/627/issue-review/original-issue.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"body":"## 概要\n\nレポート生成時に、CommandMateが管理する全リポジトリから当日の全コミットメッセージを取得し、プロンプトの追加セクションとしてAIに渡す。これによりAIがIssue消化数・作業内容・コミット数を正確に把握できるようにする。\n\n## 背景・課題\n\n現在のレポート生成は `chat_messages` テーブルのメッセージ内容のみをデータソースとしており、Issue消化数などの構造化データを持たない。AIがメッセージ内容から推測するため、正確なIssue消化数が出力されない。\n\n## 提案する解決策\n\n### データ取得\n\nプロンプト構築時に、DBに登録された全リポジトリに対して `git log` を実行し、当日のコミットメッセージを取得する。\n\n```bash\ngit log --all --since=\"2026-04-04\" --until=\"2026-04-05\" --format=\"%h %s (%an)\" --\n```\n\n- `--all`: 全ブランチのコミットを対象\n- `--since/--until`: 当日の日付範囲\n- 各リポジトリの `repositoryPath` はDBから取得(worktreeテーブル)\n\n### プロンプトへの埋め込み\n\n取得したコミットログを `<commit_log>` セクションとしてプロンプトに追加する。\n\n```\n<commit_log>\n## Repository: MyCodeBranchDesk (3 commits)\n- abc1234 feat(618): add report template system with CRUD API (author)\n- def5678 fix(619): detect Codex /model selection list (author)\n- ghi9012 refactor(618): extract shared template API helpers (author)\n\n## Repository: Anvil (2 commits)\n- jkl3456 fix(259): file edit disk sync issue (author)\n- mno7890 test(257): add coverage investigation tests (author)\n</commit_log>\n```\n\nコミットがないリポジトリはセクションに含めない。\n\n### 主要な変更点\n\n- `git-utils.ts` に日付範囲指定の全ブランチログ取得関数を追加\n- `summary-prompt-builder.ts` にコミットログセクション構築を追加\n- `daily-summary-generator.ts` でリポジトリ一覧を取得しコミットログを収集\n- プロンプトの総データ長制限に注意(既存の10000文字制限との調整)\n\n## 実装タスク\n\n- [ ] `src/lib/git/git-utils.ts` に `getCommitsByDateRange(repoPath, since, until)` 関数追加\n- [ ] `src/lib/summary-prompt-builder.ts` にコミットログセクション構築ロジック追加\n- [ ] `src/lib/daily-summary-generator.ts` で全リポジトリのコミットログ収集\n- [ ] プロンプト長制限の調整(コミットログ分の余裕確保)\n- [ ] ユニットテスト追加\n\n## 受入条件\n\n- [ ] 全リポジトリ(DBに登録済み)の当日コミットが取得できること\n- [ ] 全ブランチのコミットが対象になること(`--all`)\n- [ ] コミットがないリポジトリはスキップされること\n- [ ] プロンプトにコミットログセクションが含まれること\n- [ ] 生成されたレポートにIssue消化数・コミット数が正確に反映されること\n- [ ] 既存のレポート生成機能に回帰がないこと\n- [ ] コミットログが長大な場合にプロンプト長制限で適切にトランケーションされること\n\n## 影響範囲\n\n### 変更対象ファイル\n\n| ファイル | 変更内容 |\n|---------|---------|\n| `src/lib/git/git-utils.ts` | 日付範囲コミットログ取得関数追加 |\n| `src/lib/summary-prompt-builder.ts` | コミットログセクション構築追加 |\n| `src/lib/daily-summary-generator.ts` | リポジトリ一覧取得・コミットログ収集 |\n| `src/lib/db/worktree-db.ts` | リポジトリパス一覧取得(既存関数活用) |\n| `tests/unit/lib/summary-prompt-builder.test.ts` | テスト追加 |\n\n### 関連コンポーネント\n\n- `src/config/review-config.ts` — プロンプト長制限定数\n- `src/lib/db/db-repository.ts` — リポジトリ情報取得","title":"feat: レポート生成時に全リポジトリの当日コミットログをプロンプトに含める"}
8 changes: 8 additions & 0 deletions dev-reports/issue/627/issue-review/stage1-review-context.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"issue_number": "627",
"focus_area": "通常",
"iteration": 1,
"stage": 1,
"stage_name": "通常レビュー(1回目)",
"hypothesis_verification_path": "dev-reports/issue/627/issue-review/hypothesis-verification.md"
}
Loading
Loading