釋出助理巡檢的路徑修正與先前累積的變更至 master,版本 0.1.2 升到 0.1.6 #15

Merged
admin merged 14 commits from develop into master 2026-09-03 03:17:06 +00:00
Member

摘要

  • 需求描述:把 develop 累積的變更釋出到 master。部署工具的 git clone 沒有指定分支,抓的是預設分支 master,所以變更沒進 master 就等於沒有到任何一台機器。版本 0.1.2 升到 0.1.6。
  • 計畫名稱:無
  • 計畫頁:無
  • 分析頁:無

變更內容

巡檢改用字面絕對路徑、根目錄由排程條目帶入、根目錄守門補上目錄存在檢查;另含先前累積的巡檢目錄頁區塊改寫、收尾寫 skill-end 事件、連結一律寫成絕對網址並先驗證連得到。

設計重點

  • 這是釋出用的 PR,內容全部來自已經審過並合併進 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

  • 無
## 摘要 - 需求描述:把 `develop` 累積的變更釋出到 `master`。部署工具的 `git clone` 沒有指定分支,抓的是預設分支 `master`,所以變更沒進 `master` 就等於沒有到任何一台機器。版本 0.1.2 升到 0.1.6。 - 計畫名稱:無 - 計畫頁:無 - 分析頁:無 ## 變更內容 巡檢改用字面絕對路徑、根目錄由排程條目帶入、根目錄守門補上目錄存在檢查;另含先前累積的巡檢目錄頁區塊改寫、收尾寫 `skill-end` 事件、連結一律寫成絕對網址並先驗證連得到。 ## 設計重點 - 這是釋出用的 PR,內容全部來自已經審過並合併進 `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 - 無
jiantw83 added 14 commits 2026-09-03 03:01:47 +00:00
取消 [[頁名]] 與 [[顯示文字|頁名]] 兩種同 wiki 寫法,不再分「同存取庫」與
「跨存取庫」兩條規則。那種寫法只在自己那個 wiki 內解析,寫錯不報錯,畫面上
看起來像普通文字或死連結,巡不到也修不了。

連結寫進頁面前先過 jsc-gitea 的 link-check.sh,結束碼 0 才寫。驗證一律走 API,
不看網頁狀態碼:私有存取庫的網頁網址對未登入請求一律回 404,拿狀態碼判會把
好連結判成壞的。認證失敗回 7,與死連結的 1 分開,免得金鑰一過期就把還在的頁
整批判死。
Reviewed-on: #11
現行紀錄只記「被叫用」,沒有成敗也沒有結束碼。跑完整輪的技能與開場就
中止的技能,在紀錄裡長得一模一樣。

start 由技能用量 hook 順手發,不必改技能文件。end 只能由技能自己在收尾
步驟寫——hook 接在技能工具呼叫上,而實際工作發生在之後的模型輪次,它在
原理上看不到成敗。有 start 沒有配對的 end,就是那一輪中止了。

status 五選一,每支技能各自寫明什麼情況選哪一個。找不到回報腳本就安靜
跳過,回報失敗一律不改變技能自己的結論。
Reviewed-on: #12
巡檢目錄頁的版面從 markdown 表格換成「大標題加條列」:一台機器一個大標題
區塊,標題就是那一台機器監控頁的實際頁名,欄位改成標題底下的一層條列。
範本、技能敘述、行為清單與說明文件一併跟上,目錄頁上不再留任何表格。

表格的欄位組合是整頁共用的,表頭跟著建頁那一台機器走,之後每一台只改自己
那一列。欄位一增減,只有跑到新版的機器寫得出新的格數,同一張表就混著兩種
格數,多出來的那一格對不到任何欄名,而目錄頁又沒有整頁改寫的路可以走——
整頁覆蓋等於刪掉別台機器的紀錄。條列一筆一個區塊,欄位各自獨立,加一條只
動到自己那一個區塊。

比對鍵從裸雜湊那一格改成大標題本身,標題寫成監控頁的實際頁名。頁名只由
主機名與登入帳號決定,換主機位址、換專用存取庫或換一種頁名編碼都動不到
它;含網址的那一條連結照樣留著給人點,但不當鍵。呼叫改成拿頁名當鍵,欄號
那個參數只在舊表格頁轉檔時用得到。範本原本用二階標題寫的說明區段全部搬進
引言,否則轉檔後會被當成一筆真紀錄讀進去。

範圍是助理的巡檢目錄頁與 assistant 技能的敘述。
一輪巡檢組給目錄頁的輸出,從一列 markdown 表格改成一整個大標題區塊:
`## {監控頁頁名}` 那一行、空行,然後每個欄位一條 `- {欄位名}:{值}`。輸出
檔跟著從 `contents.tsv` 改名 `contents-entry.md`,`contents_file=` 指向
新檔名。

