# 決策日誌

每筆記錄：日期、決策、理由。定義檔（`prompts/`）、codebook、
研究計畫的任何修訂都必須在此留下記錄。

## 2026-07-30

- **語料擴大為 2016–2025 十年**（先導研究為 2018–2025）。
  理由：框架完整、可看年度趨勢。
- **全文不與先導研究比較**：論文僅呈現正式研究結果，數字
  一律以正式研究為準；先導研究只作為 codebook v0 與假說的
  內部來源，記於本日誌，不進入論文敘事。
- **分析管線採 API script，不用 Claude Code subagent**。理由：
  實測證實 subagent 會繼承 CLAUDE.md 與環境資訊，context 無法
  僅憑定義檔重現；API 呼叫的輸入完全受控且可稽核。
- **模型釘定 `claude-sonnet-4-6`、temperature=0、thinking 關閉**。
  理由：該組合非決定性最低；條件 A/B 盲點實驗以模型為研究
  對象，須與 pilot 的 Sonnet 家族銜接。Fable 5 不採用（成本、
  thinking 不可關閉且不可稽核、無 temperature、混淆核心主張）。
- **工具性環節的模型於階段 3 以校準樣本實測後決定**：同批
  校準樣本以 Sonnet 4.6 與 Opus 5 各跑一次，對照人工黃金標準
  比較一致率，據以決定是否於特定環節升級。
- **codebook 採 directed content analysis**：理論骨架
  （top-down）＋開放碼歸納通道（bottom-up），並加做 LLM 純歸納
  輪與黃金標準的映射分析。映射分析方法須在看到結果前寫入
  `methodology.md`。
- **完整歌詞不進 git**（版權）；API 金鑰走 `.env`。
- **專案目錄維持原名 `pop-fem-audit`**：API 管線下目錄名不會
  進入模型輸入，無污染疑慮。

## 2026-07-31

- **專案英文名定為「A Feminist Audit of Pop Music」**：明示
  女性主義立場，「audit」兼指對歌曲與對 LLM 標籤系統的稽核，
  並與縮寫 `pop-fem-audit` 對應。
- **程式碼收整為 `tools/` src-layout 子專案**：發行名
  `pop-fem-audit-tools`、import 套件名 `pop_fem_audit_tools`、
  description「Tools for A Feminist Audit of Pop Music.」；
  以 `pip install -e tools/` 安裝、`python -m
  pop_fem_audit_tools.run_llm` 執行；相依套件記於
  `pyproject.toml`（`requirements.txt` 移除）；Sphinx 文件
  暫緩。理由：後續多支程式將共用程式碼，套件化後測試可用
  正常 import；目錄名 `tools/` 經無脈絡的獨立 subagent 命名
  評估選出，最誠實反映「服務研究的輔助工具」定位——研究
  本體在根目錄的 prompts/、runs/、results/，程式只是配套。
- **CLI 入口改為套件層級 dispatcher**：dispatcher 為單一
  入口，`run_llm.py` 的 entry point 移除；有兩種等價呼叫
  形式——`python -m pop_fem_audit_tools run-llm ...` 與
  console script `pop-fem-audit-tools run-llm ...`
  （`[project.scripts]`）。理由：後續多支工具共用單一入口，
  `--help` 可列出全部子命令，重現文件穩定。
- **資料儲存架構定案**：commit 判準——凡能由「committed 輸入＋
  committed 程式」決定性再生者不 commit；源頭、外部捕捉、人工
  著作以文字格式 commit。工作儲存採 SQLite 單檔
  （`tools/instance/`，generated、不進 git；歌詞全文入 DB 故無
  版權疑慮），schema 以 SQLAlchemy 2.0 typed ORM 定義，設定經
  pydantic-settings（`.env`）。`results/` 報表 CSV 為「可再生仍
  commit」的唯一例外，理由：論文引用穩定性、審稿人零門檻、
  撰稿期數字變動可 diff。（本條經多輪辯證後定案，推翻 Claude
  最初的全 CSV 方案。）
- **資料模型**：songs、chart_entries（1—N）、artists、
  song_artists（M—N：角色、署名順序）、lyrics（1—1）；領域
  不變量檢查內建 `build-db`，違規即失敗。
- **歌手背景擴充與防火牆**：歌手資料擴為實體表（QID、性別、
  型態、曲風、國籍），women-power 候選的歌手另做深度背景
  （族裔以公開自我認同為準、音樂場景），供人工解讀與論文
  討論；**歌手背景絕不進 LLM 輸入**（歌詞-only），避免光環
  偏誤污染條件 A/B 實驗。
- **沿用先導研究歌詞捕捉**（lyrics.json，684 首，2018–2025）：
  只匯入識別欄位與歌詞本文，pilot 分析欄位不匯入；以
  (year, rank) 精確匹配。出處記於 `lyrics-provenance.csv`：
  source（原始 API）與 method（pilot-import / api-fetch）
  兩層；取得日期不可考者不假造，僅記可證上界。
- **`run_llm` 改走 pydantic-settings 統一設定**（刪手寫 .env
  parser），與 `config.py` / `database.py` 一致。
- **`lyrics` 表併入 `songs.lyrics` nullable 欄位**（資料模型由
  五表改四表）。理由：1—1 關係在此量級下獨立成表只有正規化
  慣性，nullable 欄位更簡單；「未取得」以 NULL 表達，語意
  等價。

## 2026-08-01

- **引擎獨立性以 PostgreSQL/SQLite 為範圍**（MySQL 的 VARCHAR
  長度限制不處理）。
- **`build-db` 的重置改用逐表 DELETE，不再 drop/create**：
  schema 生命週期歸 migration 管，build-db 只管資料。連帶
  效果：重置成為純 DML,全程單一交易、驗證通過才 commit——
  建置失敗時前一版資料完好。首次執行仍以 create_all
  （checkfirst）補缺表。
- **song/artist ID 由 build-db 顯式指派**（首次出現順序 1、2、
  3…），不依賴 autoincrement——PostgreSQL 的 sequence 在
  DELETE 後不重置，顯式指派讓重建決定性跨引擎成立。
- **禁止文字 SQL statement，一律經 SQLAlchemy ORM/Core API**。
  唯一記錄在案的例外：SQLite 的 `PRAGMA foreign_keys=ON`
  （官方建議作法，無非文字 API 可用；SQLite 的 FK 旗標為
  逐連線設定）。裁定其歸屬為連線組態，實作於 `database.py`
  的 `__create_engine`——建 engine 時對 SQLite 註冊 connect
  listener，所有消費者全程生效，不再由 build-db 各自註冊。

## 2026-08-02

- **`import-lyrics` 不設為子命令，pilot 歌詞改以私人腳本
  匯入**。理由：pilot 捕捉檔不隨論文發布，子命令
  形式會在發布的 CLI 裡留下讀者無法執行的死命令——要交待的
  是「沿用 pilot 捕捉」的事實（記於 lyrics-provenance.csv 與
  論文方法節），不是工具本身；工具移出專案，發布管線即
  「讀者可完整執行的程序」。讀者重現歌詞的路徑為
  `fetch-lyrics`，API 漂移造成的差異屬捕捉層的已承認限制。
  provenance 的 method 值域定為
  pilot-import / api-fetch / manual。
- **資料路徑全面改為顯式 CLI 引數**——必要運算元為位置
  引數、選擇性輸入為選項（build-db 吃榜單 CSV 一個位置引數，
  歌詞目錄、Wikidata 快照、overrides 為 `--lyrics-dir`／
  `--wikidata-csv`／`--overrides-csv` 三個選項；fetch-lyrics
  吃歌詞目錄、provenance、缺漏報表三個位置引數；fetch-artists
  吃快照檔；run-llm 吃 runs 目錄），命令與 CWD 無關，且每次
  執行觸碰的檔案完整見於指令本身。省略選項即不載入該捕捉層；
  給了選項而路徑不存在即建置失敗，取代原本的默默跳過。理由：
  settings 的 `.env` 依 pydantic 慣例讀自 CWD（約定
  `tools/`），資料路徑原以 repo 根為 CWD，兩者衝突；顯式引數
  消滅隱性 CWD 契約，亦拒絕以父目錄推導兄弟檔案的隱性慣例。
