模組二|選題與素材庫(Day 6–11)
前四天講素材庫的結構。今天講一則具體的條目,因為它的 commit 序列把一個結構問題完整暴露出來了。
這則條目總共被 12 個 commit 修改,其中 11 筆集中在 4 小時 3 分鐘內。
第二名是 3 筆。它是離群值,而離群值通常最誠實。
把那 11 筆按時間排開,長這樣:
建立條目
→ 同步到第二份資料檔
→ 補立法分析
→ 補爭議紀錄
→ 補三重風險
→ 補人物檔案
→ 補查核圖譜
→ 補社群佐證
→ 補當事機構的否認聲明
→ 回頭把分析段措辭改成跟查核段一致 ← 這一筆
→ 再補查核機構的爭議說明
前九筆是「補」,第十筆不是。

那一筆的訊息大意是:同步分析段的措辭,使其與查核段一致。
翻譯成白話:我在分析段裡寫的東西,跟我在查核段裡標的可信度對不上了。
這件事怎麼發生的很好理解。分析段是早期寫的,那時候我對這件事的理解是 A。後面查核做下去,發現某些細節其實還沒證實,於是查核段被改成「待證實」。
而分析段沒跟著改。 它還停在 A,用著肯定的語氣,講一件查核段已經標成不確定的事。
這正是 Day 8 那條倫理要防的東西(未定的事實被講成定論),而它不是被講錯,是被兩個欄位的時間差製造出來的。
schema 保證欄位存在,不保證欄位之間說的是同一件事。
Day 8 那六條門檻,這則條目全部通過:查核段非空、有已證實層、有待證實層、來源兩筆以上、問答齊全。
它驗的是每個欄位自己的形狀,驗不了欄位之間的一致性。
而要驗欄位之間一致,需要的是「理解兩段文字說的是不是同一件事」,那不是 grep 做得到的,那需要一個模型。
這是驗證器的第一類盲區:跨欄位。 Day 16 會講第二類(跨檔案),兩者的性質一樣:確定性檢查只能驗它看得到的那個單位,超出那個單位就沒有了。

11 筆之後,隔兩天又補了第 12 筆。
而第 12 筆還是「補」,不是「修正」,不是「定稿」。
這則條目沒有一個「完成」的時刻。 它是被寫到我不想再寫為止。
這是「邊查邊寫」的典型痕跡。正確的做法應該是查完再寫:先把可查的都查掉,把可信度定下來,再一次寫完。
我當時為什麼沒有?因為查跟寫用的是同一個介面。條目就是那個 JSON 物件,我一邊查一邊往裡面填,填到哪裡算哪裡。沒有一個地方讓我把「還在查」跟「已經定稿」分開。
Day 15 會講單集的狀態機:那個東西有明確的階段。而條目層級沒有。
全庫的條目長度分布很極端:
| 字元數 | |
|---|---|
| 平均 | 7,523 |
| 中位數 | 6,104 |
| 最長 | 47,577 |
| 最短 | 1,465 |
最長的是平均的 6.3 倍,是最短的 32 倍。
而規則書上寫著「一事一條目」。
那則 47,577 字元的條目顯然不是一件事。它是好幾件事被同一個新聞事件串起來,然後全部塞進同一個物件,跟今天這則 11 次補充的條目是同一個病:沒有一個機制告訴我「這則已經太大了,該拆」。
第二筆 commit 是「同步到第二份資料檔」。
也就是說:同一份內容存在兩個 JSON 檔裡,要手動同步。
這件事的成本不只是多做一次。它的真正成本是:當我在第一份檔案上補了 10 次,第二份檔案還停在第 1 次。那 10 筆補充有沒有同步過去?我不知道。commit 訊息裡沒有再出現「同步」。
資料重複的成本不是儲存空間,是「兩份會分岔」,而且分岔不會發出任何聲音。
我不想把這一篇寫成全盤否定,因為那 11 筆補充本身是對的。
那則條目最後有立法分析、有爭議紀錄、有當事方的否認聲明、有查核機構的說明。它是一則被查得很仔細的條目。
補到第九筆才想起「當事機構有沒有回應」,這在時間軸上很難看,但在成品上它是對的,比很多只有單方說法的條目都好。
問題不在於補了 11 次,在於沒有一個機制讓我在第 3 次就知道還要補幾次。
這一篇最實際的代價是:我到現在還是邊查邊寫。
要修需要的東西也不複雜:條目加一個狀態欄位(草稿/查核中/定稿),定稿之前不進選題池。大概二十行的事。
我沒做。理由跟 Day 7、Day 8 一樣:它的收益是延後的。 當下多填一個狀態欄位,好處要到下次選題撈到半成品的時候才會體現,而那時候我已經忘記今天這件事了。
第二個代價:那則最長的條目我沒有拆。 我知道它應該拆,但拆一則已經被引用過的條目意味著要改 id 對應:rundown 裡是用 id 引用的。沒拆的原因是拆的成本比留著高,而這就是技術債的定義。
同一筆資料的不同欄位之間會分岔,而且不會有任何錯誤訊息。
這件事在任何有「摘要欄位 + 詳細欄位」「狀態欄位 + 說明欄位」的資料結構裡都會發生。修改總是從一個欄位開始,然後另一個欄位留在原地。
可以做的兩件事:
第二條,關於什麼時候該停:
如果一筆資料的修改次數是離群值,先別看它改了什麼,先問「它有沒有一個完成的定義」。
我那則條目改了 12 次,不是因為它特別複雜,是因為它沒有終點。而沒有終點的東西,會一直被改到人放棄為止,那是一個很糟的停止條件。
明天講一顆做了但是壞的按鈕,以及它同時造成的第二個後果。