10 项处置 · 授权分层与决策单

🗄 已归档快照(2026-09-13 文档时效治理):本文件为历史阶段设计快照,最新口径以 docs/contracts/api-v1.3-matrix.md、docs/plans/2026-09-14-白标化内核抽取-两实例对比.md 及 TASKS 现行为准。设计思路仍可参考,数据与结论已过时。
波波(方案 + 验收岗)· 2026-09-07 12:35 · 基线 commit cf4120c
授权范围:义父 12:25「10 项问题可以授权给你处理,哪个必须我决策就给我详细描述一下」

零、结论速览

#事项谁拍状态
1生产补 JWT_SECRET + CORS_ORIGINS波波可执行✅ 已完成并验证(见 §一)
3小渔纳入 AGENTS §9.2 登记表波波可执行🟢 已备好改法,等一次 push(见 §五)
7判据粒度修订(E1 卓玛 + M1 禁词)波波可执行🟢 已备好新判据,等一次 push(见 §五)
2小渔 42 项审计重新对基线复跑义父决策(额度)见 §二·A
6E1 五人集清偿义父决策(派谁)见 §二·B
10Network.ts 无 !res.ok 分支义父决策(派谁)见 §二·C
4workbench-home 假数据🔴 义父决策(合规红线)见 §三·①
5merchant-hotel「预订房间」🔴 义父决策(我上轮定性错了)见 §三·②
8ROADMAP M1/M2 判据重定基线🔴 义父决策(里程碑)见 §三·③
9B 端 H5 M4-M6 是否开工🔴 义父决策(资源+业务)见 §三·④