- **`data/` 依生命週期分三層**：`source/`（源頭，手放後不動）、
  `captures/`（外部捕捉，只由 fetch 命令與私人匯入腳本寫入）、
  `manual/`（人工著作，只由研究者手寫；之後的黃金標準編碼
  亦居此）。理由：三種生命週期混住一層，目錄無法傳達「誰可以
  寫哪裡」；顯式引數化後搬遷零程式改動。
- **源頭榜單 CSV 全面對齊 Billboard 年終榜發布版**（修正
  203 列）。語料源頭定義為「年終榜發布當時的印法」，以
  Wayback Machine 發布時快照逐字轉錄（2016–2018 原沿
  Wikipedia 改寫慣例）；年終原文殘缺或有疑問者，以當年週榜
  掛名為準（唯一適用例：2016#87〈All the Way Up〉）。
- **歌名正規化採 canonical artist credit 對照表**：同一首歌
  因署名字串寫法不同而分裂者，以明示對照表合併；歌曲身分＝
  （原始歌名，對照後署名字串），不解析署名——拆解機器不進
  歌曲身分判定，對照表即完整可稽核清單。
- **歌手名單拆解規則定案**：署名列出成員的團體只留成員
  （冒號與括號兩型）；名字內含連接詞的單一藝人入保護名單；
  規則無法表達的個案入例外表；人名連寫的二人組拆成個人；
  僅以團名掛名的團體維持單一實體，屬性留待 fetch-artists
  與人工 overrides。完整清單見 `build_db.py`。
- **歌手名正規化**：歌手名大小寫不敏感歸併、存首見拼法；
  正名表（casefold 鍵→官方拼法）存官方拼法，含跨拼法合併
  ye→Kanye West。
- **`data/` 增設 `derived/` 衍生層**：`build-db` 建置工作儲存
  的同一動作產出兩張人讀報表（songs.csv、artists.csv）並
  commit——與 SQLite 同交易語意、驗證通過才寫檔，稽核鏈
  「committed 輸入＋程式→CSV」無中間空缺；為「可再生仍
  commit」的第二例外。報表不含資料庫 ID（內部參照，資料
  改版會重排，不供引用）；關係以內嵌字串呈現——`/` 連同
  一首歌的多次上榜、`|` 連不同歌曲——欄位一律字母序。
- **歌手正名表全面改存官方拼法**：變音符號一律恢復
  （Billboard 印法慣性去符號，共 12 筆，如 Aminé、Jhené
  Aiko、Silentó）；二人組拆名改存成員全名（Dan Smyers、
  Shay Mooney）；官方大小寫 3 筆（Cris MJ、Mariah the
  Scientist、Surf Mesa）。官方拼法逐筆以 DSP 官方頁查證
  （維基百科／Wikidata 的大小寫是其自家規範，不作準）；
  查證亦確認 Tones And I 的 chart 印法即官方寫法，不改。
- **`fetch-artists` 解析演算法定案**：改用 WDQS 的 SPARQL
  索引查詢（不依賴搜尋排名、不用 LCASE——實測會逾時）。
  步驟：(1) 歌手名與 label／alias 精確比對（@en＋@mul 兩層）
  取候選，型態限人類∪音樂團體子樹∪original cast；(2) 唯一
  即定案；(3) 歧義以上榜歌曲佐證——歌名精確比對取歌曲條目
  的 P175 演出者（含其 P527 成員）與候選交集；(4) 再落空則
  反向錨定：候選（含所屬團體）演出過的歌曲以 casefold 比對
  歌名；(5) 均落空記查無並續行。每步須恰一命中才選定，
  實測零錯選。Last-resort 釘定表僅一筆（Pinkfong——唯一
  P31 為品牌的上榜演出者，型態閘門依設計排除）。暫時性
  故障（429／5xx／讀取逾時）退避重試，重試盡記 error 列；
  not found 專指程序查證後無所得。全量實跑 469 位全數
  解析且與人工查證的 QID 逐筆相符；首次快照隨本次入
  捕捉層。
- **先補完 Wikidata、再捕捉快照**：歌手資料查證做在上游——
  以 subagent（`artist-wikidata-updater` 定義檔）逐位查證
  快照欄位（P21、P31、P136、P27／P495，新條目加 P106）並
  草擬附來源的 QuickStatements，由研究者本人審摘要、以本人
  帳號執行；編輯沉澱後重跑 `fetch-artists`，Wikidata 容不下
  的判斷才入 overrides。理由：修在上游全網受益，編輯史與
  來源公開可稽核，快照乾淨、overrides 縮小；論文方法節揭露
  「捕捉前經研究者查證補完」。性別以公開自我認同為準，
  推測不確定且無佐證者列疑慮清單；查證屬資料策展而非
  分析，以 Claude Code 輔助、不走分析 API；QS 批次以
  私人工作檔留存，不隨論文發布。

## 2026-08-04

- **移除人工 overrides 層**：`build-db` 刪去
  `--overrides-csv` 選項與套用邏輯，文件同步移除
  `data/manual/artists_overrides.csv`。理由：「先補完
  Wikidata、再捕捉快照」工作流實跑後，469 位歌手全數
  在上游查證補齊，快照即完整，本地覆蓋層已無存在事實；
  `data/manual/` 層保留（供日後黃金標準編碼）。
- **`fetch-lyrics` 加原始署名 fallback**：以第一位 primary
  歌手查詢兩 API 皆落空時，改以拆解前的原始署名字串（缺漏
  報表既有的 `artist_credit`）重查一次；與主查詢同為精確
  查詢，API 順序不變。理由：二重唱／雙掛名歌曲在歌詞 API
  目錄以合體名義建檔（Dan + Shay、Lil Baby & DaBaby），
  單人名查詢必落空；手動模擬證實 fallback 三首全中。
- **`build-db` 匯入重構為兩個 job class**：`SongImporter`
  （榜單 CSV→歌曲身分去重→songs＋chart_entries）與
  `ArtistImporter`（自資料庫依 song ID 讀回署名→拆解→正名
  →去重登記→artists＋song_artists），與 `CSVExporter` 同形
  （建構子收 session、單一公開入口）；命名取 import／export
  對稱，不用 loader（有「載入記憶體」聯想，實為寫入持久
  儲存）。歌手登記改於歌曲全數入庫後第二階段進行，兩塊
  之間不再共享記憶體狀態；各 job 專用的純函數與規則表
  （身分判定、拆解、正名）隨行入 class 作公開 staticmethod
  ／class 常數，「哪個函式屬哪個工作」由 class 歸屬直接
  表達。flush 定為匯入工作的完工契約——entry method 返回
  時自身寫入已可查詢，不再由呼叫者補 flush。捕捉層套用
  （歌詞、Wikidata 快照）隨後同型打包為 `CaptureImporter`
  （單一入口收兩個可省略路徑）。實測重構前後工作儲存
  dump 與衍生報表逐位元組相同。
- **歌手型態刪去 mixed 值**：`ArtistType` 只留 solo／group。
  mixed 是先導研究「男／女／混合團體」單一欄位的殘留，
  正式設計拆成 gender＋type 後從未定義其指涉；署名一律
  拆成個人後，男女混合是歌曲層（song_artists＋各歌手
  gender）可推導的事實，不屬歌手實體。非人非團體者
  （Pinkfong）type 留空由人工判定，維持現狀。
- **獨立驗證步驟解散，不變量檢查歸屬各匯入工作**：榜單
  覆蓋（(year, rank) 網格恰好齊全、無缺漏、無多出、無
  重複）檢在 `SongImporter` 匯入結尾；署名解析結果（至少
  一人、含 primary、名字非空白）檢在 `ArtistImporter` 逐筆
  解析後立即失敗。違規拋 `BuildError` 走既有的失敗路徑，
  `find_violations` 刪除。理由：檢查跟著產生資料的工作走，
  main 不再有驗證分支；逐筆即時失敗使錯誤指向出錯的那筆
  署名。
- **Markdown 檔名一律以 dash 連接**（decision-log.md、
  research-plan.md、project-structure.md 等；與 data/ 層
  CSV 檔名慣例一致），定義檔命名慣例同步改為
  `prompts/<task>-v<N>.md`（如 screen-v1.md），版本庫外的
  私人工作檔一併改名；`conference_abstract.md` 改名並搬入
  `paper/`——它是本次年會實際送出的摘要，與全文同屬投稿
  血脈，不是 `docs/` 的內部工作文件。全 repo 指涉同步更新。
