# 车辆数据管理中台原型设计

## 扩展后的实现提示词

构建一套白底、简洁、高级、偏大厂中后台风格的车辆数据管理中台原型。它服务于 GB/T 32960、JT/T 808、宇通 MQTT 三类车辆数据源，最终只面向一个统一车辆服务视角。当前原型已经升级为真实数据优先：优先接入 ECS BFF、Redis/MySQL/TDengine 投影和高德 Web JS API；接口缺失时只展示能力边界，不用演示数据冒充真实能力。原型必须表达车辆实时监控、地图定位、轨迹回放、历史 RAW 查询、告警观测信号、实时统计、数据源质量监控、车辆详情和实时字段查看。

视觉上采用白底、高德浅色地图、蓝色主色、青色和绿色辅助色、少量橙红色用于异常。信息密度要适合运营人员长期使用，避免营销页式的大标题和装饰。界面要强调“今天是否有数据、车辆是否在线、来源一致性如何、历史能否查证、哪些能力目前只有观测证据而没有 durable API”。

## 产品定位

这是车辆数据中台的运营工作台，不是单纯地图页面。用户打开后应能快速判断：

- 当前有多少车辆在线，各协议接入是否健康。
- 某辆车现在在哪里，多路来源是否一致。
- 车辆的实时字段、位置、里程、告警和原始证据是否能串起来。
- 某段时间能否回放轨迹、查询历史、裁剪字段。
- 数据断链、里程异常、字段缺失等问题当前是否已有可观测证据，以及 durable alert 能力是否已经接入。

## 原型模块

1. 实时指挥台：地图、车辆列表、协议/状态/来源筛选、车辆详情、实时字段。
2. 轨迹回放：时间窗、轨迹点、播放进度、停留/告警节点、证据摘要。
3. 历史查询：协议、VIN/车牌、时间范围、字段选择、查询结果表、RAW 证据入口。
4. 告警中心：断链、字段缺失、协议告警位和链路延迟；当前展示观测信号和证据边界。
5. 统计分析：实时协议覆盖、在线状态、车速、最新总里程、字段覆盖和未接入统计 API 边界。
6. 数据源监控：平台来源、发送端、协议、车辆数、最近数据、延迟和健康状态。

## 本地样例数据要求

- 真实接口不可用时才启用本地样例数据，且页面必须明确标注真实数据未接入。
- 至少 8 台车，覆盖 GB32960、JT808、YUTONG_MQTT，多源车辆和单源车辆都要有。
- 每台车包含车牌、VIN、协议、来源平台、发送端、在线状态、位置、总里程、今日里程、车速、SOC、氢量、最后上报时间。
- 轨迹点覆盖运行、停留、告警三种状态。
- 告警覆盖断链、协议告警位、字段缺失和定位漂移。
- 历史查询结果要展示 raw id、协议、帧类型、字段数量、延迟和来源。
- 实时字段以扁平化 key-value 方式展示，符合后续 Redis/TDengine/MySQL 同一套解析字段的方向。

## 交互逻辑

- 左侧导航切换模块，不跳路由，保持原型轻量。
- 搜索车牌/VIN/手机号会过滤车辆列表和地图点。
- 协议、状态、来源筛选会联动 KPI、列表、地图和详情候选。
- 点击车辆点或车辆列表行会更新右侧详情和实时字段。
- 轨迹回放支持播放/暂停和进度选择，更新当前轨迹点说明。
- 告警中心只展示当前可由实时/历史 API 证明的观测信号，不提供后端尚未支持的通知、派单和人工状态流转。
- 历史查询接入 `raw-frames/query`，字段选择会影响真实请求的字段裁剪。
- 统计页在统计 API 未接入前只展示 `/api/realtime/locations` 能证明的实时口径，不展示演示日里程。

## 设计原则

- 所有模块都围绕车辆服务，不暴露“接入工程内部名词”作为主导航。
- 所有实时展示只出现实时数据帧含义，不让平台登录、鉴权这类非业务帧进入运营展示。
- 多源数据不提前强行统一成少数字段；实时字段面板展示协议原始解析后的扁平字段。
- 对运营人员重要的信息优先：在线、位置、里程、来源、延迟、异常、证据。
- 每个页面必须能追溯到现有数据源：Redis 当前态、TDengine 历史/RAW、MySQL 身份/实时投影/日里程，或 BFF 聚合接口。
- 真实 API 适配、本地样例数据和 UI 组件保持分离，避免接口缺失时把演示数据误认为生产能力。

## 2026-07-08 提炼记录

- 增加“接收实时帧 -> 解析扁平字段 -> 合并实时投影 -> 运营闭环”的流转条，让页面先解释业务链路，再进入地图和列表。
- 筛选车辆后，详情、地图高亮和轨迹上下文必须自动切换到筛选结果内的车辆，避免出现看不见的车辆仍被选中的割裂。
- 实时字段从“单来源字段列表”升级为协议可切换字段检查器，可查看同一辆车在 32960、JT808、MQTT 下的字段覆盖和字段值。
- 字段检查器支持 key/value 搜索，并按字段命名空间分组，后续可以承接真实的字段映射表和字段字典。

## 2026-07-08 二次提炼记录

- 来源页签增加来源一致性诊断，展示来源数量、在线数量、定位来源、里程差和时间差。
- 多源车辆按已有协议来源展示证据入口，默认展示来源只作为当前 UI 选中态，不制造后端不存在的来源决策结果。
- 移动端导航从纵向堆叠改为横向滑动，隐藏次级说明和底部链路卡，缩短进入主内容的距离。

## 2026-07-08 数据源约束修正

- 原型功能必须能对应到当前已有的数据层或 BFF API：Redis 当前态、TDengine 历史/RAW、MySQL 身份/实时投影/日里程、或平台 BFF 聚合接口。
- 移除未在后端定义的来源决策能力，改用已存在的 `sourceConsistency` 模型表达来源数量、在线数量、缺失协议、时间差、里程差和诊断说明。
- 告警中心不展示“人工处理动作”，因为当前 durable alert API 未接入；指派、通知和升级状态属于未来扩展。
- 统计页只表达当前 `vehicle_daily_mileage` 支持的 VIN + 日期 + 协议口径。
- 实时字段说明必须指向 Redis `vehicle:realtime-raw:{protocol}:{vin}` 或 MySQL `vehicle_realtime_snapshot.parsed_json`；历史字段必须指向 TDengine `raw_frames.parsed_json`。

## 2026-07-08 三次提炼记录

- 新增“能力边界”矩阵，集中说明每个原型能力对应的真实存储/API、入口页面和边界条件。后续如果源头没有数据或 BFF 没有接口，不应直接进入页面原型。
- 把筛选、KPI、来源一致性、模块数据边界等派生逻辑抽到 `src/prototype/viewModel.ts`，让 `PrototypeApp.tsx` 更专注页面状态和组件组合。
- 数据源监控页从单纯台账升级为“能力边界 + 来源台账”，用于回答当前系统能做什么、不能做什么，以及原因在数据源还是接口层。
- 移除样式层残留的告警已处理状态，保持告警中心只呈现观测信号和证据边界。

## 2026-07-08 四次提炼记录

- 历史查询页从“筛选字段 + 静态结果表”升级为 API 查询工作台，直接展示 `POST /api/history/raw-frames/query`、TDengine 存储来源、分页参数和字段裁剪 payload。
- 字段选择会同步影响查询载荷预览，分页大小会同步影响 `limit` 和 `offset`，让原型交互更接近真实 BFF 查询。
- 结果表增加上一页/下一页状态和结果范围，表达已有分页能力，不展示尚未落地的全量导出动作。
- 页面说明明确：字段裁剪只影响接口响应体，不改变 TDengine RAW 存储；完整 payload 仍可通过 RAW ID 回溯。

## 2026-07-08 五次提炼记录

- 统计分析页从“协议柱条 + 口径说明”升级为统计工作台：顶部摘要展示当前协议筛选、当日运行里程、在线车辆和统计行数。
- 新增按协议日里程卡片，使用 `vehicle_daily_mileage` 的 VIN + 日期 + 协议口径展示当日运行里程、在线数和最新总里程。
- 新增日里程明细表，按车辆、协议、来源、当日运行里程、最新总里程和最近上报展示，不把 32960、808、MQTT 强行合并成单一里程。
- 移动端日里程明细从宽表改成纵向证据行，保留字段名，避免运营人员在手机上横向拖表。
- 顶部“今日里程”KPI 跟随协议筛选：全部协议时按当前展示来源汇总，指定协议时按该协议来源汇总，避免 KPI 与统计明细口径不一致。

## 2026-07-08 六次提炼记录

- 告警中心从静态告警卡升级为事件工作台：顶部摘要来自 `alert-events/summary` 口径，事件队列来自 `GET /api/alert-events`，并跟随全局搜索、协议和来源筛选。
- 选中事件后展示车辆、来源、事件时间、Redis 在线态、MySQL 实时投影、TDengine RAW、TDengine 轨迹或 MySQL 日里程等证据项。
- 告警侧栏只展示 durable alert 能力边界和证据入口，不模拟确认、派单、通知、关闭、手工升级等后端尚未支持的操作。
- 证据链明确区分实时数据帧、历史 RAW、轨迹与统计口径，避免把登录、鉴权、注册等非业务帧放入运营实时状态。

## 2026-07-08 七次提炼记录

- 实时指挥台新增实时投影摘要，按当前筛选车辆展示在线车辆、可展示实时位置、1 分钟内上报车辆和主来源字段数。
- 车辆列表从“车牌 + 速度”升级为“状态 + 车牌/VIN + 主来源 + 协议 + 最近上报”，让值班人员能先判断数据新鲜度和来源。
- 地图区域增加当前选中车辆浮层，展示状态、地址、主来源、最近上报和经纬度；地图仍作为高德地图接入位，不伪造后端路径规划能力。
- 车辆详情概况增加主展示来源条和实时证据行，分别指向 Redis 在线态、MySQL 实时位置、MySQL/Redis 实时快照、TDengine RAW/轨迹证据。
- 实时页继续只展示实时数据帧形成的当前态，登录、鉴权、注册等接入审计帧不进入运营实时状态。

## 2026-07-08 八次提炼记录

- 轨迹回放页从“地图点 + 时间线”升级为回放工作台，新增轨迹节点数、区间里程、最高速度、异常/停留摘要。
- 区间里程只按相邻 `vehicle_locations` 位置点的总里程差计算，不做路径拟合或地图距离估算。
- 节点选中后在地图内展示当前节点类型、位置、备注、速度和总里程，播放控件只改变本地回放状态。
- 新增分段里程列表，展示相邻节点的时间段、里程增量和速度变化，用于观察断链或停留前后的变化。
- 新增回放证据区，明确指向 TDengine `vehicle_locations`、TDengine `raw_frames`、MySQL `vehicle_daily_mileage` 和 BFF `alert-events`。
- 如果当前车辆没有轨迹点，页面显示暂无轨迹，不借用其他车辆的轨迹数据。

## 2026-07-08 九次提炼记录

- 原型从纯 mock 升级为真实数据优先：默认读取 `GET /api/realtime/locations?limit=120&offset=0`，接口失败、禁用或返回空时才回落到 mock 数据。
- 真实数据适配层兼容当前 ECS 接口的 snake_case 字段和 BFF 合约中的 camelCase 字段，并按 VIN 合并 GB32960、JT808、YUTONG_MQTT 多路实时位置。
- 实时指挥台的车辆数、列表、地图点、详情概况和实时字段面板都由真实 `vehicle_realtime_location` 投影驱动，不把登录、鉴权、注册帧放入运营展示。
- 地图组件复用现有 `VehicleMap`，优先加载高德 JS API；未配置高德 key 或加载失败时自动显示坐标预览，保证原型可用。
- 高德配置通过运行时 `window.__LINGNIU_APP_CONFIG__` 或 Vite 环境变量注入，生产建议使用 `AMAP_SECURITY_SERVICE_HOST=/_AMapService`，避免把 security code 写入前端构建产物。
- Vite 开发代理只转发 `/api` 和 `/_AMapService`；本地 `/app-config.js` 由 `public/app-config.js` 提供，生产环境由 BFF 注入运行时配置。

## 2026-07-08 十次提炼记录

- 统计分析页改为真实数据优先：当 ECS 只有 `/api/realtime/locations` 可用时，展示实时协议覆盖、在线来源行、行驶来源、最新总里程、字段数和来源明细。
- 日里程统计不再在真实数据模式下展示为真值，因为当前 `/api/mileage/daily`、`/api/mileage/summary`、`/api/statistics/*`、`/api/quality/*` 均返回 404。
- 顶部 KPI 在真实数据模式下从“今日里程/质量事件”改为“实时行驶/最新总里程/字段延迟”，避免把 mock 指标混入真实展示。
- `?section=stats`、`?section=command` 等 URL 深链可直接打开指定模块，导航切换会同步更新 URL，方便评审和分享具体页面。
- 统计页的数据边界明确写出当前可用 API 和未接入 API，后续统计服务上线后再替换为 `vehicle_daily_mileage` 的 VIN + 日期 + 协议口径。

## 2026-07-08 十一次提炼记录

- 历史查询页接入真实 `POST /api/history/raw-frames/query`，在真实模式下展示 TDengine RAW 记录、分页总数、查询状态和真实字段样本。
- 新增 RAW 字段映射表，把页面上的车速、总里程、经纬度、SOC 等操作项转换成 `gb32960.*`、`jt808.*`、`yutong_mqtt.*` 的真实 `parsed_fields` 名称。
- 历史 RAW 适配层兼容 `parsed_fields` 为对象或 JSON 字符串两种返回形式，并保留帧类型、接收时间、设备时间、来源端点、字段数量、报文大小和延迟。
- 查询载荷预览继续展示 BFF 请求体，但 JSON 预览被收敛为辅助审计信息，避免遮挡 RAW 结果表这一主任务。

## 2026-07-08 十二次提炼记录

- 轨迹回放页接入真实 `GET /api/history/locations?vin=...`，按当前选中车辆 VIN 查询 TDengine `vehicle_locations`。
- 轨迹点使用设备时间排序，保留接收时间、协议、方向、海拔、`alarm_flag`、速度和总里程证据，避免把设备时间与服务接收时间混用。
- 高德地图回放不再使用 mock 点位；真实模式下地图、节点列表、分段里程、播放滑块和摘要卡片均来自同一批位置点。
- 告警节点文案从“异常”收敛为“告警”，并在节点备注展示 `alarm_flag` 原值，便于和后续告警 API 或 RAW 帧交叉核验。
- 如果某辆车无真实位置点，页面只显示该 VIN 暂无可回放位置点，不借用其他车辆的 mock 轨迹。

## 2026-07-08 十三次提炼记录

- 数据源监控页改为真实数据优先：使用 `GET /api/realtime/locations` 统计协议实时覆盖，使用 `POST /api/history/raw-frames/query` 提取最近 RAW 发送端证据。
- 当前 `/api/ops/source-readiness`、`/api/quality/*`、`/api/alert-events` 等运维接口仍返回 404，因此页面不展示平台配置审批态、人工处理态或质量事件真值。
- 来源端点表在真实模式下展示最近 RAW 样本中的 `source_endpoint`、协议、样本 VIN 数、RAW 样本数、P95 延迟和最近上报时间。
- 页面明确标注：实时位置接口当前未返回 `source_endpoint`，所以在线覆盖来自 realtime locations，发送端证据来自 raw_frames，二者是同一监控视图下的不同证据层。
- 移动端数据源页验证无横向溢出，来源行可纵向查看。

## 2026-07-08 十四次提炼记录

- 告警中心改为真实观测信号：使用 `/api/realtime/locations` 和 `/api/history/locations` 派生链路延迟、字段缺失、协议告警位和能力缺口，不再展示 mock 告警闭环。
- 当前 `/api/alert-events`、`/api/quality/issues`、`/api/alert-events/notification-plan` 仍返回 404，因此页面明确标注“只观测、不通知、不持久化事件”。
- 实时指挥台和轨迹回放接入高德 Web JS API，运行时通过 `window.__LINGNIU_APP_CONFIG__` 注入 Web JS key；未配置或加载失败时才回落到真实坐标预览。
- 实时地图使用 `/api/realtime/locations` 的当前坐标渲染车辆点位，轨迹地图使用 `/api/history/locations?vin=...` 的历史位置点渲染路径和节点。
- 本地验证了高德底图、车辆 marker、轨迹 marker 和轨迹折线均能渲染；原型不提供路径规划、围栏编辑等当前数据层尚未支撑的地图能力。

