维护者 2026-10-19 反馈第 2 条:基础设施「运行信息」面板没有分页,且块标题「指标占位」与实际内容不符(意义不明)。
实测(2026-10-19,192.168.110.96:8301 只读接口):/infrastructure/operating-information 一次返回 6772 条指标(GAS 699/WATER_SUPPLY 2497/DRAINAGE 3576/MANHOLE 0),响应体 2.3 MB;前端 operationPanel 用 listBlock('指标占位', metrics) 全量直渲。这是一个行业一屏就画几千条卡片——比监测点台账严重得多的「无限拉长页面」。
根因:票 57 首版规范把它列为「排除项」,依据是代码推断的「单行业指标条数契约有界」;真实数据证伪(见规范修订记录)。同时块标题「指标占位」是占位期遗留词,实际是真实指标列表。
PagerNav.vue)。selectedIndustry 回显块),不在本票发明跨行业合并口径。pointCodes 是设施编码——票 49/50 既有裁定,不重开)。domain/infrastructurePanels.js 的 operationPanel(listBlock('指标占位', …))、services/infrastructureApi.js(/infrastructure/operating-information)。pointCodes 是设施编码)、票 50(撤定位按钮)、票 51(按回显 selectedIndustry 定位块)。../specs/2026-10-18-global-list-pagination.md
2026-10-19 认领并实施完毕(闸门 + 变异闭环)。已提交并推送:提交 0117a5e(4d80d30..0117a5e → origin/master,远端已核实 == HEAD)。
入库过程如实记:期间并行会话把本票的
domain/pagination.js(四个寻址/复位函数)、PagerNav.vue与规范的「裁定第 3 条」卷进了它的提交18263a6,而infrastructurePanels.js的块标题在origin/master上仍是指标占位、t56里没有sourceNote条目——远端一度处于半入库状态(票 64 闸门当时在远端跑不出绿)。本票的提交把剩下的部分补齐,使远端回到自洽。
指标占位 → 运行指标;listBlock 新增可选 paginate / pageScope 声明(不传时块形状一字不改,既有调用零影响)。sourceNote(数据来源与口径),并入票 56 的折叠摘要表(data-panel-source-note 断言面)。domain/pagination.js 增加 listPageKey / readListPage / writeListPage / resetListPages(页码寻址与复位也只有一份)。PanelBlocks.vue 的 list 分支接共享 PagerNav.vue(页码直达 + 跳页 + 一页不画控件),行数由 windowOf(block) 给;仅对 domain 声明的块切窗口。panelViewOf('operation') 传 { scope } 给 domain 算 pageScope(换片区复位判据)。key 在真实载荷里整块碰撞(燃气 699 条同 metricCode)。specs/2026-10-18-global-list-pagination.md 第 13 行的排除清单仍写着「运行信息指标占位」,与同文件 2026-10-19 修订记录自相矛盾 → 已删该词条并把它补进「前端集合分页」清单。pageCount 恒为 1 ⇒ 默认 mock 环境下整块 pager 不出现(符合条文 4)。曾问是否把样例补到 >10 条/块用于当场演示——裁定:可以补但没有意义,验收与走查一律以真实数据为准。已升格为本图 Notes 的常设偏好 + 规范「维护者裁定」第 3 条(批次二~五同循,不再各自来问)。多页行为维持由闸门用真实载荷证明(t64 V 组 70 页逐页对账);真实分页观感归票 18 的真实联调窗口。Status: resolved Assignees: agent Type: task Blocked by: #59 Labels: wayfinder:task
2026-10-19(实施者):块标题取 运行指标 —— 票面 Acceptance 给的示例词,与面板名「运行信息」、空态文案「当前行业没有运行指标」、领域函数 toOperatingMetric 同一套词,不新造第四种说法。维护者若另有偏好,改 infrastructurePanels.js 里那一处字面量即可(标题是单源,闸门 D1/S4 会跟着判红提示)。
2026-10-19(实施者):既有闸门两处按成例处理,均与本票判据语义无关——
① t56 的 EXPECTED 表补 sourceNote 条目:是它的 C 组双向普查自己判红的(domain 新增说明字段不进折叠表=漏网隐形),不是本票绕过守卫;补完后 33/33 + 变异 9/9 全绿。
② t50-mutations M4 的变异锚点未命中(BAD):票 50 落盘后该行末句又被未提交改动改成「(地下管线详情视图)」,脚本里留的是「(重点对象局部增强)」——锚点过期,不是缺陷复活;本票未动过 locateNote(git diff 零交集已核)。仅重新对准锚点,判据(退回旧说法必须红)一字未动,改后 4/4。
验收逐条对账(判据与证据都在 t64 闸门,61 条断言,都不启浏览器、不联网):
接入统一分页 ✅ 复用批次一的 domain/pagination.js + PagerNav.vue,本票零新翻页算术:真实燃气 699 条 → 首屏只画 10 张卡、计数行「第 1/70 页 · 共 699 条」;页码直达 + 输入框跳页 + 到边 disabled 保占位 + 一页不画控件(S1/S2/S3/S7)。V12 是逐页全扫——70 页每一页画出来的 key/标题/读数必须等于领域行的对应切片(内容级判据;只数卡片数抓不到「页码显示对、画错行」)。
块标题如实 ✅ 运行指标;「指标占位」在视图产物与真实渲染的 DOM 里彻底不存在(D1/S4,变异 M2 退回旧词当场转红)。
顺带修掉一个真实缺陷(分页把它从理论问题变成每帧都碰的问题) 真实载荷里燃气 699 条指标全是同一个 metricCode(gas_pipe_network_length「太常片区燃气长度」,逐设施一条),旧行键 ${行业}|${指标码} 于是整块碰撞:699 张卡共用一个 :key,而清单卡是 keyed v-for → 节点身份不存在。实测旧写法翻页内容仍正确(靠下标兜底),但这是运气不是保证;已给键加序号后缀(D7 判 699/699 唯一;变异 M4 退回旧键当场转红)。没有重排行序(D6 逐条对后端返回序,票 10/11「前端不重排」立场不变)。
按当前行业聚合、不发明合并口径 ✅ 分页的集合就是票 51 定位出的 active 块那一条 metrics,领域层仍交出整块 699 行(D5)——分页只切展示窗口,不裁数据、不改口径。
如实说明来源与口径 ✅ 新增 sourceNote:「运行指标由后端按设施实体逐条生成(水厂/泵站/管网/排水设施四类适配器),一条指标对应一个设施;当前行业取后端回显,不跨行业合并」。走票 56 既有折叠摘要(v-show,文本在 DOM 里不丢,S5)。票 49/50 裁定不重开:行 points 恒空、locate 恒空(D13)。
复位与保持 ✅ 换行业/换片区 → 页码回第 1 页(V4/V5);定时刷新 → 页码保持(V3);跳页超界 → 由 pagedRows 夹回最后一页、不画空表(V8/R5)。
这一条返过工,教训留在这里:第一版把筛选条件编进页码归属键,宣称「复位由构造成立、不写 watch」。对抗式自查时拿规范条文 6 逐字核对,发现它切走再切回会读到旧槽位停在第 3 页(「切回燃气」同样是一次条件变化),违反条文 6;且与票 46/59「换设备显式清页码」的既有成例分叉。改成显式清槽(resetListPages,只清点名的块),并补 V11a/b/c 三条断言钉住「切走—切回也回第 1 页」;变异 M16 成对复现第一版设计(条件进键 且 无清槽),只有 V11c 判得出——V4/V5/V3 全绿。注:只改「进键」而保留 watch 是等价变异(实测假绿,行为与正确版一致),故不列为有牙判据。
排除项没被顺手接入 ✅ 管理信息片区×行业明细(实测 9 行)不声明、不画控件、9 行照旧全画(N1)。N8 才是这条的牙:另造一个「12 行但未声明分页」的块,必须仍全量画出零控件——N1 的 9 行本来就 ≤10,抓不住「渲染层不分声明一律切窗口」(变异 M1 对应 N8)。listBlock 不传 options 时块形状一字不改(N2/N3)。
闸门 + 变异打红 ✅ t64 61/61、t64-mutations 17/17 全部被对应断言抓住并按字节还原。
验证层级如实说明:判据覆盖到「真实载荷 → 领域层 → 共享渲染层(SSR + Vue 自定义渲染器真实 patch)」,含逐页内容对账与交互驱动;未在真实浏览器里走查(AGENTS.md 项目规则,且本轮未获授权),因此视觉排布(pager 在面板栏宽内的换行/贴边)未取证实物证据。按项目规则已跳过 build/dev/preview 验证。
落盘资产:闸门 verify/t64-operation-metrics-pagination.mjs、变异 verify/t64-mutations.mjs;诊断探针(含 70 页全扫与「重复 key 会不会画错内容」的实测)留档在 verify/artifacts/t64/;载荷沿用票 51 的 verify/artifacts/t51/(未新取数)。
改动文件与入库归属(提交 0117a5e,整文件范围=维护者选定):
domain/infrastructurePanels.js(标题 / 分页声明 / 行键 / sourceNote / pageScope)、domain/panelBlocks.js(listBlock 可选第 4 参)、components/PanelBlocks.vue(分页状态 + 条件变化清槽 + 共享控件接线)、CockpitShell.vue(把当前片区传给运行信息面板)、services/infrastructureApi.js(一行注释与既成事实对齐);.scratch 侧票面、map、新票 73、verify/t64-operation-metrics-pagination.mjs / t64-mutations.mjs / t56-panel-summary-disclosure.mjs(补 sourceNote 条目)/ artifacts/t51/(本票闸门读它,随闸门入库,沿用本仓 verify/artifacts 已有 410 文件的先例)/ artifacts/t64/ 探针。18263a6 入库(非本票提交):domain/pagination.js(含本票追加的四个函数)、components/PagerNav.vue、规范。components/PipeColorLegend.vue(票 48 的 hunks 在 CockpitShell.vue 里 import 它,不带上则推送树运行时断裂——扫描器实测:HEAD 的 CockpitShell.vue 并不引用它,引用只在工作树版里)、mocks/contractMocks.js(票 49/50/51/08 已收口的 mock 侧,是 t64 M 组的前提——模拟推送树实测:不带则 M3 判红,60/61)。该文件不含任何 open 票(60–73)的标记。verify/t50-mutations.mjs(我改过它的 M4 锚点,但它调用的 t50-operation-locate-buttons-removal.mjs 在 HEAD 里不存在——单独提交变异器会得到跑不起来的半成品,故退出本次暂存);verify/t50-operation-locate-buttons-removal.mjs、t51-operation-industry-block-selection.mjs 等票 49/50/51 的闸门脚本仍未跟踪。MANAGEMENT_REGION_GAP/REGION_MAP_GAP 的 HEAD 级既有红)。MapCanvas.vue/mapService.js/monitoringPanels.js/pointStatus.js/tokens.css/tools/city-massing/*/CONTEXT.md 等 20+ 文件)未被本次提交携带(git show --name-only 已核)。