動作
Feature #400
進行中
SC
ADR-011 住宿選定與推薦批(ARCH-3 →):per-destination 選定+四維排序+封閉型別比較+住宿通勤接線+devil C1-C6 裁決收口(987 測試綠)
Feature #400:
ADR-011 住宿選定與推薦批(ARCH-3 →):per-destination 選定+四維排序+封閉型別比較+住宿通勤接線+devil C1-C6 裁決收口(987 測試綠)
狀態:
New
優先權:
Normal
被分派者:
-
開始日期:
2026-08-01
完成日期:
完成比例:
0%
預估工時:
概述
ADR-011 住宿選定與推薦批(ARCH-3 →):per-destination 選定+四維排序+封閉型別比較+住宿通勤接線+reschedule(987 測試綠)¶
背景¶
業主 2026-08-01 兩輪結構化拍板(owner-tracking 同日兩檔):批次範圍=住宿選定與推薦;三題偏好——選定=使用者點選確認制(系統不擅自決定花錢的事)、排序四維全選(優先序依呈現序暫定【假設】)、多晚同城=一城選一次。ARCH-3 為規格中最後一個 大模組,本批經 architect 設計(ADR-011 六決策)正式推進 。
ADR-011 六項決策落地(全 ,不新增 constraint)¶
- Trip.accommodation_selections[][P]:per-destination 唯一鍵獨立記錄(建構時 validator 結構性攔截重複,非事後掃描);名稱快照走 DM-S1-a(regenerate 後節點消失時的唯一救援)。
- 選定與重採集解耦:三態純函式解析(resolved/not_selected/stale_node_missing);不自動刪、不自動改選、不自動失效——旅館重新出現自動回 resolved。
-
新 analysis/ 純函式層+分層字典序四維排序:同源分箱、跨平台評分不比數值(0-10 制 vs 0-5 制無有來源對照即不比)、跨幣別不換算、缺值維持前維序(不冒充最差值)、免費停車維度誠實
unavailable_no_source顯性告知(無任何採集來源)。 -
封閉型別比較表:
note_key為 enum 非 str——型別系統直接擋住自由文字評語(C-1 反幻覺結構性保證);缺值五態恆輸出;不產「優點/缺點」判斷文字(價值判斷歸使用者)。 - 住宿通勤接線(結案 Stage C/D/E 批 devil C1 已知簡化):Stage D 選填 AccommodationAnchor+六條封閉判定規則(抵達日不造去程/離開日與過境日不造回程)+Stage E Tier3 fallback 用飯店座標正確分類(防 intercity 高估)。
-
第三動作「重新排程」:選定後不重採集、只重跑排程;載入舊檔時
hard_windows_degraded顯性揭露(C-7 使營業時間不可長存,誠實導向「重新生成」)。
施工中發現的規格內部矛盾(工程判斷→architect 追認)¶
ADR 決策 3 寫「複用 scheduler.geo_utils」但同決策禁止 analysis↔scheduler 依賴——工程抽 models/geo_math.py 為唯一權威、geo_utils 降為 re-export(AST 測試機械鎖定依賴規則)。architect 正式追認+ADR 勘誤,並把「具名引用須落在同決策依賴邊界內」加入 ADR 範本自審清單(對未來所有 ADR 生效)。
devil C1~C6 裁決(C1 阻擋級)¶
-
C1(阻擋級):「選定了但還沒重新排程」窗口,照 ADR 字面實作會顯示假的「已計入」(分享路徑最危險)。修復:
accommodation_commute_status五態純函式(COUNTED 為唯一允許「已計入」措辭的態;architect 補抓 devil 沒想到的第二缺口——重排後換選另一間,排程含舊飯店段同樣落 SELECTION_NOT_APPLIED)+TransitNode.segment_role/accommodation_node_id兩極小 [P] 欄位(否決 persist 同步旗標:會過期說謊;從排程實際內容衍生則自我驗證)。 - C2:devil「單日入住日通勤零覆蓋」前提經 ADR-009 nights==0 語義反轉(該情境本就不採集住宿),但採納顯式分支+誤導性 docstring 修正;qa 測試 docstring 引用了不存在的 ADR 段落——修正並立通則「測試引用規格須撰寫當下實際存在」。
-
C3:三維同時降級時排序塌陷為 ID 序→
effective_dimension_count/has_meaningful_ordering衍生屬性,UI 硬規則「資料不足以排序」必須明示。 - C4:reschedule 無預算與自訂成本排序矛盾→複用 L0-c 呼叫邊界閘+skipped_day_indices 契約化。
- C5/C6 通過(destination_mismatch 荒謬長車程可見性成立;geo_math 解法乾淨)。
驗收標準(全數通過)¶
-
python -m pytest tests/ -q→ 987 passed, exit code 0(基準 885 → 949 → 961 → 987;主協調者每階段獨立複跑) - qa 兩輪簽核:第一輪通過(自補 12 條關閉 anchor 判定零直接測試缺口+審工程三項自行判斷);裁決落地後第二輪無條件通過(+26 條,五態可達/segment_role round-trip/C4 預算/C3 塌陷全覆蓋,三方一致性交叉核對無落差)
- devil 6 項全裁決收口;ARCH-1-CDE-followup-a (4) 住宿通勤結案
- 治理紀律:ARCH-3 →(升 條件明文=qa 端到端+≥1 輪校準批);四維優先序【假設】/RANK_SCORE_TIE_BAND【低信心】上限 永不升 ;業主兩檔決策即時落 owner-tracking;S1 警示逐行核驗零 升級;全程離線 fixture
遺留(已入 open-questions,不阻擋)¶
- ARCH-3-followup-a(P2):住宿「免費停車」欄位採集可行性(解決前維度 4 恆顯性告知不可用)
- ARCH-3-followup-b(P2):跨平台評分可比性+TIE_BAND 校準+四維優先序 UI 落地後回問業主
- 業主知情:四維排序在真實資料常降級(混來源/缺價格/缺座標),最壞塌陷至無意義排序時 UI 會明示——非缺陷,是誠實
- adr-011 tree 節點 pending 待 architect 下次驗證;adr-010 節點驗證回覆遺失維持 pending
沒有任何資料可供顯示
動作