Skip to content

whyコマンドでprogress-report.mdが[review]に分類される #160

@Kewton

Description

@Kewton

概要

why コマンドの出力で、pm-auto-dev/iteration-1/progress-report.md[review] タグで表示される。進捗レポートはレビューとは異なるドキュメント種別であり、分類が不正確。

再現手順

commandindexdev why dev-reports/design/issue-299-ipad-layout-fix-design-policy.md

実際の結果

  Issue #299
    [review] dev-reports/issue/299/multi-stage-design-review/summary-report.md
    [review] dev-reports/issue/299/pm-auto-dev/iteration-1/progress-report.md  ← [review]?
    [review] dev-reports/issue/299/issue-review/summary-report.md
    ...

期待される結果

  Issue #299
    [review] dev-reports/issue/299/multi-stage-design-review/summary-report.md
    [progress] dev-reports/issue/299/pm-auto-dev/iteration-1/progress-report.md  ← [progress]
    [review] dev-reports/issue/299/issue-review/summary-report.md
    ...

根本原因分析(コードベース検証済み)

根本原因は4層構造:

  1. パターンルール: src/indexer/knowledge.rs (384-388行) - progress-report.md が DocSubtype::ProgressReport として分類されるが、relation は HasReview で保存される
  2. SQLクエリ: src/indexer/symbol_store.rs (1074行) - find_knowledge_related()metadata を SELECT せず relation のみ取得
  3. データ構造: src/output/mod.rs (409-412行) - WhyDocumentEntrydoc_subtype フィールドがない
  4. 表示ラベル: src/output/human.rs (244-250行) - relation_display_label() が relation のみで表示ラベルを決定

参考: find_documents_by_issue() (symbol_store.rs 892-913行) は metadata を正しく取得・利用しており、issue コマンドでは正しく分類される。

実装方針

relation はそのままに、doc_subtype を why コマンドの出力パイプライン全体に伝搬させる:

  1. find_knowledge_related() の SELECT 句に ke2.metadata を追加
  2. KnowledgeRelatedResultdoc_subtype: Option<String> を追加
  3. WhyDocumentEntrydoc_subtype: Option<String> を追加(#[serde(skip_serializing_if = "Option::is_none")]
  4. group_knowledge_results()doc_subtypeWhyDocumentEntry に伝搬
  5. relation_display_label() を拡張し、doc_subtype が存在する場合はそちらを優先
  6. LLM出力でも relation_display_label を適用して全出力フォーマットで一貫性を確保

受け入れ基準

  • progress-report.md[progress] タグで表示されること
  • 既存の [review] / [design] / [workplan] / [modifies] の分類が影響を受けないこと
  • JSON 出力でも doc_subtype が反映されること(skip_serializing_if で後方互換)
  • LLM 出力でも表示ラベルが一貫していること
  • metadata の NULL / 不正JSON に対するフォールバック処理があること
  • 単体テストで分類の正当性を検証できること
  • cargo clippy --all-targets -- -D warnings 警告0件
  • cargo test --all 全テストパス

影響範囲

変更対象ファイル

ファイル 変更内容
src/indexer/symbol_store.rs find_knowledge_related() SQL に metadata 追加、KnowledgeRelatedResult にフィールド追加
src/output/mod.rs WhyDocumentEntrydoc_subtype フィールド追加
src/output/human.rs relation_display_label() に doc_subtype 優先ロジック追加
src/output/llm.rs LLM出力で relation_display_label を適用
src/cli/why.rs group_knowledge_results() で doc_subtype 伝搬、テスト6箇所更新

影響を受けないコマンド

  • search / issue / suggest / impact / before-change / context-pack / diff / symbol / embed
  • search --relatedfind_knowledge_related を呼ぶが doc_subtype を参照しないため機能的影響なし

テスト影響

  • src/cli/why.rs -- 6テストで KnowledgeRelatedResultWhyDocumentEntry リテラル修正
  • src/indexer/symbol_store.rs -- 6テストで戻り値検証修正

スコープ外

  • tdd-result.json / acceptance-result.json のパターンルール追加(別Issue)

テスト環境

  • commandindex 0.1.0 (スキーマv4)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions