Compare commits

...
+87
View File
@@ -0,0 +1,87 @@
# 生时纠正:先停用问卷和选边(2026-11-15,Claude)
Bug 编号:BUG-1896。
## 背景
产品负责人 11-15 在 staging 真机上走完一遍问卷(#279 上线后),反馈:
- **选项残缺:** 选项只有能区分候选段的年龄(例如事业盘只有「26 岁」),用户 30 岁创业就找不到对应选项;年份只能在该年龄覆盖的一两年里调。
- **选项样式难看。**
- **答完没有结果:** 结论永远是「按你填的 05:00」和「现有信息不足以确认更准确的出生时间」。
最后一条是根本问题。#260 的回测显示,按答题缩窄比随机还差;占星师 11-14 裁定不得缩窄,#279 把旧窄范围也撤回了。所以现在答题不可能改变结果,问卷只是让用户白答。
负责人 11-15 决定**先停用问卷**。等占星师下一轮(日期区间计分、新留出集)验证有效后再开,届时重做选项 UI。
## 改法
### 一、盘点(先做,写进 PROGRESS)
列出生时纠正里所有会向用户提问、或让用户选边、选段的入口,每条写清:
- step 名、组件名、对应 API 及参数;
- 现在从哪里进入(首页「重新纠正」、首次进入、换范围后等)。
已知的入口:
- 自适应问卷:`chart_range` → `chart_question` → `final`;
- v2 轮次:`choose` 里的 `RoundStep`;
- v1:`ChooseStep` → `ResultStep`,含「换另一侧」;
- `astrologer-stage.tsx`:「感情里你更像哪一种?」等。
盘点中发现的其他入口同样处理。
### 二、页面(只改 `frontend/src/components/chart-choice/` 和对应测试)
首次进入和「重新纠正」都直接显示结果页,不出任何题目。结果页即现在问卷答完后的结果页(真机截图第 4 张)去掉「你提到的事」,内容依次为:
1. 标题「按你填的 05:00」(没填时间:「按范围中点 HH:MM」)。
2. 「范围 04:45–05:15」。没填范围时保留现有的范围选择(`RangeChips`)。
3. 「现有信息不足以确认更准确的出生时间。」
4. 范围条和参照时间。
5. 「按 05:00 看六张盘」六行,文案沿用 #279 的规则:
- 默认窗口:「前后 15 分钟试算里没有变化」;
- 用户填了范围:「在你填的范围里没有换座」;
- 会换座:「范围内会换座(hh:mm:ss 换)」。
6. 唯一的主按钮「用 05:00」,保存 `reported_time_default`(没填时间时为 `window_midpoint_default`)。保存后回首页。
如果范围内没有分界线,`certain` 分支照旧。
还要去掉:
- 「开始答题」「先到这里」「下一题」「都没有」「记不清」;
- 年龄选项、哪一年步进器;
- 「换另一侧」「更像哪一种」;
- 「你提到的事」。
问卷相关组件和代码**保留不删**,只是不再渲染。用一个常量开关(例如 `RECT_QUESTIONNAIRE_ENABLED = false`)集中控制,方便以后重开。
### 三、API
- `/api/chart-choice/adopt` 和 `/api/chart-choice/packet` 收到问卷或选边类请求时,返回 4xx 并带明确说明(code 例如 `questionnaire_paused`)。问卷或选边类请求包括 `chart_answers`、`questionnaire`、`answers`、`overrideSide`、`resolved` 非空、`resumeRecordId` 续答等,以盘点为准。
- `adaptive` 只取默认结果(不出题),保存仍走现有 `reported_time_default` / `window_midpoint_default`。
- `restore_default`、`certain`、范围选择保持可用。
- 不改迁移、不改引擎评分、不删旧枚举。
### 四、历史和下游
- 已有记录照旧显示,#279 的「已停用」逻辑不动。
- 已有的明确手动选边、#229 选边记录继续按 #279 的规则读取,本单不改。
- 报告、年运、聊天、合盘不受影响,不碰 `scripts/report_render/`。
## 验收
- **测试:**
- 首次进入与「重新纠正」直接渲染结果页,没有题目、没有「先到这里」「下一题」「更像」「换另一侧」「你提到的事」;
- 唯一按钮「用 HH:MM」,保存 `reported_time_default`;没填时间的保存 `window_midpoint_default`;
- 没填范围时可选范围,保存后范围写回(BUG-1649 行为不变);
- API 拒绝问卷和选边请求,返回 4xx 并带 code;
- 开关打开时现有问卷测试仍通过(证明代码保留可用)。
- **截图(390 宽):** 填了时间和范围;只填时间(默认 ±15);没填时间;首页已有记录。
- **门禁:** Python quick gate、chart-choice 相关前端测试、`tsc`、`npx eslint .` 0 errors。
- **文档:**
- `docs/BUG_HISTORY.md` 新增 BUG-1896(只追加这一节):现象、根因(问卷在不能缩窄的规则下没有产出)、修复、验证、防复发,关联 BUG-1886、BUG-1890;
- CHANGELOG 一行;
- 更新 `frontend/DESIGN.md` 和 `frontend/docs/VOICE.md` 里涉及问卷的段落;
- 写 PROGRESS。