fix(schedule): 補印執行那一支的允許規則,並回頭比對本文叫得到的每一支
巡檢多了執行到期內建項那一步,而印允許規則的清單是寫死的、沒跟著加。少一條 的代價不是報錯:那一輪停在權限詢問,鎖已經握在手上,接下來每一輪都讓開到鎖 逾時為止,而外面只看得到「心跳過期」。 補上那一條之後順手做掉根因。清單寫死,技能本文哪天多叫一支腳本這裡不會自己 知道,所以印完回頭掃一次本文,把它叫的每一支跟印過的比對,缺的逐支點名。 三個實作決定都是被自己踩出來的: 只掃 patrol 那一節,不掃整份。start 與 status 兩個操作都有人在現場,它們叫的 腳本跳一次權限詢問有人按得掉。整份掃會讓那幾支每次都被報成缺規則,而一份 每次都有雜訊的警告,看的人第二次就會跳過它——那時候真的漏一支就沒有人看得到。 技能本文的目錄名兩種版面都找:安裝版面帶 jsc- 前綴,開發用的並排工作目錄 版面不帶。原本只認一種,於是在另一種版面底下這道檢核被檔案存在檢查靜靜跳過 ——一道「找不到就當通過」的檢核,跟沒有那道檢核是同一件事。找不到就明說這 一次沒有比對過,不要不出聲。 只警告不中止。比對規則有可能跟不上本文的寫法,那時候不該連排程都裝不起來。 三份 manifest 版號 0.2.3 升到 0.2.4。 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "jsc-assist",
|
||||
"version": "0.2.3",
|
||||
"version": "0.2.4",
|
||||
"description": "助理:事件收攏、健康巡檢與待辦簿(MONITOR_{HASH} wiki 頁)",
|
||||
"skills": "./skills",
|
||||
"author": {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "jsc-assist",
|
||||
"version": "0.2.3",
|
||||
"version": "0.2.4",
|
||||
"description": "助理:事件收攏、健康巡檢與待辦簿(MONITOR_{HASH} wiki 頁)",
|
||||
"skills": "./skills",
|
||||
"jsc": {
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "jsc-assist",
|
||||
"version": "0.2.3",
|
||||
"version": "0.2.4",
|
||||
"description": "助理:事件收攏、健康巡檢與待辦簿(MONITOR_{HASH} wiki 頁)",
|
||||
"skills": "./skills/",
|
||||
"jsc": {
|
||||
|
||||
@@ -498,8 +498,12 @@ print_allow_rules() {
|
||||
# 代跑(那是已放行指令的子行程,不會再問一次),但收尾那一筆 skill-end 是技能自己用 Bash 叫的,
|
||||
# 那一次就要這一條規則。少了它,那一輪會停在最後一步的權限詢問,而排程那一輪沒有人可以按
|
||||
# 同意:那一輪的收尾事件寫不出去,start 永遠配不到 end,下一輪就把一輪其實做完的巡檢報成中止。
|
||||
# run-due.sh 是巡檢那一輪真的執行到期內建項的那一支,技能自己用 Bash 叫它。少了這一條,
|
||||
# 那一輪會停在那一步的權限詢問,而鎖已經握在手上:下一輪跟著讓開,一直到鎖逾時為止。
|
||||
# 它自己跑的那幾支盤點指令是它的子行程,不會再問一次,所以只要放行它自己這一條。
|
||||
for _s in "$ROOT/jsc-assist/tools/schedule.sh" \
|
||||
"$ROOT/jsc-assist/tools/patrol.sh" \
|
||||
"$ROOT/jsc-assist/tools/run-due.sh" \
|
||||
"$ROOT/jsc-hooks/hooks/heartbeat.sh" \
|
||||
"$ROOT/jsc-hooks/tools/report-status.sh" \
|
||||
"$ROOT/jsc-gitea/tools/gitea.sh" \
|
||||
@@ -508,12 +512,42 @@ print_allow_rules() {
|
||||
printf 'allow_rule=Bash(%s:*)\n' "$_s"
|
||||
printf 'allow_rule=Bash(sh %s:*)\n' "$_s"
|
||||
printf 'allow_rule=Bash(bash %s:*)\n' "$_s"
|
||||
_printed="${_printed:-} ${_s#"$ROOT/"}"
|
||||
done
|
||||
# 檔案規則寫的是解出來的絕對路徑,不是 $JSC_HOME/assistant:設定檔不展開變數,寫變數名
|
||||
# 等於這條規則永遠比對不到。
|
||||
printf 'allow_rule=Read(%s/**)\n' "$STATE_DIR"
|
||||
printf 'allow_rule=Edit(%s/**)\n' "$STATE_DIR"
|
||||
printf 'allow_rule=Skill(jsc-gitea:wiki)\n'
|
||||
|
||||
# 上面那份清單是寫死的,而技能本文哪天多叫一支腳本,這裡不會自己知道。漏一支的代價不是
|
||||
# 報錯,是那一輪停在權限詢問、鎖握在手上,接下來每一輪都讓開到鎖逾時為止——查起來只看得到
|
||||
# 「心跳過期」。所以這裡回頭掃一次技能本文,把它叫的每一支腳本跟上面印過的比對。
|
||||
# 只警告不中止:本文的寫法可能變,比對規則跟不上時不該連排程都裝不起來。
|
||||
# 目錄名以 jsc-assist 為準,找不到才退回不帶前綴的 assist:安裝版面是前者,開發用的並排
|
||||
# 工作目錄版面是後者。只認一種的話,在另一種版面底下這道檢核會被 [ -f ] 靜靜跳過——
|
||||
# 一道「找不到就當通過」的檢核,跟沒有那道檢核是同一件事。
|
||||
_skill=''
|
||||
for _cand in "$ROOT/jsc-assist/skills/assistant/SKILL.md" \
|
||||
"$ROOT/assist/skills/assistant/SKILL.md"; do
|
||||
[ -f "$_cand" ] && { _skill="$_cand"; break; }
|
||||
done
|
||||
if [ -z "$_skill" ]; then
|
||||
note "找不到技能本文,這一次沒有比對「本文叫得到的腳本有沒有全部放行」。找過 $ROOT/jsc-assist 與 $ROOT/assist 兩處。規則清單照樣印在上面,但少一支就是那一輪停在權限詢問,請自己核對一次。"
|
||||
else
|
||||
_missing=''
|
||||
# 只掃 patrol 那一節。規則防的是無人值守那一輪,而 start 與 status 兩個操作都有人在現場,
|
||||
# 它們叫的腳本跳一次權限詢問有人按得掉。整份掃的話那幾支會每次都被報成缺規則,而一份
|
||||
# 每次都有雜訊的警告,看的人第二次就會跳過它——那時候真的漏一支就沒有人看得到了。
|
||||
for _w in $(awk '/^## patrol$/{f=1;next} f && /^## /{exit} f' "$_skill" \
|
||||
| sed -n 's|.*{CURRENT}/\(jsc-[a-z-]*/[a-z-]*/[a-z-]*\.sh\).*|\1|p' | sort -u); do
|
||||
case " $_printed " in
|
||||
*" $_w "*) ;;
|
||||
*) _missing="${_missing:+$_missing、}$_w" ;;
|
||||
esac
|
||||
done
|
||||
[ -z "$_missing" ] || note "技能本文叫得到、但上面的規則沒有涵蓋的腳本:$_missing。那一輪叫到它就會停在權限詢問,而鎖已經握在手上,接下來每一輪都會讓開到鎖逾時。請把這幾支補進這一支腳本的規則清單,再重跑一次 install。"
|
||||
fi
|
||||
}
|
||||
|
||||
# 巡檢那一輪只用 $JSC_HOME/current 那一組連結叫工具,連結不在就是那一輪一定失敗。這裡只查
|
||||
|
||||
Reference in New Issue
Block a user