develop
master
git clone
hooks-install 的腳本呼叫改用執行期解出的字面絕對路徑、repair 的可驗證跡象補上收尾事件;另含先前累積的 report-status.sh 本機事件流、status 列舉每一個接線點、連結格式統一。
report-status.sh
status
check-behaviors.sh
ste100-lint.sh
lint-frontmatter.sh
lint-scripts.sh
link-check.sh
取消 [[頁名]] 與 [[顯示文字|頁名]] 兩種同 wiki 寫法,不再分「同存取庫」與 「跨存取庫」兩條規則。那種寫法只在自己那個 wiki 內解析,寫錯不報錯,畫面上 看起來像普通文字或死連結,巡不到也修不了。 連結寫進頁面前先過 jsc-gitea 的 link-check.sh,結束碼 0 才寫。驗證一律走 API, 不看網頁狀態碼:私有存取庫的網頁網址對未登入請求一律回 404,拿狀態碼判會把 好連結判成壞的。認證失敗回 7,與死連結的 1 分開,免得金鑰一過期就把還在的頁 整批判死。
Reviewed-on: #75
README 早就寫明「每個接線點印一行 item」,程式卻只列 comment-scope、 lang-guard、restart-gate 與 write-guard 三種模式,共六項。sdlc-gate 的三個 接線點、session-timer 的兩個、skill-usage 與 version-guard 都沒列出來。 漏列的後果不是少幾行字。reason 那行寫的是「全部九支 hook」,拿這份輸出 驗收接線的人會把沒列到的當成沒接——模型能力鎖就是這樣被誤判成沒接線的。 體檢技能也讀這支的輸出,同樣看不到那四支。 一支腳本接在多個接線點時,每個點各自列一項。只驗腳本名的話,「腳本在、 某個接線點沒接」會被算成完整接線,那正是最難查的一種。
Reviewed-on: #76 Reviewed-by: 系統管理員 <1+admin@noreply.localhost>
現行紀錄只記「被叫用」,欄位是 ts、cli、session、skill,沒有成敗也沒有 結束碼。跑完整輪的技能與開場就中止的技能,在紀錄裡長得一模一樣。hook 成功時更是完全不留紀錄,只有錯誤路徑會寫 wiki,而那條路徑刻意不自動觸發。 事件流走本機檔案,不直接寫 wiki。hook 每次提示都跑,網路寫入會拖垮宿主 CLI;失敗的 hook 自我回報還會疊出迴圈,既有的錯誤回報因此不接在失敗的 hook 上,這裡沿用同一條線。助理巡檢時排空、彙整、寫頁。 hook 端用 EXIT trap 接,一支只加一行。這幾支的 exit 點很多,階段閘門一支 就有五十幾個;逐點改要動到每一條判定路徑,而那些路徑正是閘門的判準,為了 加一行紀錄去動閘門,風險遠大於收益。trap 涵蓋每一條離開路徑,含中途失敗。 狀態預設由結束碼推,推不出來的由 hook 自己覆寫。相依版本檢查與兩道閘門有 這種情形:antigravity 走 deny JSON、kiro 只印警告,兩者擋下時結束碼都是 0, 單看結束碼會把擋下記成放行。 技能的 start 由既有的技能用量 hook 順手發,不必改任何技能文件。end 只能由 技能自己在收尾步驟寫——hook 觸發時技能的實際工作還在後面的模型輪次,看不到 成敗。有 start 沒有配對的 end,就是那一輪中止了。
Reviewed-on: #77
無人看管的輪次會在第一支腳本就被擋下,整輪還沒開始就結束。2026-09-02 到 09-03 以非互動模式比照排程環境實測七種寫法,結論很乾淨:權限層比對的是還沒展開的字面字串,帶變數或帶波浪號的路徑一律解不出來,一律要人核准;路徑中段的萬用字元也不匹配,所以帶版本號的快取路徑放不進允許清單。連 readlink、ls 這種只讀指令都要有自己的規則。放寬允許清單救不了這件事,只有把路徑寫成字面絕對值才跑得動。 技能因此多兩節。路徑守則寫明每一次腳本呼叫都要是字面絕對路徑,並說清楚為什麼不能為了可攜性換回變數寫法——變數寫法買不到可攜性,只買到一輪還沒跑到第一階段就死掉。前置步驟把可攜性挪到執行期:兩個根目錄各以 readlink 解一次,只在這裡解,之後不重解,也不為此新增腳本。主代理人解完把兩條字面路徑交給每一個 sub agent,sub agent 自己不解。技能內九處腳本呼叫都改成由這兩個根目錄開頭。 兩條 readlink 各自在同一步用 [ -d ] 查過印出來的目錄真的存在。JSC_HOME 沒設時第一條會印出 /current、結束碼 0,非空又是絕對路徑,只查前三項擋不下來。 解兩個根目錄不是重複。連結農場根目錄給跨 domain 呼叫用;jsc-hooks 的實體根目錄只給接線腳本用,而這一條的理由與權限無關:那支腳本從自身位置推出自己的根目錄,又會改寫自己正踩著的那條連結。走連結跑下去,連結會被指向自己,全機器的 hook 一起失效——這件事實際發生過。 存放庫自帶的 hook 設定檔刻意保留變數寫法,技能文件也把這個例外寫明。那是檔案內容,由 hook 自己的 shell 在執行當下展開,不經過權限層,也不是誰在提示裡打出來的路徑;改成實體路徑等於把某一台機器的路徑寫死進要發佈的檔案。 行為清單的 hooks-install 四列跟著校準。 受影響的是每一個跑 hooks-install 的人,最直接的是排程觸發、沒有人在旁邊核准的那些輪次。
行為清單檢查拿 HEAD 的內容跑就過不了,它點名 repair 那一列的可驗證跡象沒寫到收尾的 skill-end 事件。這是既有欠帳,跟這一批的路徑處理沒有關係,所以單獨一筆,之後要回退哪一邊都不會牽連另一邊。 補上的內容照準則寫:收尾在本機事件流留下這一輪的 skill-end,status 從 ok、blocked、failed、degraded、aborted 五個裡取一個,中途停下的那幾輪也照寫——只有 start 沒有配對的 end,會被讀成中斷。 受影響的是驗收 repair 有沒有跑完的人,還有把行為清單檢查掛在流程裡的每一個存放庫。
hooks-install 的路徑處理與行為清單都變了,版號要帶得出這批變更,版本前置檢查才會要求機器端更新。 三份 manifest 由 sync-skill-manifest.sh 同步,只動版本欄位,內容一致。 受影響的是靠版號判斷要不要更新的每一台機器。
Reviewed-on: #80
No dependencies set.
The note is not visible to the blocked user.
摘要
develop累積的變更釋出到master。部署工具的git clone沒有指定分支,抓的是預設分支master,所以變更沒進master就等於沒有到任何一台機器。版本 0.3.8 升到 0.4.2。變更內容
hooks-install 的腳本呼叫改用執行期解出的字面絕對路徑、repair 的可驗證跡象補上收尾事件;另含先前累積的
report-status.sh本機事件流、status列舉每一個接線點、連結格式統一。設計重點
develop的變更,這裡不新增任何程式碼。develop,但部署抓master,不釋出就到不了機器。測試結果
develop前都跑過並回結束碼 0:check-behaviors.sh、ste100-lint.sh、lint-frontmatter.sh、lint-scripts.sh。link-check.sh與report-status.sh兩支腳本。前置 Push Request