c497ec418e
只驗 SQL 形狀不算數——「% 被當成萬用字元」這件事,只有真的跑一次 LIKE 才看得見。 用 node:sqlite(與 library-map/embed-backfill 同款治具)跑真 SQL,每組驗收同時跑 「舊寫法」與「現行寫法」,讓前後對照直接長在測試裡。 守五件事: ① 前後對照 —— 100% / owner_id / 單打符號,改前撈回不相干的、改後只回字面命中 ② 跳脫邊界 —— `\` 不跳脫會漏掉真正的 `C:\`,也會讓 `_` 的跳脫失效、萬用字元漏回來 ③ ESCAPE 齊全 —— 沒有任何 `content LIKE ?` 是裸的(漏一個就等於那條路沒修) ④ 不退化 —— 不含 % _ \ 的查詢 pattern 逐字不變,最熱路徑仍是單一 LIKE ⑤ byte 預算 —— 滿是 % 的長查詢仍在 D1 的 50 bytes 上限內(承 2026-08-03 的 500 修復) 反向驗證(把修法拿掉,兩半分別驗,兩半都是承重的): 拿掉跳脫 → 8 failed / 204 passed,紅的正是病徵本身 拿掉 ESCAPE → 5 failed / 207 passed(含既有 search-long-query 2 條) 復原後 → 19 檔 213 pass(基線 18 檔 197 pass)