目錄頁已經不放表格,再組出那一列就沒有地方放。舊檔名說的是逐欄對照的資料
檔,內容其實是一段 markdown,名不對實會讓呼叫端以為還能逐欄解析。改名讓
呼叫端契約的變動在檔名上就看得見,而不是同名檔悄悄換了格式——同名換格式
的話,還沒跟上的呼叫端會拿到讀得開卻意義全錯的內容。

新增 `oneline` 處理條列一條的值:換行一律壓成空白,因為一條條列裡的換行會
被讀成另一條,或者讓整個區塊提早結束;`|` 反而不跳脫,條列裡沒有切欄的
意思,跳脫過的符號會原樣顯示在頁面上。監控頁那一條的網址仍然留佔位,由
呼叫端換成真網址、驗過連得到才寫,這支腳本一頁都不寫。裸雜湊照樣留一條,
讓人不必從標題切字串就抄得到。

範圍是一輪巡檢給目錄頁的輸出檔。
三份外掛清單的版號一起往上推一版。

目錄頁的版面與巡檢輸出檔名都變了,呼叫端要靠版號才判得出手上這一份是新的
還是舊的。版號不動,版本閘門就不會提示更新,機器上會留著舊版工具去讀新版
範本。

三份清單各自被不同的 CLI 讀,值必須一致,所以一起改、一起提交。

範圍是外掛清單的版號宣告。
Reviewed-on: #13
無人看管的排程輪次在第一支腳本就被權限層擋下。心跳因此寫不出來,助理斷了兩個多小時,沒有人發現。

2026-09-02 到 09-03 用非互動模式比照排程環境實測七種寫法,歸納出兩條判準。一、無人值守時只有允許清單上的完整字面指令跑得動,沒有「預設安全的唯讀指令」這回事,連 readlink 與 ls 都要有自己的規則。二、路徑中段的萬用字元不匹配,規則與指令都必須是完整字面,所以帶版本號的快取路徑放不進允許清單。「先解路徑再用」因此不成立:解路徑的指令自己就過不了,而路徑能寫成字面就不必解。

助理技能新增路徑守則與 Step 0。守則寫明權限層比對的是指令還沒展開的字面字串,帶未展開變數或波浪號的路徑一律要核准,並附上七列實測佐證表。Step 0 從「自己跑 readlink 解路徑」改成「從叫用文字的『工具根目錄=』取字面絕對路徑」,排程那一輪一個解析指令都不跑;人在現場叫用才用 readlink 解一次,那一次有人可以按同意。取不到根目錄就停下回報,收尾狀態取 aborted,不猜也不退回帶變數的路徑。全篇 46 處腳本呼叫改成字面絕對路徑。

排程工具在安裝時把解好的字面根目錄寫進條目的提示文字,並印成 patrol_root=。條目與允許規則共用同一個值,兩邊各算各的就會差開,而差開的那一輪是被靜靜擋掉。允許規則的提示改成完整字面路徑,不寫變數、波浪號與萬用字元。JSC_HOME 解不出絕對路徑時回結束碼 6,不讓相對路徑寫進條目。自訂巡檢指令沒帶那一段只警告、不中止。

行為契約四列與說明文件兩處敘述一併跟上。
三份 manifest 的版本從 0.1.5 升到 0.1.6,由 sync-skill-manifest.sh 同步。

助理技能的路徑守則與排程條目的內容都改過,安裝端要靠版號才認得出該更新,不升版的話舊條目會一直留在機器上。

版號與主變更分開成一筆,是因為這三個檔案只帶版號、不帶行為,混進主變更會讓那一筆的 diff 夾雜非行為變更;分開之後回溯哪一版對應哪一次變更也看得清楚。
人在現場那一條路解出根目錄之後,守門只看「非空、結束碼 0、是絕對路徑」三項,攔不住 JSC_HOME 沒設的情況。

實測:JSC_HOME 沒設時,readlink -f "$JSC_HOME/current" 印出 /current、結束碼 0。三項全部符合,直接通關,而 /current 並不存在。之後每一條由它組出來的字面路徑都指向不存在的地方,錯誤要到第一支腳本才浮出來,而且訊息看不出根因。

守門加上第四項:印出來的路徑必須是存在的目錄,用 [ -d ] 在同一個已核准的步驟裡查。檢查只掛在人在現場那一條,排程那一輪照舊一個指令都不跑——它的根目錄是安裝排程的人寫進條目的,錯了就由第一支腳本呼叫失敗來反映。

行為契約的關鍵步驟與完成條件兩列跟著改。
Reviewed-on: #14
admin approved these changes 2026-09-03 03:17:02 +00:00
admin merged commit 2e6b0b9b42 into master 2026-09-03 03:17:06 +00:00
Sign in to join this conversation.
No Reviewers
No labels
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: plugins/assist#15