## 2026-07-08 十五次提炼记录

- 统计分析页真实模式的定位从“按协议日里程”收敛为“实时覆盖、在线状态、速度和最新总里程”，避免在 `/api/mileage/*` 未接入时误导用户。
- 告警中心真实模式的定位从“通知预案”收敛为“观测信号”，只展示实时/历史证据和 durable alert API 缺口。
- 顶部数据流转最后一步从“证据与通知”改为“证据与边界”，明确当前告警/质量 API 未接入时不会提供通知、派单、关闭或升级状态。
- 文档开头同步更新为真实数据优先：优先使用 ECS BFF、Redis/MySQL/TDengine 投影和高德地图，接口缺失时只显示能力边界。
- 真实数据状态条样式改为跟随 `ready`、`fallback`、`error` 等实际状态，不再在接口异常时固定显示成功状态。

## 2026-07-08 十六次提炼记录

- Command 页移除全局 KPI 重复展示，保留页面内实时投影摘要，避免首屏同时出现两套相近指标。
- 顶部数据来源、真实数据状态、流转步骤和 KPI 卡片整体压缩高度，让主工作区更早进入视野。
- 移动端 Command 页改为地图优先、车辆列表其次、车辆详情最后，避免真实地图被长车辆列表压到页面深处。
- 移动端流转步骤改为横向轻量滚动条，KPI 和实时摘要使用双列紧凑布局，减少解释性区域占用。
- 本轮构建验证通过；浏览器截图通道因 IAB CDP 超时和系统屏幕录制权限未授予，视觉截图需在权限恢复后补检。

## 2026-07-08 十七次提炼记录

- 车辆详情增加“看轨迹”和“查 RAW”快捷入口，运营人员可从实时车辆直接进入证据链，不需要重新搜索 VIN。
- URL 增加 `vin` 上下文，支持 `?section=replay&vin=...` 和 `?section=history&vin=...` 直接打开指定车辆。
- 历史查询页在带 VIN 上下文时自动填充顶部搜索和 RAW 查询 payload 的 `vin`，并展示“当前车辆上下文”提示条。
- 历史查询页不再展示实时流转步骤和实时 KPI，避免 RAW 查询某个 VIN 时出现“实时筛选车辆 0 台”的误导信息。
- Browser 验证通过：从实时指挥台点击“查 RAW”会跳转到 `history&vin=...`，点击“看轨迹”会跳转到 `replay&vin=...`，均未出现 Vite 错误覆盖层。

## 2026-07-08 十八次提炼记录

- 历史 RAW 页的顶部筛选收敛为协议筛选，移除状态和来源筛选，避免暗示这些实时维度会参与 `raw-frames/query`。
- 历史 RAW 页隐藏实时位置接入状态条，只保留 TDengine RAW / BFF query 的数据来源说明和查询工作台自身状态。
- 历史 RAW 页顶部提示改为“RAW 按 VIN / 协议 / 字段查询”和“状态和来源不参与历史 RAW 请求”，明确查询口径。
- 实时指挥台仍保留协议、状态、来源三类筛选和实时接入状态，确保监控页能力没有回退。
- Browser 验证通过：`history&vin=...` 页面只剩协议筛选和分页大小选择，`command` 页面仍保留三类实时筛选。

## 2026-07-08 十九次提炼记录

- 轨迹回放页收敛为证据查询页，和历史 RAW 一样隐藏实时接入状态条、实时流转步骤和全局 KPI，只保留轨迹工作台自己的查询证据。
- 轨迹回放页顶部筛选只保留协议筛选，并明确“轨迹按 VIN / 时间窗查询，状态和来源不参与轨迹回放请求”。
- 轨迹回放增加“当前回放车辆”上下文条，展示车牌、VIN、当前可信来源和最近上报时间，避免回放页脱离车辆上下文。
- 历史 RAW 真实请求从旧的 `keyword` 改为后端实际支持的 `vin`，查询预览和请求体保持一致。
- Browser 验证通过：实时指挥台仍保留协议、状态、来源三类筛选和高德地图；点击“查 RAW”会跳转到 `history&vin=...` 并使用 `vin` 请求后端。

## 2026-07-08 二十次提炼记录

- 统计分析页从全局运营摘要中剥离，不再展示“最新总里程按当前来源行合计”这类多源下无业务意义的 KPI。
- 统计页顶部筛选收敛为协议筛选；顶部搜索只用于收缩车辆池，状态和来源筛选不参与统计快照。
- 真实统计摘要改为“实时来源行、在线/行驶、总里程可用、字段覆盖”，表达当前 `/api/realtime/locations` 能直接支撑的能力。
- 统计边界压缩成“已接入 / 未接入 / 可追溯”三段，明确 `/api/mileage/daily` 和 `/api/mileage/summary` 未接入时不展示演示日里程。
- 实时来源明细增加“轨迹”和“RAW”证据入口，可从统计行直接跳到 `vehicle_locations` 回放或 `raw-frames/query` 查询。
- Browser 验证通过：统计页窄屏和 1440×900 桌面视口均无错误覆盖层；从统计明细点击 RAW 可进入 `history&vin=...` 并返回真实 RAW 记录。

## 2026-07-08 二十一次提炼记录

- 告警中心从全局运营摘要中剥离，不再混入实时指挥台的 KPI 和流转步骤。
- 告警页顶部筛选收敛为协议筛选；状态和来源筛选不参与当前观测信号生成，避免暗示已有 durable alert 查询维度。
- 真实告警侧栏增加“轨迹”和“RAW”证据入口，选中具体车辆信号后可直接跳转到 `vehicle_locations` 或 `raw-frames/query`。
- 移除代码层 `notificationPlanPreview` 残留，兜底分支也不再模拟企业微信、邮件、短信通知预案。
- 告警边界统一表达为“不自动通知、不持久化事件、可回溯证据”，等待 `/api/alert-events` 和 `/api/alert-events/notification-plan` 真正上线后再接入闭环。
- Browser 验证通过：告警页只剩协议筛选；从车辆观测信号点击 RAW 可查到真实 RAW 记录，点击轨迹可进入 `replay&vin=...`。

## 2026-07-08 二十二次提炼记录

- 数据源监控页从全局运营摘要中剥离，不再展示实时指挥台的流转步骤、实时状态条或全局 KPI。
- 数据源页顶部筛选收敛为协议筛选；顶部搜索只过滤来源名称、端点、平台账号、负责人和协议，不使用车辆状态或来源筛选。
- 真实来源表增加 RAW 证据入口，按当前协议跳转到 `POST /api/history/raw-frames/query`；由于当前后端不支持 endpoint 查询，入口明确采用协议级证据。
- 来源端点证据保留 `realtime locations` 与 `raw_frames` 两层口径：在线覆盖来自实时位置投影，发送端来自最近 RAW 样本。
- Browser 验证通过：数据源页只有协议筛选、44 个真实来源/端点证据、无全局流转/KPI；点击 RAW 能进入历史查询并返回真实 RAW 结果。

## 2026-07-08 二十三次提炼记录

- 实时指挥台和轨迹回放继续使用真实数据优先：`/api/realtime/locations` 渲染实时车辆点，`/api/history/locations` 渲染历史轨迹点和折线。
- `VehicleMap` 增加“高德地图已加载”状态标识，未配置或加载失败时仍显示坐标预览，评审时可以直接区分高德底图和 fallback。
- AMap Web JS key 和安全配置继续通过运行时 `app-config.js` 注入，本地验证使用现有高德配置，不把地图能力写成 mock。
- Browser 验证通过：实时指挥台显示 109 个真实车辆行和 109 个高德 marker；轨迹回放显示真实 `vehicle_locations`、高德状态和 80 个轨迹 marker。
- 当前原型仍不展示源头无法证明的地图能力，例如路径规划、围栏编辑、逆地理批量刷新和驾驶行为评分，后续需等后端接口上线再接入。

## 2026-07-08 二十四次提炼记录

- 实时指挥台移除全局流转步骤和全局 KPI，避免解释性内容把地图和车辆工作区推到首屏之外。
- Command 工作台布局调整为地图优先：桌面为“高德地图主画布 / 车辆列表 / 车辆详情”，窄屏也保持地图先于列表和详情。
- 实时摘要卡片移动到地图工作台之后，作为辅助概览而不是首屏主任务，首屏主任务变为看车、选车和进入证据链。
- 681-1080px 宽度下侧栏改为紧凑横向导航，生产链路状态留在右侧，避免平板宽度时导航占用三百多像素高度。
- 实时页的数据来源条和真实数据状态条做了压缩，保留 Redis/MySQL/API 证据但降低视觉占位。
- Browser 验证通过：1043px 宽度下顶部导航高度从 338px 降到 106px，地图 top 从 727px 提前到 421px 并进入首屏；1440x900 桌面下地图位于主内容左侧且先于车辆列表。

## 2026-07-08 二十五次提炼记录

- 轨迹回放的“播放”从纯状态按钮改为真实推进时间轴：播放时按节点推进，末尾自动停止，末尾再次点击进入重播。
- 增加 1x / 2x / 4x 回放速度分段控制，默认 2x，便于快速核对轨迹证据和停留片段。
- 手动拖动进度条、点击地图节点或点击轨迹节点时会暂停播放并定位到对应节点，避免自动播放和人工核查互相抢状态。
- 回放控制条增加“节点 x/y + 当前时间”进度说明，让运营人员知道当前播放位置和轨迹总量。
- 移动端控制条改为两列后折行：速度控制和进度说明各占一行，避免 390px 宽度下横向溢出。
- Browser 验证通过：真实轨迹从节点 1/80 自动推进到节点 7/80，播放期间按钮显示“暂停”；390px 移动视口下无横向溢出，高德轨迹和 80 个 marker 正常。

## 2026-07-08 二十六次提炼记录

- 历史 RAW 页增加行级证据查看：点击任意 RAW 行即可选中该记录，并在列表下方展示这条记录本次响应中的 `parsed_fields`。
- RAW 表格行增加选中态、悬浮态和键盘 Enter/Space 选择，运营人员可以用鼠标或键盘核对具体 RAW 证据。
- 详情区展示选中 RAW ID、帧类型、接收时间、返回字段数和延迟，并把字段以扁平 key/value 网格展示，避免只看摘要无法判断字段内容。
- 字段详情只展示当前 `raw-frames/query` 响应中返回的字段，不在前端二次解析完整 payload，保持和后端字段裁剪口径一致。
- 移动端 RAW 字段详情改为单列布局，避免字段 key 较长时撑破页面。
- Browser 验证通过：`history&vin=LB9A32A24R0LS1426` 返回 3 条真实 RAW，点击第二条后选中 RAW 从 `go_0ade...` 切换到 `go_c749...`；390px 移动视口下详情区无横向溢出。

## 2026-07-08 二十七次提炼记录

- 统计分析页增加实时来源明细范围切换：全部、需关注、行驶中、总里程可用，直接基于 `/api/realtime/locations` 当前响应过滤。
- “需关注”只包含离线、字段数为 0 或最新总里程不可用的来源行，不引入尚未上线的 durable 质量事件口径。
- “行驶中”和“总里程可用”分别按车速大于 0、最新总里程大于 0 判断，保持和实时投影字段一致。
- 明细标题同步展示当前范围的行数，例如 `4 of 120 行`，避免用户误以为筛选后代表全部统计规模。
- 过滤后的明细仍保留“轨迹”和“RAW”证据入口，可以从统计页直接跳转到 `vehicle_locations` 或 `raw-frames/query`。
- Browser 验证通过：统计页真实数据下全部 120 行、需关注 4 行、行驶中 33 行、总里程可用 116 行；点击“需关注”后表格变为 4 行，RAW 跳转历史查询无 400；390px 移动视口无横向溢出。

## 2026-07-08 二十八次提炼记录

- 告警中心增加观测信号范围切换：全部、P1、链路延迟、字段缺失、协议告警位、能力缺口。
- 范围计数基于当前协议筛选和顶部搜索后的观测信号集合，不读取尚未上线的 `/api/alert-events` durable 事件。
- P1 仅表示当前观测信号优先级，链路延迟按 `received_at - event_time`，字段缺失按实时投影字段可用性，协议告警位按 `alarm_flag`。
- 切换范围后会自动保持或更新右侧当前信号，右侧仍只提供“轨迹”和“RAW”证据入口，不展示确认、派单、关闭等未接入状态。
- Browser 验证通过：真实告警页全部 80、P1 72、链路延迟 63、字段缺失 0、协议告警位 16、能力缺口 1；点击链路延迟后列表变为 63 行，RAW 跳转历史查询无 400。
- 390px 移动视口下范围切换条宽 370px，无横向溢出。

## 2026-07-08 二十九次提炼记录

- 数据源监控页增加来源健康范围切换：全部、健康、波动、中断。
- 健康范围计数基于当前协议筛选和顶部搜索后的来源端点集合，不读取尚未上线的 `/api/ops/source-readiness` 配置审批态。
- 真实来源健康来自最近 RAW 样本或实时位置投影的最近上报时间，只表示当前观测健康，不表示平台合同、白名单或转发配置完整性。
- 切换到无结果范围时展示空态，避免把 0 个波动/中断端点误显示成全部来源。
- RAW 证据入口仍按协议级跳转 `raw-frames/query`，因为当前后端未提供 endpoint 维度 RAW 查询。
- Browser 验证通过：真实来源页全部 68、健康 68、波动 0、中断 0；点击波动后显示空态；切回全部后 67 个 RAW 入口可跳历史查询并返回结果，无 400。
- 390px 移动视口下来源健康筛选条宽 340px，无横向溢出。

## 2026-07-08 三十次提炼记录

- 继续把原型约束到真实数据和高德地图能力：实时指挥台使用 `/api/realtime/locations` 的真实车辆点渲染 AMap，未配置地图时才进入坐标 fallback。
- 历史 RAW 查询的时间范围从装饰性输入改为真实查询参数，`dateFrom/dateTo` 同时进入右侧载荷预览和 `POST /api/history/raw-frames/query` 请求体。
- 时间范围拆为开始/结束两个输入，默认使用东八区 2026-07-08 全天窗口，避免用户误以为单个字符串只是展示文案。
- RAW 查询仍只使用后端已支持的 VIN、协议、字段裁剪、分页、时间窗，不加入 endpoint、平台账号等当前源头无法证明的查询条件。
- Browser 验证通过：实时指挥台显示 116 台真实车辆和 116 个高德 marker；历史页修改 `dateFrom=2026-07-08T18:00:00+08:00`、`dateTo=2026-07-08T23:30:00+08:00` 后，载荷同步更新且真实 RAW 查询保持已连接。
- 390px 移动视口下历史页无横向溢出，两个时间输入自动上下排列。

## 2026-07-08 三十一次提炼记录

- 实时指挥台继续围绕“地图看车”收敛：高德 marker 不再只是地图散点，选中车辆会在 marker 上显示车牌标签。
- AMap marker DOM 增加稳定的 `data-map-vehicle-id`，便于浏览器验证和后续地图交互扩展；marker HTML 做转义，避免车辆标识直接进入地图内容字符串。
- 点击地图 marker 后，车辆列表、地图选中态和右侧车辆详情共享同一个 active vehicle 状态；列表会自动滚动到当前选中车辆。
- 车辆列表选中行增加 `aria-current`、左侧蓝色强调线和 `scroll-margin`，让键盘/读屏状态和视觉状态一致。
- Browser 验证通过：实时指挥台高德地图渲染 109 个真实 marker，点击 marker 后选中 marker、车辆列表行和详情标题同步为同一台车；列表行保持可见。
- 390px 移动视口下实时指挥台无横向溢出，选中 marker 标签和车辆选中行仍可见。

## 2026-07-08 三十二次提炼记录

- 轨迹回放页增加真实查询条：开始时间、结束时间、节点上限和“查询轨迹”按钮，参数直接进入 `/api/history/locations`。
- 轨迹查询默认使用东八区 2026-07-08 全天窗口，节点上限支持 40、80、160、300，避免回放页只能展示固定 `limit=80` 样例。
- `loadPrototypeTrackPoints` 从固定 URL 改为参数化查询，`dateFrom/dateTo/limit/offset` 都由同一处构造，后续扩展协议或来源筛选更清晰。
- 修复 `?section=replay&vin=...` 的上下文跑偏：如果 URL VIN 不在当前实时快照中，回放页会创建“TDengine 历史轨迹”的轻量车辆上下文，继续按该 VIN 查询历史位置。
- 空结果状态也保留轨迹查询条，用户可以调整时间窗继续查询，不会被空态卡住。
- Browser 验证通过：打开 `replay&vin=LB9A32A24R0LS1426` 后 source URL 使用该 VIN；修改为 `dateFrom=2026-07-08T12:00:00+08:00`、`dateTo=2026-07-08T13:00:00+08:00`、`limit=40` 后，真实 URL 同步更新且地图 marker 变为 40 个。
- 390px 移动视口下轨迹查询条无横向溢出，长查询来源 URL 会换行显示。

