miniprogram-v2 死链修复报告 · 2026-09-21

执行人:波波(方案 + 验收岗)。提交 89351424 入 main。

〇、结论

提审包里曾有 19 处「点了必失败」的入口,其中首页 4 处。已全部修复。

修复后:提审总门退出码 0,路由门禁 L1=0 / L2=0,出包 805,858 B(787.0 KB),页数维持 39。


一、问题怎么被发现的

自动体检连续三日报告「全绿、零改动」,我没有直接采信,而是补扫了第四形态死链,结果与既有门禁给出的「死链 2 处」不一致。

形态举例旧门禁是否覆盖
wx.navigateTo({ url: '/pages/x/x' }) 字面量demand-confirm.ts:79✅ 覆盖(报 2 处)
<navigator url="...">—✅
bindtap="goXxx" 直绑home 的 goJourney✅(09-18 已修)
data-go="key" → 页内 ts 路由表 maphome 的「交通 / 餐饮 / 行程 / 需求单」❌ 完全漏掉

第四形态是本次新发现的:页面 wxml 不写路径,只写 data-go="transport",由 goPage() 在 ts 里查一张 30+ 项的路由表得到真实路径。旧门禁只扫 .ts 里的 navigateTo 字面量,因此扫不到。


二、真值:19 处,分布在 7 个已注册页

页面处数指向的未注册页
home(首页)4category-transport、category-restaurant、journey、my-demands
culture3category-transport、category-restaurant、my-demands
selection3category-restaurant、category-ticket、category-transport
guide-article1journey
passport1journey
local-scene1category-restaurant
safety-check1category-transport
合计19目标 5 个:transport / restaurant / ticket / journey / my-demands

这 5 个目标页均不在 41 页 MVP 的 KEEP 名单内(已核 scripts/cut_v2_mvp_pages.py 的 KEEP 常量),属 09-18 摘页的遗留债 —— 摘了注册,没同步清入口。责任归属:波波。

后果:审核员打开首页点「交通」→ 目标页未注册 → 跳转失败。提审阻断级。


三、两次判据自纠(过程记录)

  1. 假阳性一次:首版扫描输出「31/31 全部死链」,把 pilgrimage、settings、agreement 这些已注册页也判成死链。原因:app.json 存的是 pages/x/x(无前导斜杠),路由表值是 /pages/x/x(有斜杠),字符串直接比对不等。归一后真值 = 19。
  2. 修法选错一次:先做 toast「功能即将上线」兜底,结果被提审门禁【2】判为「用户可见占位 / 未完成文案」7 处、退出码变 1。判据是对的,是我修法选错(团队口径就是提审包不能出现这类文案)。改为「隐藏入口 + 静默兜底」。

四、修复内容

#改动说明
1新增 utils/pack-routes.ts由 app.json 生成包内路由白名单 + inPack(url)。未来任何摘页都不会再产生"点得动但跳不了"的入口
27 个已注册页的 goPage加 inPack 校验,未注册目标静默 return,不再跳转报错
319 处 data-go 入口加 hidden="{{true}}",入口不再可见
4新增 scripts/check_v2_route_keys.py第四形态死链门禁:L1 阻断 / L2 登记;入口已隐藏则不计

门禁反证(两次,均通过)

反证注入结果还原后
①摘掉 home.ts 的 inPackL1 由 0 → 4,退出码 1L1=0,退出码 0,git 无残留
②摘掉 home.wxml 一处 hiddenL2 由 0 → 1L2=0,git 无残留

五、修复后真值

检查项真值判据
提审就绪总扫退出码 00 = 干净
用户可见占位 / 未完成文案00
静态演示页 / 伪造凭证0 / 00
路由门禁 L1(点击必失败)00
路由门禁 L2(已兜底登记)0—
WXML 语法 / 裸属性111 扫 / 0 坏 / 0 裸0
WXSS 语法116 扫 / 0 坏0
导航死链(旧形态)2(均在已摘页内,不在包中)非阻断
app.json 注册页39不变
主包体积805,858 B(787.0 KB)上限 2 MB,余量约 1.25 MB

六、待裁定(需老板拍板,代码之外)

那 5 个被摘的目标页其实全部完工:ts 100–192 行、各有 2 处后端调用、50–100 个可见元素、无 mock / 占位数据。

选项结果代价
A. 补注册 5 页39 → 44 页,首页「交通 / 餐饮 / 门票 / 行程 / 需求」全部可用,功能面完整超出老板「41 页」裁定 3–5 页;包体 +约 45 KB(余量充足)
B. 维持现状39 页不变,入口已隐藏,不会点失败首页分类入口只剩「住宿」,产品面变薄

另有三项人工阻塞(与体检报告一致):支付链路真机实测、mp 后台《用户隐私保护指引》、request 合法域名 https://api.kailashi.cn 登记。