正文的许可分布表写的是「CC0 12 / MIT 1 / 自定义 4 / CC BY 12」= 29 套。实测是 31 套,两处 12 都少算了一个。以实测为准(node_modules/@dicebear/*/package.json 逐个读 + LICENSE 逐个点开):
npm license 字段
套数
设计部分实际许可
要署名
MIT AND CC-BY-4.0
13
CC BY 4.0
是(不收)
MIT
14
13 套是 CC0 1.0;icons 是纯 MIT
否
See LICENSE file
4
Free for personal and commercial use
否
合计 31 套,收录 18 套,未收的 13 套全部落在 CC BY 那 13 套里,一一对应、无遗漏。另交叉核对过:npm 有而模板没收的恰好 13 个,模板有而 npm 没有的 0 个。
avataaars/LICENSE 原文(这次直接贴原文,不再转述):
# Design
Source: Avataaars (https://avataaars.com/)
Designer: Pablo Stanley (https://twitter.com/pablostanley)
License: Free for personal and commercial use (https://avataaars.com/)
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
现象
3.2.36 / 3.2.37 交付的「自动头像」共收录 14 套风格。用户指出:
avataaars同批的 4 套(avataaars、avataaars-neutral、bottts、bottts-neutral)没在里面,而这一批的许可明确是「个人与商业可用」。排查结论:当初的许可证判断错了
3.2.36 盘点 31 套时,把 npm 包
license字段里写See LICENSE file的 4 套当成了「措辞不明、先不收」。实际情况:LICENSE文件里明确写:License: Free for personal and commercial use(设计者 Pablo Stanley,来源avataaars.com/bottts.com)。Free for personal and commercial use. 😇所以这是判断错误,不是许可限制。当时还顺手把它们错列进了「CC BY,不收」的禁止清单,方向反了。
作为对照,实测 29 套的许可分布:
icons)需要做的事
把上述 4 套编译成纯数组 PHP 模板并收录,风格从 14 套增加到 18 套。
验收标准
avataaars的onPostCreate三条规则必须复刻(背景清空 ×2、头巾删胡子)。备注
/theme-update/通道,不覆盖服务器主题目录。交付:3.2.38 已发布到主题更新通道
先更正本单正文里的一处数据错误
正文的许可分布表写的是「CC0 12 / MIT 1 / 自定义 4 / CC BY 12」= 29 套。实测是 31 套,两处 12 都少算了一个。以实测为准(
node_modules/@dicebear/*/package.json逐个读 +LICENSE逐个点开):license字段MIT AND CC-BY-4.0MITicons是纯 MITSee LICENSE file合计 31 套,收录 18 套,未收的 13 套全部落在 CC BY 那 13 套里,一一对应、无遗漏。另交叉核对过:npm 有而模板没收的恰好 13 个,模板有而 npm 没有的 0 个。
avataaars/LICENSE原文(这次直接贴原文,不再转述):改动
新增 4 份模板:
avataaars/avataaars_neutral/bottts/bottts_neutral(合计 227 KB),风格总数 14 → 18,模板总体积 1.1 MB → 1.20 MByang_avatar_styles()注册四套及中文名,排在「首字母」之后(不改动原有 14 套的相对顺序)avataaars的onPostCreate三条规则逐条复刻:style组为circle时清空背景65c9ff一项时清空(判「恰好一个」,不是「包含」)top = hijab)且胡子概率非 100 时去掉胡子为此
yang_avatar_post_create()增加$picked形参(官方读的是components.style.name/components.top.name,不传判别不出来),返回值由 2 项改 3 项($on会被改,必须带出来),调用点同步接回$on = $res[2]。后台风格说明由「都是 CC0 或 MIT 许可」改为「都可自由使用与商用,且不要求署名」——加了这四套后前者已不成立
style.css版本 3.2.37 → 3.2.38验证结果(每一项都先证明判据能红,再看是否通过)
inc/theme-avatar.php)avataaars三条规则白盒(含「多色背景不误清」「含 65c9ff 但不止一项要保留」「概率=100 时胡子保留」)_guard336_avatar.py_guard337_layout.py_pkgcheck337.py(含新增「逐份点名」)php -l有一点值得记下来:逐字节比对抓不到全部三条规则。20 个种子里
style组只有['default']一个取值(「circle 才清空」永不触发),top也一个 hijab 都没抽到。所以「注入后 0 项变红」不等于判据假,而是用例没覆盖到 —— 另写白盒脚本直接构造触发条件才验证到。顺带修正两处错误的守卫(都是这次暴露的)
_guard336_avatar.py的FORBIDDEN清单里把avataaars/bottts错列为「CC BY 禁止收录」,还带一个不存在的adventaas。已按实测重写为 13 套真正的 CC BY,并在代码里留了注释说明为什么当初会搞错。_guard336_falsify.py的 F2 锚点仍在匹配旧文案「自动头像」(3.2.37 已改名为「启用自动头像」),导致该注入恒失效;版本锚点也停在上一个版本。两处都已跟随。发布与验收
16cc7d8(带#7),7 个文件kratos_yang-3.2.38.zip,201 个文件 / 4.38 MBupdate.json(顺序:先验包 → 备份 → 替换 → HTTP 冒烟与 md5 比对 → 最后改版本号)update.json→3.2.38✓kratos_yang.zip200,4,590,003 字节,md53b32fecdae3602078b285257767aff9a,与本地包一致 ✓readme.html200,首行即本版标题 ✓inc/avatar-styles/只有 14 份,未被覆盖 ✓theme-update/无.new残留 ✓需要你操作的
服务器上的主题目录不会被这次发布改动(按约定只发 zip + readme + update.json)。要在 WP 后台点一次「更新主题」才会装上 3.2.38,装完「自动头像」页的风格列表就是 18 个卡片。
请确认没问题后我再关闭本单(以及仍开着的 #5、#6)。