name: brainstorming
description: |
  複数の視点から並列にアイデアや選択肢を検討し、推奨方針を導き出す。
  選ぶべき場合: 「どうすべきか」「どの方針が良いか」を多角的に検討する必要がある
  選ぶべきでない場合: 答えが調査で明確になるタスク、具体的な成果物の作成が主目的
max_movements: 999
initial_movement: decompose

triggers:
  keywords:
    - brainstorming
    - ブレスト
    - ブレインストーミング
    - 方針検討
    - アイデア出し

movements:
  - name: decompose
    edit: false
    persona: facilitator
    instruction: |
      課題を分析し、複数の視点から検討すべきポイントを特定してください。

      1. タスクの指示を注意深く読み、何が求められているかを理解する
      2. 検討すべき視点や切り口を 2〜5 個に分解する
         - 例: 技術的実現性、コスト/リソース、ユーザーへの影響、リスク、長期的な拡張性
      3. 各視点ごとに SpawnSubTask で独立した調査・検討タスクを作成する
         - piece は "research-sub" を指定する
         - instruction には「この視点で分析し、output/analysis.md に結論と根拠を書いてください」と具体的に記述
         - 各サブタスクは異なる分析レンズを持つよう明確に指定する
      4. 全サブタスクの登録が完了したら WAIT_SUBTASKS に遷移する
    allowed_tools:
      - Read
      - Grep
      - Glob
      - SpawnSubTask
    rules:
      - condition: "全てのサブタスクを SpawnSubTask で登録し終えた"
        next: WAIT_SUBTASKS
      - condition: 全てのサブタスクを登録し終えた（SpawnSubTask不可の場合は自分で分析を完了した）
        next: aggregate
    default_next: aggregate

  - name: aggregate
    edit: true
    persona: analyst
    instruction: |
      各サブタスクの検討結果を統合し、推奨方針をまとめてください。

      1. subtasks/ ディレクトリを確認する（Glob: subtasks/*/output/**）
      2. 各サブタスクの分析結果を読み込む
      3. 共通点・相違点・トレードオフを整理する
      4. 総合的な推奨方針を output/recommendation.md に作成する
         - 各視点からの主要な発見
         - トレードオフの整理
         - 推奨アプローチとその根拠
         - リスクと緩和策
      5. 完了したら verify に遷移する

    allowed_tools:
      - Read
      - Glob
      - Grep
      - Write
      - Edit
      - SearchKnowledge
      - ListNamespaces
      - ListDocuments
      - SearchNotes
      - ReadNote
      - 'mcp__*'
    rules:
      - condition: "output/recommendation.md に推奨方針をまとめた"
        next: verify
    default_next: verify

  - name: verify
    edit: false
    persona: reviewer
    instruction: |
      output/ の成果物を確認する。

      確認手順:
      1. まず Glob で output/ 内のファイル一覧を確認する
      2. output/recommendation.md がなければ「修正が必要」と判断し aggregate に差し戻す
      3. ファイルがあれば Read で内容を確認し、各視点の分析が含まれているか・推奨方針が論理的かをチェックする
      4. 不足や誤りがあれば、`transition({next_step: "aggregate", summary: ...})` で差し戻す。summary は次の形式で書く:
         [判定] needs_fix
         ## 問題点
         - [ファイル名:行番号または項目名] 何が問題か
         ## 期待する修正
         - 何をどう直すべきか
         ## 合格基準
         - 再レビューで何を確認するか
         ## 次にやること
         - aggregate で最初に着手すべき具体的な修正
      5. summary は抽象論で終えず、具体的な不足点・期待する修正内容を必ず含める

      ## チェックシート確認
      GetChecklist でチェックシートが存在する場合、全アイテムが完了（done/failed/skipped）していることを確認する。
      remaining が 0 でないまま完了してはならない。

      ## 合格時のユーザーへの返答（complete ツール）
      output/ の内容で合格と判断したら、`complete({status: "success", result: ...})` を呼ぶ。
      result はそのままユーザーに表示される最終回答。output/ のファイルを Read で読み、その内容をベースに整形する。
      - 「output/xxx.md を確認してください」のようなファイル参照ではなく、内容そのものを回答として返すこと
      - 【厳守】「✅ 完了」「推奨方針をまとめました」「確認しました」等のステータス表示・メタ説明・内部作業の報告は一切書かない。1行目からいきなり本題の内容を書き始めること
      - 推奨方針・トレードオフ・根拠を会話調で分かりやすく伝える
      - 表・リスト・見出しなど Markdown 書式を活用して読みやすくする

      ## 終了方法のまとめ
      - 合格: `complete({status: "success", result: "ユーザー向け最終回答"})`
      - 修正必要: `transition({next_step: "aggregate", summary: "差し戻し指摘"})` (上記形式で)
      - 技術的失敗: `complete({status: "aborted", abort_reason: "..."})`
    allowed_tools: [Read, Glob, Grep]
    # default_next is the engine-internal fallback (context overflow / ASK
    # limit / SpawnSubTask unavailable). Not exposed to the LLM.
    default_next: COMPLETE
    rules:
      - condition: output/ にファイルがない、または内容に不足がある
        next: aggregate
