# 驾驶舱真实后端数据接线(决策地图) Status: open Labels: wayfinder:map 本 effort 先产出跨前后端真实数据接线所需的决策,再为已收口的决策创建前端/后端执行票。地图不直接修改后端代码;后端执行票需在后端仓库、负责人和权限明确后开启。 ## Destination 为 `/cockpit` 四个只读一级模式建立一条可验收的真实数据接线路线:报警—工单闭环读模型 → 地图摘要 + 运行监测 → 基础设施 → 预警处置 → 总体概览。报警—工单阶段由外部业务系统执行工单流程,驾驶舱只读取并实时呈现真实报警、工单关系和状态,不提供任何写操作。 目的地达成的判据:后端契约与真实适配器已提交并通过测试,前端 real 生命周期与 mock 同构,真实联调基线(提交版本、环境、认证、只读数据源)已锁定,筛选/分页/快照/推送/空态/失败态语义通过验证,并完成真人团队的真实设备报警闭环验收;real 失败不回退 mock。 ## Notes - Domain:城市生命线 Web 驾驶舱。术语以 [`CONTEXT.md`](../../CONTEXT.md) 为准;`监测点`、`监测设备`、`地图摘要`、`快照`、`异常点`不可混用。 - 复用现有事实台账:[`后端契约缺口待办`](../cockpit-shell-panel-layout/issues/25-backend-contract-gaps.md) 及其 [`后端契约缺口交付包`](../cockpit-shell-panel-layout/handoff/backend-contract-gaps.md)。后端 Gogs `真实数据接线(程序级)`作为上位来源,但不作为唯一笼统执行票;后续按切片拆分粒度明确的后端票,并注明承接关系。 - 已确认推进顺序:报警—工单闭环读模型 → 地图摘要 + 运行监测 → 基础设施 → 预警处置 → 总体概览。 - 首阶段由外部业务系统完成工单流程,驾驶舱只读消费报警、工单、设备和监测点关系;后端拆为工单状态与处置率读模型、报警/工单回联读模型、实时同步三票,前端另建对应迁移/接线/实时消费票。 - 已确认运行策略:默认 mock;`real` 必须由部署配置显式开启;真实请求失败只影响对应分区,不回退 mock,也不牵连其它分区。 - 已确认业务口径:处置率 = 状态 5(已结案)工单数 / 状态 0–6 工单数,状态 7(取消)排除;数据库 `create_time` → Java `createTime` → API `createdAt` → 前端“数据时间”;`maintainer`、`district`、`ownership_unit` 各自保持字段语义,历史“责任区域”不属于本次目的地。 - “异常”允许按监测点、监测设备/指标分别统计各自异常集合;预警处置地图的“异常点”仍只由设备 `WARNING`/`ALARM` 回联决定,不因统计总称扩大可见范围。 - 驾驶舱鉴权范围已修订为只读 REST `/api/cockpit/v1/**` 与 WS `/ws/deviceStatus` 不鉴权;后端其他路径与未来写接口不受此变更影响。权威记录见旧鉴权决策与 ADR 0005,票 25 承接后端执行证据。 - 技能:`grilling`、`domain-modeling`、`research`;决策票逐张处理,决策完成后再创建执行票。 - 本地 tracker 仅支持 Markdown 的 `Blocked by:` 依赖表达,没有独立原生建边接口;本图按 tracker 规则落依赖并在建图后校验数量。 ## 任务清单 - [x] [01: 报警—工单闭环读模型与 Gogs 票拆分边界](issues/01-backend-slice-ticket-boundary.md) - [x] [02: 地图摘要状态筛选与未关联设备语义](issues/02-map-status-filter-and-unassociated-devices.md) - [x] [03: 监测数据时间字段与异构设备来源](issues/03-monitoring-created-at-contract.md) - [x] [04: real 生命周期与 mock 同构启动契约](issues/04-real-lifecycle-contract.md) - [x] [05: 真实联调基线与收口证据门槛](issues/05-integration-baseline-and-evidence.md) - [x] [06: 异常统计、工单处置率与管理字段词汇](issues/06-cross-mode-business-semantics.md) - [x] [07: 地图摘要状态筛选与未关联设备语义规格(来自决策票 02)](issues/07-map-status-filter-spec.md) - [x] [08: 监测数据时间字段规格(来自决策票 03)](issues/08-monitoring-created-at-spec.md) - [x] [09: real 生命周期与 mock 同构启动规格(来自决策票 04)](issues/09-real-lifecycle-spec.md) - [x] [10: 业务语义规格(异常统计、工单处置率、片区/行业与管理字段 — 来自决策票 06)](issues/10-business-semantics-spec.md) - [x] [11: 后端执行票 —— 工单状态与处置率读模型对齐](issues/11-backend-work-order-rate.md) - [x] [12: 后端执行票 —— 报警/工单读模型、设备–监测点回联 + district 片区契约](issues/12-backend-read-model-district.md) - [x] [13: 后端执行票 —— 报警/工单实时同步](issues/13-backend-realtime-sync.md) - [x] [14: 前端执行票 —— real 生命周期接线 + 状态筛选/自动加载/饼图](issues/14-frontend-real-scope-filter.md) - [x] [15: 前端执行票 —— 数据时间展示 + 片区/行业维度 + 管理面板片区化](issues/15-frontend-time-dimension-panel.md) - [x] [16: 前端执行票 —— 报警–工单闭环消费(事件/工单状态/时间线/处置率/异常点)](issues/16-frontend-alarm-order-consumption.md) - [x] [17: 部署后真实环境复验(后端切片 11–13,滚动复验票)](issues/17-postdeploy-live-verification.md) - [ ] [18: 前端真实接口联调与阶段收口](issues/18-frontend-real-integration-gate.md) - [x] [20: 后端执行票 —— 管网编码 0/1 映射与设备边界设施类型命名空间](issues/20-20-0-1.md) - [x] [23: 前端执行票 —— 地图快照分页 token 与 pointStatus 八桶契约对齐](issues/23-23-token-pointstatus.md) — 已收口(票面 resolved;证据与结论见 Decisions so far 对应条目) - [x] [后端执行票 —— map-snapshot 与 monitoring distribution 的 pointStatus 八桶契约](issues/29-map-snapshot-monitoring-distribution-poi.md) — 已实施、测试、真实联调并关闭;提交`7fb7c2c`,已随合并`60a0e9a`推送至后端origin/master - [x] [25: 前端执行票 —— 去除 Cesium ion 署名与 Data attribution 控件](issues/25-25-cesium-ion-data-attribution.md) — 署名已移出画面,数据来源署名并入外壳既有状态面板;浏览器验收 0 报错、0 条 ion 请求 - [x] [后端执行票 —— 设施总数三处口径不一致(5278 / 5276 / 5273)](issues/31-5278-5276-5273.md) — 已实施、测试、真实复验并关闭;提交 `96834794` 已推 origin/master,现场三端 facilityCount 均 5283 - [x] [24: 前端执行票 —— 设施点位与管线真实几何图层接线](issues/24-24.md) — 四条验收全过:真实 5268 条管线绘制、图层显隐正确、无地图位置清单自洽(5287/5281/6)、设施总数三端一致 5283 - [x] [32: 管线构件 glTF 素材与实例化渲染(样条/角/阀门/支管四类)](issues/32-32.md) — 用户确认功能收口;glTF实例化、地面近景保线、network_level分色及缺径默认DN已交付;未完成的部署/性能复验见票面最终状态。 - [x] [34: 坐标自动准入(取消人工校核前置)与主场景区边界冲突](issues/34-coordinate-auto-admission.md) — 已实施、独立复核并关闭;真实接口 12/15 与 5269/5272、零 `UNVERIFIED`,区外口径裁定 A。原编号 32 与 glTF 素材票重号,已改号 34 - [x] [27: 前端执行票 —— 监测点台账分母渲染 undefined](issues/27-27-undefined.md) — 已修复并关闭:空态 `section.data` 为 null 使守卫漏判 `undefined`,改用 `numberish()` 收口;离线 8/8 + 真实浏览器正反证成对取得 - [x] [26: 诊断票 —— 主场景等待后画面抽搐的根因定位](issues/26-26.md) — 已诊断收口:根因=30s freshness tick 的全量分页重载使 `syncPipeLayer` 每批重赋值 5000+ 实体几何;修复归票 33 - [x] [33: 前端执行票 —— 每 30s 刷新触发全管线重同步的画面抽搐修复](issues/33-33-jitter-fix.md) — 已实施并关闭(维护者目视终判);**改动尚未提交**(工作树混有并行在制品,入库须单独裁剪),详见 Decisions so far - [x] [37: 前端执行票 —— 共用长文本省略方法 + 监测概览设备类型分布筛选与降序排序](issues/37-shared-ellipsis-and-type-filter.md) — **已收口(2026-10-15,closed)**:离线闸门 t50 **30/30**(Pinia 恢复后 store 级 toggle/归一/reset 全部实跑)+ 浏览器四条正反证(点击筛选 9→2 台、再点取消恢复、切模式保持、降序 2/2/1… 且 title 与原文同源);**改动未提交**(混有并行在制品),38/39/40 依赖的省略方法(`domain/ellipsis.js` + `EllipsisText.vue`)已就位,详见票面实施记录 - [ ] [43: 前端执行票 —— 工单堆叠图语义间隔与饼图交互](issues/43-untitled.md) — 调查工单堆叠图类别间小间隔是像素舍入/绘制缺陷还是设计语义(设计则加说明);补齐饼图/环图悬停放大、高亮、共享详情浮层与键盘焦点 - [x] [44: 前端执行票 —— 类型分布降序与统计条视觉密度优化](issues/44-untitled.md) — **已收口(2026-10-15,维护者确认,closed)**:普查结论**无遗漏块**,新增 t44 完备性闸门(乱序载荷灌真实适配层 ×14 面板,RANK/FIXED 期望表双向锁定,103/103 + 变异 6/6);统计条密度落地(行内 8u→4u、删 8px 越界辉光、轨道发丝边、填充端帽+高光),EllipsisText/panel-action/data-bar-* 三接缝零改动;改动随 `bd45f27` 入库(本地未推送) - [ ] [45: 前端执行票 —— 场景监测点状态优先级、并行状态与告警特效](issues/45-map-marker-state-priority-and-effects.md) — 业务状态(工单处置>报警>预警>离线>正常)与附加状态(无关联/无设备/未发布)拆两条并行轴;无关联设备改黄绿色且不抢业务异常;强化预警/报警特效并让监测点产生特效 - [ ] [46: 前端执行票 —— 监测点与设备详情卡片化、分类查询与历史折叠](issues/46-point-device-detail-card-and-history-filters.md) — 详情面板优先用图表/卡片;设备卡片预警/报警/工单增加分类查询;历史条目可折叠且每条可展开详情 - [ ] [38: 前端执行票 —— 基础设施面板调整(基础档案同行 / 删除规模 / 运行信息定位修复 / 管理信息片区×行业图表)](issues/38-infrastructure-panel-adjustments.md) - [ ] [39: 前端执行票 —— 运行监测面板图表化(监测概览读数 / 监测分布分节)](issues/39-monitoring-charts.md) - [ ] [40: 前端执行票 —— 运行概况与监测点台账卡片化 + 定位修复](issues/40-operation-ledger-cards.md) - [x] [41: 后端执行票 —— 预警设置端点改为预警自身生命周期统计](issues/41-warning-settings-endpoint-rework.md) — 已实施、测试、第二实例真实复验并推送关闭;预警族改预警自身生命周期(WarningWorkflow 六态/等级/行业/片区分布 + 已解除率),报警族保留工单口径并存 `alarm_status` 生命周期;契约测试 24/24、全量 498/498、真实分布四组和恒等于 total;提交 `b047a60d` 已推 origin/master;基线卡片 [warning-settings-lifecycle](handoff/baselines/warning-settings-lifecycle.md) - [x] [42: 前端执行票 —— 预警设置面板消费预警自身生命周期契约](issues/42-42.md) — 已实施、守卫、mock 同构并收口(提交 `0cd16ac` 本地未推送,推送需维护者裁剪协调,见票面);预警族工单口径 null 保真 + 四分布块,报警族工单口径与 `alarm_status` 分布并存,态势总览改预警已解除率;t42 守卫全绿、t20 守卫随契约更新(6 条既有红经 HEAD 基线对照与本票无涉);真实走查归票 17 部署窗口 - [x] [35: 后端执行票 —— 监测三端点 createdAt 真实契约缺失](issues/35-createdat.md) — 已实施、测试、真实复验并关闭;新增单一口径来源 `CockpitCreatedAt`,三端点信封级 + 逐对象 `createdAt` 齐备,`t18-real-audit` 140/143 → **143/143**;提交 `05c23774` 已推 origin/master - [x] [36: 前端执行票 —— 调色后处理着色器编译失败使地图停止渲染](issues/36-untitled.md) — **已修复、提交并关闭**:限定提交 `850c6c6`(shader 一行 `varying`→`in vec2` + t49 闸门 GLSL3 反向锁定与截断哨兵,哨牙经变异测试证实);纯提交内容 worktree 复跑 t49/t38 全绿、GLSL1 零残留、真机零 shader 错误、CDP 交互探针 9/9(四模式/定位/跨刷新周期,引擎恒 ready、`mapGrade=on`)。未推送——分支 16 个未推送提交多为并行在制品,不代推。根因=GLSL1 `varying` vs Cesium WebGL2 `#version 300 es`(引入 `e2529b5`);诊断期曾与[票 49](../cockpit-shell-panel-layout/issues/49-3d-glsl.md) 判重(同修法一致),维护者指令后固化提交收口。 > **tracker 重号已修(2026-10-12)**:坐标自动准入票原编号 32 与 [32-32.md](issues/32-32.md)(管线构件 glTF 素材)重号,已改号为 **[34](issues/34-coordinate-auto-admission.md)**,全 effort 票号唯一性恢复。 ## Decisions so far - [前端执行票 —— 类型分布降序与统计条视觉密度优化](issues/44-untitled.md) — **已实施并关闭(2026-10-15,维护者确认收口)**。排查结论:**无遗漏块**,但票 37 只测一块不构成完备性证据——新增 [t44 普查闸门](verify/t44-distribution-ranking.mjs):乱序后端载荷灌真实适配层(14 面板视图 × 全部分布块),期望表**双向锁定**(表外新块必显式归类 RANK/FIXED 否则判红;表内块消失也判红),RANK 降序+并列保序、FIXED 固定语义序(状态/等级/年限/工单 0–7)不被强行降序且期望本身非单调才有牙;103/103 + [变异闸](verify/t44-mutations.mjs) 6/6 打红按字节还原。视觉密度:条形行内间距 8u→4u、**删 8px 越界辉光**(条段糊邻行的直接成因)、轨道 6u+发丝内描边、填充 ::after 高光+端帽装饰层;读数密度与交互不变,`EllipsisText`/`panel-action`/`data-bar-*` 三接缝由守卫锁定。改动随并行合批提交 `bd45f27` 入库(本地未推送,推送归维护者统筹)。**方法论**:「补齐遗漏块」的正确形状不是排查一次清单,而是把完备性做成机制——普查表双向锁定后,任何新分布块漏归类即红。 - [管线构件 glTF 素材与实例化渲染(样条/角/阀门/支管四类)](issues/32-32.md) — 2026-10-15按用户“基本没有问题,可以收口”确认关闭功能票:四类示意件/GPU实例化、地面近景保线、排水network_level分色和缺径默认DN交付(前端`aa529db`、后端`7150d431`);部署字段、4K FPS及浏览器故障画面的未验证边界留在票面最终状态,不声称全门槛通过。 - [42: 前端执行票 —— 预警设置面板消费预警自身生命周期契约](issues/42-42.md) — **已实施、守卫、mock 同构并关闭(2026-10-14,提交 `0cd16ac` 本地未推送)**。前端适配后端 `b047a60d` 两族口径分叉:`toOverviewWarningSettings` 对预警族工单口径字段 **null 保真**(不再补 8 根假零条、`numberish` 不数 0),四组生命周期分布直读透传(`sum(桶)==total` 自洽);视图拆 `warningFamilyBlocks`(KPI=总数+已解除率,四分布块,零工单词汇)与 `alarmFamilyBlocks`(工单口径 + `alarm_status` 分布并存);态势总览处置率 KPI 改**预警已解除率**(hint 写明分子分母,判据复用票 20 单源)。mock 同构(含 UNKNOWN/UNASSIGNED 显式桶、空场景全铺计数 0)。**守卫**:新增 t42 契约脚本(基线卡片 §4.2 真实值过领域+视图两层);t20 守卫随契约更新(B3c→报警族、B3e/B3f/C4d 新增、M4 锚点重定位、M14 新增——已用领域层直证变异必被 B3e 抓住)。**验证**:t42 全绿;t20 **60/66**,6 条红经 HEAD 临时 worktree 基线对照证实为**既有失败**(57/63 同样 6 条,与本票 diff 零交集)。**入库纪律**:工作树混有票 37–40 孤儿在飞批次,经 git plumbing 只暂存本票 hunks,孤儿批次字节未动;提交版先在 HEAD worktree 过语法+t42 全量断言。**未推送**(本地领先远端 19 提交,多为并行在制品,不代推)。遗留:真实走查归票 17 部署窗口;预警族 KPI 行混用 alarm_status 与工单两种口径属后端契约语义问题,建议维护者裁定。 - [36: 前端执行票 —— 调色后处理着色器编译失败使地图停止渲染](issues/36-untitled.md) — **已修复、提交并关闭(2026-10-14,实施提交 `850c6c6`)**。**根因**:调色后处理 `GRADE_FRAGMENT_SHADER` 用 GLSL1 的 `varying`,而 Cesium 1.145 在 WebGL2 下对全部 shader 前置 `#version 300 es`(GLSL ES 3.00 删除 `varying`)→ 编译失败即整帧 `Rendering has stopped`(黑屏);引入提交 `e2529b5`(同文件雾 shader 早在 `8db64fc` 已迁 `in vec2`,调色漏迁),触发条件=调色默认启用且部署 config 显式启用。**修复(限定 2 文件 +12/−4)**:片元输入一行 `in vec2`(采用票 49 已验证修法——诊断期曾判重,维护者 /implement 指令后固化提交);t49 闸门从「把 bug 当规格」(原断言 `varying` 正确)反向锁定为 GLSL3 断言 + GLSL1 拒绝 + **截断哨兵**(`void main` 存在性,防提取正则被杂散反引号静默截断 fail-open——变异注入反引号闸门转红、还原转绿,证明哨兵有牙)。**验证三面**:纯提交内容(临时 worktree)复跑 t49/t38 全绿 + GLSL1 零残留;真机 dev 实例连续渲染零 shader 错误;CDP 无头交互探针 **9/9**(`verify/artifacts/t36/probe-acceptance.mjs`:四模式切换/真实对象定位/跨 freshness 周期静置 35s+30s,引擎恒 `ready`、`mapGrade=on`、零 pageerror、帧形态无周期尖峰——绕开浏览器会话 5 上限,复用票 26/33 的 cdp-driver 模式)。**未推送**:前端分支 16 个未推送提交多为其他会话在制品,不代推;缺陷本不在 `origin/master`(无调色处理级),随分支统一推送上线。**方法论**:限定提交用「HEAD blob + 单行替换 → hash-object 写 index」精确暂存,不触碰工作树 229 行并行改动;提交自洽性用临时 worktree 在纯提交内容上复跑闸门证明,而非只信工作树绿。 - [41: 后端执行票 —— 预警设置端点改为预警自身生命周期统计](issues/41-warning-settings-endpoint-rework.md) — **已实施、测试、第二实例真实复验并关闭(2026-10-14)**。**口径裁定(维护者本会话)**:预警不走工单流程 → 预警族只给预警自身生命周期(`WarningWorkflow` 六态/等级/行业/片区分布 + 已解除÷总数,工单口径六字段一律显式 `null` 不用 0 冒充);**报警族保留工单口径**(报警靠工单闭环)并并存 `alarm_status` 自身生命周期。**诊断修正**:票面的 `dispatch_user` 故障已过期,复测为 `dept_id`(实体声明已删列),真实根因是运行构建落后库结构——上游 `94bb7e4d` 已删该列,故本票基于 `origin/master` 独立 worktree 实施,未动共享工作树的并行在制品。**验证**:契约 24/24、全量 `Cockpit*Test` **498/498**(变基后复跑);第二实例(8399,同库同 Redis)实测 `code=200` 且预警族四组分布和恒等于 total(31)、报警族 66 自洽;对照共享实例 8301(上游构建)仍回旧契约,证明新契约出自本票。提交 **`b047a60d`** 已推 `origin/master`(`05c23774..b047a60d`)。前端消费侧(读新分布块 + mock 同步)另立票。基线卡片 [06 预警设置生命周期](handoff/baselines/warning-settings-lifecycle.md)。 - [35: 后端执行票 —— 监测三端点 createdAt 真实契约缺失](issues/35-createdat.md) — **已实施、测试、真实复验并关闭(2026-10-14)**,解除了票 18 阶段收口的最后一项技术阻断。**根因**:字段从未实现(cockpit 包 `createdAt` 零命中、`git log -S createdAt` 零提交),已排除「部署滞后」「Jackson NON_NULL 省略」「字段名/落点不同」(反证:同响应 `district`/`reason`/`longitude` 等 null 均显式序列化)。**实现**:新增单一口径来源 `cockpit/foundation/CockpitCreatedAt`——只做 `create_time` → `createdAt` 格式化与跨来源 max,**不读时钟**,故「拿响应时间冒充数据时间」在结构上不可达;按规格 08 补齐三端点信封级 + `distribution` 点位/未关联设备 marker + `situation` 异常设备逐对象。**口径**(维护者 2026-10-14 裁定 Q3):`situation` 信封取异常设备来源表 `create_time` max(与逐对象同源可复算),事件时间仍由趋势桶 `bucketStart` 承载。**验证**:`Cockpit*Test` **507/507**(新增契约 18 项);真实只读三端点 `createdAt` 齐备、均 ≠ `updatedAt`,`distribution` 6/6 点位 + 9/9 设备、`situation` 8/8 异常设备逐对象齐备且信封 == 逐对象 max(自洽复算);权威审计 `t18-real-audit` **140/143 → 143/143**;前端三面板「数据时间」由 `—` 变真实值。**源表核对**(Kingbase JDBC 直连,非只看响应自证):`monitor_point` 六点位 `create_time` 全 NULL、`21119740` NULL 而另两台为 `15:15:12`/`15:15:47`——逐对象 `null` 属**数据真实缺失**,非映射缺口。提交 `05c23774` 已推 `origin/master`(`5a821872..05c23774`)。**并行在制品纪律**:只裁剪本票 20 个文件提交,变基推送时临时 stash 并行会话 #32 几何在制品并**按字节还原**(5 文件 `git hash-object` 逐一 IDENTICAL)、分支 tip 复位,未代表他人提交或推送。 - [24: 前端执行票 —— 设施点位与管线真实几何图层接线](issues/24-24.md) — 真实设施与管线几何已接上图并四条验收全过:权威读取路径定为**后端驾驶舱自建几何读模型**(复用业务 GIS 端点会撞 ADR 0005 免鉴权边界且只覆盖供水),渲染层定为 **Cesium**(实测栈内零 three/Tres,规模仅数千段);程序化建模按**燃气出全套构件、其余行业如实降级**(只有燃气有 `point_type` 构件属性,管段无共享端点拓扑故不推断角/支管)。真机实测真实 5268 条管线绘制、无地图位置清单与徽标自洽(5287/5281/6)、设施总数三端一致 5283。过程中逮到并修掉两个真缺陷:**取数失败被显示成"没有管线"**(失败交 `null` 而非空数组)、**`loaded.total` 漏加不可图数**。构件 glTF 素材另立[票 32](issues/32-32.md)。 - [34: 坐标自动准入(取消人工校核前置)与主场景区边界冲突](issues/34-coordinate-auto-admission.md) — **取消人工校核前置**:`coordinateVerified` 不再参与判定,改「结构合法 + 落在 `map.primaryArea.bounds` 内」自动准入,新增原因码 `OUTSIDE_PRIMARY_AREA`,判定顺序「结构错误优先于区外」。**根因**是判据第一道 `if (!coordinateVerified)` 恒拦下全部真实数据,而全后端既无校核列也无校核入口(管理端 `E:\city-life-line` 零引用已复核)——前端「只认 renderable」是正确行为。真实接口闭环:`map-snapshot` **0/15 → 12/15**、`unverifiedCount` **15 → 0**;`infrastructure/geometry` **0/5272 → 5269/5272**;5 端点扫描零 `UNVERIFIED` 残留;5272 条几何跨界 **0** 条。**区外口径裁定 A(严格主场景区)**:接受框外不上图/不可定位,ADR 0009 的框外定位例外经产品路径已不可达(相机层实现保留),并写入「准入矩形后端是常量、限位侧是配置,改一处必须改两处」的同源警告。独立复核补记:修复提交曾只在本机未推送(从远端部署会静默回退),经核对已由并行会话变基推送至 `origin/master`(`f33ef570`/`d81c977b`,patch-id 与旧哈希逐位相同)。**遗留**:3 条脏几何(`YL-YJ-001/002`=`1212,1212`、`GD-001`=`12,12`)属业务侧订正。原编号 32 与 glTF 素材票重号,已改号 34。 - [23: 前端执行票 —— 地图快照分页 token 与 pointStatus 八桶契约对齐](issues/23-23-token-pointstatus.md) — 前端交付(缺 token 停住翻页、`toStatusDistribution` 八桶完整性校验——缺/重/非法/负/非整数桶一律 `available:false` 不补 0、`statusFilterQuery` 白名单丢弃 `BOGUS` 不发脏值)在 #29 关闭后完成两项真实验收收口:状态栏与饼图显示真实八桶(EMPTY=6、UNASSOCIATED=7 其余 0,同源),多选筛选使点数 13→1(ALARM)→2(+WARNING),全局计数不随筛选变化;`BOGUS`/`ALARM,BOGUS` 两端 400 `INVALID_REQUEST`,分页 token 跨页保留。前端源码本轮未改(仅既有 `mapSummary.js` 防护),重跑 [t23-map-contract](verify/t23-map-contract.mjs) 11/11 过;真实浏览器验收证据取自 #29 同环境会话,本会话未重跑(构建/浏览器按项目规则未被要求)。 - [25: 前端执行票 —— 去除 Cesium ion 署名与 Data attribution 控件](issues/25-25-cesium-ion-data-attribution.md) — **更正票面技术前提**:`creditContainer` 是「放哪个容器」而非开关(两条路径都会建 CreditDisplay),按原文字面实施会无效;改用**离屏容器**才真正隐藏。本部署经核实零 ion 依赖(地形/影像/3D Tiles 全本地 URL),隐藏 ion 署名不违约,且该前提已固化为回归断言。地图上除顶部状态图例外的全部信息(图层、加载状态、降级说明、标记计数、坐标准入、引擎读数、数据源署名)**并入外壳既有的那一个状态面板**(维护者否掉了「另起面板」:会与图例和外壳面板互相占用容器);并修掉引擎读数被 `ellipsis` 截断、清单容器异常占空、长编码被右侧裁掉,以及展开后清单宽度不撑满容器(根因是内容块上的 `justify-items: start` 把所有子项收窄成 fit-content)四个问题。浏览器实测:署名与 Data attribution 均已消失,335 请求 0 报错、0 条 ion 请求,各图层正常。 - [后端执行票 —— 工单关联标记口径统一(设备维度 vs 时间线)](issues/21-21-vs.md) — 三端点关联已同源、一对一重复报错;维护者新真实样本正向及旧待接单工单负向均通过,428/428测试、修复894402a已推送,验收关闭。 - [后端执行票 —— map-snapshot 与 monitoring distribution 的 pointStatus 八桶契约](issues/29-map-snapshot-monitoring-distribution-poi.md) — 两端多值状态、非法值400、统一回显与全局八桶已完成,提交`7fb7c2c`(已随合并`60a0e9a`推送);75/75针对性、429/429全量、45/45真实探针及浏览器13→1→2筛选通过,状态栏/饼图计数同源且不随筛选变化。 - [22: 前端执行票 —— 真实响应信封消费与业务错误映射修复](issues/22-22.md) — 真实 AjaxResult 信封已在适配层解包并按业务 `code` 分流(并行提交 `ead39442`);本轮补上同链路两处白名单继承键缺口(`readBusinessReason`、`sectionStateFromBackend`/`sectionStateFromFreshness`,提交 `86db4d4`)。真实复验三项 `frontend-*` 全通过(业务 `code=500` → 分区 `failed`,档案适配值与真实一致),真机确认故障面板显示「数据加载失败」而非 success 或空白——**故障不再被伪装成正常空态**。 - [前端执行票 —— 报警–工单闭环消费(事件/工单状态/时间线/处置率/异常点)](issues/16-frontend-alarm-order-consumption.md) — 真实响应消费与mock已对齐,处置率零工单分母不适用、异常桶分对象、0–7时间线与独立工单增量/报警重取已接入;契约和Pinia回归通过,8001 mock浏览器验收完成,真实联调归阶段收口票。 - [15: 前端执行票 —— 数据时间展示 + 片区/行业维度 + 管理面板片区化](issues/15-frontend-time-dimension-panel.md) — 前端消费侧已切换 `createdAt`/`sampledAt`、`district`/`districtFilter` 与窨井词汇;管理面板改为片区×行业设施/设备计数;T15 契约闸门 11/11 通过,8001 mock 浏览器走查确认数据时间、未分区、窨井和管理计数。 - [14: 前端执行票 —— real 生命周期接线 + 状态筛选/自动加载/饼图](issues/14-frontend-real-scope-filter.md) — 前端实施与 8001 浏览器验收完成(t08 15/15、t18 40/40、补充 7/7);多选 OR、饼图高亮、命中子集与 real 分区不可用语义已验证,正式后端业务联调归票 18。 - [01: 报警—工单闭环读模型与 Gogs 票拆分边界](issues/01-backend-slice-ticket-boundary.md) — 首阶段只读消费外部业务系统的报警/工单真实关系与状态;后端拆为工单状态与处置率、报警/工单读模型回联、实时同步三票,前端另建三票;真人团队的真实设备报警闭环是阶段总收口。 - [02: 地图摘要状态筛选与未关联设备语义](issues/02-map-status-filter-and-unassociated-devices.md) — 行业/范围/类型=设备级匹配、点位 OR 归并;状态筛选对监测点按聚合六态、对未关联设备按设备状态词表各自匹配;「无关联设备」桶=只看该类对象;`pointStatus` 多值(含 UNKNOWN/UNASSOCIATED);顶部状态栏=全局组合筛选入口(八桶 OR,计数为全局未筛全集);饼图共用同一份分布;坐标汇总按筛选后口径;移除加载下一页、自动分批加载,右上角留 🔄 手动刷新;刷新时机=筛选变化/新鲜度 tick/WS 增量。 - [03: 监测数据时间字段与异构设备来源](issues/03-monitoring-created-at-contract.md) — `createdAt`=记录创建时间(create_time,跨类型 max);三端点:overview 分区级、distribution 信封+台账逐对象、situation 信封+异常设备逐对象;`sampledAt`(采样/上报时刻)与 `createdAt` 并存分离;空态显式 null 不冒充;前端“数据时间/采样时间”两套标签;archive 不加 createTime;refresh 时机归 #04;更正:/overview/monitoring 的 metricFreshness 已真实接线(固定 CURRENT)。 - [04: real 生命周期与 mock 同构启动契约](issues/04-real-lifecycle-contract.md) — `dataSource` 只换 transport:real 照搬 mock 全部自动初始化(地图第 1 页、四模式面板、WS 直订、新鲜度 tick);失败同套分区语义(`UNAVAILABLE`)、严格不回退 mock;未配 baseUrl 如实报 `NO_BASE_URL`;WS 只定连接生命周期(增量帧解析归 #01);刷新调度以本票为唯一权威(02/03 引用);失败不无限重试;验收为端到端证据。 - [05: 真实联调基线与收口证据门槛](issues/05-integration-baseline-and-evidence.md) — 基线锚点=仓库提交(分支+哈希+已推送 Gogs);联调判定环境=本地 `192.168.110.96:8301` 可达,本地通过后再提交;目标部署移出本阶段;四态阶梯(接口 200 / 契约已接 / 真实数据联调完成 / 模式整体收口)+ 缺项即降级明写原因;卡片落 `handoff/baselines/<切片名>.md`(纯 Markdown + 可复制命令,追加不覆盖,只记角色与出处);第一张样板卡 [地图摘要+运行监测](../handoff/baselines/map-monitoring.md) 已产出(实测:免鉴权 200 达标,`pointStatus` 被忽略、三端点无 `createdAt`,状态至 ①)。 - [06: 异常统计、工单处置率与管理字段词汇](issues/06-cross-mode-business-semantics.md) — 异常统计:监测点桶 `ALARM/WARNING/OFFLINE/EMPTY`、设备/指标桶 `WARNING/ALARM/EXPIRED/OFFLINE/UNKNOWN`(按对象计数不相加、成功响应缺失桶显 0);异常点(预警处置地图)只认设备 `WARNING/ALARM` 回联(宽清单窄地图);处置率=`状态5 ÷ 状态0–6`(范围=当前筛选全部工单,分母 0 显示不适用,basis 改为工单分母语义、旧"事件总数"口径废止);本项目维度只有**片区**(`district 0/1/2→城南/城北/太常`,空/乱码=未分区,取代 organization 与 regionMap)与**行业**(供水/排水/燃气/**窨井**);管理信息面板改片区×行业视图、后端删 organizations/ownership/unmaintained;档案 ownershipUnit/maintainer 留作静态信息;「责任区域」=片区别名,历史票 17 验收文字作废;票 25 已回写 E1/处置率/异常口径。 - [11: 后端执行票 —— 工单状态与处置率读模型对齐](issues/11-backend-work-order-rate.md) — 处置率分母由**事件总数**改为**状态 0–6 工单数**(状态 7 排除;范围=当前筛选内全部工单,按 `work_order.create_time` 界定,不要求关联报警/事件),`basis` 改 `CLOSED_WORK_ORDERS_OVER_ELIGIBLE_WORK_ORDERS`,分母 0 → `EMPTY`+`NO_ELIGIBLE_WORK_ORDERS`;**三处同族分母一并修订**(handling-efficiency / history-analysis 仅汇总 / overview warning-settings 两 family 共用),状态分布同步改工单口径使 `sum(0–6)==分母` 可复算;口径单源收敛到 `CockpitWorkOrderStateDictionary`,三个 snapshot 新增 `scopeWorkOrders`(旧快照只带已关联事件工单,结构上给不出该分母)。工单字典 0–7 本已对齐、复用之。提交 `3de679c` 已推 `origin/master`,编译通过、`Cockpit*Test` 299/299。**部署后真实环境复验已移交 [票 17](issues/17-postdeploy-live-verification.md) 滚动承载**,本票按自身交付物收口。 - [12: 后端执行票 —— 报警/工单读模型、设备–监测点回联 + district 片区契约](issues/12-backend-read-model-district.md) — 旧自由串 `region`(实测恒为「未分区」、适配器写死 null)被**片区 `district`** 取代:权威来源=`equipment_base.district`(0城南/1城北/2太常),**点位按「经其上挂设备归纳」**(不一致/无设备→未分区)、设施无来源一律未分区——**不加 DDL、不用行业或管理单位冒充**;响应形态=`district`(Integer,未分区 null)+`districtName`,筛选入参 `district=0|1|2|UNASSIGNED`(**脏值 400**),`mapFilter` 增 `districtFilter`(`NONE`/`ASSIGNED`/`UNASSIGNED`,区分「未筛」与「只看未分区」这两种编码同为 null 的情形);口径单源 `cockpit/foundation/CockpitDistrict.java`。**六族统一改造**(地图摘要、运行监测 distribution+situation、基础设施 base-archives、事件多维分析);**管理信息按 #06 删字段** `organizations`/`ownershipDistribution`/`unmaintainedCount` 改 `districtIndustry[]`(片区×行业)。**工单读模型**:设备维度返回已有全部工单并逐张加**显式** `associatedWithCurrentEvent` + 顶层 `unassociatedWorkOrderCount`(满足「未关联当前报警明确提示」);关联键经真实库核实为 `alarm_data.work_order_id = work_order.order_id`(维护者原述 `alarm_no = order_no` 实测命中 0 条、两列均不存在)。提交 `818a6d7` 已推 `origin/master`,组合测试 **372/372**,**部署后真实环境复验 8 项全通过**(基线卡片 03 至 ③)。**教训**:复验中曾因控制台把 32 位十六进制串统一渲染成 `0` 而误判 `alarm_data.id` 为占位值并提交改动,经 `count(DISTINCT)`/直方图/base64 复核后撤回(`18db910`)——判「相同/为零」不可凭肉眼读控制台。**前端消费侧必须同步**(已通知 [票 15](issues/15-frontend-time-dimension-panel.md))。 - [13: 后端执行票 —— 报警/工单实时同步](issues/13-backend-realtime-sync.md) — 工单状态增量**从无到有**:新增 `cockpitWorkOrderStateDelta` 帧(`CockpitWorkOrderDeltaPushTask`,定时扫描 `work_order.order_status` **逐单比对**——状态流转不写 `update_time`,靠时间过滤会漏掉全部流转),**变化才推**给驾驶舱全量订阅会话(免鉴权、不按人过滤,与管理端 `workOrderReminderPush` 提醒语义隔离);**首扫只建基线不推送**(REST 才是初始快照);帧带 `scanIntervalMs`(默认 60s 可配)诚实标注延迟上限、不带会误导的 `updateTime`、**不泄漏主键 orderId**(对外键 `workOrderCode`,与 REST 读模型同口径);`stateCode/stateName` 出自票 11 字典单源,脏码名称显式 null。设备帧 `cockpitDeviceStatusDelta` 补 `eventId` 透传(缺省显式 null;zk-api-service 是否真发未证实,防御性透传不臆造)。REST 快照复用票 11/12 读模型**无新端点**;降级纪律(无订阅不查库、失效会话清理、断线重订)有测试锁定。提交 `d8a6b03` 已推 `origin/master`,针对性 **21/21** + 全量 **422/422**,**部署后复验 6 项全通过**——含端到端正面证据(真人提交验收 284 工单 3→4,**40 秒内帧到达**、字段全对)与两项负向证据(无变化不推送;只改 `update_time` 不改状态码的「处置」不触发,证明检测由 `orderStatus` 驱动)。前端消费归 [票 16](issues/16-frontend-alarm-order-consumption.md)(对未知帧静默忽略,不升级不会崩)。 - [17: 部署后真实环境复验(后端切片 11–13,滚动复验票)](issues/17-postdeploy-live-verification.md) — 按维护者裁定作为**贯穿 11–13 的滚动复验票**单独承载部署后证据:三切片**全部复验通过**(11:处置率新口径 `num/den=2/3` 自洽;12:district 契约 8 项;13:增量帧 6 项含真人触发端到端),三张基线卡片 02/03/04 均升至 **③ 真实数据联调完成**;全量测试自基线 299 增至 **422/422**。滚动使命完成故收口;决策 01 的真人闭环演示归阶段总收口(票 18 上位阶段),上位回写(票 25/Gogs #63)已按决策 01 执行。**复验方法论沉淀**:负向观察必须闭环(说「没收到帧」须同时复查库证明「确实没变化」);临时探针一律放 `%TEMP%` 用完即删(不进 git 跟踪目录);控制台渲染不可作为「值是否相同」的证据。 - [28: 后端执行票 —— 无关联设备监测点被静默丢弃(计数不对称)](issues/28-28.md) — 维护者裁定**方案 A**(2026-10-10):无关联设备的监测点是**合法监测点**,按其真实「无关联设备 / EMPTY」状态**计入监测点总数与状态分布**(`EMPTY` 桶),不得静默丢弃;方案 B(仅记入 `excluded` 新计数、界面仍显示 0)不采纳。配套澄清两条术语:**无设备点位**是合法点位,类型/片区无法经设备推导时如实显示未分区/未知,不伪造归属;**坐标能否上图只决定呈现,不决定是否计入统计**——坐标未校验的对象仍参与计数、分布与筛选。根因为 `CockpitMonitoringDistributionService` 点位循环按 `devices.size()` 累加排除计数,无设备点位计 0 而被抹除(设备侧同分支按自身计 1,口径不对称);连带 `NO_RESOLVED_DEVICES` 把「设备坐标未校验」误报为「无设备」。`CONTEXT.md` 的「点位状态」「无地图位置」两条已就地澄清。 - [后端执行票 —— 管网编码 0/1 映射与设备边界设施类型命名空间](issues/20-20-0-1.md) — `0/1/2` 管网行业与设施命名空间已修正,五端点共同管网集合实测为燃气537/供水996/排水3735(合计5268);收尾审查的跨端点回归与展示字典单源两项已补齐(29d1ae2、0a6b108已推),管网专项29/29通过,最新远端报警旁路1项全量失败如实见[审查报告](handoff/review-pipe-type-namespace.md);[基线卡片05](handoff/baselines/pipe-network-type-namespace.md)保留已部署740d896的③证据,[人工核验步骤](handoff/manual-verify-pipe-type-namespace.md)区分各对象域总数。 - [后端执行票 —— 无关联设备监测点被静默丢弃(计数不对称)](issues/28-28.md) — 实施收口:合法空点与坐标独立统计已修复,真实overview=6、EMPTY=6、总对象13且排除0,契约423/423及真实12/12通过,提交ba0ce076已快进合入并推送origin/master,未混入八桶并行会话的未提交改动。 - [后端执行票 —— 驾驶舱设施点位与管线几何读模型](issues/30-untitled.md) — 免鉴权只读几何端点 `GET /api/cockpit/v1/infrastructure/geometry` 已实施、审查、测试、真实验收全链路收口:GeoJSON FeatureCollection 三源真实几何(管网两端点直线/燃气构件原样 pointType+networkId/窨井点),坐标纪律与 map-snapshot 同形(非法→null+reason;合法无校核→UNVERIFIED),coverage 9 条如实区分各行业覆盖缺口;真实免鉴权 GET 13/13 全绿(5272 feature、5270 UNVERIFIED + 2 INVALID、缺口如实标注)。提交 `33ca0b6` 已推 origin/master,全量 *Cockpit*Test 463/463。 - [后端执行票 —— 设施总数三处口径不一致(5278 / 5276 / 5273)](issues/31-5278-5276-5273.md) — 三套设施计数已收敛为单一口径:根因不是管网求和算法不同,而是三个适配器各选了不同的设施表集合(基础档案漏水源地/窨井、概览漏排水工程设施、管理信息漏水厂/泵站/排水工程设施)。新增唯一设施目录 `CockpitFacilityCatalog`(六类合法设施并集,维护者裁定取并集而非对齐到 5278),概览与管理信息改为投影同一目录;目录记录带稳定 `sourceKey` 防跨表同码误去重,未知/缺码记录显式进 `excluded`,并修正未来日期设施漏入片区分布。提交 `96834794` 已推 `origin/master`(`a4a727dd..96834794`);`Cockpit*Test` 469/469(变基后复跑 465/465)、新增跨端点契约 2/2;后端重启后现场三端 `facilityCount` 均 **5283**、行业拆分 GAS537/WATER_SUPPLY1006/DRAINAGE3737/MANHOLE3 三端一致、片区合计 5283、三端 `excluded` 全 0,旧 5278/5276/5273 矛盾消失。**方法论**:跨端点计数一致性须由贯通真实适配器与服务的契约测试锁定;`zksy-admin` 子目录单独构建会命中本地仓库旧 `zksy-system` JAR,须走完整 reactor。 - [后端执行票 —— 管网编码 0/1 映射与设备边界设施类型命名空间](issues/20-20-0-1.md) — 主修复740d896现场五端点管网集合一致为燃气537/供水996/排水3735(5268);审查补齐29d1ae2、合并0a6b108已推送,管网专项29/29通过;维护者已确认人工核验完成。[审查报告](handoff/review-pipe-type-namespace.md)保留最新报警旁路1项全量失败记录,[人工核验步骤](handoff/manual-verify-pipe-type-namespace.md)与[基线卡片05](handoff/baselines/pipe-network-type-namespace.md)已交付。 - [27: 前端执行票 —— 监测点台账分母渲染 undefined](issues/27-27-undefined.md) — **已关闭**:票 18 真机取证里那句「本端点序列共 **undefined** 条」的根因是**两处合起来**才成立的守卫类型错配——真实空态下 `fetchMonitoringDistribution()` 的 `isEmpty` 成立,`sectionFromResult()` 走空分支**不带 `data`**,视图拿到 `null` 后 `pagination` 为 `{}`、`total` 是 **`undefined`**,而守卫只写了 `pagination.total === null`,模板串把 `undefined` 直出(`PanelBlocks.vue` 的 `pageNote` 又画在 `hasContent` 之前,空态照画)。修复仅一处:分母先过仓库既有的 `numberish()` 收口再判空(+8/−2),**缺失时整句不出**是作者原意、不是新增文案。**同类自查**:16 块面板 × 5 载荷 × 4 态递归扫字符串,唯一命中就是本票这一处(其余读数位都走了占位符或 `numberish`)。**证据**:离线端到端回归 [t27-ledger-undefined](verify/t27-ledger-undefined.mjs) **8/8**,把守卫改回缺陷原样则 **3 项转红**;真实 `DATA_SOURCE.REAL` 浏览器**正证 + 反证**成对取得(同一空态、只改守卫一处,`undefined` 出现↔消失)。**方法论**:「缺失值不直出」的守卫要按**整个缺失域**(`undefined`/`''`/`NaN`/字符串)收口,只判一种形态等于没判;离线绿必须配一次真机反证,否则证明不了「真实空态」就是缺陷的触发条件。 - [19: 后端执行票 —— 预警/事件族故障根因(部署时序错位,非缺列)](issues/19-19-early-warning-warning-name.md) — **已按证据收口(验收四条全过)**:根因是部署时序错位(旧构建 `d8a6b03` 仍读已被 `927fad2` 删除的 `early_warning.warning_name` 列),无需新代码;票 30/31 现场复验的「后端重启」已把实例带过该提交——实测 PID 27208(2026-10-12 20:13:30 启动),`HEAD=origin/master=d81c977b`、`927fad2` 为其祖先。带参探测 10 个受影响端点全部 HTTP 200+业务 `code=200`,报警字段真实(`eventName`/`level`/阈值/坐标);**`warningName` 随新契约整体移除**(5 个事件族响应 0 次出现),事件名统一由 `eventName` 携带。**t18 真实审计 140/143**(票 22 时代 33 败),`events-*`/`warning-*` 失败清零,余 3 项均为基线卡已记的 `monitoring-createdAt` 后端缺口(不属本票);141 次请求零 5xx。**新事实核对推翻了立票预判**:预警事件并未失去坐标——6/6 经**设备回联**携带有效坐标(`VALID/renderable=true`),删的只是 `early_warning` 表自有经纬度列;「无坐标预警呈现」担忧未触发(前端无锚点纪律仍兜底将来真无坐标情形)。**票 26 的最后一道阻塞(#19+#22)已全部解除,#26 成为通往阶段收口 #18 的唯一前沿票。** - [26: 诊断票 —— 主场景等待后画面抽搐的根因定位](issues/26-26.md) — **已诊断收口(修复归新票 33)**:「等待一段时间后整个画面抽搐」=每 30s 的 freshness tick(`DEFAULT_REFRESH_SECONDS=30`)触发 `mapStore.refresh()` 全量分页重载(8 批、auto-batch 120ms),**每批到达**都经 `summary.objects` watcher → `applyMarkers()` 做两件事——标记层 `entities.removeAll()` 整层重建 + **管线层 `syncPipeLayer` 名义 upsert 实为全量重赋值**(`existing.polyline = spec.polyline` 等,Cesium 属性订阅 → 5000+ 贴地折线几何失效重 tessellate);`modeLayerPlan` 每次 `pipelines.slice()` 新数组引用使 `deep:false` watcher 也拦不住。**证据**:CDP 无头探针两轮复跑——静置 p50=16.7ms,30s/60s 窗口 p95 冲 400-666ms、长任务(~175ms)与 `map-snapshot` 响应 ±500ms 精确对齐;相机/雾/交接/区域状态机全程 0 翻转(**排除票面候选四族**)、WS 0 帧、0 报错。**消融 A**(15s 后拦 `map-snapshot`)周期性 stall 消失(p95 回 16.7ms);消融 B(缓存回放)因探针补丁干扰**作废不采信**(已如实记录)。修复建议四条(`syncPipeLayer` 真 diff / 计划层引用记忆或 debounce / 标记差量 / 不改刷新语义)与真机回归判据已写入[票 33](issues/33-33-jitter-fix.md),33 已接入票 18 阻塞链。 - [33: 前端执行票 —— 每 30s 刷新触发全管线重同步的画面抽搐修复](issues/33-33-jitter-fix.md) — **已实施并关闭(维护者目视终判「目前没有再见过抽搐问题了」)**。按票 26 四条建议全做且**未动刷新语义**:`syncPipeLayer` 领域输入内容指纹先行比对(未变零属性写入、连 spec 构建都跳过,返回 `added/updated/removed/unchanged` 可观察计数);`modeLayerPlan` 去 `slice()` 原样引用;`MapCanvas` 批间 120ms 领先+落尾合并;`syncPointMarkers` 去 `removeAll()` 改 id+指纹增删改。**证据三层**:离线闸门 [t33-jitter-diff](verify/t33-jitter-diff.mjs) 15/15(引用身份断言证零重赋值——还原旧写法必转红);真机 dev server + real 后端**同环境修复前后对照**(基线复现成簇 685–1080ms 纯 snapshot 长任务、tick 增量 +33ms;带修复 **tick 增量 −0.1ms**,刷新窗 p95 216.7 ≈ 静置 216.8ms,0 pageErrors);t47/t48 离线 6/6。**方法论(本票最重要的一条)**:票面绝对阈值 (a)±500ms / (b)p95≤33ms 在当前**无 GPU 软渲染 + 票 35 的 v8 白模持续流送**环境物理不可达(静置底噪 p50≈200ms;票 26 的 16.7ms 基线属 v6 素材时代)——环境底噪污染绝对毫秒判据时,用**同环境 A/B 对照 + 病灶专属口径(tick 增量/成簇形态/纯 snapshot 簇)**定性,不拿绝对阈值假装通过也不因它否掉真修复;阈值本身维持原样供 GPU 真机复跑。⚠ **关闭≠已入库**:改动仍在工作树(混有票 32/35 并行在制品,`MapCanvas.vue`/`cesiumEngine.js` 尤甚;`cesiumPipeLayer.js` 已确认与票 32 的 `onModelChange`/`layerVersions` 共存未互相覆盖),入库须单独裁剪 4 源文件 + `verify/t33*` + `verify/artifacts/t33/`。浏览器层 t47 走查需临时翻 mock 配置(归并行会话在用,本会话未动)未跑,归票 47 自己的 mock 窗口。 ## Not yet specified - 首批真实接线完成后,基础设施四个面板各自需要哪些真实适配器、`district`/`ownership_unit` 的筛选与展示边界,以及井盖(`MANHOLE`)跨端是否已可用。 - 预警处置的事件读模型、设备异常回联、时间线展示与处置率聚合在真实后端中的切片拆分和数据稀疏降级。 - 总体概览缺失的前端面板实现、聚合端点与其对基础设施/运行监测/预警处置的复用关系。 - 后端真实数据库快照中坐标校验、设备—监测点关联稀疏和空数据的最终演示样本。 ## Out of scope - 登录、权限管理、工单处置等写操作。 - 将历史“责任区域”验收文字复活为本次字段,或用 `district`、`industry`、`maintainer` 冒充责任区域。 - 用前端本地过滤替代后端 `map-snapshot` 的状态筛选;不得把未加载分页的数据静默删掉。 - 失败时静默回退 mock,或把 mock 走查结果当成真实后端联调证据。 - 重写既有 mock 面板、模式词典、地图/相机决策和已关闭的前端实现票。 - 移动端、写操作业务、UE5、Docker、国产化认证及非驾驶舱领域。 ## Current status **2026-10-14 票 42 已收口(前端消费票 41 的新契约)**:[42 预警设置面板消费预警自身生命周期契约](issues/42-42.md) 实施、守卫、mock 同构并关闭(提交 `0cd16ac` 本地未推送——本地领先远端 19 提交多为并行在制品,不代推)。预警族工单口径 **null 保真**(不补假零条)+ 四组生命周期分布块;报警族工单口径与 `alarm_status` 分布并存;态势总览 KPI 改**预警已解除率**。新增 t42 契约守卫(基线卡片 §4.2 真实值过领域+视图两层);t20 守卫随契约更新(B3c→报警族、B3e/B3f/C4d 新增、M4 重定位、M14 新增)。t20 闸门 60/66:**6 条红(B4/C2/D2b/D3/E2/F3)经 HEAD 基线对照证实为既有失败**(与本票 diff 零交集);变异闸与 t50 因并行会话清空 `node_modules/@babel/*`(16:03)暂无法跑,恢复后建议复跑。**真实走查前置=共享实例滚动部署 `b047a60d` + 维护者授权浏览器验收,归票 17。** **2026-10-14 票 41 已收口并另立前端票 42**:[41 预警设置端点改为预警自身生命周期统计](issues/41-warning-settings-endpoint-rework.md) 按维护者本会话裁定实施 —— 预警族只给预警自身生命周期(`WarningWorkflow` 六态/等级/行业/片区分布 + 已解除÷总数,工单口径六字段显式 `null` 不用 0 冒充),**报警族保留工单口径**(报警靠工单闭环)并并存 `alarm_status` 生命周期;诊断修正了票面根因(`dispatch_user` → `dept_id`,实为构建落后库结构,上游 `94bb7e4d` 已修)。基于 `origin/master` 独立 worktree 实施,未动共享工作树的并行在制品;契约 24/24、全量 **498/498**、第二实例(8399,同库)实测 `code=200` 且分布四组和恒等于 total;提交 **`b047a60d`** 已推 `origin/master`。前端消费侧由 **[42](issues/42-42.md)** 承接并已收口(见上条)。 **2026-10-14 票 35 已关闭、票 36 已修复关闭(票 18 两项技术阻断均已处置)**:票 35(监测三端点 `createdAt`)实施并真实复验通过 —— 新增单一口径来源 `CockpitCreatedAt`(不读时钟,结构上无法用响应时间冒充数据时间),三端点信封级 + `distribution`/`situation` 逐对象 `createdAt` 齐备,`map-snapshot` 与 archive 未新增该字段;`Cockpit*Test` **507/507**(新增契约 18 项),真实只读复验字段齐备、信封 == 逐对象 max(自洽复算)、均 ≠ `updatedAt`,`t18-real-audit` **140/143 → 143/143**,前端三面板「数据时间」由 `—` 变真实值;提交 `05c23774` 已推 `origin/master`。票 36(调色 shader 编译失败)已修复收口:根因是自有调色 shader 用 GLSL1 `varying` 而 Cesium 1.145 在 WebGL2 下前置 `#version 300 es`(引入 `e2529b5`),限定提交 `850c6c6` 一行 `in vec2` + t49 闸门反向锁定(含截断哨兵,变异验证),纯提交内容与真机/CDP 探针三面验证全绿——诊断期曾与[票 49](../cockpit-shell-panel-layout/issues/49-3d-glsl.md) 判重,维护者指令后固化提交收口;**未推送**(分支 16 个未推送提交多为并行在制品,不代推)。**票 18 保持 claimed/ready-for-human/open,是否收口仍取决于真人业务验收。** **2026-10-13 新增维护者界面/语义反馈分批执行票 37–41(5 张)**:维护者就「总体概览-预警设置一直数据加载失败」等 9 条反馈定夺后,按「分批立执行票」拆为: - **[37 共用长文本省略方法 + 监测概览设备类型分布筛选与降序](issues/37-shared-ellipsis-and-type-filter.md)** — **已收口(2026-10-15,closed)**:超长文本省略成 `…`、hover 显示完整的**共用方法**(`domain/ellipsis.js` + `components/EllipsisText.vue`)在共享渲染层所有可能溢出处统一使用;设备类型分布降序 + 可点筛选(复用 `panel-action` 接缝,`deviceType` 与 industry/district/pointStatus 同层全局条件)。离线闸门 t50 **30/30 全绿**(Pinia 依赖恢复后 store 级 toggle/归一/reset 断言全部实跑);浏览器四条正反证通过(点击筛选 9→2 台、再点取消恢复、切模式保持筛选、降序 2/2/1… 且 title 与完整原文同源)。**38/39/40 依赖本票的省略方法**,均已就位。维护者新增反馈拆为票 43–46(本票范围外)。 - **[38 基础设施面板调整](issues/38-infrastructure-panel-adjustments.md)**(`ready-for-agent`)——基础档案设施总数与规模同行;**删除「规模」读数**(实测 `totals.scale = null` 无数据,`facilityTypes[].scale` 实为长度单位 `"km"`,长度已由 `lengthKm` 承载);运行信息定位修复(三种「点不动」必须给可见反馈,「没反应」是缺陷);管理信息片区×行业改分类柱状图 + 紧凑卡片。 - **[39 运行监测面板图表化](issues/39-monitoring-charts.md)**(`ready-for-agent`)——监测概览纯文字读数改卡片/图表块(四态照实呈现、不合成「故障」);监测分布加明确子标题分节(图与数据指代对象不清)。 - **[40 运行概况与监测点台账卡片化 + 定位修复](issues/40-operation-ledger-cards.md)**(`ready-for-agent`)——异常设备清单与台账设备改卡片形态;两处定位修复(复用 `domain/mapLocate.js` 既有接缝)。 - **[41 后端执行票 —— 预警设置端点改为预警自身生命周期统计](issues/41-warning-settings-endpoint-rework.md)** — **已收口(2026-10-14,见 Decisions so far 与下方 2026-10-14 条目)**;其前端消费侧由 [42 预警设置面板消费预警自身生命周期契约](issues/42-42.md)(`ready-for-agent`,`Blocked by: 41` 已满足)承接。 **关于「预警设置数据加载失败」的根因(已实测定位;2026-10-14 票 41 诊断修正)**:不是前端缺陷。`/overview/warning-settings` 实测 **HTTP 200 + body `code=500`**。票 41 收口时复测:报错列已从 `dispatch_user` 漂移为 `dept_id`(实体声明了库中已删列),真实根因是**运行构建落后库结构**(上游 `94bb7e4d` 已删该列,共享实例重启后 8301 的 500 已随之消除);工单依赖的故障面也比「单点」大(`events/handling-efficiency`、`/work-orders/{code}/timeline` 同因 500)。语义层面的修复(预警族自身生命周期)即票 41,已交付;前端消费归票 42。 **2026-10-12 后端执行票 31 已关闭(设施总数三处口径不一致)**:[31 设施总数三处口径不一致(5278/5276/5273)](issues/31-5278-5276-5273.md) 根因是三个适配器各选不同设施表集合(非管网求和算法差异);新增唯一设施目录 `CockpitFacilityCatalog`(六类合法设施并集),概览与管理信息改为投影同一目录,未知/缺码显式进 `excluded`,并修正未来日期设施漏入片区分布。提交 `96834794` 已推 `origin/master`;`Cockpit*Test` 469/469(变基后复跑 465/465)、新增跨端点契约 2/2;后端重启后现场三端 `facilityCount` 均 **5283**、行业拆分 GAS537/WATER_SUPPLY1006/DRAINAGE3737/MANHOLE3 三端一致、片区合计 5283、三端 `excluded` 全 0。 **6/6 决策票已解决 + 4 张规格子票 + 后端执行票 11/12/13 全部收口并复验通过(滚动复验票 17 亦收口)+ 后端票 20 已收口并完成现场复验与审查补齐 + 前端票 14/15/16 已收口。** 决策 01–06 收口;规格 [07](issues/07-map-status-filter-spec.md)/[08](issues/08-monitoring-created-at-spec.md)/[09](issues/09-real-lifecycle-spec.md)/[10](issues/10-business-semantics-spec.md) 为 `ready-for-agent`;执行票 **11/12/13 已 resolved 且真实环境复验全部通过**(基线卡片 02/03/04 均至 ③)、**17 已 resolved**(三切片滚动复验完成)、**20 已 resolved(主修复740d896现场管网总量5268;补齐29d1ae2、合并0a6b108已推,管网专项29/29;基线卡片05至③,报警旁路失败单独记录)**、14/15/16 已收口,18(前端真实接口联调与阶段收口)进行中——票 18 真实数据口径核对暴露的设施总数缺口已拆为后端票 20。 **2026-09-28 追加(免鉴权已落地,未提交)**:免鉴权范围已按 ADR 0005 修订实现——后端(`E:\pipe-ner-server` 工作树):`SecurityConfig` 放行 `GET /api/cockpit/v1/**`、24 个 cockpit 控制器移除方法级认证、WS 协议注释与手册对齐"cockpitSubscribe 直订无需 authenticate"(authenticate 帧保留给管理端工单推送);新增 `CockpitAnonymousAccessSecurityConfigTest` 等回归。前端(本仓库):`cockpitApi` 不再发送 `Authorization`,`runtimeSocket` open 后直接 `cockpitSubscribe`(无 authenticate 帧)、token 链路下线,mock/文档/验证脚本同步。验证:前端 t15 43/43、t04、t08 通过;后端改动**未跑 Maven**,且前后端均未提交——票 05 的联调基线只需补提交哈希/环境/数据快照,但免鉴权的真实 HTTP/WS 复验(无凭据 200、WS 直订)须在部署后进行。落地明细见 [票 25 第十五轮](../cockpit-shell-panel-layout/issues/25-backend-contract-gaps.md)。 后端最新基线(2026-10-09 **票 12 复验后更新**):`E:\pipe-ner-server` 的 `origin/master=818a6d7`(工作区干净,已推送;含本图 `3de679c`、票 12 的 `ee2e1b6`+`18db910` 与上游 `7df9a87`);联调环境 `http://192.168.110.96:8301`(= 本机,IDE 内运行的 Spring Boot 进程)实测可达、免鉴权只读接口全部 HTTP 200,**且已加载新构建**(进程 PID 15244)。目标部署 `192.168.110.30:8301` 已按决策票 05 移出本阶段,不再作为收口条件。 票 25 已同步为本图入口和历史契约台账,最新事实见 [`25: 后端契约缺口待办`](../cockpit-shell-panel-layout/issues/25-backend-contract-gaps.md) 与 [交接包](../cockpit-shell-panel-layout/handoff/backend-contract-gaps.md)。执行票 11–13(后端)与 14–16(前端)已发布;后端票待负责人、Gogs 提交基线与联调环境确认后认领,前端票可认领。联调基线卡片的格式与第一张样板卡已就绪,后续切片按模板追加。不把未提交工作树或 mock 走查当成真实联调证据。 **2026-10-08 执行票 11 已收口(resolved);复验抽为票 17**:[11 工单状态与处置率读模型对齐](issues/11-backend-work-order-rate.md) 诊断 + 口径修订 + 契约测试 + 提交推送全部完成——工单字典 0–7 本已对齐(新增逐码锁死测试);处置率分母由**事件总数**改为**状态 0–6 工单数**(状态 7 排除,范围=当前筛选内全部工单、按 `work_order.create_time` 界定),`basis` 改为 `CLOSED_WORK_ORDERS_OVER_ELIGIBLE_WORK_ORDERS`,分母 0 → `NO_ELIGIBLE_WORK_ORDERS`,并在维护者裁定下**同口径修订三处**(handling-efficiency / history-analysis 汇总 / overview warning-settings 两 family 共用);关键结构性事实:旧 snapshot 只携带**已关联报警**的工单,给不出该分母,故三个 snapshot 新增 `scopeWorkOrders`。后端 `E:\pipe-ner-server` 14 个源文件改动,编译通过、`Cockpit*Test` **299/299 通过**(提交后复跑一致)。提交与推送:`3de679c`(本票口径修订)+ `9380c1b`(**非本票**:修复 `HEAD` 中 `CockpitFreshnessSemanticsControllerTest.java` 未闭合语句导致 `zksy-admin` 测试模块无法编译,单独成提交)→ `origin/master` `5b53a6d..9380c1b`;基线卡片 [02 工单状态与处置率读模型](handoff/baselines/work-order-rate.md) 已产出。 **为解阻塞而做的收口拆分**:「新契约在部署环境生效」需要一次真实部署才会发生,把它留在票 11 会让「已完成的实现」绑住「尚未发生的部署」,无谓阻塞票 12/13。故抽为独立票 [17 部署后真实环境复验](issues/17-postdeploy-live-verification.md)(`ready-for-human`,`Blocked by: 11`),票 11 按其自身交付物 close;票 12 阻塞随之解除。**票 17 不阻塞 12/13**,且票 12/13 落地后的复验并入票 17 同一部署窗口。 **勘误(2026-10-08)**:早先写入本图与两处票面的复验预期「ALARM 组 `denominator=2`、`value=0.5000`」**错误**。该 2 由**旧响应** `stateCounts`(`0=1, 5=1`)反推,而旧 `stateCounts` 只累积**已关联报警**的工单(未关联者直接 `continue` 跳过)且按**事件**累加(同一工单多事件重复计);新口径分母取自 `scopeWorkOrders`(范围内**全部**工单,含未关联报警者),两者基数不同、不可互推。复验判据已改为**自洽性**:`basis` 为新值、`sum(workOrderStateCounts[0..6]) == denominator`、`denominator ≠ totalEvents`、分母 0 时 `reason=NO_ELIGIBLE_WORK_ORDERS`。前端 `contractMocks.js` 的处置率分母/hint 文案仍是旧口径,归执行票 14–16。 **2026-10-08 票 17 复验:票 11 切片已通过(③ 达成)**。部署基线 `origin/master = 89ca989`(含 `3de679c` 与上游 `7df9a87`),进程 18:39:11 重启后实测: | 复验项 | 实测 | 判定 | | --- | --- | --- | | `events/handling-efficiency?eventFamily=ALARM` | `basis=CLOSED_WORK_ORDERS_OVER_ELIGIBLE_WORK_ORDERS`、`num/den=2/3`、`value=0.6667`、`sum(状态0–6)=3`==分母、`totalEvents=6`≠分母 | **通过** | | `events/history-analysis?eventFamily=WARNING` | 汇总 `num/den=2/3`;行级仍 `reason=NO_EVENTS`(事件桶未变) | **通过** | | `overview/warning-settings` | warning / alarm 均 `num/den=2/3`(两 family 同源);事件计数各算(10 / 6) | **通过** | 数据稀疏事实:`work_order` 仅 3 行(状态 1×1、5×2),分母即为 3 —— 故**实测分母为 3 而非勘误前预期的 2**,进一步确证判据须用自洽性而非固定数值。**基线卡片 [02](handoff/baselines/work-order-rate.md) 阶梯升至 ③ 真实数据联调完成**;④「模式整体收口」仍待真人验收(决策票 01)与前端接线(14–16)。 **票 17 定位(维护者裁定)**:作为**贯穿票 11–13 的滚动复验票**,保持开放(`in-progress`),票 12/13 落地并部署后在同一票、同一部署窗口追加,**不另开复验票**;故本票未记入 Decisions so far(未关闭)。票 11 切片结果单独记于其「复验进度」表。 **复验窗口故障(已解决,教训留存)**:重启窗口内 5 个只读端点(`events/*` 与 `overview/warning-settings`)曾 500,根因是**数据库表结构重构与 Java 层不匹配** —— `app_user.equipment_warning_type` 已改为关联表(`equipment_type_id` + `warning_type_id`),元数据移到新表 `app_user.warning_type`;`app_user.alarm_data.warning_type` 列已删除。该重构由上游 `7df9a87「优化报警管理」`完整修复(新增 `EquipmentWarningType` 实体、`AlarmData` 去 `warning_type` 并加非持久化 `warningName`、`WarningThresholdServiceImpl` 与 4 个 XML mapper 一并改到新结构)。本会话曾基于**落后基点** `9380c1b` 做局部修复(分支 `fix/cockpit-warning-type-split`),确认上游已有完整解后**已废弃**(未推送、无损失)并跟随 master。**教训:复验前必须先 `git fetch` 确认远端基线,不要在落后基点上把上游的新结构误诊为「改了一半」**。 **2026-10-08/09 执行票 12 已实施、推送并复验通过**:[12 报警/工单读模型、设备–监测点回联 + district 片区契约](issues/12-backend-read-model-district.md) 诊断 + 六项维护者裁定 + 实施完成 —— 把旧自由串 `region`(实测恒为「未分区」,适配器写死 `null`)改为权威片区 `district`:新增口径单源 `cockpit/foundation/CockpitDistrict.java`(归一/点位归纳/入参解析/匹配),**六族统一改造**(地图摘要、运行监测 distribution+situation、基础设施 base-archives、事件多维分析),响应形态为 `district`(Integer,未分区 `null`) + `districtName`,筛选入参 `district=0|1|2|UNASSIGNED`(**脏值 400**),`mapFilter` 增 `districtFilter`(`NONE`/`ASSIGNED`/`UNASSIGNED`,用于区分「未筛」与「只看未分区」这两种编码同为 `null` 的情形)。**管理信息按决策 06 删字段** `organizations`/`ownershipDistribution`/`unmaintainedCount`/`organizationCount`,改 `districtIndustry[]`(片区×行业)。**工单读模型**新增逐张 `associatedWithCurrentEvent` + 顶层 `unassociatedWorkOrderCount`,满足「未关联当前报警的工单明确提示」。提交 `818a6d7` 已推 `origin/master`(`89ca989..818a6d7`),组合测试 **372/372**,**部署后真实环境复验 8 项全通过**(基线卡片 03 至 ③)。**本票已 close**,票 13 阻塞解除。 **关键事实**:只有 `equipment_base` 有 `district`(7 行全非空 0→4/1→2/2→1);`monitor_point` **无该列**、`PipeNetworkBase` **无该字段**、`equipment_point_rel` 实测 **0 行** —— 故点位按「经其上挂设备归纳」、设施一律未分区,**如实呈现、未加数据库列、未用行业或管理单位冒充**(维护者裁定)。关联键经真实库核实为 `alarm_data.work_order_id = work_order.order_id`(维护者原述 `alarm_no = order_no` 命中 **0** 条且两列均不存在,已按数据库事实裁定)。 **验证与状态(票 12 收口)**:48 个文件改动 + 1 个新增;编译通过、组合测试 **372/372**(早期 311 的统计漏掉 `Business*AdapterTest` 一族,已修正口径)。分支经复验后合入 master 并推送(`818a6d7`),部署后真实环境复验 8 项全通过,票 12 已 close。**前端消费侧必须同步**(已通知 [执行票 15](issues/15-frontend-time-dimension-panel.md)):`regionMap` 配置映射失效、管理信息三字段消失、`NO_ORGANIZATIONS` 改名 `NO_RELATIONS`。**测量教训**:复验中曾因控制台把 32 位十六进制串统一渲染成 `0` 误判 `alarm_data.id` 为占位值并提交改动,经 `count(DISTINCT)`/直方图/base64 复核后撤回(`18db910`)——判「相同/为零」不可凭肉眼读控制台。 **2026-10-10 后端执行票 20 实施时记录(当时待部署;2026-10-12 已现场复验、审查补齐并关闭,最终结论见本票及审查报告)**:[20 管网编码 0/1 映射与设备边界设施类型命名空间](issues/20-20-0-1.md)(票 18 真实数据口径核对发现、真人走查第 4 项佐证:界面设施总数 1001、实际 5268)。诊断用真实库只读探针坐实:`network_type` 分布 `0`=537、`1`=3735、`2`=996(合计 5268),GIS 权威规则 `0`燃气/`1`排水/`2`供水,而 `equipment_type` 主键 id=1「供水设备」、id=2「排水设备」——**数值域重叠、语义不同**。三处缺陷:(1) 三个适配器各自复制映射逻辑且都漏 `0`/`1`,4272 条管网被 `continue` 静默丢弃;(2) 设备边界把原始 `network_type` 透传去查 `equipment_type` 字典,造成 3735 条**排水**设施被标「供水设备/WATER_SUPPLY」、996 条**供水**设施被标「排水设备/DRAINAGE」(命名空间碰撞,非缺数据——原类注释「network_type 是自由文本、与 equipment_type.id 无对应关系」的前提为假);(3) 概览设施 `SourceType` 行业恒 `null`,5268 条管网被计入 `excluded.unknownTypeCount`。修复:新增单一权威来源 `cockpit/foundation/CockpitPipeNetworkType`(仿票 12 的 `CockpitDistrict`),设施改用管网命名空间码(`GAS_PIPE/WATER_PIPE/DRAINAGE_PIPE`,`objectKind=FACILITY`),四处适配器统一取用;维护者裁定删除旧映射 `"3"`(真实库无此值,与 `equipment_type.id=3` 同源混淆)。**契约零变更**——四个服务的 `excluded.unknownTypeCount`/`unknownIndustryCount` 承接逻辑本就存在,是适配器提前 `continue` 让它们恒为 0。提交 `740d896` 已推 `origin/master`(基点期间并行会话推入 4 个提交,经核实未触碰 cockpit 包);全量 **439/439**(新增 17 例),**变异检验两处确认测试有牙齿**(还原隔离后精确复现「排水→供水设备」等 7 例转红;还原概览行业 1 例转红)。基线卡片 [05 管网编码与命名空间隔离](handoff/baselines/pipe-network-type-namespace.md)(状态 ②)。**本票未 close**:真实计数复验(`base-archives` 覆盖 5268、概览 `unknownTypeCount` 不再 5268、设备边界类型名正确)与票 18 走查复跑待部署后进行。 **2026-10-09 执行票 13 已收口(含部署复验),滚动复验票 17 亦收口**:[13 报警/工单实时同步](issues/13-backend-realtime-sync.md) 诊断 + 2 项维护者裁定(① 实现 `cockpitWorkOrderStateDelta` 工单状态增量帧;② 设备帧补 `eventId` 透传)+ 实施 + 复验完成。诊断证实:唯一工单推送 `workOrderReminderPush` 是管理端提醒(需鉴权+按人过滤),驾驶舱收不到——印证决策 01 预判;且 **`work_order.update_time` 在状态流转时不更新**(`transition()` 只 set orderStatus、无 FieldFill),增量检测必须逐单比对 `orderStatus`。新增 `CockpitWorkOrderDeltaPushTask`:定时扫描(60s 可配)+ 逐单比对 + **变化才推**给全量订阅会话(免鉴权,不按人过滤,与管理端提醒语义隔离);**首扫只建基线不推送**(REST 才是初始快照);帧带 `scanIntervalMs` 诚实标注延迟上限、不带会误导的 `updateTime`、**不泄漏主键 orderId**(对外键 `workOrderCode`,与 REST 读模型同口径);`stateCode/stateName` 出自票 11 字典单源,脏码名称显式 null。设备帧 `cockpitDeviceStatusDelta` 补 `eventId` 透传(缺省显式 null;zk-api-service 是否真发未证实,防御性透传不臆造)。范围 1 REST 快照复用票 11/12 读模型**无新端点**;降级纪律(无订阅不查库、失效会话清理、断线重订)有测试锁定。提交 `d8a6b03` 已推 `origin/master`(`4ef2159..d8a6b03`),针对性 **21/21**(新增 8 例)+ 全量 **422/422**。**部署复验 6 项全通过**(实例 PID 20240 @ 13:41):WS 回执正常;无变化不推送(75 秒订阅窗口 + 库状态对照闭环);**真人提交验收 284 工单(3→4)→ 40 秒帧到达**(延迟 < `scanIntervalMs=60000` 标注上限,`workOrderCode`/`stateCode=4`/`stateName=待验收`/`deviceCode` 全对,帧内无 `orderId`/`updateTime`,items 只含变化那一张);且 13:55:47 一次只改 `update_time` 不改状态码的「处置」**不触发帧**(检测由 `orderStatus` 驱动的正面证明)。基线卡片 [04 报警/工单实时同步](handoff/baselines/work-order-realtime-sync.md) **升至 ③**;[票 17](issues/17-postdeploy-live-verification.md) 三切片(11/12/13)复验全部通过、滚动使命完成故收口。上位回写已按决策 01 执行(票 25 已回写三切片证据;**Gogs #63 同文回写需负责人远端执行**)。**后端三切片全部完成**;剩余前端 14–16 与阶段收口 18,真人闭环演示归阶段总收口。 **2026-10-12 票 22 已收口(修复实施 + 真实复验全过)**:[22 前端执行票 —— 真实响应信封消费与业务错误映射修复](issues/22-22.md) 经核验确认核心信封解包由并行提交 `ead39442` 提供(非本票实施);本轮**新实施**同一条业务错误映射链上的两处白名单继承键缺口 —— `readBusinessReason` 与 `sectionStateFromBackend`/`sectionStateFromFreshness` 用普通对象下标查白名单,后端回 `category`/`state` 为 `toString`、`__proto__` 等继承键时会把**函数**漏成失败原因/分区状态,与「只认白名单」的既定纪律冲突。修复提交 `86db4d4`(两文件 5 行,改用自有键查找),新增离线回归 [`verify/t22-envelope-frontend.mjs`](verify/t22-envelope-frontend.mjs) 19/19(修复前 5 项实测为红),既有 `t48`/`t04`/`t05`(283)/`t07`(39)/`t08`(44) 无回退。经用户授权后的**真机复验**:重跑 `t18-real-audit.mjs`(116 次只读 GET),三项 `frontend-*` 由 `failed` 全转 `passed`(档案适配值与真实一致、地图 `total`/`snapshotAt` 正确、**业务 `code=500` 由 `success` 改判 `failed`**);`yarn dev` + 真实浏览器逐模式确认,总体概览出真实数字(设施底数 5276),`/events/current?mode=ALARM` 对应分区显示「数据加载失败 · 数据源暂不可用」而非 success 或空白。**该次审计仍有 33 项失败**(八桶 `pointStatus`、设备维事件/工单业务 500、`monitoring/*` 缺 `createdAt`),分属[票 29](issues/29-29.md)、[票 23](issues/23-23-token-pointstatus.md)与[票 18](issues/18-frontend-real-integration-gate.md),不因本票收口而消解。