- **fetch-lyrics 移除缺漏報表**：刪去 `missing_csv` 位置引數
  與缺漏報表 CSV 輸出。理由：該報表只寫不讀（指令從未讀取
  它），缺漏數字每次執行皆由工作儲存比對歌詞目錄重新算出；
  worklist 角色由重跑冪等指令本身承擔；完整性已由 provenance
  CSV 與 build-db 統計數字佐證；該檔案不承載任何無法重新
  產生的資訊。
- **新增 `export-llm-input` 子命令**：由工作儲存產出
  `run-llm` 的 JSONL 輸入檔（每筆 `id`＋`content`）；此為
  「歌手背景絕不進 LLM 輸入、歌詞-only」防火牆的執行點
  ——內容只有歌詞，歌曲身分以 `song-<ID>` 不透明鍵放
  `custom_id`，不入訊息本體；ID 由 build-db 決定性指派
  故檔案可再生，依 commit 判準不進 git（且含歌詞全文，
  版權亦不許）；固定匯出全部歌曲，缺歌詞即失敗；單一
  位置引數收輸出檔路徑，文件範例輸出至 `tools/instance/`。
- **指令模組集中為 `commands` sub-package**：五個子命令模組
  移入 `pop_fem_audit_tools.commands`，`__init__` 以
  `from .run_llm import main as run_llm_command` 逐條登記為
  指令清單，`__main__` 只消費此 façade；`_command` 後綴避免
  與子模組同名遮蔽，測試仍以模組屬性風格使用；基礎設施模組
  （config／database／models／utils）留頂層。理由：「指令
  vs 共用底層」由目錄結構直接表達，與「哪個函式屬哪個工作」
  的歸屬原則同型。
- **自然編碼管線四步驟定案**：自由標註（tag，×2 全進池不
  仲裁——自由詞彙兩次輸出無共享比對單位，仲裁即再生成）→
  自然收斂（merge，2+1）→ 強制收斂至 50 內（cap，2+1）→
  以定稿詞彙表全量編碼（code，2+1，附引述，逐首仲裁看
  歌詞）。收斂步驟不看歌詞（目標是產生 codebook 而非編
  碼）；收斂仲裁的紀律：程式先算共識核（凍結）與分歧清
  單，仲裁只裁分歧、不得引入新概念。編碼回歸採 LLM 直接
  編碼為主儀器，理由：唯此能逐標籤附歌詞引述（偏差檢視的
  依據）、標籤是模型對歌曲的直接斷言（批判對象乾淨、不混
  收斂軌跡假影）、詞彙表出自模型自身故無語意干涉；軌跡
  機械對映降為診斷副產品。此設計為對前導研究「映回後未
  對照歌詞」限制的明文改良。
- **2+1 協定適用原則重述**：由「每個 LLM 步驟」修正為
  「輸出可逐項機械比對的步驟」；自由生成步驟改為兩次執行
  進池。CLAUDE.md 同步修訂。理由：自由詞彙步驟強行仲裁
  等於第三次生成，無稽核意義；可比步驟的一致率（逐詞塊、
  逐首）才是有定義的穩定性證據。
- **提示詞只定格式、不定語意**：LLM 定義檔不含任何主題
  定義、判準、範例；研究者判準只住 codebook。理由：研究
  對象是模型以網路語料知識背景所做的自然編碼，先給定義
  即消毒了批判對象。此原則之落實：粒度鎖定 thematic
  keywords（前導研究三粒度比較之繼承，執行前鎖定防事後
  擇優）；收斂輸入不附頻次（頻率的分析角色由編碼步驟承
  擔；頻次誘使頻率剪枝與高頻主題細分）。引述歌詞證據為
  必要輸出——檢視編碼偏差的依據，不屬語意干涉。
- **「女性力量」單目標篩選降級為取樣補漏網**：候選集由
  自然編碼（code 步驟）浮現；單目標篩選僅用於把模型「被
  明示提醒後認得出」的歌撈進人工審視範圍，量測漏標方向
  的偏差，不進偏差統計的定義。「全編碼＋標籤詞提示」混合設計
  取消——既非自然編碼亦非深度判準，量到的東西
  無法解釋。screen 逐首 2+1、不給定義，標籤詞用
  `women-power-and-empowerment`。認清：此編碼是任意的——
  基於研究目的由研究者決定，不是由資料產生（先導研究中的
  來歷已不可考，不宣稱由下而上湧現）。選用理由：複合詞
  同時涵蓋力量宣示與賦權論述兩半概念空間，補漏網寧廣勿
  窄；「empowerment」正是研究對象的市場語彙；不押注單一
  時代慣用語。同義詞清單不採——每多一詞即研究者多塑形
  一分。已知限制：雙管詞語意模糊（無從分辨觸發自哪半），
  僅作召回之用，結果永不進統計的分子分母。標籤詞是
  screen 提示中唯一的語意種子，屬研究者的儀器選擇，據實
  揭露。
- **定義檔命名定案：軌-步前綴、不帶版本號**：
  `prompts/<軌>-<步>-<task>.md`——軌 01＝由下而上自然編碼、
  02＝預先決定的 women-power-and-empowerment 篩選：
  01-01-tag、01-02-merge、01-03-cap、01-04-code、
  02-01-screen；仲裁檔同 prefix 加 `-arb`。檔名不帶版本
  號——版本即 git 歷史，失敗的版本不保留；每次執行的定義
  檔快照隨 runs/ 自我完備，`runs/` 目錄改為
  `<定義檔名>/`——同理不編日期：只存一份，重跑即取代，
  被取代的執行在 git 歷史，時間戳在 meta.json。四次收斂執行（merge ×2、cap ×2）
  各存合併記錄 JSON 隨該次執行入 runs/。
- **`run-llm` 降階為純執行器**：原內建的 2+1 編排（文字級
  一致性判定、固定模板仲裁）拆除；run-llm 只負責「一份
  定義檔＋一份輸入 JSONL，跑 N 次（預設 2、仲裁場合 1），
  歸檔 `runs/<定義檔名>/`（重跑即取代）」。理由：一致性
  判定須逐步驟、結構性（分組比對、標籤集合比對），屬
  確定性腳本的工作；仲裁輸入由比對腳本建構，本身成為
  runs/ 可稽核工件；執行器變小易測。比對／進池／裁決
  套用子命令另行實作。
- **`run-llm` 一次呼叫即一次執行**：`--runs` 與 `--run` 皆不存
  在，完整命令形狀為 `run-llm <定義檔> <輸入檔> <歸檔目錄>`——三個
  必要運算元皆為位置引數（沿 2026-08-02「必要運算元為位置引數」慣
  例），歸檔目錄如 `runs/01-01-tag/run1`，工具內部零 run 概念，
  meta 不記 run 編號；「獨立執行兩次」＝重現命令清單上的兩行命令，
  run 身分只活在命令清單與目錄佈局約定，不在工具內。理由：兩次執行
  互相獨立是方法學宣稱，其證據應由執行結構與重現命令清單自明，不應
  要求讀者讀工具原始碼；歸檔目的地為顯式引數，亦是「資料路徑全面顯
  式化、消滅隱性推導」原則的貫徹。比對子命令驗證兩 run 的定義檔與
  輸入 SHA 一致、缺 run 即失敗。目標目錄已存在即拒絕執行，重跑須明
  示 `--replace`。
- **screen 標籤詞改為 `women-power`（來歷考據定案）**：
  考據先導研究的 local agent 存檔：其第一步指令含數十個
  範例 thematic keywords，其中即有 women-power——為當時
  協作的 Claude Code 依研究者長期表達的關注主動加入
  （研究者端播種，非明示指定）；先導標籤
  women-power-and-empowerment 則是第三步強制合併
  women-power＋empowerment 兩個關鍵字的管線人工產物
  （研究者數月來誤以為是 women-power＋women-empowerment
  之併，至此方明）。修正：探針指向被播種的概念本詞
  women-power，不用合併假影；research-plan 的「來歷不可
  考」敘述同步改為考據結果。附帶認清：先導第一步並非零
  語意提示——此即正式研究「只定格式、不定語意」設計所
  矯正者。
- **定義檔輸出形狀統一與去署名**：LLM 輸出統一為單層
  dict／array——tag、code：關鍵字→引述；merge、cap：
  組名→成員；code-arb：保留關鍵字→仲裁者自己的引述
  （剔除即不列，剔除集合由程式以鍵差推得）；screen 系：
  引述陣列，非空即「有」（present 布林刪除，判斷與依據
  合一）。仲裁輸入一律不含執行別——標示何方主張會誘使
  仲裁者揣測「哪次較可信」，而非就文本裁決。收斂組名採
  自由命名（不限取自成員詞），取命名貼合度；可追溯性由
  軌跡歸檔承擔。
