Files
meta/tools/delegate-spec.tsv
jiantw83andClaude Opus 5 5fcfc16dd1 fix(delegate): 唯讀盤點那一欄補一條結束碼規則,並換掉一個用結束碼帶狀態的指令
那一欄的合約規定了路徑形狀、代入點、不准有金錢符號與波浪號,卻從來沒定義
結束碼該怎麼解讀。漏了那一條就踩過一次。

填進來的那一支用結束碼帶三種狀態:接好、接好但這支 CLI 做不到、有東西沒接。
那是給人看的三分法,本身沒有錯。但讀的那一邊照非零判失敗,於是有先天限制的
那一支 CLI 每一輪讓那一筆失敗一次、一天 96 次,而沒有人修得動——那支 CLI
擋不下技能叫用是它的架構限制,不是接線缺漏,16 個接線項目全部就位。

失敗次數存在的理由是指出「有一筆壞掉的項目每輪重試而沒人知道」。被一個修不動
的數字填滿,就等於用假的壞掉把真的壞掉蓋掉。

所以補上那一條:這一欄的結束碼只准表示過與不過,不准用來編碼狀態。而且明寫
遇到用結束碼帶狀態的腳本時該怎麼做——去那一邊加一個只回過與不過的模式,不要
在這一欄將就。上游那一支已經加了那個旗標,這一列跟著換過去。

那一列的交出描述與判定版本號一併對齊:描述本來只寫子命令名,現在補上「先天
限制不算失敗」;版本號帶到上游加旗標的那一版,因為這一列的判定跟著它走。

三份 manifest 版號 0.3.7 升到 0.3.8。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-04 18:06:01 +08:00

