動作
Feature #389
進行中
SC
用餐時段修正批:餐廳 Band 1 聯集窗+訂位對稱保護+day_end 延伸+上一批 _preserve_priority 反向 bug 回溯修復(801 測試綠)
Feature #389:
用餐時段修正批:餐廳 Band 1 聯集窗+訂位對稱保護+day_end 延伸+上一批 _preserve_priority 反向 bug 回溯修復(801 測試綠)
狀態:
New
優先權:
Normal
被分派者:
-
開始日期:
2026-07-29
完成日期:
完成比例:
0%
預估工時:
概述
用餐時段修正批:餐廳 Band 1 聯集窗+訂位對稱保護+day_end 延伸(801 測試綠)¶
背景¶
業主 2026-07-29 結構化拍板(AskUserQuestion 三選一)本批=用餐時段修正批,一批解 tps 上批判定「第一版行程最快讓使用者失去信任」的三個缺口:午餐可被排在 15:20、已訂位餐廳超載時無保護、夜市行程被 21:00 截斷。PM 分解+architect 施工前介面確認(ADR-006 決策 2 Band 1 既有清單項 R6+D-1b 使用者手動輸入介面模式框架內細化,無新 ADR、不新增 constraint)。
三項落地¶
-
餐廳用餐時段 Band 1 聯集窗(零 persist 變更):
MEAL_WINDOWS(午 11-14/晚 17-21【低信心】)∩ opening_hours 三情境組裝(不可得→純聯集窗不冒充公休/交集非空→交集/零交集→新 reasonno_meal_window_overlap不混用 closed_today);兩趟插入(band-exclusive 優先、permissive 退回+annotations 可觀測);窗釘選防 band 漂移(無釘選時已放置餐廳會被後續插入悄悄從午窗推到晚窗——qa 停用重現證實機制必要)。 -
訂位對稱方案:
RestaurantNode.reservation_confirmed_start/end[P](僅使用者手動輸入,D-1b 同構);升窗取代語義;四衝突情境定死(訂位 vs 營業時間衝突→照排+must_reconfirm 不否決使用者第一手輸入);_preserve_priority對稱擴充。 -
day_end 延伸:
Day.day_end_override_minute[P](手動標記「今晚待晚一點」,不自動偵測);單一來源純函式resolve_day_time_bounds強制時鐘/容量同步(None 時 capacity 逐位元零回歸);跨午夜表示(>1440 合法至 29:00【低信心】);晚餐窗連動延伸;DEFAULT_DAY_START/END_MINUTE具名化收口既有硬編文件債(O-1-7-a)。
揪出上一批已 ship 的阻擋級 bug(治理回溯)¶
工程實作訂位保護時自測發現:上一批(#383)ship 的 _preserve_priority 排序方向反向——timed-entry/票務節點在超載時反而最先被犧牲(與 I-3「後移=保留」相反),因當時零測試覆蓋而漏網(devil C1-C8 亦未發現)。本批修正+qa git show 逐行獨立確認波及範圍+補 attraction 分支方向測試(C5)+architect 於上一批註記段補 C4 回溯註記(不觸降級條款:該批全 、無 依賴此實作)。
devil C1~C7 挑戰+裁決(qa 獨立重現兩項屬實)¶
-
C2(阻擋級,已修):跨午夜訂位校驗不對稱——延伸至隔日 01:00 的 Day,替 00:30 宵夜輸入正確訂位(date=隔日)被誤判 cross_day_mismatch、失去保護、警告文字事實錯誤。修復:與
_format_time_slotdivmod(m,1440) 對稱的歸屬判準。 -
C3(已修,裁定 (a) 值域收緊):override 縮短值(如 10:00)原合法但 capacity 不縮=時鐘/容量脫鉤反向重現。修復:下界收緊至
DEFAULT_DAY_END_MINUTE,縮短值視為 None+WARN 不 clamp。 - C1(措辭收斂+負向測試):窗釘選「結構性保證」範圍限定於被插入節點自身;釘選順序依賴的跨節點副作用列已知簡化(顯式 UnschedulableNode 非靜默),devil 反例入測試釘住現狀。
- C6/C7 通過挑戰(夜市端到端公式無時段變數失準;三新欄位 serializer round-trip 保真)。
tps 領域複核¶
上一批三風險逐項判定:用餐硬窗已解、訂位保護已解且比設想更完整、夜市延伸部分解(殘餘=深夜 advisory 掛勾,入校準批)。亮點:午晚窗間隔恰對齊日本「中休み」慣例。追加校準項 (23)~(26) 入 open-questions(含 29:00 上限建議收斂至凌晨 2-3 點、permanently_closed 資料源缺口)。
驗收標準(全數通過)¶
-
python -m pytest tests/ -q→ 801 passed, exit code 0(基準 728 → 780 → 790 → 801;主協調者每階段獨立複跑) - 契約九條硬不變式全覆蓋(含「午餐不再能排 15:20」負向、「override=None capacity 逐位元零回歸」、夜市端到端含「無延伸將誤判超載」對照組)
- qa 有條件通過→條件三項(C2 修/C3 裁定/C4 回溯註記)全數落地收口
- devil 7 項全裁決;上一批回溯註記完成(誠實揭露已 ship 缺陷,不靜默修正)
- 治理紀律:全 封頂、無新 ADR、無新 constraint、S1 警示逐行核驗全屬誤中(否定敘述/訂位領域詞彙)、全程離線 fixture
遺留(已入 open-questions,不阻擋)¶
- ARCH-1-CDE-followup-a (4)(5):住宿↔首末節點通勤(待 ARCH-3 承載)、簇真值診斷
- ARCH-1-CDE-followup-b (23)~(26):用餐窗校準、29:00 上限收斂、深夜 advisory 掛勾、permanently_closed 缺口
- tree/adr 兩節點本批已由 architect 驗證轉 verified(含 adr-008 業主拍板出處追溯補錄 owner-tracking)
沒有任何資料可供顯示
動作