This was generated by AI during triage.
Type: implementation Status: resolved Assignee: codex Blocked by: 38, 44, 45, 46 Labels: bug, ready-for-agent
✅ 2026-10-12 维护者收口。 维护者明确指示「进行一遍检查并进行收口」,即人工确认到位,按 tracker 约定置 Status: resolved。收口前独立复核(当前工作区实测,非沿用历史证据):
35e5fab 原哈希不再可达),但修复本体(cesiumEngine.js 的 overlapEffectCode / representsGroup / entryHasGroupEffect 聚合光环承接逻辑)在 HEAD、origin/master、工作区三处逐字一致;工作区未提交改动(并行票 24 的灯光/tileset 区域)对修复区域零触及。t47-device-effects 27/27、t47-overlap-effects 27/27、相邻 10 组(t41/42/43/44/45/46/48×2/main-scene/readability-anchor)全部通过。唯一失败 t05 D1(overviewStore 出现 deviceStatistics 裸字段)经归因为并行票 24/25 的既有问题——35e5fab 对该文件 0 处涉及。如实保留的残余缺口(不因收口消失,随联调票 48 继承):运行时逐层 readDeviceEffects 跨帧采样未取得(本轮以非浏览器闸门 + 局部帧差替代);远景雾衰减对照与透明管线完整几何交叠/鼠标反选链未做;可靠性能样本未取。deck 读写闸本轮返回 gate-defer(读额度耗尽),上报以本 Markdown 记录为准。
代码修复与非浏览器验证已完成,修复提交 35e5fab(master,未推送)。新组合回归27/27、最终相关16/16组通过,四类内存变异全被拒绝;完整非浏览器48组检查41通过/7失败,逐项原因留存。Standards双轴审查0硬性违规、1低优先级标签重复建议;Spec未发现新增规格缺陷,另确认真实场景帧差/雾与透明管线/性能/人工验收仍待完成。保持open/claimed与bug + ready-for-agent,不标100%或closed。本地认领字段为codex;deck写认领不支持且会重设Status,已按Markdown约定补记。当前结论优先于下方历史诊断/旧关闭记录。证据:本轮实施验证。
This was generated by AI during triage.
诊断完成,保持 open,唯一分流终态为 ready-for-agent,类别 bug;尚未实施本轮修复。维护者已确认以最新重开记录为准,旧关闭结论仅为历史。已有设备状态/光环实现真实存在,但折叠聚合与选中 NORMAL 中心入口的异常动效被隐藏,组合验收不成立。生产函数最小探针两次稳定复现(折叠/选 NORMAL 两项失败,展开/选 ALARM 两项对照通过)。本轮只更新诊断、验收状态与标签,保存诊断探针,未修改业务源码、未关闭本票。
按决策票 07 在票 44 的独立设备状态词表上实现特效计划,不复用监测点聚合状态。设备五态为 ALARM、WARNING、WORK_ORDER、NORMAL、OFFLINE,未知状态落 UNKNOWN;报警扩散脉冲、预警闪烁、工单旋转环,正常/离线无特效。特效随关联设备图层生命周期门控,选中设备强化,关闭详情随图层销毁;超过 30 台异常设备降级为静态异常标记并显示计数。
本轮后续修复范围:完成已有特效与重叠聚合/持续选中入口的共存,不重定义设备状态、坐标、拾取或阈值语义;具体行为契约见本轮 Agent Brief 评论。
以下保留已有单项实现记录;未勾选项为重开后仍缺的组合验收,不把历史证据当作本轮复跑。
deviceStatus 静态词表,并添加 effect 维度;设备状态不从 pointStatus 推导,未知不猜正常。map.effects 配置缺省 null 跟随构建形态;关闭动效不隐藏静态状态表达。coordinateValidation.renderable=true 设备样例做场景跨帧快照证明逐点动画确实变化;真实环境仍为清单-only 时不得从纯逻辑断言推断现场特效已生效。已有实体回归及本轮受控场景画面/局部像素差;运行时逐层跨帧读回尚未取得,不以截图代替该层契约。关联监测设备图层已显示、特效显式启用且未超过异常阈值时,同坐标/极近距离设备聚合后,设备光环随被折叠的设备实体隐藏;聚合符号只有静态色/形/计数,没有承接动效。选中 NORMAL(同理 OFFLINE/UNKNOWN)成为中心入口后,其余异常设备仍被隐藏,组内异常动效再次不可见。这不等于数据或设备清单丢失,也不证明静态状态全都消失。
影响含需动效设备的 K>1 重叠组;K>maxFan 的聚合降级也走相同隐藏路径,不应与异常设备>30的“主动停动效”混淆。默认 mock success 的 MP-001(ALARM+NORMAL,K=2)及 MP-002(K=11、6台报警/预警+1台工单,低于30台异常阈值)均具有该触发条件;后者的实际页面组合本轮未跑。已展开且异常设备可见的路径、选中 ALARM 的对照可正常显示光环。生产默认 map.effects.enabled=null 可能按构建形态关闭,复现需显式 enabled=true 排除此因素;真实无有效坐标/清单-only 样本不能用于该场景验收。
已保存仅供诊断的进程内探针:triage-overlap-probe.mjs。命令:
node .scratch/cockpit-shell-panel-layout/verify/artifacts/t47/triage-overlap-probe.mjs
探针执行源码中的 syncAssociatedDevices、setOverlapPresentation、applyDeviceEffects、writeEffectFrame 和 readDeviceEffects,使用真实领域分组/特效函数;Cesium API 用最小替身,时间固定为300ms,无浏览器、服务或GPU。两台设备属于同一监测点、同坐标、可上图,状态为 ALARM 和 NORMAL;enabled=true,异常数1、未降级。两次运行结果一致:
| 场景 | 动效计划设备数 | 可见设备 | 可见光环 | 读回光环 | 结果 |
|---|---|---|---|---|---|
| collapsed | 1 | 无逐台设备(保留静态聚合符号) | 0 | 5 | FAIL |
| expanded | 1 | ALARM + NORMAL | 5 | 5 | PASS 对照 |
| selected NORMAL | 1 | NORMAL | 0 | 5 | FAIL |
| selected ALARM | 1 | ALARM | 5 | 5 | PASS 对照 |
退出码1来自两项症状预期失败;无异常崩溃。两个设备是最小分组条件:只有一台时不进入K>1聚合分支。移除ALARM则不存在应显示的异常动效;只改为expanded则恢复。这是生产函数显隐逻辑复现,不能声称真实画面、雾衰减、拾取或性能已通过。
待后续获当前会话明确浏览器验证授权的最小用户步骤:在mock success、特效显式开启且有效样例可上图的场景,选MP-001,保持聚合折叠且鼠标离开入口,观察异常光环;hover/click展开作对照;选正常设备EQ-002,离开预览使其回中心,再观察组内报警表达;返回摘要/关闭详情验证收场。不启动新服务,不修改后端坐标或关系。
附带代价:隐藏光环仍按非空animated计划请求渲染,读数可显示“on/参与动效1”但可见光环为0;源码支持这一机制,尚无真实性能量化。本票修复需避免把计划参与数当作画面验收。
分类 bug,终态 ready-for-agent。修复目标已有成文契约,无需重新选择状态映射、阈值或引入监测点级特效;代码修复可由agent处理,后续场景/人工验收要求不是将整个票转ready-for-human的理由。具体实施方式留给后续修复阶段,既有单项实现可复用;本次不开始修复。
后续须覆盖折叠/展开/选NORMAL/选异常、K>10且异常≤30、超过30主动降级、关闭动效与撤层,并证明可见异常表达与拾取身份正确。真实帧差、人工走查和性能证据尚缺;真实有效关联样本不足的外部联调由48及相应联调票跟踪,不用mock冒称真实联调完成。
无待维护者拍板的新增业务事项;已按授权转到ready-for-agent。由于AGENTS.md项目规则,本轮跳过build/debug验证及浏览器调试/截图;仅执行上述非浏览器诊断探针。
下列记录及旧人工确认原样留档;当前状态以上方本轮诊断为准。
维护者已确认效果“基本符合我的要求”并明确要求自检、主场景同步、提交推送后关闭;本票曾按该授权收口。
维护者确认“基本符合我的要求”,授权再次自检、同步主场景、提交推送后关闭本票,人工确认前置条件已满足。代码提交 09ef651 已推送至 origin/master,本票当时改为 resolved。
中心设备图标保持常亮不透明,状态动画由外围四层能量环与辉光表达;设备详情和连接短线随所选设备换锚,返回摘要恢复监测点锚点。默认主场景保留 MP-001 K=2 / MP-002 K=11,并修正太常设备坐标、补齐五态样例。维护者人工确认结合本轮脱浏览器自检完成收口;本轮未运行 build/debug/浏览器。
success 主场景共用中心图标清晰度、设备详情换锚及外围光环代码,无需 URL 场景参数。MP-001 保持 K=2;MP-002 保持 K=11,设备坐标修至太常点附近,五态分布为 3 报警 / 3 预警 / 1 工单 / 3 正常 / 1 离线,前三种状态播外围动效。t47-main-scene.mjs:真实 mock 传输→地图/详情适配→聚合/动效/锚点计划,验证编码一致、设备自身有效坐标、K2/K11与五态动效。t47-readability-anchor.mjs 19 项通过,涵盖中心 alpha=1、外围闪烁、展开偏移、图层撤下、关特效停循环、设备换锚、返回点位、无位置与待确认退化。维护者指出中心图标闪烁太暗、设备间距较大时设备详情仍留在父点并遮住所选设备。本次已将中心图标改为不透明、稳定形状且不缩小至正常尺寸以下;闪烁/扩张/旋转仅写外围光环。光环跟随设备显示与 pixelOffset;按需渲染时动态设备主动请求帧。
设备详情及面板连接短线改为锚向所选设备(设备 A→B 换锚,返回摘要恢复监测点)。锚点包含贴地高度、展开偏移和当前图标尺寸;无位置设备显示自身原因,不借父点坐标。维护者直接裁定已记录在决策规格 12/15、决策地图与 CONTEXT.md;上游决策票 04 的 deck 写入被文件权限拒绝,尚待同步。
验证:新增 verify/t47-readability-anchor.mjs 覆盖生产动画写帧、锚点身份、设备位置退化与实际投影;相邻特效/锚定/联动/重叠/模式脱浏览器闸门通过。本次依据 AGENTS.md 未执行 build/dev、浏览器调试或截图;已更新真实走查脚本,尚未复跑,因此下方历史跨帧结果不能当作本次画面验收。票保持 claimed,待人工复验与权限允许后的决策票同步。
当时未关闭:本票验收第 7 条明写「真实帧差与人工走查分别记录结果,未获人工确认不关闭本票」。 自动证据(纯逻辑 20/20、跨帧快照 9/9、降级 6/6、真实帧差已取)已齐,缺的只有维护者目视裁定 (脉冲强度是否合适、正常/离线是否够可辨、30 台降级是否仍读得出「有异常」)。
domain/deviceStatus.js:按决策票 07 给设备独立词表新增 effect 维度
(ALARM: pulse / WARNING: blink / WORK_ORDER: spin / NORMAL: null / OFFLINE: null /
UNKNOWN: null)。正常、离线、未知一律无动效 —— 未知状态更不编一个"正在报警"的样子。domain/deviceEffects.js(新,纯函数):deviceEffectOf() 映射、effectPhaseAt() /
pulseStrengthAt() / blinkStrengthAt() / spinAngleAt() 相位、planDeviceEffects() 门控与降级、
degradedAbnormalNote() 计数文案。「什么算异常」复用票 46 的 isAttentionDeviceStatus
单一住址(ALARM/WARNING),不另造一份定义。services/cockpitConfig.js:新增 map.effects { enabled, abnormalLimit },与票 32 的
map.ui.debug 完全同构(enabled: null=跟随构建形态;脏值退回默认并记 issue)。services/cesiumEngine.js:applyDeviceEffects() / stopDeviceEffects() /
readDeviceEffects()(只读跨帧读回)。动效乘在票 43 反应量的基准上(deviceBaseStyle),
不与选中/hover/弱化互相覆盖;载体是场景内 billboard,不是后处理级
⇒「先特效、后雾」自动成立,不占 PostProcessStageCollection、不开穿雾例外。services/mapService.js + stores/deviceLayerStore.js + components/PointDetailCard.vue:
计划随图层下发、图层撤下即停(特效随图层消失)、降级时面板显示「异常设备较多(N 台)· 动效已暂停」。
宿主新增只读字段 data-map-device-effects(on|off|degraded)、data-map-device-effects-abnormal、
data-map-device-effects-animated。mocks/contractMocks.js:两个受控样例 —— device-effects(五态各一台,坐标各自错开)与
device-effects-degraded(31 台报警)。受控可上图样例是决策票 07 的硬要求
(真实环境仍是清单-only 时不得从纯逻辑推断现场特效已生效)。verify/t47-device-effects.mjs 20/20 —— 映射唯一、未知不猜、
门控、恰好 30 台不降级/31 台降级、阈值可调、map.effects 默认与脏值。
相位函数按时间采样(脉冲 8 个不同取值、闪烁两段、旋转单调推进),不是拿两份 JS 数据互比。verify/t47-device-effects-walkthrough.mjs 9/9 ——
8 帧采样下,报警 scale/alpha 各 8 个不同取值、预警 alpha 2 个取值(闪烁两段)、
工单 rotation 8 个取值;而正常与离线全程只有一个取值(完全静止)。真实鼠标点开点位。cdp-driver.screenshot();
字节级判据,未做逐像素解码 —— 无依赖可解 PNG)。device-effects-degraded 6/6 —— data-map-device-effects=degraded、
动效台数 0、8 帧全部无动效、异常计数 31 可见、31 台静态标记仍画着(不静默删点)。决策票 07 说「同屏异常设备超过 30 台时降级」,而它同时把 WORK_ORDER 列为有动效的状态。
我按票 46 的「需处置」判据(ALARM/WARNING)计异常台数,而不是按"所有带动效的设备"计 ——
理由是票 08 的现场校准记录正是「23 台异常 ⇒ 已降级、动效台数 0、异常台数 23 仍在」。
若维护者认为该按"带动效台数"计,这是回票 07 重议的事,不由本实现自行改。
请维护者目视裁定三件事:① 脉冲/闪烁/旋转的强度是否合适(当前幅度 0.34、选中 0.55); ② 正常/离线完全静止是否够可辨;③ 31 台降级时是否仍一眼读得出「有异常」。 确认后即可关闭本票。
零依赖闸门 37 道(含本票新增 t47)全绿;三处红与本票无关:
t11(并发会话给 PointDetailCard.vue 新增了 ref(,撞票 10 的"组件不自己存状态"守卫)、
t15(并发会话在改快照/推送语义)、t28(需 puppeteer,模块不在本机)。
守卫同步更新 2 处(都是本票有意变更契约):t44 的 F11 原写「动效留给票 47」,现按新契约
允许 effect 并钉住取值域与"正常/离线/未知无动效";t43 的 F12 正则允许新增的 effects 选项。
按 AGENTS.md:该历史会话未跑 build;yarn dev 未由当时agent启动(8000 端口已有服务在跑)。
浏览器仅用于走查(维护者授权的提权通道)。本轮不继承为浏览器验证授权。
整体验收源码审查确认:折叠聚合使所有设备owner.show=false,外围环按owner.show隐藏;聚合实体无特效owner,因此异常聚合折叠时动效全不可见。对应规格重叠特效不因聚合开关失效,不能以原特效脚本全绿代替此组合。先构造折叠/已选NORMAL中心的场景回归再修复。
This was generated by AI during triage.
Agent Brief
Category: bug Summary: 补齐设备状态特效与重叠聚合/持续选中入口的共存,避免聚合折叠后组内异常动效全部不可见。
Current behavior: 已有设备独立词表、effect计划、光环池及动效驱动真实存在。聚合成员被隐藏后,光环按成员owner.show隐藏;聚合符号不带deviceCode,也未承接光环。两台同坐标ALARM+NORMAL、特效开启、异常数1且未降级的生产函数探针两次稳定出现:collapsed可见光环0,expanded为5,选NORMAL回中心为0,选ALARM为5。readDeviceEffects仍能返回5个隐藏光环且不带可见性;计划/属性变化不能作为画面成功判据。本次仅诊断,无业务代码修复。
Desired behavior:
Key interfaces:
planDeviceEffects({devices, enabled, abnormalLimit}) — 保持设备独立状态映射、异常计数和主动降级语义。syncAssociatedDevices / setOverlapPresentation / applyDeviceEffects / writeEffectFrame — 使动效显示生命周期兼容聚合与selected入口,不能只依赖被聚合隐藏的单设备owner。readDeviceEffects与宿主data-map-device-effects* — 区分计划参与/属性变化与真实可见性,验收不能仅据tick、动效台数或隐藏光环属性判成功。map.overlap.maxFan / map.effects.abnormalLimit / map.effects.enabled — 保持现有默认与归一化规则,不改业务阈值或默认构建行为。Acceptance criteria:
Out of scope:
诊断正文已记录最小命令、两次结果、多个候选、源码链路与历史证据边界。无待维护者拍板的新增业务事项;本轮分流为bug + ready-for-agent。按AGENTS.md,本轮跳过build/debug及浏览器验证。
设备状态视觉特效与门控本轮修复已提交为35e5fab:折叠组最高状态光环承接当前入口,静态设备保持自身身份,公开读回区分可见性与聚合归属,同状态所选入口去重。新组合回归27/27;最终相关16/16组通过;四类内存变异全被拒绝。完整非浏览器检查41/48,七组失败已逐条留证,未为本票改断言。Standards审查无硬性违规,Spec审查进行中。真实帧差/人工/性能验收未执行,保持open;完整证据见verify/artifacts/t47/implement-status.md。
本轮按维护者明确授权继续现有页面场景复验:K2选择NORMAL保留绿色中心与组内红色异常光环;hover预览/移开收起、返回选ALARM和关闭撤层均取得截图;K11选择正常EQ-DG-008后异常外围仍可见;管线视图切换后仍保留;31异常显示动效暂停与静态标记说明。K2两帧局部比较469/6000像素通道差>10,静态地面对照0/17500变化。证据见verify/artifacts/t47/scene-20261012/acceptance.md。配置已恢复real及原effects缺省。未启动/重启服务、未构建、未写后端。debug/performance与运行时逐层采样未取得,远景雾/完整透明管线组合/人工确认仍缺,保持open。新任务页已关闭,session stop未成功确认;旧session归属已丢失,不冒称全清理完成。