Files
Jyotisha/docs/tasks/PROGRESS-rectification-nearest-boundary-opening-20261012.md
T

9.3 KiB
Raw Blame History

PROGRESS · 生时校正开场说最近一次换段(2026-10-12,BUG-1307)

任务书:TASK-rectification-nearest-boundary-opening-20261012.md。分支 codex/rectification-nearest-boundary-opening-20261012,基线 e6baff95。只 commit,不 push。未部署。

一句话

开场会说填的时间离最近一次换段差几分钟、两边哪几件事不同。2 / 5 / 10 分钟都没有跑 77 例,阈值没有选定,选题开关默认关。打分没改。Skill 仍是 10.0.33。

阈值

没有采用。候选 2 / 5 / 10 分钟都没跑持久回放,不能说哪一档过了红线。

代码里的 NEAREST_BOUNDARY_PROBE_THRESHOLD_MINUTES = 5 只在开关打开之后才用,注释写明未采纳。它不是选定结果。

开关:环境变量 RECTIFICATION_NEAREST_BOUNDARY_PROBES 必须等于 on 才改变出题顺序,默认关。关着的时候,开场不说「接下来先问这几件」,避免承诺一件没有做的事。

77 例回放

没跑。持久回放要本地 Postgres 和逐例星历,这一轮不启动。因此红线未核,按任务书让步:只上呈现,选题留开关默认关。没有为了过门改打分。

修后基线(docs/research/varga_resolution_persisted_onoff_after_fix_2026_10_01.json,段序开,生产默认窗口不超过 61 分钟;dataset_sha256 ab365a3e3f4953d4b538f2c0889dc98ab89444a28340c3a7b29e2a864cdd687a)这一轮没有重测:

窗口 提问数 D9 头段命中 D10 头段命中 真值段保留
±10 开 355 71 67 76
±30 开 418 51 55 76

红线是 ±10 / ±30 真值段保留都不低于 76 / 76,D9、D10 头段命中不低于上表。任一格下降就要停。

阈值 问题数 ±10 真值段保留 ±30 真值段保留 ±10 D9 头段 ±10 D10 头段 ±30 D9 头段 ±30 D10 头段
2 分钟 未跑 未跑 未跑 未跑 未跑 未跑 未跑
5 分钟 未跑 未跑 未跑 未跑 未跑 未跑 未跑
10 分钟 未跑 未跑 未跑 未跑 未跑 未跑 未跑

公开 AA 盘上傍晚 40 分钟里,离换段最远是 3 分钟。那是一张盘的测量,不是 77 例的门,也不拿来选阈值。

句数上限

项 原值 新值 原因
isAcceptableOpeningBody 句数上限 3 3 新句放在原来两句中间,没有放宽上限

没有新句时,默认开场两句与改前逐字相同。

为什么没有 10.0.34

OpeningPolicy 仍要求正文两句大白话,旧版本目录没有改。开场正文由服务端在模型写完后整段换成 openingSpokenBody,不靠模型现编,也不靠 Skill 正文。历史 case 仍读 10.0.33(BUG-621)。RECTIFICATION_SKILL_VERSION 仍是 10.0.33。

呈现

  • 新模块 scripts/rectification/nearest_boundary.py 只读 window_scan 的 transitions。真正换段是前后星座不同。展示层和星座没变的行忽略。距离按钟面环形分钟算,一样近时留更早的钟点。不改 window_scan 的返回形状。
  • 开场扫描走现有 POST /api/rectification/v5/varga-segments。target_charts 仍是调用方要的盘;只有带了 boundary_charts 和 recorded_time 才多一个 nearest_boundary。默认缓存键不变。minutes.signs 仍只含请求的目标盘。D12 仍不能当目标盘。
  • 人话对照:婚恋、工作、住处、学业、子女、父母、钱、身体。本命上升不说成一件事。客户端只用层名白名单重写主题,不采用接口里的主题字符串。
  • 申报方式 period_only、没有记录钟点、或扫描失败:原来两句,不挡开场。
  • 窗口内没有换段:你填的时间附近这些盘都不换,先从经历开始。
  • 有换段:你填的时间离最近会换的地方不到 1 分钟,两边不一样的是父母、工作。 或 差 N 分钟。不足 1 分钟说「不到 1 分钟」。

选题开关

打开之后,现有增益排序不变,再把领域落在这条分界上的题排到前面,其余保持刚才的顺序。不新增题型,不改分数。问完这些再接原来的顺序。period_only、没有记录钟点、找不到换段、距离大于未采纳的 5 分钟、或没有领域时,不改顺序。

开关关闭时,排序函数返回原来的数组,同输入同分、同顺序。

没改的

decision_policy.py、闸门常量、4 件 3 域、采用门、交付卡档位、window_scan 输出、page.tsx、use-rectification-surface.ts、咨询入口三个文件、scripts/jyotish_api_server.py、数据库、.gitea、BUG-1306、BUG-1308、Skill 10.0.33 正文。Home() 状态数没增加。