## 2026-07-08 三十三次提炼记录

- 统计分析页增加“多源一致性观察”，只基于当前 `/api/realtime/locations` 已有 sources，不假装 `/api/mileage/daily` 已上线。
- 统计摘要新增“多源可校验”，展示同一 VIN 有两个及以上实时来源的车辆数，以及其中需要关注的车辆数。
- 多源一致性表展示车辆、来源覆盖、可信候选来源、实时总里程差、最近上报时间差、结论和证据入口。
- 统计页专用结论优先级调整为：全部离线、部分来源离线、里程差异、时间差异、可交叉校验；避免“缺少第三协议”盖住真正影响统计判断的里程差。
- 可信候选来源只作为当前态展示候选，按在线、总里程可用、字段数、最近上报排序，不替代正式的统计来源选举配置。
- Browser 验证通过：真实统计页显示 4 台多源可校验车辆，首行 `LMRKH9AC2R1004087` 识别为“里程差异偏大”；从一致性行点击 RAW 可跳到历史查询，并带上对应 VIN 和可信协议 `JT808`。
- 390px 移动视口下多源一致性表无横向溢出，行内容展开为字段式卡片。

## 2026-07-08 三十四次提炼记录

- 告警中心增加“观测阈值”面板，把当前前端观测信号的判断规则显式展示出来，避免用户误解为已经存在 durable alert 规则配置。
- 链路延迟阈值支持 10s、30s、60s 前端切换；切换只影响当前页筛选，不写入后端告警规则。
- P1 标准、字段缺失规则和协议告警位规则在页面上直接展示：链路延迟大于 60s 或平台能力缺口为 P1；字段缺失检查经纬度、总里程和 32960 SOC；协议告警位按 `alarm_flag > 0`。
- 信号范围计数改为基于阈值后的观测信号集合，切换阈值时“全部、P1、链路延迟”等数量同步变化。
- Browser 验证通过：真实告警页默认 10s 阈值下全部 80、链路延迟 78；切换到 60s 后全部收敛到 78、链路延迟收敛到 76。
- 390px 移动视口下阈值面板无横向溢出，10s/30s/60s 控制可见。

## 2026-07-08 三十五次提炼记录

- 数据源监控页增加来源选中态和“来源详情”面板，不再只是一张不可深入的端点列表。
- 来源行支持鼠标点击和键盘 Enter/Space 选择；选中行有蓝色左侧强调线，并同步详情面板。
- 来源详情展示协议、平台账号、发送端、覆盖车辆、P95 延迟、最近上报和健康判定原因。
- 健康阈值在详情中明确展示：90 秒内健康，90 秒到 10 分钟波动，超过 10 分钟中断。
- 排查入口保留“查看 RAW 证据”，并明确当前后端未提供 endpoint 维度 RAW 查询，入口只能按协议过滤。
- Browser 验证通过：真实来源页显示 64 个来源，点击第二行后详情切换到 `mqtt://yutong/ytforward/shln/0`；从详情点击 RAW 可跳转历史查询，并带上 `YUTONG_MQTT` 协议。
- 390px 移动视口下来源行和详情面板无横向溢出，详情网格自动单列显示。

## 2026-07-08 三十六次提炼记录

- 实时指挥台的车辆详情“来源”页签增加每个来源自己的证据入口，不再只依赖顶部车辆级快捷按钮。
- 来源卡片保留“当前展示”标识，并在同一卡片内提供“轨迹”和“RAW”两个操作；轨迹按 VIN 回放，RAW 按该来源协议进入历史查询。
- 这个设计只使用当前源头已能证明的数据：车辆来源来自 `/api/realtime/locations` 的 sources，轨迹来自 `vehicle_locations`，RAW 来自 `raw-frames/query`。
- RAW 入口验证通过：从真实 MQTT 来源卡片进入历史查询后，载荷包含当前 VIN `LMRKH9AC1R1004114` 和协议 `YUTONG_MQTT`，并成功返回真实 RAW 字段。
- 轨迹入口验证通过：从来源卡片进入轨迹回放后，URL 带当前 VIN，并按 `/api/history/locations` 返回 80 个真实位置点。
- 390px 移动视口下来源卡片宽 340px，两个操作按钮保持 44px，页面无横向溢出。

## 2026-07-08 三十七次提炼记录

- 历史 RAW 页增加“车辆排查上下文条”，把顶部搜索或快捷入口带来的 VIN 识别为实时车辆上下文。
- 匹配到 `/api/realtime/locations` 中的车辆时，上下文条展示车牌、VIN、在线态、当前主来源、最近上报和该车已有协议来源；未匹配时明确显示“仅按输入条件查询 RAW”。
- 上下文条提供“实时地图”和“轨迹”两个操作，分别回到 AMap 指挥台和 TDengine `vehicle_locations` 回放页，形成 `RAW -> 实时态 -> 轨迹` 的排查闭环。
- 这个能力没有新增后端假接口：上下文来自实时位置快照，RAW 仍来自 `raw-frames/query`，轨迹仍来自 `/api/history/locations`。
- Browser 验证通过：打开 `?section=history&vin=LMRKH9AC1R1004114` 后识别为 `沪A39286F`，RAW 查询已连接；点击“实时地图”后地图选中、车辆列表和详情标题同步到该车；点击“轨迹”后返回 80 个真实位置点。
- 390px 移动视口下上下文条宽 340px，无横向溢出，两个操作按钮可见可点。

## 2026-07-08 三十八次提炼记录

- 车辆详情“实时字段”页签从纯字段列表升级为“核心字段 + 全量字段”两层结构，减少业务排查时先找字段名的成本。
- 核心字段包括车速、总里程、坐标、SOC、方向和事件时间；值优先来自当前协议 `flatFields`，缺失时才使用实时来源或车辆投影值兜底。
- 核心字段卡片可点击，点击后自动把下方全量字段列表过滤到对应 key；缺失字段明确标识为缺失且不可点击。
- 字段摘要展示“命中 / 全量”数量，说明当前列表只是 Redis realtime-raw 扁平字段的筛选视图，不重新解析 RAW。
- Browser 验证通过：真实车辆 `LMRKH9AC1R1004114` 的 MQTT 实时字段显示 6 个核心字段、全量 9 字段；点击“总里程”后搜索框变为 `mqtt.realtime.total_mileage_km`，列表收敛到 1 行。
- 坐标显示保留 5 位小数，SOC 去掉多余空格；390px 移动视口下核心字段两列布局宽 340px，无横向溢出。

## 2026-07-08 三十九次提炼记录

- 轨迹回放页增加“当前节点证据”条，展示当前播放节点的时间、节点类型、速度和总里程，并提供 `查 RAW` 入口。
- `查 RAW` 不新增后端能力，直接复用历史 RAW 查询，按当前 VIN 和回放车辆主来源协议进入 `/api/history/raw-frames/query`。
- 右侧“轨迹节点”时间轴增加 active 节点自动跟随；播放、拖动或点击地图节点后，当前节点会滚动到可见区域，避免长轨迹回放时操作员丢失上下文。
- Browser 验证通过：真实车辆 `LMRKH9AC1R1004114` 的轨迹回放显示 80 个位置点；当前节点证据条展示 `23:58:39 / 39 km/h / 80,801.0 km`，点击 `查 RAW` 后历史页载荷包含 VIN 和 `YUTONG_MQTT` 协议，并返回真实 RAW。
- 4x 播放验证通过：播放到第 27/80 个节点时，当前节点证据、进度文案和时间轴 active 节点同步，active 节点保持在视口内。
- 390px 移动视口下当前节点证据条宽 340px，RAW 按钮完整可点，无横向溢出。

## 2026-07-08 四十次提炼记录

- 实时指挥台的 AMap 面板增加真实数据覆盖条，展示坐标覆盖、在线车辆、32960/808/MQTT 协议覆盖和当前地图能力。
- 地图能力只基于前端可确认的配置判断：配置了高德 Web JS Key 时标记为 `AMap JS API`，否则明确是坐标预览模式。
- 选中车辆浮层增加“轨迹”和“RAW”两个证据入口，分别复用 `/api/history/locations` 与 `/api/history/raw-frames/query`，从地图点一跳进入历史证据。
- 历史 RAW 详情增加字段检索，支持按 parsed field 的 key 或 value 搜索，并展示命中数量与本次响应返回字段数量。
- RAW 字段检索只过滤当前接口返回的 `parsed_fields`，不在前端重新解析原始协议，保持与 TDengine 查询结果一致。
- 移动端地图覆盖条折成两列，车辆浮层下移避免遮挡；RAW 字段检索折成单列，避免长字段名导致横向溢出。
- Browser 视觉复查修正：覆盖条移动到 `VehicleMap` 叠加层内，避免被高德地图 canvas 覆盖；`高德地图已加载` 状态挪到底部，避免压住坐标覆盖卡片。
- 车辆焦点浮层的“轨迹 / RAW”按钮补充对比度，保证地图证据入口在白底浮层中清晰可读。

## 2026-07-08 四十一次提炼记录

- 统计分析页继续收敛到真实源头能力：真实模式只展示 `/api/realtime/locations` 可证明的在线、速度、最新总里程、字段覆盖和多源一致性观察。
- 统计页新增“统计能力状态”，明确区分当前可用、可回溯和未接入能力；日里程聚合、趋势统计、排名在统计 API 或 `vehicle_daily_mileage` 未接入前不展示假数值。
- “统计能力状态”上移到统计页第一屏摘要之前，让 `未接入日里程聚合 / 趋势统计` 先于数字指标出现，避免用户先看到指标再猜口径。
- 非真实模式的统计页不再渲染 mock 日里程表，只保留能力蓝图和统计口径说明，避免把原型样例误读为真实统计结果。
- 来源监控页新增“来源证据分层”，把实时覆盖、TDengine RAW 端点和平台台账分开说明；RAW 样本端点不再被表达成完整平台配置台账。
- 来源详情补充“这条记录证明 / 不证明 / 需要补强”三段证据解释，说明当前端点健康来自 RAW 样本，endpoint 维度 RAW 查询和台账关联仍是后续后端能力。
- 1080px 和 680px 断点补充统计能力卡片、来源证据卡片的响应式规则，保持白底工作台布局在移动端可读。

## 2026-07-09 四十二次提炼记录

- 历史 RAW 查询和轨迹回放的默认时间窗从硬编码 `2026-07-08` 改为浏览器当前时间对应的东八区今日窗口。
- 新增统一时间快捷按钮 `今日 / 昨日 / 近1小时`，历史 RAW 与轨迹回放共用同一套时间范围生成逻辑。
- 历史 RAW 查询 effect 补充 `historyDateFrom/historyDateTo` 依赖，修复改时间后右侧 payload 更新但真实请求不一定重新执行的问题。
- 轨迹回放页的 mock 标签从具体旧日期改为 `mock 轨迹`，避免当前日期变化后造成误导。
- 这个调整保持后端接口不变，仍然只向 `/api/history/raw-frames/query` 和 `/api/history/locations` 传递 `dateFrom/dateTo`。

## 2026-07-09 四十三次提炼记录

- 实时数据转换补充 `lastSeenAt` 原始上报时间，车辆多协议合并选择主展示来源时优先使用原始时间戳，不再用“xx 秒前”展示文案反推时间。
- 统计页和来源一致性判断同步使用原始时间戳兜底，避免真实数据、mock 数据和绝对时间字符串出现不同的“最近上报”排序口径。
- 实时指挥台 AMap 覆盖条新增“来源健康”，展示当前筛选车辆下在线、关注、离线来源行数量。
- 地图选中车辆浮层新增三协议字段覆盖标签，直接显示 32960 / 808 / MQTT 当前实时字段数和在线态，不需要先进入详情页才能判断该车有哪些协议数据。
- 本轮没有新增后端接口，仍只基于 `/api/realtime/locations` 转换后的 `vehicle_realtime_location` / `vehicle_realtime_snapshot` 视图表达实时状态。

## 2026-07-09 四十四次提炼记录

- 实时字段检查器的每个扁平字段行新增 `RAW` 排查入口，可从车辆详情直接带 VIN、协议和字段名进入历史 RAW 查询。
- 历史 RAW 查询页新增“来自实时字段定位”上下文条，展示实时字段 key、协议和自动生成的字段搜索词。
- 字段定位复用现有 `/api/history/raw-frames/query`，通过已有 `fields` 裁剪和 RAW 字段搜索完成，不新增后端接口。
- 字段名能匹配现有标准字段预设时自动映射到 `speed_kph`、`total_mileage_km`、`lat_lon` 等字段裁剪；无法识别时保留原始字段路径作为自定义裁剪字段。
- 清除字段定位时恢复默认 RAW 字段组合，避免隐藏的自定义字段继续影响后续查询。
- 页面模块切换时滚动回顶部，保证从实时字段跳转到历史 RAW 后第一眼能看到 VIN、协议和字段定位上下文。

## 2026-07-09 四十五次提炼记录

- 历史 RAW 字段定位上下文写入 URL，新增 `protocol/rawField/rawQuery/fieldPreset` 参数，支持刷新和分享后继续恢复同一条实时字段排查语境。
- 只有历史 RAW 页会保留字段级参数；切换到实时指挥台、轨迹、告警、统计或来源监控时自动清理字段定位参数，避免跨模块误用。
- 直接打开深链时会根据 URL 还原协议筛选、返回字段裁剪、字段搜索词和“来自实时字段定位”提示条。
- 从实时字段点击 `RAW` 会同时写入 VIN、协议、原始字段 key、RAW 搜索词和字段预设，形成 `Redis 实时字段 -> TDengine RAW 字段` 的可复现证据链。
- 清除字段定位会移除 URL 中的字段参数，并恢复默认 RAW 字段组合，但保留当前 VIN 和协议查询条件。

## 2026-07-09 四十六次提炼记录

- 实时指挥台地图覆盖条从纯覆盖率升级为真实数据 + AMap 状态面板，展示坐标覆盖、在线车辆、来源健康、协议覆盖、最近刷新和底图模式。
- 地图状态只使用现有真实来源：车辆点与刷新时间来自 `/api/realtime/locations`，在线态来自实时来源行，高德状态来自运行时 AMap 配置。
- 选中车辆地图浮层补充“坐标来源”，展示当前主来源协议和 endpoint，便于判断地图点位来自 32960、808 还是 MQTT。
- 修复手机端从 URL 打开指定车辆时，车辆列表 active row 自动滚动导致页面整体下移的问题；现在只滚动车辆列表内部容器。
- Browser 验证通过：桌面端高德底图已加载，地图覆盖条显示真实车辆点和最近刷新时间；390px 移动端无横向溢出，地图指标首屏可见。

## 2026-07-09 四十七次提炼记录

- 实时指挥台新增“新鲜度筛选”，支持全部、10 秒内、1 分钟内、超过 1 分钟四种口径。
- 新鲜度只基于现有实时投影：优先使用 `/api/realtime/locations` 转换出的 `lastSeenAt`，没有绝对时间时再使用 `lastSeen` 文案解析；不新增后端能力。
- 新鲜度筛选只作用于实时指挥台的地图、车辆列表、详情和实时摘要；历史 RAW、轨迹、统计和来源监控不受这个实时维度影响。
- 当筛选条件下没有实时车辆时，地图和详情显示空态，不继续展示一辆不在筛选结果里的车辆。
- 这个能力用于值班排查“当前真的有数据上来吗”，不是 durable alert 规则，也不替代后端断链预警。

## 2026-07-09 四十八次提炼记录

- 车辆详情概况页新增“车辆服务可信度”卡片，把来源一致性判断提前到第一眼可见的位置。
- 可信度只基于当前实时 sources：在线来源数、实时总里程差、最近上报时间差和 `getSourceConsistency` 规则；不引入新的后端来源选举结论。
- 卡片提供“查看来源”和“查 RAW”两个入口，分别进入来源明细和 TDengine RAW 证据查询。
- 来源页签的每路来源卡片补充速度、总里程、今日里程，让多协议来源之间的差异可以直接对比。
- 这个设计表达“当前服务是否可信、是否需要排查”，不是统计服务最终采用哪个来源的正式业务规则。

