复验对象:7534cecf(merchant-store + app.ts scene 双入口分流)、4db7072a(商户页模板三段接线)
复验方式:不采信自报,全部由复验方重跑取回显
判定:✅ 通过(可关账),另附 3 项独立问题(A/B/C),其中 A/B 属门禁平台缺陷、C 需真机确认
| # | 项 | 命令/方式 | 结果 |
|---|---|---|---|
| 1 | 身份链 | git log -1 --format='%an<%ae> %cn<%ce>' | author=committer=小冈\<xiaogang@kailash.media\>,无代签 ✅ |
| 2 | 后端语法 | python3 -m py_compile | OK ✅ |
| 3 | 后端端点 | AST 解析装饰器 | 4 端点(GET 公开 / GET 列表 / GET 单 / PUT 保存),与自报"4 端点"一致 ✅ |
| 4 | 路由注册 | git show 4db7072a -- backend/app/main.py | app.include_router(miniapp_merchant_pages.router) 已注入 ✅ |
| 5 | 页面注册 | app.json 解析 | pages/merchant-store/merchant-store 在 pages(46 页)✅;home 在 tabBar ⇒ switchTab 回平台有效 ✅ |
| 6 | 契约(C端→后端) | grep 后端路由 | /api/miniapp/merchants/{id}/presentation(feed_demand.py:463,prefix /api/miniapp)✅;/api/miniapp/merchant-pages/{id}(新文件:119)✅ |
| 7 | 实打 staging | curl http://100.64.1.230:8089/... | 公开端点 merchant-pages/1 → HTTP 200 {"ok":true,"data":null}(无模板降级,符合设计)✅ |
| 8 | 鉴权实打 | 无 token 打 admin 端点 | GET 列表 → 401 未登录 ✅;PUT 保存 → 401 未登录 ✅(get_current_user 真实生效) |
| 9 | a 端编译 | tsc --noEmit --skipLibCheck | exit=0 ✅ |
| 10 | a 端构建 | npm run build(tsc && vite build) | 71 modules,built in 505ms,exit=0 ✅ |
| 11 | 门禁·导航 | check_v2_navigation.py | 46 页 / 240 文件;dead 0 / tab_misuse 0 / nontab_switch 0 ✅ |
| 12 | 门禁·提审 | check_v2_release_ready.py | 保留页 46,提审阻断项 0 ✅ |
| 13 | 门禁·wxml 语法 | check_v2_wxml_syntax.py(本机路径重跑) | scanned 112 / bad_files 0(selftest 通过)✅ |
| 14 | 门禁·裸属性 | check_v2_wxml_bare_attr.py(同上) | scanned 112 / 0 ✅ |
| 15 | 门禁·接线 | check_v2_wiring_all.py(同上) | 128 个 ts / 47 条路径 / 84 处 ✅ |
⚠️ 第 13–15 项:原脚本在本机跑会扫到 0 个文件而恒绿(见问题 A),复验方已用本机路径重跑,结果才有效。
scripts/check_v2_wxml_syntax.py:12 ROOT = "/Users/lean/dev/kailash-bobo/miniprogram-v2"
scripts/check_v2_wiring_all.py:13 同上
scripts/check_v2_wxml_bare_attr.py:15 同上
…
共 9 个脚本含 /Users/lean/ 硬编码
os.walk 返回空 ⇒ scanned: 0、bad_files: 0 ⇒ exit=0 恒绿。check_v2_navigation.py、check_v2_release_ready.py、check_v2_route_keys.py、check_v2_wxml_broken_tag.py 用的是相对路径(os.path.dirname(__file__)/../miniprogram-v2),这些是真跑、结果有效。check_v2_wiring_all.py:78 只匹配 '(/api[^']*)'(单引号)。 apiGet<Presentation>(/api/miniapp/merchants/${mid}/presentation) ` ⇒ 不匹配,不进入核算。 (/api[^]*) `,并把 ${…} 归一为 {}(脚本已有 ${…}→{}` 的归一化逻辑,只差引号匹配)。onShow 重复 reLaunch 风险(需真机确认,未验)app.ts 在 onLaunch 和 onShow 都调 routeByScene(),命中 mid= 即 wx.reLaunch 到商户页。globalData.sceneRouted),已分流过就不再重复 reLaunch。merchant_page_configs 由 _ensure_table() 运行时 CREATE TABLE IF NOT EXISTS 建立,backend/sql/ 下无对应迁移脚本。miniapp_config_governance.py(site_config_versions / site_config_draft)是同一写法 ⇒ 属沿用团队既有范式,不是小冈独创缺陷。merchant-store 为本轮 VI 全铺(骨架 36 页)之后新建,有 loading 文案 + 重试按钮,但未接 motion-skeleton。cli preview),会占用/登录 IDE,本轮未做;已用 wxml 语法/裸属性/断标签/导航 4 项静态门禁等价覆盖。presentation 返回与前端 interface Presentation。-- 署名:小齐