Files
Arcrun/cli/harness/commands/arcrun.md
uncle6me-web ae81d22775 fix(harness): 世代閘的 ON_TRUE 判準過時,反過來擋下正確教材
引擎自 2026-08-01 起已支援條件邊(cypher-executor/src/graph-executor.ts
case 'ON_TRUE'/'ON_FALSE'/'ON_BRANCH',VALID_EDGE_TYPES 亦已列入;31 個
cypher-executor 測試全過)。registry/skills/write_intent_workflow.md(單一
真相源)也已在同日更正為教 ON_TRUE/ON_FALSE/ON_BRANCH 是合法邊。

但 cli/scripts/check-harness-generation.mjs 的世代閘還停在舊世代判準:
只要 SKILL.md 出現正面示範的 ON_TRUE 就擋——這道閘本身才是落後的一方,
把已經寫對的教材當錯誤攔下,害乾淨 `npm run build` 必敗。

同源的過時內容還藏在三個手動維護的 harness 原始檔(非腳本產物):
CLAUDE.block.md/commands/arcrun.md/hooks/arcrun-guard.sh 都寫著
「引擎沒有條件邊」「沒有 ON_TRUE/ON_FALSE/ON_FAILURE」,一併更正。

真正不存在的邊是 ON_FAILURE(VALID_EDGE_TYPES 只有 ON_FAIL),把 mustNot
判準從 ON_TRUE 換成 ON_FAILURE,並新增 must 規則要求 ON_TRUE 必須出現,
防止教材日後又被改回「條件邊不存在」的舊世代說法。

skills/arcrun-mindset/SKILL.md 是由 registry 於建置期重建的產物
(build-harness-skill.mjs),本次改動只跑 `npm run build:harness`
重建、不手改。

驗證:故意把 SKILL.md 的 ON_FAILURE 改成正面示範,確認閘仍會擋下
(exit 1),還原後 `npm run build` 連跑兩次皆全綠且冪等(SKILL.md
md5 不變)。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-10 11:03:43 +08:00

3.3 KiB
Raw Permalink Blame History

用 Arcrun 完成這個自動化需求

使用者想做一個自動化。你的任務:用 Arcrun 做出來,全程不要讓使用者自己寫程式。

⚠️ 不要上網搜 Arcrun 文件(網路上沒有)。先讀 arcrun-mindset Skill,再用 acr 指令查現況。

鐵則

  • 用 Arcrun 工作流/recipe,絕不自己寫 Python/Node 腳本。 使用者選 Arcrun 就是不想要一次性腳本。
  • 打外部 API → 寫 recipeacr recipe push),不自刻 HTTP client。缺 recipe 就自己補一個,不必問人。
  • 不自製零件(WASM——零件由 Arcrun 維護。你能用的是現有零件 + recipe + 工作流。
  • 需要 AI 判斷時你自己做,不要讓工作流回頭呼叫 LLM。
  • 🔴 查不到零件就改寫成 code 節點 腹語術,禁止。缺 API 寫 recipe、缺能力投稿零件。

步驟

1. 先寫「意圖」,不要先寫 YAML

把使用者的需求寫成一串「誰接誰」(不必是真實零件名,用你想得到的名字即可):

input >> ON_SUCCESS >> fetch_rows
fetch_rows >> 對每個 row >> notify
  • 第一個節點固定是 input
  • 邊有 ON_SUCCESS對每個 <變數>FOREACH)、ON_TRUEON_FALSE(配 if_control)、ON_BRANCHbranch:(配 switchtry_catch);沒有 ON_FAILURE
  • 需要判斷 → 用條件邊(if_controlON_TRUEON_FALSE),不要寫 code 判斷

語法細節、四份實跑過的範本、節點命名慣例 → arcrun-mindset Skill。

2. 丟去查,讓系統告訴你有什麼

acr search <關鍵字> 一次掃零件/recipeauth-recipeworkflow 或把意圖串丟 /cypher/search,逐節點拿 found / resolved / not_found / unknown

  • foundresolved只填 payload
  • not_found → 照回應的 suggestion 走(缺 API 寫 recipe、缺計算能力投稿零件), 並看 similar_componentssimilar_recipes 有沒有現成能用的
  • unknown不代表不存在,別據此改寫成 code

3. 把意圖變成 workflow YAML

節點填上查到的真實零件/recipe payload。 需要 credential 時:acr auth-recipe scaffold <service> 看要哪些,明確告訴使用者去哪取得、怎麼 acr creds push🔑 定義裡只寫 {{credential.<名字>}}真身絕不寫進檔案

4. 驗證 → 部署 → 給證據

acr validate <workflow>.yaml   # 先驗
acr push <workflow>.yaml       # 部署(暴露動作,見下)
acr run <workflow>             # 觸發一次
acr logs <workflow>            # 看執行紀錄

完成要給客觀證據(HTTP 2xx/trace),不要只說「做好了」。

遇到要暴露資料(對外 webhook/recipe 投稿)

停下來,明確告訴使用者「這會讓 X 可被外部呼叫」,要他同意。不要替他決定公開。 非互動環境下把完整指令印給使用者自己貼上跑。

還沒設定好 Arcrun

acr 指令不存在或還沒 acr init:先帶使用者完成前置設定 (裝 CLI → 拿 Cloudflare 帳號的兩串憑證 → acr init --self-hosted)。 拿 Cloudflare 憑證時用白話照抄式引導,不要對使用者講 KV / Worker / R2 等術語。

使用者的需求

(使用者打在 /arcrun 後面的文字會接在這裡)