# parallel-fanout

## 解決什麼問題
同一份輸入要做多種處理（摘要 / 翻譯 / 分類 / 等）。
不想等順序執行（總時長 = 全部加總）→ 並行（總時長 = 最慢一個）。

## 怎麼觸發
```bash
curl -X POST https://cypher.arcrun.dev/webhooks/named/parallel_fanout/trigger \
  -H "X-Arcrun-API-Key: ak_xxx" \
  -d '{"api_key":"ak_xxx","text":"...","target_lang":"en"}'
```

## 預期行為
- 3 個子 workflow 同時啟動，各自獨立執行
- 主 workflow 返回所有子 workflow 都 trigger 成功的時間（毫秒級）
- 子 workflow 完成的結果**不會回到** parent —— 各自寫各自的 KBDB / 通知

## 改成你自己的
- 增 / 減 dispatch 節點數
- workflow_name 換你的真實處理 workflow
- 若需要等子 workflow 都完成 → 子 workflow 寫完成標記到 KBDB，parent 後續 cron 撿

## 變體：等所有子 workflow 完成
arcrun 預設 trigger_workflow 是 fire-and-await（paused 也算 success）。
若要嚴格「等到完成」，要：
1. 子 workflow 末步寫 `done:{request_id}` block 到 KBDB
2. parent 加 polling 節點 + wait 重試
（M2 之後會出 wait_for_workflows 內建零件）

## 為什麼這 pattern 重要
- arcrun 是 multi-tenant / multi-tier 平台。Fan-out 讓你能 build「主 controller + N 個 worker」架構
- 比 promise.all 更穩：每個子 workflow 獨立 paused/resume，互不污染狀態

## 學到什麼
- **Fan-out**：一個節點多條 ON_SUCCESS 邊出去，並行執行
- `trigger_workflow` 是內建 orchestration 零件（cypher-executor in-process call，繞 CF self-fetch）
- input 變數在 fan-out 時複製給每條分支（不互相影響）
