Add bundled bus fonts and shared font favorites

This commit is contained in:
2026-10-12 15:00:40 +08:00
parent c9dd03c23b
commit 4be74a34f9
181 changed files with 2078575 additions and 76 deletions
@@ -1,5 +1,23 @@
# 核桃派点阵屏控制服务测试流程
## 公交窄体定向验收(DISPLAY-BUS-FONT / WEB-BUS-FONT / TEST-BUS-FONT)
双字号更新:在下列选测基础上增加 `tests/test_bus_font_cache.py` 和动图 store 回归。两款均逐字验证推荐字号二值alpha、与独立字模一致、字宽及最后一列留空;16px测32/48/64px,32px测64px。分类样张每类至少8字,包含实际站名/词语。32px代表字与旧16px直接放大结果必须不同且能保留更多部件细节。旧16px只保留ID兼容,不保留旧选项;已知旧摘要引用仍可用,校验一致的淘汰文件删除,摘要不一致保留并报错,其他字体不删。
板端候选回归会为不同临时数据目录安装字体副本;完整字库会累计占用较多空间。先用 `df -h /run /var/tmp` 检查容量,候选程序可放受保护运行目录,但 pytest basetemp、mock数据和构建产物放任务专属的 `/var/tmp` 目录。不能把 tmpfs 写满后的失败解释为字体逻辑故障;清理本次已结束的测试目录、重测通过后才切换生产。
接口使用十六进制颜色字符串,直接调用TextOptions时颜色传RGB三元组;逐像素比较须使用同一位置、尺寸及RGBA通道。受保护候选目录不为了SFTP下载而放宽访问权限;私有基线经既有sudo通道读取并保留在精确忽略的本机材料中,归档仅记录分类结果。
缩略图验证:构造引用内置字体的静态模板和动图,再改变字体版本,确认PNG重建、font_v URL改变,但记录JSON、scene digest、revision和用户时间戳不变;第二次启动不重复生成。默认/其他字体的缓存不重建。辅助 `.font-version` 是可再生缓存,和其登记PNG按同一生命周期清理,不能把它写入模板或动图schema。Unifont BDF 的BITMAP行可能带尾空格,解析先去空白并检查目标字非空,不能只检查cmap就接受空字库。
影响范围:字体资源发现、文字层预览、场景合成和模板。运行 `tests/test_bus_font.py`、`tests/test_fonts.py`、`tests/test_scene_layers.py`、`tests/test_templates.py`、`tests/test_api.py`;字体选择器已有 Node 用例复验。未改默认字体、驱动、扫描、ADC、网络和 Android,相关扩展回归不适用。板端先在隔离候选目录用 mock 验证同一套件,再部署。
合格标准:6763 个 GB2312 汉字及登记 ASCII/标点覆盖完整;所有 16px 字形逐像素与字模一致,alpha 只含 0/255,无非空字符空白、越格或最后一列亮点;32/48/64px 与最近邻整数倍图像一致。易混淆 `0O1Il5S8B` 必须逐一不同。全部码位图册分页检查,密集字及重复字形复核;空格/全角空格相同属于预期。实际网页能搜索内置名称、修改字号并生成同一最终像素;模板/场景沿用原接口,不把 CSS 字体截图作为设备渲染证据。
经验:点阵轮廓不能仅用逐行矩形拼接,FreeType 会产生半透明接缝;先抵消共享边再追踪外轮廓。hmtx bearing 必须与 xMin 一致。字体构建环境锁定在专用项目环境,复制工作区后从锁文件及本地 wheel 重建。板端隔离候选必须包含 VERSION、FEATURE_UPDATED_AT、静态资源、systemd 文件及相关脚本;缺少这些属于候选准备失败,不是字体失败。`/run/matrix-screen-controller` 父目录通常仅 root 可访问,SFTP 不因子目录 chown 就能穿过父目录;载荷可经具名 `/var/tmp/` 上传,再由 sudo 转入任务运行子目录并删除上传文件,禁止为此放宽生产目录权限。
部署前后逐项核对已有持久文件摘要,只允许新增登记字体摘要文件;真实服务 stop/start 后运行目录和任务证据必须存活,服务恢复就绪后核验字体目录、预览、字体摘要和状态。按本轮用户指示,视觉依据为网页最终帧,不启动相机、不主动切换实屏图案;不将此记录为物理实屏观察通过。单次结果和残留边界留在测试归档。
## 手机会话取消 WiFi 开机提示(TEST-WIFI-MOBILE-DISMISS)
对应 `DISPLAY-WIFI-INDICATOR`、`CONFIG-WIFI` 和 `DEVICE-MOBILE-SESSION`。直接影响设备会话入口、WiFi 覆盖取消与后台刷新;协议、App 和原生驱动不变。以本机 mock 覆盖延迟到期前连接、联网 IP/断网提示活动时连接、失败握手与无效参数、断开及网络变化、迟到查询并发、同 boot 重建和新 boot 重新计时;验证恢复用户帧,亮度、方向、模式和修订不变。
@@ -368,3 +386,11 @@ HTML验证经验:服务启动时读取首页模板;修改HTML后重启隔离
TEST-MOBILE-ANIMATION对应DEVICE-MOBILE-ANIMATION:使用test_mobile_control.py验证帧信息分页、16/64尺寸、4 KiB上限、摘要和修订/参数拒绝;读取前后逻辑帧修订一致。原子更新完成后验证部署摘要、服务健康及持久数据不变;Android按影响选测,动图传输不新增实屏视觉验收。
部署数据检查:必须在更新前将逐项文件摘要保存到受保护材料,区分用户源/配置与已登记可再生缓存;不能只保留进程内字典和总差异数。更新后逐项核验,报告仅输出脱敏分类与统计。原始受保护基线不进入普通日志或Git。缺少基线时明确标记追溯验证不足,不能用启动成功替代源文件不变证据。
### TEST-FONT-FAVORITES:设备共享字体收藏
对应 WEB-FONT-FAVORITES / CONFIG-FONT-FAVORITES。定向运行 test_font_favorites.py、test_fonts.py、test_api.py 和 test_font_picker.mjs,完成静态JS与文案目录检查。浏览器验收收藏区位于自动字体上方、空状态、收藏/原分组双处显示、按样式独立、搜索双处筛选、取消确认及Escape、星星不改变当前字体/场景、重复条目唯一DOM标识与键盘导航、失败保持原状态,桌面和320/390px触摸布局均不溢出。打开选择器刷新设备共享状态。
fonts/favorites.json 是持久用户偏好,独立严格schema v1,随部署/回滚保护;损坏和未来schema保留原文并拒绝启动。验证加锁合并、幂等写入、持久化、失效ID保留与取消以及写入失败保护。板端先隔离候选mock回归,保存逐项持久摘要及回滚材料后切换。用独立测试字体验证收藏、另一浏览器读取和服务重启保留,finally恢复原收藏并精确删除本次测试字体。普通网页收藏不改变显示实现,实屏视觉验收不适用;Android仅登记新增可选REST接口,不发布App。
收藏控件布局经验:下拉列表若只沿用输入框宽度,窄屏加入星星后名称会几乎没有空间。以输入框左边缘和当前视口右侧16px安全边距计算可用宽度,最大440px,桌面/320/390px均检查星星、名称和样式可见,列表不横向溢出。星星作为字体选项的同级按钮,阻止点击冒泡;失焦关闭逻辑必须保留列表内按钮与确认弹窗的焦点,不能沿用输入框一失焦就关闭的行为。