## 2026-07-09 四十九次提炼记录

- 实时指挥台筛选状态写入 URL，支持 `protocol/status/source/freshness/q/tab` 深链恢复。
- 详情页签支持深链，`tab=sources` 可直接打开车辆来源一致性页签，`tab=fields` 可直接打开实时字段页签。
- URL 同步只在用户操作实时指挥台时发生，避免真实数据加载早期把链接中的 VIN 意外覆盖。
- 离开实时指挥台进入历史 RAW、轨迹、告警、统计或来源监控时，实时筛选参数会自动清理，避免跨模块误用。
- 这个能力让排查现场可分享：车辆 VIN、实时筛选条件、搜索词和详情页签可以在刷新或发链接后保留。

## 2026-07-09 五十次提炼记录

- 本地 Vite 开发代理不再转发 `/app-config.js`，让原型能读取 `public/app-config.js` 中的高德 Web JS 配置；`/api` 和 `/_AMapService` 仍继续代理到 ECS。
- 实时指挥台地图增加“地图与真实数据底座”状态条，展示 AMap Web JS、地图安全模式、真实实时数据行数和服务端地址解析状态。
- 选中车辆浮层增加“地址解析”状态：若 `/api/map/reverse-geocode` 可用则展示 AMap 解析地址和区域；当前 ECS 20200 返回 404 时明确显示“服务端未接入”，不伪造地址。
- 地图状态与车辆点位都来自真实源头：点位、在线态、刷新时间来自 `/api/realtime/locations`；高德底图来自 AMap Web JS API；逆地理编码只使用后端已有或待部署的 `/api/map/reverse-geocode`。
- Browser 验证通过：本地 `/app-config.js` 已返回 AMap 配置，实时接口返回真实 32960/808/MQTT 数据，实时指挥台展示 109 台真实车辆，AMap 底图已加载，服务端逆地理编码显示 `HTTP 404` 边界。
- 深链验证通过：`?section=command&vin=LB9A32A21R0LS1643&protocol=JT808&status=online&tab=sources&q=...` 可恢复到来源页签；跳转历史查询后实时筛选参数会清理。
- 390px 移动视口验证通过：地图底座状态条折成单列，页面无横向溢出，AMap 底图仍能加载。

## 2026-07-09 五十一次提炼记录

- 实时指挥台地图浮层的证据入口从 `轨迹 / RAW` 扩展为 `轨迹 / 高德 / RAW`。
- `高德` 按钮使用当前真实车辆坐标生成 `https://uri.amap.com/marker` 链接，用于在服务端逆地理编码尚未部署时仍能进行地图核验。
- 按钮只在车辆经纬度有效时启用；验证时只读取 `data-amap-marker-url`，没有实际打开外部高德链接，避免测试过程外发坐标。
- 三个按钮保持等宽短标签，桌面浮层为 76px 三列，390px 移动视口为 102px 三列，均无横向溢出。
- Browser 验证通过：真实车辆浮层生成的高德链接包含当前经纬度、车牌和 VIN；AMap 底图已加载，实时车辆列表仍来自 `/api/realtime/locations`。

## 2026-07-09 五十二次提炼记录

- 抽出 `src/integrations/amap.ts` 作为高德集成层，统一管理 AMap Loader、Marker 外链和 Geocoder 逆地理编码，避免地图能力分散在页面组件里。
- `VehicleMap` 改为复用高德集成层加载 `AMap.Scale`，实时地图和轨迹地图仍使用同一套高德底图、Marker 和折线渲染逻辑。
- 选中车辆地址解析改为“两段式”：优先请求后端 `/api/map/reverse-geocode`；当前 ECS 接口返回 404 时，自动回落到高德 Web JS `AMap.Geocoder` 对真实经纬度反查。
- 原型仍明确保留生产边界：高德 Web JS Geocoder 用于本地验证真实坐标闭环，正式服务建议把服务端 API Key 和安全代理放到 BFF/ECS，不把服务端能力写死在前端。
- Browser 验证通过：实时指挥台显示 108-116 台真实车辆、AMap 底图正常加载、地图上渲染 108+ 个真实 Marker，选中车辆地址显示 `AMap Web JS 已解析`。
- 390px 移动视口验证通过：高德 Marker、真实车辆覆盖条、地图底座状态条和地址解析结果均可见，页面无横向溢出。

## 2026-07-09 五十三次提炼记录

- 轨迹回放页的当前节点浮层接入同一套高德地址解析：当前节点优先显示 `AMap Geocoder` 解析后的地址，仍保留原始 `vehicle_locations` 位置点说明。
- 当前节点证据条新增“地图地址”和“高德坐标”入口，坐标链接由当前 `vehicle_locations` 节点经纬度生成；验证时只读取 `data-amap-track-marker-url`，不主动打开外部高德页面。
- 修复轨迹地图视觉空白问题：`.vpc-track-canvas-amap .vp-map { height: 100% }` 在父容器只有 `min-height` 时会导致 AMap 容器实际高度为 0。现在为实时地图和轨迹地图补充高优先级稳定高度，避免 DOM 有 Marker 但用户看不到地图。
- Browser 验证通过：`?section=replay&vin=LB9A32A26R0LS1668` 返回 80 个真实轨迹节点，AMap 底图、轨迹 Marker、当前节点地址和高德坐标按钮均可见。
- 390px 移动视口验证通过：轨迹地图高度 420px、80 个 Marker、地址解析和高德坐标入口正常，页面无横向溢出。

## 2026-07-09 五十四次提炼记录

- 历史 RAW 详情新增“RAW 定位证据”区，从 `parsed_fields` 自动识别经纬度、速度、总里程、方向和海拔字段。
- 坐标识别优先使用三类协议的结构化字段路径：JT808 的 `*.location.*`、宇通 MQTT 的 `*.data.*`，再兜底到 `root.data.*`，避免同一 RAW 中重复字段导致 UI 指向不直观。
- 当选中 RAW 包含有效经纬度时，详情区展示坐标值、来源字段路径、速度、总里程，并提供“高德坐标”和“查轨迹”两个证据入口。
- 该能力只读取当前 `POST /api/history/raw-frames/query` 返回的真实 `parsed_fields`，不新增后端接口，也不从 RAW 外部推断坐标。
- Browser 验证通过：`?section=history&vin=LB9A32A26R0LS1668&protocol=JT808` 的 `0x0200` RAW 自动识别 `jt808.location.latitude / jt808.location.longitude`，生成高德坐标链接，移动 390px 视口无横向溢出。

## 2026-07-09 五十五次提炼记录

- 历史 RAW 查询结果区新增“时间窗核验”，直接比较当前查询 `dateFrom/dateTo` 与返回 RAW 的接收时间、设备时间。
- 核验结果分为通过、关注、无数据三种状态；当返回 RAW 接收时间不在当前查询窗口内时，用黄色证据条提示用户核对后端时间口径。
- 核验条展示接收时间范围、设备时间范围、接收时间越界条数和设备/接收时间偏差条数，便于判断问题来自查询口径、设备时间还是链路延迟。
- 该能力只基于当前页 `raw_frames/query` 返回的真实 `receiveTime/deviceTime`，不修改请求、不修饰后端返回，也不假定后端已经统一时间口径。
- Browser 验证通过：`?section=history&vin=LB9A32A26R0LS1668&protocol=JT808` 在 2026-07-09 查询窗口下返回 2026-07-08 接收时间，页面正确提示“接收时间与查询窗不一致”，390px 移动视口无横向溢出。

## 2026-07-09 五十六次提炼记录

- 统计分析页新增“真实统计接口探测”，浏览器直接请求后端接口，避免页面展示源头尚未支撑的统计能力。
- 当前探测 `/api/realtime/locations?limit=1&offset=0` 与 `/api/mileage/daily?limit=1&offset=0`：实时位置接口用于在线、位置、速度和最新总里程；日里程接口未接入时明确标记为 `HTTP 404`。
- 探测结果只作为原型事实说明，不参与 KPI 计算；日里程聚合、趋势和排名仍不使用 mock 结果伪造。
- 统计页继续使用真实实时位置汇总协议覆盖、多源一致性和来源明细，真实数据不足的部分通过“统计边界”和“接口探测”解释。
- Browser 验证通过：桌面端探测显示实时接口可用、日里程接口未接入；390px 移动视口卡片单列展示，页面无横向溢出。

## 2026-07-09 五十七次提炼记录

- 告警中心的观测信号模型补充经纬度、速度和总里程；这些字段只来自 `/api/realtime/locations` 与 `/api/history/locations` 的真实 rows。
- 告警详情侧栏新增“定位证据”，有坐标的车辆信号展示坐标、速度、总里程，并生成高德 `uri.amap.com/marker` 坐标入口。
- 默认选中逻辑调整为优先选中带车辆坐标的观测信号，而不是优先选中“Durable 告警 API 未接入”这种平台能力缺口。
- 移动端告警工作台调整顺序：先展示当前信号、轨迹/RAW 和定位证据，再展示长列表，减少手机端排查路径。
- Browser 验证通过：`?section=alerts` 默认选中真实车辆链路延迟信号，生成高德 marker URL；390px 移动视口无横向溢出，告警详情和定位证据在列表前可见。

## 2026-07-09 五十八次提炼记录

- 来源监控聚合层新增 `protocolEvidence`，按 GB32960、JT808、宇通 MQTT 汇总实时投影行数、RAW 样本数、端点数、缺 endpoint 行数和端点健康分布。
- 来源页新增“协议来源证据矩阵”，把 Redis/MySQL 实时投影与 TDengine RAW 样本放在同一个协议视角下对比，便于判断实时层、RAW 层是否能互相印证。
- 矩阵保留明确边界：它不证明 `vehicle_data_source` 平台台账完整，不展示审批/配置状态；正式平台名称、来源 IP/端口和维护状态仍需 ops API 或台账接口。
- 每个协议矩阵卡提供 RAW 入口，当前后端仍按协议回查，暂不假设 endpoint 维度查询能力已经上线。
- Browser 验证通过：`?section=sources` 显示三类协议真实矩阵，当前样本约 300 条实时行、240 条 RAW 样本、47-64 个端点；390px 移动视口单列展示，页面无横向溢出。

## 2026-07-09 五十九次提炼记录

- 历史 RAW 查询结果区新增“返回体控制”审计，展示当前是否为字段裁剪查询、请求字段数、命中字段数、空 `parsed_fields` 行数和本页 RAW 字节量。
- 字段命中审计按当前页真实 `parsed_fields` 计算，逐个展示请求字段在本页 RAW 行中的命中次数；未命中的跨协议字段不会被隐藏。
- 审计条明确说明查询使用 POST body，避免 URL 长度限制；字段裁剪只影响响应体，不改变 TDengine RAW 存储。
- 该能力复用当前 `POST /api/history/raw-frames/query` 响应，不新增后端接口，不重新解析 RAW。
- Browser 验证通过：`?section=history&vin=LB9A32A24R0LS1426&protocol=GB32960&fieldPreset=total_mileage_km` 返回 3 条真实 RAW，显示 12 个请求字段、4/12 命中、1/3 空解析行；390px 移动视口无横向溢出。

## 2026-07-09 六十次提炼记录

- 轨迹回放页新增“轨迹质量审计”，直接基于真实 `GET /api/history/locations` 返回的 `vehicle_locations` 点计算，不新增接口，也不使用 mock 轨迹补齐。
- `TrackPoint` 保留 `timestampMs`，用于计算轨迹时间跨度和相邻点最大间隔；该字段来自真实设备时间或接收时间解析，不影响已有兜底数据。
- 审计展示 GPS 距离、总里程差、最大时间间隔、重复坐标段、低速停留段和点数，帮助判断轨迹是否适合直接回放。
- 当轨迹点数不足、重复坐标比例过高或存在较大时间间隔时，页面标记为“轨迹需关注”，提示运营人员结合 RAW 和位置明细确认。
- Browser 验证通过：`?section=replay&vin=LB9A32A26R0LS1668` 返回 80 个真实轨迹点，审计识别 79/79 段重复坐标、GPS 距离 0.00 km、总里程差 0.00 km；390px 移动视口下审计条和高德轨迹地图无横向溢出。

## 2026-07-09 六十一次提炼记录

- 实时指挥台新增“实时数据质量队列”，从当前筛选车辆的 `/api/realtime/locations` 投影派生，不新增后端接口，不把登录、鉴权等非实时业务帧放入运营展示。
- 队列按 1 分钟内活跃、超过 1 分钟、坐标不可用、总里程缺失、字段偏少五类展示，帮助值班人员先定位数据质量问题，再进入车辆详情、轨迹或 RAW。
- 每个质量分类展示 2 台真实样本车和剩余数量，点击样本车会联动地图选中态与右侧车辆详情。
- 窄屏布局改为横向质量工具条：地图和车辆列表之后、详情之前出现，避免质量卡片把移动端页面拉得过长。
- Browser 验证通过：实时页当前返回 106-107 台真实车辆，质量队列识别总里程缺失 0-3 台、坐标不可用 0 台；1043px 与 390px 视口均无页面横向溢出，点击样本车可切换详情。

## 2026-07-09 六十二次提炼记录

- 修复移动端车辆详情页签被全局单列规则误伤的问题；`概况 / 实时字段 / 来源 / 告警` 恢复为同一行四段式控件。
- 保留实时指标网格在移动端单列展示，但不再让 `vpc-tabs` 跟随单列规则，避免详情页签变成过高的纵向块。
- 移动端页签高度压缩到 36px，按钮高度 30px，适合在车辆详情中快速切换概况、字段、来源和告警。
- Browser 验证通过：390px 视口下四个详情页签均在同一行，页面无横向溢出；点击“实时字段”后字段检查器正常显示，控制台无错误。

## 2026-07-09 六十三次提炼记录

- 压缩移动端实时指挥台首屏证据区：`Redis / MySQL` 数据来源改为横向短标签，真实数据接入状态改为状态、车辆数和刷新时间的短证据栏。
- 该压缩只作用于 `command` 实时页；轨迹、历史 RAW、告警、统计和来源监控仍保留完整数据来源说明，避免证据页丢失上下文。
- 移动端隐藏实时接口长 endpoint，保留 `/api/realtime/locations` 的真实接入状态语义，让地图更早进入视野。
- Browser 验证通过：390px 视口下地图顶部约从 628px 提前到 516px，首屏已能看到高德地图区域、坐标覆盖和在线车辆指标；页面无横向溢出，控制台无错误。

## 2026-07-09 六十四次提炼记录

- 优化移动端历史 RAW 查询结果区：`RAW 返回体控制与字段命中` 不再把每个请求字段纵向展开，改为横向可滑动的字段命中证据条。
- 桌面端仍保留完整字段命中网格；移动端只压缩展示方式，不减少真实 `raw-frames/query` 返回的字段命中信息。
- RAW 返回体审计里的请求字段、命中字段、空解析行和 RAW 字节指标卡在移动端降低高度，让 RAW 表格和时间窗核验更早进入视野。
- Browser 验证通过：`?section=history&vin=LB9A32A24R0LS1426&protocol=GB32960&fieldPreset=total_mileage_km` 在 390px 视口下字段审计高度从约 817px 降到 444px，页面无横向溢出，控制台无错误。

## 2026-07-09 六十五次提炼记录

- 统计分析页增加真实明细的分段展示控制：多源一致性默认展示前 10 台，实时来源明细默认展示前 20 行，均可继续加载更多或收起。
- 该优化只控制前端渲染数量，不改变统计计数；顶部摘要、筛选计数和提示文案仍基于全部真实 `/api/realtime/locations` 来源行。
- 移动端避免一次性渲染 120 行来源明细和 30 台多源车辆，减少超长滚动，让统计能力状态、接口探测、协议覆盖、多源观察和明细区更容易逐段阅读。
- Browser 验证通过：390px 视口下统计页默认渲染 10 台多源一致性行和 20 条实时来源行，页面高度从约 30,781px 降到约 13,401px；点击“再显示 10 台”后多源一致性行从 10 台展开到 19 台，页面无横向溢出，控制台无错误。

## 2026-07-09 六十六次提炼记录