- **定義檔改三層編號**：
  `prompts/<軌>-<步>-<次步>-<task>.md`——次步為步內執行
  順序，明定讀者依循的先後（如 01-04-01-code →
  01-04-02-code-arb）；仲裁檔後綴 `-arb`。
- **收斂演算法：檢視而棄用的方案**：詞彙表建構（merge、
  cap）的重複執行與仲裁，歷經四個方案後全數棄用——
  ①整條管線獨立跑兩遍、於終點仲裁兩份最終詞彙表：兩套
  分類系統互不可比，仲裁淪為第三次建構，一致率無從
  定義。②組對組匹配（以相似度門檻判定兩組是否「同一
  組」）：無原則性答案，門檻任意。③tag 步驟仲裁：自由
  詞彙兩次輸出不共享比對單位，無物可裁（tag 改為兩次
  進池，沿用至今）。④逐對仲裁鏈：交集細分出共識塊、
  分歧塊對三票多數決、union-find 遞移重組、仲裁後命名
  2+1——機械上可行且逐項可驗（共 15 份定義檔，全版
  保存於分支 `tag-algo-13` 備考），但其變異縮減未經證實
  （逐對多數決降低對層變異，遞移閉包卻放大結構層變異，
  淨效果不明），複雜度成本則屬確定，且縮減的是儀器變異
  ——對量測無關緊要的量（見次條）。
- **詞彙表建構改為單次記錄性程序（演算法簡化）**：
  merge、cap 各單次執行、執行內自行命名（具名分組
  輸出），定義檔減為 7 份。2+1 原則改寫：語料層逐首
  判斷（code、screen）一律 2+1；自由生成（tag）兩次
  進池；詞彙表建構單次、全程歸檔。理由：(1) 影響量測的
  是編碼層——詞彙表屬揭露的儀器選擇，凍結後下游同尺量
  到底，其抽樣變異不污染量測；(2) 對齊領域慣行——
  codebook 建構本為單次詮釋程序，信度檢驗施於編碼應用
  層；(3) 複雜仲裁機械無以自證其益（見前條）。驗證改為
  確定性格式檢查（完整分割、組名唯一、cap ≤ 50），違規
  依協定修訂定義檔重跑。

## 2026-08-05

- **歌詞捕捉加浮水印／誤碼正規化**：全語料普查（程式窮舉
  非 ASCII）發現歌詞站浮水印與 cp1252 誤碼——同形字（西里爾
  е 160 處／78 檔、希臘 ό 6 處）、異體空格（U+2005 211 處、
  U+205F 80 處、U+200A 6 處）、零寬字元（U+200B 3 處）、C1
  誤碼（U+0091/92/93/94/97 共 58 處；先前手修之 U+0085 同
  類）；受影響 81/883 檔全部來自 pilot 匯入，新抓取檔乾淨。
  正規化規則四條（C1 依 cp1252 本義還原、同形字還原、異體
  空格→ASCII 空格、零寬刪除）實作於 fetch-lyrics 的
  normalize_lyrics()，寫入時套用；既有語料以同一函式一次性
  套用。倒放行等歌曲本體內容不動——策展界線：清傳輸雜質，
  不改內容。
- **Song 775 拒答機制查明與裁定為無法分析**：tag 首跑僅
  此一首遭模型拒答。以隔離子代理做消融測試（四變體）
  證實觸發源是歌詞中的倒放拼寫行（觸發混淆文字防護），
  與歌詞中的種族蔑稱無關、與零寬字元亦無關（移除
  U+200B 而保留倒放行仍拒答）。裁定：倒放行是歌曲的
  忠實內容，保留不動——語料忠實優先於可分析性；該首
  視為無法分析，缺漏歸因於 Anthropic 平台防護，非本
  研究語料的問題。
- **Song 288〈Truth Hurts〉平台過濾誤攔查明與措辭修訂**：
  tag run1 該首連兩批次遭平台請求端過濾整筆拒收
  （`invalid_request_error`）。消融測試（單批六變體）
  證實：內容主因是副歌俚語「bomb lighting」重複七次，
  離開語境被誤讀（換詞或刪行即過）；且門檻會漂移——
  先前成功的定義檔配置同日重測失敗，等價措辭互換結果
  相反，微擾即翻面。該首為女性力量主題的代表作，缺席
  將直接傷及研究核心，不採「記錄缺席」處理。處置：
  定義檔的合法 JSON 行換等價措辭（消融實測可過、語意
  零變動），全體重跑 run1，該首原生通過，全批 883 筆
  唯 song-775 依既有裁定缺席。平台過濾器誤排除黑人
  女性歌手賦權國歌一事，本身記為研究發現，供論文討論
  平台結構性限制。
- **詞彙表建構改用詞向量分群，棄用 LLM 收斂**：以 LLM
  單發把進池的 5,999 個關鍵字收斂為具名分組，四種模型
  六次執行全部未通過完整分割驗證（不漏、不發明、每詞恰
  一組、組名唯一），執行紀錄見 `run-costs.md`。診斷：在
  單一回應內維持 5,999 個詞的嚴格分割，超出現有模型的
  簿記容量（先導研究九百餘詞可行），非措辭、非模型檔次、
  非推理量所能補救。裁定：改以詞向量嵌入＋確定性分群
  產生結構——完整分割由演算法保證、可逐位元組重現——
  LLM 僅保留其擅長的語言工作。連帶裁定：十三步複雜收斂
  演算法（兩次執行＋逐對仲裁）的比較實驗取消，其 merge
  同為整池單發且需執行兩次，必撞同一容量牆；兩版定義檔
  止於 git 歷史（`git log -- prompts/`）。
- **管線重設計為三步驟，取消 screen 軌，women-power 併入
  編碼詞彙表**：收斂改為確定性程序後，管線重整為步驟 1
  自由標註（2 次進池）→ 步驟 2 詞彙表建構（步驟 2-1
  進池、步驟 2-2 詞向量分群，皆確定性）→ 步驟 3 編碼
  （2+1）。連帶三項決定：(1) **編號的所指由定義檔改為
  研究程序的工序**——確定性的步驟 2 無定義檔仍佔一個
  編號；有無定義檔即「該步是否為 LLM 判斷」的可見標記。
  軌前綴（01／02 軌）隨 screen 軌取消而廢除。
  (2) **檔名與目錄名的補零只為排序**，正文一律寫
  「步驟 1」「步驟 3-2」。(3) **取消 women-power 單目標
  篩選軌**，改將該詞併入步驟 3 的定案詞彙表（50 個分群
  組名再加上該詞，共 51 碼）。理由：單目標提問會把該主題的
  顯著性人為抬高，「被放大檢視」的判斷無法與其他主題
  並比；併入後研究者的先驗主題詞與模型自行收斂出的類別
  （分群已自長出 `female-empowerment` 等組）在同一份
  提示詞、同一判斷體制下受檢，兩者落點差異本身即可報告
  的結果。代價：候選集召回由雙通道減為單通道，若實測
  召回不足再議。
- **詞彙表建構併為單一步驟**：原分為進池（步驟 2-1）與
  分群（步驟 2-2）兩個子命令，合併為一個
  `cluster-keywords`——自兩份標註歸檔直接產出五份檔案
  （`source-` 兩份記錄進來的關鍵字與其出處，`result-`
  兩份記錄算出的分割，`keywords-to-merge.json` 為交給
  模型的碼），歸檔併入 `runs/02-cluster/`。理由：兩者
  之間沒有需要檢視的決策點，拆成兩步只增加讀者要理解
  的環節；驗證能力不變，五份產物各自可查。

## 2026-08-06

- **編碼引述改為每碼一行**：原定每碼引 1–3 行歌詞為證，
  全量實跑時 36 首的輸出遭平台內容過濾攔阻，其中包含
  WAP、God Is A Woman、Super Freaky Girl、Sweetest Pie、
  Kiss Me More 等女性力量語料的核心。診斷非髒話而是歌詞
  重製量——引述量中位數達歌詞長度的 64%、最高 147%，
  同時違反本研究自訂的「repo 只留分類所引摘錄」規則。
  改為每碼恰一行後實測該 36 首全數通過，每首標到的碼數
  不變（中位數 11→12），重製量降至 23%。每碼仍有一行
  可檢視的歌詞證據，檢視編碼偏差的依據不減。附帶記錄：
  平台輸出過濾非隨機地排除了語料中最核心的一批歌，此
  現象本身列入論文限制討論。標註步驟已入庫的兩次執行
  重製量約 43%，處置待議。
