討論 #1424
是由 陳國瑋 於 26 天 前更新
# Dashboard 資料取得與即時更新需求(現行有效版)
> **Revision 2026-09-05**:本 description 只保留目前可供實作與驗收的 V1 規格。先前的 capped exponential backoff、60 秒 REST polling fallback、sequence/gap recovery、固定 5 秒 coalescing、Operational Event P95 2 秒 SLO、per-building stale cutoff override,以及要求 KPI/需留意事項/群組資料走 WebSocket 的方案,均已被 DEC-031~033 取代,不得作為開發依據。完整討論歷程仍保留於 J5641 及更早的 Redmine journals。
## 背景與目標
Branch Admin `/dashboard` 目前沒有正式營運內容。既有 `GET /api/connector/dashboard` 只有 Connector 總數、Available、Charging、Faulted、公用與私人數量;既有 Connector 管理頁 search API 與單 Connector WebSocket 可部分重用,但不足以直接支援整張營運 Dashboard。
V1 建立所有 EMS Branch 共用的唯讀 Dashboard。A17 只作第一個資料、公式及效能驗證案場,任何 API、UI、WebSocket、freshness 或 query 不得硬編碼 A17。
本票只定義資料 ownership、REST/WebSocket channel、Frontend state 與跨區塊 contract;各區塊完整資料公式分別由 #1423、#1460、#1461、#1462、#1463、#1486 管理。
## V1 簡化原則
- Dashboard 只查詢、彙整與顯示既有狀態,不執行 Remote Start/Stop、Reset、Queue/Rotation、帳務或其他 mutation。
- 只有「Connector 即時狀態」與「案場即時負載」需要 WebSocket;其他區塊使用同一個 Overview REST response。
- WebSocket 失敗時誠實提示使用者,不建立 REST fallback、custom retry、背景自動重連或 gap recovery。
- V1 優先重用既有 endpoint、權限與 domain service;不建立重複的 Dashboard inventory、告警引擎或作業狀態。
## Overview 效能驗證(DEC-042)
**狀態:已確認(2026-09-06,Ken)**
- V1 不將 `P95 < 1.5 秒` 列為 Overview 產品 SLA;A17 只作第一個 baseline 驗證站點,規則不得硬編碼 A17。
- 實作與首站驗證必須以 A17 或具代表性的等量資料,對 Overview aggregate query 執行 EXPLAIN,並量測 endpoint P50/P95。
- Test report 必須記錄測試環境、主要資料表 row count/資料分布、暖機方式、併發數、sample size 與量測起訖邊界,使結果可重現。
- Backend 必須避免 N+1、無界查詢及不必要的重複聚合。只有量測證明效能已影響正常使用時,才提出 query 或普通 index 優化。
- V1 不為達成固定秒數預先新增 Dashboard snapshot table、專用 cache、效能排程或其他架構。跨案場固定 SLA 若日後需要,另案定義資料量級、負載模型與測試條件。
## Building Scope 與權限(DEC-029/030)
- 每個 EMS Branch 的 V1 必須且只能有一筆 enabled Building。Backend 自動解析該 Building;Frontend 的 Overview/ticket request 與 WebSocket URL 不傳 `buildingId`。
- Overview response、ticket binding 與所有 Dashboard WebSocket event 明確帶 Backend-resolved `buildingId`,Frontend 只套用 scope 相符的資料。
- enabled Building 為零筆或多筆時,Backend 回明確 configuration error;Frontend 顯示整頁「案場設定異常」,隱藏營運數字,不得任選第一筆、跨 Building 加總或顯示假 0。
- Header/Sidebar 只顯示 Backend 回傳的唯讀案場名稱與 timezone,不提供 site selector。
- V1 沿用既有 SS3A `dashboard` function,不新增 role/function。既有 `administrator`、`power_user`、`association`、`dealer` 可看同一份唯讀 Dashboard;只有 `adm_user`、`member`、`hq`、`engineer` 時不自動取得權限。
- Overview API 與 Dashboard ticket API 都必須 mapping 至 `dashboard` function;Frontend 隱藏 menu 不能取代 Backend 的 403 與 WebSocket ticket authorization。
## 現行資料通道矩陣(DEC-031/032)
| 區塊 | 首次資料 | 後續更新 | WebSocket 失敗時 |
|---|---|---|---|
| Header 案場資訊、一般資料時間 | `GET /api/dashboard/overview` | 同一 Overview 每 5 分鐘/手動刷新 | 照常更新 REST 狀態 |
| 六張 KPI | Overview | 同一 Overview 每 5 分鐘/手動刷新 | 照常更新,不使用 WS fallback |
| 需留意事項 | Overview | 同一 Overview 每 5 分鐘/手動刷新 | 照常更新,不使用 WS |
| Charge Group 容量/Slots/Queue 摘要 | Overview | 同一 Overview 每 5 分鐘/手動刷新 | 照常更新,不使用 WS |
| 30 日 Usage、今日已完成充電量 | Overview | 同一 Overview 每 5 分鐘/手動刷新 | 照常更新,不使用 WS |
| 四步驟結算、上月電費 | Overview | 同一 Overview 每 5 分鐘/手動刷新 | 照常更新,不使用 WS |
| Connector 即時狀態摘要/Top-8 | Overview bootstrap | `CONNECTOR_LIVE_BLOCK_UPDATED` replacement | 保留最後資料並標示已停止更新;無資料顯示 `—` |
| Connector 完整清單 | `POST /api/connector/search` | 開啟 Drawer、搜尋、篩選或換頁時重新查詢 | 不受 Dashboard socket 影響 |
| Connector detail | 既有 detail API | Drawer 開啟時才使用既有單 Connector socket | 依既有 detail flow 顯示錯誤;關閉即釋放 |
| 案場即時負載目前值/open buckets | Overview bootstrap | `LIVE_LOAD_UPDATED` replacement | 保留最後資料並標示已停止更新;無資料顯示 `—` |
| Live Load 即時/今日/7 日完整 series | Overview | 同一 Overview 每 5 分鐘/手動刷新;WS 只 replacement open bucket | 保留 REST series;不得冒充仍即時 |
## Overview REST Contract(DEC-002 保留部分/DEC-032)
- 新增 typed `GET /api/dashboard/overview`,一次回傳目前 Building 的案場識別、`generatedAt`、各 source 的狀態/時間,以及所有 Dashboard sections。
- 更新時機只有:頁面首次載入、Dashboard 保持掛載期間每 300 秒一次、使用者手動刷新。
- 每個更新週期只送一個 Overview request;KPI、Attention、Group、Usage、Billing 與歷史 series 不得各自建立 timer 或重複 request。
- 同一份成功 response 的 REST-owned sections 使用相同 `generatedAt`。每個需要獨立品質判斷的 source/section 另回 `dataStatus`、`freshness`、`updatedAt` 及必要的 `lastSuccessfulAt`。
- WebSocket 尚未接手前,Overview 可顯示兩個 live blocks 的 bootstrap。收到 socket initial snapshot 後,定時或手動 Overview refresh 不得覆寫 Connector 即時狀態與案場即時負載的 live state。
- 手動刷新只更新 REST-owned sections,不重建 WebSocket;只有重新載入整頁才重新取得 ticket 並嘗試連線。
- REST refresh error 可保留同一 Backend-resolved Building 的最後成功資料,但必須標示更新失敗與 `lastSuccessfulAt`;首次失敗不得顯示 fixture 或假 0,也不得跨 Building 使用 cache。
## Dashboard WebSocket Contract(DEC-008 保留部分/DEC-009/031)
- V1 沿用 raw WebSocket,不引入 STOMP。每張 Dashboard 頁面只建立一條案場層級 Dashboard socket,不為每張 Connector card 建立連線。
- Dashboard ticket 必須短效、一次性、綁定登入管理員與 Backend-resolved Building,且只有具 `dashboard` function 的使用者可取得。
- V1 只允許三種 message type:
- `DASHBOARD_LIVE_SNAPSHOT`:連線建立後提供兩個 live blocks 的完整目前狀態。
- `CONNECTOR_LIVE_BLOCK_UPDATED`:replacement 整個 Connector summary + bounded Top-8 preview。
- `LIVE_LOAD_UPDATED`:replacement `currentPowerKw` 與三種 range 的目前 open buckets;跨 bucket 邊界時可同時帶 finalized bucket。
- Event envelope 至少包含 `schemaVersion`、`type`、`buildingId`、`occurredAt` 與 typed `data`;不傳 raw DB row、JWT、ticket、currentIdTag 或不必要個資。
- Message 採區塊 replacement。Frontend 不從細碎 delta 自行重算 total、bucket、priority ranking、功率平均或其他 domain state。
- V1 以單一 active `ems_branch` instance 為部署前提;若未來要多 instance/HA,須另案設計 session fan-out 與授權,不在本需求預做。
- Backend 可為資源保護做內部 debounce/coalescing,但 V1 不把固定 5 秒或 P95 2 秒列為產品驗收承諾。
### 連線失敗與中斷
- 首次連線失敗,或已連線後中斷時,Header 與兩個 live blocks 顯示「即時連線中斷」。
- 已有最後成功資料時保留資料與最後更新時間,並明確標示「已停止更新」;尚無資料時顯示 `—` 與「即時資料暫時無法取得」。不得清成 0。
- V1 不做 REST polling fallback、定時更新模式、custom backoff、jitter、背景自動重連、sequence/gap recovery、頁面回到 visible 自動重連或區塊專用 Retry。
- 其他 REST-owned sections 不受 socket 中斷影響;使用者重新載入整個頁面時,才重新取得 ticket 並嘗試建立新 socket。
- WebSocket connection state 與 source freshness 是兩件事:連線中不代表資料一定 fresh,斷線也不能改寫 Backend 已提供的 source quality。
## Freshness 與資料品質(DEC-006 保留部分/DEC-015/028/033)
- Stale cutoff 由 Backend 依資料來源設定全系統預設值;Connector、MeterValue、Billing 等來源可不同,但所有案場使用相同設定。Frontend 不硬編碼秒數。
- V1 不提供 per-building override,不新增設定 table、管理 API/UI、設定權限或 audit trail;特殊案場未來另開 Feature。
- COMPLETE 的 0 是有效值;`null` 表示未知。Backend 子查詢失敗不得回 0,Frontend 也不得從其他卡片或 preview 猜值。
- PARTIAL 有 Backend 認定安全的值時可保留並標示可能不完整;沒有安全值時回 `null`/顯示 `—`。ERROR/STALE 必須有文字狀態,不得只靠顏色。
- 一個 source 失敗只影響相依 section;其餘成功 sections 繼續顯示。
## Connector 即時狀態(DEC-034~038/#1423 UI-DEC-001~017)
### Summary 與 Preview
- Backend 對目前 Building 的完整 Connector 集合使用同一份 authoritative snapshot 進行分類與排序,再回傳固定五項 summary、`total`、`abnormalTotal` 及最多 Top-8 `items`。
- 五個互斥 `displayBucket` 固定依序為:`NEEDS_ATTENTION`「需留意」→ `CHARGING`「充電進行中」→ `WAITING`「準備/排隊」→ `AVAILABLE`「可用」→ `OTHER`「其他狀態」。每個 Connector 恰好一類,bucket counts 合計等於 `total`,`NEEDS_ATTENTION.count = abnormalTotal`。
- Unknown/資料不足歸 NEEDS_ATTENTION;NOT_PLUGGED 歸 OTHER。Card/Drawer 仍分層顯示 OCPP connection、Connector runtime 與 Queue 原始狀態,不以 `displayBucket` 覆蓋 domain state。
- `total > 0` 時固定顯示包含零值的五項;`total = 0` 時隱藏 summary 並顯示 Connector Empty State。0 不得當成 Loading/Error/Unknown。
- 五個 summary 項目是不可點擊的純資訊,不是 link/button/filter shortcut,也不進入 Tab 順序。單支 detail 由 preview card 開啟,完整清單由「查看全部」開啟。
- Backend payload 固定最多 Top-8,不接受 viewport/requestedLimit。Frontend 依 breakpoint 顯示 Desktop 8、Tablet 6、Mobile 4 筆,並以 Backend totals 計算隱藏總數與隱藏異常數;不自行重排或重判異常。
### 固定 Priority Hierarchy
Backend 對 Preview 與 Full List 共用以下順序:
1. Charge Point OFFLINE 且 Connector 有 ACTIVE transaction。
2. Connector FAULTED。
3. Charge Point OFFLINE、資料 STALE、Queue BLOCKED。
4. Connector SUSPENDED_EVSE、UNAVAILABLE。
5. Connector SUSPENDED_EV。
6. Connector CHARGING。
7. Connector PREPARING/Waiting。
8. Connector AVAILABLE。
同一層級依異常/狀態持續時間由久至新,再以 Connector ID 作 deterministic tie-breaker。排序只用於唯讀顯示,不修改 Queue priority、Connector status 或 charging lifecycle。
## Connector Full List Drawer(DEC-039~041/#1423 UI-DEC-018~020)
- 使用/擴充既有 `POST /api/connector/search`;完整 inventory、搜尋與分頁不透過 Dashboard WebSocket。
- `SearchConnectorDto` 沿用 `page`/`size` 與 Spring Page response metadata,Dashboard 固定 `size = 20`。結果 1~20 筆隱藏換頁控制;多頁只提供上一頁/下一頁與「第 X / Y 頁・共 N 個」。
- 搜尋文字或任一篩選改變時回第 1 頁。Server 必須對完整資料集先 filter、再依固定 priority hierarchy sort、最後 paginate;不得只處理目前 20 筆。
- 既有 keyword/status 等條件可重用;Charge Point ID/Charge Group 等缺少條件須補 DTO、query、OpenAPI 與 contract tests。
- Dashboard Drawer 不提供 sorting control。既有 search endpoint 增加 stable `sortMode = DASHBOARD_PRIORITY`;Dashboard 不接受使用者產生的 `sidx`/`sord`,既有 `/connector/list` 管理頁原欄位排序保持不變。
- Search/filter/page state 只存在目前 Dashboard page memory;close/reopen 保留,reload/navigation 重設。不寫 URL、history、localStorage、sessionStorage、Backend preference 或 WebSocket。
- V1 不提供 page-size selector、頁碼列、直接跳頁、Grid/Table toggle 或 virtualization。
## 其他區塊的有效資料規則
### Live Load(DEC-012~015 保留資料公式;詳見 #1462)
- 不以 Charge Group contract capacity 加總推算案場契約容量、利用率或剩餘容量;只顯示案場即時總功率及各群組自身容量。
- 保留「即時/今日/7 日」三種 series。X 軸分別為最近 60 分鐘/1 分鐘 bucket、今日 00:00 至現在/15 分鐘 bucket、含今天 7 個案場日曆日/1 小時 bucket;Y 軸為「充電功率(kW)」的 time-weighted averagePowerKw。
- REST 回完整 series;WebSocket 只 replacement currentPowerKw 與 open/跨界 finalized buckets。Frontend 不自行積分、平均、插值或跨資料缺口連線。
- `bucketState` 的 OPEN/FINALIZED 與 `dataStatus` 的 COMPLETE/PARTIAL/ERROR 分離;完整零負載為 0 + COMPLETE,存在未知充電功率時整個 bucket 為 `null` + PARTIAL。
### 需留意事項(DEC-016~022;詳見 #1463)
- 只彙整既有明確狀態:CP OFFLINE、Connector FAULTED、current Live Load STALE/PARTIAL/ERROR、Queue BLOCKED,以及既有結算未完成/異常。不新增 mismatch、waiting SLA、scheduler-health、容量告警、派工或自動修復。
- 頁首 `categoryCount` 是非零 category 數量;每類另回 distinct `affectedCount`,不跨 category 推導共同 root cause。
- 固定 allowlist 順序並顯示全部非零 categories;COMPLETE + 0 顯示精簡 Empty State,PARTIAL/ERROR 不得冒充正常。
- Deep link 由 Frontend 固定 allowlist 映射至既有 route/section,只導覽、不執行 mutation。Attention 由 Overview REST 更新,不訂閱 Dashboard WebSocket。
### KPI(DEC-023~028 保留資料公式;詳見 #1486)
- Charge Point 連線使用 enabled CP 的 persisted OCPP ONLINE/OFFLINE/UNKNOWN,不用 Heartbeat 時間另建 Dashboard cutoff。
- Connector 可服務數由 Backend 依 enabled CP scope、parent CP ONLINE 與固定 runtime allowlist 計算;Frontend 不從 bounded preview 重算。
- 「充電進行中」以每 Connector 最多一筆 canonical ACTIVE transaction 計算;不以 raw CHARGING、Queue 或功率推導,也不重複顯示 currentPowerKw。
- 「等待供電」只計 Queue ELIGIBLE 的 distinct Connector;NOT_PLUGGED 另列且互斥,BLOCKED 留在需留意事項。
- 「今日已完成充電量」重用 Usage 的 today daily bucket;ACTIVE 不以 MeterValue 暫估。
- 「上月電費」使用上一完整日曆月,只有資料完整時顯示總額,否則顯示 `—` 與完成筆數。
- 六張 KPI 全部由 Overview REST 更新,不訂閱 Dashboard WebSocket;狀態呈現沿用 source-isolated COMPLETE/PARTIAL/ERROR/STALE contract。
### Usage、結算與 Queue(DEC-010/011;詳見 #1460/#1461)
- Usage 固定最近 30 個案場日曆日(含今天),保留 kWh/Sessions,平均每次充電量由 Backend 計算;不提供 7/90 日、自訂範圍或時間使用率。
- 四步驟結算流程期間由 Backend 依最近結算資料回傳;四列維持純資訊,Frontend footer 導向既有帳單/請款頁。
- Queue 只顯示既有 source、status、priority、statusReason、waitingSince/duration;V1 不新增 SLA、timeout、override、設定頁或狀態轉換。
## Backend 開發內容
- [ ] 建立 current-building resolver,讓 Overview、ticket、WebSocket 與所有 query 共用唯一 enabled Building scope。
- [ ] 建立 typed `DashboardController`/`DashboardService`/Overview DTO,按 section 回傳 status、freshness 與時間 metadata。
- [ ] 建立最小 Dashboard ticket、WebSocket handler、session registry 與三種 typed message;使用區塊 replacement,不加入 fallback/retry/gap recovery。
- [ ] 建立 Connector summary/Top-8 共用分類排序 service,供 Overview 與 `CONNECTOR_LIVE_BLOCK_UPDATED` 使用。
- [ ] 擴充既有 Connector search:Charge Point ID/Charge Group 條件、`DASHBOARD_PRIORITY` mode、固定 20 筆 pagination 及完整 Page metadata;保持既有管理頁 sorting 相容。
- [ ] 建立 Live Load current/series read model與 `LIVE_LOAD_UPDATED` replacement,遵守 #1462 bucket/quality contract。
- [ ] 聚合 Attention、KPI、Group、Usage、Settlement/Billing 等 REST-owned sections,遵守各 child issue 的既有公式,不新增作業邏輯。
- [ ] 沿用既有 `dashboard` function,補 Overview/ticket API mapping、OpenAPI `@Schema`、method/DTO 註解與 security/contract tests。
- [ ] 依 DEC-042 優先採 read-only aggregate,完成 aggregate;只有 A17 或具代表性等量資料的 EXPLAIN 與可重現 P50/P95 baseline;只有實測影響正常使用時才提出 query/普通 index 優化,不為固定秒數預先建立 證明必要時才提出普通 index,不預先建立 Dashboard snapshot table、專用 cache、效能排程或新 table或新 constraint。
## Frontend 開發內容
- [ ] 重新實作 `/dashboard`,依既有 `dashboard` function 控制 menu/route;未授權時不載入或短暫顯示資料。
- [ ] 建立單一 Overview query/300 秒 timer/手動刷新,以及一個 Dashboard socket hook;Dashboard unmount 時釋放資源。
- [ ] 分離 REST-owned state 與兩個 WS-owned live blocks;socket 接手後,Overview refresh 不覆寫 live state。
- [ ] Header 分別呈現案場名稱、一般 REST 最後更新、WebSocket connection state及 source freshness;手動刷新不假裝會重連。
- [ ] 實作 Connected、首次連線失敗、連線後中斷;中斷保留最後資料/時間並顯示已停止更新,不啟動 REST fallback。
- [ ] 實作 Connector 五項 summary、Top-8 responsive preview、detail、Full List Drawer、固定排序/分頁與 page-session state。
- [ ] 實作 KPI、Attention、Live Load、Group、Usage、Settlement 的 Loading/Empty/Partial/Error/Stale、RWD、keyboard與文字狀態。
- [ ] Production API/WebSocket error 不得 fallback 到 fixture。
## Acceptance Criteria
### Scope、權限與資料隔離
- [ ] 同一套功能可部署至所有 EMS Branch,A17 不出現在程式判斷或固定資料中。
- [ ] 唯一 enabled Building 正常載入;零筆/多筆顯示設定異常並隱藏營運資料。
- [ ] Overview/ticket/socket 不接受 Frontend building selector;response/ticket/event 的 resolved `buildingId` 一致。
- [ ] 四個允許 role 可讀取 Overview/取得 ticket;未具 `dashboard` function 時 API 為 403、socket 無有效 ticket 時拒絕。
- [ ] Dashboard 及 deep links 不執行任何業務 mutation,也不洩漏 credential/個資。
### REST 更新
- [ ] 首載及每 300 秒最多一個 Overview request;手動刷新也只送一個,沒有各 section timer。
- [ ] 同一次 response 的 REST-owned sections 使用相同 `generatedAt`;section failure 不清空其他成功內容。
- [ ] Refresh error 只保留同 Building cache並顯示 `lastSuccessfulAt`;首次 error 不顯示 fixture/假 0。
- [ ] Socket 接手後,Overview timer與手動刷新不覆寫兩個 live blocks;socket 中斷時也不形成 REST fallback。
- [ ] Overview 效能依 DEC-042 完成 A17 或具代表性等量資料的 query EXPLAIN、endpoint P50/P95 baseline 與完整測試條件紀錄;V1 不以固定 1.5 秒作產品 SLA。
### WebSocket 簡化行為
- [ ] Dashboard 本體只有一條案場 socket,且只更新 Connector 即時狀態與案場即時負載;完整清單及其他 sections 不走 WS。
- [ ] 三種 message 均為 typed section replacement,Frontend 不由 raw delta 重算 domain state。
- [ ] 首次連線失敗與連線後中斷都顯示明確提示;已有資料保留並標示已停止更新,無資料顯示 `—`,不清成 0。
- [ ] 中斷後沒有 polling fallback、backoff/jitter、自動重連、sequence/gap recovery、visibility reconnect 或專用 Retry;整頁 reload 才重新連線。
- [ ] WebSocket 中斷不阻止其他 REST sections 依 5 分鐘週期更新。
### Connector
- [ ] 0/1/2/8/9/30/100 筆及 390/768/1024/1440px 均不破版;Top-8 payload 在 Desktop/Tablet/Mobile 分別顯示 8/6/4。
- [ ] 五個 bucket 互斥、合計等於 total、NEEDS_ATTENTION 等於 abnormalTotal;非空包含零值五項,空案場顯示 Empty State。
- [ ] 五個 summary items 不可點擊、不進 Tab;preview card 與「查看全部」仍分別支援 detail/完整清單。
- [ ] Preview 與 Full List 共用固定 priority hierarchy;同層級順序穩定,搜尋/篩選後仍先排序再分頁。
- [ ] Drawer 固定每頁 20 筆;30/100 筆為 2/5 頁,0~20 筆隱藏換頁控制,第一/最後一頁按鈕狀態正確。
- [ ] Drawer 無 sorting/page-size/direct-jump/view-toggle/virtualization;close/reopen 保留搜尋/篩選/頁碼,reload/navigation 重設。
- [ ] `DASHBOARD_PRIORITY` 不改變既有 `/connector/list` 欄位排序;完整清單永遠透過 REST,不擴大 Dashboard WS payload。
### 其他區塊與品質
- [ ] Live Load 三種 range、X/Y 軸、bucket、time-weighted average、0/null/PARTIAL 規則符合 #1462;不顯示推算的案場容量/利用率。
- [ ] Attention 類別、count、順序、Empty/Partial/Error及固定 deep link 符合 #1463,且不新增告警或 workflow。
- [ ] 六張 KPI 的 scope、公式、0/null/status、RWD與固定 deep link 符合 #1486;全部由 REST 更新。
- [ ] 30 日 Usage 與四步驟結算符合 #1461/#1460;不加入額外 range、時間使用率或 billing WebSocket。
- [ ] 狀態不只靠顏色,keyboard focus、status message與文字對比符合 WCAG 2.2 AA 基本要求;320px 以上無頁面級水平捲軸。
- [ ] Production build 不包含 API/WebSocket error → fixture fallback。
## E2E Test Impact
- Dashboard 正式實作屬 **Add**;需由實作 ticket 新增/更新 UI、REST contract、WebSocket failure、權限、RWD與 Connector large-data cases,並依 priority/trigger 納入 release pack。
- 本次 description 去矛盾沒有改變已確認產品行為,分類為 **No catalog change**;不產生 run-specific PASS/FAIL,也不宣稱已完成 E2E。
## 現行決策索引
- DEC-002:保留 Overview bootstrap;其 fallback/重連部分由 DEC-031 取代。
- DEC-006:Backend 管理 source cutoff 原則保留;override 最終以 DEC-033 為準。
- DEC-008:保留 raw WebSocket;sequence/gap recovery 部分由 DEC-031 取代。
- DEC-009~030:保留各項部署前提、唯讀邊界、資料公式、顯示及權限;其中非 Connector/Live Load sections 使用 WebSocket 的部分由 DEC-031 取代。
- DEC-031:現行資料通道與斷線簡化方案。
- DEC-032:現行單一 Overview/5 分鐘/手動刷新規則。
- DEC-033:現行 Backend per-source global freshness defaults;V1 無 per-building override。
- DEC-034~041:現行 Connector preview、summary、Drawer state、固定 pagination與固定 priority sorting。
- DEC-042:現行 Overview 效能驗證方式;採可重現 baseline,不承諾固定 1.5 秒 SLA,也不預先加入 snapshot table/cache/排程。
## 已取代的討論歷程索引
- DEC-001 的 Frontend building selection 由 DEC-029 取代。
- DEC-003 的 capped exponential backoff/60 秒 REST fallback 由 DEC-031 取代。
- DEC-004 的固定 5 秒產品 coalescing contract 由 DEC-031 取代;Backend 僅可作內部資源保護,不列固定秒數驗收。
- DEC-005 的 Operational Event P95 2 秒 SLO 由 DEC-031 取代。
- DEC-007 的 per-building stale cutoff override 由 DEC-033 取代。
- DEC-014 的 reconnect/gap recovery 部分由 DEC-031 取代;REST series + WS open-bucket replacement 的資料 ownership 保留。
- DEC-021/023~028 中要求 Attention/KPI 走 WebSocket 的部分由 DEC-031 取代;其資料公式與 presentation contract 保留。
## 需求管理狀態
- Parent:#1422
- Related:#1423(Connector)、#1460(結算)、#1461(Usage)、#1462(Live Load)、#1463(需留意事項)、#1486(KPI)
- Requirement status:**現行架構決策已整理至 DEC-042;Connector DEC-041;Connector 子需求已鎖定,其他 Dashboard 決策待整體一致性稽核後再整併最終 v1.0 文件**
- Issue status:維持 New/0%,不代表已進入開發
- Implementation tickets:整體需求鎖定後才建立 FE/BE/QA child issues
返回