專案

一般

配置概況

動作

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 測試綠)

是由 Sashiba Chou約 12 小時 前加入.

狀態:
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)

  1. Trip.accommodation_selections[][P]:per-destination 唯一鍵獨立記錄(建構時 validator 結構性攔截重複,非事後掃描);名稱快照走 DM-S1-a(regenerate 後節點消失時的唯一救援)。
  2. 選定與重採集解耦:三態純函式解析(resolved/not_selected/stale_node_missing);不自動刪、不自動改選、不自動失效——旅館重新出現自動回 resolved。
  3. 新 analysis/ 純函式層+分層字典序四維排序:同源分箱、跨平台評分不比數值(0-10 制 vs 0-5 制無有來源對照即不比)、跨幣別不換算、缺值維持前維序(不冒充最差值)、免費停車維度誠實 unavailable_no_source 顯性告知(無任何採集來源)。
  4. 封閉型別比較表note_key 為 enum 非 str——型別系統直接擋住自由文字評語(C-1 反幻覺結構性保證);缺值五態恆輸出;不產「優點/缺點」判斷文字(價值判斷歸使用者)。
  5. 住宿通勤接線(結案 Stage C/D/E 批 devil C1 已知簡化):Stage D 選填 AccommodationAnchor+六條封閉判定規則(抵達日不造去程/離開日與過境日不造回程)+Stage E Tier3 fallback 用飯店座標正確分類(防 intercity 高估)。
  6. 第三動作「重新排程」:選定後不重採集、只重跑排程;載入舊檔時 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/ -q987 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

沒有任何資料可供顯示

動作

匯出至 PDF Atom