Arcrun 沒有編譯後成品的統一發佈位置,每個 product 只好自己編一份 #80
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
我發現一個問題是:Arcrun 沒有一個「編譯後成品」的統一發佈位置,所以每個用 Arcrun 做的 product 只好自己編一份。
leo 2026-08-09 原話:
現在是什麼樣
cypher-executor/src/、kbdb/src/、registry/components/…),沒有對外的編譯成品發佈點installer/scripts/build-bundles.mjs),從這個 repo 的原始碼路徑編出 worker.component-builds/是編譯中間產物,而.github-public/.component-builds/還有第二份拷貝這已經咬過人(2026-08-09 實錄)
source是頂層單一欄位,單顆沒有自己的來源⇒ 那 19 顆被標成「來自
Arcrun@19c82df」,實際不是。標籤說 A、實體來自 B,而且沒有地方記得 B 是什麼要達成什麼
怎麼驗
🔴 這一項是整件事的最大未知數——先跑它,結果決定後面工程量是「天」還是「週」
紅線
相關
Leo/arcrun-rag——兩張票是同一套架構的兩半先解掉一個看起來擋路、其實不擋的東西(2026-08-09 查證)
system-dev/docs/3-specs/arcrun/artifact-sharing/requirements.md:31寫著:這句話讀起來像是「零件不准從網路分發」,會直接擋掉「公庫+清單式下載」。但它把 D29 講過頭了。
D29 原文(頂層
system-dev/wiki/decisions-summary.md:219,2026-07-07):Leo/arcrun-components,唯一入口=該 repo 的 PR(merge=人審閘)arcrun_publish_component這條 MCP 零人閘發布路徑⇒ D29 管的是「誰能把新零件放進生態」(投稿),不是「已審過的零件能不能送到用戶那台」(分發)。
分發本來就在 D29 的設計裡,
acr init/acr update現在就在做這件事。⇒ 本票與
Leo/arcrun-rag#37的路徑不與 D29 衝突,可以照原設計推進。要修的是那句措辭:把「永不傳輸/安裝零件程式」改成它真正的意思——
「不從網路安裝未經 PR 人審的零件」。現在的寫法會讓每個讀到的人(含 AI)以為分發被禁,
而這種「規則被讀成比原意更嚴」的誤讀,成本是整條路被誤判為死路。
順帶查到的兩件(另開票處理,記在這裡免得掉)
decisions-summary.md:219(07-07 零件貢獻分離)與:224(07-08 Arcrun-first)同一個編號。任何人引用「D29」都不知道指哪一個。decisions/只有 D15/16/17/20/22/23/45,D29 只活在摘要的一行裡。🔴 把這張票收斂成一句話(leo 2026-08-09,取代前面所有繞路)
這張票要的東西只有一個:一個放編譯結果的地方。
為什麼「官方不可以自己編」是鐵律,不是偏好
08-09 實錄就是這個病的完整發作:安裝器自己編一份 ⇒ stage 累積 19 顆沒人再編過的舊零件
⇒ manifest 卻把它們標成「來自
Arcrun@19c82df」⇒ 標籤說 A、實體來自 B,沒有地方記得 B 是什麼。因此判準很簡單
前面那段 D29 考據與本票無關
(2026-08-09 總管自己繞出來的枝節,leo 當場拉回。留著只會讓下一個人以為這裡有個授權問題要先解——沒有。)
[總管·票務複驗 2026-08-09 晚] 票面成立,但要講精確一點:不是「完全沒有」,是「有一半,而缺的正好是被拿去自己編的那一半」。
已經有統一發佈位置的那一半 —— tier1 零件(TinyGo → wasm)
這些是刻意 commit 進版控的(
.gitignore用否定規則放行!.component-builds/**/component.wasm),理由白紙黑字寫在
.claude/rules/05-deploy-convention.md:就是為了讓 self-host 用戶直接從 repo 拿。❌ 缺的那一半 —— tier2 worker(TS → 可部署的 JS)
⇒ Arcrun 這邊只有 src,沒有任何編好的 worker 成品。
⇒ 所以
arcrun-rag的安裝器只好自己esbuild(installer/scripts/build-bundles.mjs:139),而編譯設定(compat_date/compat_flags/externals/懶載 strip)就在安裝器那邊獨立維護了一份。
這正是本票與
arcrun-rag#39的接縫:#39 說「安裝端不該自己編」,本票要回答「那該去哪裡拿」——而現在那個地方對 tier2 來說不存在。
今天(08-09)的相關實證
arcrun-rag出貨 1.4.29,manifest 的source是Arcrun@19c82df,但那五顆 core worker 的位元組是安裝器當場 esbuild 出來的,不是從 Arcrun 拿的成品。
⇒ 「同一個 Arcrun 版本,任何人任何時候組出來的 bundle 逐位元相同」這個目標目前無法成立。
順帶:現有那一半也有保鮮問題
tier1 的 wasm 對外靠 jsDelivr 服務公開鏡像,而公開鏡像是人手動 push 的(發佈鏡像那支腳本 + D20 人閘)。
repo 裡已經有一支
publish-lag-check.sh專門為這個病而存在。⇒ 就算 tier2 補上編好的成品,只要發佈仍是手動,同一個病會在新的一半重演。
⇒ 建議本票的成功標準把「發佈這件事不靠人記得」一起寫進去。
🔴 leo 2026-08-12 深夜拍板:worker 就是零件,位置只有一個,arcrun-rag 不做零件
leo 原話(兩句,本票的收工標準以此為準):
這兩句解掉了本票與
arcrun-rag#39的互指死結本票 08-09 的複驗留言自己寫著:
⇒ 兩張票互相等對方當前置,所以三天一格都沒動(#39 08-09 複驗原文:「本票沒有人動工」)。
leo 這兩句把它變成一張票、一個owner:歸 Arcrun,本票就是那張。
tier1/tier2 這個分法本身要作廢
本票原本的框架是「tier1 零件有統一位置、tier2 worker 沒有」。
照 leo 的定義,那不是兩層,是同一層——worker 只是比較大的零件。
實查現況(2026-08-12 深夜,
matrix/arcrun):⇒ 要做的不是「發明 tier2 的發佈方式」,是把 worker 照
.component-builds/已經在用的那套辦。樣板已經存在(
.gitignore否定規則放行 +.claude/rules/05-deploy-convention.md),不必重新設計。收工標準(改寫,取代舊的)
cypher-executor、kbdb(以及安裝清單裡的每一顆 worker)在 Arcrun 有編好的成品、放在與零件同一套規則的固定位置、進版控
arcrun-rag的 repo 裡沒有任何esbuild呼叫(那是#39的驗法,它要靠本票才過得了)而鏡像是人手動 push 的(
publish-lag-check.sh就是為這個病而存在)。tier2 補上成品但發佈仍手動 ⇒ 同一個病在新的一半重演。
為什麼這張票不能再排進「出貨線」那組
leo 08-12 把出貨降級成「沒出錯即可,先不要細修」。但本票不是出貨的細修,它是地基:
#89(寫回 Gitea repo)/#90(部署 Worker)/#91(算內容雜湊)三顆零件缺 ⇒出貨線 9 站搬不上 Arcrun ⇒ arcrun-rag 只好自己寫
installer/scripts/ship.mjs(19 站手寫 Node)而 arcrun-rag 是 Arcrun 的第一個顧客,它自己解決了=Arcrun 失去唯一的真實需求來源
📌
arcrun-rag#39維持開著,但它的定位改成「移除那份違規實作」,明確 blocked by 本票——先有地方可拿,才談得上不自己編。
—— [總管]
🔴 leo 2026-08-12 深夜再擴範圍:installer 也歸 Arcrun,因為 arcrun-rag 是木馬屠城
leo 原話(兩句,順序有意義):
第 ② 句解釋了為什麼這個病治不好
先前本票(與
arcrun-rag#39)把問題描述成「arcrun-rag 又去自己編零件」,彷彿那是紀律問題——只要它自律一點就會好。
不是。 照 ② 的定位,
arcrun-rag根本不是「一個用了 Arcrun 的產品」,它是 Arcrun 的載具:把框架包進應用裡才推得動。
⇒ 那個 repo 會一直重複做 Arcrun 的工作,是結構性的必然,不是誰不守規矩。
⇒ 所以修法不是「叫它別做」,是「移交」:東西本來就該長在 Arcrun,
arcrun-rag 只留真正屬於 RAG 應用層的那薄薄一層。
具體邊界(照 ① 的分法)
scripts/build-worker-artifacts.mjs已存在)ship.mjs19 站)#89/#90/#91)本票今晚已有的實質進展
scripts/build-worker-artifacts.mjs證實存在且可用——它就是本票要的「tier2 唯一官方編譯點」,成品進
.worker-builds/、每顆自記source_commit。⇒ 本票的「有一半」那半,機制其實已經做出來了;缺的是 arcrun-rag 切過去用它(
#39)cypher/kbdb/mcp三顆source=10d150ac(=#105),並用
installer/scripts/artifact-freshness.mjs(#93的閘)複驗blocking = 0順手記一個 fail-open(未修,待裁要不要開票)
checkArtifactFreshness({ repo, manifest, components })的components || []—— 呼叫端沒傳
components就迭代空陣列、回ok: true。今晚總管第一次呼叫就拿到「檢查 0 顆卻通過」的假綠。
ship.mjs:472有正確傳,所以不是活的 bug,但安全檢查的預設應該是 fail-closed。—— [總管]