專案

一般

配置概況

動作

Feature #369

進行中
SC

ARCH-2 採集線啟動批:Booking.com C/B 雙管道 adapter+Geocoding+C-3 過濾+GAP-3 serializer 來源感知修復(536 測試綠)

Feature #369: ARCH-2 採集線啟動批:Booking.com C/B 雙管道 adapter+Geocoding+C-3 過濾+GAP-3 serializer 來源感知修復(536 測試綠)

是由 Sashiba Chou19 天 前加入.

狀態:
New
優先權:
Normal
被分派者:
-
開始日期:
2026-07-13
完成日期:
完成比例:

0%

預估工時:

概述

ARCH-2 採集線啟動批:Booking.com C/B 雙管道 adapter+Geocoding+C-3 過濾+GAP-3 serializer 修復

背景

  • 業主於 2026-07-13 透過遠端 AskUserQuestion 拍板本批方向:開始做資料採集(ARCH-2 採集線),並提供既有半成品 D:\Code\booking_helper(Python + Playwright Booking.com 爬蟲,GitHub: sashiba042/booking_helper)作參考起點。
  • PM 分解界定本批範圍:Booking.com C 管道(爬蟲)真實 adapter+B 管道(手動輸入)對等 adapter(ADR-003)+Geocoding (New) 片段+C-3 評分過濾最小函式;明確不做 Agoda(Q14 未實測)、POI/天氣/活動/治安 adapter、完整 Maps 遷移、UI 整合。本批無新業主決策、無新研究問題(既有 ADR-002/003/004+OW-6 落地)。

變更內容

1. 工程層(真實採集 adapter 首落地)

  • adapters/booking_scraper_adapter.py(新):C 管道爬蟲,移植 booking_helper GraphQL 攔截骨架+滾動 DOM fallback,網路層/解析層分離(解析全純函式離線可測)。ADR-004 六決策全落地:三態保留+None 計數 WARN/詳頁候選少量爬(DETAIL_ENRICHMENT_SOFT_CAP=9,移除硬編 #hotelTm498 改 networkidle)/動態翻頁 id 重複偵測+PAGINATION_HARD_CAP=1000 兜底(進 planning_config,【低信心】待校準)/複合鍵去重(id > name+座標 > name+address)/C-1 三欄(source_url/fetched_at/data_source)/C-9/C-10 欄位白名單。OW-6:衛浴過濾鏈整段不搬。
  • adapters/accommodation_types.py(新):AccommodationSearchResult(node, detail_url) NamedTuple——architect 覆核抓到 search→enrich 交接功能斷點(detail_url 只活在內部 dict、呼叫端無管道組配對),以具名結構接通兩階段;detail_url 維持 transient、不進 data-model、不 overload Attribution.source_url。
  • adapters/manual_accommodation_adapter.py(新):B 管道對等 adapter(同一 Protocol、非 fallback),欄位合約 add_manual_entry(destination/name 必填、source_url 缺失顯式標記、評分缺失三態 pending 不靜默入推薦);可選注入 Geocoding 補座標(只補未知不覆蓋)。
  • adapters/geocoding_adapter.py(新):Geocoding (New) 片段(stdlib urllib,僅 +python-dotenv 選用依賴);C-5 key 遮罩專測防線、無 key 降級 None+WARN;C-7 對齊(address_source=PLACES 交 serializer 既有規則)。
  • filters/accommodation_score_filter.py(新):C-3 三分支(Booking/Agoda ≥8.6、Google ≥4.1、None→pending 保留),端點==門檻歸 pass 對齊條文原文;門檻不明保守 pending+WARN。
  • protocols.py:新增 AccommodationSearchAdapter Protocol+Fixture 對等實作(architect 覆核:維持 in-code docstring 慣例、不進 docs/interfaces/)。
  • models/serializer.pyGAP-3 修復——manual 來源 score/price 改逐欄來源感知 persist(新鮮度改由 UncertaintyFlags.must_reconfirm 承載);google 轉抄保守維持剔除(C-7 定性未做);爬蟲來源維持 GAP-3 剔除不變;any() 代理判準警示樁兩處(serializer+dedup_key_for_hotel)。

2. 治理層(architect 三裁定+文件同步)

  • data-model.md:GAP-3 scope 精修(來源限定:Google/爬蟲→剔除、manual→persist)+§9 (1a) 錨點擴至 score/price——裁定為真設計落差非刻意簡化(B 管道業主手打值重載會消失,弱化 ADR-003 對等性),本批修。無新 ADR、無 constraint 變動、無狀態標籤變動。
  • architecture.md/ADR-004:booking_helper 路徑記載更正(舊機器 C:...→業主本次指定 D:\Code\booking_helper,保留 Q5 歷史脈絡句)。
  • open-questions.md:補 ARCH-2-followup-a~f(C-4 負載實測 P1/E8 消歧接線/B 管道比對規則整合前必解/C+B 合流 any() 條件觸發/google 轉抄 C-7 定性 regulatory/爬蟲 score 持久化評估)。

3. 品質層(devil+qa 全流程)

  • devil 挑戰報告 docs/research/devil-advocate/2026-07-13_arch2-acquisition-batch-challenge.md(8 項,無致命項):E8 孤兒消歧函式(最尖銳,docstring 警示收口+followup-b)、E2-a destination 裸比對(標註+可觀測化)、E6 兩套 8.6 門檻(改同源常量+8 組交叉測試鎖恆一致)、E2-b/E3 WARN 可觀測性/聚合加固;E4/E5/E7 核心疑慮不成立。
  • qa 測試計畫 docs/specs/test-plan-ARCH-2-acquisition.md+簽核通過:11 項檢查清單逐項裁定(重點:search→enrich round-trip 非樁確認+qa 自補 3 筆 shuffle 配對測試;GAP-3 補 save→load 完整 round-trip;零既有斷言翻轉以 git status tests/?? 佐證)。
  • live smoke(嚴格限縮:1 目的地 1 頁 0 詳頁):GraphQL 攔截+解析命中 25 筆真實住宿,欄位名與 booking_helper 快照吻合——單次觀測,僅工程層記錄,不升 specs 標籤

驗收標準

  • python -m pytest tests/ -q536 passed,exit code 0(主協調者親跑覆核;362→417→486→493→518→533→536 每階段均主線複驗)
  • search→enrich detail_url 交接真跑通(round-trip+3 筆 shuffle 不錯位),修復前此路徑零測試覆蓋
  • GAP-3 四象限:manual persist/google 轉抄剔除/爬蟲剔除/混源 [manual, google_geocoding] persist(24+2 條專測)
  • ADR-004 六決策各有顯式測試(三態 WARN/複合鍵同名分館不誤刪/硬上限超界 WARN 非靜默/白名單 C+B 雙管道濾個資與照片)
  • C-8:無分享/上傳路徑、爬取輸出不入版控;C-5:key 遮罩專測
  • 全程零研究結論升 、無新 ADR、無新 constraint,ARCH-2 成熟度維持 (反爬穩定性等【假設】紀律入 code 註解)

關聯

  • devil 報告:docs/research/devil-advocate/2026-07-13_arch2-acquisition-batch-challenge.md
  • qa 測試計畫:docs/specs/test-plan-ARCH-2-acquisition.md
  • 前置批:Feature #368(ARCH-1 Stage B D-1(b) 落地批)
  • 遺留:ARCH-2-followup-a(C-4 負載實測,P1);Q14 Agoda 反爬實測;Q17 Tiqets key 未申請;S-1a 業主延後中;devil D3/D6 記錄不阻擋

沒有任何資料可供顯示

動作

匯出至 PDF Atom