- 实时指挥台继续按真实数据 + AMap API 验证：`/api/realtime/locations` 返回的车辆坐标直接渲染到高德 Web JS 地图，不用静态地图图层或 mock 点位。
- 地图第一屏保留真实证据条：坐标覆盖、在线车辆、来源健康、协议覆盖、最近刷新、底图模式和地址解析均来自当前真实响应或高德 API 状态。
- 数据源监控页增加来源端点证据分段展示：默认展示 12 个来源端点，可继续加载更多或收起；筛选、健康计数和协议矩阵仍基于全部真实样本。
- 移动端避免一次性渲染 72 个端点，把来源详情从超长列表后提前到默认来源列表之后；该优化只控制前端渲染数量，不改变 `/api/realtime/locations + raw-frames/query` 的证据口径。
- Browser 验证通过：桌面端实时指挥台加载高德底图，当前渲染 103 个真实车辆 marker，地址解析返回 AMap Web JS 地址；390px 来源页默认渲染 12 个端点，点击“再显示 12 个”后扩展到 24 个，页面无横向溢出，控制台无错误。

## 2026-07-09 六十七次提炼记录

- 轨迹回放页把真实轨迹节点改为分段展示：默认只渲染当前播放节点附近 12 个节点，地图、滑块、播放进度、质量审计仍使用全部真实轨迹点。
- 分段里程列表默认展示 12 段，可继续加载更多或收起；轨迹摘要、GPS 距离、总里程差和质量审计仍基于全部 `vehicle_locations` 返回点。
- 节点窗口增加说明文案，明确“当前只控制前端渲染数量”，避免运营人员误以为后端只返回了 12 个点。
- 该优化解决真实轨迹 80 点直接铺开导致的超长页面问题，同时保留“查看全部节点”和“再显示 12 段”的审计展开能力。
- Browser 验证通过：默认桌面轨迹页仍渲染 80 个高德 marker，但 DOM 只渲染 12 个节点和 12 个分段，页面高度从约 16,090px 降到 4,568px；390px 移动端高度从约 20,375px 降到 6,382px，页面无横向溢出，控制台无错误。

## 2026-07-09 六十八次提炼记录

- 告警中心真实观测信号列表增加分段展示：默认只渲染 12 条信号，可继续“再显示 12 条”或收起。
- 该优化只控制前端列表渲染量，不改变观测信号摘要、P1 计数、类型范围计数和阈值筛选；这些计数仍基于全部 `/api/realtime/locations + /api/history/locations` 真实样本。
- 页面继续明确 durable alert API 当前为 404：当前告警中心只表达链路延迟、字段缺失、协议告警位和能力缺口，不伪造成通知、派单、确认、关闭闭环。
- 移动端告警列表收短后，“信号证据”能紧跟列表出现，值班人员可以更快从观测信号进入 VIN、协议、设备时间等证据。
- Browser 验证通过：桌面端默认渲染 12 / 32 条观测信号，点击后扩展到 24 条；390px 移动端默认渲染 12 / 30 条观测信号，页面高度从约 8,100px 降到 5,423px，页面无横向溢出，控制台无错误。

## 2026-07-09 六十九次提炼记录

- 统计分析页增加视口自适应展示量：桌面端仍默认展示 10 台多源一致性车辆和 20 行实时来源明细，移动端默认收敛为 6 台和 8 行。
- 该优化只影响前端默认渲染数量，不改变协议覆盖、在线/行驶、字段覆盖、多源可校验、范围筛选和 API 探测的真实统计口径。
- 移动端“再显示”步长同步改为 6 台 / 8 行，避免一次点击后页面突然变成长报表；桌面端仍保持 10 台 / 20 行的高密度操作效率。
- 统计页标题中的 `of` 改为中文 `/` 口径，保持中台界面文案一致。
- Browser 验证通过：桌面端保持 10 台多源车辆和 20 行实时来源明细；390px 移动端默认渲染 6 台和 8 行，页面高度从约 13,275px 降到约 8,201-8,309px，点击“再显示 8 行”后扩展到 16 行；页面无横向溢出，控制台无错误。

## 2026-07-09 七十次提炼记录

- 数据源监控页增加视口自适应来源端点展示量：桌面端仍默认展示 12 个端点，移动端默认收敛为 8 个。
- 该优化只影响前端默认渲染数量，不改变协议来源证据矩阵、来源健康筛选、端点总数和 RAW/realtime 证据口径。
- 移动端“再显示”步长同步改为 8 个，避免来源端点卡片一次性把页面拉成长列表；桌面端仍保持 12 个的审计效率。
- 实时指挥台继续按真实数据 + AMap API 验证：`/api/realtime/locations` 当前返回 104 台车辆 / 120 条实时位置，高德地图 DOM 渲染 104 个真实车辆 marker，不使用 mock 点位伪造在线覆盖。
- Browser 验证通过：桌面端来源页默认渲染 12 / 70 个来源端点，页面高度 5,204px；390px 移动端默认渲染 8 / 47 个来源端点，页面高度 7,318px，点击“再显示 8 个”后扩展到 16 个，页面无横向溢出，控制台无错误。

## 2026-07-09 七十一次提炼记录

- 统计分析页增加 `vpc-stats-page` 专属移动端密度规则，避免全局单列布局把统计能力、API 探测和边界说明纵向铺得过长。
- 移动端将“统计能力状态 / 真实统计接口探测 / 统计边界”改为横向证据条；真实能力状态、HTTP 探测结果、接口 endpoint 和统计边界仍完整保留，只改变阅读方式。
- 移动端统计摘要恢复为 2 列紧凑卡片，保持当前筛选、实时来源行、在线/行驶、总里程可用、字段覆盖、多源可校验六个真实指标同时可扫读。
- 该优化不改变 `/api/realtime/locations`、`/api/mileage/daily` 探测、协议覆盖、多源一致性和实时来源明细的计算口径，不展示任何未接入的假日里程或趋势。
- Browser 验证通过：桌面端统计页仍保持 grid 布局，默认渲染 20 行实时来源和 10 台多源车辆；390px 移动端页面高度从约 8,309px 降到 7,081px，筛选“需关注”后真实来源明细从 8 行收敛为 1 行，页面高度 5,084px；页面无横向溢出，控制台无错误。

## 2026-07-09 七十二次提炼记录

- 全局移动端导航改为更紧凑的单行模块切换条：保留图标和主标签，隐藏副标题，不再让 `实时指挥台`、`数据源监控` 等长标签折行。
- 小屏侧栏高度从 120px 降到 104px，导航项高度从 46px 降到 38px；首屏能更早进入筛选、真实数据证据和地图/列表主体。
- 导航条增加轻量分段容器、横向滑动和隐藏滚动条，适配六个主模块入口；当前模块仍保留蓝色选中态和图标高亮。
- 该优化仅作用于 680px 以下视口，不改变桌面侧栏导航、URL 路由、模块切换逻辑和任何真实数据接口。
- Browser 验证通过：390px 移动端六个导航标签全部单行，`white-space: nowrap` 生效，无页面横向溢出；点击“数据源监控”后 URL 切换到 `section=sources`，标题与选中态同步为“数据源监控”，默认渲染 8 个来源端点，控制台无错误。

## 2026-07-09 七十三次提炼记录

- 实时指挥台移动端地图覆盖层重新压缩：顶部 `坐标覆盖 / 在线车辆 / 来源健康 / 协议覆盖 / 最近刷新 / 底图模式` 改为横向滚动证据条，不再以 2 列卡片压住底图。
- 选中车辆聚焦卡片改为底部紧凑面板，隐藏长地址副文案，保留来源、最近上报、坐标、地址解析、三协议字段覆盖和“轨迹 / 高德 / RAW”证据入口。
- 该优化仅作用于小屏实时地图；桌面端仍保持 6 列证据条和右侧车辆聚焦卡片，不改变 AMap 加载、marker 渲染、车辆选择和 VIN 路由逻辑。
- Browser 验证通过：390px 移动端地图证据条占地图高度从 34% 降到 9%，聚焦卡片从 62% 降到 32%，地图主体可视高度从 14px 提升到 274px；当前渲染 104 个 AMap marker，点击第二个 marker 后选中车辆从 `沪A30309F` 切换为 `浙F31066F` 并同步 URL VIN。
- 桌面端回归通过：地图证据条仍为 grid 布局，地图高度 560px，控制台无错误；页面无横向溢出。

## 2026-07-09 七十四次提炼记录

- 轨迹回放页增加 `vpc-replay-page` 专属移动端密度规则，把“轨迹节点”和“分段里程”从纵向长列表改为横向证据流。
- 移动端仍默认渲染 12 个轨迹节点和 12 个相邻分段，播放、地图、质量审计和摘要仍使用全部 80 个真实轨迹点；该优化只改变前端呈现方式，不改变 TDengine 查询和轨迹计算口径。
- 当前播放节点的自动定位逻辑从 `scrollIntoView` 改为只滚动 `.vpc-timeline` 容器的横向 `scrollLeft`，避免播放过程中把整个页面拉到时间轴位置。
- Browser 验证通过：390px 移动端页面高度从约 6,380px 降到 4,179px；轨迹节点区域高度从 1,329px 降到 120px，分段列表从 1,096px 降到 104px，均无横向页面溢出。
- 播放交互验证通过：切换到 4x 后点击播放，节点从 1/80 前进到 9/80，时间轴横向滚动到约 1,269px，页面没有大幅跳动；控制台无错误。

## 2026-07-09 七十五次提炼记录

- 继续按真实数据 + AMap API 验证实时指挥台：`/api/realtime/locations?limit=120&offset=0` 当前返回 120 条实时位置，前端按 VIN 聚合后展示 108 台真实车辆，高德地图渲染 108 个真实 marker。
- 当前生产样本覆盖三类协议：GB32960 54、JT808 55、宇通 MQTT 11；地图证据条展示坐标覆盖、在线车辆、来源健康、协议覆盖、最近刷新和 AMap JS 本地调试模式。
- 历史 RAW 查询修正默认选中逻辑：结果加载后优先选中带坐标或解析字段更多的 RAW 记录，避免 32960 vendor 小帧命中不到速度、里程、经纬度裁剪字段时被误看成解析失败。
- 历史 RAW 页新增“分帧字段提示”，当本页部分 RAW 没有命中裁剪字段时，明确说明 32960 标准帧和 vendor 帧可能分开发送，当前只是字段裁剪未命中，不代表 RAW 无解析。
- Browser 验证通过：`?section=history&vin=LNXNEGRR3SR321379&protocol=GB32960` 默认选中带 `gb32960.position.latitude / longitude`、`speed_kmh`、`total_mileage_km` 的记录，显示 RAW 定位证据和高德坐标入口；实时指挥台高德底图、地址解析和控制台健康均正常。

## 2026-07-09 七十六次提炼记录

- 历史 RAW 页的车辆上下文改为“当前查询协议优先”：当同一 VIN 同时有 808 和 32960 实时来源时，`protocol=GB32960` 的历史查询不再展示 JT808 主来源，改为展示 GB/T 32960 实时接入来源。
- 上下文标题同步显示协议范围，例如 `当前车辆上下文 / 32960`，同时保留该车辆已接入协议标签 `808 / 32960`，让运营人员知道当前查询协议和车辆整体来源覆盖是两件事。
- 该优化只改变前端上下文选择，不改变 `/api/history/raw-frames/query` 请求体、TDengine RAW 查询、字段裁剪和 RAW 定位证据。
- Browser 验证通过：`?section=history&vin=LB9A32A22P0LS1230&protocol=GB32960` 显示 `当前车辆上下文 / 32960`，上下文详情为 `GB/T 32960 实时接入`，并仍返回 3 条真实 RAW、定位字段和分帧字段提示；控制台无错误。

## 2026-07-09 七十七次提炼记录

- 实时指挥台把“真实数据 + AMap API”从一次性加载改为可持续接入：首轮读取、手动刷新和 15 秒自动刷新统一调用 `/api/realtime/locations?limit=300&offset=0`。
- 刷新过程中保留上一批真实车辆，不回退到 mock；刷新失败时也保留旧的真实地图点位，同时在真实数据状态条暴露错误状态。
- 真实数据状态条新增“立即刷新 / 15s 自动”控制，桌面端完整展示，移动端只保留自动刷新状态，避免挤压高德地图首屏。
- MapPanel 在刷新中仍允许对当前真实车辆做高德地址解析，地图底座继续使用运行时 `AMap Web JS key`，本地为前端安全码调试模式，生产仍建议走 `/_AMapService` 安全代理。
- Browser 验证通过：桌面端 `/api/realtime/locations` 返回 300 条实时位置，聚合 254-255 台真实车辆，高德地图渲染 254-255 个真实 marker；点击“立即刷新”后 marker 数从 254 更新到 255，控制台无错误。
- Browser 移动端验证通过：390×844 视口下高德地图仍加载 255 个真实 marker，真实数据状态条高度 50px，页面 `scrollWidth=390` 无横向溢出。

## 2026-07-09 七十八次提炼记录

- 真实截图发现宇通 MQTT 样本存在 `-0.999999,-0.999999` 异常坐标，旧规则只排除 0，会把高德地图拉到世界地图视角。
- AMap 坐标校验改为中国业务范围：经度 73-135，纬度 18-54；该规则统一作用于实时地图 marker、坐标覆盖率、地址解析、高德坐标入口、轨迹点和 RAW 定位证据。
- 实时指挥台默认选中车辆改为优先选有效坐标车辆，异常坐标车辆仍保留在车辆列表和质量队列中，便于继续回查 RAW 和字段映射。
- Browser 验证通过：修复后 `/api/realtime/locations` 返回 300 条实时位置，地图聚合 254 台有效坐标车辆，默认焦点为 `粤AGP3486` 的 JT808 有效坐标；高德地图视角回到中国区域，异常 `-0.999` 不再出现在 marker 中，控制台无错误。

## 2026-07-09 七十九次提炼记录

- 实时位置查询从 120 扩展到 300 条后，当前 ECS `/api/realtime/locations` 出现空回复 / HTTP 500 / 浏览器 fetch abort 的抖动；原型不能把这种生产接口失败伪装成真实在线。
- `loadPrototypeRealtimeVehicles` 增加 9 秒超时，并在成功返回真实车辆后写入 `sessionStorage` 最近快照；后续实时接口短暂失败时可显示 `真实缓存数据`，source 标注 `session cache`，避免页面直接退回演示数据。
- 无缓存的冷启动失败仍明确展示“真实数据读取失败 / 当前展示本地样例数据”，这是有意边界：没有真实证据时不把样例冒充生产数据。
- 地图地址解析统一复用 AMap 坐标范围校验，并增加 5 分钟坐标缓存；同一坐标重复选车或自动刷新时优先用缓存，减少 `/api/map/reverse-geocode` 和高德 Geocoder 压力。
- 新增 `amap.test.ts` 锁定中国业务坐标范围，覆盖北京、乌鲁木齐、`0,0`、`-0.999999` 和境外/纬度越界样本。
- 验证通过：`pnpm --dir vehicle-data-platform/apps/web run build`、`vitest run src/integrations/amap.test.ts` 均通过；Browser 验证冷启动接口失败时页面无框架覆盖层、无控制台错误、移动端 `scrollWidth=390`，并明确显示样例模式。

## 2026-07-09 八十次提炼记录

- 实时指挥台地图区增加“证据模式”，区分 `真实实时`、`真实刷新中`、`真实缓存` 和 `样例模式`，让高德底图上的点位来源一眼可判定。
- 当前 `/api/realtime/locations?limit=300&offset=0` 通过本地代理返回 HTTP 500，直连 ECS 出现空回复；页面保持 AMap Web JS 底图，但明确显示“样例模式 / 本地样例 / AMap JS”，不把本地演示车辆当生产证据。
- 真实数据状态条修复失败态样式：冷启动失败时使用 `vpc-real-data-error`，文字显示“真实数据读取失败 / 当前展示本地样例数据”，并保留实际失败 endpoint。
- 地图聚焦卡片新增 `数据口径`，真实失败时显示 `非生产证据`；地图底座证据条同步显示 `地图证据样例模式`、AMap 配置状态和地址解析状态。
- 验证通过：`pnpm --dir vehicle-data-platform/apps/web run build`、`vitest run src/integrations/amap.test.ts src/config/appConfig.test.ts` 均通过；Browser 桌面与 390px 移动端验证页面无框架覆盖层、无控制台错误、无横向溢出，AMap 瓦片可加载，真实接口失败态清晰可见。

## 2026-07-09 八十一次提炼记录

