11: 字体授权与缺失资源降级规格
Type: spec
Status: ready-for-agent
Label: ready-for-agent
Blocked by: 06
Category: spec
本规格固化字体授权与缺失资源降级的讨论结论,作为同一张蓝湖正式素材替换地图的子规格单。100% 仅表示规格交付,不表示任何字体已接入、已子集化或缺口清单已建立。
Problem Statement
驾驶舱要使用设计交付的正式字体与素材,但字体是法律风险最高的一类资产:合法性与「能不能下载」无关,「免费」也不等于允许 Web 嵌入与商用。而当前状态是:字体候选目录里没有任何授权文件,却混有明确保留所有权利的字库与公认商用收费字库,因此无法以目录为单位放行。
同时,素材缺口需要一个可判定的处置口径。若任何缺口都阻断发布,交付会长期卡住;若任何缺口都不阻断,则会出现「缺失被画成正常」——这正是本仓反复强调不能发生的事。目前缺少的是:什么算合格的授权证据、哪些缺口必须阻断、缺口写在哪里、以及临时资源如何不被误报为正式设计资产。
Solution
对字体实行严格开源白名单 + 系统回退栈:
- 内置字体必须有书面/电子授权证据,明确覆盖 Web 嵌入与商用范围并注明名称与版本。
- 只放行经证据确证的开源字族;名字暗示免费但无证据者一律按无证据处理。
- 不引入任何商用字体,因此不存在商用字体授权索取工作项。
- 系统自带字体只能作为回退栈,不得打包进产物。
- 字体语义槽位仍由既有视觉 token 规格决定,本规格只给出可接入字族集合,不强制替换现有系统字体栈。
- 中文字体必须子集化或限定字重档数,并必须保留系统字体回退链。
对素材缺口实行三级判定:
- 三类缺口阻断发布:核心资源组不可用、视觉会误导业务语义、存在法规/授权风险。
- 其余缺口允许带回退交付,条件是写进缺口清单、临时资源带临时标记、验收不得把临时资源当正式视觉通过。
- 缺口可见性分三层:运行时诊断、交付缺口清单、生产仅显示用户可理解提示。
尺寸与字体统一遵循「优先现状」原则:优先沿用现有实现与渲染尺寸,仅在确实不可辨时做最小调整并记录偏差。
User Stories
- 作为项目负责人,我想让内置字体都有可查的授权证据,以便交付物不带来法律风险。
- 作为项目负责人,我想知道哪些字体被允许接入,以便不依赖个别成员的口头判断。
- 作为项目负责人,我想确认不引入商用字体,以便不必为字体另行采购或索取授权。
- 作为开发人员,我想让无授权证据的字体直接走系统回退,以便实现路径唯一、不需逐案请示。
- 作为开发人员,我想让系统自带字体只作回退、不被打包,以便不误触再分发限制。
- 作为开发人员,我想让字体语义槽位保持既有定义,以便资产替换不牵动视觉结构。
- 作为开发人员,我想让中文字体子集化或限定字重,以便首屏不被十几兆字体拖慢。
- 作为值班人员,我想在字体未接入时仍看到正常可读的中文界面,以便字体缺口不影响值守。
- 作为值班人员,我想动态数据里的生僻汉字仍能显示,以便设备名与点位名不出现豆腐块。
- 作为值班人员,我想让大屏数字换字体后不跳格,以便 KPI 卡片布局稳定。
- 作为值班人员,我想在生产界面只看到可理解的状态提示,以便不被内部路径和错误码干扰。
- 作为开发人员,我想在开发环境看到完整的字体与素材缺口诊断,以便快速定位问题。
- 作为验收人员,我想让缺口清单列出语义键、缺口类型、回退结果与责任人,以便逐项追踪关闭。
- 作为验收人员,我想让临时资源带明确临时标记,以便不会被当作正式设计资产通过验收。
- 作为验收人员,我想让「未替换临时项」在清单里可见,以便知道还有多少设计资产没落地。
- 作为项目负责人,我想明确只有三类缺口会阻断发布,以便交付不被单个非核心资源卡死。
- 作为值班人员,我想在状态色或状态形状缺失时无法通过验收,以便报警与正常不会被混淆。
- 作为项目负责人,我想让品牌标识与状态语义类资源被列为核心,以便关键视觉不被降级掩盖。
- 作为项目负责人,我想让无法授权或来源不明的素材直接阻断,以便不把法律风险带进交付。
- 作为开发人员,我想让非核心资源失败时按既有 fallback 链回退,以便单个素材问题不阻塞整批替换。
- 作为值班人员,我想在非核心装饰资源缺失时仍能正常使用驾驶舱,以便可视化降级但不影响业务查看。
- 作为开发人员,我想复用既有资产解析层的降级机制,以便不产生第二套回退逻辑。
- 作为开发人员,我想复用既有的分环境诊断口径,以便不新增一套诊断体系。
- 作为验收人员,我想让素材在现有尺寸下不可辨时才做最小调整,以便不无谓偏离设计稿。
- 作为验收人员,我想记录每处与设计稿的偏差,以便偏差可被审查而不是静默发生。
- 作为开发人员,我想让检查只验证「是否携带许可证据」,以便不假装代码能判定授权合法性。
- 作为开发人员,我想让未通过授权门禁的字体在解析阶段就不可用,以便不可能被误引入运行时。
- 作为维护者,我想让本规格与既有降级规格边界清楚,以便不出现两套说法。
- 作为维护者,我想让缺口清单成为唯一缺口事实来源,以便不靠口头同步。
- 作为验收人员,我想让缺口清单与运行时诊断结果一致,以便清单不是人工维护的猜测。
- 作为开发人员,我想让子集字体始终保留系统回退,以便动态文本不因缺字而显示异常。
- 作为值班人员,我想在不同操作系统上看到可接受的中文显示,以便部署环境差异不影响可读性。
- 作为项目负责人,我想让素材替换的尺寸处理遵循统一原则,以便字体与图形不各按各的标准。
- 作为验收人员,我想以外部可观察行为验证字体回退与缺口可见性,以便不依赖内部实现细节。
- 作为维护者,我想让「未接入设计字体」是一种可见且被接受的交付状态,以便交付不被非核心字体阻塞。
Implementation Decisions
- 不新增降级机制:复用既有统一资产解析层的 fallback 链、核心资源回滚与分环境诊断;本规格只新增授权门禁与缺口分级两类判定。
- 授权门禁:字体条目必须携带许可证据标识才能进入可解析集合;无证据的字体在解析阶段即不可用,走系统回退。证据要求为书面/电子文件,明确覆盖 Web 嵌入与商用范围,并注明字体名称与版本。
- 白名单为证据确证制:只放行经证据确证的开源字族;名称暗示免费但缺少许可文本者不进入白名单,除非其上游许可证文本被归档进交付包,从而由「名字暗示」升级为「确证」。
- 不引入商用字体:交付范围内不包含商用字体,因此不设商用授权索取流程。
- 系统字体不得打包:系统自带字体只能出现在回退栈中,不进入产物。
- 语义槽位不动:字体的语义槽位归属既有视觉 token 规格;本规格给出可接入字族集合与接入约束,不改变槽位语义,也不强制替换现有系统栈。
- 中文交付约束:中文字体必须子集化或限定字重档数,并在缺口清单记录被裁字符集风险;子集字体必须保留系统字体回退链,因为动态数据可能包含子集外汉字。
- 数字字体回退要求:不可授权时,回退备选需与设计字体度量兼容,避免大屏数字列宽跳动。
- 缺口分级:阻断发布仅限三类——核心资源组不可用、视觉会误导业务语义、法规或授权风险。其余缺口允许带回退交付,条件为记录进缺口清单、临时资源带临时标记、验收不得将临时资源作为正式视觉通过。
- 核心资源组定义(补全,非另立):至少包含品牌标识、点位与设备的状态形状语义、状态色语义;其余装饰性资源不属核心。此定义是对既有资产清单与版本策略规格中
核心标记 字段的成员补全——该规格此前使用了核心资源组这一概念但未定义成员,因而不构成第二套定义。
- 缺口可见性:运行时诊断面向开发与测试,暴露语义键与失败类别;交付缺口清单记录语义键、缺口类型、回退结果与责任人;生产环境只显示用户可理解提示,不暴露内部路径。
- 清单为唯一事实来源:缺口清单与运行时诊断结果保持一致,不靠人工另行维护。
- 统一尺寸原则:字体与图形一律优先沿用现有实现与渲染尺寸,仅在确实不可辨时做最小调整,并记录与设计稿的偏差。
- 检查的能力边界:自动化只能验证是否携带许可证据、名称与版本是否登记,不声称能判定授权合法性;授权合法性属法律事实,由证据文件与责任人负责。
Testing Decisions
- 好测试只断言外部可观察行为:给定字体条目与证据状态,验证其是否可被解析为运行时字体、是否走系统回退、缺口清单是否产生对应条目;不测试内部函数结构。
- 纯逻辑测试覆盖:有证据与无证据的分支结果唯一;无证据字体不可进入可解析集合;白名单命中与未命中行为;阻断三类判据的判定;缺口清单条目的字段完整;子集字体必须携带回退链;数字字体回退备选的度量兼容标记。
- 资产解析测试覆盖:未通过授权门禁的字体在解析阶段不可用;非核心资源失败按既有 fallback 链回退且不阻断;核心资源组失败触发既有回滚路径。
- 宿主诊断测试覆盖:开发与测试环境暴露语义键与失败类别;生产环境只暴露用户可理解提示且不含内部路径。
- 真实页面走查覆盖:字体未接入时中文界面正常可读;动态数据中的子集外汉字不出现豆腐块;大屏数字在回退字体下不跳格;缺口清单内容与运行时诊断一致。
- 证据齐全性测试:验证许可证据标识、名称与版本是否登记齐全;不得把它写成「授权合法性校验」,避免产出虚假保证。
- 复用既有先例:统一资产解析层的解析与回退断言、设备资产的原因码与降级链断言、分环境诊断的宿主观测读数、以及真实页面走查的可读性检查。规格阶段只写验收契约,不运行构建、开发服务器或浏览器调试。
Out of Scope
- 接入、子集化或部署任何具体字体;本规格只定义许可证据、白名单、交付约束与缺口分级。
- 字体语义槽位的重新定义、字号与间距体系;由既有视觉 token 规格负责。
- 降级链、fallback 顺序、核心资源回滚与诊断字段的重新定义;由既有资产清单与版本策略规格负责。
- 位置符号与设备资产的具体降级层级;由对应规格负责。
- 商用字体的采购、授权谈判与凭证索取。
- 蓝湖画板逐项盘点、设计稿差异裁决、分批替换与终稿验收;由对应规格负责。
- 判断某款字体在法律上是否可商用;本规格只要求证据齐全且可追溯。
Further Notes
- 本规格的唯一决策来源是讨论票 06 的
## Answer。
- 讨论期间对维护者指定的字体目录做过取证:该目录内不存在任何授权/许可文件,且包含明确保留所有权利的字库与多款公认商用收费字库;因此不得以目录为单位放行。该取证结论支撑了「证据确证制白名单」的裁定。
- 讨论期间实测:中文开源字体单字重体积约十余兆,西文开源字体不足一兆,这是「中文字体必须子集化或限定字重」的实测依据。
- 「未接入设计字体」是一种被接受的可见交付状态,不是缺陷;它必须出现在缺口清单中。
- 当前项目规则要求修改代码后不得自动运行构建或调试命令;实现阶段需由用户明确要求后再执行验证。