审核对象:《miniprogram-v2 × 白标化 DSL 对接设计》(送审稿)|结论:修改后通过
总评:修改后通过。当前稿不应直接批准进入存量替换和生产出包;可以开展隔离原型。
方向基本正确:构建期租户注入、有限白名单组件、禁止逻辑注入,适合单租户复制模式。但当前稿把几个关键工程能力写成了口号:
try-catch 隔离”不等于组件故障边界。最大风险不是 DSL 太复杂,而是租户边界、发布边界、失败边界没有闭合。
以下严重级定义:
白名单 wx:if 分支本身没有问题,首版甚至比动态注册机制更容易审计。组件自包含取数也不是原罪。
真正的 DSL 泥潭,不取决于组件数量,而取决于 DSL 是否开始承载程序语义。 一旦增加任意接口地址、表达式、条件判断、循环、跨组件依赖、通用事件编排,就会从“页面装配”变成“自造低代码运行时”。
严重级:P1
问题:
目前同时存在“14 类”“15 类”“首版实现 6—8 类”三种口径。允许某个 type,不代表当前安装包真的能渲染它。weather-strip 也不能由前端单方面加进依赖件白名单。
建议:
建立版本化组件注册表,至少包含:
type / 组件契约版本 / props schema / 允许的 source / 允许的 action / 对应模块 / fallback 策略 / 当前是否实现
发布校验必须同时满足:
批准 15 类、只实现 8 类可以;本次页面引用未实现的第 9 类不可以。不能靠运行时 fallback 掩盖缺件出包。
严重级:P1
问题:
示例只有 components:[{type,props,id?}],没有说明子节点在哪里;却又提出树深和循环检测。layout、事件、跳转及跨组件通信也没有定义。
后续实现者极容易用“临时扩个字段”补出一门脚本语言。
建议:
首版二选一:
children 位置、允许嵌套的容器类型及深度计算方法。同时写死禁区:
routeId + 参数 schema;如果不支持节点引用,普通 JSON 树本身不会产生引用环;循环检测必须说明检测的是哪种引用关系,不能只列名词。
严重级:P1
问题:
30 个组件可能发出 30 次请求,重复请求、登录态竞态、旧请求覆盖新状态、组件卸载后回写都没有约束。“树深 ≤3、组件数 ≤30”不能保证性能。
建议:
组件可以自包含展示和取数,但必须统一经过数据访问层。sources.js 应定义:
DSL 不得覆盖请求域名或注入任意查询条件。页面验收增加首屏请求数、关键内容可见时间、setData 数据量、包体增量预算。
try-catch + 占位不是可靠故障隔离严重级:关键链路 P0;普通展示组件 P1
问题:
同步 try-catch 不能统一捕获异步请求、组件生命周期、事件回调及所有渲染异常。微信小程序也不能直接套用其他框架的错误边界假设。
统一 flat fallback 还有业务风险:支付、授权、提交入口坏了,不能显示一个占位块就算降级成功。
建议:
拆成明确机制:
ready / empty / error;全局异常处理用于观测,不承担局部恢复。M1 必须做故障注入,而不是只测正常 JSON。
严重级:P0
问题:
JSON 是构建打包进去的,线上用户不会因为仓库文件被置空就切回静态首页。重新构建、上传、审核/发布需要时间。用户端还可能存在不同版本。
此外,“缺文件、空文件、损坏文件、主动关闭”被混成了一种状态。
建议:
改成显式状态,例如:
home.renderMode = static | dsl
区分三层能力:
另写平台发布回退操作手册,明确适用条件和限制。不要把配置文件修改包装成即时生产回滚。
严重级:P0
问题:
删除旧实现后,页面级 fallback 可能不存在;老分享链接、二维码、消息入口、收藏路径可能失效。页面重命名还可能影响 app.json、分包和 tabBar。
建议:
“替换通过”与“允许删除”应是两个审批点。
严重级:P0(若进入冻结发布分支)
问题:
修改共享 WXSS、字号、颜色或公共组件,即使没有替换页面,也会影响现有 92 页。宣称“渲染器 bug 不影响静态页”同样依赖隔离措施,不是天然成立。
建议:
冻结期只允许:
全局样式收敛移到发布后独立批次。新主题先限制作用范围;禁止在试点时顺带修改所有共享组件。
严重级:P0
问题:
default.config.js = kailash 现状基线 与“零硬编码品牌”冲突。新租户缺配置时,可能静默显示神山品牌、域名、商户或推荐内容。静态 fallback 也可能残留原租户值。
建议:
品牌色扫描要有语义分类,不要把正常状态色也机械替换成品牌色。
严重级:P0
问题:
目前只写 DSL 的 schema/白名单/资源/循环,没有说明是否验证生成产物、模块一致性、路由、组件注册和租户身份。脚本存在,也不代表 CI 必然执行。
建议:
强制构建链路:
tenant 校验 → 临时目录生成 → 产物交叉校验 → DSL 校验 → 编译/自动测试 → 出包 → 产物清单
增加检查:
usingComponents、页面/分包注册完整;资源“存在”不等于资源“可信、合规、可访问”。生产已知配置错误应阻断发布,运行时降级处理的是剩余故障。
严重级:P1
问题:
内容治理日志只能说明文案如何变更,不能证明哪个租户用了哪个 DSL、谁发布了什么包、为何触发降级。
建议:
分开三类记录:
建立关联 ID。禁止直接上传 token、完整用户数据或敏感 props;明确采样、限流、保留期。审计链路故障不得拖垮页面。
严重级:P1
问题:
“组件三态、页面超时、flat fallback”没有定义失败优先级、重试行为、是否循环降级,以及如何避免误导用户。
建议:
补一张故障矩阵,至少覆盖:
每项写明:发布是否阻断、运行表现、重试上限、日志、最终安全状态。fallback 不再依赖出错的 DSL 链路。
严重级:P0
问题:
用户可以通过分享路径、二维码、历史页面或自定义 tabBar 之外的入口进入页面。隐藏首页宫格不等于模块关闭。
建议:
模块映射表必须覆盖:
模块键 → 页面/路由 → 导航入口 → DSL 组件 → source → 后端接口/权限
前端做入口控制和页面加载守卫;后端独立校验模块启用状态与权限。若按模块裁剪包内页面,必须同时生成并校验路由、分包、tabBar 和分享链接策略。
严重级:P0(权限、合规和关键引用);其余 P1
问题:
tenant 是唯一声明源,不代表所有字段都应直接注入前端,也不代表前端可以忽略它们。
建议: 补齐职责表:
| tenant 块 | 前端需要处理的关系 | 权威责任方 |
|---|---|---|
roles | 消费角色/能力标识,控制交互与页面访问;不内置授权真相 | 后端负责最终鉴权 |
classification | 分类页、筛选、导航与稳定分类标识对应 | 初始化流程/后端维护数据 |
seed | 默认页面引用的分类、内容 key、商户等必须存在且属当前租户 | 初始化脚本负责写入、验证 |
compliance | 协议、隐私说明、必要告知与相关交互状态 | 甲方、后端及平台配置共同负责 |
identity/domains | 公共身份与访问地址注入 | 构建流程与部署/平台配置一致 |
角色和模块关闭时应禁用什么,登录态变化时如何刷新,必须定义。不要把角色分配数据或种子用户凭据打进小程序。
严重级:P0
问题:
写入 site.js 不会自动完成微信后台域名配置、登录身份匹配、隐私配置、类目资质或支付接入。“构建时注入,所以微信合规”这一判断不成立。
建议:
初始化交付增加平台核对单:
miniprogram-ci 上传目标 appid 一致;AppSecret、上传私钥、支付密钥只能留在受控服务端/CI,不得进入前端配置或日志。appid 本身不是秘密,但错配是生产事故。
严重级:P0
问题:
件三要求幂等、回滚;当前 inject.mjs 没说明输入输出、退出码、覆盖策略、失败清理和验证责任。脚本重跑可能保留上一个租户的生成文件。
建议:
补齐:
件三原定 9 项前置校验、9 项产物、4 项验证,应逐项标明“本工程负责/上游负责/交付凭证”,不能只引用“段二·8”。
严重级:P1
问题:
背景 brand 包含 slogan,设计反复写 splash;identity/domains 映射到 config/site.js,目录树却没有这个文件。也没有说明 brand 名称来自哪里。
建议:
以甲方正式 schema 为准,提交逐字段映射:
源字段 → 是否必填 → 默认策略 → 生成位置 → 消费方 → 验证规则
splash 如未定义,应走 schema 变更,不能默认为已有能力。slogan 等已定义字段不能静默丢失。工程扩展参数必须有独立命名空间和版本。
严重级:P1
问题:
未改造页面仍可能写死品牌、分类、内容 ID、域名和角色。反过来,登录、支付、地图等业务页也不应为了“全量”硬塞进通用 DSL。
商户页独立实现可以,但不能成为白标化豁免区。
建议:
把两个目标分开验收:
92 页逐页归类:
每页记录品牌、模块、角色、路由、数据引用、合规检查及测试结果。将“存量页=DSL 页的组件集合”改成可核验的范围说明。
严重级:P1
问题:
到全量迁移后才接真实出包,可能才发现 appid、路径注册、分包、包体、依赖件版本不兼容。
建议: 改里程碑,不要等 M4 才验证集成:
| 里程碑 | 必须通过的关卡 |
|---|---|
| M0 设计修订 | schema 映射、组件契约、模块/权限矩阵、回退方案、职责边界签字 |
| M1 隔离原型 | 两租户干净构建;最小页面真实编译/上传体验验证;故障注入;包内静态回退 |
| M2 首页试点 | 视觉、数据、性能、分享路径、隐私交互及止损演练通过 |
| M3 批次扩面 | 每批附路由清单、回归结果、性能差异、删除旧实现条件 |
| M4 交付 | 92 页分类验收;按件三完成初始化重跑、失败清理及相关回滚验证 |
性能阈值在 M1 前基于现有首页测量后冻结,不能验收时再解释“差不多”。
对五个审核要点的直接回答:
结论:修改后通过。保留现有技术路线,不必重做;但先补契约、构建闭环和止损能力,再动 92 页。不要用“先做首页,其他后补”把这些基础问题推迟到上线前。