feat(sprint): T-loop1d 今晚任務——雲端做 Arcrun#3 控制台頁(第二次壓測,跨多repo)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -445,6 +445,36 @@ array-of-tables(`[[x]]`)不用 inline array。改 toml 後用 `wrangler --dr
|
||||
|
||||
---
|
||||
|
||||
## 22. 零件退役只改一處 → 殘留誤導下個 CC;硬塞 canonical_id 是假綠(2026-06-28,issue #13)
|
||||
|
||||
**背景**:issue #13 收尾零件降級遺留。降級/退役某零件(telegram/gmail/sheets/line 等
|
||||
從「內建零件」改成「走 recipe」、ai_transform_compile/run 直接刪)時,**AI 搜尋零件的來源不只一個**,
|
||||
只改一處 → 別處殘留會讓下個 CC(或 Haiku 操盤手)誤判「這零件還在/還能用」。
|
||||
|
||||
**錯誤模式 A(殘留誤導)**:以為「示例 yaml 改完就退役乾淨了」。實際 AI 找零件有**三個源**,
|
||||
退役要三個一起清,否則殘留=錯誤環境信號(同 [[死代碼是錯誤環境信號]] 精神):
|
||||
1. **示例 yaml**(`component: telegram` 之類)— 步驟1 已改成 recipe canonical_id(`telegram_send`)。
|
||||
2. **`cli/src/commands/parts.ts` 硬編碼清單** — 步驟2 已清(telegram/gmail/sheets/line 改 recipe canonical_id、
|
||||
移除已刪的 ai_transform_compile/run)。**parts.ts 是手寫常駐清單,必然 stale** → 退役 SOP 要把它列進「必清的源」。
|
||||
3. **offline validate**(第三個污染源)— **這個是設計不是殘留**:offline validate 刻意跳過遠端查零件
|
||||
(不連網就能驗),所以它「不檢查零件存不存在」是 by design,留 issue 不當 bug 修。
|
||||
|
||||
**錯誤模式 B(硬塞 canonical_id =假綠)**:gmail **讀取**(`fetch_unread` / `action: list`)
|
||||
**沒有對應 recipe**,把它硬指成 `gmail_send`(寄信 recipe)=張冠李戴的假綠(mindset §7)。
|
||||
正解:**留 TODO 待 seed 補 `gmail_list` recipe**,不硬塞一個語意不符的 canonical_id 充數。
|
||||
「有個 canonical_id 可填」≠「這個 canonical_id 對」。
|
||||
|
||||
**正確做法**:
|
||||
- 退役零件 → **同步清三源**(示例 / parts.ts / 任何硬編碼清單),別只改一處宣布完成。
|
||||
- 沒對應 recipe 時 → 誠實留 TODO + 發 issue 補 seed,**不硬塞語意不符的 id**。
|
||||
- 退役 SOP([[死代碼是錯誤環境信號]] 的姊妹)寫進流程:清殘留 = 清「AI 搜尋零件的所有源」,不只宣告。
|
||||
|
||||
**通用教訓**:「改完一處=退役完成」是錯覺;常駐硬編碼清單(parts.ts)必 stale,是退役必查項。
|
||||
連帶:這跟 #19「死端點假綠」、#15「假設 v3 route 還在」同類——**陳述「退役/遷移完成」前問「所有引用源都掃過了嗎」**。
|
||||
日期:2026-06-28。
|
||||
|
||||
---
|
||||
|
||||
## 快速檢查清單(做新功能前)
|
||||
|
||||
- [ ] 這是工作流還是零件?問「有必要嗎?」
|
||||
@@ -461,3 +491,5 @@ array-of-tables(`[[x]]`)不用 inline array。改 toml 後用 `wrangler --dr
|
||||
- [ ] 新增/改薄殼工具?grep 確認它打的 server route 真的存在,別假綠(#19);宣稱對齊前跑 thin-shell-smoke.sh
|
||||
- [ ] 想用 git log 查某檔歷史?先 git check-ignore——gitignored 檔無 git 史,時間靠檔內註記(#20)
|
||||
- [ ] 改 wrangler.toml service binding?用 [[services]] 不用 inline services=[...]([vars] 後會被吸走);改完 wrangler --dry-run 驗 binding 真在(#21)
|
||||
- [ ] 退役/降級某零件?同步清「AI 搜尋零件的三個源」=示例 yaml + parts.ts 硬編碼清單 + (validate 跳過是設計);別只改一處宣布完成(#22)
|
||||
- [ ] 沒對應 recipe?誠實留 TODO + 發 issue 補 seed,別硬塞語意不符的 canonical_id 充數(假綠,#22)
|
||||
|
||||
Reference in New Issue
Block a user