WIP-206 审计 v3 — 小渔

🕐 时效标注(2026-09-13 文档治理):近期设计件,口径以 TASKS 现行与契约 v1.3 为准。
⛔ 本文档已过时(2026-09-09),现行以 docs/reports/WIP-206-audit-v4.md 为准。
审计日期: 2026-09-07
审计范围: A1 护栏复检 + A2 台账复检 + 小冈 58 文件纯增量复检
基线: FETCH_HEAD = a1f80bf(最新 main)

一、总汇表

审计项判定严重度
A1 护栏 — 写入路径强制执行FAILP0
A1 护栏 — 防护种子用户污染FAILP0
A1 护栏 — is_test 传播完整性PARTIAL FAILP0
A1 护栏 — 护栏中间件FAILP2
A2 台账 — 迁移总数一致性FAILP1
A2 台账 — service_fee_records 列差异PASS(已识别)—
A2 台账 — 权威查询命令PASS—
小冈 58 文件 — 域边界合规PASS—
小冈 58 文件 — 纯增量PASS—
小冈 58 文件 — auth.ts mock_token_ 清理PASS—
小冈 58 文件 — 涉钱假数据FAILP0

综合判定:3 FAIL P0 + 2 FAIL P1/P2 + 5 PASS


二、A1 护栏复检(WIP-216)

FAIL-1:写入路径护栏未强制执行

根因:security.py L33 的 get_current_user SELECT 语句未包含 is_test 列:

SELECT id, openid, phone, nickname, status, token_version FROM users WHERE id=$1

下游所有通过 Depends(get_current_user) 获取 user dict 的端点没有 is_test 键,被迫自行用 openid.startswith("dev_") 判断。

受影响端点(5 个文件,trial 用户写入 is_test 永远为 false):

文件行号错误写法
demand.py373is_test = bool(user.get("openid", "").startswith("dev_"))
merchant_console.py384,432同上(涉钱域!service_fee_records 永远 is_test=false)
kora_routes.py48同上
scenes.py38同上
emergency_contacts.py28同上

正确做法(miniapp_orders.py L413-414 已正确实现):

is_test_row = await pool.fetchrow("SELECT is_test FROM users WHERE id=$1", uid)
is_test = bool(is_test_row and is_test_row["is_test"])

FAIL-2:种子用户污染问题未修复

FAIL-3:is_test 传播不完整

已正确传播的端点(从 users 表读 is_test):miniapp_orders、packages、quotes、tasks_full、miniapp_workbench_redeem

未正确传播的端点(用 openid 前缀判断):demand、merchant_console、kora_routes、scenes、emergency_contacts

完全缺失 is_test 的 INSERT:tasks_api.py(credit_task_claims)、content.py、feed.py

证据命令

grep "SELECT.*FROM users" backend/app/security.py
grep -n "trial_openids" backend/sql/050_trial_users_guardrail.sql
grep -rn 'startswith.*dev_' backend/app/routers/ --include="*.py"
grep -rn 'is_test.*users.*WHERE' backend/app/routers/ --include="*.py"

三、A2 台账复检(WIP-217 / WIP-220)

PASS-1:service_fee_records 列差异已确认

PASS-2:权威查询命令已存在

sudo docker exec kailash-pg psql -U yos -d kailash -tAc "SELECT count(*) FROM schema_migrations"
ls /srv/kailash/sql/[0-9][0-9][0-9]_*.sql | wc -l

FAIL-4:台账严重滞后


四、小冈 58 文件纯增量复检

PASS-5:域边界合规

PASS-6:纯增量

PASS-7:auth.ts mock_token_ 清理

login() 函数已删除 mock fallback,失败即诚实 reject ✅

FAIL-8:涉钱假数据残留

文件内容严重度
redeem-log.ts:13-19K20260901042, 68/50/45 硬编码核销记录P0
workbench-settings.ts:13-16扎西/卓玛/达瓦/央金硬编码员工名册P0

证据命令

grep -rn "mock_token_\|游客小张" miniprogram/miniprogram/utils/auth.ts
grep -rn "K20260901042\|古格川菜馆" miniprogram/miniprogram/pages/ --include="*.ts"

五、修复优先级

P0 — G08 上传前必须完成

  1. security.py 补 is_test 列(一行改动,效果全局)
  2. 种子用户回填 SQL(先备份 users 表)
  3. 清除 redeem-log.ts / workbench-settings.ts 涉钱假数据

P1 — 本轮迭代内

  1. 统一 5 个端点的 is_test 来源(从 user["is_test"] 取值)
  2. 台账补记 049/050 + 权威查询命令固化

P2 — 长期

  1. 考虑全局中间件统一 is_test 传播
  2. migrate.sh 增加执行后自动台账校验

*报告结束。署名:小渔 2026-09-07*