# 2026-10-12 课次流程云函数生产发布验收 - 验收时间:2026-10-12T12:12:13+08:00(Asia/Shanghai)。 - 目标:`https://server.xiaoshu.pro`,应用 `7pIbDBJmKx_main`。 - 发布前实时版本:`2026-09-mobile-teaching-v1`。 - 发布后实时版本:`2026-10-11-lesson-workflow-v2`。 ## 已部署云函数 | 路径 | Function ID | 发布后代码 SHA-256 | | --- | --- | --- | | `xiaoshu/ops/gateway-v3` | `BG8QMhGY4f` | `f8af26fc0a61e9d1ce2e9617d1fb87d931961deb69cd3e85b5fa718631887b75` | | `xiaoshu/ops/gateway` | `qp12CGLe9m` | `f8af26fc0a61e9d1ce2e9617d1fb87d931961deb69cd3e85b5fa718631887b75` | | `xiaoshu/app/gateway` | `D3F5Zj8saa` | `d46ea81835f4d5d32a21f011b31cf1b465676d2ae83fb52baea60af16dcaf5e3` | ## 数据库迁移与修复 生产原本缺少课次流程的三张表、相关数据库函数和状态回退保护触发器,也缺少 `xs_appointment_day` / `xs_appointment_valid_at`。已运行修正后的 `scripts/migrate-lesson-workflow.mjs --apply`,补齐依赖和课次流程对象,未回填历史业务数据。 首次真实验收发现 `LessonRecord.pf` 在线上是 numeric 类型。已修复 SQL 的空值判断与评分写入类型,并在本地使用 numeric 类型覆盖首次评价和重复评价。最终再次读取线上函数定义,确认评分修复已实际安装。 ## 验证结果 - `cloud:validate`:11 个函数定义通过语法检查。 - `test:lesson-workflow`:9 / 9 通过,包括 numeric 评分列、失败事务回滚、越权、幂等、日期和旧流程回退保护。 - `smoke-mobile-teaching-flow.mjs`:生产隔离账号 40 项检查全部通过,输出 `ONLINE_SMOKE_PASSED`、`FIXTURES_CLEANED`。 - `migration_status.implemented` 已包含 `app_lesson_complete` 和 `app_lesson_review`。 - 真实课次详情已验证 `allowedActions` 为数组、`blockedReason` 为字符串、`validToday` 为布尔值、`serverNow` 为可解析时间。 - 同日提前开课、并发结课仅扣一次、报告可读、学生仅首次评价生效、后台唯一上课记录与消费预留对账均通过。 - 取消预约、其他用户越权、旧客户端回退均拒绝;充值与结课并发余额无覆盖、最后一节课竞争和退款预留互斥均通过。 - 本次临时迁移/核验函数已删除,隔离业务记录和用户已清理。审计记录保留。 ## 证据与边界 部署前函数备份、数据库函数定义与最终验收日志保存在本机受限目录 `/Users/mac/.local/state/xiaoshu/cloud-releases/2026-10-12-lesson-workflow-v2/`。不包含执行凭据。 本次完成的是生产云函数与数据库课次流程发布、接口和事务验收。没有执行前端发布、真机验收或旧系统同步桥部署。