framework-self-dev — 在框架自己身上施工
這一份只講一件事:一張框架單怎麼開。
之後怎麼走不在這裡——driving-work-to-done 回答下一站是什麼,refinement 簽 assertion,
swe-knowledge 說這一類工作怎麼算 done。這一份補的是它們都沒有的那一格:開單那一刻要
回答什麼。
為什麼框架單需要自己一份
產品單來自外部系統,開單那一步有人把關:號要去那裡領,而領號的人會先看有沒有一樣的。 框架單沒有那一層。 開一張的成本是一個命令,而每一個 session 都在撞東西、每一個都照 規矩記下來——觀察是各自的,待辦是共用的。
2026-08-31 一天開了 44 張,因為那天有八個以上的 session 同時在跑。同一天量到的:還沒 出去的 52 張裡,43 張從來沒被任何一張產品單提到過,39 張一輪都沒開過,32 張連 assertion 都沒簽。而其中有 11 對在講同一件事。
這一份存在的理由是讓那個比例不再發生。 它不擋任何人——它要人回答問題。
兩種單,開單的人自己說是哪一種
| 舉發(實作途中撞到的問題) | 開發框架新功能 | |
|---|---|---|
| who 誰、在做什麼工作時撞到的 | 撞到的人當下就知道 | 沒有「撞到」這件事,答不出來 |
| where 撞在哪個檔 | 同上 | 同上 |
| 查重的鍵 | 就是 where |
where 不存在,鍵產不出來 |
新功能那一種不是被豁免,是那個機制對它不成立。 硬要它填,填出來的會是一個編的 ——而編過的格子看不出來,空著的看得出來。
種類由你宣告,不由腳本從名字或內容推。 推的話,同一件事換個寫法就換一種待遇, 而沒有人看得出來換過。
兩種單的終點是同一個形狀:都是一張該填的格子都有答案、只等 refinement 簽 assertion
的單。差的只有開單那一刻問哪幾格。
舉發那一種:6W
refinement 的四格(what/when/why/how)本來就在,舉發多兩格:
- who——是誰、在做什麼工作的時候撞到的。
- where——撞在哪個檔。這一格同時就是查重的鍵。
那兩格正好是開單當下最便宜的兩格:撞到的人知道自己是誰、知道自己剛剛在讀哪個檔。它們不 像 assertion 那樣要想清楚怎麼算成功。
assertion 不在開單那一刻簽。 一張種子單存在的整個理由就是「怎麼算成功還沒想清楚」。 要求 6W 不改變這件事——改變的是開出來的東西不再是一張筆記。
查重:把撞到的那幾張端到眼前
鍵是「正文指名的檔案有交集」,不是標題共用實詞。 2026-08-31 拿當天真的重複的 11 對 當測資量過:
| 查重的鍵 | 11 對裡抓到 | 會提醒幾對 |
|---|---|---|
| 標題共用 ≥2 個實詞 | 6 | 3,300(全樹之間) |
| 正文指名的檔案有交集 | 10 | 93(還沒出去的 38 張之間) |
標題那一組漏掉的五對裡有三對一個詞都不共用,而那三對用檔案這個鍵全部抓得到。
分母是還沒出去的單。 開單的人要看的是「現在還在待辦裡的有沒有同一件」,不是「歷史上 有沒有」。終局那幾格不進分母。
噪音集中在少數幾個檔上,而那正好是資訊:一張新單指名某支被七張單同時指名的腳本時, 那七張本來就該一起看。
這不是一道閘
開一張重複的單不是不可逆的(close 得掉),也不出這個 repo。所以「查重不過就不給開」這種 東西不該存在。
擋人的只有三件,而且它們擋的是沒有回答問題,不是答案的內容:
- 沒宣告種類。
- 舉發那一種缺了 6W 任何一格。
- 撞到了卻沒有寫下判斷。
判定「撞到十張,都不是同一件」的話,單照樣開得出來。那句判斷會寫進單的正文裡,所以下一個 讀它的人看得到當時是怎麼判的。
兩條入口
開一張框架單有兩條路,而這一份對兩條都成立:
refinement帶的open-seed-issue.sh——它自己會問出種類、要 6W、跑查重。- 自己算號再建目錄(
driving-work-to-done把算號那一支單獨交到人手上)。走這一條的話 上面那幾件事沒有東西替你做,所以要自己做:宣告種類、答完 6W、掃一次還沒出去的單裡有 沒有指名同樣檔案的,把判斷寫進正文。
腳本不指名這一份知識。 那一支住在會被帶走的 skill 裡,而它在沒有這一份的環境裡照樣
要跑得動。指過來的是 driving-work-to-done 的散文。
這一份不做的事
- 不決定下一站。那在
driving-work-to-done。 - 不簽 assertion。那在
refinement。 - 不管「實作途中發現的問題就地修」那條。撞到一個修得動的東西就修掉,不必開單——這一 份管的是「決定要記下來」之後那一步。