feat(git-safety,model): 分支一律先確認、模型 id 改以 transcript 實際值為準 #13

Closed
jiantw83 wants to merge 9 commits from feat/branch-confirmation-and-model-source into develop
8 changed files with 20 additions and 19 deletions
Showing only changes of commit bb7b641261 - Show all commits
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "jsc-shared",
"version": "0.2.1",
"version": "0.2.2",
"description": "JSC 跨 AI 助理共用規範 skills plugin(Claude Code / Codex / Antigravity / OpenCode / GitHub Copilot CLI),`skills/` 為唯一真實來源,並提供整組 plugin 的安裝/更新/移除管理(plugins-install 一次安裝或更新 jsc-code/jsc-doc/jsc-persona/jsc-shared,plugins-uninstall 一次移除四個 JSC plugin)。安裝與更新一律以 Gitea 遠端 repo 的 README 與檔案為準,不依賴既有本機存取庫;所有 skills 以 SKILL.md 為共通標準;於 Claude Code 以 /jsc-shared: 前綴呼叫。",
"skills": "./skills",
"author": {
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "jsc-shared",
"version": "0.2.1",
"version": "0.2.2",
"description": "JSC 跨 AI 助理共用規範 skills plugin,`skills/` 為唯一真實來源,並提供整組 plugin 的安裝/更新/移除管理(plugins-install 一次安裝或更新 jsc-code/jsc-doc/jsc-persona/jsc-shared,plugins-uninstall 一次移除四個 JSC plugin)。安裝與更新一律以 Gitea 遠端 repo 的 README 與檔案為準,不依賴既有本機存取庫;所有 skills 以 SKILL.md 為共通標準。",
"skills": "./skills"
}
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "jsc-shared",
"version": "0.2.1",
"version": "0.2.2",
"description": "JSC 跨 AI 助理共用規範 skills plugin,`skills/` 為唯一真實來源,並提供整組 plugin 的安裝/更新/移除管理(plugins-install 一次安裝或更新 jsc-code/jsc-doc/jsc-persona/jsc-shared,plugins-uninstall 一次移除四個 JSC plugin)。安裝與更新一律以 Gitea 遠端 repo 的 README 與檔案為準,不依賴既有本機存取庫;所有 skills 以 SKILL.md 為共通標準;於 Antigravity 以 /jsc-shared: 前綴呼叫。",
"skills": "./skills"
}
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "jsc-shared",
"shortName": "shared",
"version": "0.2.1",
"version": "0.2.2",
"descriptionCore": "JSC 跨 AI 助理共用規範 skills plugin,`skills/` 為唯一真實來源,並提供整組 plugin 的安裝/更新/移除管理(plugins-install 一次安裝或更新 jsc-code/jsc-doc/jsc-persona/jsc-shared,plugins-uninstall 一次移除四個 JSC plugin)。安裝與更新一律以 Gitea 遠端 repo 的 README 與檔案為準,不依賴既有本機存取庫;所有 skills 以 SKILL.md 為共通標準。",
"assistants": ["Claude Code", "Codex", "Antigravity", "OpenCode", "GitHub Copilot CLI"],
"cliPrefix": "/jsc-shared:",
+4 -4
View File
@@ -1,6 +1,6 @@
---
name: do-wiki
description: 讀取 `todo-wiki` 產生、帶鎖定模型 frontmatter 的 Gitea wiki TODO 頁並逐項執行:開工前先讀目錄頁挑一份「已完成」為未勾選的代辦(沒有就直接結束);檢查頁面 `## 0.` 的六條強制規則並比對當前模型,不符就停止;讀取需求彙整與既有 checklist(已勾選視為完成不重做);逐項執行——完成一項就地把 `- [ ]` 改 `- [x]` 並補上完成時間,立即回寫該 wiki 頁並讀回確認成功才能繼續下一項,任一步失敗立刻停止;全部項目完成後回目錄頁把該代辦列「已完成」改為 `[x]`。當使用者說要執行 wiki TODO、跑 do-wiki、依 wiki 清單實作、接手某份 Gitea wiki 代辦、或提到 do-wiki skill 時觸發。不適用於:把需求分析並產生 TODO 清單同步到 wiki(用 `/jsc-shared:todo-wiki`)、逐步建立計畫並同步 wiki(用 `/jsc-shared:plan-wiki`)。
description: 讀取 `todo-wiki` 產生、帶鎖定模型 frontmatter 的 Gitea wiki TODO 頁並逐項執行:開工前先讀目錄頁挑一份「已完成」為未勾選的代辦(沒有就直接結束);檢查頁面 `## 0.` 的六條強制規則並比對當前模型,不符就停止;讀取需求彙整與既有 checklist(已勾選視為完成不重做);逐項執行——完成一項就地把 `- [ ]` 改 `- [x]` 並補上完成時間,立即回寫該 wiki 頁並讀回確認成功才能繼續下一項,任一步失敗立刻停止;全部項目完成後回目錄頁把該代辦列「已完成」改為 `●`。當使用者說要執行 wiki TODO、跑 do-wiki、依 wiki 清單實作、接手某份 Gitea wiki 代辦、或提到 do-wiki skill 時觸發。不適用於:把需求分析並產生 TODO 清單同步到 wiki(用 `/jsc-shared:todo-wiki`)、逐步建立計畫並同步 wiki(用 `/jsc-shared:plan-wiki`)。
argument-hint: "[--wiki-repo <owner/repo>] [--wiki-index CONTENTS] [--wiki-page <既有 TODO 頁 title>] [--yes]"
---
@@ -15,7 +15,7 @@ argument-hint: "[--wiki-repo <owner/repo>] [--wiki-index CONTENTS] [--wiki-page
| 2. 檢查強制規則 | 解析 `## 0.` 區塊六條規則,比對當前模型 | 相符才繼續,不符則停止 |
| 3. 了解需求彙整 | 讀 frontmatter `scope` 與需求段落,盤點既有 checklist | 待執行項目清單 |
| 4. 逐項執行並即時回寫 | 單項循環:執行 → 勾選 → 回寫 → 讀回確認 | 全部項目完成的 TODO 頁 |
| 收尾 | 回目錄頁把該代辦列「已完成」改 `[x]` | 讀回確認成功的目錄頁 |
| 收尾 | 回目錄頁把該代辦列「已完成」改 `●` | 讀回確認成功的目錄頁 |
## 共用規範(必要前置)
@@ -38,7 +38,7 @@ argument-hint: "[--wiki-repo <owner/repo>] [--wiki-index CONTENTS] [--wiki-page
1. 依 `spec-gitea` 決定 host 與 token;確認 `--wiki-repo`,缺少就詢問使用者,不臆測。
2. `--wiki-page` 已帶(或使用者已於對話明確指定頁面)時,依 `spec-ask-user`「已知答案時跳過詢問」直接查表取得該 title 對應的 `path`,跳過本階段其餘步驟進入階段 1;只有查表找不到該 title 時,才回頭走本階段清單並提示原指定值無效,不得臆測頁面。
3. 依 `spec-gitea` 分頁查表讀取目錄頁(title 預設 `CONTENTS`,或 `--wiki-index` 指定值),依 `spec-wiki-contents`〔目錄頁格式〕掃描**所有系統的 `## ` 段落**,取出每個段落中所有「`代辦`欄非空、`是否已完成`為 `[ ]`」的列,記下其所屬系統(該段落標題)供候選標示用。
3. 依 `spec-gitea` 分頁查表讀取目錄頁(title 預設 `CONTENTS`,或 `--wiki-index` 指定值),依 `spec-wiki-contents`〔目錄頁格式〕掃描**所有系統的 `## ` 段落**,取出每個段落中所有「`代辦`欄非空、`是否已完成`為 `○`」的列,記下其所屬系統(該段落標題)供候選標示用。
4. **沒有未完成代辦就直接結束**:目錄頁不存在、目錄頁沒有任何系統段落、或所有段落的候選列皆為空,一律輸出 `[yyyy/MM/dd HH:mm:ss][代辦盤點][INF]: 目錄頁沒有未完成的代辦,本次不進行任何修改。` 後結束,不讀取任何 TODO 頁、不修改任何檔案或 wiki。
5. 有未完成代辦時,依 `spec-ask-user` 以**單選**呈現,候選標示為「{系統名稱}:{代辦內容摘要}」(候選 ≤4 用 `AskUserQuestion` 並含「其他」,>4 改文字編號列出);選定列`代辦`欄連結的 `path` 直接作為階段 1 的讀取目標,不得再自行推導轉義。
@@ -77,7 +77,7 @@ argument-hint: "[--wiki-repo <owner/repo>] [--wiki-index CONTENTS] [--wiki-page
## 收尾:全部完成後回寫目錄頁「已完成」
1. 只有本次 TODO 頁**所有**項目皆為 `- [x]` 時才可進行;只要還有未勾項目就不得勾選目錄頁。
2. 依 `spec-wiki-contents`〔回寫規則〕,回目錄頁把該 TODO 列的「已完成」由 `[ ]` 改為 `[x]`。
2. 依 `spec-wiki-contents`〔回寫規則〕,回目錄頁把該 TODO 列的「已完成」由 `○` 改為 `●`。
3. 讀回目錄頁確認寫入成功;失敗則停止並回報,不得視為已完成。
## 呼叫方式
+1 -1
View File
@@ -77,7 +77,7 @@ argument-hint: "[--wiki-repo <owner/repo>] [--index <英文系統名稱>_<中文
目錄頁是單一共用頁面依系統分段、段落標題與六欄表格格式、列合併規則、以及連結來源(查表取得的 `sub_url`/`path`,不使用 percent-encode 的 title)一律依 `/jsc-shared:spec-wiki-contents`,本 skill 不重複定義。
目錄頁不存在時,依 `spec-wiki-contents`〔目錄頁格式〕建立新頁(title `CONTENTS`),並建立本系統對應的 `## {英文系統名稱} {中文系統名稱}` 段落,`計畫`欄填本計畫頁連結、`是否已產生代辦`欄填 `[ ]`、`代辦`與`是否已完成`欄留空;目錄頁已存在時禁止整頁覆蓋,只能依 `spec-wiki-contents`〔新增列前先找可合併的既有列〕upsert 本系統段落內對應的列、在該段落附加新列,或該系統尚無段落時新增段落,保留其他系統的段落與其餘內容。
目錄頁不存在時,依 `spec-wiki-contents`〔目錄頁格式〕建立新頁(title `CONTENTS`),並建立本系統對應的 `## {英文系統名稱} {中文系統名稱}` 段落,`計畫`欄填本計畫頁連結、`是否已產生代辦`欄填 `○`、`代辦`與`是否已完成`欄留空;目錄頁已存在時禁止整頁覆蓋,只能依 `spec-wiki-contents`〔新增列前先找可合併的既有列〕upsert 本系統段落內對應的列、在該段落附加新列,或該系統尚無段落時新增段落,保留其他系統的段落與其餘內容。
## 計畫頁格式
+9 -8
View File
@@ -22,7 +22,7 @@ description: JSC plugins 共用「wiki 目錄頁格式與列合併規範」:
| 計畫 | 是否已產生代辦 | 內容 | 代辦 | 是否已完成 | 內容 |
| --- | :-: | --- | --- | :-: | --- |
| [<計畫頁連結文字>](<查表取得的 path>) | [ ] | <計畫摘要> | [<代辦頁連結文字>](<查表取得的 path>) | [ ] | <代辦摘要> |
| [<計畫頁連結文字>](<查表取得的 path>) | ○ | <計畫摘要> | [<代辦頁連結文字>](<查表取得的 path>) | ○ | <代辦摘要> |
## <另一個英文系統名稱> <另一個中文系統名稱>
@@ -32,10 +32,11 @@ description: JSC plugins 共用「wiki 目錄頁格式與列合併規範」:
- 頁面 H1 固定為 `CONTENTS`;每個系統各自一個 H2 段落,標題固定為 `<英文系統名稱> <中文系統名稱>`,與該系統其他頁面(計畫頁、代辦頁)H1 用的是同一組系統名稱。
- 段落 H2 之後先放一段「系統描述」,說明系統目的與範圍;來源為需求彙整或計畫目標摘要,不得留空。
- 表格欄位固定六個:`計畫`/`是否已產生代辦`/`內容`/`代辦`/`是否已完成`/`內容`,對齊列固定 `| --- | :-: | --- | --- | :-: | --- |`,不得增減欄位或改變順序。
- **check 欄一律用 `●`(已完成/已產生)/`○`(未完成/未產生)**,不適用的欄位維持留空;**不得改用 `[ ]`/`[x]`**——GFM 任務清單語法只在 Markdown 清單項目(`- [ ] ...`)裡才會被渲染成核取方塊,放進表格儲存格會被字面呈現成 `[ ]`/`[x]` 這四個字元,不會渲染成方塊。此規則**只管表格儲存格**,計畫頁/代辦頁內容裡的 checklist(`- [ ] **編號 短標題**:...`)是合法且正常渲染的 GFM 任務清單,不受本規則影響、不得比照修改。
- **一列代表一組「計畫+其對應代辦」的配對關係**,不是「一列一種頁面型別」。同一系統可以有多列,例如:同系統先後有多個計畫、同一計畫衍生多個代辦、或代辦先於計畫存在。
- 只有計畫、還沒代辦:`代辦`欄與`是否已完成`欄留空(不得填 `[ ]`,因為根本不適用),`是否已產生代辦`欄填 `[ ]`。
- 只有代辦、沒有對應計畫(例如需求直接進 `todo-wiki` 沒有經過 `plan-wiki`):`計畫`欄與`是否已產生代辦`欄留空,`代辦`欄填連結,`是否已完成`欄填 `[ ]`/`[x]`。
- 兩邊都有:`是否已產生代辦`填 `[x]`,`是否已完成`依代辦頁完成狀態填 `[ ]`/`[x]`。
- 只有計畫、還沒代辦:`代辦`欄與`是否已完成`欄留空(不得填 `○`,因為根本不適用),`是否已產生代辦`欄填 `○`。
- 只有代辦、沒有對應計畫(例如需求直接進 `todo-wiki` 沒有經過 `plan-wiki`):`計畫`欄與`是否已產生代辦`欄留空,`代辦`欄填連結,`是否已完成`欄填 `○`/`●`。
- 兩邊都有:`是否已產生代辦`填 `●`,`是否已完成`依代辦頁完成狀態填 `○`/`●`。
- 目錄頁不存在時才依上述格式新建(先建一個系統的段落);已存在時**禁止整頁覆蓋**,只能 upsert 既有段落內的列、在既有段落表格附加新列,或(該系統尚無段落時)在頁尾附加一個新的 `## ` 段落,保留其餘系統的段落與內容。
## 新增列前先找可合併的既有列
@@ -45,7 +46,7 @@ description: JSC plugins 共用「wiki 目錄頁格式與列合併規範」:
| 情境 | 判斷 | 動作 |
| --- | --- | --- |
| 目錄頁裡沒有該系統的 `## ` 段落 | — | 在頁尾附加新段落(系統描述+空表格),再依下列規則新增列 |
| 新建代辦,且使用者於開工前選定要關聯的計畫列 | 該計畫列的`代辦`欄目前是空的 | 直接把代辦欄、是否已完成欄、內容欄填進**同一列**,`是否已產生代辦`改為 `[x]`;不新增列 |
| 新建代辦,且使用者於開工前選定要關聯的計畫列 | 該計畫列的`代辦`欄目前是空的 | 直接把代辦欄、是否已完成欄、內容欄填進**同一列**,`是否已產生代辦`改為 `●`;不新增列 |
| 新建代辦,且使用者於開工前選定的計畫列`代辦`欄已有內容 | 該列已被佔用 | 不得覆蓋既有代辦,改在同一段落表格附加**新列**,`計畫`欄留空或重複連結同一計畫(依 `todo-wiki` 詢問使用者結果決定),並依 `spec-ask-user` 詢問使用者是否要重複關聯同一計畫 |
| 新建代辦,未關聯任何計畫 | — | 在該系統段落表格附加新列,`計畫`欄與`是否已產生代辦`欄留空 |
| 新建計畫 | 該系統段落表格已有某列`計畫`欄為空、且內容明顯屬於同一需求脈絡(需使用者確認,不得臆測) | 依使用者確認結果,填入該列`計畫`欄;未獲確認一律新增列 |
@@ -68,11 +69,11 @@ description: JSC plugins 共用「wiki 目錄頁格式與列合併規範」:
## 使用者互動:開工前挑選
- `todo-wiki` 開工前:先確定本次系統名稱(見 `todo-wiki`〔系統名稱決定〕),讀取目錄頁後定位到該系統的 `## ` 段落;若段落存在且段落內有「`計畫`欄有連結、`代辦`欄空白」的列,依 `/jsc-shared:spec-ask-user` 詢問使用者是否要把本次代辦合併進其中一列(選項固定含「不合併,直接新增列」與「其他」,可以不選);只要存在至少一個這種列就必須詢問,`--yes` 不得略過;一個都沒有時不詢問直接繼續。
- `do-wiki` 開工前:讀目錄頁,掃描**所有系統段落**,列出所有`是否已完成`為 `[ ]` 的列(即`代辦`欄非空但未完成者),候選標示為「{該列所屬系統的段落標題}:{代辦內容摘要}」,依 `/jsc-shared:spec-ask-user` 以**單選**呈現;沒有任何未完成代辦列時直接結束,不讀取任何代辦頁、不修改任何檔案或 wiki。
- `do-wiki` 開工前:讀目錄頁,掃描**所有系統段落**,列出所有`是否已完成`為 `○` 的列(即`代辦`欄非空但未完成者),候選標示為「{該列所屬系統的段落標題}:{代辦內容摘要}」,依 `/jsc-shared:spec-ask-user` 以**單選**呈現;沒有任何未完成代辦列時直接結束,不讀取任何代辦頁、不修改任何檔案或 wiki。
- 候選數量、呈現方式(候選 ≤4 用 `AskUserQuestion`、>4 改文字編號列出)與「其他」選項,一律依 `/jsc-shared:spec-ask-user` 辦理。
## 回寫規則
- `todo-wiki` 寫入代辦頁成功後:若本次合併進某個既有列,回目錄頁把該列`代辦`/`是否已完成`/內容欄填好、`是否已產生代辦`改為 `[x]`並讀回確認;若本次是新增列,依「新增列前先找可合併的既有列」規則在對應系統段落附加後讀回確認。
- `do-wiki` 於代辦頁全部項目皆為 `- [x]` 後,回目錄頁把該列(在其所屬系統段落內)`是否已完成`由 `[ ]` 改為 `[x]` 並讀回確認;只要還有未勾項目就不得勾選。
- `todo-wiki` 寫入代辦頁成功後:若本次合併進某個既有列,回目錄頁把該列`代辦`/`是否已完成`/內容欄填好、`是否已產生代辦`改為 `●`並讀回確認;若本次是新增列,依「新增列前先找可合併的既有列」規則在對應系統段落附加後讀回確認。
- `do-wiki` 於代辦頁全部項目皆為 `- [x]` 後,回目錄頁把該列(在其所屬系統段落內)`是否已完成`由 `○` 改為 `●` 並讀回確認;只要還有未勾項目就不得勾選。
- 兩者都必須讀回確認寫入成功,失敗立刻停止,不得繼續下一步。
+2 -2
View File
@@ -172,14 +172,14 @@ scope: <階段 2 產出的 scope>
1. 寫入 todo 頁。
2. 若使用者明確表示不要更新目錄頁,跳過目錄頁更新;否則依 `spec-wiki-contents`〔新增列前先找可合併的既有列〕upsert 本系統對應段落內的表格列。目錄頁不存在才整頁新建(title `CONTENTS`);目錄頁存在但沒有本系統段落時,在頁尾新增一個 `## {英文系統名稱} {中文系統名稱}` 段落;兩種情況都禁止整頁覆蓋,只修改對應列的`代辦`/`是否已完成`/內容欄,或在該段落表格附加新列。
3. 若本次於階段 2「選擇要不要合併進既有列」合併到某個計畫列,回目錄頁把該列`是否已產生代辦`由 `[ ]` 改為 `[x]`、`代辦`欄填入本次 TODO 頁連結並讀回確認;找不到對應列時**不得新建混用列**,改以警告回報。未合併時跳過本步驟,直接以新列的`代辦`欄寫入、`計畫`欄留空。
3. 若本次於階段 2「選擇要不要合併進既有列」合併到某個計畫列,回目錄頁把該列`是否已產生代辦`由 `○` 改為 `●`、`代辦`欄填入本次 TODO 頁連結並讀回確認;找不到對應列時**不得新建混用列**,改以警告回報。未合併時跳過本步驟,直接以新列的`代辦`欄寫入、`計畫`欄留空。
4. 讀回 todo 頁確認內容已更新;有更新目錄頁時也讀回目錄頁確認(含步驟 2、3 的異動)。讀回時若回應含 `content_base64`,必須 base64 解碼後再比對 Markdown 內容是否與預期一致;若回應格式不同,依 Gitea 官方 API 文件取出正文再比對,不可只確認狀態碼或頁面存在。
5. 一項一回寫、一項一確認;若任一步失敗,立刻停止,不得把多個 checklist 累積後一起處理。
目錄頁是單一共用頁面依系統分段、段落標題與六欄表格格式、列合併規則、以及連結來源(查表取得的 `sub_url`/`path`,不使用 percent-encode 的 title)一律依 `/jsc-shared:spec-wiki-contents`,本 skill 不重複定義;新增列範例(未合併既有計畫列時):
```markdown
| | | | [<TODO 頁連結文字>](<查表取得的 path>) | [ ] | todo wiki:<系統名稱> 代辦——執行規則、需求彙整、分群任務與驗收條件 |
| | | | [<TODO 頁連結文字>](<查表取得的 path>) | ○ | todo wiki:<系統名稱> 代辦——執行規則、需求彙整、分群任務與驗收條件 |
```
若既有目錄頁沒有本系統的 `## ` 段落與六欄目錄表格,附加一段新的段落到頁面末尾,不得刪除或重排其他系統的段落與既有內容。