feat(安全+品牌): 对外产物发布脱敏(3注入点/2465文件0泄露) + Kole Cup 定稿
Regression / regression (push) Canceled after 0s
Regression / regression (push) Canceled after 0s
安全:CHANGELOG.md 是仓库内部变更流水(含服务器目录、镜像回滚标签、内网网段、
部署时序、AI 工作流用语),此前被 build-site.ps1 / precompute.mjs / build-mobile.mjs
原样注入站点,而站点是公网可下载的静态文件 —— 抓一次 /site/m/changelog.html
即可拿到内网地址段与服务器目录布局。
- 新增 tools/lib/redact-publish.mjs(零依赖,构建期过滤,不改 CHANGELOG.md,
内部可追溯性完整保留)
- 接入 precompute.mjs(PC data.json/changelog.json)与 build-mobile.mjs
(移动端更新日志页);build-site.ps1 不碰(ASCII-only 铁律)
- 只处理 changelog 字段:components[].sources 是规范实现源码,逐字保真
(详情页代码区主动高亮注释,剥注释会破坏该功能)
- 实测消除:/opt/aurora-admin.prev-*、kole-ui-showcase:pre-*、docker compose、
192.168.5.7、16 位产物指纹、1531/1531、并发会话/本会话/派子 agent
- settings.html 演示占位 IP 192.168.5.0/24(= 真实网段)改为 RFC 5737 的 192.0.2.0/24
品牌:Kole Cup 饮料杯标记定稿(几何 K → 圆角杯盖 + 杯身负空间 K,无吸管),
brand-mark.json 升 schemaVersion 3(paths 支持 { d, evenodd }),
verify:brand 增至 25 条(新增 B9b:负空间必须带 fill-rule)。
验证:发布集 2465 文件全量扫描 0 泄露;PC 回归 100%(1464/1464) ·
移动端 100%(807/807);门禁品牌 25 / 隔离 31 / 移动文档 12 / 示例 9 / 版本 40 / i18n 17 全绿;
已按 AGENTS §九 发布公网,2461/2461 逐字节一致,五项验收全过。
已知未处理(既有缺口,ROADMAP S7-P28 已记录):data.mobile.json 的
meta.generated 为墙上时钟,会让 CI 的「生成物可复现」断言在重跑构建后永远非空;
该 CI 流水线本身亦从未通过(无 runner)。
This commit is contained in:
@@ -53,6 +53,17 @@ check(favicon === expectedFavicon, 'B6 favicon 是规格生成物');
|
||||
check(mono === expectedMono, 'B7 单色标记是规格生成物');
|
||||
check(data === expectedData, 'B8 generated JSON 是规格生成物');
|
||||
check(!/<image\b|(?:href|src)=["']https?:\/\//i.test(favicon + mono), 'B9 品牌 SVG 不含外部资源');
|
||||
/* 负空间断言:品牌图形靠 evenodd 挖空 K(杯身实心块 + K 反向子路径)。
|
||||
若生成期漏掉 fill-rule,K 会被填成实心 —— 图标仍然"渲染成功",
|
||||
只是变成一块实心杯子,**不会报任何错**。所以这条必须卡住。 */
|
||||
const negativePaths = (spec.geometry.paths || []).filter((p) => p && typeof p === 'object' && p.evenodd);
|
||||
const subpathCount = (d) => (String(d).match(/M/gi) || []).length;
|
||||
check(
|
||||
negativePaths.length === 0
|
||||
|| (favicon.includes('fill-rule="evenodd"') && mono.includes('fill-rule="evenodd"')),
|
||||
'B9b 负空间路径带 fill-rule="evenodd"(否则 K 会被填实)',
|
||||
negativePaths.length ? `${negativePaths.length} 条负空间路径 · 子路径 ${negativePaths.map((p) => subpathCount(p.d)).join('+')}` : '无负空间路径'
|
||||
);
|
||||
check((favicon.match(/<path\b/g) || []).length === spec.geometry.paths.length, 'B10 favicon 完整包含全部几何路径', `${spec.geometry.paths.length} 条`);
|
||||
check((mono.match(/<path\b/g) || []).length === spec.geometry.paths.length, 'B11 单色标记完整包含全部几何路径', `${spec.geometry.paths.length} 条`);
|
||||
const faviconPaint = spec.geometry.mode === 'fill' ? `fill="${spec.favicon.foreground}"` : `stroke="${spec.favicon.foreground}"`;
|
||||
|
||||
Reference in New Issue
Block a user