id: composite-mini-report
title: 3 ソース統合 + チェックリスト + 形式厳守

piece_hint: chat
timeout_minutes: 12

fixtures:
  - source: fixtures/sales.xlsx
    dest: input/sales.xlsx
  - source: fixtures/notes.md
    dest: input/notes.md
  - source: fixtures/web/announcement.html
    dest: web/announcement.html

prompt: |
  以下の手順で `output/report.md` にミニレポートを作ってください。

  ## 必須手順 (順守すること)
  1. 最初に CreateChecklist で進めるべき TODO を全部登録する (最低 4 項目)
  2. 各 TODO を進めるたびに CheckItem で完了マークを付ける
  3. 完了前に GetChecklist で進捗を確認する

  ## 情報源
  - `input/sales.xlsx` の Sheet1 から「2026年Q1 売上トップ3 商品」を抽出
  - `http://127.0.0.1:{WEB_PORT}/announcement.html` から発表内容を抽出
  - `input/notes.md` からチーム注意事項を抽出

  ## 出力 `output/report.md` の形式 (厳守)
  - 1 行目: `# サマリーレポート 2026Q1`
  - セクション順: `## 売上トップ3` → `## 最新発表` → `## チーム注意事項` → `## 次アクション`
  - 各セクションは 5 行以内
  - `## 次アクション` は箇条書き (- で始まる) を 3 つ、各 40 字以内
  - Markdown 画像 `![]()` や HTML タグは禁止

  ## 注意
  - 元データに無い数値・事実をでっち上げない
  - 情報が足りなければ ASK で確認する
  - 出力は `output/report.md` のみ、他のファイルを作らない

expected:
  # Read は拡張子で Office/PDF を自動判定・抽出する統合ツール。旧 ReadExcel は廃止。
  must_use_tools: [WebFetch, Read, Write, CreateChecklist, CheckItem, GetChecklist]
  must_produce_files: [output/report.md]
  completion_status: [succeeded]

checklist:
  required_tools: [CreateChecklist, CheckItem, GetChecklist]
  min_check_item_calls: 3

grading:
  programmatic:
    weight: 0.7
    constraints:
      - type: file_first_line_equals
        file: output/report.md
        line: '# サマリーレポート 2026Q1'
      - type: file_must_contain_in_order
        file: output/report.md
        sections: ['## 売上トップ3', '## 最新発表', '## チーム注意事項', '## 次アクション']
      - type: file_section_max_lines
        file: output/report.md
        section: 売上トップ3
        max: 5
      - type: file_section_max_lines
        file: output/report.md
        section: 最新発表
        max: 5
      - type: file_section_max_lines
        file: output/report.md
        section: チーム注意事項
        max: 5
      - type: file_line_starts_with
        file: output/report.md
        prefix: '-'
        min_lines: 3
        section: 次アクション
      - type: file_line_max_chars
        file: output/report.md
        max: 40
        section: 次アクション
      - type: file_no_pattern
        file: output/report.md
        pattern: '!\['
      - type: file_no_pattern
        file: output/report.md
        pattern: '<[a-zA-Z][^>]*>'

  llm_judge:
    weight: 0.3
    rubrics:
      - name: factual_grounding
        prompt: |
          レポート内の売上トップ3 / 発表内容 / 注意事項 が、与えられた 3 ソース (sales.xlsx,
          announcement.html, notes.md) に忠実か。捏造や混同があれば減点。
        max_score: 10
      - name: actions_quality
        prompt: |
          「次アクション」3 項目が、3 ソースの内容を踏まえた具体的・行動可能なものか。
          抽象的すぎる、ソースと無関係な内容は減点。
        max_score: 10
      - name: synthesis
        prompt: |
          3 ソースの統合がレポート全体として論理的に整合しているか。
        max_score: 10
