動作
Feature #394
進行中
SC
ADR-010 真實景點資料接入批:POISearchAdapter+build_trip_with_itinerary 端到端入口+OpeningHours/business_status 定型+devil C1-C5 裁決收口(885 測試綠)
Feature #394:
ADR-010 真實景點資料接入批:POISearchAdapter+build_trip_with_itinerary 端到端入口+OpeningHours/business_status 定型+devil C1-C5 裁決收口(885 測試綠)
狀態:
New
優先權:
Normal
被分派者:
-
開始日期:
2026-07-31
完成日期:
完成比例:
0%
預估工時:
概述
ADR-010 真實景點資料接入批:POI 採集+端到端行程編排入口(885 測試綠)¶
背景¶
業主 2026-07-31 結構化拍板本批=真實景點資料接入:Google Places 景點/餐廳採集落地+接上 Stage A~E 排程鏈,「填目的地→行程」端到端首次成立(此前排程引擎僅吃 fixture 假景點、opening_hours 為 Any 占位致硬窗生產路徑恆不生效)。PM 分解+architect 開 ADR-010(八項決策,含修訂 ADR-009 L0 預算語義)。
ADR-010 八項決策落地(全 ,不新增 constraint)¶
- POISearchAdapter 兩階段 Protocol(search→enrich,單 Protocol category 分流;Nearby 主路徑/缺座標退 Text Search/皆缺回空不臆測;排序權威在組裝層純函式)+FixturePOISearchAdapter。
- 四層預算重切:L0' 165s=住宿 75+POI 45+排程 IO 45(修訂 ADR-009 L0 語義、預設值不動零回歸;階段耗盡 skipped_budget 不回流)。
-
新入口
build_trip_with_itinerary()(不擴充住宿入口——「只取住宿候選」仍是獨立合法用例);執行順序 hydration→StageA→住宿→POI search→Stage B→逐 Day enrich→C→D→E。 - enrich 後置 Stage B:Enterprise 計費呼叫只對真正進 Day 的候選發出(ADR-004「候選少量爬」計費層同構)。
-
OpeningHours 定型(periods+自定 weekday 編碼 adapter 映射吸收 API 細節不確定性;三態不混淆:None≠公休)+
business_status[V-hard](closed_permanently 無使用者輸入→排除+診斷/有使用者輸入→照排+must_reconfirm 兩條對稱規則——堵掉「訂位排進倒店餐廳」)。 - field mask 常量化+六條機械檢查點(Q3 成本守則可測試落地:search 僅 Pro、Enterprise 只在 enrich、無 photos/reviews/editorialSummary、禁就地拼接)。
- POI 五態 outcome+destinations_without_poi_candidates 依實際進 Day 貢獻判定(沿 ADR-009 E1 收口)。
- 成本重估通過:Pro 3.2%/Enterprise 30% 免費額度佔比,遠低 70% 條件性降級觸發線,Q3「月費 $0 」維持。
devil C1~C5 裁決(qa 獨立驗證,全採納)¶
-
C1(阻擋級):enrich 名額全域截斷依 Day 序→4 天以上行程後段節點必然拿不到營業時間→可排入打烊時段且零標記。修復兩項疊加:跨 Day round-robin 分配(消除位置偏差)+
EnrichmentSkippedDiagnostic顯式標記(「沒問」與「問了沒有」可區分)。 -
C2(新 bug):close 側格式異常 fallback 成「永不關門」(比冒充公休更危險)。修復:丟棄 period+WARN+
has_malformed_periods旗標+轉換規則 (f)(防以壞資料冒充公休)。 - C3(業主決策線):devil 算術經 architect 重算修正——非「N≥6 歸零」而是無論幾個城市住宿只來得及抓 1~2 個(1~3 分鐘×實測 55s/城的結構矛盾)+順序相依 artifact。業主白話三選一拍板「先維持現狀」(暫缺標示+校準批實測後重開 B/C),已即時落 owner-tracking;校準錨點(N=2/6/8/10 貢獻筆數)入 followup-h。
- C4:決策 7 全稱否定句被 business_status 反例打穿→措辭收斂(機制正確:全滅判定不看 status 看貢獻)。
-
C5:GeoRef.address 借道承載目的地名稱→
search_pois加 keyword-onlydestination_name移除借道(沿 ADR-009 7b「不得 overload 欄位」前例,比 devil 建議的 docstring 警告更強)。
驗收標準(全數通過)¶
-
python -m pytest tests/ -q→ 885 passed, exit code 0(基準 801 → 864 → 871 → 885;主協調者每階段獨立複跑) - qa 有條件通過→條件 4 項(貢獻判定測試/舊檔相容/L0-a 生效/field mask 掃描強化)全數收口;十項簽核任務逐項驗證(含 V-hard 巢狀無洩漏、四層預算零回歸——既有住宿入口 34 測試原樣全綠)
- devil 5 項全裁決;端到端 fixture 行程實跑驗證(含 closed_permanently 排除與 must_reconfirm 分支)
- 治理紀律:全 封頂、S1 警示逐行核驗(1 行既有 Q3 隨行編輯帶出+4 行否定敘述,零新升級)、寫入權矩陣無違規
- live smoke 誠實標【未 live 驗證】(本機無 GOOGLE_MAPS_API_KEY;欄位映射【低信心】風險由自定編碼+adapter 映射結構吸收,列 ARCH-2-followup-l 待 key 到位即跑,規格明文不阻擋 ship)
遺留(已入 open-questions,不阻擋)¶
- ARCH-2-followup-l(P1):Places live smoke(≤15 次呼叫一次性)+tps 真實資料領域複核,待業主提供 API key
- ARCH-2-followup-h 範圍再擴:四層預算+POI 常量校準、C3 比例關係校準錨點(業主拍板「先維持現狀」後的重開條件已記 owner-tracking)
- adr-010 tree 節點 verification_status: pending 待 architect 下次啟動驗證
沒有任何資料可供顯示
動作