- **分群組數自 50 改為 100**：k=50 下
  出現數個「雜物櫃組」——組內語意發散、medoid 只是折衷
  詞，編碼實測幾乎不用（`mutual-individuality` 158 詞、
  僅用於 2% 的歌；`fantasy-and-imagination` 232 詞含
  籃球、海灘、神性意象）。k=30 更劣（最大組 491 詞、
  組內一致 0.41）。改 linkage 無用：三種 linkage 於各個
  k 實測，Ward 的組內一致性均最高，average 與 complete
  反而產生吞噬半數語料的巨組。診斷為壓縮比過高——語料
  的主題多樣性超過 50 種，非演算法選擇問題。裁定：k
  取 100，雜物櫃組於此始裂解為有主題的組。實測 148 首
  探測：101 碼下詞彙表外的
  碼由 3 降為 0、未使用碼由多個降為 1、每首碼數中位數
  12→16、`women-power` 命中率 13%→9%（碼變細後邊緣
  歌不再被歸入）。代價：每次編碼執行成本由 $3.96 升至
  約 $7.0。
- **零使用的碼據實報告，不事後改名**：medoid 命名對
  大而異質的組必然失準，該碼在結果中呈現為零使用即是
  儀器的誠實紀錄；改名等於在看過結果後調整儀器。
- **實驗後維持 medoid 命名，不改用 LLM 命名**：以同一批
  100 組（僅給成員關鍵字，不給歌詞、組大小與其他組）各跑
  一次 sonnet-4-6 與 fable-5 的命名，格式只規定小寫、
  連字號、至多四個詞。兩者皆 100 組全數命名、無撞名，
  但均未勝過 medoid：名字普遍更抽象（`toxic-relationship`
  →`toxic-relationship-themes`、`relentless-ambition`
  →`risk-taking-and-drive`），sonnet 三次以 `-themes`
  後綴退回後設描述，fable 加禁用該詞後改善但超長名字達
  10 個（sonnet 3 個）。關鍵案例 `mutual-individuality`
  三種命名皆未說中——該組實含「群體歸屬」與「個體差異」
  兩種內容，屬分群未切乾淨，非命名可補。裁定：維持
  medoid，保住「組名為模型自己產出過的關鍵字」此一性質；
  代價是少數組名不副實，依前條據實報告。實驗歸檔不入
  repo，費用 $0.09（sonnet）與 $0.43（fable）記入
  `run-costs.md`。
- **定案編碼表只存歌與碼，不附引述與來源層**：引述已完整
  存在於三份執行歸檔（3-1 兩次、3-2 仲裁），定案表再抄
  一份即庫內重複。且同一個碼在三處的引述可能不同——兩次
  執行各自的引述、仲裁者重新判讀後自己的引述——抄一份
  等於替後續分析先做了選擇，並抹掉「兩次執行是否抓住
  同一句」這個可分析的不穩定性。另一考量：`results/` 是
  論文引用的目錄，一萬四千餘行引述抄進去，會把步驟 3-1
  才從 64% 降到 23% 的歌詞重製量堆回去。來源層（共識或
  仲裁）同理由三份歸檔可導出，一併不存。
- **刪除 `source-provenance.csv`，`cluster-keywords` 的產物
  由六份減為五份**：該檔是兩份標註執行歸檔 `output.jsonl`
  的攤平視圖，14,035 列 Keyword,Run,Song，未帶入任何庫裏
  尚無的資訊，亦無下游消費者——軌跡對映診斷直接讀那兩份
  歸檔即可。稽核軌跡的慣例保留的是原始資料與實質的分析
  產物；「哪個碼出自哪份文件」在質性分析軟體裏本是一個
  查詢，不是一份交付物。
- **仲裁定義檔改名為 `03-02-arbitration.md`**，2026-08-04
  訂下的「仲裁檔同 prefix 加 `-arb`」規則隨之作廢。理由：
  `code` 與編號重複——`03-02` 已表明是步驟 3（編碼）之下
  的第二道工序；`arb` 又是全部 task 名中唯一的縮寫。趁
  步驟 3-2 尚未執行改名，此名進歸檔目錄與論文引用後即
  不再變動。
- **仲裁的輸出格式要求連帶改變裁決本身，據實記入論文
  限制**：步驟 3-2 首次執行，644 首中 2 首遭輸出過濾
  攔阻、13 首輸出夾帶散文——thinking 關閉，模型把推理
  寫進可見輸出，其中可見「Wait, let me reconsider.」的
  自我否定。定義檔補上「每個保留的碼恰引一行」與「JSON
  之外不得書寫任何文字」後以同一份輸入重跑（SHA-256 未
  變），攔阻與散文皆歸零，但保留率同時由 80.1%
  （1,342／1,676）升至 87.2%（1,481／1,699；分母差異來自
  首次執行有 2 首無輸出）。即：禁止在輸出裏推理不只改變
  格式，也改變了裁決——少了邊寫邊自我否定的過程，模型
  傾向保留。此為儀器行為的一部分，不作修補。
- **步驟 3 由「兩次執行＋一次仲裁」改為「三次執行＋
  多數決」**：仲裁者所見只有標出該碼的那一次所附的引述，
  另一方無物可呈，輸入本身即單邊。實測仲裁保留送裁標籤
  的 87.2%，而中立的第三票所隱含者約 50%——爭議 1,699 個
  碼，保留半數時定案表為 14,715 個碼，恰為單次執行平均的
  14,716——故仲裁使定案表的編碼密度較任一次單獨執行高出
  約 4%；`women-power` 送裁 7 個、保留 7 個。改為三次條件
  相同的執行後，這層不對稱消失，儀器亦得以「多數決」一語
  如實描述，不再夾帶研究者設計的裁決框架。第三票取全量
  而非只補問前兩次的分歧：兩者計票結果相同（2-0 與 0-2 的
  標籤第三票翻不動），但只補問分歧會使該票在縮減的碼表下
  取得，與前兩票條件不同。連帶：`03-01-code` 改名
  `03-code`（步驟 3 只剩一個次步）、仲裁的定義檔與歸檔
  刪除、`compare-codings` 刪除——其唯一用途是建構仲裁
  輸入。已花費的兩次仲裁執行保留於 `run-costs.md` 供總
  支出核算。
- **定案編碼表改為附引述**，推翻同日「只存歌與碼」的
  決定。當時三個理由裏，「抄一份等於替後續分析先做選擇，
  並抹掉三票是否指向同一句」已由新的表示法解除：`Quote`
  欄收該標籤在計票中各票所給的引述，逐字去重、按 Unicode
  碼位排序、以單一 `|` 相接，相異者全數保留（實測定案的
  14,665 個碼中，三票引述完全一致者 10,668、相異兩句者
  3,493、三句者 503）。「庫內重複」一項仍成立，是接受的
  代價，換得人工判定時證據在手。版權一項先前寫得不準：
  這些引述早已隨三份執行歸檔 commit，寫入定案表不增加
  任何新的歌詞重製。

## 2026-08-07

- **計票前套用人工校定的更正表，並驗證標籤在詞彙表內**：
  模型對定義檔的每一條明確要求都有非零的違規率，且
  temperature=0 未消除之（量測見 `output-validation.md`）。
  違規本身不是本研究的量測對象——模型的機率性屬方法層，
  研究問題是編碼；而引述存在的目的是讓人看見編碼的文本
  依據，一句在歌詞裏找不到的引述無法履行該目的。故凡
  可辨識其正確文本者一律還原。
  判準：**可據紀錄證明者才還原，僅依研究者判斷推知者
  不還原。** 更正一律不自行組字——替代必為該首歌詞的
  逐字子字串；標籤的改名須有同一筆紀錄的內證（模型於
  同一份輸出並列了正確與錯誤的拼寫），否則刪去。依此，
  跨行拼接與平行句混合共 13 筆指派無唯一來源，不予更正，
  於定案表中呈現為 6 列引述無法逐字對回歌詞，據實保留。
  更正表 936 列中，僅 13 筆 `keyword` 能改變票數，其餘
  923 筆只改變呈現的證據。效果：詞彙表外的碼 13 筆歸零，
  定案編碼 14,665 降為 14,664（`song-750` 的三票因拼寫
  更正而合流），逐字可對回的引述由 43,098 升至 44,122。
  更正表為外部參數而非寫死於程式——研究者的介入因此
  出現在重現命令上，且逐列可審、可 diff。

