jiantw83
3fe9b55840
feat(gitea): 支援回覆 PR 留言
2026-08-28 09:30:02 +08:00
jiantw83
653d54476b
test(check-wiki-rules): 頁型驗證涵蓋 SKILLSET,說明改為不綁類型數量
...
What:`tools/check-wiki-rules.sh` 的 `TYPES` 加入 `SKILLSET`,檔頭的「涵蓋全部十一種頁面類型」改成「涵蓋 `TYPES` 列的每一種頁面類型」,誘餌值那段註解的「其他八個類型」改成「其餘每一個類型」。
Why:驗證清單沒跟上,新頁型的三項判定(專用變數優先、退回共用變數、不得跨類型代用)就一次都沒驗到。註解裡寫死數字更麻煩:每加一種頁型就要記得改兩個數字,忘了改註解就開始騙人——事實上加 `CHECK` 與 `REPORT` 那次就已經漏了一個。
How:只加 `TYPES` 一個字串,三項判定與誘餌值都是照 `TYPES` 展開的,加進去就自動涵蓋,不必另外寫測項。註解一律改成指向 `TYPES` 這個變數,不再寫死數量,日後加頁型只要改一個地方。
Who:`jsc-gitea` 的 wiki 頁型解析驗證,以及日後新增頁面類型的人。
2026-08-27 16:34:17 +08:00
jiantw83
920c68087e
feat(wiki): 支援 SKILLSET 頁面類型
...
What:`tools/gitea.sh` 的 `resolve_wiki_repo()` 允許清單加入 `SKILLSET`,`wiki-repo` 的用法註解同步。`skills/wiki/SKILL.md` 第 2 步的允許頁型補上 `SKILLSET`,同時補上先前漏列的 `CHECK` 與 `REPORT`;`description` 的呼叫端清單補上「`jsc-meta` 的 `SKILLSET` 頁」。
Why:`jsc-meta` 的四支異動技能收尾要把驗證結果寫進 `SKILLSET_{HASH}`,而所有 wiki 讀寫都走這一支技能與這一支腳本。頁型不在允許清單裡,`wiki-repo` 會直接 exit 2,報告一個字也寫不進去。`CHECK` 與 `REPORT` 是另一件事:腳本早就支援,技能的允許清單卻沒補,照技能寫的走會以為那兩種頁型不合法。
How:只加類型名,解析規則不動——`JSC_WIKI_REPO_SKILLSET` 優先,未設定才退回 `JSC_WIKI_REPO`,不做跨類型代用,兩個都沒有仍是 exit 3 交回技能問使用者。雜湊來源是被改動的 domain 存取庫 `{owner}/{repo}`,用的是同一支 `hash-id`,所以這裡不必為它多寫一條特例(`CHECK` 那種主機加帳號的例外才需要)。
Who:`jsc-gitea:wiki` 技能與 `jsc-meta` 四支異動技能的異動報告寫入路徑。
2026-08-27 16:34:17 +08:00
jiantw83
5471b97635
feat(pr-watch): 新增盯 PR 到合併的輪詢腳本
...
What:新增 `tools/pr-watch.sh`,盯一支 PR 直到它合併或關閉。退出碼 `0` 是已合併或已關閉、`10` 是有新留言要呼叫端接手、`2` 是參數錯誤或第一輪就連不上 Gitea、`3` 是查不到該 PR。輪詢間隔預設 60 秒,`JSC_PR_WATCH_INTERVAL` 可覆寫。
Why:等 PR 合併原本靠各技能自己寫輪詢迴圈,間隔與退場條件每支都不一樣,還常常自動逾時退場,PR 明明還開著就被當成收尾。改用一支共用腳本之後,等待行為只有一種,而且盯到 PR 收尾為止。
How:資料一律經同目錄的 `gitea.sh`(`pr-status`、`pr-comments`),不自行拼 API。已回報過的留言把最後一筆時間戳寫進狀態檔,預設 `$JSC_HOME/pr-watch/{owner}-{repo}-{編號}.seen`,同一則不重複回報;狀態檔還不存在時把既有留言整批回報一次,寧可重複也不漏掉開始盯之前的審查意見。PR 收尾那一輪若還有沒回報的留言,照樣印出來再退出,退出碼仍是 `0`。`pr-status` 對不存在的 PR 會印「? none none」並正常結束,所以 state 只認 `open` 與 `closed`、merged 只認 `true` 與 `false`,對不上就回 `3`,PR 編號打錯不會變成永遠輪詢一支不存在的 PR。
Who:`jsc-sdlc:implement` 開完工作包 PR 之後的等待合併,以及任何要盯 PR 的技能。
2026-08-27 11:20:27 +08:00
jiantw83
c3c810c97b
feat(gitea): 新增 pr-get 與 pr-edit 兩個 PR 子指令
...
What:`tools/gitea.sh` 新增 `pr-get` 與 `pr-edit`。`pr-get` 印出一支 PR 的標題、base 分支與描述,前三行固定 `title`、`base`、`body` 三個標記,第 4 行起是描述原文;`pr-edit` 從檔案讀描述,一次更新標題與描述。
Why:分支已經有 PR 時,每次認可之後都要比對標題、描述與前置 PR 依賴三項,有差才更新。原本只有 `pr-create` 與 `pr-status`,讀不到既有 PR 的標題與描述,比不了就只能重開一支 PR 或整支蓋掉,兩種都會把審查中的討論打斷。
How:`pr-get` 把唯一會多行的描述放在輸出最後一段,呼叫端用 `head -n1`、`sed -n 2p`、`tail -n +4` 就取得到三個欄位,全程不必解析 JSON。`pr-edit` 的描述走檔案而不走參數,多行內容與全形標點才裝得下;描述檔不存在回 `2`,API 呼叫失敗回 `4`,成功印 `OK {owner}/{repo}#{編號}`。
Who:`jsc-git:pr` 的既有 PR 校準步驟,以及任何要先比對 PR 現況再決定改不改的呼叫端。
2026-08-27 11:20:27 +08:00
jiantw83
6ce2822147
feat(wiki): 支援 CHECK 與 REPORT 兩種頁面類型
...
What: gitea.sh 的 wiki-repo 白名單加入 CHECK 與 REPORT,check-wiki-rules.sh 的驗證涵蓋範圍從九種擴到十一種,wiki 技能的 description 補上兩個新呼叫者。
Why: 執行環境體檢(jsc-cli:doctor)與工作報表(jsc-log:report)都要寫 wiki,但頁面類型不在白名單裡就解析不出存取庫,兩支技能都寫不進去。
How: 只動白名單與驗證清單,解析規則本身不變:一律先讀 JSC_WIKI_REPO_{TYPE},再退回 JSC_WIKI_REPO,不得跨類型代用。
Who: 體檢頁與報表頁的 wiki 位置解析。
2026-08-26 10:45:34 +08:00
jiantw83 and Claude Opus 5
dc17907554
chore(gitea): markdown 渲染子命令與文件、manifest 同步
...
What:gitea.sh 新增 markdown 子命令與可切換的 Content-Type,README 補上新工具、新技能與 HTML 範本說明,三份 manifest 同步升版到 0.1.3。
Why:markdown 轉 HTML 要交給 Gitea 自己渲染,排版才跟 wiki、議題頁一致;但 /markdown 端點在 Gitea 1.27 回 200 卻是空內容,看起來像成功。
How:改走吃純文字的 /markdown/raw,req 送出的 Content-Type 改由 REQ_CONTENT_TYPE 決定,預設仍是 application/json。代價寫進註解:raw 端點不吃 wiki 情境,[[頁名]] 要由呼叫端先換成絕對網址。
Who:所有透過 jsc-gitea 產生文件的技能。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com >
2026-08-26 09:19:25 +08:00
jiantw83 and Claude Opus 5
a0c13f807a
feat(gitea): 新增 HTML 匯出與範本風格設定
...
What:新增 html-export 與 html-style 兩支技能、tools/html-render.sh 與 tools/html-style.sh 兩支工具,以及六種版型乘五種風格的 HTML 範本。
Why:wiki 頁與議題要拿給 Gitea 以外的人看時,只能複製 markdown;不同類型的文件也該有各自的版面,不是每份都長一樣。
How:版型(report、slide、dashboard、spec、timeline、onepager)決定內容怎麼排,風格(minimal、corporate、dark、print、vivid)決定看起來長怎樣,兩者自由搭配。哪一種頁面套哪一組由設定決定:專案的 .jsc/html-styles 優先,其次 $JSC_HOME/html-styles.conf,對不到退 DEFAULT,再對不到才用內建的 report/minimal。產出是單一 HTML 檔,CSS 與腳本全部內嵌。
Who:需要把 wiki 頁或議題寄給客戶、主管或跨團隊同事的人。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com >
2026-08-26 09:19:25 +08:00
jiantw83 and Claude Opus 5
f8123e829b
feat(gitea): 新增 wiki 轉議題技能
...
What:新增 wiki-to-issue 技能,把一頁 wiki 轉成同一個存取庫的議題;配套新增 tools/gitea-link.sh 解析連結、tools/issue.sh 讀寫議題。
Why:wiki 頁要變成可追蹤的工作時,原本得自己拼 API:組 JSON、查標籤 id、挑回應欄位,跳脫一錯就把對外的議題內容寫壞。
How:連結是唯一入口,gitea-link.sh 解不出 wiki 頁就中止,不猜存取庫也不猜頁名;標籤只從既有的挑;站台沒有專案看板 API 時據實回報請使用者手動拖,不假裝關聯成功。
Who:使用 jsc 技能組、需要把 wiki 內容交辦出去的人。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com >
2026-08-26 09:19:08 +08:00
jiantw83 and Claude Opus 5
36fc4de73c
fix(gitea): 補齊稽核缺失並修掉護欄失效
...
What:依 jsc-meta:skill-check 的稽核結果修正技能與工具——補上每個步驟的可檢核完成條件、
把留在內文的標準輸入輸出流程下放 tools/、修正查表與退碼路由造成的誤判。
Why:稽核發現這些缺失會讓技能在實際執行時走錯分支或靜默通過。
完成條件缺漏是最常被違反的一項;退碼誤判與查表錯誤則會讓良性狀況被當成失敗。
How:逐項對照 references/guidelines.md 的審核檢查清單修正,新增的工具都有
documented exit codes,並以真實執行驗證每條路徑。
Who:jsc-meta:skill-check 例行稽核(2026-08-25)。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com >
2026-08-25 14:58:54 +08:00
jiantw83 and Claude Opus 5
4f3ba9c8d3
feat(pr-status,pr-comments): 新增 PR 狀態與留言查詢子指令
...
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com >
2026-08-25 12:08:11 +08:00
jiantw83 and Claude Opus 5
db28f6c1d0
fix(tea-token): 依主機挑 tea 登入,避免把 A 站 token 送去 B 站
...
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com >
2026-08-25 11:13:35 +08:00
jiantw83 and Claude Opus 5
f8a62b8068
feat(wiki-url): 新增 wiki 頁絕對網址子指令,供跨存取庫連結使用
...
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com >
2026-08-24 18:54:19 +08:00
jiantw83 and Claude Opus 5
afd10ebfb8
test(wiki-rules): 補上 DELIVER 頁型的解析測試
...
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com >
2026-08-24 17:24:31 +08:00
jiantw83 and Claude Opus 5
458bbb7fff
feat(wiki): 頁型允許清單新增 DELIVER
...
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com >
2026-08-24 17:24:31 +08:00
jiantw83 and Claude Fable 5
653b619ea1
feat(wiki): wiki 頁型允許清單新增 LEARN
...
What:gitea.sh 的 wiki-repo 允許型別清單、wiki 技能 SKILL.md 的頁型清單,以及 check-wiki-rules.sh 的驗證案例,同步收錄 LEARN 頁型。
Why:jsc-log 新增 LEARN wiki 頁型,若允許清單未收錄,wiki-repo LEARN 會以 unknown type(exit 2)被擋下,學習紀錄頁無法解析存放位置。
How:resolve_wiki_repo 的 case 白名單加入 LEARN,解析順序維持 JSC_WIKI_REPO_LEARN 優先、退回 JSC_WIKI_REPO、不跨型別代用;check-wiki-rules.sh 補上 LEARN 專屬變數優先與退回共用預設兩個案例;SKILL.md 允許頁型清單同步更新。
Who:jsc-gitea wiki 技能與其呼叫方(jsc-log 等)的 wiki 頁型解析功能。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-08-24 11:36:49 +08:00
jiantw83
11082f648e
fix(wiki): 依頁面類型解析 wiki repo 並統一 hash
2026-08-21 16:53:17 +00:00
jiantw83 and Claude Fable 5
684d3f4f31
feat(gitea): gitea.sh 認證失敗時自動退回 tea CLI 登入 token
...
What(改了什麼)
- tools/gitea.sh 新增 tea_token():解析 ~/.config/tea/config.yml,優先取 default: true 的登入 token,否則取第一個。
- 啟動時 GITEA_TOKEN 未設定或為空,改用 tea token;兩者皆無才維持原本的必填錯誤。
- req() 遇 HTTP 401/403 且 tea token 存在又與當前 token 不同時,換用 tea token 重試一次,之後不再重試。
- 檔頭用法註解補上退回機制的說明。
Why(為什麼改)
- 使用者規則:api token 401/403 時,若 tea CLI 已登入就取其 token 重試,避免因 GITEA_TOKEN 過期或未設定就直接中斷流程。
How(怎麼改)
- 以 awk 解析 tea 設定檔的 logins 清單,抓各登入的 token 與 default 旗標。
- req() 改為 while 迴圈包住 curl,retried 旗標保證最多重試一次;HTTP >= 400 仍以 exit 4 收場。
- 實測:sh -n 語法檢查通過;GITEA_TOKEN 為空時經 tea token 成功;GITEA_TOKEN=deadbeef 時走 401 重試路徑成功;無 tea 設定且 token 為空時維持原錯誤訊息。
Who(影響哪個功能/使用者)
- 所有經 tools/gitea.sh 呼叫 Gitea API 的技能(wiki、repo-sync、jsc-git pr 等)與使用者:token 缺失或失效時多一層自動救援,行為只在原本會失敗的情境改變。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-08-21 08:23:27 +00:00
jiantw83 and Claude Fable 5
df93714317
feat(gitea): gitea.sh 新增 pr-depend(前置 PR 依賴阻擋)與 repo-set(描述/網頁)
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-08-21 14:03:35 +08:00
jiantw83 and Claude Fable 5
a60686c796
feat(gitea): 匯入 jsc-gitea 技能組
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-08-21 13:08:43 +08:00