修复(#4): 抽奖 8 宫格默认值 + 100500 msg 脱敏

Closes part of HIF-4 (Stage 2 前端集成反馈 F8 + F10)

F8 (P1): Activity.GridSize 默认值 9 → 8
- migration 02160 ALTER DEFAULT 8(幂等)
- 02156 up.sql 注释同步更新
- admin/lottery.go 兜底值 9 → 8
- 布局 A:3x3 挖中心,中心是抽奖按钮不是奖品

F10 (P1): wrapInternal msg 脱敏
- 内部错误 err.Error() 只写日志,不外传
- 用户端 msg 只带通用文案 (xerr.MapErrMsg lookup)
- 回归护栏:TestWrapInternal_ScrubsErrorDetailsFromMsg + TestWrapInternal_PreservesCodeErrors

CI 全绿;无 API 契约变更;F9 独立在 PR #45 处理
This commit is contained in:
2026-07-12 19:55:25 -07:00
committed by GitHub
parent 980e5adb90
commit cce147108c
7 changed files with 82 additions and 5 deletions
@@ -19,7 +19,7 @@ CREATE TABLE IF NOT EXISTS `lottery_activity` (
`start_at` DATETIME NOT NULL COMMENT '开始时间',
`end_at` DATETIME NOT NULL COMMENT '结束时间',
`status` VARCHAR(16) NOT NULL DEFAULT 'draft' COMMENT '状态:draft / running / paused / ended',
`grid_size` TINYINT NOT NULL DEFAULT 9 COMMENT '前端九宫格数量(3/6/8/9/12',
`grid_size` TINYINT NOT NULL DEFAULT 8 COMMENT '前端九宫格数量(HIF-4 F8:布局 A 3×3 挖中心 → 8 个奖品格;老 schema 是 9',
`eligibility` JSON NOT NULL COMMENT '参与门槛(AND/OR 嵌套规则)',
`chance_sources` JSON NOT NULL COMMENT '次数来源列表(daily_signin / new_subscription / invite_success / manual_grant',
`unmet_action` VARCHAR(32) NOT NULL DEFAULT 'block' COMMENT '未达门槛策略:block / show_reason',
@@ -0,0 +1,4 @@
-- 02160 down: 恢复 lottery_activity.grid_size 默认值到 9
--
-- 与 up.sql 对称,只回退默认值,不动数据。
ALTER TABLE `lottery_activity` ALTER COLUMN `grid_size` SET DEFAULT 9;
@@ -0,0 +1,15 @@
-- 02160 抽奖 Stage 2 F8lottery_activity.grid_size 默认值从 9 改成 8
--
-- 前端与产品对齐后确认布局 A:3×3 挖中心 → 中心是"点击抽奖"按钮(不是奖品格),
-- 其余 8 格挂奖品。因此 grid_size 的默认值应为 8,不再是 9。
--
-- 兼容性:
-- * up.sql 的 CREATE TABLE 已在 02156 里跑过,MySQL 的 CREATE TABLE IF NOT EXISTS
-- 不会改动既存表结构。所以老部署的 lottery_activity.grid_size 默认值仍是 9
-- 必须用一条独立的 ALTER 迁移把默认值改过来。
-- * 已有数据(grid_size=9 的老活动)不动 —— ALTER DEFAULT 只影响新插入行且未提供
-- grid_size 的场景;Go 侧 admin/lottery.go 的兜底也已配套改成 8。
--
-- 幂等:ALTER COLUMN ... SET DEFAULT 在 MySQL 8.0+ 是幂等的(重复执行等值 SET
-- 不会报错),重跑安全。
ALTER TABLE `lottery_activity` ALTER COLUMN `grid_size` SET DEFAULT 8;