46afea83c2
管道本來就是好的(install-harness 功能完整、冪等),**過時的是內容**:
harness skill(4066B)grep「意圖」「>>」= 0 命中,只講世界觀/別寫 Python
⇒ 新裝的封測者拿不到步驟 1 的核心教材(`>>` 意圖語法)。
■ 單一真相源:harness skill 改為建置期由 registry 複製
build-harness-skill.mjs=head + registry/skills/write_intent_workflow.md 正文 + tail。
選「建置期複製」的理由:npm files 只收 harness/,registry 不進套件;
symlink 在 npm pack 與 Windows 不可靠。產物 commit 進 repo(npm 裝的是產物、不跑 build)。
head/tail 是 harness 專屬(CLI 語境入口/acr 指令表/暴露同意/誠實鐵律),
install-harness 的 copyTree 跳過 .head/.tail,不鋪進使用者專案。
■ 其餘三件逐份對照現世代事實後更新(過時的直接刪,不留死代碼)
- CLAUDE.block.md:補 >> 意圖語法、not_found 兩條路、零件 vs recipe 分型、
腹語術紅線、金鑰只拿名字
- commands/arcrun.md:步驟改成「先寫意圖 → 丟去查 → 再寫 YAML」,補 acr search/validate
- hooks/arcrun-guard.sh:**正路提示改為指向 arcrun-mindset Skill +意圖語法**
(呼應「hook 沒提 skill 反而把 AI 導向 repo 文件」的教訓);
新增 code 節點腹語術提醒,settings.fragment 補 Write|Edit|MultiEdit matcher
■ 世代閘(防再度脫節)
check-harness-generation.mjs 檢查四件交付物的現世代指紋,缺指紋 exit 1,
掛進 npm run build(prepublishOnly 因此也擋)。
反向驗證:把 skill/CLAUDE.block 換回上一代 → 兩者都被擋下並逐條點名缺哪個指紋。
■ 驗收(考生 haiku/受測物=環境)
乾淨臨時目錄 acr install-harness → 四件鋪好;重跑冪等(全檔 md5 不變、
CLAUDE.md 66 行不變、hooks 條目 2 不變、arcrun 區塊仍 1 個)。
haiku 只讀該目錄的 CLAUDE.md+SKILL.md(明令禁讀 ~/.claude、禁上網;
兩份教材 md5 與大小均不同,可證非考本機那支)答十題
→ grade-step1.sh **10 / 10 通過**(判分器同時反向驗證仍會抓
ON_TRUE/ON_FAILURE/第一節點非 input)。
npm test 18/18、tsc 綠。
SDD:workflow-discovery/tasks.md 3.11
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
4.1 KiB
4.1 KiB
這個專案用 Arcrun 做自動化
當需要「串服務/排程/打 API/資料處理自動化」時,用 Arcrun 工作流,不要自己寫 Python/Node 一次性腳本。 Arcrun 工作流是純文字、可複用、跑在使用者自己的 Cloudflare。
⚠️ 不要上網搜 Arcrun 文件——網路上沒有,找到的都是錯的。
語法與範本全在 arcrun-mindset Skill 裡,acr 指令查得到現況。
怎麼開始:先寫「意圖」,不要先寫 YAML
你不需要先知道有哪些零件。把需求寫成一串「誰接誰」,丟去查,系統會告訴你哪些存在:
input >> ON_SUCCESS >> fetch_rows
fetch_rows >> 對每個 row >> notify
- 第一個節點固定是
input(觸發時帶進來的資料) - 邊只有兩種:
ON_SUCCESS與對每個 <變數>(FOREACH) - 沒有
ON_TRUE/ON_FALSE/ON_FAILURE——引擎不支援條件分支。 需要判斷就寫成一個獨立節點再接ON_SUCCESS。
完整語法、四份實跑過的範本、節點命名慣例 → 讀 arcrun-mindset Skill。
Arcrun 只有三種東西,先分清楚就不會做歪
| 東西 | 是什麼 | 你能做的 |
|---|---|---|
| 工作流(workflow) | 把零件/recipe 串起來的純文字流程 | 預設就寫這個,自由寫 |
| recipe | 打「一個固定外部 API」的設定(endpoint/header/body 模板) | 自由寫、而且該投稿 |
| 零件(component) | WASM 程式(流程控制/資料處理/http_request/auth),固定一小套 |
你不自製,走 PR |
一句話判準:打一個固定外部 endpoint → 寫 recipe;流程控制/資料處理/通用 HTTP → 用既有零件;其他 → 寫工作流串起來。
⚠️ 常見錯誤:把
telegram_send/gmail_send/kbdb_get當零件寫。它們是 recipe。
查詢回 not_found 時:兩條路,都不准改寫成 code
查詢會誠實回報(兩庫都查過才點名):
| status | 意思 | 你該做什麼 |
|---|---|---|
found / resolved |
有現成的可用 | 只填 payload |
not_found |
零件庫與 recipe 庫都沒有 | 照回應的 suggestion 走(見下兩條路),並看 similar_components/similar_recipes 有沒有能直接用的 |
unknown |
查不到 registry(未部署/網路失敗) | 不代表不存在,別據此改寫成 code |
- 缺外部 API → 自己寫一個 recipe 並
acr recipe push(幾行 YAML,不用部署 Worker、不用寫程式)。 recipe 是公共資產,發現缺的就補一個投稿,不必問人。 - 缺計算能力(加解密/壓縮這類純運算) → 投稿零件 PR(要人類確認,罕見)。
🔴 查不到就改寫成 code 節點 =「腹語術」(表面用 Arcrun、實際全寫 JS)。
code 只用於局部整形(例:剝掉 LLM 回應的雜訊、切段落),不用來取代零件與流程控制。
實錄:每一個寫進
code的if都是沒被測過的新 bug;零件的價值是「被測過 1000 次」,寫進 code 就歸零。
其餘鐵律
- 先查能力再動手:
acr search <關鍵字>(一次掃零件/recipe/auth-recipe/workflow)、acr parts(零件)、acr recipe list(recipe)、acr auth-recipe list(支援的認證)。 - 需要 AI 判斷時你自己做,不要讓工作流回頭呼叫 LLM。Arcrun 是 AI 用的工具,不是工具回頭用 AI。
- 金鑰只拿名字:定義裡只寫
{{credential.<名字>}},真身絕不寫進 workflow/recipe 檔案。 - 暴露資料要人類同意:
acr push/acr recipe push會讓東西可被外部呼叫 → 停下來讓使用者明示同意,不替他決定公開。 - 誠實:沒打通就誠實說(缺 credential 標「未驗收:缺 X」),不假裝成功;完成以 HTTP 2xx/trace 為證,不口頭宣布。
開始前讀 arcrun-mindset Skill(意圖語法+範本+世界觀)。使用者技術細節交給你,CLI 操作你來做。