测试

Python 用 Anaconda C:\Users\74082\anaconda3\python.exe,PYTHONHASHSEED=0。本仓没有 .venv,没有往仓库里 pip install。

项 结果
tests/test_rectification_nearest_boundary.py 4 项通过。公开 AA 盘覆盖段内、紧贴换段、窗口内无换段。默认分盘响应没有 nearest_boundary;带上新字段后与 window_scan 的最近换段一致
tsc --noEmit 通过,退出码 0
npm run lint 0 error,125 条 warning,都在原有文件上
开场 / 文案合同 rectification-nearest-boundary-opening-20261012.test.ts、rectification-opening-plain-20260926.test.ts、agent-voice-copy-contract.test.ts 共 31 项通过
快速门 --profile quick 编译、JSON、能力清单、片段审计、解释源清单、BPHS 不变量通过。pytest 1067 passed、1 skipped、1 failed。失败的是 tests/test_rectification_v5_services.py 里全天 block_scan 必须在 15 秒内完成,整门里用了 38.0 秒。这个文件没改。单独再跑通过。算这台机器在长套件里的负载,不算本单回归。门禁因此停在 pytest,没有接着跑它自己的 npm test / lint / build
CI=1 npm test 4915 项,通过 4774,失败 100,cancelled 0。失败都落在没改过的文件上,见下

这 100 条是 Windows 基线,不是本单回归:没有 Docker 起不来 Postgres;没有创建符号链接的权限(Skill 运行时别名 EPERM);没有 WSL 的 bash;部分路径被拼成 G:\G:\... 因而找不到目录;迁移文件在这台机器上读出来的是路径而不是正文;一条打字拒绝测试的子进程退出码是 null(超时或被杀掉),没有进到本单改过的出题参数。本单新增的开场测试在这 4774 条里面。

next build:失败。Turbopack 报 frontend/node_modules 这个 junction 指到文件系统根外面。这是已知环境缺口,没有改 Next 配置,也没有删 junction。首屏 gzip 和 / 是否仍为 Static 因此没有在这台机器上量。

真机

docs/testing/rectification-nearest-boundary-opening-20261012.md。公开盘两档:19:01 是「不到 1 分钟」,19:04 是「差 3 分钟」。公开记录 19:15 在默认前后 15 分钟窗口里是「差 2 分钟」。窗口内不换那一句,界面选不出那么窄的窗,由自动化测试覆盖。

F1 / F2(2026-10-12,修复单,未推送,未部署)

任务书 TASK-rectification-1012-batch-fix-20261012.md 的 F1、F2。做在本分支上。不标 resolved。77 例持久回放(scripts/research/varga_resolution_persisted_replay.py)没跑,也不把下面的对照说成那次回放通过。

证明

改函数之前,用测试里已有的公开盘请求(不带 ayanamsa)跑了一次 scan_varga_segments,响应写在仓库外:D:\Users\74082\AppData\Local\Temp\rectification-varga-segments-omitted-ayanamsa-prechange.json。改完之后同一请求与这份捕获逐字段相同。显式 "raman" 与省略相同,缓存键仍是 58c936a2ccdbb5e339c79f9c43b990d556b627230cd5d5d200f3fcaaea85fad4。同一窗口的 lahiri 换了缓存键,也换了星座。版本字符串仍是 rectification-varga-segments-v1。node_mode 仍是 mean,请求体不收这个字段。

打分、decision_policy、闸门、scripts/jyotish_api_server.py 都没改。

开场句

最近换段的层里有 d1 时,同一句先写「这里连本命上升都换」,再写其余人生事。没有其余事时整句停在这里。只有本命上升在换,不加「接下来先问这几件」。句数上限仍是 3。不换、不到 1 分钟、附近这些盘都不换、只知道大概时段,都保持原来的句子。

留下的一句

frontend/src/lib/ayanamsa.ts 的 AYANAMSA_SWITCH_HINT 仍写「生时校正目前仍固定按 Raman,之后的版本才会跟着这项设置走。」修复单没有授权改这句。frontend/tests/ayanamsa.test.ts 没改。设置页这句和现在的扫描行为不一致,留给后面的单。

既有断言

没有改既有断言,所以没有「原值 / 新值 / 原因」三栏。新测试加在 tests/test_rectification_nearest_boundary.py 和 frontend/tests/rectification-nearest-boundary-opening-20261012.test.ts。

这轮测试

项 结果
pytest tests/test_rectification_nearest_boundary.py tests/test_varga_segments_api.py -q --tb=line 22 通过(5 + 17),失败 0
npx tsx --test tests/rectification-nearest-boundary-opening-20261012.test.ts 7 通过,失败 0,cancelled 0
npx tsc --noEmit 通过,退出码 0

没跑 next build,没跑全量 npm test,没跑 77 例回放。