admin
|
52b5f08e7e
|
Merge pull request 'feat/delivery-document-preview/main' (#83) from feat/delivery-document-preview/main into master
Reviewed-on: #83
Reviewed-by: 系統管理員 <1+admin@noreply.localhost>
|
2026-09-22 07:12:33 +00:00 |
|
admin
|
957dd8795b
|
Merge pull request 'feat/analyze-delivery-priority/main' (#82) from feat/analyze-delivery-priority/main into master
Reviewed-on: #82
Reviewed-by: 系統管理員 <1+admin@noreply.localhost>
|
2026-09-22 07:12:22 +00:00 |
|
jiantw83
|
ddc72a404e
|
feat(sdlc-feat): 加入交付文件預覽分流規則
將交付文件待辦與程式碼待辦分流,依環境能力決定直接預覽或逐題詢問,並保留 ELI5 與 API 契約邊界。
|
2026-09-22 15:06:25 +08:00 |
|
jiantw83
|
744eee04ba
|
feat(sdlc-analyze): 加入交付優先確認流程
讓 sdlc-analyze 逐項確認七種交付文件與 PERT 三點估算,排序交付工作包並在確認前阻擋建立與排程;補上流程正本測試。
|
2026-09-22 15:06:08 +08:00 |
|
jiantw83
|
48b1e39e38
|
feat(sdlc-plan): 新增文件段落規則
讓 sdlc-plan 產生文件段落,限制規劃階段只保留 analyze 佔位或抽象節點與邊的文字,避免提前產生圖解 artifact。
|
2026-09-22 15:04:51 +08:00 |
|
jiantw83
|
7f723adff8
|
feat: 移除計時並停用報表預覽
|
2026-09-21 17:41:44 +08:00 |
|
jiantw83
|
867a23497f
|
feat(overview-artifact): 產生可預覽總覽與截圖 fallback
|
2026-09-18 15:59:34 +08:00 |
|
 jiantw83andClaude Opus 5
|
84cd8fc41f
|
docs(prompts): 六個只在意結果的步驟標上〔可委派〕
三份正本各加一節說明這個後綴是什麼意思,只留能力描述那一句與指回判準正本的指路,
判準本身不複寫——抄過去就會有兩份各自演化的規則(AGENTS.md 的 references/ 那一列)。
標的是六個:sdlc-plan 的產生圖解版總覽;sdlc-analyze 的對四份清單列出疑點、算出截止日、
產生分析版的圖解總覽;sdlc-feat 的把議題標題翻成英文、分批提交。
其中三步是部分委派,各自在該步寫明哪一半留給主流程:兩份圖解總覽委派的是產出 HTML,
寫回議題的 issue-update 不委派;分批提交委派的是方案計算,實際跑 commit-split.js 不委派。
理由不在這裡複述,指回判準第四條。
**「認出語言,讀規則正本」不標**,儘管議題的列舉點了它。那一步的核心動作含「認不出語言
就停下來問、不要猜」,正是判準第二條硬排除的事;排掉它之後剛好是議題所寫的六個。
這一條與 repo 擁有者確認過。
AGENTS.md 的 references/ 那一列補上「委派判準」,否則那串括號裡的列舉會漏掉新的一份。
議題 #58
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
2026-09-18 09:12:08 +08:00 |
|
admin
|
7995e74332
|
Merge pull request 'feat/plan-analyze-timing/main' (#63) from feat/plan-analyze-timing/main into master
Reviewed-on: #63
Reviewed-by: 系統管理員 <1+admin@noreply.localhost>
|
2026-09-18 00:52:27 +00:00 |
|
 jiantw83andClaude Opus 5
|
46c6db8c70
|
feat(time-log): 對既有議題重跑時補到當下,每一輪各記一筆
原本的終點一律是議題的建立時間,所以對既有議題重跑時相減為負,補登直接 no-op——
那一輪的規劃時間就這樣掉了,而那正是這顆議題要修的毛病,只是換個位置出現。
終點改成看議題是不是這一輪建立的:是就補到議題建立那一刻(第一次跑),不是就補到
補登的當下(重跑)。回報多出 `迄` 與 `依據` 兩個欄位,讓人一眼看出這一筆補的是哪一段。
「這顆議題上已經有工時就跳過」這條規則拿掉了,它與累計互斥。防重複只剩一條:錶已經
跑在這顆議題上——那一段已經有錶在記,補下去會與錶涵蓋的區間重疊。連帶把 lib 的
listIssueTimes 一起移除,沒有人再用它。
實跑驗過(議題 #57):補登 121 秒、起錶、停錶 7 秒,兩筆都進得了週報,驗完刪除。
議題 #57 的規格同步更正,另外兩處過期的敘述也一併改掉。
議題 #57
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
2026-09-18 08:46:27 +08:00 |
|
 jiantw83andClaude Opus 5
|
7ee050de2f
|
docs(sdlc-plan,sdlc-analyze): 兩份正本各自起停自己的錶
起錶與停錶寫在同一份正本裡成對出現,讀的人一眼看得出這段計時涵蓋到哪;兩份各加一節
「計時範圍」把兩端指出來。
sdlc-plan 記兩段:議題建立之前那段在第一步記下開始時間、議題建立之後以補登記上去;
之後起錶,回報那一步停錶。補登排在議題建立之後、起錶之前,順序反過來的話補登會被
time-log 當成「這一步做過了」而跳過。
sdlc-analyze 在它分析的那顆需求議題上起錶,起點放在第一段開頭——分析最耗時的正是
共識之前那一段,從第二段才起的話那段時間永遠是零。因此「共識摘要之前不對 Gitea
產生任何寫入」改寫成「不寫入任何**內容**」,並把碼錶明文除外、寫上理由:它記的是
工時,不是內容。這一條與 repo 擁有者確認過。
sdlc-feat 的「碼錶一律由使用者自己停」收斂成「**別顆議題上的**錶一律由使用者自己停」
——它原本讀起來像全域規則,而現在每道指令都會停自己起的那一支。
正本之間改以步驟**名稱**互指,不用編號:編號會整批位移,名字不會。測試跟著改用新的
promptStep 輔助函式,以名字框出某一步的內容,別人插一步時不會無聲地框到另一段上。
議題 #57
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
2026-09-17 19:32:37 +08:00 |
|
 jiantw83andClaude Opus 5
|
a279591232
|
fix(sdlc-fix): 需求議題本來就沒有未整併留言時照樣列出工作包
原本只寫「未處理數大於 0 就先整併」,零則的入口從沒明寫,讀起來會變成
「沒有留言要處理就到此為止」,正好與「無未整併留言時要列出工作包」相反。
另把交棒的另一端補在 sdlc-feat 的輸入上——機制只有一邊寫得出來,
另一邊就只是散文承諾。
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
2026-09-17 18:21:36 +08:00 |
|
 jiantw83andClaude Opus 5
|
a5f36ed14c
|
feat(sdlc-fix): 輸入放寬為 PR 編號或議題編號
議題不自己重做一遍實作流程,而是交棒給 /sdlc-feat:工作包議題直接交棒,
需求議題先讓 /sdlc-sync 整併決策留言,剩下確實要改碼的才列出底下的工作包
讓使用者挑一顆。交棒複用 sdlc-sync 已經定好的接回機制,使用者不必重打指令。
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
2026-09-17 18:16:23 +08:00 |
|
 jiantw83andClaude Opus 5
|
66064a751e
|
fix(lib): 補回搬家時掉了的 rmSync,並讓 origin 檢查只有一份
review 抓到一個沉默的失效:rollback 最後那一手「git 清不乾淨時把目錄本身也清掉」呼叫
rmSync,但把這段從 branch-prep 搬進 lib 時,import 留在了原處。那一行落在自己的
try/catch 裡,所以 ReferenceError 被吞掉——註解承諾的事從來沒發生過,而且測試全綠。
下一次重跑會撞上 WORKTREE_PATH_TAKEN,人看到的是一句與真正原因無關的錯誤。
順手收掉兩支腳本各寫一次的 origin 檢查(只有「為什麼需要它」那一句不同,由呼叫端給),
並把 lib 檔頭「負責六件事」改成七件——工作樹的一生現在整個住在這裡。
正本三處跟著改:
- 查現況那一行補上 --dry-run。pr-watch 在 PR 已終止時會順手清掉工作樹,而「我想看一下
留言」不該把清理順便做掉——清不清理是使用者的決定。
- 拿掉「使用者堅持要繼續就繼續」:它與同一份正本的邊界(已合併或關閉時不繼續處理留言)
直接矛盾,而在一棵該被清掉的工作樹上改東西,那些改動不會進到任何 PR 裡。
- worktree-ensure 的指令補上 --path:目標專案多半不是當前目錄,而「不必先手動 cd」
正是這一步要解決的問題。
議題 #42
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
2026-09-17 17:33:44 +08:00 |
|
 jiantw83andClaude Opus 5
|
0dd8d7b7bb
|
docs(sdlc-fix): 第一步先看 PR 現況,再定位工作樹
補上 #14 沒有的工作樹概念:它預設在當前目錄處理留言,而留言要改的程式碼在那顆工作包
自己的工作樹裡。新的第一步先問 pr-watch 現況——PR 已經合併或關閉就停下來,在一棵該被
清掉的工作樹上處理留言是白做工——再用 worktree-ensure 定位,不在就重建。
邊界同時擋住兩件事:不回主工作區處理留言(它可能停在別的分支上),以及推導路徑上有
別的東西時不自己刪。原有的五個步驟整體往後移一號,內容不變。
議題 #42
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
2026-09-17 17:33:44 +08:00 |
|
 jiantw83andClaude Opus 5
|
f85fabb758
|
feat(流程正本): 新增 sdlc-sync,並讓另外兩份正本整併完自動接回
挑出哪些留言真的是決策、寫回去之前讓使用者點頭、略過的保持未標記——三件都只有正本做得到。
analyze 與 feat 原本寫「建議先執行 /sdlc-sync,再回來」,那等於要使用者重打指令。改成直接走
sync 的流程、做完自動接回,並在接回前重新抽取一次——接著用舊的那一份做事,這一整段就白做了。
略過的留言會讓未處理留言數停在大於 0,於是 analyze 與 feat 每次都會再停一次。這是驗收標準
本身的兩條放在一起的結果,正本把它講明白,讓使用者分得出「沒整併乾淨」與「我選了略過」。
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
2026-09-17 09:19:10 +00:00 |
|
 jiantw83andClaude Opus 5
|
32edd65962
|
docs(sdlc-feat): 第三段收尾指向 pr-watch 與手動清理
PR 開出去之後流程就斷在那裡,使用者不會知道有東西可以查現況、也不會知道工作樹會被
自動清掉。收尾補一步,把兩支腳本講給使用者聽,並明講「多久跑一次由他自己排」。
邊界同時擋住兩件事:agent 不自己反覆跑 pr-watch,也不因為它建議了 run-sdlc-fix 就
自己去跑 /sdlc-fix——流程只由使用者明確叫用。
議題 #41
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
2026-09-17 16:59:30 +08:00 |
|
jiantw83
|
6453c78fd1
|
feat(sdlc-fix): 新增 sdlc-fix 流程正本
分類必改/建議、不確定時停下來問、最後那則摘要——這三件腳本擋不住,只有正本做得到。
標不了的那幾則要在摘要裡單獨點出來,否則 reviewer 掃 reaction 與 resolve 時會以為它們
被跳過了。留言指向的程式碼已被改掉時不要硬試,列進「無法處理」讓使用者自己回。
|
2026-09-17 08:46:35 +00:00 |
|
 jiantw83andClaude Opus 5
|
d3ce364727
|
docs(sdlc-feat): description 跟著改成「備妥工作樹、起錶」
轉接檔的一行說明是從這裡取的,順序寫錯會讓人以為錶還是在領取那一步起。
議題 #40
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
2026-09-17 16:30:00 +08:00 |
|
 jiantw83andClaude Opus 5
|
0154cf59d4
|
fix(claim): 被碼錶擋下時明說停錶不會動到既有的工作樹
議題 #38 的使用者故事第 30 條:使用者常以為停錶等於放棄那顆工作包,於是寧可
不停——工時就記到別顆議題去了。碼錶只管時間、工作樹只管檔案,兩者互不相干,
這件事要在擋下來的當下就講,不能指望使用者自己推論。
領取與起錶會撞到同一個擋路理由,訊息收進 lib 只寫一份。順手收掉 review 指出的
三處:planWorktree 沒用到的 repo 參數、與 path.resolve 同名而誤導的區域函式、
以及只有 lib 自己用得到卻對外 export 的兩支路徑函式。
回滾補上最後一道:git 清不掉時把目錄本身也刪掉。那條路徑在這次執行之前不存在
(不存在正是建立的前提),裡面不可能有使用者的東西,而留著它下一次重跑會直接
撞上 WORKTREE_PATH_TAKEN——一次失敗的建立不該讓人從此開不了工。
議題 #40
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
2026-09-17 16:29:12 +08:00 |
|
 jiantw83andClaude Opus 5
|
4583a5f210
|
docs(sdlc-feat): 第一段改成領取、備妥工作樹、最後起錶
正本跟著實作走:分支那一步改成工作樹,新增起錶那一步排在它後面,
並把三處「不要自己決定」寫明——來源分支不存在時不自己換一支、路徑被佔住時
不自己刪、工作樹建不起來時不退回原地切分支。工作區不乾淨的處置整段拿掉:
工作樹本來就是為了讓未提交的變更不再擋路。
AGENTS.md 補上兩條邊界。git worktree add 一定會在目標 repo 的 .git/worktrees/
底下寫中繼資料,這是 git 的機制,無法避免——「不改目標專案」指的是專案的內容檔,
把這件事明說,免得下一個人以為實作違規。
議題 #40
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
2026-09-17 16:29:12 +08:00 |
|
jiantw83
|
997d4ec280
|
docs(sdlc-feat): 第三段補上兩個 repo 的區別與重跑的行為
說明 --repo 與 --issue-repo 的差別、--base 要明講不讓腳本猜、重跑不會開出第二顆 PR,
以及提交中途失敗時不要自己回捲歷史。
|
2026-09-17 08:23:28 +00:00 |
|
jiantw83
|
0b728ca270
|
feat(sdlc-feat): 加入第三段「提交與開立 PR」
PR 描述的八個段落與順序寫在正本裡,由 pr-create 擋;正本負責的是腳本擋不住的事:
測試結果要貼實際輸出而不是改寫成一句話、被擋下來時補真的內容而不是為了通過而拼湊、
以及跨兩個功能時用 --files 分兩次跑。
先開 PR 再停錶的理由也寫進去了:工時要記在真的有做事的那段時間上。
|
2026-09-17 08:23:22 +00:00 |
|
 jiantw83andClaude Opus 5
|
a45e981c95
|
feat(流程正本): sdlc-feat 加入第二段「逐項實作」
一項一項做完並即時勾選,讓議題頁的進度條隨時反映真實狀態。
過程不打斷:二十項待辦不按二十次同意,只印進度;也不為了勾選留留言——勾選改的是 body,
進度條自己會動,逐項留言會把議題洗版,reviewer 得從一堆「已完成第 N 項」裡找真正的討論。
真正該停下來問的只有三種,列出來了。
規則正本指名讀取,不在這裡複述——抄過來就會有兩份各自演化的規則。
中斷後重跑從 Gitea 的勾選狀態接續,不看任何本機檔案;重複勾選是安靜的 no-op,
所以不確定某一項有沒有勾到時直接再勾一次即可,不必先查。
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
2026-09-17 07:39:48 +00:00 |
|
 jiantw83andClaude Opus 5
|
d55f1682b7
|
feat(流程正本): 新增 sdlc-feat 與它的第一段「領取與開工準備」
第一段把工作包安全地認領下來、起錶、備妥分支,不改任何一行程式碼——它只負責讓後面的
實作有個乾淨的起點。
正本負責三件腳本做不到的事:讀完工作包後,未處理留言不是 0 就先停下來建議整併;
新分支從哪裡長出來要問過使用者,一次一題、附理由、永遠留手動輸入;議題標題翻成英文
kebab 也是 agent 的事,腳本只驗格式。
領取鎖的四種狀態連同放行那一種都列在表上,缺標籤則另外交代——它是 repo 的前置條件,
不是鎖的第五種狀態,混在一起會讓決策表說不清楚。
工作包跨多個 repo 時逐一確認要在哪幾個開分支,分支名在每個 repo 都相同。
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
2026-09-17 07:07:01 +00:00 |
|
 jiantw83andClaude Opus 5
|
57e45dd63e
|
feat(流程正本): 新增 sdlc-report 與工時報表模板
正本釘住三件事:期間怎麼切、落差怎麼讀、印到哪裡為止。報表只印在終端,
不張貼到議題、PR 或任何管道——要給誰看是使用者的決定,不是這個流程的。
時分格式由腳本算好,正本明令直接取用:報表上的數字自己算錯,比沒有報表更糟。
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
2026-09-17 06:50:34 +00:00 |
|
 jiantw83andClaude Opus 5
|
6b30552ee2
|
feat(流程正本): 兩份正本加入產生總覽與寫回網址的步驟
規劃版填總覽、目標、流程圖,工作包全景填空字串;分析版沿用同一份模板,額外把
工作包的相依與截止日畫成 graph TD 的全景圖。節點一樣以 12 個為上限,超過就只畫
相依鏈最長路徑上的那幾顆。
兩份都寫回同一顆需求議題的同一行,所以分析版會取代規劃版——同一顆需求議題只掛
一個總覽網址,這是預期行為,正本裡寫明免得被當成 bug。
另外交代填模板時流程圖不帶圍欄:圍欄是議題 markdown 用的,填進 HTML 會多出一段
沒有意義的字。
Closes #10
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
2026-09-17 06:22:28 +00:00 |
|
 jiantw83andClaude Opus 5
|
7a6cf948f5
|
fix(流程正本): 補回標題後被吃掉的空行
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
2026-09-17 06:06:10 +00:00 |
|
 jiantw83andClaude Opus 5
|
c635465751
|
feat(sdlc-analyze): 加入第三段,把工作包排上時程與看板
先算後寫:schedule 算出截止日,再由 issue-link、issue-update、project-add 逐顆
補上相依、時程與看板。三支都先試跑再實跑,三支都是冪等的。
另立一節寫明人天估算的 API 限制,而不是把它藏在行文裡——estimate 只寫得進 body,
sdlc-report 之後讀的也是那一行,這件事踩到才知道就太晚了。
邊界改成三段各自列:哪一段不做什麼講清楚,兩顆工作包才不會互相踩。
Closes #8
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
2026-09-17 06:06:08 +00:00 |
|
 jiantw83andClaude Opus 5
|
9a67c8074f
|
fix(流程正本): 「不畫圖」綁回上限,不是免死金牌
兩份正本原本都只寫「不畫:一行說明為什麼不畫」,讀起來像是隨時可以跳過。
議題 #1 的原意是「超過上限即拆圖或不畫」——退路是給畫不下的情況用的。
改成只在超過上限拆不開、或畫了不會比文字更清楚時才選,兩份正本一起改,
免得兩邊講法不同。
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
2026-09-17 05:43:26 +00:00 |
|
 jiantw83andClaude Opus 5
|
0cd25d49d4
|
feat(sdlc-analyze): 擴充為兩段式,第二段把共識變成工作包議題
第一段到共識摘要為止仍然完全不寫入;使用者點頭之後才進入第二段建立議題。
邊界條文隨之改寫成「共識摘要之前不對 Gitea 產生任何寫入」,並明列第二段
不做的事:不建相依、不掛 Milestone、不加看板、不寫人天估算——那些是後續
流程的工作,寫在這裡會讓兩顆工作包互相踩。
工作包的切法、標題規則(動詞加名詞、禁止 WP-01 這類流水編號)、待辦與驗收
的巢狀寫法(附可照抄的範例)、架構圖依性質三選一,都在這一段定下來。
邊界的斷言跟著條文一起改,因為條文換了語意;分開成兩顆 commit 的話中間那顆
會是紅的。另補一條斷言:第一段不得出現任何寫入型腳本的名字。
Closes #7
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
2026-09-17 05:43:24 +00:00 |
|
 jiantw83andClaude Opus 5
|
775909bd3d
|
feat(sdlc-analyze): 新增可行性分析的流程正本
一次問一題、依架構→邏輯→資料→時程清空、每題固定給「建議(含理由)」與
「手動輸入」兩個選項、最後輸出共識摘要。摘要只印在終端,這一段完全不寫入
Gitea——把工作包開出去是下一段的事。
開頭先看 issue-extract 回傳的未處理留言數:不是 0 就代表描述可能是過期的,
先提示使用者以 sdlc-sync 整併回描述再回來,堅持要繼續就在摘要裡註明。
明令「能在程式碼裡查證的就自己去查」,把問題留給只有人能回答的事。
Closes #6
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
2026-09-17 05:11:05 +00:00 |
|
 jiantw83andClaude Opus 5
|
453cf47188
|
feat(sdlc-plan): 新增需求議題模板與流程正本
templates/requirement-issue.md 固定需求議題的九個段落與順序:總覽/背景/
目標/非目標/領域名詞表/流程圖/驗收標準/影響範圍/未決事項。段落順序即
下游 issue-extract 的解析依據,總覽段落預留總覽網頁的連結佔位。
流程圖段落只放佔位、不寫死 mermaid 圍欄:正本允許「乾脆不畫」,若圍欄寫死在
模板裡,不畫時就會在議題頁留下一塊渲染失敗的空 mermaid 區塊。圍欄改由填入的
內容自己帶。
prompts/sdlc-plan.md 是流程正本,平台中立 markdown,不含任何平台專屬語法,
description 以「僅由 /sdlc-plan 指令叫用。」起頭。正本交代:三種輸入來源、
一次問一題且不得替使用者編造、九個段落的填法、Mermaid flowchart 的 12 節點與
8 字上限、標籤只能從 labels-list 挑、寫入前先 --dry-run。
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
2026-09-17 04:44:46 +00:00 |
|
 jiantw83andClaude Opus 5
|
7a8222a053
|
chore(骨架): 把模板 scaffold 換成 tea-sdlc 骨架
五份 manifest 的 name、description、homepage、repository 由 jsc-template
改指向 tea-sdlc,版本另起為 0.0.1;移除範例用的 skills/hello 並清掉
AGENTS.md 與 README.md 對它的引用。
建立後續工作包要落腳的四個目錄(prompts、scripts、templates、references)
並以 .gitkeep 納入版控;AGENTS.md 改寫為 tea-sdlc 的模組邊界與慣例,腳本
介面契約不複寫而指回議題 #1,避免正本分家。
新增 package.json 作為測試入口(node --test,Node 內建執行器,無任何相依
套件);.gitignore 加入測試暫存目錄 .tmp/ 與 node_modules/。
Closes #2
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
2026-09-17 04:06:09 +00:00 |
|