PASS A1-backend-SUCCESS — → success PASS A1-backend-EMPTY — → empty PASS A1-backend-STALE — → stale PASS A1-backend-FAILED — → failed PASS A1-unknown-backend-state — 认不出的后端态不得混进「已就绪」 PASS A2-401-unavailable PASS A2-no-base-url PASS A2-mock-missing PASS A2-network-failed — 网络失败是「加载失败」而不是「数据不可用」 PASS A3-stale-not-empty PASS A3-empty PASS A4-401-marks-own-section PASS A4-neighbour-untouched — 相邻分区不因别的分区 401 而受影响 PASS A5-stale-keeps-value — 过期优先于空,且保留最后已知值 PASS A6-empty-no-fake-zero — 空分区不得带 0 值数据 PASS A7-partial PASS A7-all-failed PASS A7-all-denied PASS A8-view-tone — {"tone":"lv1","label":"数据不可用","detail":"凭据未通过校验(由部署层注入)"} PASS A8-success-view PASS A8-stale-view PASS A9-no-reason-code-in-ui — 全部原因都有中文文案,零代号泄漏 PASS A9-unknown-reason-safe — 认不出的原因回空串,不把代号甩给值班人员 PASS A9-failed-still-labelled — 没有文案时仍要说出「加载失败」 PASS B1-zero-is-value — 后端真给的 0 是有效数据,不是缺失 PASS B1-empty-string-missing — 空串记一笔缺失 PASS B1-optional-null-silent — 可选字段缺失不记问题 PASS B1-missing-number-null — 缺失数字回 null,不回 0 PASS B2-unvalidated-not-renderable — 整段坐标校验缺失时不假装可绘制 PASS B3-batch-shape — 分页与快照原样带出(票 08 用) PASS B3-points-mapped PASS B3-status-is-backend — 点位状态用后端解析结果,前端不重算 PASS B3-equipment-kind — 未关联设备没有点位状态,不得借用在线态 PASS B4-validation-summary — {"total":3,"renderable":1,"blocked":2,"states":{"VALID":1,"UNVERIFIED":1,"INVALID":1}} PASS B4-out-of-range-blocked — 超范围坐标不上图(票 07 输入) PASS B5-missing-coord-null — 坐标缺失保持 null 且不上图 PASS B5-missing-recorded — ["monitoringPoint.longitude","monitoringPoint.latitude"] PASS B5-unnaffected-fields — 一个字段缺失不影响其它字段 PASS B5-zero-not-faked — 真 0 坐标照原样带出(是否上图由后端 renderable 决定) PASS B6-point-detail PASS B6-device-order-kept — 设备卡片顺序由后端决定(票 10 验收) PASS B6-dictionary-priority — 状态字典带后端优先级(票 09 用) PASS B7-seven-states — 0–7 共 8 个码(旧 1–7「七态」已作废) PASS B7-closed-terminal — 只有已结案(5)/已取消(7)是终态;6 延期中是处理旁路 PASS B7-bypass-is-not-terminal — 6 延期中是旁路:既非终态也不在推进主线上 PASS B7-work-order — 未结案 realFinishTime 为 null(本来就没有,不算缺失) PASS B7-state-name-from-dictionary — → 已接单 PASS B8-distribution-fills-zero PASS B8-distribution-total — 总数只算码表内的(3),不把未知键混进来 PASS B8-unknown-kept — 字典外的键单独列出,不静默丢 PASS B8-closed-code — 已结案是 5(后端的处置率分子就是它) PASS B9-timeline-sorted — 轨迹按时间升序(后端顺序不保证) PASS B9-rollback-is-action — 验收驳回是回到「处理中」的动作,不是多出来的一个状态 PASS B10-families PASS B10-unified-code — 两类事件统一成 code,列表不必分支 PASS B10-alarm-keeps-rule-code — 报警的 warningCode 是规则编码,另存避免与事件编码混淆 PASS B10-threshold-on-alarm — 阈值只有报警有,预警不得伪造 PASS B10-relation PASS B10-family-switch PASS B10-sort-desc — 最新在前(票 13 默认最新 10-15 条) PASS B11-unknown-level-color — 认不出的配色回空串,不自造颜色 PASS B12-expired-by-backend PASS B12-expired-fallback — 后端没给 freshness 时才用 missedCycles 兜底 PASS B12-retained-has-value PASS B12-age-placeholder — 缺时间显示占位符,不显示「0 秒」 PASS B13-sections-all-present — 八个分区都在(后端没给的分区也留位) PASS B13-failed-isolated — 档案失败不影响指标成功(票 11 验收第 3 条) PASS B13-failed-keeps-message PASS B13-empty-distinct PASS B13-stale-retains — 过期分区保留旧值 PASS B13-missing-section — 后端整段缺失时该分区算失败,不算成功 PASS B13-metric-zero — 指标真 0 不得被当成缺失 PASS B13-metric-missing-null — 缺 value 显示占位符,不显示虚假零值 PASS B13-aggregate-state-not-authoritative — 界面分区状态以各分区自己的为准 PASS B13-unknown-section-kept PASS C1-map-success — {"state":"success","points":2,"equipment":0} PASS C1-map-snapshot-locked — {"snapshotAt":"2026-09-02T10:00:00+08:00","complete":false,"total":5} PASS C1-map-page-locked-to-snapshot — {"sameSnapshot":true,"complete":true} PASS C1-aggregate-success PASS C1-aggregate-substates PASS C1-point-success PASS C1-point-path-param — 模板路径 /monitoring-points/* 命中(带路径参数的接口也要能 mock) PASS C1b-main-scene-overlap-sample — 主场景 MP-001 返回 2 台(期望 K=2 重叠示例) PASS C1-events-success PASS C1-work-orders-success PASS C1-freshness-success PASS C2-empty-aggregate — 整体取到了,但每个分区各自是「无数据」 PASS C2-empty-orders — 空列表分区不得带空数组冒充数据 PASS C2-empty-freshness PASS C3-degraded-archive — 缺字段的分区仍算成功,只是字段为空 PASS C3-degraded-missing-recorded — ["archive.deviceName"] PASS C3-degraded-order-name — 工单状态名缺失时用状态字典补 PASS C3-degraded-age — 缺 dataAgeSeconds 时显示占位符 PASS C3-degraded-point — 点位记录缺字段仍算成功(缺字段 ≠ 空记录) PASS C4-failed-aggregate — 处理器抛出 → 分区失败,不抛给页面 PASS C4-failed-snapshot PASS C5-stale-metrics — 过期分区带 retained,界面须显示过期标识 PASS C5-stale-keeps-other — 过期不牵连其它分区 PASS C5-stale-freshness PASS C6-401-isolated — {"state":"unavailable","reason":"unauthorized"} PASS C6-neighbours-survive — 受影响分区之外照常成功(保留已成功分区) PASS C6-overall-partial PASS C6-view-is-data-unavailable PASS C6-prefix-isolated — 前缀选中一族接口,其余分区与地图不受影响 PASS C7-unregistered PASS C8-real-same-adapter — 真接口与 mock 走同一适配层与同一转换 PASS C8-real-no-credential — REST 免鉴权后真接口也不携带 Authorization(ADR 0005 修订) PASS C8-real-url — https://gw/api/cockpit/v1/map-snapshot PASS C8-real-401 PASS C8-real-bad-payload PASS C9-query-empty PASS C9-query-encode — ?page=1&snapshotAt=2026-09-02T10%3A00%3A00%2B08%3A00 PASS C9-query-array PASS C9-history-path — https://gw/api/cockpit/v1/equipments/TC-1/events/history?startTime=2026-09-01T00%3A00%3A00%2B08%3A00&endTime=2026-09-02T00%3A00%3A00%2B08%3A00 PASS C9-current-path — https://gw/api/cockpit/v1/equipments/TC-1/events/current PASS C9-no-code-no-request — 缺少设备编码 PASS C10-foundation-empty-frame PASS C10-foundation-ready PASS C11-delta-online-frame — {"deviceCode":"DEV001","monitoringPointCode":"","status":"ALARM","statusTime":"2026-09-02T10:00:00+08:00","serverUpdatedAt":"2026-09-02T10:00:01+08:00","reason":"浓度超限","sampledAt":"","eventId":null} PASS C11-delta-dto-name — 后端 DTO 用 monitoringState,线上帧用 status,两个都要认 PASS C11-unknown-frame — 认不出的帧回 null,不猜 PASS C11-no-code — 没有设备编码的增量帧无法回联点位,必须丢弃 PASS C11-subscribed PASS C12-idempotent — 23 个路径(两次注册后不翻倍) PASS C12-covers-shared-domain — /map-snapshot, /monitoring-points/*, /equipments/*/detail-aggregate, /equipments/*/events/current, /equipments/*/events/history, /events/current, /events/history-analysis, /events/handling-efficiency, /events/multidimensional-analysis, /equipments/*/work-orders, /work-orders/*/timeline, /equipments/*/freshness, /equipments/*/archive, /infrastructure/base-archives, /infrastructure/operating-information, /infrastructure/management-information, /infrastructure/emergency-support, /monitoring/overview, /monitoring/distribution, /monitoring/situation, /overview/infrastructure, /overview/monitoring, /overview/warning-settings PASS D1-CockpitShell.vue-no-raw-fields — 零后端裸字段 PASS D1-components/MapCanvas.vue-no-raw-fields — 零后端裸字段 PASS D1-components/CockpitPanel.vue-no-raw-fields — 零后端裸字段 PASS D1-components/PanelPlaceholder.vue-no-raw-fields — 零后端裸字段 PASS D1-components/StatusTag.vue-no-raw-fields — 零后端裸字段 PASS D1-components/SectionStateTag.vue-no-raw-fields — 零后端裸字段 PASS D1-components/CockpitIcon.vue-no-raw-fields — 零后端裸字段 PASS D1-components/PointDetailCard.vue-no-raw-fields — 零后端裸字段 PASS D1-components/EquipmentDetailSections.vue-no-raw-fields — 零后端裸字段 PASS D1-components/WorkOrderTimeline.vue-no-raw-fields — 零后端裸字段 PASS D1-components/PanelBlocks.vue-no-raw-fields — 零后端裸字段 PASS D1-stores/uiStore.js-no-raw-fields — 零后端裸字段 PASS D1-stores/filterStore.js-no-raw-fields — 零后端裸字段 PASS D1-stores/detailStore.js-no-raw-fields — 零后端裸字段 PASS D1-stores/infrastructureStore.js-no-raw-fields — 零后端裸字段 PASS D1-stores/monitoringStore.js-no-raw-fields — 零后端裸字段 PASS D1-components/EventListPane.vue-no-raw-fields — 零后端裸字段 PASS D1-stores/eventStore.js-no-raw-fields — 零后端裸字段 PASS D1-pointSelection.js-no-raw-fields — 零后端裸字段 PASS D1-stores/deviceLayerStore.js-no-raw-fields — 零后端裸字段 PASS D1-stores/overviewStore.js-no-raw-fields — 零后端裸字段 PASS D1-components/WarningResponsePane.vue-no-raw-fields — 零后端裸字段 PASS D2-CockpitShell.vue-no-credential — 页面与 store 不碰凭据 PASS D2-components/MapCanvas.vue-no-credential — 页面与 store 不碰凭据 PASS D2-components/CockpitPanel.vue-no-credential — 页面与 store 不碰凭据 PASS D2-components/PanelPlaceholder.vue-no-credential — 页面与 store 不碰凭据 PASS D2-components/StatusTag.vue-no-credential — 页面与 store 不碰凭据 PASS D2-components/SectionStateTag.vue-no-credential — 页面与 store 不碰凭据 PASS D2-components/CockpitIcon.vue-no-credential — 页面与 store 不碰凭据 PASS D2-components/PointDetailCard.vue-no-credential — 页面与 store 不碰凭据 PASS D2-components/EquipmentDetailSections.vue-no-credential — 页面与 store 不碰凭据 PASS D2-components/WorkOrderTimeline.vue-no-credential — 页面与 store 不碰凭据 PASS D2-components/PanelBlocks.vue-no-credential — 页面与 store 不碰凭据 PASS D2-stores/uiStore.js-no-credential — 页面与 store 不碰凭据 PASS D2-stores/filterStore.js-no-credential — 页面与 store 不碰凭据 PASS D2-stores/detailStore.js-no-credential — 页面与 store 不碰凭据 PASS D2-stores/infrastructureStore.js-no-credential — 页面与 store 不碰凭据 PASS D2-stores/monitoringStore.js-no-credential — 页面与 store 不碰凭据 PASS D2-components/EventListPane.vue-no-credential — 页面与 store 不碰凭据 PASS D2-stores/eventStore.js-no-credential — 页面与 store 不碰凭据 PASS D2-pointSelection.js-no-credential — 页面与 store 不碰凭据 PASS D2-stores/deviceLayerStore.js-no-credential — 页面与 store 不碰凭据 PASS D2-stores/overviewStore.js-no-credential — 页面与 store 不碰凭据 PASS D2-components/WarningResponsePane.vue-no-credential — 页面与 store 不碰凭据 PASS D3-domain/sectionState.js-pure — 领域转换不自己发请求 PASS D3-domain/mapSummary.js-pure — 领域转换不自己发请求 PASS D3-domain/pointDetail.js-pure — 领域转换不自己发请求 PASS D3-domain/equipmentDetail.js-pure — 领域转换不自己发请求 PASS D3-domain/equipmentDetailView.js-pure — 领域转换不自己发请求 PASS D3-domain/workOrderTimeline.js-pure — 领域转换不自己发请求 PASS D3-domain/infrastructurePanels.js-pure — 领域转换不自己发请求 PASS D3-domain/mapLocate.js-pure — 领域转换不自己发请求 PASS D3-domain/panelBlocks.js-pure — 领域转换不自己发请求 PASS D3-domain/monitoringPanels.js-pure — 领域转换不自己发请求 PASS D3-domain/panelViews.js-pure — 领域转换不自己发请求 PASS D3-domain/workOrder.js-pure — 领域转换不自己发请求 PASS D3-domain/events.js-pure — 领域转换不自己发请求 PASS D3-domain/freshness.js-pure — 领域转换不自己发请求 PASS D3-domain/fields.js-pure — 领域转换不自己发请求 PASS D3-domain/eventList.js-pure — 领域转换不自己发请求 PASS D3-domain/primaryArea.js-pure — 领域转换不自己发请求 PASS D3-domain/areaLimits.js-pure — 领域转换不自己发请求 PASS D3-domain/fog.js-pure — 领域转换不自己发请求 PASS D3-domain/imageryHandover.js-pure — 领域转换不自己发请求 PASS D3-domain/pointLocate.js-pure — 领域转换不自己发请求 PASS D3-domain/pointAnchor.js-pure — 领域转换不自己发请求 PASS D3-domain/deviceLayer.js-pure — 领域转换不自己发请求 PASS D3-domain/deviceCorrespondence.js-pure — 领域转换不自己发请求 PASS D3-domain/deviceAssets.js-pure — 领域转换不自己发请求 PASS D3-domain/deviceStatus.js-pure — 领域转换不自己发请求 PASS D3-domain/modeLayerPlan.js-pure — 领域转换不自己发请求 PASS D3-domain/overlapDevices.js-pure — 领域转换不自己发请求 PASS D3-domain/overviewPanels.js-pure — 领域转换不自己发请求 PASS D3-domain/warningResponsePanels.js-pure — 领域转换不自己发请求 PASS D4-domain/sectionState.js-no-service-import — domain 不 import service PASS D4-domain/mapSummary.js-no-service-import — domain 不 import service PASS D4-domain/pointDetail.js-no-service-import — domain 不 import service PASS D4-domain/equipmentDetail.js-no-service-import — domain 不 import service PASS D4-domain/equipmentDetailView.js-no-service-import — domain 不 import service PASS D4-domain/workOrderTimeline.js-no-service-import — domain 不 import service PASS D4-domain/infrastructurePanels.js-no-service-import — domain 不 import service PASS D4-domain/mapLocate.js-no-service-import — domain 不 import service PASS D4-domain/panelBlocks.js-no-service-import — domain 不 import service PASS D4-domain/monitoringPanels.js-no-service-import — domain 不 import service PASS D4-domain/panelViews.js-no-service-import — domain 不 import service PASS D4-domain/workOrder.js-no-service-import — domain 不 import service PASS D4-domain/events.js-no-service-import — domain 不 import service PASS D4-domain/freshness.js-no-service-import — domain 不 import service PASS D4-domain/fields.js-no-service-import — domain 不 import service PASS D4-domain/eventList.js-no-service-import — domain 不 import service PASS D4-domain/primaryArea.js-no-service-import — domain 不 import service PASS D4-domain/areaLimits.js-no-service-import — domain 不 import service PASS D4-domain/fog.js-no-service-import — domain 不 import service PASS D4-domain/imageryHandover.js-no-service-import — domain 不 import service PASS D4-domain/pointLocate.js-no-service-import — domain 不 import service PASS D4-domain/pointAnchor.js-no-service-import — domain 不 import service PASS D4-domain/deviceLayer.js-no-service-import — domain 不 import service PASS D4-domain/deviceCorrespondence.js-no-service-import — domain 不 import service PASS D4-domain/deviceAssets.js-no-service-import — domain 不 import service PASS D4-domain/deviceStatus.js-no-service-import — domain 不 import service PASS D4-domain/modeLayerPlan.js-no-service-import — domain 不 import service PASS D4-domain/overlapDevices.js-no-service-import — domain 不 import service PASS D4-domain/overviewPanels.js-no-service-import — domain 不 import service PASS D4-domain/warningResponsePanels.js-no-service-import — domain 不 import service PASS D5-CockpitShell.vue-no-login-redirect — 不跳登录页 PASS D5-components/MapCanvas.vue-no-login-redirect — 不跳登录页 PASS D5-components/CockpitPanel.vue-no-login-redirect — 不跳登录页 PASS D5-components/PanelPlaceholder.vue-no-login-redirect — 不跳登录页 PASS D5-components/StatusTag.vue-no-login-redirect — 不跳登录页 PASS D5-components/SectionStateTag.vue-no-login-redirect — 不跳登录页 PASS D5-components/CockpitIcon.vue-no-login-redirect — 不跳登录页 PASS D5-components/PointDetailCard.vue-no-login-redirect — 不跳登录页 PASS D5-components/EquipmentDetailSections.vue-no-login-redirect — 不跳登录页 PASS D5-components/WorkOrderTimeline.vue-no-login-redirect — 不跳登录页 PASS D5-components/PanelBlocks.vue-no-login-redirect — 不跳登录页 PASS D5-stores/uiStore.js-no-login-redirect — 不跳登录页 PASS D5-stores/filterStore.js-no-login-redirect — 不跳登录页 PASS D5-stores/detailStore.js-no-login-redirect — 不跳登录页 PASS D5-stores/infrastructureStore.js-no-login-redirect — 不跳登录页 PASS D5-stores/monitoringStore.js-no-login-redirect — 不跳登录页 PASS D5-components/EventListPane.vue-no-login-redirect — 不跳登录页 PASS D5-stores/eventStore.js-no-login-redirect — 不跳登录页 PASS D5-pointSelection.js-no-login-redirect — 不跳登录页 PASS D5-stores/deviceLayerStore.js-no-login-redirect — 不跳登录页 PASS D5-stores/overviewStore.js-no-login-redirect — 不跳登录页 PASS D5-components/WarningResponsePane.vue-no-login-redirect — 不跳登录页 PASS D5-mocks/contractMocks.js-no-login-redirect — 不跳登录页 PASS D5-mocks/index.js-no-login-redirect — 不跳登录页 PASS D5-domain/sectionState.js-no-login-redirect — 不跳登录页 PASS D5-domain/mapSummary.js-no-login-redirect — 不跳登录页 PASS D5-domain/pointDetail.js-no-login-redirect — 不跳登录页 PASS D5-domain/equipmentDetail.js-no-login-redirect — 不跳登录页 PASS D5-domain/equipmentDetailView.js-no-login-redirect — 不跳登录页 PASS D5-domain/workOrderTimeline.js-no-login-redirect — 不跳登录页 PASS D5-domain/infrastructurePanels.js-no-login-redirect — 不跳登录页 PASS D5-domain/mapLocate.js-no-login-redirect — 不跳登录页 PASS D5-domain/panelBlocks.js-no-login-redirect — 不跳登录页 PASS D5-domain/monitoringPanels.js-no-login-redirect — 不跳登录页 PASS D5-domain/panelViews.js-no-login-redirect — 不跳登录页 PASS D5-domain/workOrder.js-no-login-redirect — 不跳登录页 PASS D5-domain/events.js-no-login-redirect — 不跳登录页 PASS D5-domain/freshness.js-no-login-redirect — 不跳登录页 PASS D5-domain/fields.js-no-login-redirect — 不跳登录页 PASS D5-domain/eventList.js-no-login-redirect — 不跳登录页 PASS D5-domain/primaryArea.js-no-login-redirect — 不跳登录页 PASS D5-domain/areaLimits.js-no-login-redirect — 不跳登录页 PASS D5-domain/fog.js-no-login-redirect — 不跳登录页 PASS D5-domain/imageryHandover.js-no-login-redirect — 不跳登录页 PASS D5-domain/pointLocate.js-no-login-redirect — 不跳登录页 PASS D5-domain/pointAnchor.js-no-login-redirect — 不跳登录页 PASS D5-domain/deviceLayer.js-no-login-redirect — 不跳登录页 PASS D5-domain/deviceCorrespondence.js-no-login-redirect — 不跳登录页 PASS D5-domain/deviceAssets.js-no-login-redirect — 不跳登录页 PASS D5-domain/deviceStatus.js-no-login-redirect — 不跳登录页 PASS D5-domain/modeLayerPlan.js-no-login-redirect — 不跳登录页 PASS D5-domain/overlapDevices.js-no-login-redirect — 不跳登录页 PASS D5-domain/overviewPanels.js-no-login-redirect — 不跳登录页 PASS D5-domain/warningResponsePanels.js-no-login-redirect — 不跳登录页 T05 适配层检查:283/283 项通过。 T05 领域适配层全部通过。