Files
jiapuapp/docs/视觉资产与构建基线.md
T
2026-07-22 17:31:38 +08:00

98 lines
7.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 视觉资产与构建基线
> 状态:当前有效
> 更新日期:2026-07-22
> 适用范围:正式运行时图片、可重建视觉资产、构建清单、质量报告与 MuMu 视觉验收
## 一、所有权边界
视觉资产分为两类,不能用同一套字段混写:
1. 已提交二进制:由业务域运行时清单锁定路径、像素尺寸、透明度、字节数与 SHA-256;它们的 `provenance` 必须为 `committed-binary`,且 `rebuildable` 必须为 `false`
2. 可重建资产:由 schema v3 生成清单锁定母版、处理参数、物理输出尺寸和质量阈值;运行时清单只导入它,不复制物理规格。
schema v3 注册入口是 `design-pipeline/manifests/runtime-assets.json`。任何新增的 `runtime-asset-inventory``asset-build-manifest` 都必须进入该注册表的导入闭包;未注册 owner、重复资产 `id` 与重复正式输出都会被拒绝。当前 `static/assets` 中的每个文件都必须恰好属于一个正式 owner,并至少存在一个真实运行时消费者。
认证直接资产由 `design-pipeline/manifests/auth-runtime-assets.json` 管理,其余无法重建但仍被产品消费的直接二进制由 `design-pipeline/manifests/application-runtime-assets.json` 管理。四张共享卷轴、六张长页面背景和 G01 空态边框的生成事实依次只属于 `design-pipeline/manifests/shared-scroll-skins-v3.json``design-pipeline/manifests/page-backgrounds-v3.json``design-pipeline/manifests/g01-state-frame-v3.json`
页面、组件、样式、数据映射和工具代码本身是消费者关系的唯一事实源。生成清单不得保存槽位、Vue 组件、选择器、`uni-app mode`、消费者列表或其他运行时渲染语义;这些规则只能由实际消费者源码及对应合同拥有。
## 二、schema v3 生成清单
生成清单只允许以下职责:
- `source`:仓库内可追溯母版;
- `processing`:实际由构建器消费的色键、端帽、调色板等处理参数;
- `output``outputPixels`:正式输出路径和像素尺寸;
- `alpha``edge``quality`:由质量分析器真实执行的透明边、边缘污染、体积和色彩空间约束。
清单、资产及其嵌套对象均拒绝未知字段。不能用近似字段名重新塞入旧合同,也不能声明构建器或质量分析器没有执行的规则。
## 三、Python 与依赖
Python 依赖由 `design-pipeline/requirements.txt` 锁定,当前 Pillow 版本为 `12.3.0`。唯一解释器解析逻辑位于 `design-pipeline/scripts/python-runtime.mjs`,顺序为:
1. 显式 `PYTHON`
2. `design-pipeline/.venv`
3. Windows Python Manager 的真实入口;
4. 可实际执行的系统命令。
所有 Python 构建和测试都通过统一执行器加入 `-B`,禁止在源码目录生成 `__pycache__``.pyc`。不透明缩放、居中 cover 裁切与暖金边框提取统一由 `design-pipeline/scripts/build_raster_assets.py` 实现,Node 入口只负责严格清单校验、解释器编排和质量审计,不再保留 G01、模块背景或 Sharp 专用分支。
## 四、当前验证命令
`design-pipeline/` 目录运行:
```powershell
npm.cmd test
npm.cmd run validate:shared-scroll-skins
npm.cmd run validate:page-backgrounds
npm.cmd run validate:g01-state-frame
npm.cmd run validate:runtime-assets
npm.cmd run build:shared-scroll-skins
npm.cmd run build:page-backgrounds
npm.cmd run build:g01-state-frame
npm.cmd run verify:shared-scroll-skins
```
其中 `npm.cmd test` 同时执行 Node 和 Python 测试。质量报告只允许保存工作区相对路径;同一母版与相同参数连续构建必须产生相同字节哈希和相同报告。
在项目根目录运行:
```powershell
powershell -ExecutionPolicy Bypass -File tests/runtime-assets-contract.ps1
powershell -ExecutionPolicy Bypass -File tests/retired-asset-removal-contract.ps1
powershell -ExecutionPolicy Bypass -File tests/a01-retired-pipeline-removal-contract.ps1
powershell -ExecutionPolicy Bypass -File tests/a01-no-photoshop-pipeline-contract.ps1
powershell -ExecutionPolicy Bypass -File tests/mumu-visual-acceptance-boundary-contract.ps1
powershell -ExecutionPolicy Bypass -File tests/project-responsive-layout-contract.ps1
powershell -ExecutionPolicy Bypass -File tests/compile-audit.ps1
```
## 五、视觉验收
- 当前只维护用户确认的浅色国风主题;深色与跟随系统延期到后续独立版本,不能在页面内散落未生效的主题入口或覆盖样式。
- 内部响应式基线为 `320×568``360×640``360×800``412×915`G01 连续长背景另做 `412×1000` 压力检查。这些内部尺寸不能替代最终 MuMu 证据。
- 浏览器截图只可用于逻辑调试,不能作为视觉通过证据。
- 仓库不再维护自动浏览器截图助手、联系表或截图自证合同;浏览器运行时测试只保留 CDP、DOM、状态、溢出和内容可达性断言,不写入截图。确需临时截图调试时应使用仓库外命令,不能提交为长期证据。
- 最终视觉复核只能使用用户当前在线的 MuMu 安卓模拟器,不得由代理启动、关闭或调整模拟器。
- 生成成功和像素质量通过不等于页面视觉通过;相关页面仍需在 MuMu 检查默认、错误、取消、完成和重复进入等实际状态。
- 不通过压缩字号、行高、控件尺寸或单设备补丁掩盖布局问题。
- 普通页面、卡片、表单和说明由内容自然撑高;只有弹窗和明确独立滚动区域可以使用视口 `max-height` 与内部滚动。
- 九宫格和 `border-image-slice` 的唯一所有者是 `styles/adaptive-frame-profiles.scss`;Vue 页面和组件只能消费其公开混入,不能直接重复声明。
- 响应式扫描范围只属于 `tests/responsive-layout-coverage.json`,固定尺寸例外只属于 `tests/responsive-layout-allowlist.json`
- 安全区、软键盘、约 `1.3` 倍系统字号、长文本和 Android 返回手势必须在对应页面验证;主要触控目标不小于约 `44dp`
- G 系列共享连续家谱背景,T、F、R、N、M 使用各自模块背景;具体消费者、渲染方式和当前视觉数值只由源码及机器合同拥有,本文件不复制尺寸、哈希、透明度或选择器。
- G 系列背景映射只由 `components/GenealogyPageBackground.vue` 消费,当前正式运行图是 `static/assets/modules/genealogy/opaque/genealogy-page-background-long.png`T、F、R、N、M 的映射只由 `components/ModulePageBackground.vue` 消费。等比、裁切、贴底和透明度等渲染数值继续由这两个组件拥有。
- 复杂水墨、品牌装饰和完整视觉面使用正式位图;文字、布局、状态与交互由代码承担。整页截图不得成为运行时资产,可变高度装饰不得绕过共享九宫格所有者。
- 用户可见示例姓名统一使用“某某某”等通用表达;fixture 和 mock 数据可以保留真实感测试样本,但不能把样本姓名写成产品提示。
## 六、参考图与正式资产边界
以下两张图片是用户已批准的 A01 选型证据,只用于后续人工视觉复核,标记为 `reference-only / non-runtime`,不进入运行时注册表,也不能因零代码引用被删除:
- `docs/design/assets/a01-vnext/A01-shared-scroll-skins-with-dialog-approved.png`
- `docs/design/assets/a01-vnext/A01-shared-skin-family-option-2-selected.png`
G01 的 A/B/C 方向候选、无确定变换的 add-sheet/close 色键源、重复的旗舰 ImageGen 源、旧 `static/icons` 和未接入业务的 TAC 文件已经退役。正式 add-sheet 与 close 位图作为 `committed-binary``application-runtime-assets.json` 锁定;六张长背景及 G01 空态边框则保留可执行母版和 schema v3 构建链。不得重新引入候选入口、虚构可重建关系或在文档复制正式输出哈希。