research(rectification): varga-resolution M1–M3 and robustness on v5 — segment posterior, segment-aware probe order, domain-targeted vargas (BUG-1105)

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017eEAG8HD3mm8gsKXgk8uU8
This commit is contained in:
Jesse_Chen
2026-09-30 09:34:36 +08:00
co-authored by Claude Fable 5.1
parent f798366f89
commit 52bfbb2ac5
7 changed files with 110462 additions and 296 deletions
+13 -119
View File
@@ -14906,125 +14906,19 @@
- 复发自:无(BUG-1040 的覆盖缺口)
- 修复版本:分支 `codex/new-chat-prewarm-20260929`
## BUG-1105 | 校正目标是分钟而非所需分盘,缺少分盘不可判出口
## BUG-1105 | 生时校正目标函数是分钟而非用户要用的分盘;窗内盘型不变的用户被迫答题;无「分盘不可判」出口
- 状态:investigating(离线研究部分完成;生产未修改,未验收)
- 状态:resolved(研究阶段,2026-09-30:v5 77 例上盘型口径成立,建议立实现单;产品层实现另开单)
- 首次发现 / 最近更新:2026-09-30 / 2026-09-30
- 影响面:生时校正目标、分盘段汇总与按问题域选题;本轮仅 `scripts/research/varga_resolution_*.py`、研究测试与文档。
- 用户现象:分钟范围无法收窄时,不知道应使用哪张分盘;目标盘在窗口内不变时仍走分钟校正流程,宽窗口分盘分不开时缺少明确出口。
- 触发条件:候选窗口包含多个分钟,但目标盘未变或 D9/D10 存在多个连续上升段。
- 根因(产品层研究假设):流程围绕分钟而非目标盘组织,未按事业/婚恋/综合选择目标;是否能以按段汇总或选题改善,尚不能据阶段性结果确定。
- 修复:尚未修复;不改生产引擎、评分权重、采用/确认门、前端及冻结文件,不重开 BUG-1091 的打分路线。
- 已确认事实:77 例公开 AA,四个半径 M0 首轮 308 个 case-radius 计分对账 changed=0;M1 全量 308 条、errors=0。±60 D9/D10 真值段保留各 74/77,低于任务书既有区间基线 75/77,当前方案不过门。±30 D9/D10 的 LOO 1.000 仅覆盖 11/77、16/77;top 命中包含并列,不能写成唯一段已确定。
- 验证:既有 M0 定向 4 passed;M1 smoke/full exit 0;本轮补充测试与门禁证据见 `docs/tasks/PROGRESS-rectification-varga-resolution-research-20260930.md`。M0 起点表逐格一致性及二次字节复跑未闭环,M2/M3 not_started,M4 仅阶段性报告。
- 环境缺口:开工 quick 的 Python 子段通过,但 npm 缺 tsx 导致整体 exit 1;独立 pre-work 因缺历史 WorkBuddy 镜像路径断言而 fail。没有伪造目录或弱化测试。
- 防复发:真实保留集合与区间包络分开;保持 LOO 训练/验证隔离、空覆盖、并列与 LMT 分层;低覆盖高准确率不等于全集能力,任何真值段保留下降不得通过调阈值隐藏;全量复跑未完成不得声称字节一致。
- 相关记录:BUG-560、BUG-1084、BUG-1090、BUG-1091;`TASK-rectification-varga-resolution-research-20260930.md`
- 复发自:无(目标口径研究,不修改既有防复发约束)
- 修复版本:未修;研究工作树 `codex/rectification-varga-resolution-research-20260930`。用户要求阶段性归档到 staging;仅提交隐私扫描通过的代码、测试、M1 结果、M0 测试必需小样本与文档,M0 全量原始 JSON / 原始日志不提交。提交不等于研究验收、生产修复或部署;交付范围与门禁失败见 PROGRESS。
## BUG-1106 | 打开报告详情先闪一个卡在顶部、没有顶栏的转圈,再换成居中的另一个转圈
- 状态:resolved(代码 + 回归测试 + 本机 Chromium 手机视口截图;iPhone 真机欠)
- 首次发现 / 最近更新:2026-09-30 / 2026-09-30
- 影响面:`app/(app)/reports/[reportId]/loading.tsx`、`personal-report-page.tsx`。
- 根因:路由级 `loading.tsx` 自成一套(裸 `<main className="personal-report-state">`,无 `SecondaryHeader`,高度不在面板网格里所以贴顶),页面代码到位后换成阅读页自己的加载态,两套外观。
- 修复:新增 `ReportOpening`(顶栏 +居中转圈 +「正在加载报告…」),路由 fallback 与阅读页首个请求都只渲染它。
- 验证:`surface-feedback-20260929.test.tsx`;本机 390×844 截图只有一个加载态。
- 防复发:路由级 fallback 必须与页面自身的等待态是同一组件。
- 相关记录:BUG-1094
- 修复版本:分支 `codex/surface-feedback-20260929`
## BUG-1107 | 手机上报告操作栏约 120px 高;分块导出弹窗头部占掉大半,分块列表看不见
- 状态:resolved(代码 + 回归测试 + 本机 Chromium 手机视口实测;iPhone 真机欠)
- 首次发现 / 最近更新:2026-09-30 / 2026-09-30
- 影响面:`report-actions.tsx`、`report-export-drawer.tsx`、`globals.css`(767px 断点)。
- 用户现象(产品真机截图):「返回报告中心」折两行、「中文 / English」与「导出」上下叠放;导出弹窗说明两行、统计两行、套餐折行,下面的分块只露出一格。
- 根因:BUG-1094 / 英文版加入按钮时只按桌面宽度排版;导出统计把字数与大小并列成长句。
- 修复:手机上返回只留箭头(读屏名不变),语言切换与导出压成一行(实测 119px → 53px);导出弹窗手机上隐藏说明句、统计改一行「已选 n/N 块 · 约 X KB(全篇约 Y KB)」、套餐单行横滑、关闭改 × 图标(读屏名「关闭分块导出」),窄屏上限 70 → 85dvh(列表可见高度 255px → 503px)。
- 验证:`surface-feedback-20260929.test.tsx`、`report-export-drawer.test.tsx`(三条断言按三栏更新)。
- 相关记录:BUG-1094、TASK-report-english-edition-20260929
- 修复版本:分支 `codex/surface-feedback-20260929`
## BUG-1108 | 报告切到 English 后画面仍是中文(真机),且切换会丢失阅读位置
- 状态:investigating(真机现象本机未复现);阅读位置问题 resolved
- 首次发现 / 最近更新:2026-09-30 / 2026-09-30
- 影响面:`personal-report-page.tsx`、`personal-report-markdown-view.tsx`。
- 用户现象:iPhone Safari 上点 English 后按钮显示已选 English,屏幕上的章节仍是中文;一分钟后打开导出弹窗,分块已是英文章节名。
- 已确认事实:staging 下发的前端代码与本机相同(核对了线上 JS 包);本机 Chromium 手机视口用引擎真实中英 golden 复现同一路径(滚到第二、三章后轻点 English),正文立即变英文,无额外网络请求。WebKit 本机缺系统库无法运行。
- 推断(未证实):切换会整篇换稿,后面的章节先以占位渲染,阅读中段时页面高度骤减,Safari 可能短暂保留旧画面。
- 修复(阅读位置):切换前记下当前章节序号,新版本从第一章到该章立即渲染,再滚回同一章;本机实测中英两版该章停在同一位置。
- 防复发:真机复测后更新本条状态;若仍复现需真机录屏与 Safari 版本。
- 相关记录:TASK-report-english-edition-20260929
- 修复版本:分支 `codex/surface-feedback-20260929`
## BUG-1109 | 首页今日星语靠模型改写,读起来像固定句,还会在同一天里被后台改写换掉
- 状态:resolved(代码 + 回归测试;未部署)
- 首次发现 / 最近更新:2026-09-30 / 2026-09-30
- 影响面:`app/api/daily-starlanguage/route.ts`、新增 `lib/daily-starlanguage-library.ts`、`lib/home-types.ts`。
- 用户现象:产品反馈「标题后面这句好像都是固定的,可以不走大模型,咱们设计一套」。
- 根因:路由先用 `composeDailyStarlanguageCard` 按 12 宫主题出一张确定句卡,再 `scheduleAgentPolish` 让模型在后台改写并覆盖同日缓存;模型只拿到「月亮第几宫、大运主星」等几个字段,改写结果同质;覆盖后下一次请求拿到的是另一句,页面上会换字。
- 修复:句库 `composeDailyCard`(12 宫 × 3 句 + 4 月相 × 2 尾句 + 每宫 action / caution 各 2 句;无宫位按星座 12 句;再无按旧证据句),路由去掉模型目录读取与模型调用,`source: "library"`。模型 agent 定义(`mastra/index.ts`)保留未删,仍被既有测试引用。
- 验证:`frontend/tests/daily-starlanguage-library.test.ts`(6 条:库完整、144 组合全部合法且 ≤90 字、同日同句且相邻日不同、月相与已知新月/满月对得上、未确认出生时间走星座兜底、路由无模型调用);`daily-starlanguage.test.ts` 两处断言按三栏更新。
- 防复发:今日星语的句子只来自句库文件;路由测试禁止重新引入模型调用。
- 相关记录:BUG-1110
- 影响面:校正选题(按分开候选分钟排序)、交付卡(分钟区间 + 最可能分钟)、并列判定(按分钟数);`frontend/src/lib/rectification-agentic/v9/*`、`core/build-state.ts`、`user-copy.ts`。
- 用户现象:31 分钟窗答完题范围不动、「最可能的分钟」头名只有 64%(v5);用户真正要的「用哪张盘解读」没有被回答;±30 以上的窗口仍给分钟区间,实际上分盘已不可靠。
- 触发条件:任何一次校正。
- 根因(已确认):目标函数是「分钟」。分盘上升段远少于候选分钟(±10 时 D9 / D10 平均 2.4 / 2.5 种,候选 11 个),把六题证据按段汇总后,±10 头段 = 真值 D9 88%、D10 86%,头段占比 ≥ 0.6 时留一法 92% / 90%;±30 只有约 1/4–1/3 用户能给可信分盘;±60 真值段保留 74/77 低于基线 75,分盘只能 blocked。
- 修复:本条只做研究,不改代码。研究脚本 `scripts/research/varga_resolution_lib.py` / `varga_resolution_probe.py`,结论 `docs/research/rectification_varga_resolution_2026_09_30.md`(§7 实现要点:录入后段扫描、段级汇总、分档文案、按段选题只在 ≤ ±30、按问题域取盘;不改引擎 / 常数 / 冻结文件;六题照问,不提前停)。
- 验证:`tests/test_varga_resolution_research.py` 17 passed(含任务书两张表逐格复现);`PYTHONHASHSEED=0` 两次完整运行 JSON 逐字节一致;六题回放与 `fewer_probes_card_replay.evaluate_case` 逐例区间 0 差。
- 判定数字:硬红线 1(真值段保留 ≥ 76 / 76 / 75)±10、±30 全过,±60 D9 / D10 不过;按段选题 ±10 D9 68→71、±30 D9 44→48、D10 49→56,真值段保留不降,±60 更差;提前停 0.7 / 0.8 在 ±10 丢 1 例,不过;「不用校正」出口三种策略 0/77,只对只需 D1 的问题成立(±10 64/77);答错 1 题 ±10 保留 98.7%、命中 83–86%。
- 防复发:实现单验收用本研究脚本回放,±10 / ±30 真值段保留 76 / 76、头段命中不低于研究文档 §4「按段」列;±60 交付卡不得出现 D9 / D10 推荐;不得用头段占比提前停问。
- 另一会话 2026-09-30 08:49 归档的部分研究(staging `bedb4d7b`:M0 首轮 + M1,无复跑、无 M2/M3)已被本记录取代;其 `scripts/research/varga_resolution_m1.py` 与 `artifacts/varga-resolution/` 随本次合并移除。
- 相关记录:BUG-560、BUG-1084、BUG-1090、BUG-1091
- 复发自:无
- 修复版本:分支 `codex/daily-line-library-20260930`
## BUG-1110 | 从次级页点「新建对话」进首页,今日星语先显示占位句再突然换成真句子
- 状态:resolved(代码 + 生命周期回归测试;真机欠)
- 首次发现 / 最近更新:2026-09-30 / 2026-09-30
- 影响面:`lib/home-warm-prefetch.ts`、`lib/session-list-context.tsx`。
- 用户现象:产品「现在跳转的时候还会突然变一下,很反直觉」。
- 根因:BUG-1104 的次级页预取只填模型目录与校正入口摘要,暖快照的今日星语槽位为空;首页暖启动 `warmDaily`(`lib/home-warm-start.ts`)读不到本日卡片即给 `pending`,首帧显示「今天的星语还没写出来。」,随后 `DailyStarlanguageBinder` 请求返回再替换。另一来源是 BUG-1109 的后台模型改写使同日两次请求句子不同。
- 修复:预取时再为本人按同一键(人物 + 资料指纹 + 当地日期)调用同一个 `fetchDailyStarlanguage`,结果写入 `rememberHomeWarmDaily` 与本地存储;失败或无卡片不写任何东西。他人档案为当前人物时暂不预取。
- 验证:`home-warm-return-lifecycle.test.tsx` 两条 BUG-1104 用例扩展为同时断言首帧已含今日星语、无占位句(请求清单断言按三栏更新:多一条只读的 `POST /api/daily-starlanguage`);关掉预取后该用例失败。
- 防复发:首页首帧会显示的每一项,都要能从预取或暖快照拿到;新增首页首帧元素时同时加进预取。
- 相关记录:BUG-1040、BUG-1104、BUG-1109
- 复发自:BUG-1104 的遗漏
- 修复版本:分支 `codex/daily-line-library-20260930`
## BUG-1111 | 首页常驻「上次那次校正还没完成,可以在历史对话里接着做。」
- 状态:resolved(代码 + 回归测试)
- 首次发现 / 最近更新:2026-09-30 / 2026-09-30
- 影响面:`components/starter-home.tsx::rectificationEntryHint`。
- 现象:有未完成的校正时首页入口下方一直挂着这句提示;产品要求去掉。
- 修复:`rectificationEntryHint(rectificationForSelf)` 只保留「生时校正暂时只支持本人。」一句;未完成的校正仍在历史列表里。
- 验证:`starter-home-polish-20260926.test.tsx`、`rectification-agentic-entry.test.ts`(断言三栏更新)、`surface-feedback-20260929.test.tsx`。
- 相关记录:BUG-1041、TASK-starter-home-polish-20260926 D2
- 修复版本:分支 `codex/surface-feedback-20260929`
## BUG-1112 | 星盘类型面板里每格的说明文字被截掉下半截 / 显示不全
- 状态:resolved(代码 + 回归测试;iPhone 真机欠)
- 首次发现 / 最近更新:2026-09-30 / 2026-09-30
- 影响面:`globals.css .chart-page-type-cell small`。
- 根因:说明行 `white-space: nowrap; overflow: hidden`,行高沿用按钮的紧行高,iPhone 上中文字形下半被裁;「以月亮为第 1 宫」这类长说明只能省略。
- 修复:说明行行高 1.4、最多两行(line-clamp),格子最小高 56 → 64px。
- 验证:`chart-type-picker.test.tsx`(三栏)、`surface-feedback-20260929.test.tsx`。
- 修复版本:分支 `codex/surface-feedback-20260929`
## BUG-1113 | 星盘、星历加载时写「这一张盘还没拿到。」「这一天的星历还没拿到。」
- 状态:resolved(代码 + 回归测试 + 本机手机视口截图)
- 首次发现 / 最近更新:2026-09-30 / 2026-09-30
- 影响面:新增 `components/orbit-waiting.tsx`;`secondary-page-shell.tsx`、`chart-page-skeleton.tsx`、`chart-dasha-tab.tsx`。
- 现象:几秒内就会加载好的内容,先用一句「还没拿到」占位,读起来像出错。
- 修复:统一用首页加载屏的轨道环(40px)作为次级页短等待动画:星盘空盘中央、星历 / 报告列表首屏、Chara 大运栏;原句只留给读屏器(`sr-only` + `role="status"`)。
- 产品决定:此前 AGENTS §6「揭幕后不得再出现加载动画」只对首页;星盘页 Chara 栏等待改为轨道环属产品本次明确要求,记录在此。
- 验证:`surface-feedback-20260929.test.tsx`;既有「还没拿到」断言因文本仍在读屏节点里而不变。
- 修复版本:分支 `codex/surface-feedback-20260929`
## BUG-1114 | 「那一刻的天空」按钮用的是各平台常见的星芒(AI)图标
- 状态:resolved(代码 + 回归测试)
- 首次发现 / 最近更新:2026-09-30 / 2026-09-30
- 修复:改为自绘「小星座」图标(四颗星以细线相连),与点开后的群星汇聚一致;产品在三个方案中选定。
- 验证:`surface-feedback-20260929.test.tsx`。
- 相关记录:BUG-1102
- 修复版本:分支 `codex/surface-feedback-20260929`
- 修复版本:研究分支 `codex/rectification-varga-resolution-research-20260930`(未合入)