chore: gate production postgres tuning and taro handoff

This commit is contained in:
Codex
2026-07-01 04:27:19 +08:00
parent 6bdb2a175a
commit 69b4d3b62d
14 changed files with 702 additions and 44 deletions

View File

@@ -0,0 +1,108 @@
# Taro 生产接入检查清单
更新时间2026-07-01
这份清单给前端同事和后续 AI 使用。目标是让 `apps/taro` 的 H5 学生端、租户后台、平台后台按当前 Supabase/PostgreSQL 新后端上线,后续再扩展微信小程序。旧小程序前端文件在 `F:\project\参考\旧题库小程序前端文件`,只作为视觉、交互状态和微信平台能力参考,不继承旧 PocketBase 直连、旧 token、旧安全假设。
## 总原则
- Taro 负责 UI、路由、交互、公开 runtime config 和 Supabase Auth session。
- 复杂业务默认调用 `apps/api`,不要让页面直接写 Supabase 业务表。
- Supabase client 可用于 Auth session、可选 Realtime、公开只读 view/table 或经过 RLS/RPC 评审的低风险功能。
- 支付、短信、微信/QQ OAuth、订单、权益、激活码、优惠券、CRM、AI、导入、私有对象存储签名必须走 `apps/api`、Edge Function 或 worker。
- 页面代码不得覆盖 `Authorization``x-tenant-id`,不得发送 `x-user-id`
- 前端只做可见性优化,权限最终以后端/RLS/RPC 校验为准。
## 三套 H5 发布目录
建议三套 H5 分域部署,不共用 web root
| 门户 | 推荐域名 | 构建命令 | runtime-config |
| --- | --- | --- | --- |
| 学生端 | `https://www.example.com` 或租户自定义域名 | `npm run build:taro:h5:student` | `apps/taro/deploy/h5-student.runtime-config.example.json` |
| 租户后台 | `https://admin.example.com` | `npm run build:taro:h5:tenant` | `apps/taro/deploy/h5-tenant-admin.runtime-config.example.json` |
| 平台后台 | `https://console.example.com` | `npm run build:taro:h5:platform` | `apps/taro/deploy/h5-platform-admin.runtime-config.example.json` |
每个发布目录根部必须放置独立的 `runtime-config.json`,只允许公开字段:
```json
{
"portal": "student",
"apiBaseUrl": "https://api.example.com",
"supabaseUrl": "https://supabase.example.com",
"supabasePublishableKey": "sb_publishable_xxx",
"tenantCode": "optional-tenant-slug"
}
```
禁止出现在 `runtime-config.json`、Taro 环境变量、源码和构建产物中的内容:
- Supabase service role / secret key。
- 数据库连接串。
- 短信、OAuth、支付、对象存储、CRM、AI 的 secret/private key。
- 真实用户 token、测试 access token、平台本地管理 key。
## 生产接入步骤
1. 配好三套 H5 的 `runtime-config.json`,确认 `apiBaseUrl``supabaseUrl` 都是 HTTPS。
2. H5 登录优先使用 Supabase Auth access token迁移期 `tk_` session 只用于本地或内网联调。
3. 学生端先走完整路径:解析租户、登录、选择地区、进入题库、创建练习、答题、收藏、交卷、查看报告、错题/收藏复习、背单词、知识手册、资料预览/下载、视频授权、会员下单、订单轮询。
4. 租户后台先走完整路径:权限加载、学生运营、题库导入/任务/问题行、公共题库采纳、营销中心、财务运营、主题发布、角色模板和成员绑定。
5. 平台后台先走完整路径:平台权限加载、创建租户、租户详情、账务资料、订阅/账单/用量、公共题库授权、平台员工、审计和告警。
6. 所有真实 provider 密钥只配置在后端 `.env``app_private.tenant_secrets``app_private.platform_secrets` 或生产 KMS/Vault不进入 Taro。
7. 对象存储私有资源必须通过 `content_assets` 台账和后端短签名;前端只展示签名 URL、过期时间、`watermark.traceId` 和水印容器。
8. 支付页面只展示后端返回的支付参数、订单状态和权益结果;金额、套餐、优惠、权益最终以后端返回为准。
## 必跑检查
页面、API service、路由、runtime config 或发布目录有任何变化时,至少运行:
```bash
npm run check:taro
npm run test:readiness
npm run smoke:taro:h5
npm run smoke:taro:h5:interaction
node scripts/taro-h5-release-guardrails-test.js --require-dist --require-runtime-config
```
后端、RLS、provider、对象存储或生产配置有变化时还要运行
```bash
npm run readiness:production
npm run readiness:production:db
npm run smoke:auth:remote
npm run test:rls
npm run audit:runtime
```
正式上线前,三套 H5 严格发布证据、真实 Auth/RLS、真实 provider 抽样、对象存储控制、支付对账、PostgreSQL 严格调参证据和真实数据压测都要写入本地 `docs/refactor/production-launch-evidence.json`,再运行:
```bash
npm run launch:gate -- --evidence docs/refactor/production-launch-evidence.json
```
## 小程序后续兼容重点
小程序不能直接照搬 H5 假设,进入真机前要单独验收:
- `@supabase/supabase-js` 的 fetch、storage、URL、token refresh 兼容性。
- 如果兼容成本高,小程序登录只调用 `apps/api/auth/*`,由后端换取可信 session。
- 微信支付容器、订阅消息、分享参数、小程序码 tenant/referral 场景。
- KaTeX/公式渲染替代方案、题图资源字段化、PDF 预览能力和下载限制。
- 网络错误、弱网续练、本地缓存恢复、切后台/回前台 token 刷新。
## 旧前端参考边界
可以参考旧项目:
- 学生端刷题流程、答题卡、题型展示、背单词卡片、知识手册阅读、个人中心视觉。
- 微信小程序分享、支付、授权和登录交互经验。
- 租户后台/运营后台字段含义和常用工作流。
不能继承旧项目:
- PocketBase SDK 直连和旧 collection 命名。
- 前端保存或拼接用户 id、租户 id 来绕过后端鉴权。
- 前端直接写订单、权益、学习记录、错题、收藏、导入任务。
- 旧头像上传/第三方头像同步;学生头像只保留男女预设。
- 默认排行榜请求;排行榜只作为租户显式开启后的活动能力。