- 实时数据状态条增加“生产链路诊断”：`Realtime API`、`Redis/MySQL`、`AMap` 三个证据标签直接显示当前链路状态。
- 当前真实接口失败时，诊断条显示 `Realtime API 请求失败`、`Redis/MySQL 无真实投影`、`AMap JS 已配置`；这比单纯失败文案更接近值班人员排障路径。
- 该诊断只表达当前前端可验证事实，不新增告警、通知、统计等后端尚未证明可用的能力，保持原型和 Redis/MySQL/AMap 真实接入边界一致。
- 桌面端状态条改为两行网格，避免诊断标签把状态卡撑高；移动端诊断条保持单行横向滚动，地图仍能在首屏下半段露出。
- 验证通过：Browser 桌面端状态条高度从 120px 收敛到 84px，移动端 `scrollWidth=390` 无横向溢出；`pnpm --dir vehicle-data-platform/apps/web run build` 与 `vitest run src/integrations/amap.test.ts src/config/appConfig.test.ts` 均通过。

## 2026-07-09 八十二次提炼记录

- 新增统一的 `realtimeModeSummary` 口径，把 `真实实时 / 真实刷新中 / 真实缓存 / API 失败 / 真实为空 / 样例模式` 从一个函数派生，避免侧边栏、数据边界和状态条各自判断。
- 侧边栏生产链路不再只显示 `ECS 实时数据` 或 `样例模式`，当前接口失败时显示 `API 失败 / 非生产数据`，并使用红色失败态。
- 所有模块的 `当前模块数据来源` 第一条都增加 `当前口径`，统计、告警、来源监控等页面在真实接口失败时也明确显示 `API 失败 / 不展示样例当前态`。
- 这次只统一“口径表达”，不改变各模块真实接口调用和本地样例策略；统计页仍不伪造日里程聚合结果，实时页仍保留 AMap 底图与本地样例点隔离。
- 验证通过：Browser 桌面检查实时页和统计页均显示同一失败口径，侧边栏 class 为 `vpc-side-status-error`；390px 移动端统计页和实时页 `scrollWidth=390`，无框架覆盖层、无控制台错误；构建和 AMap/config 测试均通过。

## 2026-07-09 八十三次提炼记录

- 非实时页的真实数据失败状态条压缩为两行证据条：状态、错误原因、endpoint 和刷新控制在首行，`Realtime API / Redis/MySQL / AMap` 诊断标签在第二行。
- 统计页不再被大块失败卡挤压，首屏能看到 `当前筛选 / 实时来源行 / 日里程统计 / 证据入口` 和 `统计能力蓝图`，同时保留 API 失败与样例模式口径。
- 移动端通用状态条隐藏长 endpoint，保留错误原因和诊断标签横向流；实时指挥台继续使用更紧凑的专属规则，地图顶部位置未退化。
- 这次只优化失败态信息密度，不改变真实接口读取、自动刷新、session cache、AMap 底图和 mock 隔离逻辑。
- 验证通过：统计页桌面状态条高度约 88px；390px 移动端统计页 `scrollWidth=390` 且状态条约 110px，实时页状态条仍约 76px；构建和 AMap/config 测试均通过。

## 2026-07-09 八十四次提炼记录

- 告警中心在真实接口不可用时不再展示“事件队列”作为主标题，改为“真实告警接口未接入，当前只展示能力蓝图”，避免把本地 mock 事件误读为生产 durable alert。
- fallback 分支新增四类能力边界：断链观测、字段质量、持久告警、地图定位；分别对应 Redis/TDengine/MySQL/AMap 的可实现范围和待接入后端能力。
- 本地事件保留为 `mock 样例事件`，行内增加 `mock` 标签，证据链改为 `mock 证据链`，用于检查筛选、列表和证据布局，不参与生产告警表达。
- 移动端修正告警 fallback 的阅读顺序：先展示可实现能力和 mock 样例，再展示侧栏边界；保留真实观测信号分支的移动端顺序不变。
- 验证通过：告警页桌面端不再出现 `事件队列`，显示 4 张能力卡和 4 条 mock 样例；390px 移动端 `scrollWidth=390`，主内容宽度 370px，无控制台错误；构建和 AMap/config 测试均通过。

## 2026-07-09 八十五次提炼记录

- 数据源监控页在真实接口不可用时不再把本地 `dataSources` 展示为“数据源台账”，改为“真实来源证据未读取，当前只展示来源监控蓝图”。
- fallback 分支新增三层来源证据边界：实时来源、端点证据、平台配置；分别说明 Redis/MySQL 投影、TDengine raw_frames 和 `vehicle_data_source / ops API` 的真实职责。
- 来源列表标题改为 `mock 来源样例`，详情页标题改为 `mock 来源详情`，并在文案中明确样例只用于验证筛选、健康状态和详情布局，不代表生产平台台账。
- 移动端验证来源健康筛选：390px 视口下 `scrollWidth=390`，点击“波动”后样例来源从 5 条筛到 2 条，筛选状态显示 `波动2`。
- 验证通过：来源页桌面端不再出现旧标题 `数据源台账`，蓝图横幅、3 张证据边界卡和 mock 样例表均正常；控制台无错误；构建和 AMap/config 测试均通过。

## 2026-07-09 八十六次提炼记录

- 历史查询页在真实接口不可用时不再把本地样例数据展示成 TDengine 查询结果，改为“真实 RAW 查询未读取，当前只展示历史查询蓝图”。
- fallback 分支新增三层历史证据边界：RAW 查询、字段裁剪、证据联动；分别说明 `raw_frames/query`、POST body fields 和 RAW/轨迹/AMap 的真实职责。
- 查询载荷标签从 `POST` 调整为 `请求预览`，结果标题改为 `Raw 样例记录`；底部说明改为“不读取 TDengine，也不证明字段已命中”。
- Browser 桌面验证：点击查询后展示 3 条样例记录，页面不再出现 `当前结果来自 TDengine raw_frames/query` 的真实结果表述，控制台无错误。
- Browser 移动端验证：390px 视口下顶部蓝图宽度 370px、`scrollWidth=390`，结果区显示 `Raw 样例记录` 和分页，不出现横向溢出；构建和 AMap/config 测试均通过。

## 2026-07-09 八十七次提炼记录

- 轨迹回放页在真实接口不可用时不再只用“轨迹样例”标签提示，新增“真实轨迹未读取，当前只展示轨迹回放蓝图”横幅。
- fallback 分支新增三层轨迹证据边界：轨迹查询、播放与分段、证据联动；分别说明 `vehicle_locations`、前端播放状态和 RAW/AMap 入口的真实职责。
- 样例模式下车辆上下文显示 `当前回放车辆 / 样例快照`，来源副文案改为 `非生产实时状态`，避免把本地车辆快照看成真实实时来源。
- 时间轴和分段说明按模式区分 `真实点` / `样例点`，回放证据卡改为 `轨迹样例`、`轨迹查询蓝图`、`RAW 回溯蓝图`、`AMap 证据`。
- 验证通过：桌面端播放按钮可从节点 1/4 推进到 4/4，页面无旧的“全部真实轨迹点”误导文案；390px 移动端 `scrollWidth=390`，顶部蓝图宽度 370px；控制台无错误；构建和 AMap/config 测试均通过。

## 2026-07-09 八十八次提炼记录

- 实时指挥台继续约束到“真实数据 + AMap API”：真实数据开关启用时，如果 `/api/realtime/locations` 冷启动没有返回车辆，就不再把本地 8 台 mock 车辆投到高德地图、车辆列表、质量队列和统计摘要。
- AMap 可用但真实坐标未就绪时，地图显示空图和 `AMap 已配置，等待真实车辆坐标`，地图证据显示 `等待真实 / 接口失败 / 真实为空`，不再把本地样例作为生产当前态。
- 顶部真实数据状态条文案从“当前展示 mock 原型数据”改为“未展示生产车辆，等待真实接口”；只有显式关闭真实数据模式时才允许展示 mock 原型数据。
- 侧边栏和模块数据边界同步调整：接口失败或真实为空时显示 `不展示 mock 当前态`，避免运营人员误把 AMap 上的样例点、样例车辆和样例字段当作真实 Redis/MySQL 投影。
- 当前实测：本地 `/app-config.js` 可读取高德 Web JS key，115.29.187.205:20200 端口可连，但 `/api/realtime/locations`、`/api/history/locations`、`/api/history/raw-frames/query` 通过本地代理返回 HTTP 500 或空回复；前端现在会保持真实等待态，接口恢复后自动切回真实车辆点位。

## 2026-07-09 八十九次提炼记录

- 实时指挥台的来源筛选继续清理真实失败态残留：真实数据模式下如果没有任何 realtime 车辆来源，筛选器不再列出本地样例里的现代 HTWO、G7s、广安车联、宇通 MQTT 等平台名。
- 来源筛选在真实来源未返回时只显示 `真实来源待读取`，并把旧 URL 或旧状态里的无效 source 自动归回 `ALL`，避免接口恢复前页面被不存在的 mock 来源筛选锁住。
- 筛选提示同步改为 `真实来源未返回，来源筛选等待 realtime 数据`；协议和状态筛选仍保留，因为它们是数据能力维度，不是具体平台证据。
- 这次只改实时指挥台筛选边界，不改变历史、轨迹、告警、统计、来源监控页的真实/蓝图分支。

## 2026-07-09 九十次提炼记录

- 真实数据失败态不再把浏览器底层错误 `signal is aborted without reason` 直接暴露给业务用户。
- 统一请求层超时错误：`fetchJSON` 在 AbortController 超时后抛出 `request timeout after ...ms`，让不同浏览器的 abort 文案进入同一套诊断口径。
- 实时状态条新增可读错误翻译：超时显示 `实时接口超时，后端未在 9 秒内返回`，HTTP 500 显示 `实时接口返回 500，需要检查 BFF 或数据库依赖`，网络失败显示 `实时接口网络不可达或连接被关闭`。
- Endpoint、Realtime API/Redis/MySQL/AMap 诊断标签仍保留，产品层给运营人员看得懂的状态，技术层仍能定位后端链路。

## 2026-07-09 九十一次提炼记录

- 自动刷新失败态继续细分：首次进入页面且还没结论时显示 `读取真实数据中`，但如果已经有上一轮失败原因且没有任何真实车辆，自动刷新期间显示 `真实接口重试中`。
- 侧边栏和模块数据边界同步显示 `重试中 / 上次 realtime API 失败`，避免用户误以为系统只是首次加载慢，而忽略当前没有生产车辆可展示。
- 诊断标签中 Realtime API 从 `请求中` 细化为 `重试中`，刷新按钮也显示 `重试中`；失败原因继续展示中文诊断和 endpoint。
- 这次只改变状态表达，不改变 15 秒自动刷新、session cache、真实接口查询、AMap 空图等待真实坐标的行为。

## 2026-07-09 九十二次提炼记录

- AMap 证据从“配置态”升级为“运行态”：页面启动后会复用现有 `loadAMap` 缓存 Promise 主动探测高德 Web JS SDK，区分 `未配置 / 加载中 / 已加载 / 加载失败`。
- 顶部真实数据状态条中的 AMap 诊断不再只显示 `JS 已配置`，而是显示 `SDK 加载中 / SDK 已加载 / SDK 失败 / 坐标预览`，用于判断地图能力本身是否可用。
- 实时指挥台地图顶部标签、空图提示和底部地图底座统一使用同一份 AMap 运行态；真实接口失败且无车辆时仍保持空图，不回退到 mock 车辆点位。
- 旧文案 `AMap 已就绪但不展示 mock 点位` 改为 `AMap 运行态见地图底座`，避免 SDK 未加载完成或加载失败时给运营人员错误承诺。

## 2026-07-09 九十三次提炼记录

- 真实接口失败态继续增强排障证据：请求层在 HTTP 非 2xx 时读取响应体摘要，空响应体明确标记为 `empty response body`，避免只看到 `HTTP 500`。
- 顶部真实数据状态条的 Realtime API 标签在失败或重试时展示 `HTTP 500`，并新增 `响应体` 诊断标签，区分 `空 body` 和 `有错误明细`。
- 当前本地代理实测 `/api/realtime/locations?limit=3&offset=0` 返回 `500 text/plain` 且 body 为空；页面因此会显示“实时接口返回 500 且响应体为空，需要检查 BFF 日志或数据库依赖”。
- 这次不推测后端根因，只把前端能观测到的 endpoint、HTTP 状态、响应体状态和 AMap SDK 状态准确展示出来。

## 2026-07-09 九十四次提炼记录

- 顶部真实数据状态条新增 `复制诊断` 动作，复制内容包含时间、endpoint、实时接口状态、车辆数、HTTP 状态、响应体状态、错误原文、中文诊断、AMap SDK 状态和全部诊断标签。
- 复制内容面向后端与运维排障，不增加新的业务假数据，也不改变 realtime 自动刷新和空图策略。
- 按钮成功后短暂显示 `已复制`；如果浏览器拒绝 Clipboard API 和 `execCommand('copy')`，状态条会展开只读诊断文本、自动选中内容并显示 `手动复制`，保证受限内嵌浏览器里仍能直接按复制键拿到完整诊断包。
- 诊断文本面板提供 `收起`，复制完成或不再排障时可以回到紧凑实时指挥台，不让故障说明长期占用首屏地图空间。
- 桌面和移动端都保留紧凑工具条，不引入额外卡片或大段说明。

## 2026-07-09 九十五次提炼记录

- 实时指挥台继续围绕“真实数据 + AMap API”做可验证闭环：诊断文本新增绝对请求地址和可直接执行的 `curl -i --max-time 12 ...`，后端或运维可原样复现 `/api/realtime/locations` 问题。
- 首轮 loading、手动刷新和自动刷新都统一记录完整请求 `/api/realtime/locations?limit=300&offset=0`，避免接口还没返回时复制到不带分页参数的诊断包。
- 诊断文本新增 `amapConfig` 摘要，区分 Web JS key 是否配置、安全代理模式、浏览器安全码调试模式，避免把 AMap SDK 已加载与后端实时接口成功混为一谈。
- 当前验证状态为：高德 Web JS SDK 已加载，`/app-config.js` 注入正常，但 `/api/realtime/locations?limit=300&offset=0` 通过本地代理表现为 HTTP 500 空 body 或浏览器请求超时，直连 ECS 20200 为 empty reply。
- 页面保持真实失败态空图，不回退到 mock 车辆；真实接口恢复后，同一套 AMap 地图会直接渲染真实车辆 marker、地址解析和 RAW/轨迹证据入口。

## 2026-07-09 九十六次提炼记录

- 实时指挥台地图增加内部空态说明，真实车辆坐标为 0 时不再只显示空网格和小状态标签。
- 空态说明只展示可验证事实：AMap SDK 运行态、realtime endpoint、没有生产车辆坐标、下一步复制顶部诊断或检查 realtime-api/MySQL/ECS 代理。
- 如果真实数据已返回但筛选无结果，空态会提示放宽协议、状态、来源或新鲜度筛选；如果真实接口失败或重试，则提示优先检查后端链路。
- 该空态不引入任何 mock 点位，不改变高德地图、自动刷新、真实接口请求或 RAW/轨迹证据入口。

## 2026-07-09 九十七次提炼记录

- 统计分析页失败态的数据边界收敛为 `Realtime API 等待真实来源行` 与 `统计 API 未接入`，不再在未连上实时接口时把 MySQL/Redis 写成当前可用统计口径。
- 统计页 fallback 摘要继续明确“不展示日里程真值”，并把 `mock` 技术词改为“样例数据”，让业务评审更容易理解这是防止伪造统计结果。
- 该调整不改变真实统计页逻辑：一旦 `/api/realtime/locations` 返回真实车辆，统计页仍展示实时协议覆盖、在线/行驶、字段覆盖、多源一致性和证据入口。

## 2026-07-09 九十八次提炼记录

- 数据源监控页失败态的数据边界改为 `来源证据等待真实样本` 与 `平台台账未接入`，不再在未读取来源证据时把 MySQL/Redis 写成当前真实台账。
- 失败态中的 `mock` 技术词统一替换为“样例来源 / 样例数据”，保留筛选、健康状态和详情布局的原型能力，但不冒充生产来源台账。
- 真实数据恢复后，来源页仍按 realtime locations、raw_frames 和 ops API 的证据分层展示真实来源端点。

## 2026-07-09 九十九次提炼记录

- 告警中心失败态继续收敛业务表达：摘要卡、横幅、列表、侧栏和证据链统一使用“样例事件 / 样例证据”，不再把工程 `mock` 词暴露给业务评审。
- 样例事件仍只用于验证列表选择、证据入口和边界布局；页面继续明确 `/api/alert-events`、通知预案、确认/关闭/派单能力未接入。
- AMap 坐标入口、轨迹入口和 RAW 入口保留为证据能力蓝图，等 durable alert 后端上线后再切换为真实告警闭环。

