fix(rectification): honor persisted probe focus
Independent Staging Quality Gate / validate (push) Successful in 14m51s
Independent Staging Quality Gate / publish (push) Successful in 17m0s

This commit is contained in:
Jesse_Chen
2026-08-26 22:17:15 +08:00
parent 60cbe8a75e
commit 7d6b88c886
7 changed files with 122 additions and 32 deletions
+48
View File
@@ -6059,3 +6059,51 @@
- 复发自:BUG-355validate 跳过 `next build`publish 才暴露类型错误)
- 修复版本:待发布
## BUG-398 | 已持久化点选题因不是全局最高探针被误判 stale
- 状态:resolved(本地修复,待发布)
- 首次发现:2026-08-26
- 最近更新:2026-08-26
- 影响面:`applyChoiceWithoutEvidence`、生时纠正 A/B/C/D 点选、推断 revision ledger
- 用户现象:页面刚读取到的当前点选题提交后返回 `stale_probe`,即使 `focusId``probeId` 与 revision 都没有变化。
- 触发条件:数据库已持久化的 active focus 不是当前推断状态按信息增益重新计算出的第一名探针。
- 根因:点选入口已经校验 active focus,但 `applyChoiceWithoutEvidence` 又用 `nextProbe(state)` 建立第二套“当前题”真源,把合法的低信息增益已打开题判成过期;探针 schema 的多个 identity 字段又是逐个命中,互相矛盾时仍可能落到其中一个探针。
- 修复:移除对重新计算全局最高探针的限制;只要显式 `probe_id``semantic_key``candidate_split_hash` 同时匹配同一个 state probe 就允许应用。显式 identity 矛盾或找不到时仍返回 `stale_probe`;无显式 identity 才保留原 domain/highest-gain fallback。ledger 的 open probe 与 revision 校验不变。
- 验证:`npm_config_cache=/tmp/jyotisha-npm-cache npx --yes tsx --test tests/rectification-inference-machine.test.ts`14/14 通过。
- 防复发:已持久化 focus 可以回答低于全局最高信息增益的探针;互相矛盾的 schema identity 必须 fail closed。
- 相关记录:BUG-367
- 复发自:无
- 修复版本:待发布
## BUG-399 | 感情区分探针可落在未成年年份
- 状态:resolved(本地修复,待发布)
- 首次发现:2026-08-26
- 最近更新:2026-08-26
- 影响面:`scripts/rectification/event_probes.py`、relationship `dasha_boundary` 探针
- 用户现象:感情卡可能询问出生后很早、明显不符合“认真关系进入或结束”语义的年份。
- 触发条件:候选在未成年年份附近存在高区分度 Vimshottari 或 Narayana 边界,且该年份没有已记录事件挡住。
- 根因:boundary 候选只使用全局 `birth_year + 5` 下限,没有应用 relationship catalog 的年龄下限。
- 修复:relationship 的 dasha boundary 从 `birth_year + age_lo` 开始;不使用 `age_hi` 作硬上限,避免排除成年后的真实关系事件。其他允许童年事件的领域保持原范围。
- 验证:`/opt/anaconda3/bin/python3.12 -m pytest tests/test_rectification_event_probes.py -q`,15/15 通过;回归锁定未成年 relationship 年份被排除且 family 童年边界行为不回退。
- 防复发:relationship boundary 不得早于 catalog `age_lo`;不得把 `age_hi` 当事实有效期。
- 相关记录:BUG-379
- 复发自:无
- 修复版本:待发布
## BUG-400 | 已打开点选题时 Agent 只确认事实,没有问出题干
- 状态:resolved(本地提示契约补强,待发布)
- 首次发现:2026-08-26
- 最近更新:2026-08-26
- 影响面:生时纠正 Agent 系统提示、口语与 choice card prompt 投影
- 用户现象:工具已经持久化下一道点选题,但 Agent 正文只说已记下事实,没有自然语言追问;卡片只能显示服务器的“年份 · 事件家族”锁标签。
- 触发条件:工具返回 `open_question` / `current_question` 后,模型只输出确认语,没有输出带问号且符合锁定年份/领域的问句。
- 根因:BUG-391/392 已保证服务器不代写问题并优先投影 Agent 问句,但提示只要求“自己写一句自然语言追问”,没有明确禁止该轮仅确认事实。
- 修复:补强现有同一条提示:有 open/current question 时,本轮正文必须包含对应自然语言追问,不能只回复“记下了”或只做事实确认。不新增服务器题干模板,不改变 A/B/C/D 评分语义。
- 验证:`./node_modules/.bin/tsx --test tests/rectification-v9-agent.test.ts tests/rectification-choice-card.test.ts`,42/42 通过;静态契约锁定强制追问语句,既有 Agent 问句投影测试保持通过。
- 防复发:有 active open question 的轮次必须口语问出同一年份和事件家族;服务器锁标签仍只作为 fail-closed 显示,不得伪装成 Agent 问句。
- 相关记录:BUG-391、BUG-392
- 复发自:BUG-391
- 修复版本:待发布