---
name: framework-self-dev
description: |
  在框架自己身上施工時要知道的事：一張框架單怎麼開。兩種單——舉發實作途中撞到的問題、
  開發框架新功能——開單那一刻問的格子不一樣，而舉發那一種要先看過還沒出去的單裡有沒有
  同一件。

  要改的東西是這套流程自己（skill、它們的腳本、常駐規則）的時候載入。例如「framework
  單怎麼開」「開一張框架的單」「這是框架的問題」「舉發框架有問題」，或 driving-work-to-done
  判定這件工作落在框架 repo 自己身上。

  不用於：某一個產品 repo 的工作（那是那個 repo 自己的知識 skill）、任何一類工作的完成
  條件（那是 swe-knowledge）、決定下一站是哪一站（那是 driving-work-to-done）。
metadata:
  version: 1.0.0
scope: universal
---

# 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。所以「查重不過就不給開」這種
東西不該存在。

**擋人的只有三件，而且它們擋的是沒有回答問題，不是答案的內容：**

1. 沒宣告種類。
2. 舉發那一種缺了 6W 任何一格。
3. 撞到了卻沒有寫下判斷。

判定「撞到十張，都不是同一件」的話，單照樣開得出來。那句判斷會寫進單的正文裡，所以下一個
讀它的人看得到當時是怎麼判的。

## 兩條入口

開一張框架單有兩條路，而**這一份對兩條都成立**：

- `refinement` 帶的 `open-seed-issue.sh`——它自己會問出種類、要 6W、跑查重。
- 自己算號再建目錄（`driving-work-to-done` 把算號那一支單獨交到人手上）。**走這一條的話
  上面那幾件事沒有東西替你做**，所以要自己做：宣告種類、答完 6W、掃一次還沒出去的單裡有
  沒有指名同樣檔案的，把判斷寫進正文。

**腳本不指名這一份知識。** 那一支住在會被帶走的 skill 裡，而它在沒有這一份的環境裡照樣
要跑得動。指過來的是 `driving-work-to-done` 的散文。

## 這一份不做的事

- **不決定下一站**。那在 `driving-work-to-done`。
- **不簽 assertion**。那在 `refinement`。
- **不管「實作途中發現的問題就地修」那條**。撞到一個修得動的東西就修掉，不必開單——這一
  份管的是「決定要記下來」之後那一步。