必须你亲自拍的只有 4 项(#4 #5 #8 #9)+ 3 项要你说一句话(#2 #6 #10)。其余 3 项我已处理或已备好。


一、✅ #1 P0 已执行完毕(不需你再批)

授权到手即执行,全程密钥在服务器端生成、不回显、不入 git(AGENTS §2 铁律 6)。

动作:

  1. 备份 /srv/kailash/.env → .env.bak.20260907-1230(权限 600 保留)
  2. 追加两键(openssl rand -hex 32 服务器端生成,长度校验 = 64 字符 ✅,确认不含 dev-secret-change-me ✅)
  3. JWT_SECRET=<64位随机hex>
  4. CORS_ORIGINS=https://doc.kailashi.cn,https://kailashi.cn,https://www.kailashi.cn,https://kailash.media,https://www.kailash.media,https://doc.kailash.media
  5. 白名单来源:容器 nginx server_name 全清单实测(kailash.media.conf + doc.kailashi.cn.conf + api.kailashi.cn)
  6. docker compose up -d --no-deps --no-build app(没用 docker restart——铁律:restart 不注入 env_file)

验证(四项全绿):

验证修复前修复后
① 默认密钥伪造 token 打内网 :8088401「凭证已失效」= 签名通过 🔴401「无效凭证」= 签名被拒 ✅
② 同一 token 打公网 api.kailashi.cn—401「无效凭证」✅
③ CORS 白名单 Origin doc.kailashi.cn*access-control-allow-origin: https://doc.kailashi.cn ✅
④ CORS 非白名单 evil.example.com*(放行)无 allow-origin 头 = 已拒绝 ✅
⑤ /healthok{"ok":true,"app":"shenshan","version":"0.1.0"} ✅
⑥ 冒烟26/26(staging)25/26(生产容器内跑 staging 脚本)

⚠️ 那 1 项 FAIL 与本次改动无关:func:notify_batch_redeem_progress(N4) 报 merchant_id=7 不在 merchants 表——是小冈 09-07 已登记「属 backend 域(闸门仅 aren/xiaoqi)→ 派阿仁」的参数化项,脚本硬编码了 staging 的商户 ID,在生产库里不存在。非回归。

影响面(需你知悉,不需处理):34 名用户下次请求即 token 失效 → 小程序 checkLoginValid() 走 catch → clearToken() → 重新微信登录,无死循环风险(已核 auth.ts:114-127)。B 端 H5 侧 auth.ts 有 expiresAt 持久化,会跳登录页重登。

残留代码风险(未动,属小齐/阿仁域):config.py:11/17 仍是 os.getenv("JWT_SECRET","dev-secret-change-me")、APP_ENV 默认 dev,无 fail-closed。即:配置对了但代码没兜底,将来谁重建容器忘了带 env_file 就又裸奔。修法 = 生产环境缺键直接 raise。这是 #2 审计里 C-1/C-2 的根,建议一并派。


二、🟡 需你「说一句话」的三项(不是方案分歧,是要资源/派工)

A. #2 小渔 42 项审计要不要重新复跑

事实:审计基底 a1f80bf(09-04 10:01)落后 HEAD 63 个提交,且基础数据全部来自静态读仓库、未连库实测:

审计口径实测偏差后果
数据库 76 张表生产 109 张「D-5 废弃表」结论基础不稳
47 个迁移文件编号迁移 001-049(生产落 048,staging 落 049)—
小程序 120 页pages/ 119,app.json 注册 118差 1 = 死代码目录
B 端 23 路由src/pages/*.tsx 25—
F-3 request.ts 不认 {ok,data}已被 3ace656(09-05,小冈)修复照单派工会派出一个已完成的活

我已替你做完的部分:42 项里逐项复验,仍成立 10 项(B-3 / F-4 mockPay 无守卫 / F-5 uploadFile 相对路径 / F-7 / W-1 FeatureFlags 伪异步 / W-2 token 30天vs24h …),C-1/B-1 已由我修掉,C-3 在生产 APP_ENV=prod 下实际不可利用(审计未区分代码态与配置态)。

要你拍的:是「让小渔自己对 cf4120c 重跑一遍」(消耗它的额度,产出干净的 42 项),还是「就用我这份 10 项复验结果直接派工」(零额度消耗,但缺 F/M/I 级的完整清单)。

我的建议:用我的 10 项直接派。理由:小渔重跑一次成本不小,而真正活跃的高危项(C-1/B-1)已经修完;剩下的 F-4/F-5/W-1/W-2 都是明确的小改动,写工单比再审计一遍快。

B. #6 E1 五人集清偿 —— 派谁

事实(08-30 小齐打回,至今 8 天未清):

名字全站计数判定
扎西次仁 / 小初0 / 0✅ 已清
小张 2 / 扎西 8 / 古格 18—✅ 在用
林芝(旅行社)0🔴 角色从未落地
小普(平台员工)0🔴 角色从未落地
卓玛73 处真违规 + 4 处地名误伤(见下)

卓玛 7 处分离:

要你拍的:这是施工活(改 .ts),按 §9.2 归阿仁/小冈,我不能自己改。

我的建议:先做 A(3 行改完即清 E1 打回项),B 拆成独立工单——因为「旅行社」角色本身撞合规红线(三价体系 §14.3:借证是双向处罚 + 连带责任),C 端要不要出现旅行社角色是产品决策不是文案决策。

C. #10 Network.ts 无 !res.ok 分支 —— 派谁

事实:一号 B 端盘点 §六 已知问题 #2,至今未修。b-workbench/src/utils/Network.ts 全文只有 :56 一处 window.location.reload(),即 401 直接强刷页面(正是小渔审计 w-2 批评的粗暴处理)。同批 #1(App.tsx 登录门刷新丢失)、#3(Bills URL 双错)已修,#5(深层页无导航入口)、#6(packages admin 身份要求)未处理。

要你拍的:这是 B 端域(一号的活)。一号现在还有额度吗? 09-04 之后 B 端提交很少,近 3 天全站只有 63 个提交。如果一号停了,这条要么派小冈(他 09-05 接手了 C 端接线),要么并入 #9 的 B 端开工决策一起做。

我的建议:并入 #9 一起拍——单独修 Network.ts 意义不大,它只是 B 端 M4-M6 是否开工的一个子项。


三、🔴 必须你亲自决策的四项(详细描述)

① #4 workbench-home:真接口取了数据,但一个字段都没往界面上画,界面全是硬编码假数字,且免责声明已被删

这一项比我上轮报的更严重。上轮我说「feeds 涉钱假数据」,实际是整页假。

事实链(全部实测):

workbench-home.ts:1    import { getConsoleOverview } from '../../services/merchant-console'
workbench-home.ts:46   onShow() { this.loadOverview() }
workbench-home.ts:52   const overview = await getConsoleOverview()   ← 真调后端
workbench-home.ts:54   setData({ merchantName, pendingPayments, pendingTasks, todayDelegations })

但:

merchantName        在 wxml 出现 0 次
pendingPayments     在 wxml 出现 0 次
pendingTasks        在 wxml 出现 0 次
todayDelegations    在 wxml 出现 0 次

wxml 里实际渲染的是硬编码:

行内容性质
wxml:5<text class="mh-name">古格川菜馆</text>假商户名
wxml:9<text class="m-num">12</text> 今日核销假数字
wxml:10<text class="m-num">3</text> 待核销假数字
wxml:11<text class="m-num">2</text> 待确认收款涉钱假数字
wxml:21wx:for="{{feeds}}"涉钱假数据真渲染
ts:21'核销凭证 K20260901042' / '高原暖锅套餐 · 服务费 ¥2.99'涉钱
ts:22'收到新的预订需求' / '3 人 · 09 月 05 日午餐'假订单
ts:23'服务费账单已出账' / '2026-09 账期 · 固定月付档位'涉钱

而 wxml 里的「静态演示 · 数据为虚构示例」页脚,已被 WIP-175 删掉了(实测 grep = 0 命中)。

入口是通的,商户真能看到:profile.ts:61(我的页导航「商户工作台」)、preview-index.ts:40/140;app.json:32 已注册。

后端真实返回的字段(merchant_console.py:47-52):

return {"ok": True, "data": {
    "merchant_id": mid, "merchant_name": staff.get("merchant_name"),
    "pending_payments": pending_pays, "pending_tasks": pending_tasks,
    "today_delegations": today_orders,
}}

→ merchant_name / pending_payments / pending_tasks / today_delegations 四个字段后端都有真值,前端取了、setData 了、就是不渲染。

→ 但「今日核销」后端没有对应字段(grep today_redeem|今日核销|redeemed = 0 命中),这个数要展示就得后端补。

为什么必须你决策:这撞的是你自己定的 mock 红线——「涉钱涉气象假数据 = 禁」。而且它是 B 端商户看的钱账页,不是 C 端演示页。三条路代价差很大:

选项做法代价风险
A(最快)wxml 改绑真字段({{merchantName}} 等 4 个)+ 删掉 feeds 整块(后端无动态流接口)+「今日核销」暂不显示或改文案前端 1 个文件,约 10 行界面会瘦一圈(少一个「今日动态」卡片),但零假数据
B(最全)A + 后端 merchant_console.py 补 today_redeemed 字段 + 新增 GET /merchant-console/feeds 动态流接口前端 10 行 + 后端 2 个接口 + 迁移可能要索引后端属小齐/阿仁域,要排期;feeds 涉及核销/账单/订单三表聚合
C(兜底)页脚「静态演示 · 数据为虚构示例」加回去,整页维持演示态1 行与 WIP-175 的治理方向相反(小齐刚把 9 页页脚清零),且商户端挂"数据为虚构"很难看

我的建议:A。理由:① 4 个真字段后端现成,改完立即消灭「商户名/待收款/待办」三类假数据;② feeds 后端根本没有接口,留着只能是假的,删掉是唯一诚实解;③「今日核销」缺字段就先不显示,符合 ROADMAP 的诚实降级原则(「数字缺失走 0 空态不模拟」是 M2 判据 2 的原文);④ C 会让 WIP-175 的治理成果倒退。

⚠️ 顺带一条同源问题:ts:24 注释写「以下字段为 M5 真实数据渲染预留;当前 wxml 冻结,暂不渲染(静态演示态)」——也就是说有人明确知道 wxml 没渲染,还留着注释当挡箭牌,但同时 WIP-175 又把页脚删了。两件事撞一起 = 既无真数据也无免责声明。

② #5 merchant-hotel「预订房间」:我上轮的定性是错的,而且错在跨项目记忆污染——必须更正

我上轮(以及更早)说:「住宿业态按义父定档应『仅展示』,页面上摆一个『预订房间』按钮即使不接真,也是对用户的错误预期引导。」

实测核验结果:这个「定档」在神山秘境项目里不存在。

「住宿仅展示」是渔佳/长岛项目的业态两档定档(住宿/餐饮仅展示,门票/车队/特产走线上预约),我把它错搬到神山秘境了。神山秘境的合规结论恰恰相反:住宿单元素券是明确可做、可线上直售的(A 档,不需旅行社证)。

那 merchant-hotel 现在到底什么问题?——不是「不该有预订按钮」,是这页自身处于矛盾态:

事实证据
页脚挂「静态演示 · 数据为虚构示例」merchant-hotel.wxml:30 ✅ 在位
但「预订房间」按钮跳的是真接口页merchant-hotel.ts:17 goBooking() → navigateTo('/pages/hotel-booking/hotel-booking')
hotel-booking 不是演示页,是 WIP-199 正经做的统一下单流hotel-booking.ts:5 import { createUnifiedOrder, precheckUnified } from '../../services/order';:48-57 precheck → create 真实调用
后端端点真实存在miniapp_orders.py:343 @router.post("/precheck")、:366 @router.post("")、:758 /{id}/pay
但 goBooking 不带 product_idmerchant-hotel.ts:17 URL 无参数
→ 跳过去必然落空态hotel-booking.wxml:9 wx:if="{{!productId}}" → 显示「缺少商品信息 / 从商品列表选择后预订」
全站没有任何页面带参跳 hotel-booking实测:唯一带参跳 booking 类的是 product-detail.ts:92 → order-create?product_id=;hotel-booking 的 4 处入口全是无参
页面还挂着价格wxml:8 ¥180-380/晚、wxml:19 {{item.avail ? '¥'+item.price : ''}}

所以真问题是:用户点「预订房间」→ 跳到一个永远显示「缺少商品信息」的死胡同页。这不是合规问题,是功能断链。而 hotel-booking 本身是好的(同构页 ticket-booking、order-create 都已接线,order-create 有带参入口)。

为什么必须你决策:因为修法取决于你要不要现在就把住宿单元素券卖起来。

选项做法含义
A(接通,推荐)merchant-hotel 的房间列表带上 product_id,goBooking 改成 navigateTo('/pages/hotel-booking/hotel-booking?product_id='+id);同时摘掉页脚「静态演示」(因为开始接真了)住宿单元素券正式开卖(合规上 A 档零门槛,三价体系 §13.11/§14 已背书)。注意 pay 端点注释写「prod 未接微信支付返回 501」→ 下单能成、支付走线下结算文案(texts.ts:497 okNote: '订单已生成,请与商户线下确认结算。'),与「钱不落平台」原则一致
B(断开)merchant-hotel 删「预订房间」按钮,只留「联系商户」(onContact 已实现,弹微信号复制)住宿维持纯名片展示,交易全在线下。改动 1 行
C(先挂起)按钮改文案为「咨询入住」+ 保持跳空态页,或干脆 wx.showToast('即将上线')最省,但留着一个点不动的按钮,体验差

我的建议:B 先做(1 行,立即消除死链),A 作为独立业务决策另排。

理由:A 虽然是合规的(我已核实住宿单元素券属 A 档零门槛),但它等于开一条新的交易线——涉及商品录入、product_id 从哪来、商户怎么上架房间产品、pay 走 501 还是接微信支付。这是 M3「交易+履约闭环」的范畴(验收日 10-08),不该在 M2 期间偷偷开。而现在这个死链是立刻就该堵的漏洞。

⚠️ 附带要你知悉:merchant-hotel 页面有价格(¥180-380/晚)但页脚挂「数据为虚构示例」——如果这价格是真的,页脚就是错的;如果是假的,那这页就不能给真商户用。这个矛盾同 #4 一样,是 WIP-165「静态稿为唯一视觉源头全量重写」留下的系统性尾巴。

③ #8 ROADMAP M1/M2 判据重定基线:M2 验收日 09-17,距今 10 天

事实:M1 判据已被产品决策事实性推翻,M2 判据有两条达不成。

M1(验收日 09-03,早已过期)8 条判据的问题:

#原判据现状判定
1app.json 注册 = 28 页118 页🔴 判据失效(WIP-124/126/165/199 持续加页)
2tabBar iconPath 引本地 png ≥3KBtabBar 是 custom:true + custom-tab-bar/ 组件🔴 判据写法本身错(自定义 tabBar 无 iconPath 字段)
6砍 34 页,pages/ 不得存在 wish-wall / oxygen-map 等oxygen-map/wish-wall 仍在,但属 C端接线验收自测清单-2026-09-04.md §三的 B 类有意挂起(「页脚在位,勿接线」,同批 11 页)🟡 判据该改,代码不该动
820 禁词 grep 用户面 0 命中排除 wxss + 排除注释后仍 11 处命中🔴 见下

M1 判据 8 的 11 处命中逐条定性(这次我用了正确判据:排除 .wxss、排除注释行):

位置命中词上下文性质
admin-content.ts:11第一title:'第一次转山装备清单'✅ 序数词误伤
supplier-transport.wxml:29预订<text class="stat-label">已预订</text>✅ 状态标签(订单状态,非营销词)
preview-index.ts:154预订{name:'住宿预订', path:...}⚠️ 导航名(preview-index 是开发预览页)
preview-index.ts:157预订{name:'组合预订'}⚠️ 同上
profile.ts:75预订{name:'住宿预订'}🔴 用户面(我的页导航列表,真会显示)
profile.ts:78预订{name:'组合预订'}🔴 用户面
agreement.wxml:16唯一高海拔风险免责声明✅ 法律文本误伤
merchant-hotel.wxml:35预订「预订房间」按钮⚠️ 见 §三·②

→ 真违规只有 2 处(profile.ts:75/78 用户面导航名),其余 9 处全是判据粒度问题。上轮我报「100% 命中 139 处」已核实全是 width:100%(wxss),排除后归零。

M2(验收日 09-17)6 条判据实测达成度:

#判据实测判定
1B-011 P0 10 接口前端均有调用 + 失败态降级services/ 层封装 10/10 命中✅ 达成
2首页 Hero 信息真实化(天气5块+信任条4数字+令牌条+推荐横滑全接真,无假数字)home.ts 调 services ✅,未见信任数字硬编码🟡 大体达成,需逐块验
3种草瀑布推广角标 + 详情页唯一 CTA=contact-cardcommercial_flag 已出现 ✅🟡 需验角标渲染
4local 页彻底删评分/价格/距离 + 商户卡挂「线下直结」角标 + 底部「平台不参与交易」注脚¥=0、评分=0、距离=0 ✅ 但「线下直结」角标 = ❌ 缺、「不参与交易」注脚 = ❌ 缺🔴 未达成(合规组件缺失)
5禁词 0 命中 + 12 页六态 typecheck pass禁词真违规 2 处(见上)🟡 差 2 处
6主理人徽章 L2 门槛 ≥30 单真实 SQL🔒 小齐主验(涉 SQL/身份)⚪ 不在我权限

为什么必须你决策:改验收标准 = 改里程碑,这是 ROADMAP 级别的事,且 M2 只剩 10 天。三个层面:

  1. M1 要不要正式关账?它的判据(28 页 / iconPath / 砍 34 页)已全部失效或被产品决策覆盖。建议:宣布 M1 按「事实超越」关账,不回头补——因为 118 页的现实是 WIP-124/126/165/199 一路做出来的,每一笔都有你的派工依据,硬拿 28 页旧判据去砍就是砍掉已完成的工作
  2. M2 判据 4 的两个缺失合规组件(「线下直结」角标 + 「平台不参与交易」注脚)必须补——这不是判据太严,是 B-011 蓝图 :120 明确要求的字段(offline_direct_flag / platform_no_involvement_note),且它是平台经营者定位的合规护身符(三价体系 §11 条核验登记义务的 C 端体现)。10 天内补两个组件是可行的
  3. 禁词判据要不要放宽?我建议改成:
  4. 排除 .wxss(CSS 值不是文案)
  5. 排除注释行(// * <!--)
  6. 第一/唯一 加白名单:后接「次/趟/届/章」等量词、或位于 agreement/免责声明上下文 → 放行
  7. 预订 加白名单:已预订/待预订/预订单 等订单状态词 → 放行;但用户面导航名与按钮文案仍拦
  8. 100% 只拦文案不拦样式(已被排除 wxss 覆盖)

要你拍的:M1 关账方式(事实超越 / 补验 / 重定判据再验一次)+ M2 是否维持 09-17 验收日(判据 4 缺两个组件,判据 5 差 2 处文案)。

④ #9 B 端 H5 M4-M6 要不要开工:后端 5 个路由文件完全不存在

事实:M1-M3 已基本完成,但 M4-M6 不是「前端没做」,是「后端零端点」。

B 端 25 页实测激活状态(判据带自检,防假阴性):

【自检】Bills.tsx(已知真接线)命中 = 3 → ✅ 判据有效
状态页数清单
✅ 真接线9Login PointTasks Bills Orders Workbench Transport Redeem RedeemConfirm DemandDetail
⚠️ 未接线/诚实降级16AttributionBoard DemandHall MyDemands PackageBuilder ProductEdit Profile RedeemBoard RentalOrders RentalWorkbench SessionManage ShareCard StallShop SupplierApply SupplierProducts SupplierQuestionnaire VehiclePackage

对照盘点规格的激活序列:

里程碑现状卡点
M1 登录与身份✅ 已完成(Login 接线、App.tsx:49 从 token 恢复、auth.ts:55-76 expiresAt 持久化)—
M2 工作台与财务🟡 大部分完成(Workbench✅ Bills✅ URL 双错已修;StallShop❌ Profile⚠️只 import 未调)—
M3 订单与核销🟡 3/4(Orders✅ Redeem✅ RedeemConfirm✅;RedeemBoard❌)—
M4 商品与套餐🔴 未动(VehiclePackage❌ PackageBuilder❌ ProductEdit❌)后端缺口
M5 需求与营销🟡 部分(DemandDetail✅;DemandHall❌ MyDemands❌)后端缺口
M6 等后端🔴(Transport 已接 C 端只读端点;SessionManage/Rental×2/Attribution/ShareCard/Supplier×4 ❌)后端零端点

后端缺口实测(backend/app/routers/ 目录,现有 53 个路由文件):

suppliers    路由文件数: 0     ← SupplierApply/SupplierProducts/SupplierQuestionnaire 三页等着
rental       路由文件数: 0     ← RentalOrders/RentalWorkbench 两页等着
attribution  路由文件数: 0     ← AttributionBoard 等着
share-card   路由文件数: 0     ← ShareCard 等着
session      路由文件数: 0     ← SessionManage 等着

全后端 grep supplier 的 @router/prefix → 0 命中。

为什么必须你决策:这不是排期问题,是要不要新开 5 个后端域的问题。

域涉及页面业务含义我的风险提示
suppliers(供应商)3 页供应商入驻申请 + 商品 + 问卷⚠️ 撞合规红线:三价体系 §14.3「借证是双向处罚 + 连带责任」,供应商入驻审核 = 平台核验登记义务(§11 条)。没想清楚核验流程就开这个域,等于给自己挖坑
rental(租赁)2 页租赁订单 + 租赁工作台⚠️ 撞硬边界:三价体系 §15.3「>9 座暂无法办理租赁备案(广州交通局答复原文)→ 只能走包车客运三件套」;「自驾租车绕开包车资质这条路不存在」。转山团队运输普遍用中巴 → 这个域的业务前提可能根本不成立
attribution(归因)1 页分销归因看板⚠️ 撞 GMV 零挂钩:归因看板天然要算「谁带来多少成交额」,而你的铁律是「任何与交易额挂钩字段 = 共同经营表征 = 旅行社证风险」。这个域要做就得设计成按单固定额/年费,不能按 GMV 抽成
share-card(分享卡)1 页分享裂变卡片🟢 风险低,但属增长功能,M2/M3 期间是否值得投入要权衡
session(场次)1 页场次管理🟡 需先定场次业务模型

要你拍的:

我的建议:B + C 的组合——立即开工 M4(后端现成,PackageBuilder/VehiclePackage/ProductEdit 三页能接真);同时我出 suppliers/rental/attribution 三域的合规前置评估(尤其 rental 的业务前提是否成立、attribution 怎么绕开 GMV 挂钩),评估完再决定 M5/M6。

理由:近 3 天全站只有 63 个提交、fix/feat=1.22、docs 占 66%,团队已在补缝收尾期,没有余量开 5 个新后端域;而 M4 是唯一能靠现有后端立即推进的。


四、全站回扫已跑完(只读):#4 是个案,不是系统性问题 —— 好消息

我原以为 WIP-165 全量重写(9ede1ba,90/90 页纯 mock 视觉版)之后,「.ts 接真 / wxml 还是假的 / 页脚已删」是一批页面的三不管态。所以跑了全站回扫,判据:

凡 .ts 里 setData 写入的业务字段名,必须在同名 .wxml 里以 {{字段名}} 出现;否则 = 假数据嫌疑

第一轮命中 38 页 → 收紧(排除 loading/submitting/orderId 等本就不该渲染的内部状态)→ 11 页 → 逐页人工核验后,真违规只有 1 页。

页面命中字段核验结论
🔴 workbench-homemerchantName pendingPayments pendingTasks todayDelegations真违规(= #4,见 §三·①)
⚪ guide-detailpilgrimageCount score wechatId假阳性::53/69 用 .replace('{n}') 把值塞进模板串再渲染(tripsTpl),我的正则抓不到间接渲染
⚪ guide-homepilgrimageCount wechatId假阳性:同上(lapsBadge 走 .replace)
⚪ orders/product-detail/route-detail/play-scene/redemption-codeallOrders/productId/routeId/key/qrPayload假阳性:路由参数与中间变量,本就只做跳转/生成二维码用
⚪ share-codeshareTemplate假阳性:传给 canvas 的模板对象
⚪ soslocating假阳性:定位中状态位
⚪ tibetan-calendarmonth/year假阳性:传给日历组件的属性,非文本插值

另跑反向判据(已接真 + wxml 存在硬编码中文数字)命中 3 页,逐条也全部无罪:

页面硬编码内容核验结论
profile.wxml:199月6日出发 · 3 人同行✅ 永不渲染:外层 wx:if="{{hasTrip}}",而 profile.ts:13/154 hasTrip 恒为 false(诚实降级,行程功能未接)。属安全的死代码
health-check.wxml:9第 2 天 · 海拔约 5,210 m✅ 事实性静态内容(转山线真实海拔),不是虚构业务数据
share-code.wxml:21客人扫码后 7 天内下单即建立归因关系✅ 规则说明文案,不是假数据

所以 §三·① 的 #4 是孤例,不需要开专项回扫工单。这对你决策有意义:修 workbench-home 一个文件(约 10 行)就把这条彻底清掉,不用排大工程。

⚠️ 但留一条观察:profile.ts:154 把 hasTrip 硬写 false(且 catch 分支和成功分支都写 false),说明行程卡片这个功能是有意关掉的。如果将来要开,得先接 trip-detail 的真数据源,否则一开就是假行程。这条不是问题,是待启用的开关,记在这里备查。


五、🟢 我已备好、等一次 push 的两项(不需你决策)

#3 小渔纳入 AGENTS §9.2 登记表

实证(不是我猜的):

git log --format='%an <%ae>' --all | sort -u
→ 小渔 <xiaoyu@kailash.media>        ← 规范署名,符合 §9.2 格式
→ 渔佳新媒体 <yujiaxinmeiti@yujia.media>  ← 另一个署名,不属本项目
f9ac4c0 小渔 <xiaoyu@kailash.media> docs(AUDIT): 代码质量综合审计报告 v2…

报告头写「工作区: /Users/yujiaxinmeiti/Desktop/kailash-worktrees/xiaoyu-real-gz5gz9/」——已推 main 但身份未登记,属 §9.7 接入规范的登记缺口。

改法:§9.2 表格追加一行

| 小渔 | 小渔 | xiaoyu@kailash.media | **审计/质量检测**:代码质量审计(2026-09-07 接入,只查问题不改代码) |

⚠️ 注意职责域要写「审计」而非「验收」——§9.2 现有「方案制定+验收检测」是小齐/波波的岗,小渔自述「审计性质:只查问题,不修复代码」,与验收岗不同(验收要判 PASS/FAIL 并关账)。写成第三个岗位类型更准确。

#7 判据粒度修订(E1 卓玛 + M1 禁词)

两份报告犯的是同一类毛病:判据是词级的,没区分语义角色。

判据误伤实测代价
E1「卓玛」禁用地名「卓玛拉垭口」(Dolma La Pass,5630m 真实垭口)7 处命中里 4 处是地名,真违规只 3 处
M1 禁词「100%」CSS width:100%139 处命中全是样式,排除 wxss 后归零
M1 禁词「第一」序数词「第一次转山」1 处误伤
M1 禁词「唯一」法律免责声明(agreement.wxml:16)1 处误伤
M1 禁词「预订」订单状态词「已预订」2 处误伤 + 2 处开发预览页

修订方案(写进 docs/前端设计核查清单.md 与 ROADMAP 判据附注):

  1. E1 人名判据:改为字段上下文扫描,只拦 operator: / name: / role: / nickname: 等字段值里的禁用名,不拦自然语句。具体规则:「卓玛」后紧跟「拉垭口/拉山口/垭口」→ 判地名放行
  2. 禁词判据三条硬规则:
  3. 排除文件类型:.wxss / .json 不参与(样式值与配置不是用户面文案)
  4. 排除行类型:以 // * /* <!-- 开头的注释行不参与(合规注释、法条引用会被误伤)
  5. 短语级白名单:第一次/第一趟/第一站(序数)、已预订/待预订/预订单(订单状态)、唯一标识/唯一联系(技术/合规用语)、100% 仅在非样式上下文拦
  6. 保留严拦:最低价/全网最低/顶级/最好/秒杀/特价/拼团/众筹/抽奖/返利/返现/担保交易/货到付款/无效退款 —— 这些是《广告法》绝对化用语与金融违规词,无白名单
  7. 判据自检要求(写进验收纪律):任何 grep 类判据必须先用已知违规样本自检命中 > 0,再信「零命中」结论。这条我这轮踩了两次假阴性(B 端接线统计),已写进长期记忆

改法:改 docs/前端设计核查清单.md(v1.3 → v1.4)+ ROADMAP M1 判据 8 附注 + AGENTS 验收纪律追加一条。

这两项我不单独 push——等你对 #2/#6/#8/#9 拍完,我把 §五的两项 + 派工登记(#6/#10)+ ROADMAP 判据修订(#8)合成一次 docs commit(带 [no-deploy] 跳过 staging 部署,因为纯文档),减少冲突面。


附:本单全部事实的复现命令

cd /Users/lean/dev/kailash-bobo

# §三·① workbench-home:真数据取了但 wxml 未渲染
grep -n "getConsoleOverview\|setData" miniprogram/miniprogram/pages/workbench-home/workbench-home.ts
for v in merchantName pendingPayments pendingTasks todayDelegations; do
  echo -n "$v: "; grep -c "$v" miniprogram/miniprogram/pages/workbench-home/workbench-home.wxml; done
grep -n "古格\|feeds\|静态演示" miniprogram/miniprogram/pages/workbench-home/workbench-home.wxml

# §三·② hotel-booking 是真接口页 + goBooking 不带参 = 死链
grep -n "createUnifiedOrder\|precheckUnified" miniprogram/miniprogram/pages/hotel-booking/hotel-booking.ts
grep -n "goBooking" miniprogram/miniprogram/pages/merchant-hotel/merchant-hotel.ts
grep -rn "hotel-booking" miniprogram/miniprogram/pages/ --include="*.ts" | grep -v "pages/hotel-booking/"
grep -n "productId" miniprogram/miniprogram/pages/hotel-booking/hotel-booking.wxml   # 无参→空态

# §三·② 神山无「住宿仅展示」定档;反面:住宿单元素券明确可售
grep -rn "住宿" docs/ --include="*.md" | grep -E "仅展示|只展示|禁.*预订|不接真"
sed -n '337p;342p;640p;111p' docs/三价体系与组包责任边界.md

# §三·③ M2 判据 4 缺两个合规组件
grep -c "线下直结\|不参与交易" miniprogram/miniprogram/pages/local/local.wxml   # → 0

# §三·④ B 端后端 5 域零端点
for k in suppliers rental attribution share-card session; do
  echo -n "$k: "; ls backend/app/routers/ | grep -ci "$k"; done

# §一 P0 修复验证(服务器端)
ssh kailash "python3 /tmp/probe_jwt.py | tail -5"
ssh kailash "curl -s -i -X OPTIONS http://100.64.1.230:8088/api/miniapp/auth/login \
  -H 'Origin: https://evil.example.com' -H 'Access-Control-Request-Method: POST' \
  | grep -i access-control-allow-origin || echo '(无头=已拒绝)'"