切片交的那幾支,助理現在只會提醒不會動手,因為沒有東西記得下「那一段唯讀盤點到底要跑什麼」。清單加第十二欄記具體指令,種入那一支有值就拿它當動作、沒值才退回只提醒。 只認三種寫法。一行指令,路徑一律寫成代入點開頭,由種入那一支代進字面絕對根目錄;指令裡不可以出現金錢符號或波浪號,那兩種在無人值守那一輪解不出來也進不了允許清單,會被靜靜擋掉。要標未接線就寫理由,留白的話下一輪分不出是刻意還是漏填。沒有唯讀入口的寫減號。 觸發型與不交的列一律填減號。觸發的意思是呼叫整支技能,這一欄填了指令會讓種入那一支改拿指令當動作,於是整支交出降級成只跑一支腳本,該寫的頁一頁都不會寫,而且看起來完全正常。這條由檢核腳本擋。 逐項回各存放庫核對,不照抄既有盤點的措辭,因而抓到五處對不上實際腳本的地方。 最要緊的一處:既有盤點點名的那支工具腳本要三個參數,其中兩個無人值守那一輪根本拿不到,而且它是唯一會去問遠端的一方。改用同一件事的本機那一半,而那個子命令剛好在閘門腳本「免讀標準輸入」的清單裡。這一點非確認不可:同一支腳本的另一個子命令不在那份清單上,標準輸入是管線又沒人關閉時會一直等,實測會無限卡住。腳本自己的註解就記著這個坑,說工具腳本轉呼叫時曾經整支卡死——那正是先前心跳斷掉的同一種死法。 另一處:既有盤點點名的同步子命令會寫檔,不是唯讀。那一列剛好是觸發型所以填減號、衝突沒落地,但措辭本身是錯的。 七項標成未接線,理由都是要連網要金鑰。連網那一種一過期就讓那一項每輪失敗,或每輪靜靜回報沒事——後者更難查;而純本機讀取本來一輪都不會失敗。先填會連網的,等於用一批每輪報錯的項目把真的發現蓋掉。 還記下一件接線那天要注意的事:查遠端版本那一支永遠回成功,查不到就安靜放行,所以金鑰失效時它會靜靜回報沒有新版。接線要用另一個子命令,那個有「查不出來」這第三種結論。 檢核腳本從四項檢查改成五項。填錯欄位、指到不存在的腳本、用了認不得的代入點都算缺失;標未接線只印提示,那是判過知道還沒接,不是漏填;指到的 domain 本機沒裝也只提示,那是機器少裝一套不是清單填錯,算缺失會讓半套機器每輪亮紅。 五支技能異動流程一併改:寫清單時要問到並寫下這一欄,重判時要一併重問,刪除時要檢查別列有沒有指到一起刪掉的腳本,一次改多支時要注意跨存放庫搬腳本是這一欄最容易過期的地方。
12 KiB
12 KiB
| 1 | # delegate-spec.tsv — jsc 技能組的委派判定清單。一支技能一列,記「這一支能不能交給背景助理」。 | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2 | # | |||||||||||
| 3 | # 判準本身寫在 references/delegate-criteria.md,四支技能異動技能(skill-new、skill-update、 | |||||||||||
| 4 | # skill-delete、skillset-update)共用那一份。這張表只放判定結果,不放判準。 | |||||||||||
| 5 | # | |||||||||||
| 6 | # 判定結果只放這裡,不寫進 SKILL.md 的 frontmatter:name 與 description 之外的自訂欄位, | |||||||||||
| 7 | # 有被各 CLI 的技能驗證擋掉的風險。新增或刪除技能時同時補上或刪掉這一列, | |||||||||||
| 8 | # tools/check-delegate.sh 才對得起來;缺列的技能,助理永遠不知道它存在。 | |||||||||||
| 9 | # | |||||||||||
| 10 | # 欄位:domain<TAB>name<TAB>verdict<TAB>way<TAB>slice<TAB>human<TAB>trigger<TAB>recur<TAB>next<TAB>version<TAB>origin<TAB>probe | |||||||||||
| 11 | # domain 技能所屬 domain,去掉開頭的 jsc-。形狀比照 list-skills.sh 第一欄 | |||||||||||
| 12 | # name 技能名。形狀比照 list-skills.sh 第二欄,兩欄合起來就是一支技能的身分 | |||||||||||
| 13 | # verdict full=全交 slice=切片交 cond=條件式交 none=不交 | |||||||||||
| 14 | # way 交出方式,多個用半形逗號隔開:invoke=觸發 patrol=巡檢 remind=提醒;不交寫 - | |||||||||||
| 15 | # slice 交出的那一段。全交寫 -,整支都交;條件式交要把條件與條件不成立時的行為 | |||||||||||
| 16 | # 一起寫進來;不交寫 - | |||||||||||
| 17 | # human 留在人手上的那一半。切片交與條件式交必填——少了它,助理下一輪會把整支技能 | |||||||||||
| 18 | # 當成可交的一路跑完。不交填不交的理由,否則下次分不出「判過決定不交」與 | |||||||||||
| 19 | # 「還沒判」。全交寫 - | |||||||||||
| 20 | # trigger 第一次什麼時候到期:at:{ISO 時間},立刻要做寫 at:now;或 after:{事件名}。 | |||||||||||
| 21 | # 事件名只認固定詞彙,其中三個一定要帶參數,少了參數會被擋下: | |||||||||||
| 22 | # 不帶參數:worklog-written、hook-error、session-start、session-end | |||||||||||
| 23 | # 要帶參數:wp-merged:{工作包代號}、stage-entered:{階段}、 | |||||||||||
| 24 | # analyze-completed:{HASH} | |||||||||||
| 25 | # 為什麼要寫明參數形狀:那三個事件是「哪一個工作包合併了」而不是「有工作包 | |||||||||||
| 26 | # 合併了」,少了參數就指不到特定的一件事。寫成不帶參數的形狀,登錄那一步會 | |||||||||||
| 27 | # 回欄位不合法,那支技能於是靜靜沒有內建項——少了什麼要看種入回報的 bad= | |||||||||||
| 28 | # 那幾行才發現。不交寫 - | |||||||||||
| 29 | # recur 做完之後還要不要再排:once、every:{間隔}、cron:{式子}。事件型 trigger 配 | |||||||||||
| 30 | # every:{間隔} 時,間隔讀作重新武裝的最短間隔。不交寫 - | |||||||||||
| 31 | # next 跑完之後建議接哪一支,寫成 jsc-{domain}:{name}。每一列都要填,不交的也要填 | |||||||||||
| 32 | # ——不交講的是助理不代跑,跟「跑完之後該接什麼」無關 | |||||||||||
| 33 | # version 判定當下該 domain 的 plugin 版本號。落後現行版本代表要複判,那只是提示, | |||||||||||
| 34 | # 不算稽核缺失:版本號是 domain 層級,同 domain 改一支技能其餘技能也會被標到, | |||||||||||
| 35 | # 當成缺失的話每次發版整個 domain 都亮紅,提示很快就被當雜訊忽略 | |||||||||||
| 36 | # origin seed=依既有盤點種入、待複核 judged=正式走過決策樹判定。 | |||||||||||
| 37 | # seed 只印成待複核提示,不算缺失;技能有異動時就地走一次決策樹,轉成 judged | |||||||||||
| 38 | # probe 那一段唯讀盤點實際要跑的指令。只認三種寫法: | |||||||||||
| 39 | # 一、一行指令。腳本路徑一律寫成 {root}/jsc-{domain}/… 開頭。{root} 是種入那一支 | |||||||||||
| 40 | # 拿到的字面絕對根目錄,由它自己代入;那一層的目錄名以 jsc-{domain} 為準, | |||||||||||
| 41 | # 找不到就退回不帶前綴的 {domain},比照它找這一份清單本身的作法。 | |||||||||||
| 42 | # 指令裡不可以出現金錢符號或波浪號:那兩種寫法在無人值守那一輪解不出來, | |||||||||||
| 43 | # 也進不了允許清單,會被靜靜擋掉。要帶環境變數就寫在指令最前面, | |||||||||||
| 44 | # 例如 JSC_READONLY=1。另外兩個代入點,一個目標跑一次:{cli} 是助理偵測到的 | |||||||||||
| 45 | # CLI 代號,{repo} 是助理掃到的存取庫工作目錄。這三個以外的大括號一律算填錯—— | |||||||||||
| 46 | # 代不進去的字面值會原樣送進指令。 | |||||||||||
| 47 | # 二、pending:{理由}。這一段切得出唯讀盤點,入口還沒接上;冒號後面寫不接的理由, | |||||||||||
| 48 | # 留白的話下一輪分不出是刻意還是漏填。 | |||||||||||
| 49 | # 三、-。這一列沒有唯讀盤點入口。 | |||||||||||
| 50 | # 哪一種列填哪一種:way 含 invoke 的列與不交的列一律填 -。觸發的意思是呼叫整支 | |||||||||||
| 51 | # 技能,這一欄填了指令會讓種入那一支改拿指令當待辦簿的動作,於是整支交出變成 | |||||||||||
| 52 | # 只跑一支腳本,那支技能該寫的頁一頁都不會寫,而且看起來完全正常。way 只有 | |||||||||||
| 53 | # patrol 或 remind 的列一定要有值:那幾列的動作原本一律退回只提醒,有值才有 | |||||||||||
| 54 | # 事情做。 | |||||||||||
| 55 | # 為什麼要連網的先不填:連網要金鑰,金鑰一過期就讓那一項每輪失敗,或每輪靜靜 | |||||||||||
| 56 | # 回報沒事——後者更難查。純本機讀取本來一輪都不會失敗。先填會連網的那一種,等於 | |||||||||||
| 57 | # 用一批每輪報錯的項目把真的發現蓋掉。所以要連網的先寫 pending,理由寫清楚, | |||||||||||
| 58 | # 等入口與金鑰都有著落再換成指令。 | |||||||||||
| 59 | # 檢核怎麼看:pending 只印成待接線提示,不算缺失,同 origin=seed 那一條——它是 | |||||||||||
| 60 | # 「判過、知道還沒接」,不是漏填。填錯欄位、指到不存在的腳本、用了認不得的 | |||||||||||
| 61 | # 代入點,都算缺失。 | |||||||||||
| 62 | # | |||||||||||
| 63 | ask | ask | slice | patrol | 唯讀查 QUESTION_CONTENTS,確認要交辦的事是不是早就有答案 | 問答本身。助理在背景問不到人,沒有人在場就收不到答案 | at:now | every:1d | jsc-gitea:wiki | 0.1.3 | seed | pending:要連 wiki 讀 QUESTION 目錄頁,得帶金鑰 |
| 64 | assist | assistant | none | - | - | 助理本身。讓它自我發動,一輪巡檢會在背景又叫起另一輪,誰都停不下來 | - | - | jsc-log:stats | 0.1.6 | seed | - |
| 65 | cli | delegate | cond | invoke | 條件是這一項任務唯讀:唯讀巡檢可以委派給別支 CLI,省當前 CLI 的額度。條件不成立,也就是會改檔案的任務,一律不委派;委派失敗就退回自己跑 | 判斷哪一項算唯讀、額度要不要省,還有委派給哪一支 CLI | at:now | every:1d | jsc-log:stats | 0.3.4 | seed | - |
| 66 | cli | deploy | slice | remind | 遠端有新版就提醒 | 安裝、更新、卸除、要求重啟 | at:now | every:1d | jsc-hooks:hooks-install | 0.3.4 | seed | pending:查遠端發佈版本要連 Gitea 並帶金鑰 |
| 67 | 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 | - |
| 68 | cli | models | slice | invoke | 定期跑 model-tags.sh sync 重建能力標籤表,並盤點各 CLI 可用模型 | 換模型、改設定 | at:now | every:7d | jsc-cli:doctor | 0.3.4 | seed | - |
| 69 | cli | setup | none | - | - | 改設定與接線,要逐項確認 | - | - | jsc-cli:doctor | 0.3.4 | seed | - |
| 70 | git | commit | none | - | - | 對外不可逆 | - | - | jsc-git:pr | 0.1.5 | seed | - |
| 71 | git | pr | none | - | - | 對外不可逆 | - | - | jsc-log:worklog | 0.1.5 | seed | - |
| 72 | gitea | html-export | none | - | - | 要人指定是哪一頁或哪一個議題。助理在背景猜不到,猜錯就匯出別人的頁 | - | - | jsc-gitea:html-style | 0.2.5 | seed | - |
| 73 | gitea | html-style | none | - | - | 版型與樣式是使用者的偏好,要逐項確認才寫得下去 | - | - | jsc-gitea:html-export | 0.2.5 | seed | - |
| 74 | gitea | repo-sync | slice | patrol | 盤點哪些存取庫落後遠端、哪些還沒同步下來 | clone 與 update——會動工作目錄 | at:now | every:1d | jsc-git:pr | 0.2.5 | seed | pending:repo-sync.sh 會 clone 與 pull,沒有唯讀子命令;盤點落後也要連遠端 |
| 75 | gitea | wiki | none | - | - | 助理的手腳,不獨立排程。助理所有 wiki 讀寫都經過它,一律附加 | - | - | jsc-gitea:html-export | 0.2.5 | seed | - |
| 76 | gitea | wiki-to-issue | none | - | - | 對外不可逆 | - | - | jsc-sdlc:analyze | 0.2.5 | seed | - |
| 77 | hooks | hooks-install | slice | patrol | wire-cli.sh status 唯讀盤點接線 | 重新接線 | at:now | every:1d | jsc-hooks:repair | 0.4.4 | seed | JSC_READONLY=1 {root}/jsc-hooks/tools/wire-cli.sh status {cli} |
| 78 | hooks | repair | slice | invoke | 巡檢抓到 hook 錯誤就發動修復 | 診斷、改哪一支、開 PR,全照 repair 自己的流程 | after:hook-error | every:1h | jsc-git:pr | 0.4.4 | seed | - |
| 79 | log | learn | slice | patrol | 發動技能前先查過去教訓,也就是 consult 那一段 | 記錄教訓的判斷。哪一次值得留下來要人說 | at:now | every:1d | jsc-log:worklog | 0.1.9 | seed | pending:要連 wiki 讀 LEARN 目錄頁,得帶金鑰 |
| 80 | log | report | slice | invoke | 週期到了就產週報、月報、年報 | 報告要不要改寫、要不要送人看 | at:now | every:7d | jsc-log:learn | 0.1.9 | seed | - |
| 81 | log | stats | full | invoke | - | - | at:now | every:7d | jsc-log:report | 0.1.9 | seed | - |
| 82 | log | worklog | slice | patrol,remind | 任務結束時收口計時與 token,補進 worklog-pending;該寫沒寫就催 | 寫日誌本體——狀態、細節、難處要人給 | after:session-end | every:1h | jsc-log:learn | 0.1.9 | seed | {root}/jsc-log/tools/worklog-pending.sh orphans |
| 83 | meta | skill-check | cond | invoke | 條件是只交機械檢核那一段:腳本語法、manifest 版本一致、README 技能清單與實際技能對得上。條件不成立的那一段,也就是語意審查與流程效率判斷,一律不交,那要讀完整份 SKILL.md | 語意審查、流程與成本效率判斷,還有要不要套用建議 | at:now | every:7d | jsc-meta:skill-update | 0.3.1 | seed | - |
| 84 | meta | skill-delete | none | - | - | 改技能組本身,等於助理改自己 | - | - | jsc-meta:skill-check | 0.3.1 | seed | - |
| 85 | meta | skill-new | none | - | - | 改技能組本身,等於助理改自己 | - | - | jsc-meta:skill-check | 0.3.1 | seed | - |
| 86 | meta | skill-update | none | - | - | 改技能組本身,等於助理改自己 | - | - | jsc-meta:skill-check | 0.3.1 | seed | - |
| 87 | meta | skillset-update | none | - | - | 改技能組本身,等於助理改自己 | - | - | jsc-meta:skill-check | 0.3.1 | seed | - |
| 88 | meta | ste100-sync | slice | patrol,remind | 定期比對上游版本,落後就提醒 | 套用上游變更 | at:now | every:7d | jsc-meta:skill-check | 0.3.1 | seed | pending:比對上游版本要連上游站台 |
| 89 | meta | tooling-guide | full | invoke | - | - | at:now | every:7d | jsc-meta:skill-check | 0.3.1 | seed | - |
| 90 | 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} |
| 91 | review | api-doc | none | - | - | 審查要判斷,判準要讀完整份文件與程式碼;助理在背景判不出來 | - | - | jsc-git:pr | 0.1.3 | seed | - |
| 92 | review | code-review | none | - | - | 審查要判斷,而且要不要照著改由呼叫端決定 | - | - | jsc-review:api-doc | 0.1.3 | seed | - |
| 93 | review | comment-cleanup | none | - | - | 會改專案檔案 | - | - | jsc-git:commit | 0.1.3 | seed | - |
| 94 | sdlc | analyze | slice | patrol,remind | 盤點 ANALYZE_CONTENTS 未完成的分析並先把選項清單備好;另巡檢分析頁勾選與工作包議題狀態對不對得上 | 分析本體全部要決策。勾選與議題對不上時要對齊哪一邊,是真實來源衝突,也要人判 | at:now | every:1d | jsc-sdlc:implement | 0.3.2 | seed | pending:要連 wiki 讀 ANALYZE 目錄頁,得帶金鑰 |
| 95 | 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 |
| 96 | sdlc | maintain | none | - | - | 核心是決策與寫程式碼 | - | - | jsc-log:worklog | 0.3.2 | seed | - |
| 97 | sdlc | plan | slice | patrol,remind | 盤點 PLAN_CONTENTS 還沒分析的計畫,先把選項清單備好 | 規劃本體全部要決策 | at:now | every:1d | jsc-sdlc:analyze | 0.3.2 | seed | pending:要連 wiki 讀 PLAN 目錄頁,得帶金鑰 |