## 2026-07-09 一百次提炼记录

- 全局真实数据失败态从工程化样例词改为“样例当前态 / 样例模式”，减少业务评审看到工程占位词的概率。
- AMap 地图证据中的本地样例标签同步改为“本地样例”，继续强调它不是生产车辆证据。
- 这次只调整可见产品文案，不改真实数据开关、接口请求、AMap 加载、session cache 或样例数据来源。

## 2026-07-09 一百零一次提炼记录

- 历史 RAW 与字段页失败态继续收敛为“历史查询蓝图 / Raw 样例记录”，不再把工程 `mock` 词暴露在结果标题、样例说明或页脚口径里。
- 样例记录只用于验证 POST body 请求预览、字段裁剪、分页和表格布局；真实字段命中、定位证据和 RAW 回溯仍必须等待 `/api/history/raw-frames/query` 返回。
- 证据联动边界改为“真实记录可跳轨迹和高德坐标，样例记录只验证布局”，避免把本地样例数据误读成 TDengine raw_frames 查询结果。

## 2026-07-09 一百零二次提炼记录

- 轨迹回放页失败态继续收敛为“轨迹回放蓝图 / 轨迹样例”，不再把工程 `mock` 或 `trackPoints` 词暴露在横幅、证据卡、时间轴、分段说明和车辆上下文里。
- 样例轨迹只用于验证 AMap 轨迹渲染、播放/暂停、速度切换、时间轴选中、分段列表和 RAW/高德入口；真实轨迹仍必须等待 `/api/history/locations` 返回。
- 时间轴和分段统计统一使用“样例点 / 样例轨迹点”，避免把本地样例点误读成 TDengine `vehicle_locations` 的真实位置记录。

## 2026-07-09 一百零三次提炼记录

- 实时指挥台和全局状态继续去工程化：此前的工程化容错文案改为“样例模式 / 使用缓存 / 仅验证交互”。
- 地图证据中的本地状态改为“地图显示本地样例点位”，不再使用兜底术语描述非生产车辆点。
- 诊断状态仍保留 API、HTTP、响应体和 AMap 运行态证据；本次只调整用户可见表达，不改变真实接口请求和缓存策略。

## 2026-07-09 一百零四次提炼记录

- 实时指挥台继续按“真实数据 + AMap API”收敛：地图底部底座拆成 `Realtime API / 坐标落点 / AMap Web JS / 地址解析 / 安全策略` 五个证据块。
- `Realtime API` 和 `坐标落点` 只表达 `/api/realtime/locations` 与实时位置投影，`AMap Web JS` 和 `地址解析` 只表达高德 SDK、BFF 逆地址或 AMap Geocoder，避免把后端接口不可达误判为地图不可用。
- 地址解析策略调整为：优先请求 `/api/map/reverse-geocode`，BFF 404/500/空响应/网络异常时继续尝试 AMap Web JS Geocoder；只有 BFF 与 AMap 都不可用时才显示不可解析。
- 禁用真实数据时，内部 source 统一改为“本地样例”，降低后续页面误露工程 `mock` 词的概率。
- 当前本地验证状态：Amap SDK 已加载，但 `/api/realtime/locations?limit=300&offset=0` 通过代理仍未返回生产车辆；页面保持空图和真实接口诊断，不展示样例车辆冒充在线覆盖。

## 2026-07-09 一百零五次提炼记录

- 数据源监控页在真实来源证据未返回时不再默认展示样例来源表，避免 `全部 / 健康 / 波动 / 中断` 数字被误读成生产 `vehicle_data_source` 台账。
- 样例来源改为手动展开的原型验证区；默认状态只展示“不展示样例健康计数 / 等待真实 RAW 端点 / 保留原型验证入口”三条边界。
- 来源页继续保留真实分层：实时来源来自 Redis/MySQL 投影，端点证据来自 TDengine raw_frames，平台配置来自 `vehicle_data_source` 或 ops API；任一层缺失时不伪造闭环。
- 移动端同步改为单列展示样例收起说明和展开控制，避免窄屏下样例说明压缩或像生产指标卡。

## 2026-07-09 一百零六次提炼记录

- 告警中心失败态继续执行“生产证据优先”：真实告警/观测信号未读到时，不再默认展示样例事件列表和样例证据链。
- 样例事件改为手动展开的原型验证区；默认状态只展示“不展示样例告警列表 / 等待 durable alert API / 保留证据设计”三条边界。
- 右侧告警边界面板在样例收起时不再显示某条样例事件，也禁用轨迹/RAW 入口；展开样例后才恢复样例事件选择和证据入口。
- 移动端同步把样例告警收起说明和展开控制改为紧凑单列，避免把样例事件误读为生产告警队列。

## 2026-07-09 一百零七次提炼记录

- 历史 RAW 页失败态继续收敛：真实 `raw-frames/query` 未返回时，不再默认展示本地 Raw 样例表和分页数量。
- Raw 样例记录改为手动展开的原型验证区；默认状态只展示“不展示样例 RAW 表 / 保留 POST 查询载荷 / 等待真实 parsed_fields”三条边界。
- 查询条件、时间窗、字段裁剪和 POST body 预览仍默认可见，因为它们是接口设计能力；样例记录表、样例分页和样例字段延迟需要主动展开。
- 移动端同步把 Raw 样例收起说明和展开控制改为单列，避免样例记录在窄屏下看起来像真实 TDengine raw_frames 结果。

## 2026-07-09 一百零八次提炼记录

- 轨迹回放页失败态继续收敛：真实 `/api/history/locations` 未返回时，不再默认展示本地轨迹地图、播放控件、时间轴和分段里程。
- 轨迹样例改为手动展开的原型验证区；默认状态只展示“不展示样例轨迹地图 / 保留轨迹回放蓝图 / 等待真实位置点”三条边界。
- 查询口径、证据入口和 AMap 能力边界仍默认可见；样例地图、时间轴、播放和分段统计需要主动展开。
- 移动端同步把轨迹样例收起说明和展开控制改为单列，避免样例轨迹在窄屏下看起来像真实 `vehicle_locations` 回放。

## 2026-07-09 一百零九次提炼记录

- 统计分析页失败态继续接入真实证据：即使 `/api/realtime/locations` 当前没有返回车辆，也会展示“真实统计接口探测”，直接请求实时位置与日里程聚合接口。
- 统计接口探测抽成统一组件，真实数据态和失败态共用同一套 `/api/realtime/locations`、`/api/mileage/daily` 可用性判断，避免两个状态表达不一致。
- 失败态新增 Redis / MySQL / TDengine 源头边界：Redis 只做实时当前态，MySQL 承接 snapshot/location/daily mileage 结果，TDengine 承接 RAW 和轨迹回溯。
- 该页仍不展示样例日里程、趋势、排名或多源统计数值；只有源头接口返回真实数据后，才展示统计明细和证据跳转。

## 2026-07-09 一百一十次提炼记录

- 历史 RAW 查询从全局实时车辆状态中解耦：`/api/realtime/locations` 没有返回车辆时，历史页仍可按用户输入 VIN / 协议 / 时间窗独立请求 `/api/history/raw-frames/query`。
- `usingRealData` 继续只表示实时车辆列表是否有生产车辆；新增 RAW 查询能力判断，真实数据模式启用时直接展示真实 RAW 查询状态、错误或空结果。
- 历史页失败态不再把“实时接口失败”误等同为“RAW 查询不可用”；只有真实数据模式被关闭时，才回到查询蓝图和手动展开的样例记录。
- 该调整更贴近 TDengine/Redis/MySQL 的真实边界：RAW 历史证据来自 TDengine，不应被 Redis/MySQL 实时投影是否可用锁死。

## 2026-07-09 一百一十一次提炼记录

- 轨迹回放页继续从全局实时车辆状态中解耦：`/api/realtime/locations` 没有返回车辆时，仍可按 URL/VIN 独立请求 `/api/history/locations`。
- `usingRealData` 继续只代表实时车辆列表是否有生产车辆；新增轨迹查询能力判断，真实数据模式启用时直接展示 `vehicle_locations` 查询状态、空结果或错误。
- 回放车辆上下文增加“历史轨迹查询”状态，避免把按 VIN 查询的真实历史轨迹能力误标成“样例快照”。
- 该调整与历史 RAW 页保持一致：轨迹和 RAW 都属于 TDengine 历史证据，不应被 Redis/MySQL 实时投影是否可用锁死。
- 移动端同步约束顶部横向导航容器，导航内部可横滑但不再撑大页面宽度，避免 390px 视口出现全局横向滚动。

## 2026-07-09 一百一十二次提炼记录

- 顶部“当前模块数据来源”的 `当前口径` 不再对所有页面复用 realtime 状态；历史 RAW、轨迹回放和统计分析改成页面级能力口径。
- 历史 RAW 显示“历史 RAW 独立查询 / 实时当前态不参与”，轨迹回放显示“历史轨迹独立查询 / 实时当前态不参与”，避免和实时指挥台的 API 失败混淆。
- 统计分析显示“统计 API 独立探测 / 不展示样例真值”，与真实统计接口探测面板保持一致。
- 实时指挥台、告警中心、数据源监控仍保留 realtime 当前态口径，避免过度承诺尚未独立验证的能力。

## 2026-07-09 一百一十三次提炼记录

- 数据源监控页继续从全局实时车辆状态中解耦：真实数据模式开启时，即使 `/api/realtime/locations` 暂时没有车辆，也会独立探测 realtime 与 `raw_frames/query` 的来源证据。
- 来源监控加载器改为部分成功模型，realtime 与 RAW 任一接口可用时都保留可证明的协议、端点、最近上报和缺失端点信息；全部失败时才显示真实来源证据读取失败。
- 页面顶部“当前模块数据来源”在数据源监控页改为“来源证据独立探测 / realtime 与 RAW 可部分成功”，避免把实时投影失败误判成 RAW 端点证据不可查。
- 样例来源仍只在真实数据模式关闭时才可手动展开；真实数据模式下即使接口失败，也展示真实接口错误和空证据，不用本地样例填充平台来源事实。

## 2026-07-09 一百一十四次提炼记录

- 告警中心继续从全局实时车辆状态中解耦：真实数据模式开启时，即使 `/api/realtime/locations` 没有返回车辆，也会独立探测 realtime 与 `vehicle_locations` 可加工观测信号。
- 告警观测加载器改为部分成功模型，实时位置和历史位置任一接口可用时都保留可证明的链路延迟、字段缺失、协议告警位或能力缺口信号；全部失败时才显示真实观测信号读取失败。
- 顶部“当前模块数据来源”在告警中心改为“告警观测独立探测 / durable alert API 未接入”，明确区分可加工观测信号和未接入的持久告警、通知、派单闭环。
- 样例事件仍只在真实数据模式关闭时作为手动展开的原型验证入口；真实数据模式下不再因为实时车辆列表为空而退回样例事件蓝图。

## 2026-07-09 一百一十五次提炼记录

- 轨迹回放和历史 RAW 查询的真实失败态继续去工程化：查询状态不再直接暴露 `error`、`disabled` 等枚举值。
- 轨迹查询状态统一映射为“查询中 / 已连接 / 无轨迹 / 查询失败 / 未启用”，并在查询源栏追加接口失败原因，避免业务用户只看到英文状态却不知道边界。
- 历史 RAW 查询载荷里的状态同步映射为“查询中 / 已连接 / 无结果 / 查询失败 / 未启用”，与轨迹、告警、来源页的中文状态口径保持一致。
- 移动端查询源栏的错误原因独占一整行并允许长文本换行，防止超时或 URL 错误撑开页面宽度。

## 2026-07-09 一百一十六次提炼记录

- 统计分析页新增“统计生产就绪度”判断，把 realtime 必需接口、日里程可选接口、真实来源行和证据入口合成一个业务结论。
- 当前 realtime 未返回真实来源行时，统计页明确显示“统计真值暂不可用”，日里程、趋势、排名继续“不展示”，避免运营用户从能力蓝图中误读出统计真值。
- 当实时位置接口恢复且返回真实来源行时，该条会切换为“当前态统计可用，日里程待接入”；只有日里程接口也可用时才显示“统计生产就绪”。
- 移动端生产就绪度条采用两列指标布局，标题独占一行，防止新增状态条撑宽页面。

## 2026-07-09 一百一十七次提炼记录

- 实时指挥台继续围绕真实数据与 AMap API 收口：地图证据 Tag 不再暴露 `api error`、`realtime pending`、`session cache` 等英文枚举。
- 可见证据改为“等待接口 / 接口异常 / 真实为空 / 实时位置 / 刷新中 / 会话缓存 / 内存缓存”，让运营人员能直接判断当前地图点位是否来自生产实时投影。
- 技术 source 仍保留在顶部诊断与复制诊断包中，继续服务于 `/api/realtime/locations`、Redis/MySQL 投影、AMap SDK 和缓存链路排障。
- 该调整只改变展示文案，不改变真实接口请求、AMap Web JS 加载、坐标落点、地址解析和自动刷新逻辑。

## 2026-07-09 一百一十八次提炼记录

- “当前模块数据来源”从纯 inline 文本改成结构化证据项，label 与 value 分离；label 使用小胶囊样式，避免移动端出现 `Redisvehicle...`、`MySQLvehicle...` 这类粘连文本。
- 每个证据项保留完整 `title`，页面上可紧凑显示，鼠标悬停仍能查看完整接口、表名或能力边界。
- 实时指挥台移动端使用垂直证据面板，避免长表名撑宽 390px 视口。
- 该调整不新增任何源头能力，仍只表达现有 Redis、MySQL、TDengine、AMap 与 realtime API 的可验证边界。

## 2026-07-09 一百一十九次提炼记录

- 实时指挥台地图覆盖指标从硬编码卡片改为 `mapCoverageItems` 结构化渲染，坐标、在线、来源健康、协议覆盖、最近刷新、证据模式都保留完整 `title`。
- 移动端改为 3 列 x 2 行紧凑指标面板，一屏展示全部 6 个地图覆盖指标；“来源健康 / 协议覆盖 / 证据模式”显示紧凑值，完整值仍保留在 `title` 中。
- 桌面端仍保持 6 列覆盖指标，不改变 AMap marker、空图等待、真实接口失败态和自动刷新逻辑。
- 该调整只优化地图内当前态证据的可读性，不改变 Redis/MySQL/TDengine/AMap 任一数据口径。

## 2026-07-09 一百二十次提炼记录

- 实时指挥台移动端的“当前模块数据来源”从横向滚动 chip 改为三行证据面板，默认展示当前口径、Redis 和 MySQL 三层来源。
- Redis/MySQL 的长表名允许最多两行展示，完整内容继续保留在 `title`，避免只看到 `Redis vehicle:online / ...` 就需要横向拖动。
- 桌面端仍保持紧凑横排来源条，不改变当前口径、真实失败态、复制诊断或自动刷新逻辑。
- 该调整继续坚持真实数据边界：只表达现有 realtime API、Redis 和 MySQL 投影，不新增后端能力暗示。

## 2026-07-09 一百二十一次提炼记录

- AMap 地图组件改为“底图先加载、车辆点后叠加”：即使 `/api/realtime/locations` 暂时失败或返回空，也会在已配置 Web JS Key 时展示高德底图和真实接口空态。
- 实时指挥台不再把“无车辆点”误呈现为自绘坐标网格；高德 SDK 已加载、实时接口失败、坐标落点为空三件事在地图底座证据区分开展示。
- 坐标落点证据卡在 0/0 时按实时接口状态区分“接口失败，暂无生产坐标”“接口重试中，暂无生产坐标”和“等待实时接口返回车辆”，避免把接口未返回误读为坐标解析失败。
- AMap Loader 支持复用页面已有 `window.AMapLoader`，避免正式页面、原型页面和测试环境重复插入高德 loader 脚本。

## 2026-07-09 一百二十二次提炼记录

- 实时指挥台移动端筛选区从自然换行改为明确网格：协议和状态两列并排，来源和新鲜度各占整行，避免“真实来源待读取”被截断。
- 移动端筛选提示从横向 chip 改为纵向轻提示条，保持两条真实数据边界说明完整可读，不引入新的筛选能力。
- 真实数据状态条的“复制诊断 / 立即刷新 / 自动刷新”在移动端改为三等分控制组，不再横向滚动或换行成不稳定布局。
- 该调整只改变移动端布局密度，不改变 URL 筛选同步、realtime 请求、AMap 加载、诊断复制和自动刷新逻辑。