## 2026-08-08

- **署名 Pinkfong 的演出者實體指認為 Hope Segoine**：
  Billboard 署名 Pinkfong 為品牌（Wikidata Q55735607，型態
  brand），非演唱者；其唯一上榜曲 Baby Shark（2019#75）
  的實際演唱者為 Hope Segoine（KTVB 2019-03-06 報導、
  Songfacts、經紀簡介，出處詳私人留存的
  QuickStatements 草稿）。藉既有的
  署名正規化機制（`ArtistImporter.CANONICAL_ARTIST_NAMES`）
  指認：歌曲的署名字串維持榜單所印的 "Pinkfong"，解析出
  的演出者實體為 Hope Segoine。品牌無性別可言，人有；
  本表記錄的其他項目為拼寫正規化，此筆為實體指認，屬
  研究者裁定。

- **歌曲層演出者性別的推導規則**：`build-db` 於套用
  Wikidata 快照後，為每首歌自全體署名者（primary 與
  featured 一律計入）的性別推導 `performer_gender`：已知
  性別有兩種以上相異值即 `mixed`——未知者不可能翻案；
  已知者全部同值且無未知，取該值；其餘（已知同值但有
  未知，或全未知）留空。值域不折疊：non-binary、
  genderfluid、trans woman 依快照原值參與比較，與 male／
  female 相異即計入 `mixed`。此欄同步鏡射於
  `data/derived/songs.csv` 的 `Performer Gender` 欄。

- **演唱團體的性別自成員推導**：Wikidata 的團體項目本身
  無 P21；`fetch-artists` 於團體自身無性別陳述時，讀其
  P527 成員推導：成員的任期若於 2016 年（語料起年）前
  確定結束——最晚的 P582 早於 2016 且最晚的 P580 不晚於
  它（同一筆陳述以多個起訖時間記錄退團與回歸）——則
  排除；非人項目（P31 無 Q5，如 Black Eyed Peas 所列的
  前身樂團）排除；餘者的 P21 全員同值取該值、相異取
  `mixed`、任一成員無 P21 或無成員可計則留空。推導依據
  （成員 QID 與各自性別）記於快照 note 欄，逐列可查。
  快照中性別空白的列視為未定，重跑時重抓替換；store 中
  已不存在的名字於重寫時剔除並出聲。成員資料於推導前
  已補齊並上傳 Wikidata（46/47 團成員完備；Encanto Cast
  為 original cast、Internet Money 為廠牌集體，非樂團，
  據實留空）。

## 2026-08-09

- **無型態的署名者不參與歌曲層性別彙總**：署名者的型態
  由型態閘（human／musical ensemble／original cast）解出；
  解不出者（廠牌、品牌、製作集體）不是演唱主體，其性別
  屬不適用而非未知，不得以「未知」之姿擋住全員一致。
  全語料型態空白者恰二：Internet Money（廠牌集體，
  Lemonade 實際開口者為三位男性，研究者聽驗）與
  Encanto Cast。後者確為演唱者，被本規則跳過在概念上
  偏粗，惟其具名成員（4 女 2 男）已足撐 mixed，結論
  無損，據實記之。效果：883 首全數有值。

## 2026-08-13

- **為論文補算分群組數 k 的完整比較表**：定分群組數時
  （2026-08-05 前後）僅粗算——當時記錄了 k=30 的最大組
  491 詞與平均組內一致性約 0.41、k=50 的雜物櫃組實例；
  撰寫論文需要完整數表，故於本日以同一釘定嵌入模型
  （sentence-transformers/all-mpnet-base-v2, revision
  e8c3b32e）對 `runs/02-cluster/source-keywords.txt` 的
  5,999 個關鍵字重新計算。組內一致性定義為組內成員兩兩
  餘弦相似度之平均。k=50 直接取自私人留存的分群結果；
  k=30 以同參數重跑（確定性演算法），重算所得最大組恰為
  491 詞，與當時粗算紀錄吻合，佐證重算與原實驗一致。數表：

  | | k=30 | k=50 | k=100 |
  |---|---|---|---|
  | 最大組（詞數） | 491 | 253 | 148 |
  | 組內一致性（各組平均） | 0.402 | 0.434 | 0.485 |
  | 組內一致性（最低組） | 0.166 | 0.170 | 0.200 |

  論文方法節所引 k 值比較數字以本條為據。

## 2026-08-14

- **語意編碼群:四群由隔離的 LLM 盲選、研究者審定**:論文
  研究結果需要語意層的編碼群,以與統計層的關聯檢定互為
  獨立的對照。程序:四個彼此隔離的 Claude Code subagent
  (輔助判讀層,非 API 儀器),各自僅收到群名與 101 碼的
  字母序清單——無研究脈絡、無預期數量、不知其他群與其他
  subagent 存在——依編碼字面語意挑選。盲選結果經研究者
  審閱後照案採用:女性力量群(women-power group)2 碼
  (female-empowerment、women-power);反女性力量/厭女群
  (misogyny group)4 碼(idealized-beauty、
  possessiveness-and-exclusivity、predatory-threat、
  rejection-of-women);陽剛男性氣質群(masculine group)
  13 碼(criminal-secrecy、dominance-and-power、
  family-and-fatherhood、hustle-and-money、predatory-threat、
  rejection-of-women、rivalry-and-superiority、
  self-confidence-and-braggadocio、showing-off-and-impressing、
  street-loyalty-and-danger、violence-and-street-danger、
  wealth-and-flexing、wealth-and-material-success);脆弱群
  (vulnerable group)24 碼(addiction-and-obsession、
  alcohol-and-substance-abuse、clinging-to-love、
  denial-and-self-deception、disappointment-and-failure、
  fear-of-losing-love、guilt-and-apology、heartbreak-and-grief、
  hidden-emotional-struggle、inner-mental-turmoil、
  jealousy-and-bitterness、lingering-memories、
  loneliness-and-isolation、longing-and-loss、
  longing-for-clarity、longing-for-reconciliation、
  nostalgia-and-longing、past-trauma-and-healing、
  regret-and-reflection、reluctance-to-let-go、
  self-worth-and-insecurity、societal-pressure、
  toxic-relationship、vulnerability-and-betrayal)。
  rejection-of-women 與 predatory-threat 同屬厭女與陽剛
  兩群,據實保留雙重隸屬。本分群取代題庫時期的臨時
  ANTI/MASC 清單(彼時 ANTI 含 partner-inadequacy;
  盲選認其字面不帶性別而未入厭女群)。時序聲明:分群
  先於群層次關聯檢定定案,非依統計結果回溯挑群;群層次
  檢定(women-power/female-empowerment 對三群之 2×2,
  Fisher 精確檢定,6 檢定一族之 BH-FDR 校正 q)之數字
  以本條所載分群為據,論文之編碼群表與群關聯表同此。

