三條測試都先確認過會在舊版實作上失敗。第一版寫出來時有兩條其實是陪跑的——
情境裡沒有後續段落,正確與錯誤的結果剛好都落在 body 結尾,分不出來。加上一個
真正的後續段落之後才有鑑別力。
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
摘要
把工作包排上時程與看板:建立相依、依拓撲排序推算截止日、掛 Milestone、歸入看板、記下人天估算。
需求議題
#1 — tea-sdlc:以 tea 驅動 SDLC 全流程的跨平台指令組
工作包議題
#8 — 建立工作包的相依、時程、看板與人天估算
變更內容
scripts/schedule.js— 依相依關係拓撲推算截止日(純運算,不碰 Gitea)。scripts/issue-link.js— 建立阻擋/先決相依。scripts/issue-update.js— 掛 Milestone、寫截止日、記人天估算。scripts/project-add.js— 放進看板,看板 id 靠掃議題反查。scripts/issue-body.js— 新增upsertLineInSection(段落內就地更新一行)。scripts/lib.js—parseIndex抽成共用。prompts/sdlc-analyze.md— 加入第三段「排上時程與看板」。設計重點
schedule純運算、沒有前置檢查也不需要登入;算出來的日期再交給三支寫入腳本逐顆寫上去。這樣時程邏輯可以在沒有 Gitea 的環境裡測到底。projects是整份取代不是附加,所以project-add先讀出議題既有的看板再聯集。漏掉就等於把議題踢出原本的看板。解決的問題
工作包原本開完就是一堆平鋪的議題,看不出先後。補上相依與時程之後,看板呈現的才是真實的開發順序。
影響的功能
新增。
issue-extract等四支腳本改用共用的parseIndex,行為不變。測試結果
npm test:十七顆 commit 逐一 checkout 後跑測試,每一顆都是綠的。
拿這個專案自己的相依圖當真實資料(議題 #2–#17 的實際關係,16 顆工作包)跑排程:
成環時:
{"ok":false,"error":{"code":"CYCLE_DETECTED","message":"相依關係成環,這些工作包彼此卡住:1、2"}}三支寫入腳本對真實 Gitea 試跑(皆未寫入):
⚠ 驗收標準第 5 條有一半做不到
前半做不到。 Gitea 1.27 的 API 沒有任何請求定義接受
time_estimate:Issue的回應 schema 裡。EditIssueOption與CreateIssueOption都沒有它。/issues/{index}/times與/stopwatch/*只能記實際工時,不是估算。estimate只有兩個命中,都在Issue回應內。兩軸 review 各自獨立查證過,結論一致。議題估算欄位只能靠人在網頁上填。
因此
--estimate-days只把估算寫成 body 裡的估算人天:N(放在「關聯」段落),sdlc-report之後要比對估算與實際工時時讀的也是這一行。正本裡另立一節寫明這個限制。這一條的 checkbox 我留著沒勾。 議題 #1 的「Gitea 承載對應」表把
Issue.time_estimate(秒)+ body寫成兩者都可寫,那一格需要更正——要不要我去改 #1,或在 #1 留一則說明,你說一聲。Code review 修掉的四個缺陷(全部先重現再修)
upsertLineInSection會改壞別人的內容,三種情境:圍欄裡的## 關聯被當成真標題;## 關聯度說明被indexOf誤認成## 關聯;「這一行是否已存在」用整份 body 比對,於是別的段落有同前綴時被改掉、真正的關聯段落反而拿不到值。改成沿用同檔的圍欄判斷、標題完全相符、只在段落範圍內找。schedule不擋重複的index:相依看後者、標題與人天取前者,混出來的時程還回傳ok:true。parseIndex抄了四份,抽進 lib。project-add有一條恆真的測試(「沒有非 GET 請求打到路徑含 project 的端點」,但 Gitea 的專案根本沒有 API 路徑),壞掉的實作也會通過。已改成驗真正的寫入只有議題那一次 PATCH。另外,第一版寫的三條回歸測試裡有兩條其實是陪跑的——情境裡沒有後續段落,正確與錯誤的結果剛好都落在 body 結尾。加上真正的後續段落之後才有鑑別力;現在三條都確認過會在舊版實作上失敗。
🤖 Generated with Claude Code