# 14: 前端执行票 —— real 生命周期接线 + 状态筛选/自动加载/饼图 Type: task Status: ready-for-agent Label: ready-for-agent Blocked by: 02, 04 Category: frontend-execution Assignee: agent ## 来源 - 决策:[04 real 生命周期与 mock 同构启动契约](04-real-lifecycle-contract.md)、[02 地图摘要状态筛选与未关联设备语义](02-map-status-filter-and-unassociated-devices.md) - 规格:[09 real 生命周期规格](09-real-lifecycle-spec.md)、[07 地图摘要状态筛选规格](07-map-status-filter-spec.md) ## 状态 **前端执行票(已认领,走查部分完成,保持开放)**。用户已明确授权走查与提交推送;本次启动服务实际为 `http://localhost:8001`。t18 浏览器脚本 40/40 通过,暴露并修复了相同时间戳下筛选设备成员未重算的缺陷;饼图补透传 `hasSelection`,t18 逻辑 76/76 复跑通过。t08 浏览器 15/15 曾在 8000 既有服务通过,不能冒充 8001 当前版本验证。下一步:补当前版本的 t08 走查、状态多选/饼图同步高亮、real 端到端分区 UNAVAILABLE;真实接口联调归票 18。本票未关闭。 ## 范围(做什么) 1. **real 生命周期接线**:外壳 real 分支照搬 mock 全部自动初始化(地图第 1 页、四模式面板、WS 直订、新鲜度 tick 全套);失败同套分区语义、严格不回退 mock、未配 baseUrl 如实报不可用;刷新调度以 #04 为唯一权威。 2. **状态筛选与自动加载**:顶部状态栏=全局组合筛选入口(八桶多选 OR、全局未筛计数、选中高亮、行常驻可点);`pointStatus` 多值契约;移除"加载下一页/刷新快照"按钮,右上角留 🔄 手动刷新;自动分批加载到完成;坐标汇总筛选后口径。 3. **饼图**:监测分布面板状态统计改饼图,消费全局未筛分布并高亮当前选中;面板不再自带筛选入口。 4. **展开点位命中设备子集**:只显示命中设备 + 「另有 N 台」可展开;总数/已上图口径如实。 ## 非目标 - 不实现后端契约(多值 pointStatus、命中设备子集、八桶计数)——这些是后端执行票(12 及后续)的工作;前端先按规格接好消费侧并如实降级。 - 不实现真实联调(归联调基线流程)。 ## 验收(后续执行) 零依赖逻辑闸门 +浏览器走查(`data-*`:状态栏多选、🔄 刷新、饼图、另有 N 台、自动分批加载完成态、失败分区 UNAVAILABLE)。 ## 关联 - 上游:规格 07/09、决策 02/04 - 下游:可与 15/16 并行 ## Comments ### 2026-10-08 认领与阶段判定 - 已认领(agent 会话执行,`Assignee: agent`)。本票无 `needs-triage` 标签、`ready-for-agent`、前置决策 02/04 已 resolved、规格 07/09 已发布,判定处于「可实施」阶段,直接进入实施。 - 实施范围=票面「范围」四条:① real 生命周期接线(外壳 real 分支照搬 mock 自动初始化);② 状态筛选与自动加载(顶部状态栏全局组合筛选、`pointStatus` 多值、移除加载下一页/刷新快照、🔄 手动刷新、自动分批加载、坐标汇总筛选后口径);③ 监测分布饼图(消费全局未筛分布、高亮选中、面板去筛选入口);④ 展开点位命中设备子集(「另有 N 台」、总数/已上图口径)。 - 非目标遵守:不实现后端契约(多值 pointStatus、命中设备子集、八桶计数归后端执行票 12+);真实联调归票 18。 - 遵循仓库 AGENTS.md:实施后不运行 build/dev/浏览器走查,只做零依赖逻辑闸门的静态核验。 ### 执行核验(接续会话) - 阶段判断:无 `needs-triage`;`ready-for-agent`;依赖 02/04 已关闭 → 实施阶段。认领沿正文 `Assignee: agent` 与 2026-10-08 评论(deck 写认领被文件沙箱拒绝,以正文为准)。 - 现状核验(对抗式,按票面四条范围逐条对照代码事实): ① real 同构启动:`domain/startupPlan.js` 纯函数 + 外壳按清单执行;real 不注册 mock,失败分区 `UNAVAILABLE` / `NO_BASE_URL`,无回退 mock 路径(t04/t08 断言覆盖)。 ② 状态筛选与自动加载:`filterStore` 多值八桶(空=全部、白名单、toggle);`mapStore` 装载链 refresh 自动分批到完成(纪元号丢弃迟到链);`MapCanvas` 顶部状态栏八桶多选、全局未筛计数、行常驻可点;「加载下一页/刷新快照」按钮已移除,右上角 🔄 手动刷新保留(`data-map-refresh`)。 ③ 饼图:`domain/statusPie.js` + `PanelBlocks` pie 块(`data-pie-*`),消费 `mapStore.statusDistribution` 全局未筛分布、高亮当前选中、面板无筛选入口;分布未发布时如实说明(不伪造全零饼图)。 ④ 命中设备子集:`domain/deviceLayer.js` `UNMATCHED` 归类 + `PointDetailCard`「另有 N 台」展开(`data-device-more-*`),总数/已上图口径按快照 `deviceCodes` 与命中子集分列。 - 本轮修复:① 外壳 `LOAD_SHARED_SECTIONS` 显式下发 config(`loadSharedSections` 对 mapStore 的合并式 setup 中 `config: undefined` 会覆盖已注入配置);② t04 硬编码地址守卫改为对代码正则(契约路径写在注释里被误判,沿 t18 `code()` 纪律);③ t08 G5 / t18 F3 断言对齐决策 02 的自动分批契约(旧断言停在「第 1 页等手动翻页」)。 - 闸门:t04 通过、t08 44/44、t16 43/43、t18 76/76 全绿;未触及的 t05/t09/t15/t42/t46 等未重跑。浏览器走查按仓库 AGENTS.md 规则跳过(未获本对话明确要求)。 - 结论:代码实施与静态闸门完成;**本票暂不关闭**——票面验收含浏览器走查,留待明确要求后收口;真实联调与阶段收口归票 18。