- **步驟 4:語意編碼群以三票制定案(claude-fable-5),
  取代草稿分群**:更正前條——所稱「研究者審定」實未
  發生,研究者僅將盲選輸出整理歸檔,未作實質裁決;草稿
  分群(單次 Claude Code 盲選)不具方法學地位。裁定
  步驟 4 為語意分群的正式程序。任務與盲選同構:每筆輸入
  為群名加 101 碼字母序清單,輸出為入選碼的單層 JSON
  陣列;定義檔 `prompts/04-group.md` 只定格式、不含群的
  語意定義。模型裁定 claude-fable-5:模型對照實驗(同
  定義檔、同輸入、Batch API)顯示分群對模型高度敏感——
  claude-sonnet-4-6 將群名成份式拆讀(women+power,凡
  力量語意即入選,women-power 群 11 碼,並產詞彙表外
  幻覺碼一筆),claude-fable-5 讀為詞彙化概念(要求女性
  標記,women-power 群 2 碼),與草稿盲選及深度閱讀輔助
  判讀同讀法;sonnet 對照執行歸檔另行私人備份,不入
  版本庫,支出留帳。claude-fable-5 不
  受理 temperature 與 thinking 參數(均不送出),無法釘
  temperature=0;執行間變異實測存在(run1/run2 於陽剛、
  脆弱邊緣碼分歧),由三票多數決吸收;詞彙表外輸出項
  無效。三次執行(`runs/04-group/run1`–`run3`)多數決
  定案(22 個(群,碼)中 21 個三次全票,
  family-and-fatherhood 以 2:1 入群):女性力量群 2 碼
  ——female-empowerment、women-power;厭女群 1 碼——
  rejection-of-women;陽剛男性氣質群 9 碼——
  dominance-and-power、family-and-fatherhood、
  hustle-and-money、rivalry-and-superiority、
  self-confidence-and-braggadocio、
  showing-off-and-impressing、street-loyalty-and-danger、
  violence-and-street-danger、wealth-and-flexing;脆弱群
  10 碼——disappointment-and-failure、
  fear-of-losing-love、heartbreak-and-grief、
  hidden-emotional-struggle、inner-mental-turmoil、
  loneliness-and-isolation、longing-and-loss、
  past-trauma-and-healing、self-worth-and-insecurity、
  vulnerability-and-betrayal。計票由確定性子命令
  `tally-groups` 重現,定案寫入 `results/groups.csv`
  (群、編碼、票數);論文之編碼群表、上標註記與群層次
  檢定改以本定案為據,相關數表隨之重算。

## 2026-08-15

- **引述換行表示法改為歌詞慣例「 / 」,全鏈路一致、不再
  還原**:原設計以兩字元 `\n` 轉義表示引述內換行(定案表
  與更正表),build-db 匯入時還原為換行字元。改為:執行
  紀錄載入時一次將換行換成「 / 」,此後更正表比對、定案
  表(`results/codings.csv`)與工作儲存皆同一表示法,
  `tally-codings` 的轉義與 `build-db` 的還原一併移除。
  查核:全 883 首歌詞窮舉不含「 / 」,慣例於本語料無歧義
  (語料事實,非結構保證,換語料須重查);模型輸出本就有
  自發以「 / 」連接跨行的引述(song-211、song-747,原以
  更正表改回換行,今其方向與慣例一致,該三列僅餘大小寫與
  括號修正之效);兩首歌之演出者署名含「 / 」,惟欄位
  各自獨立,不涉引述欄。遷移:更正表 192 列 334 處轉義
  逐一替換;定案表重新計票,與舊檔之逐位元差異恰為
  `\n`→「 / 」(14,664 列不變,含「 / 」之引述 1,658
  筆);工作儲存重建後引述零換行字元。

- **定案分群匯入工作儲存**:`build-db` 增 `--groups` 選項,
  將 `results/groups.csv` 逐欄照存入 `groups` 資料表(群、
  編碼、票數),納入重建摘要與清空範圍,供群層次查詢;
  重建命令自此帶 `--groups results/groups.csv`。

- **Fable 5 輔助判讀實驗總錄(非正式編碼;結果檔私人
  留存、不入版本庫,本條為其版本庫內的程序錨點)**:
  2026-08-08 起以 Claude Code subagent(模型
  Fable 5)進行七項深度閱讀實驗。共同程序:每首歌一個
  獨立會話、提示最少化且逐字統一、判讀者互不知情、不經
  三票制;定位為研究者的輔助判讀(初篩),不改動任何
  定案資料。各項(日期依結果檔時間):
  (1) women-power 66 首深度閱讀,含網路脈絡重讀與研究者
  註記(至 2026-08-09;`women-power-66-deep-reading.ods`)。
  (2) 145 首(wp∪fe 聯集)雙任務盲讀:每首兩個獨立
  subagent,任務一純文本、任務二上網查演唱者歷史與創作
  脈絡(2026-08-09;`women-power-145-blind-readings.ods`)。
  (3) 全語料 883 首純文本深讀:摘要、女性主義解讀、
  wp 判定,判「真」76 首(2026-08-10)。
  (4) 脈絡深讀合計 152 首(145 聯集+文本深讀新增 7 首),
  判「真」98 首(含聯集外 5 首);三層判定(管線 66/
  文本 76/脈絡 98)與八種分歧樣態記於
  `blind-readings-883.ods`;(3)(4) 合計 1,035 個獨立會話
  (145×2+738+7)。
  (5) pussy 作女性代稱判讀:字串比對 85 首候選,逐首
  判讀 41 首成立;判準(資源型轉喻)與邊界案例由研究者
  裁決(2026-08-10;`pussy-metonymy-85.csv` 與主檔該欄)。
  (6) wp+fe 65 首 vs 僅 fe 79 首之敘事差異分析:歸納七條
  系統性差異,引句全數逐字校對(2026-08-14;
  `wp65-vs-fe79-analysis.md`);論文研究結果之差異列點與
  例證出於此。
  (7) wp/fe 中演唱者 male/mixed 47 首之女性主義問題深讀:
  每首獨立 subagent、提示逐字相同、只讀歌詞欄,42 首回報
  問題、5 首「無」,問題歸納為八樣態(2026-08-15;
  `male-mixed-wp-fe-feminist-reading.md` 與同名 .ods)。
  此系列即論文方法節「最後編碼的結果,再由研究者與 LLM
  (Claude Code)輔助判讀」之所指;結果檔含大量歌詞引文,
  依著作權紀律私人留置,不入版本庫。

- **步驟 5:女性主義問題之質性深讀(設計定案)**:論文
  題目「挪用與污染」需要框架層的系統性證據;47 首
  male/mixed 之非正式深讀已證明程序可行,據此升格為
  先導,正式程序擴為 145 首 wp∪fe 全集(對稱涵蓋各性別
  演唱,消除僅驗 male/mixed 的取樣不對稱)。方法學裁定:
  本步驟為**質性閱讀,非編碼**——輸出為自由文字報告,
  無可逐項機械比對的單位,三票多數決與仲裁均不適用;
  三次獨立閱讀=分析者三角檢核,逐首整合=整合而非裁決
  (以問題機制為單位保守合併、收斂註記、主清單限兩讀
  以上、單讀一行存目),跨首統整=樣態歸納(樣態指問題
  呈現與運作的重複形態,非問題分類,代表引句僅取自主
  清單),其產出為草稿,終審與詮釋由研究者為之;論文
  引用本步驟不作次數宣稱。儀器:claude-fable-5(與先導
  同儀器,參數同步驟 4)。定義檔三份
  (`prompts/05-01-read.md`、`05-02-consolidate.md`、
  `05-03-synthesize.md`),語言依 prompts/ 慣例用英文、
  輸出繁體中文——先導提示為中文,語言不同構之所以可
  接受,係因先導與正式版之間不作結果對照;5-1 輸入僅
  歌詞逐字全文(盲讀,不含歌名與演唱者;含多聲部提醒
  一句,因署名無法提供行級歸屬且會引入身分先驗)。輸入
  組裝為確定性行內腳本,規則載於 methodology,SHA-256
  記入各步 meta。引文不做全量機械校對——研究者終審
  逐份閱讀,進論文之引句屆時個別校對。

- **步驟 5-1 之 song-444 以單筆補送完成**:run1 批次中
  song-444 遭平台 `invalid_request_error`(其餘 144 首
  有效);以同一定義檔、同一輸入紀錄單筆補送即成功
  (`runs/05-01-read/run1-rescue-444`),判定為平台暫時性
  錯誤,非內容拒收。裁定:run1 不整批重跑——Batch API
  各請求自含脈絡、互不可見,補送筆與批內任一筆同樣
  獨立;run1 之覆蓋=`run1`(144 首)∪`run1-rescue-444`
  (1 首),步驟 5-2 輸入組裝時 song-444 之 run1 份取自
  補送歸檔,組裝腳本並驗證三輪歌曲集合一致(145 首)。