109 lines
14 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# delegate-spec.tsv — jsc 技能組的委派判定清單。一支技能一列,記「這一支能不能交給背景助理」。
#
# 判準本身寫在 references/delegate-criteria.md,四支技能異動技能(skill-new、skill-update、
# skill-delete、skillset-update)共用那一份。這張表只放判定結果,不放判準。
#
# 判定結果只放這裡,不寫進 SKILL.md 的 frontmatter:name 與 description 之外的自訂欄位,
# 有被各 CLI 的技能驗證擋掉的風險。新增或刪除技能時同時補上或刪掉這一列,
# tools/check-delegate.sh 才對得起來;缺列的技能,助理永遠不知道它存在。
#
# 欄位:domain<TAB>name<TAB>verdict<TAB>way<TAB>slice<TAB>human<TAB>trigger<TAB>recur<TAB>next<TAB>version<TAB>origin<TAB>probe
# domain 技能所屬 domain,去掉開頭的 jsc-。形狀比照 list-skills.sh 第一欄
# name 技能名。形狀比照 list-skills.sh 第二欄,兩欄合起來就是一支技能的身分
# verdict full=全交 slice=切片交 cond=條件式交 none=不交
# way 交出方式,多個用半形逗號隔開:invoke=觸發 patrol=巡檢 remind=提醒;不交寫 -
# slice 交出的那一段。全交寫 -,整支都交;條件式交要把條件與條件不成立時的行為
# 一起寫進來;不交寫 -
# human 留在人手上的那一半。切片交與條件式交必填——少了它,助理下一輪會把整支技能
# 當成可交的一路跑完。不交填不交的理由,否則下次分不出「判過決定不交」與
# 「還沒判」。全交寫 -
# trigger 第一次什麼時候到期:at:{ISO 時間},立刻要做寫 at:now;或 after:{事件名}。
# 事件名只認固定詞彙,其中三個一定要帶參數,少了參數會被擋下:
# 不帶參數:worklog-written、hook-error、session-start、session-end
# 要帶參數:wp-merged:{工作包代號}、stage-entered:{階段}、
# analyze-completed:{HASH}
# 為什麼要寫明參數形狀:那三個事件是「哪一個工作包合併了」而不是「有工作包
# 合併了」,少了參數就指不到特定的一件事。寫成不帶參數的形狀,登錄那一步會
# 回欄位不合法,那支技能於是靜靜沒有內建項——少了什麼要看種入回報的 bad=
# 那幾行才發現。不交寫 -
# recur 做完之後還要不要再排:once、every:{間隔}、cron:{式子}。事件型 trigger 配
# every:{間隔} 時,間隔讀作重新武裝的最短間隔。不交寫 -
# next 跑完之後建議接哪一支,寫成 jsc-{domain}:{name}。每一列都要填,不交的也要填
# ——不交講的是助理不代跑,跟「跑完之後該接什麼」無關
# version 判定當下該 domain 的 plugin 版本號。落後現行版本代表要複判,那只是提示,
# 不算稽核缺失:版本號是 domain 層級,同 domain 改一支技能其餘技能也會被標到,
# 當成缺失的話每次發版整個 domain 都亮紅,提示很快就被當雜訊忽略
# origin seed=依既有盤點種入、待複核 judged=正式走過決策樹判定。
# seed 只印成待複核提示,不算缺失;技能有異動時就地走一次決策樹,轉成 judged
# probe 那一段唯讀盤點實際要跑的指令。只認三種寫法:
# 一、一行指令。腳本路徑一律寫成 {root}/jsc-{domain}/… 開頭。{root} 是種入那一支
# 拿到的字面絕對根目錄,由它自己代入;那一層的目錄名以 jsc-{domain} 為準,
# 找不到就退回不帶前綴的 {domain},比照它找這一份清單本身的作法。
# 指令裡不可以出現金錢符號或波浪號:那兩種寫法在無人值守那一輪解不出來,
# 也進不了允許清單,會被靜靜擋掉。要帶環境變數就寫在指令最前面,
# 例如 JSC_READONLY=1。另外兩個代入點,一個目標跑一次:{cli} 是助理偵測到的
# CLI 代號,{repo} 是助理掃到的存取庫工作目錄。這三個以外的大括號一律算填錯——
# 代不進去的字面值會原樣送進指令。
# 結束碼只准表示過與不過,不准用來編碼狀態。這一條是後來補的,因為漏了它
# 就踩過一次:填進來的那一支用結束碼帶三種狀態(接好、接好但這支 CLI 做不到、
# 有東西沒接),而讀的那一邊照非零判失敗,於是有先天限制的那一支 CLI 每輪
# 讓那一筆失敗一次、一天 96 次,而沒有人修得動。失敗次數存在的理由是指出
# 「有一筆壞掉的項目每輪重試而沒人知道」,被修不動的數字填滿就等於用假的
# 壞掉把真的壞掉蓋掉。要填的那一支如果用結束碼帶狀態,先去那一邊加一個
# 只回過與不過的模式,不要在這一欄將就。
# 填之前一定要真的跑一次那一行,不能照技能文件的措辭抄。實際踩過兩次:
# 一次抄來的子命令那支腳本根本沒有,跑起來是用法錯誤;一次抄來的子命令會
# 在標準輸入沒人關閉時無限等待,換成同一支的另一個子命令才回得來。兩種都
# 不會在種入那一刻報錯,要等無人值守那一輪才發作,而那一輪沒有人在看。
# 二、pending:{理由}。這一段切得出唯讀盤點,入口還沒接上;冒號後面寫不接的理由,
# 留白的話下一輪分不出是刻意還是漏填。
# 三、-。這一列沒有唯讀盤點入口。
# 哪一種列填哪一種:way 含 invoke 的列與不交的列一律填 -。觸發的意思是呼叫整支
# 技能,這一欄填了指令會讓種入那一支改拿指令當待辦簿的動作,於是整支交出變成
# 只跑一支腳本,那支技能該寫的頁一頁都不會寫,而且看起來完全正常。way 只有
# patrol 或 remind 的列一定要有值:那幾列的動作原本一律退回只提醒,有值才有
# 事情做。
# 為什麼要連網的先不填:連網要金鑰,金鑰一過期就讓那一項每輪失敗,或每輪靜靜
# 回報沒事——後者更難查。純本機讀取本來一輪都不會失敗。先填會連網的那一種,等於
# 用一批每輪報錯的項目把真的發現蓋掉。所以要連網的先寫 pending,理由寫清楚,
# 等入口與金鑰都有著落再換成指令。
# 檢核怎麼看:pending 只印成待接線提示,不算缺失,同 origin=seed 那一條——它是
# 「判過、知道還沒接」,不是漏填。填錯欄位、指到不存在的腳本、用了認不得的
# 代入點,都算缺失。
#
ask ask slice patrol 唯讀查 QUESTION_CONTENTS,確認要交辦的事是不是早就有答案 問答本身。助理在背景問不到人,沒有人在場就收不到答案 at:now every:1d jsc-gitea:wiki 0.1.3 seed pending:要連 wiki 讀 QUESTION 目錄頁,得帶金鑰
assist assistant none - - 助理本身。讓它自我發動,一輪巡檢會在背景又叫起另一輪,誰都停不下來 - - jsc-log:stats 0.1.6 seed -
cli delegate cond invoke 條件是這一項任務唯讀:唯讀巡檢可以委派給別支 CLI,省當前 CLI 的額度。條件不成立,也就是會改檔案的任務,一律不委派;委派失敗就退回自己跑 判斷哪一項算唯讀、額度要不要省,還有委派給哪一支 CLI at:now every:1d jsc-log:stats 0.3.4 seed -
cli deploy slice remind 遠端有新版就提醒 安裝、更新、卸除、要求重啟 at:now every:1d jsc-hooks:hooks-install 0.3.4 seed pending:查遠端發佈版本要連 Gitea 並帶金鑰
cli doctor cond invoke 條件式:只有在 doctor 呼叫自家 tools/ 與 templates/ 的路徑不再帶版本號之後才可以交。交出的那一段是定期整輪健檢、寫 CHECK_{HASH}。條件不成立時的行為:一律不交,維持人在現場叫用 修——那是 jsc-cli:setup,逐項確認。另外,條件沒滿足之前整支都留在人手上:doctor 自家腳本走的是 CLI 載入技能時給的外掛基底目錄,那條路徑帶版本號、進不了允許清單,無人值守的每一輪都會無聲卡在第一支腳本 at:now every:7d jsc-cli:setup 0.3.4 seed -
cli models slice invoke 定期跑 model-tags.sh sync 重建能力標籤表,並盤點各 CLI 可用模型 換模型、改設定 at:now every:7d jsc-cli:doctor 0.3.4 seed -
cli setup none - - 改設定與接線,要逐項確認 - - jsc-cli:doctor 0.3.4 seed -
git commit none - - 對外不可逆 - - jsc-git:pr 0.1.5 seed -
git pr none - - 對外不可逆 - - jsc-log:worklog 0.1.5 seed -
gitea html-export none - - 要人指定是哪一頁或哪一個議題。助理在背景猜不到,猜錯就匯出別人的頁 - - jsc-gitea:html-style 0.2.5 seed -
gitea html-style none - - 版型與樣式是使用者的偏好,要逐項確認才寫得下去 - - jsc-gitea:html-export 0.2.5 seed -
gitea repo-sync slice patrol 盤點哪些存取庫落後遠端、哪些還沒同步下來 clone 與 update——會動工作目錄 at:now every:1d jsc-git:pr 0.2.5 seed pending:repo-sync.sh 會 clone 與 pull,沒有唯讀子命令;盤點落後也要連遠端
gitea wiki none - - 助理的手腳,不獨立排程。助理所有 wiki 讀寫都經過它,一律附加 - - jsc-gitea:html-export 0.2.5 seed -
gitea wiki-to-issue none - - 對外不可逆 - - jsc-sdlc:analyze 0.2.5 seed -
hooks hooks-install slice patrol wire-cli.sh status --verdict 唯讀盤點接線,先天限制不算失敗 重新接線 at:now every:1d jsc-hooks:repair 0.4.5 seed JSC_READONLY=1 {root}/jsc-hooks/tools/wire-cli.sh status {cli} --verdict
hooks repair slice invoke 巡檢抓到 hook 錯誤就發動修復 診斷、改哪一支、開 PR,全照 repair 自己的流程 after:hook-error every:1h jsc-git:pr 0.4.4 seed -
log learn slice patrol 發動技能前先查過去教訓,也就是 consult 那一段 記錄教訓的判斷。哪一次值得留下來要人說 at:now every:1d jsc-log:worklog 0.1.9 seed pending:要連 wiki 讀 LEARN 目錄頁,得帶金鑰
log report slice invoke 週期到了就產週報、月報、年報 報告要不要改寫、要不要送人看 at:now every:7d jsc-log:learn 0.1.9 seed -
log stats full invoke - - at:now every:7d jsc-log:report 0.1.9 seed -
log worklog slice patrol,remind 任務結束時收口計時與 token,補進 worklog-pending;該寫沒寫就催 寫日誌本體——狀態、細節、難處要人給 after:session-end every:1h jsc-log:learn 0.1.9 seed pending:worklog-pending.sh 七個子命令全部要先給工作階段雜湊,沒有不帶參數的盤點入口,掃不出「該寫沒寫」的那幾筆
meta skill-check cond invoke 條件是只交機械檢核那一段:腳本語法、manifest 版本一致、README 技能清單與實際技能對得上。條件不成立的那一段,也就是語意審查與流程效率判斷,一律不交,那要讀完整份 SKILL.md 語意審查、流程與成本效率判斷,還有要不要套用建議 at:now every:7d jsc-meta:skill-update 0.3.1 seed -
meta skill-delete none - - 改技能組本身,等於助理改自己 - - jsc-meta:skill-check 0.3.1 seed -
meta skill-new none - - 改技能組本身,等於助理改自己 - - jsc-meta:skill-check 0.3.1 seed -
meta skill-update none - - 改技能組本身,等於助理改自己 - - jsc-meta:skill-check 0.3.1 seed -
meta skillset-update none - - 改技能組本身,等於助理改自己 - - jsc-meta:skill-check 0.3.1 seed -
meta ste100-sync slice patrol,remind 定期比對上游版本,落後就提醒 套用上游變更 at:now every:7d jsc-meta:skill-check 0.3.1 seed pending:比對上游版本要連上游站台
meta tooling-guide full invoke - - at:now every:7d jsc-meta:skill-check 0.3.1 seed -
pkg pkg-update slice patrol 用 list-packages.sh、latest-version.sh 唯讀盤點落後最新穩定版的套件 升版、跑建置與測試 at:now every:7d jsc-review:code-review 0.1.0 seed {root}/jsc-pkg/tools/list-packages.sh {repo}
review api-doc none - - 審查要判斷,判準要讀完整份文件與程式碼;助理在背景判不出來 - - jsc-git:pr 0.1.3 seed -
review code-review none - - 審查要判斷,而且要不要照著改由呼叫端決定 - - jsc-review:api-doc 0.1.3 seed -
review comment-cleanup none - - 會改專案檔案 - - jsc-git:commit 0.1.3 seed -
sdlc analyze slice patrol,remind 盤點 ANALYZE_CONTENTS 未完成的分析並先把選項清單備好;另巡檢分析頁勾選與工作包議題狀態對不對得上 分析本體全部要決策。勾選與議題對不上時要對齊哪一邊,是真實來源衝突,也要人判 at:now every:1d jsc-sdlc:implement 0.3.2 seed pending:要連 wiki 讀 ANALYZE 目錄頁,得帶金鑰
sdlc implement slice patrol,remind wp-gate.sh check-deps 盤點哪些工作包可以開始;階段鎖殘留就提醒 挑工作包、寫程式碼、開 PR。鎖檔不自己刪 at:now every:1d jsc-log:worklog 0.3.2 seed {root}/jsc-hooks/hooks/sdlc-gate.sh wp-report
sdlc maintain none - - 核心是決策與寫程式碼 - - jsc-log:worklog 0.3.2 seed -
sdlc plan slice patrol,remind 盤點 PLAN_CONTENTS 還沒分析的計畫,先把選項清單備好 規劃本體全部要決策 at:now every:1d jsc-sdlc:analyze 0.3.2 seed pending:要連 wiki 讀 PLAN 目錄頁,得帶金鑰