Python pytest passed. npm test stopped the gate with 120 Windows failures. The two new consult tests passed. Not pushed.
6.7 KiB
PROGRESS · 对话卡同源修复(2026-10-09)
分支 codex/consult-card-full-source-20261007。已 rebase 到 origin/staging 19bae8a8,本地提交 b216b286 之上还有未推送的修复。状态:执行中。F6 未通过。未推送,未合入,未上线。
结论
F1 到 F5 已按修复单做完。F6 未通过,不让步:严重冲突从 1 增到 3,对照组误报仍是 0。卡体量最大 18,193 字符,没有内部路径。建议上限仍留在 20,000。未推送。
修复
| 项 | 做法 |
|---|---|
| F1 缓存日期 | 键加入参照日期(请求的 today 或 transit_date,否则服务端当天)。当前大运、行运、年盘用这同一个日期。schema consult-full-data-cache-v2。超过两天的文件删除。BUG-1296。 |
| F2 模型只看数值 | path、check 留在服务端。缺口留一个状态字。超过 800 字符、没有值的占位不送进模型。受冲仍只计数。BUG-1297。 |
| F3 行星相位 | 资料包抄上引擎的 house_aspects。出处 references/signs-and-houses.md 第六节。七颗行星投射,罗睺计都只做目标。BUG-1298。 |
| F4 金样 | frontend/tests/fixtures/consult-card-facts-20261009.json。命令:python scripts/research/freeze_consult_card_facts_fixture.py。参照日 2026-09-27,岁差 raman,交点 mean。BUG-1299。 |
| F5 预热 | 星盘新建、修改、本人资料保存成功后,after() 后台预热。缺日期、时间、经纬度或时区则跳过。不挡住保存。不新增 API 类方法。BUG-1300。 |
scripts/jyotish_api_server.py 10,963 行,粗护栏 11,224。类方法数没有增加。page.tsx 的 useState / useRef 没有增加。系统提示文件没有改。KP 仍不上卡。年运卡仍读 tajika_yogas。
卡片体量
组卡方式与合同测试相同:生平 golden 工作流加上冻结的领域事实。父母、婚恋、健康、事业用本领域路由;其余领域借用事业路由的本命底,体量略偏大。
| 盘 | 最大领域 | 字符 | 十二个领域是否都 ≤ 20,000 | 内部路径 |
|---|---|---|---|---|
| 乔布斯 | 财富 16,921 | 最大 16,921 | 是 | 无 |
| 奥巴马 | 财富 16,313 | 最大 16,313 | 是 | 无 |
| 泰勒 | 财富 18,193 | 最大 18,193 | 是 | 无 |
没有 worksheets.、core_chart.、"check"。
上限建议:临时上限维持 20,000。最大实测 18,193,留约 1,800 字符。不降到 18,000,因为只量了三张公开盘。卡加清单的临时上限 26,000 仍够用:改后事业工具结果约 18,290 到 19,600 字符。
模型对比
模型 deepseek-flash。key 只在当次命令的环境变量里,没有写入仓库、日志正文或本文。
生平回测:9 位公开人物 × 父母 / 婚恋 / 健康 / 事业 × 2 次。改前不挂事实,用当时的 golden 卡。改后挂参照日 2026-09-27 的事实。引擎仍是 golden 桩。
| 项 | 改前 | 改后 |
|---|---|---|
| 份数 | 72 | 72 |
| 失败 | 0 | 0 |
| 空答 | 0 | 0 |
| 墙钟 | 862 秒 | 921 秒 |
| 平均总耗时 | 46.2 秒 | 49.9 秒 |
| 平均输入 token | 27,984.9 | 28,655.8 |
| 其中缓存 token 平均 | 22,519.1 | 21,240.9 |
| 平均回答 token | 9,311.8 | 9,328.0 |
| 平均思考 token | 8,736.4 | 8,736.1 |
| 平均卡字符 | 6,918.7 | 14,129.8 |
| 最大卡字符 | 7,561 | 16,281 |
| 禁句 | 0 | 0 |
| 性别代词 | 0 | 0 |
| must_not 原文处数 | 7 | 4 |
must_not 是线索,不是阅读结论。改前 7 处、改后 4 处,都落在「可能不在身边,也可能人在」这种两头都写的句子上。按这个口径,两头都写不算对照组误报,也不算严重冲突。改前阅读:严重冲突 1,就是泰勒事业第 2 次把公开职业写成不靠频繁曝光;这一条同时记行业冲突。对照组误报 0。改后 18 份事业回答里没有「不靠曝光 / 幕后 / 不是台前 / 顾问 / 技术」。
改后有 1 份(乔布斯父母第 1 次)多调了一次家庭工具再回到父母。当时进程里的脚本还没放行家庭域。源码现已对家庭、子女返回空,不抛错。这一份留在 72 份的平均数里。
首字时间是另一次直连,不是上面的代理循环。同一套系统提示(本次读到 25,165 字符;本轮没有改提示词文件),用户问题相同,只换工具结果。流一开始就中止,记的是第一个思考 token。空答 0。
| 盘 | 改前首字 | 改后首字 | 改前工具结果 | 改后工具结果 |
|---|---|---|---|---|
| 乔布斯 | 1,064 毫秒 | 769 毫秒 | 11,988 | 18,290 |
| 奥巴马 | 707 毫秒 | 485 毫秒 | 11,839 | 18,836 |
| 泰勒 | 465 毫秒 | 642 毫秒 | 11,776 | 19,600 |
| 平均 | 745 毫秒 | 632 毫秒 |
样本只有 3 题,第一发最慢。卡变大约一倍,首字没有变慢,72 份的平均总耗时多 3.7 秒。
阅读
同一口径:两头都写的「可能不在,也可能人在」不算误报,也不算严重冲突。直接把行业写成另一类,或把公开人物写成不靠曝光、往里走、不靠场面,记严重冲突,同时记行业冲突。
| 项 | 改前 | 改后 |
|---|---|---|
| 通过 | 71 | 69 |
| 错过 | 0 | 0 |
| 读反 | 0 | 0 |
| 严重冲突 | 1 | 3 |
| 对照组误报 | 0 | 0 |
| 行业冲突 | 1 | 3 |
| 空话凑段 | 3 | 2 |
改前的 1 条是泰勒事业第 2 次。改后仍是泰勒事业第 2 次,另外齐达内事业两次都把公开的球星路子写成靠专业判断、把事情说清楚,或写成说得清、写得明、算得出,并压低外面认不认你这一头。红线不允许严重冲突升高。F6 停在这里,没有改评分,也没有改系统提示。
本机已跑
| 检查 | 结果 |
|---|---|
tsc --noEmit |
0 |
npm run lint |
0 error,125 条原有 warning |
| 增长合同 + 对话卡 pytest | 18 通过 |
| 隐私标记(已暂存当时的代码与金样) | 通过 |
| 前端合同测试(金样组卡、预热) | 通过 |
快速门(本机,2026-10-09)
编译、JSON、审计和核心 pytest 通过。pytest 615 秒。门禁在 npm test 停下,退出码 1。lint 和 next build 没有跑到。
npm test:4997 项,通过 4877,失败 120,取消 0。本轮新增的两条都在通过里:金样组卡、保存后预热。
这 120 条不是 Linux 验收里的那 24 条。本机没有数据库,迁移和 Postgres 测试失败。首页预热和「新建对话」那一组是本机既有的页面生命周期失败。另外 6 条是这次门禁命令带了技能占位符预加载,路径被拼成双份盘符,文件找不到。那是命令环境,不是这批业务改动。
没有在 Linux 上重跑全量 pytest。不把这份 Windows 名单说成 Linux 基线。没有登录态。真机清单结果列为空。