- **performer_gender 語意定為「演唱聲音的性別」,新增
  手工修正機制**:原值由 `build-db` 自署名藝人的
  Wikidata 性別推導,將僅掛名不開口者(製作人、取樣
  來源)也計入,致三首純女聲歌曲被判為 mixed:
  〈Friends〉(Marshmello 僅製作)、〈Barbie World〉
  (Aqua 為取樣掛名,Ken 聲部不在歌詞中)、〈Bzrp Music
  Sessions, Vol. 53〉(Bizarrap 僅製作)。裁定:不另設
  發話位置變項(單獨為男聲設變項說不通,女聲、非二元
  聲部亦無對應變項),而是修正 performer_gender 本身——
  其語意即演唱聲音的性別。機制:`build-db` 新增
  `--gender-corrections` 選項,於推導後套用
  `data/manual/performer-gender-corrections.csv`(研究者
  手工編定,Title+Artist Credit 精確比對,查無即建置
  失敗),鏡射 coding-corrections 前例;不直接改推導
  規則,因署名層推導對其餘 880 首仍正確。下游數字隨
  重建更新:wp 66 首成 female 50/mixed 12/male 3/
  genderfluid 1;fe 144 首成 female 98/mixed 30/male 13/
  genderfluid 2/non-binary 1;wp∪fe 145 首中署名含男性
  且開口者 44 首。步驟 5 報告中三首之性別標示同步更正。

- **步驟 5-3 增設發話脈絡分組統整(男聲/女聲/混合各
  一次)**:驗證發現全體單次統整有召回落差——5-2 之
  114 份整合報告中 14 份載有保護/恩庇/供養/守門類
  機制(如〈Spin Bout U〉之「I gotta protect ya, I'm a
  made man」,(3/3)),而 run 1 之 15 樣態全文無一字
  觸及:單次自由歸納壓縮 665 條材料時,交界機制被鄰近
  樣態吸收。裁定:定義檔一字不動,改增輸入範圍——依
  `performer_gender` 切分男聲(14 首)、女聲(98 首)、
  混合(30 首)三個發話脈絡統整,各執行一次;三組為三種
  權力構型(男性談論不在場的女性/女性於父權場域自我
  發聲/兩種發話位置於同一文本互動),分組有其獨立理論
  依據,非為撈回特定機制而設。基底 run 1(全 145 首)
  保留為跨脈絡透鏡,看瀰漫性樣態。同一輸入不重複執行:
  自由歸納無機械合併可言,「合併」實為研究者終審裁決,
  變異由 5-1 三讀、5-2 整合與草稿地位承接;若終審發現
  四份草稿均漏報告可稽之機制,屆時針對性補跑並記錄。
  genderfluid(2 首)與 non-binary(1 首)不設群——
  僅 1 份有問題報告,歸納不成立——入基底統整並由
  研究者個案閱讀。曾考慮有男聲/無男聲二分(以缺席定義
  一組且混同兩種脈絡)與有男聲/有女聲重疊二分(整首
  報告無法按聲部過濾,30 首混合歌使兩組歸納互不獨立),
  均棄。

- **步驟 5-4 樣態標註遍設立,定義檔
  `prompts/05-04-annotate.md` 新增**:研究問題「挪用與
  污染」需逐首並置「女力語彙」與「問題樣態歸屬」,
  故於質性閱讀之後增設標註遍——(歌, 樣態) 對為可逐項
  機械比對之單位,三票多數決重新適用(結構同步驟 4 之
  選擇任務,輸出約定亦鏡射其定義檔)。裁定明細:
  (1) 「有問題」依多數決精神重定義為三讀中至多一個
  「無」,自 114 首修為 111 首——恰兩「無」之三首
  (〈Houdini〉〈Hot To Go!〉〈Messy〉)整合報告主清單
  必為空,與 5-2 規則自洽,不送判;三讀皆無之 31 首
  整列空白。(2) 基底 15 樣態不入矩陣:全體歸納之一條
  樣態可能疊合男對女與女對男兩種權力關係,實為多個
  樣態共用一名,標註結果無法區辨。(3) 檢驗範圍:男聲
  13 條不檢驗純女聲歌、女聲 14 條不檢驗純男聲歌
  (發話位置範疇錯置);混合 16 條檢驗全部 111 首——
  其中位置綁定條目對錯位歌之檢查明知多餘,然其男女
  聲部無系統化切分方式,裁定容忍無意義標註,不再增設
  切分判斷。(4) genderfluid 歌(〈Sorry Not Sorry〉)
  三套全查:二元權力關係仍作用於 genderfluid 表演者,
  其發話位置無法自表演者身分先驗決定,且無自身透鏡
  可用;歸屬引用維持個案地位,不作群體宣稱。
  (5) 標註僅依整合報告主清單,「僅單獨提及」行由組裝
  腳本確定性剝除;樣態條目僅附編號、名稱與機制描述,
  代表引句不隨附——引句出自特定歌曲,判該曲時形同
  預答。規模:3,708 格(M13×42+F14×99+X16×111),
  333 筆請求×3 輪,費用估 $20~25。

- **research-plan.md 依執行現況全面改寫**:舊版規劃存於
  git 歷史。刪除已不存在的規劃項——codebook 與人工黃金
  標準、條件 A/B 盲點實驗、映射分析、pussy 修辭分析、
  階段時程表、「Fable 5 不用於 pipeline」之原定案(已被
  步驟 4/5 換用 claude-fable-5 取代);改寫為現行五步驟
  管線(含步驟 5 質性協定與 5-4 三票標註)、現行子命令
  與資料模型(groups/patterns/annotations 三表、
  performer_gender 手工修正)、四份 results 定案表、時程
  展延一至二日與剩餘撰寫工作。仍然有效的原則(先導不
  比較、提示只定格式、歌手背景防火牆、commit 判準、
  版權規則)保留。

## 2026-08-17

- **先導研究的地位另立常設紀錄 `docs/pilot-study.md`**:論文
  交件後重讀投稿摘要,認清先導研究係由當時協作的 Claude Code
  設計並執行,研究者檢視的是研究問題與答案,未逐步檢視中間
  過程;摘要中的具體數字未經稽核,亦無歸檔可回溯。此地位
  先前僅零星散見於本日誌各條(歌詞沿用、women-power 來歷
  考據、粒度繼承、簿記容量),投稿摘要本身則只是產物,不足以
  記述過程。裁定:另立 `docs/pilot-study.md`,完整記述先導
  研究的執行方式、沿用與棄用的成果,以及它如何促成正式研究
  的可稽核設計;投稿摘要不於樹中另存副本,其內容留在 git
  歷史(`paper/abstract.md` 的前身)。

## 2026-08-18

- **工序編號改與論文正文一致**:論文正文將五個步驟的細分
  工序以字母標示(表三「步驟3a」、表四「步驟5d」),repo
  的檔名與歸檔目錄卻沿用 `05-01`、`05-02` 這種數字次步,
  兩邊對不上。裁定:改為 `1-tag`、`2-cluster`、`3a-code`、
  `4-group`、`5a-read`、`5b-consolidate`、`5c-synthesize`、
  `5d-annotate`(`prompts/` 與 `runs/` 同步,以 `git mv`
  保留歷史),補零一併取消。`runs/*/meta.json`
  內記的 `prompt_path` 不追改——它是執行當下的實況記錄;
  本日誌的既有條目同理,維持當時的名稱。`run-costs.md` 則
  相反:它的「步驟」欄是查閱歸檔的索引,故一律換為現行
  編號(`01-01-01-tag`→`1-tag`、`03-01-code` 與
  `03-code`→`3a-code`),並新增末欄「原步驟名」保留執行
  當時的名稱——索引要指得到現在的歸檔,紀錄要留得住當時
  的形狀,兩者以兩欄並存解決。已刪除的工序(步驟 2 的
  LLM 合併嘗試 `01-02-01-merge`、步驟 3 的仲裁
  `03-02-arbitration`)其歸檔已不存在,無現行編號可指,
  不另發新名,步驟欄逕標「已廢棄」,原名存於末欄。

- **CLAUDE.md 移為 `docs/conventions.md`**:專案 CLAUDE.md 會
  全文自動注入每一個 Claude Code subagent 的 context(2026-07-30
  實測條),步驟 6 的 883 個盲判 agent 因此都看到了工作規範。
  規範本身無研究語意(無 women-power、無假說),污染有限,但
  「防脈絡污染」的原則應貫徹到自家工具鏈:docs/ 底下的檔案
  不會自動注入,搬移後 subagent 除非主動翻閱否則不會看到,
  盲判 agent 的定義檔並明令不得查閱專案材料。代價是主會話
  也不再自動載入,須自行先讀 `docs/conventions.md`。內容
  順帶微調:註明管線已完成、規範適用於重跑;刪去已不存在
  的 codebook 一詞。進論文的數據一律走 Anthropic API(無
  檔案系統,機制上不可能讀到),此層防線不受本次搬移影響。