## 2026-07-09 一百二十三次提炼记录

- 数据源监控页的真实来源证据 banner 增加状态语义色：加载中为蓝、已接入为绿、部分可用/空结果为橙、读取失败为红。
- 修正“真实来源证据读取失败”仍显示浅绿色背景的误导问题，让运维人员能先从颜色判断来源证据是否可用。
- 该调整只作用于 `loadPrototypeSourceMonitor` 的展示状态，不改变 realtime、RAW 查询、平台台账或样例来源的业务逻辑。

## 2026-07-09 一百二十四次提炼记录

- 历史 RAW 页新增顶部“RAW 查询状态”证据条，在查询条件之前展示真实 `raw-frames/query` 的查询中、已返回、无结果或失败状态。
- 状态条同步展示结果数、字段裁剪数量和接口来源，让用户不用滚到载荷或结果表才知道 TDengine RAW 查询是否真的返回。
- 移动端状态条改为单列紧凑布局，长错误原因可换行，不再撑开 390px 视口。
- 该调整不改变 POST body、字段裁剪、分页或 TDengine 查询逻辑，只提升真实查询状态的可见性。

## 2026-07-09 一百二十五次提炼记录

- 轨迹回放页新增顶部“轨迹查询状态”证据条，在查询面板之前展示 `vehicle_locations` 的查询中、已返回、无轨迹或失败状态。
- 状态条同步展示位置点总数、节点上限和接口来源，避免用户只能在查询面板底部或空态文案里判断 TDengine 查询是否成功。
- 真实查询失败时以红色失败态展示具体错误；真实查询中仍明确说明不会回退到本地轨迹样例。
- 移动端状态条改为单列紧凑布局，长错误原因可换行，不影响 AMap 回放区域和查询条件布局。

## 2026-07-09 一百二十六次提炼记录

- 告警中心的真实观测 banner 改为“观测信号”和“告警闭环”双层表达：realtime/history 证据可生成观测信号，但 durable alert API 未接入时不再只写“真实观测信号已接入”。
- `告警 API 404` 指标改成业务更直观的 `闭环 API 未接入`，避免把后端缺口误读为已经上线的告警事件服务。
- 告警 banner 增加加载、已接入、部分可用、空结果、读取失败的状态语义色；当前观测可用但闭环未接入时显示橙色部分可用。
- 真实观测 banner 前置到告警数量摘要之前，让手机首屏先看到能力边界，再看到观测信号数量。
- 该调整不新增告警事件、通知、确认、关闭或派单能力，只让现有 realtime/history 可加工信号与未接入闭环边界更清晰。

## 2026-07-09 一百二十七次提炼记录

- 统计分析页的接口探测汇总改为“全部接口 ready 才显示绿色”；当前 `/api/realtime/locations` 可用但 `/api/mileage/daily` 未接入时，`1/2 可用` 不再显示绿色。
- 统计生产就绪度的 partial 状态从蓝色改为橙色，用来表达“当前态统计可用，但日里程、趋势、排名未接入”的业务提醒。
- blocked 状态改为红色阻塞语义，只用于核心 realtime 当前态不可用，避免和日里程缺口混成同一种警示。
- 该调整不新增统计接口或日里程真值，只修正已有实时统计、日里程缺口和接口探测的视觉语义。

## 2026-07-09 一百二十八次提炼记录

- 实时指挥台新增“真实数据 + AMap”证据链，把 `/api/realtime/locations` 返回量、有效坐标覆盖、AMap Web JS 底图状态、逆地理解析状态放到地图首屏。
- 逆地理解析不再只显示“已解析”：当 `/api/map/reverse-geocode` 返回 404，但 AMap Web JS Geocoder 成功兜底时，页面明确展示“AMap Web JS 兜底”。
- 证据链只使用真实接口、真实坐标、AMap SDK 与当前选中车辆地址，不新增 mock 车辆、mock 平台或不可由源头支撑的功能。
- 移动端将证据链压缩成“选中车辆 + 四个状态格”，隐藏长 endpoint 和错误详情，避免把高德地图主体推出过远。

## 2026-07-09 一百二十九次提炼记录

- 数据源监控页的来源列表从“协议 + endpoint / endpoint”重复展示改为端点主视图，首列直接展示 IP:port 或 MQTT topic。
- 证据类型统一展示为 `TDengine RAW`，样本覆盖口径改成 `VIN/样本帧`，避免把 RAW 样本数误读成平台注册车辆数。
- 来源详情同步改为“协议 / 证据类型、发送端、VIN/样本帧”，继续明确实时接口当前不返回 `source_endpoint`，在线覆盖和 RAW 端点是两层证据。
- 该调整不引入平台台账能力；正式平台名称、来源 IP/端口审批态仍等待 `vehicle_data_source` 或 ops API 接入后展示。

## 2026-07-09 一百三十次提炼记录

- 历史 RAW 查询页将右侧“查询载荷”改成“查询证据”，默认展示方法、字段数、时间窗、分页和真实查询状态。
- 完整 POST body JSON 默认收起到“技术详情”，复制请求仍复制完整 method、endpoint、storage、source、status、total 和 payload。
- 这样首屏优先展示 RAW 查询是否成功、结果数、字段命中和时间窗，技术排障信息仍可一键展开，不再抢占业务结果区域。
- 该调整不改变 `/api/history/raw-frames/query` 的 POST 请求体、字段裁剪、分页或 TDengine RAW 查询逻辑。

## 2026-07-09 一百三十一次提炼记录

- 轨迹回放页新增“时间窗核验”，直接比较查询窗 `dateFrom/dateTo` 与 TDengine `vehicle_locations` 返回点的实际时间范围。
- 当返回点落在查询窗外、缺少时间戳或查询时间不可解析时，页面以橙色提醒核对设备时间、接收时间和表 ts 的使用口径。
- 核验条同步展示查询窗、返回点时间范围、窗外点数量和 AMap 坐标联动状态，让真实轨迹与高德底图的可信边界在首屏可见。
- 该调整不新增后端接口，不改变 `/api/history/locations` 查询参数，只对真实返回点做前端审计展示。

## 2026-07-09 一百三十二次提炼记录

- 轨迹查询面板新增“查最新轨迹”操作，清空 `dateFrom/dateTo` 后按 `/api/history/locations?vin=...&limit=...` 查询服务端最新位置点。
- 时间窗核验支持“未限定时间窗”状态：不再把最新点误判为日期窗异常，而是明确说明当前用于确认最新轨迹是否持续写入。
- 当前实测显示带日期窗的历史轨迹接口会返回前一天点位；页面保留 warning 审计，同时提供最新轨迹入口，避免用户误以为车辆今天没有轨迹。
- 该调整不在前端修正后端日期偏移，不伪造历史数据；只把真实接口的两个可用查询模式显性化。

## 2026-07-09 一百三十三次提炼记录

- 轨迹回放的当前节点证据区把“查 RAW”升级为“查节点 RAW”，按当前 `vehicle_locations.ts` 前后 2 分钟生成 RAW 回查时间窗。
- 跳转历史页时同步带入 VIN、协议、`dateFrom/dateTo`、字段裁剪和定位上下文；历史页提示改为“来自轨迹节点回查”，不再误写成实时字段定位。
- 字段裁剪默认关注经纬度、车速、总里程和链路延迟，便于对照 808/32960/MQTT 的 raw_frames parsed_fields。
- 该调整复用现有 `/api/history/raw-frames/query`，不新增接口，不在前端二次解析协议，只把轨迹点和 RAW 证据链串起来。

## 2026-07-09 一百三十四次提炼记录

- 历史 RAW、告警中心和数据源监控的样例验证入口统一使用 `getSampleBoundaryCopy` 派生文案，避免三处页面各自维护“样例/生产”边界说明。
- 统一后的样例入口必须明确“不代表生产事实”，按钮保持“展开/收起样例记录、样例事件、样例来源”的清晰动作语义。
- 该调整不改变真实接口读取、样例默认收起、分页、筛选或证据跳转逻辑，只把 fallback 口径收敛到一个可测试的 viewModel。
- 新增单元测试覆盖三类样例入口，防止后续迭代把本地样例误写成生产已接入能力。

## 2026-07-09 一百三十五次提炼记录

- 实时指挥台新增“数据能力雷达”，把实时位置投影、协议覆盖、高德地图落点、RAW 证据回查、里程统计口径五类能力集中展示。
- 能力状态由 `buildDataCapabilityRadar` 根据当前真实车辆、实时接口状态、AMap 运行态和查询开关派生，不把告警通知、派单等源头未接入能力放进首页。
- 雷达卡片保留清晰边界说明：实时页只接受实时数据帧，RAW 查询不在前端二次解析，里程按协议来源独立统计，避免 UI 暗示当前源头不存在的能力。
- 新增单元测试覆盖“部分协议覆盖”和“真实链路不可用时不升级为生产能力”，并补充桌面/平板/手机响应式样式。

## 2026-07-09 一百三十六次提炼记录

- 车辆详情面板新增三段式摘要：实时状态、来源可信度、可追溯证据，先回答当前车辆“是否在线、来源是否可信、能否追 RAW/轨迹”。
- 摘要由 `getVehicleDetailDigest` 从当前车辆、主展示来源和来源一致性派生，证据来源明确指向 Redis/MySQL/TDengine，不引入源头未支撑的新能力。
- 三张摘要卡可直接进入对应明细：实时状态回概况，来源可信度切到来源 tab，可追溯证据打开当前协议 RAW 查询。
- 原有概况、实时字段、来源、告警 tab 保留；本次只优化首屏阅读顺序和证据入口，不改变实时数据、字段搜索或 RAW 查询逻辑。

## 2026-07-09 一百三十七次提炼记录

- 原型实时数据从单一 `/api/realtime/locations` 升级为“轻量位置 + 完整快照”双接口：位置接口负责地图坐标和当前态，`/api/realtime/snapshots.parsed_json` 负责补齐全量实时扁平字段。
- 快照字段按已有协议字段命名直接并入车辆 `flatFields`，实时字段面板、字段覆盖统计和车辆详情会看到 GB32960 vendor、JT808 location、YUTONG MQTT 等真实解析字段，不在前端二次解析 RAW。
- 两个接口并行读取并做部分成功降级：位置或快照任一层失败时保留另一层可证明数据，不回退到本地样例冒充生产车辆。
- 统计分析页新增“可信里程口径”模块，按车辆选择一路候选来源展示日里程和总里程，不把 32960、808、MQTT 多协议里程相加。
- 高德地图仍只承载真实坐标落点、轨迹线、marker 和逆地理解析；全量字段来自 MySQL 快照/TDengine RAW，不把地图 API 当成数据源能力。

## 2026-07-09 一百三十八次提炼记录

- 按真实 `/api/realtime/snapshots?protocol=YUTONG_MQTT` 返回确认：宇通 MQTT 的 `yutong_mqtt.data.total_mileage` 是米，原型只在车辆源快照和核心指标里转换为公里，扁平字段列表继续保留源头原值。
- 实时地图、车辆详情和统计入口统一消费 `locations + snapshots.parsed_json` 的合并结果；AMap 只负责底图、坐标 marker、URI 跳转和逆地理解析。
- 核心字段高亮避免把宇通 `total_mileage` 直接标成 km，展示为 `meters->km` 的转换证据，防止业务人员误读里程数量级。
- 新增单元测试覆盖宇通 MQTT 快照-only 场景：没有 `locations` 行时，也能从真实快照字段生成地图坐标、速度、SOC 和公里制总里程。

## 2026-07-09 一百三十九次提炼记录

- 历史 RAW 页的“RAW 定位证据”与实时快照使用同一套里程口径：宇通 MQTT `total_mileage` 按米转公里，GB32960/JT808 `total_mileage_km` 保持公里原值。
- RAW 定位证据新增“里程字段”展示，明确当前总里程是 `km` 直出还是 `m->km` 转换，避免从 AMap 坐标点追 RAW 时出现数量级误判。
- 坐标、速度、里程证据抽到 `rawEvidence` 小模块，历史页不再在组件内部重复维护协议字段挑选逻辑。
- 新增 RAW 证据单元测试，覆盖宇通米制、GB32960 公里制和无效坐标过滤三类核心边界。

## 2026-07-09 一百四十次提炼记录

- 实时指挥台新增“指挥优先级”窄条，放在地图、车辆列表、详情三栏之前，先回答哪些车辆会影响在线、定位和统计可信度。
- 优先级只从当前筛选后的真实车辆派生四类事项：来源健康、坐标缺失、里程缺口、字段覆盖；不接新接口、不展示源头不能证明的能力。
- 每个优先事项可点击定位到第一台相关车辆，地图、车辆列表和详情随选中车辆联动，减少在长列表里手动查找问题车辆。
- 桌面端保持四项横排，平板两列，手机改为横向可滑动短条，避免把 AMap 地图主体推出首屏太远。
- 新增 `getCommandPriorityItems` 单元测试，覆盖离线来源、无效坐标、缺里程和字段覆盖不足的调度优先级判断。

## 2026-07-09 一百四十一次提炼记录

- 车辆详情概况页新增“排障路径”：当前态、来源一致性、证据闭环三步，先告诉运维人员应该按什么顺序确认问题。
- 每一步仍只依赖现有投影：Redis online、MySQL realtime snapshot/location、TDengine raw_frames/vehicle_locations，不引入新的未接入能力。
- 排障路径支持动作联动：当前态回到概况，来源一致性切到来源 tab，证据闭环直接进入当前协议 RAW 查询。
- 视觉上使用窄轨道式步骤，而不是再堆大卡片，保持右侧详情面板可扫描、可连续阅读。
- 新增 `getVehicleDiagnosticSteps` 单元测试，覆盖字段缺失、多源里程差异和可回查证据链的生产排障判断。

## 2026-07-09 一百四十二次提炼记录

- 车辆详情“来源”tab 从协议卡片改为来源判责表，按每个协议来源展示当前展示标记、在线态、最近上报/延迟、字段覆盖、总里程/里程差异、问题摘要和动作。
- 判责行由 `getVehicleSourceResponsibilityRows` 派生，不接新数据源；问题摘要只来自现有 source 状态、字段数、里程缺失和多源里程差异。
- 右侧详情面板宽度有限，判责表采用紧凑行内矩阵，而不是传统 7 列宽表，避免横向溢出并保留可比较性。
- 每行继续保留“轨迹 / RAW”动作，便于从来源责任判断直接进入 TDengine 证据回查。
- 新增单元测试覆盖当前来源字段缺失、其他来源里程差异、离线来源和缺里程的判责状态。

## 2026-07-09 一百四十三次提炼记录

- 统计分析页新增“统计判读”面板，先判断可信里程来源、日里程 API、多源一致性和协议覆盖，再展示统计明细。
- 判读结果由 `getStatsInterpretationItems` 从真实 realtime vehicles、接口探测结果和协议筛选派生，不使用本地样例生成统计真值。
- 日里程、趋势、排名继续受 `/api/mileage/daily` 或 `vehicle_daily_mileage` 接入状态控制；接口未就绪时只展示实时总里程和来源可信度。
- 高德地图能力继续限定为 Web JS 底图、marker、轨迹线、URI 跳转和逆地理解析；统计判读不把 AMap 当成车辆业务数据源。
- 新增单元测试覆盖可信里程、日里程 API、多源一致性和三协议覆盖的判读摘要，防止后续把多协议里程相加或展示源头未支持能力。

## 2026-07-09 一百四十四次提炼记录

- 历史 RAW 详情的“RAW 定位证据”新增地址解析子卡，选中 RAW 行有有效经纬度时自动调用 `/api/map/reverse-geocode`，失败后沿用 AMap Web JS Geocoder 兜底。
- 地址证据仍以 TDengine `raw_frames.parsed_fields` 的坐标为源头，高德只负责逆地理可读化和坐标跳转，不新增路径规划、围栏或业务统计能力。
- 证据子卡展示解析状态、地址、区域和兜底来源，方便从 RAW 字段直接判断坐标是否能落到真实道路/区域语义。
- `rawCoordinateAddressEvidence` 把 RAW 坐标和地址解析状态收敛为可测试模型，避免 UI 直接拼接地址状态导致后续口径漂移。
- 新增单元测试覆盖 RAW 坐标地址解析摘要和无坐标边界，继续保持“有源头数据才展示能力”的原型原则。
