# 终稿验收报告(规格 13) 验收日期:2026-10-15 验收对象:城市生命线驾驶舱蓝湖正式素材替换(`lanhu-cockpit-asset-replacement`) 验收依据:[分批替换与终稿验收规格](issues/13-batch-acceptance-spec.md) 验收入口:真实 `/cockpit` @ `http://127.0.0.1:8000/#/cockpit`(按 `AGENTS.md` 运行环境约定) 授权:维护者本轮明确指示「运行终稿验收」 --- ## 结论摘要 **终稿验收通过**(2026-10-15,维护者确认签收): - **真实 `/cockpit` @ 1280×720**:全部离线断言面 **6 套全绿**;四个一级模式逐一走查通过;字体 **5/5 实际加载**;**404 = 0**;控制台业务报错 = 0;临时素材关闭清单核对完成(核心资源组已全部换正式素材)。 - **qiankun 宿主**:经维护者指示已**补做**——自建最小宿主实测「加载 + 挂载 + **基址注入生效** + cockpit 模块图全 200」。宿主内完整 `/cockpit` 走查因**宿主集成既有问题**(`runtime.js` 的 `history` 契约不匹配,非本图缺陷)未完成,已记入待办。 - **缺陷分级**:**P0 = 0、P1 = 0、P2 = 0**、P3 = 11(全部已登记)。 **签收**:维护者 2026-10-15 确认签收,并同意关闭票 13 与整张地图。共识经验已提取留档至 [CONSENSUS.md](CONSENSUS.md)。 --- ## ① 各批次走查单(含截图/读数) 五张执行票均已关闭并各自附走查单: | 批次 | 执行票 | 走查单/证据 | 状态 | | --- | --- | --- | --- | | 1 品牌/图标 | [票 14](issues/14-exec-batch1-brand-icons.md) | 票内四轮迭代记录;沉淀 [UI 设计及图标素材使用共识](icon-usage-consensus.md) | 已关闭 | | 2 面板 token | [票 15](issues/15-exec-batch2-panel-tokens.md) | [批次 2 验收说明](verify/batch2-closeout.md) | 已关闭 | | 3 位置符号 | [票 16](issues/16-exec-batch3-map-markers.md) | 票内七轮签收走查;锚点迁移对抗式验证 7/7 | 已关闭 | | 4 字体接入 | [票 17](issues/17-exec-batch4-fonts.md) | [批次 4 验收说明](walkthrough-17-batch4.md) | 已关闭 | | 5 装饰/纹理 | [票 18](issues/18-exec-batch5-decorations.md) | [批次 5 验收说明](walkthrough-18-batch5.md) | 已关闭 | --- ## ② 设计稿 vs `/cockpit` 对照(本轮实测) **走查环境**:真实 `/cockpit`,视口经设备度量精确设为 **1280×720 CSS px**(`@view 1280x720`),硬刷新后进入系统。 **四个一级模式逐一走查**(截图留存于本会话): | 模式 | 面板组合(实测) | 结果 | | --- | --- | --- | | 总体概览 `overview` | 左:态势总览 / 基础设施;右:运行监测 / 预警设置 | 通过 | | 基础设施 `infrastructure` | 左:基础档案 / 运行信息;右:管理信息 / 应急保障 | 通过 | | 运行监测 `monitoring` | 左:监测概览 / 监测分布;右:运行概况 / 监测点台账 | 通过 | | 预警处置 `warningResponse` | 左:当前预警 / 历史分析;右:预警效率 / 预警分析 | 通过 | **结构保护核对**:4 模式 / 16 `panelId` / 每模式 4 面板 / 两栏 + 中央一张图——全部与 ADR 0003 一致,未见结构漂移。状态图例 8 行常驻(报警/预警/工单处置/正常/离线/无设备/状态未发布/无关联设备)。 **位置符号**:地图上 DOM overlay 标记可见(水滴徽标 + 内层图标 + 中文标签),四模式均正常渲染;`markerPlan` 合成计划断言 38/38 全绿。 **1280×720 检查**:左右栏与中央地图边界清晰、无面板重叠;面板标题、读数、图表、图例完整可读;面板内滚动可用。 --- ## ③ 缺口清单现状(票 06 唯一来源) **未替换临时项:仅 1 条** —— `icon.blank`(`status: temporary`、`core: false`、manifest 第 56 条),登记类型为「**设计稿未覆盖**」(蓝湖 9 画板中空面板占位图示无对应物),按规格 12「设计稿未覆盖项维持现状」保留,不阻断发布。 **P0 阻断项:0 条**。 **已关闭项**:`icon.brand` / `icon.layers` / `icon.points` / `icon.event` / `icon.resource`(批次 1 替换为蓝湖正式切图);`font.body.*` / `font.num.*`(批次 4 接入)。 **带缺口交付项(全部 P3 或已确认)**:`token.fs.*` 可读性上调(维护者已确认)、`token.panel-gradient` 三停近似(维护者已要求并反馈)、`token.fs-standalone` 独立档位、`token.column-detail-width`、`token.point-status-colors`、`token.chart-categories`、`ui.section-status-dot`、`decor.grid-scanline-vignette`、`decor.brand-pool`、`decor.unconsumed-candidates`、`decor.panel-corner-color`。 **字体侧待走查确认项**:子集外汉字走回退(规格 11 Q14 预期行为)、`--num` 逐字度量偏差 16 项、Noto Sans SC Medium 字重未单独嵌入、`Alimama FangYuanTi` 无授权证据未接入(不阻断)、`PingFang` 系统字体不可嵌入(已锁)。 --- ## ④ 临时素材关闭声明(逐项清单) | 原临时素材 | 现状 | 新正式素材(manifest 条目) | 状态 | | --- | --- | --- | --- | | 内联 SVG 占位图标(`brand`/`layers`/`points`/`event`/`resource`) | `icons.js` 已无内联 SVG 几何 | `icon.brand`、`icon.layers`、`icon.points`、`icon.event`、`icon.resource` 等 55 条 `formal` | **已替换** | | 设备临时形状簇(`markerSvg` 几何形状) | 合成计划层已改双层水滴徽标 | `marker.master.solid` / `marker.master.hollow` / `marker.inner.*` | **已替换** | | 系统字体栈(未接入 Web 字体) | 已插入 5 个子集 woff2 | `font.body.regular/bold`、`font.num.regular/bold/mono` | **已替换** | | `icon.blank`(空面板占位图示) | 仍为临时 SVG | 无(设计稿未覆盖) | **登记未替换**(P3,不阻断) | | `aerial.webp`(无地理配准临时影像) | **仍在被引用** | — | **不属本图**(归票 21/22 底图线,见下) | **关于 `aerial.webp`**:实测 `MapCanvas.vue:119` 仍以 `${base}cockpit/aerial.webp` 作临时底图,`contractMocks.js:911` 亦引用。它是**临时底图影像**,票 01/02 与 `public/cockpit/README.md` 均已明确「真底图/瓦片归票 21/22」,**不在本图素材替换范围内**,故不计为未关闭临时项。 **核心资源组关闭判据核对**(规格 13 Q9):品牌标识 ✓ 已换正式切图;点位/设备状态形状语义 ✓ 已换双层徽标体系;状态色语义 ✓ 由 `tokens.css` 唯一来源 + 运行时着色。**核心资源组全部换正式素材** ✓。 --- ## ⑤ 待设计方确认的偏差清单 + 环境阻塞 ### 待设计方确认 - `decor.grid-scanline-vignette`:5 项氛围增强(网格/扫描线/暗角/辉光/切角)蓝湖无对应图层,现状维持——需设计方确认是否补图或认可现状。 - `decor.brand-pool`:光池消费点为推断(标题运行时 404u ≠ 设计 470 逻辑尺寸),非像素级对位。 - `decor.unconsumed-candidates`:11 个装饰候选无消费点(已挪归档),需设计方确认落点。 ### qiankun 宿主验收(**已补做**,2026-10-15) 原判「无宿主工程 → 无法执行」经维护者指示「尝试去补一下」后**已补做**:自建最小宿主(仓库外 → 后移至 `.scratch/lanhu-cockpit-asset-replacement/qiankun-host-acceptance/`,**未污染 `public/` 产物**),用仓库既有 `qiankun@2.10.16` UMD 离线加载 `http://127.0.0.1:8000/` 的被嵌应用。 **已证实的部分(通过)**: | 检查项 | 实测结果 | | --- | --- | | 宿主加载被嵌应用 | `beforeLoad` / `beforeMount` / `afterMount` 均触发,appName = **`TvT.js`** | | **基址注入** | `__INJECTED_PUBLIC_PATH_BY_QIANKUN__` = **`http://127.0.0.1:8000/`**(生效) | | 被嵌应用渲染 | 渲染出自身 3D 场景,**无白屏** | | **cockpit 模块图资源解析** | `CockpitShell.vue` / `MapCanvas.vue` / `PanelBlocks.vue` / `StatusTag.vue` / `markerPlan` 等**全部 200**,走注入基址解析,**无 404、无硬编码路径** | **未通过的部分(宿主集成既有问题,非本图缺陷)**: - 宿主内 `/cockpit` **未渲染**(落在 TvT 默认页),控制台报 `TypeError: Cannot read properties of undefined (reading 'push')` at `src/.fes/plugin-qiankun/micro/runtime.js:26`。 - **根因**:`runtime.js:24` 解构 `{ router, history }` 并在 `:26` 调 `history.push(...)`,但 FES 4 的 `onRouterCreated` 契约**只保证 `router`**(同签名的 `@fesjs/plugin-access` 只解构 `{ router }`)→ `history` 为 `undefined`。 - **归属**:该文件 `git status` **无本地改动**,是仓库既有文件;属**宿主集成**问题,**不在本图素材替换范围**(本图 Destination 是素材替换,不是宿主路由集成)。 - 因 `/cockpit` 未挂载,宿主内字体/图标请求为 0 —— **如实记录,不粉饰**。 **结论**:规格 13 要求的「宿主内验证**资源解析与基址注入**」**已执行并通过**(模块图全 200、注入基址生效);「宿主内完整 `/cockpit` 走查」**因既有集成问题未能完成**,该问题应作为**独立事项**处理,不由本图修复或掩盖。 --- ## ⑥ 缺陷分级汇总(P0–P3) | 级别 | 数量 | 明细 | | --- | --- | --- | | **P0 阻断** | **0** | 核心资源组无缺失;无状态语义误导;无授权风险(字体白名单全部 OFL 且证据归档) | | P1 高 | 0 | 1280×720 下无不可读/不可操作/重叠;位置符号可辨;锚点正确 | | P2 中 | 0 | 无观感或性能阻断项 | | P3 低 | 11 | 见 §3 缺口清单(含 `icon.blank`、装饰现状维持项、token 近似项),全部已登记、不阻断发布 | --- ## 断言面执行记录(本轮实测) | 断言面 | 结果 | | --- | --- | | `batch2-token-check.mjs` | **10/10 通过**(token 唯一性、裸字面量清退、字体槽位一致) | | `batch5-decor-check.mjs` | **11/11 通过**(光池消费链、无死资源、四角色值收口、结构保护) | | `check-manifest.mjs` | **通过**(56 条,含文件可达性与 hash 一致性) | | `cross-check-icons.mjs` | **通过**(注册表 51 / manifest 56,四处交叉引用一致,缺失 0) | | `check-marker-plan.mjs` | **38 过 / 0 败**(母版归属、尺寸层级、尖端锚点、tint 推导、降饱和) | | `check-fonts.mjs` | **通过**(5 条目 / 7 许可、门禁逐条 ok、回退链、对抗式反证) | | `t01-panel-catalog.mjs` | **通过**(4 模式 / 16 面板 / 地图生命周期幂等 / 基址解析) | ## 运行时实测记录(真实 `/cockpit` @ 1280×720) | 检查项 | 结果 | | --- | --- | | 字体请求 | **5/5 全部加载**(`noto-sans-sc-400/700`、`rajdhani-400/700`、`share-tech-mono-400`,`font/woff2`,200/304)——符合「字体请求为 0 必判 FAIL」纪律 | | 404 请求 | **0**(1727 次请求中无 404) | | 控制台业务报错 | **0**(仅 `hm.baidu.com` 第三方统计的 Permissions policy 提示与浏览器扩展日志) | | 页面结构 | 4 模式切换正常;16 面板齐备;8 行状态图例常驻;DOM overlay 标记可见 | | 数据源 | `配置就绪 · 数据源 real`(真实后端 192.168.110.96:8301) | --- ## 验收结论与下一步 **已达成**:真实 `/cockpit` 环境终稿验收通过;核心资源组全部换正式素材;P0/P1/P2 缺陷为 0;全部断言面与运行时实测证据齐备。 **未闭合(本票保持 open)**: 1. **qiankun 宿主验收**——需宿主工程存在后补做;当前仅被嵌侧基址解析断言已覆盖。 2. **维护者签收**——证据已备齐(本报告 §1–§6),待维护者人工确认。 **建议下一步**:维护者确认本报告后签收;若 qiankun 宿主短期内不提供,建议在规格 13 中把该项标注为「环境前置未满足」并明确后续触发条件(宿主工程建立时补验),而非无限期挂起。 --- *本报告由代理在用户明确授权下运行验收生成。按 `AGENTS.md`:本轮运行了用户明确要求的验收命令(dev server 已在 8000 端口运行、浏览器走查),未额外启动服务。*