# 字体授权与缺失资源降级 Type: grilling Status: resolved Labels: wayfinder:grilling Blocked by: 01, 02 ## Question 正式字体、图标、状态资源或装饰资源缺失、不可授权、加载失败、尺寸不合格或与部署环境不兼容时,系统如何处理?裁定 Web 字体的授权证据、可接受的回退字体、逐项资源的降级层级、用户可见提示、日志/诊断信息,以及何种缺口阻止发布、何种缺口允许带回退交付。 降级必须可见且不把临时资源误报为正式设计资产;不能因为单个资源失败而静默破坏整个驾驶舱。 ## 进度 - 已认领(`Status: claimed`);阻塞票 01/02 均 closed。票 03(token 槽位)、票 04/09(manifest 降级链)、票 05(位置符号)均已完成。 - deck 工具已按插件要求上报本票(带 `effortId=lanhu-cockpit-asset-replacement`)。 - 事实侧已自查(不向维护者提问可自得的事实): - `tokens.css` 现有 `--font`(`Microsoft YaHei UI`/`Microsoft YaHei`/`PingFang SC`/`Noto Sans SC`)与 `--num`(`Bahnschrift SemiBold`/`Bahnschrift`/`DIN Alternate`/`Segoe UI Semibold`)**都是系统字体栈,非 Web 字体**。 - 票 04/09 已锁 manifest 降级链(显式 fallback → 有限链 → 内置通用资源)、核心资源整包回滚、分环境诊断;票 05 已锁位置符号降级。**本票不重开这些机制**。 - 维护者指定字体目录 `E:\_Design\字体`,实测结论见下节。 ## 字体目录实测事实(本票自查,非推断) 对 `E:\_Design\字体` 做了完整取证(递归列举 + 字体内嵌元数据提取): - 目录结构:68 个 zip(合计 707.7 MB)+ `中文/`(65 个文件,515.8 MB)+ `英文/`(15 个文件,1.3 MB)。 - **授权文件:零命中**。递归搜索 `license|licence|readme|授权|许可|声明|OFL|copyright|商用` 无任何命中;`字体.zip` 的 82 个条目同样零命中。 - **确证开源(内嵌版权/许可文本可查)**: - `SourceHanSansSC-*` 与 `SourceHanSansCN-VF`:`2014-2021 Adobe, with Reserved Font Name 'Source'` → 思源黑体(OFL)。 - `SourceHanSerifCN-*`:`Copyright 2017 Adobe Systems Incorporated … Reserved Font Name 'Source'` → 思源宋体(OFL)。 - `CrimsonText-*`:`Copyright (c) 2010, Sebastian Kosch … with Reserved Font Name` → SIL OFL 开源西文。 - **明确保留所有权利(与「整目录免费可商用」矛盾)**:`Modernia-Regular`(`Copyright © 2019 … All rights reserved`)、`Furore`(`Copyright (c) 2009 … All rights reserved`)。 - **无许可文本(名字暗示免费但未确证)**:`SmileySans`(得意黑)、`PangMenZhengDao…MianFeiBan`、`【MianFei】CangJi…`、`ZQKfreefont`、`Versa`、`SendaDisplay-BECO` 等。 - **公认商用收费字库(高风险)**:`douyuFont`(斗鱼)、`PingFangLaiJiangHuFeiYangTi`、`JiYingHuiPianHuiSong`、`TaiWanQuanZiKuZhengKaiTi`、`UnBatang`、`GenShinGothic`、`AozoraMincho`、`SoukouMincho`、`DelagothicOne`、`HuXiaoBoNanShenTi`、`HongLeiXingShuJianTi`、`Mengshen-Handwritten` 等。 - 体积参考(二进制字节实测):思源黑体单字重约 15–16 MB(`SourceHanSansSC-Regular` **15.7 MB**、`SourceHanSansSC-Bold` **16.2 MB**);思源宋体 `SourceHanSerifCN-Regular` **10.7 MB**;西文 `CrimsonText-Regular` 仅 **0.1 MB**。中文全量内置的体积代价远高于西文。 **结论**:该目录是字体文件集合,**不是已核验的合规库**;「整目录免费可商用」的说法与实测不符(`Modernia`/`Furore` 明确保留所有权利)。 ## 第一轮裁定(已确认) - **Q1=B**:无书面授权证据**不得内置**字体文件;运行时回退到已批准的系统字体栈,并在缺口清单记为「设计字体未接入」,缺口可见但不阻断整批交付。 - **Q2=B**:授权证据需**书面/电子文件**(许可协议、采购凭证或权利人声明),明确覆盖 **Web 嵌入与商用范围**,注明字体名称与版本。补充裁定:**系统自带字体不属于可再分发字体**,只能作回退栈,不得打包进产物。 - **Q3=B**:数字字体与正文同规;若不可授权,回退必须选**度量兼容**(字宽/字高接近)的备选,避免大屏 KPI 数字换字后跳格。 - **Q4=B**:**仅三类缺口阻断发布**——① 核心资源组(品牌标识、点位/设备状态形状语义、状态色)不可用;② 视觉会**误导业务语义**(如状态色缺失致报警与正常无法区分);③ 法规/授权风险(无授权字体、无授权品牌素材)。其余缺口允许带回退交付并列入缺口清单。 - **Q5=B**:三层可见——① 运行时诊断(开发/测试可见语义 key 与失败类别);② 交付缺口清单(语义 key、缺口类型、回退结果、责任人);③ 生产界面只显示**用户可理解提示**,不暴露内部路径。 - **Q6=B**:临时资源**必须带临时标记**;验收**不得**以临时资源作为正式视觉通过;缺口清单必须列出仍未替换的临时项。 ## 第二轮裁定(已确认) - **Q7(维护者原话:尽量以现有情况为基准)+ Q11=A + Q15=A**:统一原则——**优先沿用现有渲染尺寸与既有实现**,只有素材在现有尺寸下确实不可辨时才做**最小调整**并记录偏差;该原则**同时适用于字体**,Web 字体属「可选优化」而非「必需修复」。这消除了票 05 遗留的「内层图标 10.8px 是否需调整」的处置口径。 - **Q8=A**:本票**只新增**字体授权裁定与缺口分级,**不重复定义**降级链、回滚或诊断字段(避免与票 04/09/05 形成两套说法)。 - **Q9=A**:字体目录采用**白名单制**;未入白名单者按 Q1 走回退,待逐项核验后再进白名单。 - **Q10=C**:**不引入任何商用字体**,只用开源白名单与系统字体栈。因此不存在「向设计公司索取商用字体授权凭证」的工作项。 - **Q12=A**:**严格白名单**——只放行本目录内**确证带开源许可文本**的字族:思源黑体 `SourceHanSans*`、思源宋体 `SourceHanSerif*`、`CrimsonText*`。其余(含名字暗示免费的得意黑 `SmileySans`、`ZQKfreefont`、`PangMenZhengDao…MianFeiBan`、`【MianFei】CangJi…`)**一律按无证据处理**;若要纳入,须先把上游 OFL 许可证文本归档进交付包,方可从「名字暗示」升级为「确证」。 - **Q13=A**:`--font` / `--num` 的**语义槽位不动**(票 03 已锁),本票只给出**可接入字族白名单**;是否启用由实现按观感决定。明确不强制用思源黑体替换现有系统栈(体积风险)。 - **Q14=B**:大体积中文字体必须**子集化**(仅收驾驶舱实际用字)或**限定字重数量**(如 Regular + Bold 两档),并在缺口清单记录被裁字符集风险。**子集字体必须保留系统字体回退链**——因为动态数据(设备名、点位名、事件文本)可能含子集外汉字,单独使用会出现豆腐块。 ## Answer **本票不重开既有降级机制,只锁定「字体授权」与「缺口分级」两件事;字体采用严格开源白名单 + 系统回退栈,任何未确证授权的字体一律不内置。** ### 字体授权 1. **授权门槛**:字体内置需书面/电子授权证据,明确覆盖 Web 嵌入与商用范围并注明名称与版本;**系统自带字体只能作回退栈、不得打包**。 2. **严格白名单(本目录内确证)**:思源黑体 `SourceHanSans*`、思源宋体 `SourceHanSerif*`、`CrimsonText*`。未入白名单者按无证据处理,走系统回退。 3. **不引入商用字体**;因此不存在商用字体授权索取工作项。 4. **槽位归属不变**:`--font` / `--num` 的语义槽位仍归票 03,本票只给可接入字族集合,不强制替换现有系统栈。 5. **交付约束**:中文字体必须子集化或限定字重档数,且**必须保留系统回退链**(动态数据可能含子集外汉字)。 6. **数字字体**:若不可授权,回退须**度量兼容**,避免大屏 KPI 数字跳格。 ### 缺口分级(阻断 / 允许带回退) - **阻断发布(三类)**:核心资源组不可用;视觉会误导业务语义;法规/授权风险。 - **允许带回退交付**:其余缺口,条件是①记录进缺口清单(语义 key、缺口类型、回退结果、责任人);②验收不得把临时资源当正式视觉通过;③临时资源必须带临时标记。 - **可见性三层**:运行时诊断(开发/测试)→ 交付缺口清单 → 生产仅显示用户可理解提示,不暴露内部路径。 ### 与既有裁定的关系 - **不重开**:降级链与 fallback 顺序归票 04/09;位置符号降级归票 05;token 槽位语义归票 03。 - **统一原则**:尺寸与字体一律「优先现状,仅在不可辨时最小调整并记录偏差」(Q7/Q11/Q15)。 ### 风险与边界 - **目录非合规库**:`E:\_Design\字体` 零授权文件且含明确保留所有权利的字库(`Modernia`/`Furore`)与多款公认商用收费字库;因此**不得以目录为单位放行**。 - **子集化风险**:子集外汉字会落到回退字体,可能出现同屏字形混排;实现需在走查中确认动态文本仍可读。 - **本票不声称**已接入任何 Web 字体、已子集化或已替换现有系统栈;这些属实现工作。 - 按 `AGENTS.md`,本轮未运行 build/dev/浏览器调试。 ## 真实状态与下一步 - 状态:**已完成并关闭**(`Status: resolved`)。Q1–Q15 全部有裁定,无遗留未决项。 - 交付物: 1. 本票 `Answer`(上述结论); 2. 规格子票[字体授权与缺失资源降级规格](11-font-and-fallback-spec.md)(`ready-for-agent`,已挂入同一张地图); 3. 交叉引用修正:既有[运行时资产 manifest 与版本策略规格](09-runtime-asset-manifest-spec.md)使用了「核心资源组」与 `核心标记` 字段但未定义成员,已加指针指向本票规格补全的定义(只加指针,不改其原口径)。 - **对抗式审查记录(2026-10-08)**:规格发布后对本次产出做了对抗式复核。 1. **抓到并修正 1 处事实错误**:曾把思源黑体体积写作 16.4 MB / 17.0 MB,二进制字节复核实为 **15.7 MB / 16.2 MB**(原数字取自目录列表中混入的其他条目)。已更正并复检无残留。 2. **抓到并补全 1 处真实缺口**:既有资产清单规格使用「核心资源组」概念却未定义成员,本票规格补全了成员定义并建立双向交叉引用,避免读过其中一个规格的人找不到定义。 3. **核实通过**:零授权文件断言(递归命中 0);`Modernia` / `Furore` 的 `All rights reserved` 原样命中;白名单文件均真实存在;能力边界表述未越界(3 处均明确「不声称判定授权合法性」);与票 03 槽位归属不冲突;未重复定义票 09 的降级链与回滚。 - 下一步:推进[设计稿差异与现有业务结构保护](07-design-diff-and-structure-boundary.md)(其阻塞票 02–06 均已关闭);实现工作由规格子票承接。 ## 缺口清单 执行批次归视觉的偏差与未替换临时项登记于此(唯一来源;语义 key、缺口类型、回退结果、责任人四列齐全)。 | 语义 key | 缺口类型 | 回退结果 | 责任人 | | --- | --- | --- | --- | | `icon.brand` | **设计稿未覆盖**:蓝湖稿品牌位是渐变文字(337×27/29),无 logo 图形 | 维持现状:内联几何迁移的临时 SVG(manifest `status: temporary`)+ 标记「无设计稿依据」 | 维护者/设计方(是否新增 logo 需设计确认) | | `icon.layers` | **设计稿未覆盖**:图层 chip 在稿中为纯文字(49×18),无图标 | 同上 | 维护者/设计方 | | `icon.points` | **设计稿未覆盖**:同上(chip 纯文字) | 同上 | 维护者/设计方 | | `icon.event` | **设计稿未覆盖**:同上(chip 纯文字) | 同上 | 维护者/设计方 | | `icon.resource` | **设计稿未覆盖**:同上(chip 纯文字) | 同上 | 维护者/设计方 | | `icon.blank` | **设计稿未覆盖**:空面板占位图示在稿中无对应物 | 同上 | 维护者/设计方 | (2026-10 批次 1 执行时登记,见[执行-批次1:品牌/图标替换](14-exec-batch1-brand-icons.md)。) **2026-10 更新(依据[票 19 盘点报告](research/19-lanhu-artboard-inventory.md))**:上表六条原记为「正式素材未交付(蓝湖盘点未完成)」。盘点完成后事实修正为**「设计稿未覆盖」**——蓝湖 9 个画板中,品牌位无 logo 图形、四个功能图标在稿中为纯文字 chip,故不存在"待交付的正式切图"。按规格 12 判断表,这类差异属「设计稿未覆盖的现有 UI」→ **维持现状并标记无设计稿依据**,不属素材替换;若维护者要求新增 logo/图标,属**新增设计需求**,须由设计方确认后另立决策票,不在批次 1 内实现。