04-runtime-asset-manifest-and-versioning.md 4.9 KB

运行时资产 manifest 与版本策略规格

来源票:运行时资产 manifest 与版本策略

目标

让正式蓝湖资源在驾驶舱运行时中具备稳定语义入口、可追溯来源、可重复部署、可安全缓存、可诊断失败并可回滚。组件、地图服务和设备资产选择层不得散落蓝湖导出文件路径。

资产边界

  • 原始蓝湖设计包独立归档,用于设计追溯和重新导出。
  • 仓库运行时只保存已确认进入发布的资源、manifest 和来源/校验元数据。
  • 运行时资源统一进入驾驶舱自有 public/cockpit 资源边界。
  • 默认生产不加载蓝湖、设计公司对象存储或任意外部 CDN 资源;远程 URL 只能通过登记和审批成为例外。
  • 不改变现有 mode、panelId、地图图层、状态语义、拾取、定位、聚合和面板联动。

Manifest 权威模型

Manifest 是运行时资源的唯一权威入口。组件、地图服务和设备资产选择层只依赖语义 key 或其封装入口,不直接依赖物理文件路径。

每个条目至少包含:

  • 稳定的语义 key;
  • 运行时相对路径或登记过的远程 URL;
  • 原始蓝湖来源画板和设计交付标识;
  • 文件格式、像素尺寸、透明背景/密度等运行时属性;
  • 所属发布版本和内容 hash;
  • 状态:正式、临时、推导或降级;
  • 适用业务对象、模式和状态;
  • 显式 fallback key;
  • 是否核心资源;
  • 远程例外所需的域名和安全策略信息。

语义 key 稳定,物理文件名允许带内容 hash。组件不因设计公司重新导出或文件改名而改变业务引用。

目录与路径

  • 资源发布到 public/cockpit 或其构建产物对应目录。
  • 资源 URL 必须基于 import.meta.env.BASE_URL 或等效宿主注入基址解析。
  • 禁止硬编码 /cockpit/...,必须兼容当前相对 publicPath 与 qiankun 注入路径。
  • 环境可以覆盖资源根路径和受控发布版本,但不能覆盖语义 key、状态语义或 fallback 关系。

版本与缓存

  • 每次发布有人工可读的发布版本。
  • 每个资源条目同时记录内容 hash。
  • 生产物理文件名使用内容 hash,支持长期不可变缓存和旧版本共存。
  • Manifest 使用短缓存或协商缓存,以便快速发现新发布;hash 资源使用长期不可变缓存。
  • Manifest 与资源必须作为同一个发布包原子更新,不允许先更新 manifest 再补资源。

发布校验与回滚

构建期和运行时均校验:

  1. manifest schema;
  2. 发布版本字段;
  3. 条目完整性;
  4. 语义 key 唯一性;
  5. 路径安全性;
  6. hash 格式;
  7. fallback key 引用存在性;
  8. 远程 URL 是否属于允许域名。

以下情况触发整包回滚到上一版或内置基线:

  • manifest schema 或完整性校验失败;
  • 核心资源组不可用;
  • 发布版本不兼容;
  • 资源与 manifest 的原子发布校验失败。

普通非核心资源失败不触发整包回滚,按条目 fallback 运行。

Fallback 规则

  1. 优先使用 manifest 条目指定的显式 fallback key。
  2. fallback 自身失败时,继续有限回退链,最终使用内置通用资源。
  3. 每一级失败都记录语义 key、失败类别和最终回退状态。
  4. 不允许用错误业务语义的资源互相替代:品牌、点位状态、设备状态和事件等级必须各自保持语义边界。
  5. 不能访问蓝湖原始 URL 作为隐式重试或生产回退。

远程资源例外

允许远程资源前,必须登记:

  • 来源系统和责任方;
  • 明确允许的域名;
  • CORS/安全策略;
  • 缓存策略;
  • 请求超时;
  • 失败 fallback key;
  • 版本和可追溯标识。

未经 manifest 登记的远程 URL 一律拒绝加载。

诊断状态

提供统一的运行时资产诊断状态,供宿主 data-* 读数和调试面板消费。至少区分:manifest 不可用、条目缺失、路径不安全、hash/版本不匹配、远程域名未登记、资源加载失败、fallback 生效、最终通用资源生效。

  • 开发/测试:可显示完整路径、hash、版本和内部错误。
  • 生产:只暴露语义 key、失败类别、回退状态和用户可理解提示,不暴露内部路径或敏感配置。

验收证据

  • manifest schema、语义 key 唯一性、fallback 引用、路径安全和远程域名校验均有自动化测试。
  • 资源与 manifest 不一致时可以拒绝该发布包并回滚。
  • hash 文件名在更新后不复用旧内容,manifest 短缓存能够发现新版本。
  • 单个非核心资源失败不会阻塞驾驶舱,其 fallback 可被宿主读数观察。
  • 核心资源组失败会回滚到上一版或内置基线。
  • /cockpit 与 qiankun 宿主下均能解析资源路径。
  • 生产诊断不泄露内部路径,但能显示语义 key、失败类别和回退结果。