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:
@@ -32,6 +32,8 @@ import { createHash } from 'node:crypto';
|
||||
import { fileURLToPath } from 'node:url';
|
||||
import { dirname, join, relative, sep } from 'node:path';
|
||||
import { generatedData, readBrandSpec, validateBrandSpec } from './lib/brand-mark.mjs';
|
||||
/* 发布脱敏:从 CHANGELOG.md 抽出的段落会进对外页面,先滤掉基础设施细节(见模块头注释)。 */
|
||||
import { redactText } from './lib/redact-publish.mjs';
|
||||
|
||||
const __dirname = dirname(fileURLToPath(import.meta.url));
|
||||
const ROOT = join(__dirname, '..');
|
||||
@@ -1160,7 +1162,10 @@ console.log(`[build-mobile] site/m/component/ ← ${components.length} 个组件
|
||||
/* ---------- 4.5 site/m 的五个指南页(与 PC 同名同序)---------- */
|
||||
|
||||
/* 更新日志:从仓库根 CHANGELOG.md 提取「标题含 Mobile / 移动端」的段落,转成静态 HTML。
|
||||
不手抄 —— 站点与仓库两处说法不一致是这类页面的典型失败模式。 */
|
||||
不手抄 —— 站点与仓库两处说法不一致是这类页面的典型失败模式。
|
||||
出口脱敏:CHANGELOG 是内部流水,含部署目录 / 镜像标签 / 内网网段 / 部署时序,
|
||||
而本页是公网可下载的静态文件;在**读入口**过一遍,下游(代码块 / 列表 / 引用)
|
||||
拿到的就都是干净文本。CHANGELOG.md 本身不改。 */
|
||||
function inlineMd(s) {
|
||||
return esc(s)
|
||||
.replace(/\[([^\]]+)\]\(([^)]+)\)/g, '<a href="$2">$1</a>')
|
||||
@@ -1168,7 +1173,7 @@ function inlineMd(s) {
|
||||
.replace(/\*\*([^*]+)\*\*/g, '<strong>$1</strong>');
|
||||
}
|
||||
function mobileChangelogHtml() {
|
||||
const src = read(join(ROOT, 'CHANGELOG.md'));
|
||||
const src = redactText(read(join(ROOT, 'CHANGELOG.md')));
|
||||
const lines = src.split(/\r?\n/);
|
||||
const blocks = [];
|
||||
let cur = null;
|
||||
|
||||
Reference in New Issue
Block a user