- AppID:
wx7ec46db1834dbd14(代码读 project.config.json,非手抄) - 项目:
miniprogram-v2(kailash-miniprogram-preview) - 主体:企业 | 生成方式:纯 AI 生成 | 日期:2026-09-17
- 检测轮次:v1 静态 → v2 真编译+运行时 → v3 导航/接线/规范补全(本轮)
- 检测人:波波(方案制定 + 验收检测岗)|代码改动:0(临时取证补丁已还原并校验)
0. 一句话结论
加权 2.68 → 🟠 必须修,红线 1 条(C1 隐私协议)。
v3 相比 v2(2.71)不升反降,因为本轮把三条"口径偏松"的评分按证据收紧了 —— 这不是项目变差,是我前两轮的判据被新证据证伪。
| 版本 | 加权 | 变化原因(不粉饰) |
| v1 | 2.48 | B1/B4 未评估,B 维分母只有 2 项 |
| v2 | 2.71 | B1/B4 补测得 4⭐/4⭐(+1.25);但发现 4 处编译阻断,A2 降 1⭐(-0.5) |
| v3 | 2.68 | A4 由 3⭐ 降 2⭐(支付链断坐实);C2 由 N/A 改评 4⭐(位置授权证伪 N/A 依据);A1 口径修正 77.8%→66.7%(同档 3⭐,分值不变) |
1. 评分总表(3 维 12 子项)
| 维度 | 权重 | 维度分 | 公式 | 子项分布 |
| A 功能完整性 | 40% | 2.25 | (3+1+3+2)/4 | A1=3, A2=1🟠, A3=3, A4=2🟠 |
| B 性能基线 | 35% | 2.75 | (4+2+1+4)/4 | B1=4🔵, B2=2🟠, B3=1🟠, B4=4🔵 |
| C 合规安全 | 25% | 3.25 | (1+4+4+4)/4 | C1=1🔴红线, C2=4🔵, C3=4🔵, C4=4🔵 |
加权总分 = 2.25×0.40 + 2.75×0.35 + 3.25×0.25 = 0.90 + 0.9625 + 0.8125 = 2.675 → 2.68
- 主评级:2.68 ∈ [2.0, 3.0) → 🟠 必须修
- 🔴 红线(1):C1 隐私协议三件套全缺
- 🟠 危险(4):A2 编译阻断、A4 支付链断、B2 主包 1.839MB、B3 无分包
- 🔵 观察(6):A1=3、A3=3、B1=4、B4=4、C2=4、C3=4、C4=4(实为 7 项)
- ⚪ 未评估(0)
2. 本轮(v3)四项新增检测
2.1 跳转完整性 —— 干净项(反证过)
脚本 scripts/check_v2_navigation.py(内置 5 组反证样例,含锚点与协议不误报校验,自检 PASS)
| 项 | 数量 | 判定 |
| 导航死链(目标页不在 93 页内) | 0 | ✅ |
| tabBar 页误用 navigateTo/redirectTo | 0 | ✅ |
| 非 tabBar 页误用 switchTab | 0 | ✅ |
| 动态拼接跳转(base 已校验在册) | 9 | ✅ 全部命中已注册页 |
| 页内锚点 / tel 协议 | 31 | ✅ 合法用法,非死链 |
自纠记录:首跑报 31 条"死链",经查全为 #a1 页内锚点与 tel:110 电话协议,属判据误伤;加入 ANCHOR/SCHEME 分类并补反证样例后归零。首跑结论不可信,修正后才是真值。
2.2 后端反向覆盖 —— 本轮最重发现 🔴
| 指标 | 真值 |
| 后端唯一路径模板 | 369 |
| ├─ miniapp C 端域 | 200 |
| ├─ admin 管理端 | 52 |
| ├─ merchant-console 商户端 | 43 |
| ├─ workbench 工作台 | 30 |
| └─ 其它 | 44 |
| v2 前端静态可证调用的 C 端路径 | 28 |
| 未接线 | 172(86.0%) |
核心链路接线率(按域)
| 域 | 已接 | 未接 | 判定 |
| 登录/身份 | 1 | 7 | 仅 auth/login;auth/me、auth/phone 未接 |
| 下单/订单 | 1 | 18 | 仅 orders 集合;orders/{id}/cancel、/confirm-consumed 未接 |
| 支付 | 0 | 8 | 零接线:pay/orders/{id}/prepay、/status、orders/{id}/pay 全无调用 |
| 核销 | 0 | 2 | 零接线 |
| 券 | 0 | 2 | 零接线 |
| 评价 | 1 | 13 | 仅 reviews |
| 足迹 | 1 | 0 | ✅ |
| 商品/线路 | 2 | 31 | 仅 products、content/guide-articles |
| 消息 | 4 | 5 | ✅ 相对最完整 |
判据自纠:${id} 与 {order_id} 归一不一致会造成假"未接线",已统一归一后重算 —— 数字不变(仍 86%);再用工具确认前端 services/ 层无 pay|prepay|notify|redeem 任何调用、无 ${} 模板串路径。零接线是真值,不是扫描误报。
结论:v2 目前是"演示态",支付/核销/券三条钱货链路完全没有接到后端。 前端虽存在 2 处 requestPayment 调用,但无 prepay 参数来源,运行时必然拿不到支付参数。
2.3 运行时日志 —— 干净项(钩子反证过)
| 指标 | 真值 |
| 页面导航成功 | 11 / 11 |
| 运行时 console/exception 事件 | 0 条 |
| 钩子可用性反证 | 主动打 3 条(log/warn/error)→ 收到 3 条,证明钩子有效,"0 条"可信 |
若无反证,"0 条"可能是"钩子没接上"的假绿。反证后结论成立:业务页面运行期零控制台输出、零未捕获异常。
性能指标(11 页 × 多帧):firstRender n=46,min 32ms / max 91ms / avg 49.8ms;页面 data 体积最大 2124 B(首页),其余均 <1.7 KB。
2.4 WXSS 规范 —— 数量级问题,不逐个列
114 个 WXSS 文件,共 772.9 KB
| 项 | 数量 | 评价 |
rpx / px | 11335 / 67 | ✅ rpx 主导,适配规范好 |
| CSS 变量(定义/使用) | 780 / 4215 | ✅ 有设计令牌体系 |
| 硬编码色值(hex + rgb) | 1466 + 955 = 2421 | ⚠️ 白标化主题切换的实质障碍 |
z-index | 289(含 999 × 64) | ⚠️ 层级无体系,弹窗易互相压盖 |
!important | 31(22 个文件) | ⚠️ 集中在 motion.wxss、wish-list、home |
* 全局选择器 | 0 | ✅ |
硬编码 2421 处对白标化是硬伤:主题色切换时这些值不会跟着变,改品牌必然要人工返工。
3. 评分修正说明(v3 相对 v2 的三处收紧)
| 子项 | v2 | v3 | 修正依据 |
| A1 功能完成度 | 3⭐(7/9 = 77.8%) | 3⭐(6/9 = 66.7%) | 按用户选定口径"实际接线逐项判定":支付/核销/工作台三域零接线,剔除出"已实现"。66.7% 仍落 [60%,80%) → 3⭐,分值不变但口径已修正 |
| A4 微信生态 | 3⭐(2 项达标) | 2⭐(1 项达标) | 适用项 login/pay/share/subscribe:login ✅;pay ❌(prepay 前端零调用,requestPayment 无参数来源);share 部分(仅 onShareAppMessage,无 Timeline);subscribe ❌(0 处)。按"1 项或误用 → 2⭐" |
| C2 用户授权 | N/A | 4⭐ | v1 判 N/A 的依据是"无任何用户信息获取",本轮证伪:sos.ts:100、emergency-contacts.ts:46 真调 wx.getLocation,且 app.json 已声明 requiredPrivateInfos。位置用官方 API + 已声明 → 合规;因 C1 未配导致授权链路不能闭环,降 1⭐ |
🔴 连锁危害:C1 红线会直接打断 SOS 救命链路
pages/sos/sos.ts 与 emergency-contacts.ts 依赖 wx.getLocation。隐私协议三件套全缺时,微信会拦截定位接口直接返回 fail,即:
C1 不只是"合规扣分",而是会让 SOS 一键求助功能在真机上失效。这是本轮最需要优先修的一条。
4. 修复行动清单
P0(上线阻断,必须清零)
| # | 问题 | 动作 | 责任 | 预估 |
| P0-1 | C1 隐私协议三件套全缺(__usePrivacyCheck__/requirePrivacyAuthorize/onNeedPrivacyAuthorization 全仓 0 处),且阻断 SOS 定位 | 配 app.json + 补 privacy 弹窗组件 + 协议版本登记 | 需小冈 | 4h |
| P0-2 | 4 处编译阻断(出不了包) | ① play-scene.wxss:91 残留 over ② dsl-sources.ts:50 as any ③ wish-aggregate.wxml 多余 </view> ④ wish-list.wxml:18 裸属性(应为 hidden="{{...}}",无引号非法) | 需小冈 | 1h |
| P0-3 | 支付链路零接线 | 前端补 pay/orders/{id}/prepay + /status 调用,打通 requestPayment 参数来源 | 需小冈 + 阿仁 | 8h |
P1(上线前)
| # | 问题 | 动作 | 预估 |
| P1-1 | 7 处接口断链(key-tasks ×6 前缀应为 workbench/key-tasks;membership.ts 的 footprints 应为 user/footprints) | 逐条改前缀 | 1h |
| P1-2 | B3 无分包(主包 1.839MB) | tabBar 四域 + 工作台 + 评价域切 subPackages | 8h |
| P1-3 | B2 主包临界(距 2MB 仅 165KB) | 开 minified=true 是最快手段,预计 → 约 1.4MB | 0.5h |
P1.5(钱货链路)
| # | 问题 | 动作 |
| P1.5-1 | 核销链路零接线 | 补 tasks-full/verify 等 |
| P1.5-2 | 券链路零接线 | 补 vouchers/{id}/confirm-cash 等 |
| P1.5-3 | C 端后端接线率仅 14% | 出《v2 接线排期表》,明确哪些是分期、哪些是遗漏(需刘总拍板) |
P2(体验与可维护性)
- A3 补全局
unhandledrejection 兜底(当前 0 处) - A4 补
requestSubscribeMessage 与 onShareTimeline - WXSS 硬编码色值 2421 处收敛到 CSS 变量(白标化前置)
z-index 建层级令牌,清理 !important 31 处
5. 复现命令(证据可重跑)
# 导航完整性(含反证自检)
python3 scripts/check_v2_navigation.py --selftest && python3 scripts/check_v2_navigation.py
# 接口契约对账(含 7 条断链)
python3 scripts/check_v2_api_contract.py
# 运行时采集(需先起自动化端口)
"/Applications/wechatwebdevtools.app/Contents/MacOS/cli" auto \
--project /Users/lean/dev/kailash-bobo/miniprogram-v2 --auto-port 9420 &
PROBE_CONSOLE=1 NODE_PATH=/Users/lean/node_modules \
node scripts/check_v2_runtime_automation.js
# 语法门禁
python3 scripts/check_v2_wxml_syntax.py # WXML 标签配对
python3 scripts/check_v2_wxml_bare_attr.py # WXML 裸属性
NODE_PATH=/Users/lean/node_modules node scripts/check_v2_wxss_syntax.js # WXSS 语法
python3 scripts/check_v2_launch_readiness.py # 客观取证
6. 局限与未测项(不粉饰)
- B2/B3 为估算值:以 esbuild 模拟官方编译链得出 1.839 MB,不含框架运行时与 sourcemap;终值以开发者工具「代码依赖分析」为准,≥2MB 将升级为红线。
- B1 为渲染耗时(
firstRender),非端到端首屏;后端未连通,业务数据未真实返回,需在联调后复测。 - 无真机测试:未做 iOS/Android 真机兼容、弱网、内存峰值。本轮 11 页均为开发者工具模拟器。
- 后端接线率为静态可证下界:若存在运行时动态拼装的调用(当前扫描未见),实际接线数会略高于 28。
- C1/C3 的合规判定基于代码静态证据,最终以微信审核结果为准。
7. 修复后预估(D1-D3 三步走)
| 步骤 | 动作 | 影响 |
| D1 | C1 隐私三件套 + 4 处编译阻断 + 7 处断链 | A2: 1→4,C1: 1→5,A4 支付待 D2 |
| D2 | minified=true + 拆分包 + 支付链路接线 | B: 2.75→4.00+,A4: 2→4 |
| D3 | 真机全链路 + 后端数据到位后复测 B1/B4 + A3 兜底 + A4 订阅消息 | A: →4.25 |
预估达成 ≈ 4.5+ → 🟢 可上(前提是 D1-D3 全部落地并复测取证)