Type: execution Status: ready-for-agent Label: ready-for-agent Blocked by: None Category: execution
What to build: 把驾驶舱 6 个内联 SVG 占位图标(brand / layers / points / event / resource / blank)替换为正式素材,经统一资产解析层按语义 key 消费;全部素材在 manifest 登记并通过校验。图标注册表与渲染组件的接缝不变——只换素材来源,不改引用点。
status: temporary、真实 sha256、fallbackKey: null(图标无跨语义回退,加载失败渲染为空);validateManifest() 模块加载期校验通过(schema/唯一性/路径安全/hash 格式/fallback 引用)。panelId / 状态词表冻结)。
AGENTS.md,本会话未获明确要求,不运行 build/dev/test。静态核对:本次改动只涉及 icons.js / runtimeAssets.js / CockpitIcon.vue / public/cockpit/**,未触碰 panelCatalog.js、状态词表、模式与面板结构。domain/runtimeAssets.js(manifest 校验 + 语义 key 解析 + BASE_URL 兼容)。最小子集边界:manifest 随包内置(构建期固化),运行时远程拉取/短缓存/整包回滚留待规格 09 完整实现,对外 resolveAsset(key) 语义不变。实现者自测(纯逻辑 + 静态检查):
ICON_SPECS 六键 → icon.* 语义 key → resolveAsset();全仓 grep cockpit/assets 仅命中 domain/runtimeAssets.js(manifest 导入)一处。iconFor() 未知名/无 URL 返回 null → CockpitIcon v-if 不渲染;不变量改为组件模板条件渲染承载。key/path/source/format/dimensions/transparent/density/version/hash(sha256 实测)/status(temporary)/appliesTo/fallbackKey/core;fallbackKey: null 为显式无回退(图标失败渲染为空,不跨语义借用,符合规格 09 语义边界)。brand→CockpitShell 顶栏;layers/points/event/resource→MapCanvas LAYERS;points→MapCoordinateBlocked;blank→PanelPlaceholder。AGENTS.md:未经明确要求不运行 build/dev/test)。需维护者放行验证命令或人工走查时补。维护者走查(真实 /cockpit):
缺口登记:
/cockpit 走查待做;本会话按 AGENTS.md 未运行 dev/浏览器)。data-* 读数:未实测;观察接缝已落地——CockpitIcon 输出 data-icon-name / data-asset-status(当前应读作六处 temporary),manifest 级读数可经 manifestStatus() 取得。domain/runtimeAssets.js(manifest 校验:schema/字段齐全/语义 key 唯一/路径安全/hash 格式/fallback 引用;语义 key 解析经 import.meta.env.BASE_URL 拼 URL,兼容相对 publicPath 与 qiankun 注入);② 六枚图标由原内联几何原样迁移为 public/cockpit/assets/icons/*.svg(零视觉增量,不虚构设计),manifest 登记为 temporary 并附真实 sha256;③ CockpitIcon 改 CSS mask 渲染(颜色仍由 currentColor 控制,与原视觉一致),引用点 name/size 接缝不变。AGENTS.md:未经明确要求不运行 build/dev/test);维护者走查与签收未做。/cockpit 走查并签收(当前视觉即设计稿未覆盖的占位几何,走查结论应记为「无设计稿依据、维持现状」);② 维护者明确要求后运行结构断言面/回归;③ 若维护者希望品牌位出现 logo 或 chip 出现图标,属新增设计需求,需设计方确认后另立决策票,不在本票内实现。AGENTS.md,实施时未经用户明确要求不运行 build/dev。