跳轉到

ADR 0008: 引入 Dev Mode 實現零憑證展示與快速開發

Context (背景脈絡)

在專案準備比賽展示與多人協作時,依賴真實的 Google OAuth 流程會產生極大的阻礙: 1. 展示風險:評審可能沒有或不願授權其 Google 帳號,導致 Demo 無法進行。 2. 開發摩擦:純前端或 UX 設計師在調整 Planner Studio 時,不應被迫具備 Google Cloud Console 的設定權限。 3. 資料隱私:不應使用開發者的真實個人行程進行錄影或截圖展示。

Decision (技術決策)

在系統底層實作一套受環境變數 MCP_DEV_MODE 驅動的數據攔截層。

  1. 靜態資料驅動:當 MCP_DEV_MODE=1 時,所有整合層 (Integrations) 的 API 呼叫會被重新導向至讀取 assets/fixtures/ 內的本地 JSON 檔案。
  2. 時間錨點模擬:由於 fixture 資料是靜態的,我們實作了「時間平移邏輯」,將當前系統時間映射至 Mock 資料的基準點(如 2025-11-15),確保 UI 的「今日」永遠有資料顯示。
  3. 前端一致性:對外暴露的 MCP Tools 介面保持不變,使 Host (Claude/Cursor) 無法察覺背後是 Mock 資料,保證了對話流的真實性。

Consequences (決策結果)

Positive (優點)

  • 完美的 Demo 體驗:任何人只需安裝 Python 即可執行完整的排程流程,無需設定任何 API Key。
  • 開發效率:允許在離線狀態下進行視覺化與 AI 提示詞的快速疊代。
  • 解耦測試:提供了一套比 Snapshot 更高層級的「系統功能驗證」測資。

Negative (缺點)

  • 維護雙重邏輯:在 async_core 等地方引入了 if is_dev_mode() 的分支,增加了代碼複雜度與技術債風險。
  • 測資過期:如果系統架構變動,必須同步手動更新 assets/fixtures/,否則 Demo 會破圖。