fix(consult): date the full-data cache and slim the model card
The cache key now includes the request date, and files older than two days are removed. The model card keeps values only. Parashari aspects are copied from the engine. Saving a chart warms the packet without blocking the response. Biography severe conflicts rose from 1 to 3, so this is not accepted for merge. Not pushed.
This commit is contained in:
@@ -17375,3 +17375,83 @@
|
||||
- 相关记录:BUG-1293。
|
||||
- 复发自:无。
|
||||
- 修复版本:本分支提交。未部署。
|
||||
|
||||
## BUG-1296 | 对话资料包缓存键没有参照日期
|
||||
|
||||
- 状态:resolved(分支 `codex/consult-card-full-source-20261007`,本地未推送、未部署;有针对性回归测试)
|
||||
- 首次发现 / 最近更新:2026-10-09 / 2026-10-09
|
||||
- 来源:修复单 F1。Claude 验收:缓存键不含日期,后一次命中把当前大运、行运和年盘冻在第一次计算的那天。
|
||||
- 影响面:普通对话使用的完整资料包缓存。同一张盘隔天再问,可能仍用第一天的当前大运。
|
||||
- 现象:`build_full_data_packet` 用运行时的当天日期填写 today、transit_date 和 target_year,缓存键里没有这个日期。
|
||||
- 触发条件:同一出生资料在不同日期命中已有缓存文件。
|
||||
- 根因:键只含出生资料、岁差、交点模式和引擎版本。schema 为 `consult-full-data-cache-v1`。
|
||||
- 修复:schema 改为 `consult-full-data-cache-v2`。键加入参照日期:请求里的 today 或 transit_date,都没有则用服务端当天。当前大运、行运、年盘用这同一个日期。超过两天没写过的缓存文件会删掉。旧的 v1 文件不再当作命中。
|
||||
- 验证:`tests/test_consult_card_full_source.py` 同一张盘两个日期键不同、两天以前的文件被删、当天的文件还在;资料包的 today、transit_date、target_year 是同一个日期。三张公开盘每个领域的当前大运主星与资料包里的 current_dasha.lord 一致。
|
||||
- 防复发:上述测试。重复跑之前先删掉这两把自己的缓存文件,避免上次留下的文件被当成命中。
|
||||
- 相关记录:BUG-1251。
|
||||
- 复发自:无。
|
||||
- 修复版本:本分支提交。未部署。
|
||||
|
||||
## BUG-1297 | 送给模型的判断表带上内部路径,整卡超过两万字符
|
||||
|
||||
- 状态:resolved(分支 `codex/consult-card-full-source-20261007`,本地未推送、未部署;有针对性回归测试)
|
||||
- 首次发现 / 最近更新:2026-10-09 / 2026-10-09
|
||||
- 来源:修复单 F2。Claude 验收:乔布斯事业卡由真实事实端到端组出后为 37,507 字符,判断表 27,159,参与清单 5,447。每格带有 status、path、check、value,内部路径进了模型。
|
||||
- 影响面:普通对话送给模型的证据卡。服务端副本仍保留路径,供核对。
|
||||
- 现象:模型看见的卡超过临时上限 20,000 字符,并含有 `worksheets.`、`core_chart.` 和 `"check"`。
|
||||
- 触发条件:事实层接到证据卡之后,判断表和参与清单原样放进 claim_cards。
|
||||
- 根因:模型视图没有去掉机器字段。长叶子超过 800 字符时会收成没有 value 的占位,这些占位也进了卡。
|
||||
- 修复:模型视图只留数值。缺口、挡住、未给出数值的占位留一个简短状态,或整行不送。path、check 留在服务端组装结果里。同一颗星的后几行只留身份、角色、出处和受冲计数。宫位行已经写过的八分法,行星行不再重复。受冲仍只计数,不设门槛。数值不改写、不四舍五入、不翻译。
|
||||
- 验证:三张公开盘十二个领域,用生平 golden 的工作流组卡。最大 18,193 字符(财富)。没有 `worksheets.`、`core_chart.`、`"check"`。`frontend/tests/consult-card-full-source-20261007.test.ts` 锁住乔布斯、奥巴马、泰勒这条路径和 20,000 上限。
|
||||
- 防复发:该测试。手写事实的组装测试只锁组装规则,并在注释里写明它不代替金样。
|
||||
- 相关记录:BUG-1160、BUG-1161、BUG-1221。临时上限仍是卡 20,000、卡加清单 26,000。
|
||||
- 复发自:无。
|
||||
- 修复版本:本分支提交。未部署。
|
||||
|
||||
## BUG-1298 | 十二个领域的行星相位整列记成 blocked
|
||||
|
||||
- 状态:resolved(分支 `codex/consult-card-full-source-20261007`,本地未推送、未部署;有针对性回归测试)
|
||||
- 首次发现 / 最近更新:2026-10-09 / 2026-10-09
|
||||
- 来源:修复单 F3。Claude 验收:参与层因为路由器没有把行星相位列成一层,十二个领域都是 blocked。
|
||||
- 影响面:普通对话判断表的「照」。不新造罗睺、计都向外的相位。
|
||||
- 现象:判断表上没有抄到引擎已经算出的 house_aspects。
|
||||
- 触发条件:领域事实从资料包取「照」。
|
||||
- 根因:出处在 `references/signs-and-houses.md` 第六节,引擎在 `calc_house_aspects`。资料包组装时没有把这份结果抄进 worksheets。
|
||||
- 修复:在 `build_pl9_style_export_packet` 之后,把 `modules.aspects.house_aspects` 抄到 `worksheets.graha_drishti`。事实层按行星抄「被谁照」和「照哪些宫」。七颗行星为投射星;罗睺、计都只做目标。目录出处改为该节。缺这一层时写 gap,不写 blocked。
|
||||
- 验证:三张公开盘十二个领域的 `parashari_aspects` 状态都是 value,出处以 `references/signs-and-houses.md` 开头,并且至少一颗星有照到的宫或被照的星名。
|
||||
- 防复发:`tests/test_consult_card_full_source.py` 的公开盘测试。
|
||||
- 相关记录:BUG-1155。
|
||||
- 复发自:无。
|
||||
- 修复版本:本分支提交。未部署。
|
||||
|
||||
## BUG-1299 | 对话卡合同测试用手工事实,不是引擎金样
|
||||
|
||||
- 状态:resolved(分支 `codex/consult-card-full-source-20261007`,本地未推送、未部署;有针对性回归测试)
|
||||
- 首次发现 / 最近更新:2026-10-09 / 2026-10-09
|
||||
- 来源:修复单 F4。合同测试的形状必须来自真实引擎。
|
||||
- 影响面:`frontend/tests/consult-card-full-source-20261007.test.ts`。手写组装测试保留,只锁组装规则。
|
||||
- 现象:测试自己拼 facts,体量上限量在一张空的 claim card 上。
|
||||
- 触发条件:跑这组前端合同测试。
|
||||
- 根因:当时没有一份冻结的领域事实金样。
|
||||
- 修复:新增 `frontend/tests/fixtures/consult-card-facts-20261009.json`。生成命令(仓库根目录):`python scripts/research/freeze_consult_card_facts_fixture.py`。参照日 2026-09-27,岁差 raman,交点 mean。含三张公开盘和一张虚构盘,各十二个领域。乔布斯、奥巴马、泰勒的体量断言改接到生平 golden 工作流。
|
||||
- 验证:该前端测试读金样并组出真实模型卡。断言改动写了原值、新值、原因。
|
||||
- 防复发:测试直接读这份金样。重新生成用上面的命令,不手改数字。
|
||||
- 相关记录:BUG-1297。
|
||||
- 复发自:无。
|
||||
- 修复版本:本分支提交。未部署。
|
||||
|
||||
## BUG-1300 | 新建或修改星盘后没有预热对话资料包
|
||||
|
||||
- 状态:resolved(分支 `codex/consult-card-full-source-20261007`,本地未推送、未部署;有针对性回归测试)
|
||||
- 首次发现 / 最近更新:2026-10-09 / 2026-10-09
|
||||
- 来源:修复单 F5。前序任务书要求星盘建好或出生资料改过之后,后台预热当天的资料包。
|
||||
- 影响面:星盘新建、星盘修改、本人出生资料保存。保存响应不等待计算。
|
||||
- 现象:第一次提问才开始算整包,用户等在对话里。
|
||||
- 触发条件:保存成功,且日期、时间、经纬度、时区都有。缺任何一项则不预热,也不补一个时间。
|
||||
- 根因:保存路由没有调用咨询计算。
|
||||
- 修复:保存成功后用 `after()` 安排一次 `consult_card_warm_only` 请求。Python 在原有咨询入口里提前返回预热状态,不新增处理类方法,响应里不带资料包。改出生资料后键变了,旧文件不会被当成命中(BUG-1251)。参照日期也在键里。
|
||||
- 验证:`frontend/tests/consult-packet-warm-20261009.test.ts` 检查请求体,并确认调用方不等待未完成的计算。`tests/test_consult_card_full_source.py` 确认预热响应没有资料包。`tests/test_api_server_growth_contract.py` 通过,类方法数没有增加。`jyotish_api_server.py` 10,963 行,粗护栏上限 11,224。
|
||||
- 防复发:上述两个测试。lint 对该测试 0 error。
|
||||
- 相关记录:BUG-1251、BUG-1296。
|
||||
- 复发自:无。
|
||||
- 修复版本:本分支提交。未部署。
|
||||
|
||||
@@ -0,0 +1,103 @@
|
||||
# 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 通过 |
|
||||
| 隐私标记(已暂存当时的代码与金样) | 通过 |
|
||||
| 前端合同测试(金样组卡、预热) | 通过 |
|
||||
|
||||
## 还没跑完 / 不能写成通过
|
||||
|
||||
- 快速门含 `npm test` 和 `next build`。跑完再记。Windows 上 `next build` 可能被工作树的 `node_modules` 联接挡住,那是环境缺口,不改业务代码去迎合。
|
||||
- 没有在 Linux 上重跑全量 pytest。不把 Windows 的失败名单说成 Linux 那 62 条基线。
|
||||
- 没有登录态。真机清单 `docs/testing/consult-card-full-source-fix-20261009.md` 结果列为空。
|
||||
@@ -130,7 +130,7 @@
|
||||
| 任务书 | 进度 | 主题 | 状态 | 落点 |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| `TASK-consult-card-full-source-20261007.md` | `PROGRESS-consult-card-full-source-20261007.md` | **对话数据卡与报告同源 + 领域综合判断表**:事业卡只有约 7,600 字符、无自然代表星、无大运主星关系、D10 联动只能补取、补取上限 1;全 12 领域;综合判断表、参与清单(不止 D1/D9,含精度闸)、补取 3 次、资料目录均已确认;KP 不上卡、不联网、不接书籍语料;排在 sync6 与报告单之后 | 验收未通过(`35dafd1e`,见 fix-20261009) | `codex/consult-card-full-source-20261007` |
|
||||
| `TASK-consult-card-full-source-fix-20261009.md` | — | **对话卡同源修复**:缓存键无日期致当前大运冻结、整卡 37.5K(每格带内部路径)、星照整列 blocked(资料库其实有出处)、前端测试手写数据、无预热;合入前用临时 key 跑模型 A/B 与生平回测 | 待领取 | — |
|
||||
| `TASK-consult-card-full-source-fix-20261009.md` | `PROGRESS-consult-card-full-source-fix-20261009.md` | **对话卡同源修复**:缓存键无日期致当前大运冻结、整卡 37.5K(每格带内部路径)、星照整列 blocked(资料库其实有出处)、前端测试手写数据、无预热;合入前用临时 key 跑模型 A/B 与生平回测 | 执行中(F6 严重冲突 1→3,未让步) | `codex/consult-card-full-source-20261007` |
|
||||
| — (产品 09-27 拍板 D1–D4,直接执行) | [PROGRESS](PROGRESS-home-landing-blank-20260927.md) | **登录后 / 裸 `/` 落空白首页**:真机登录后在「首页」提问其实问进了上一次生时校正。删登录返回存根(401 / 次级页链接写、登录后写回 `?c=` 打开),裸 `/` 不再落最近会话,一律当前人物的空白首页(复用空草稿);`?c=` / `?new=1` / 对话内刷新不变;推翻 BUG-1038 存根与 BUG-599 默认落点 | 已验收(真机欠) | `codex/home-landing-blank-20260927`(BUG-1052,本地未推) |
|
||||
| — (产品 09-26 口头拍板 D1–D3,直接执行) | `PROGRESS-consult-answer-truncation-20260926.md` | **普通咨询回答写到一半被掐断仍扣点(BUG-1051,复发自 BUG-305)**:工具循环与写回答共用 110 秒 signal;Mastra 1.50 超时不抛错(`abort` 块 + `finish(tripwire)` 后正常关流),结算只认抛错与 `length`。D1 写回答自有 70 秒时钟(首用起算,续写 / 回答重试共用,最坏 180 秒,`maxDuration` 240);D2 写回答的最后一个流不是 `stop` 且有正文 → `answer_truncated`、不扣点、记 abort 步、不冲半句,`length` 续写不变;D3 观测加 `composeFinishReason` / `composeAborted` / `answerVisibleChars` | 已验收(真机欠) | `codex/consult-answer-truncation-20260926`(本地,未推送);新回归 15 条用真实 Mastra `Agent`(修复前 11 条红);全量失败名单 0 新增;Python 948/1;`/` ○、gzip 0%;真机清单 `docs/testing/consult-answer-truncation-20260926.md` |
|
||||
| `TASK-consult-evidence-card-research-20260927.md` | `PROGRESS-consult-evidence-card-research-20260927.md` | **普通对话数据卡调研**:引擎输出逐项分五类计量(现约 4 万 token、父母问题相关约 3.5%);四处领域→技法来源对账并起草各领域数据卡(家庭拆父母/子女);卡体量与逐字一致性;按卡算的提速空间;反馈迭代埋点方案。只调研不改线上 | 已验收(待产品拍板 7 项) | `codex/consult-evidence-card-research-20260927` 快进 staging;报告 `docs/research/consult_evidence_card_research_2026_09_27.md`;投影缺口记 BUG-1054 investigating |
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
# 真机清单:对话卡同源修复(2026-10-09)
|
||||
|
||||
对应 `docs/tasks/TASK-consult-card-full-source-fix-20261009.md`。部署到 staging 之后照做。本机没有登录态,结果列留空。问法仍用 `docs/testing/consult-card-full-source-20261007.md`。
|
||||
|
||||
准备:一个出生时间已确认到分钟的账号。先记下星盘页上的当前大运主星。
|
||||
|
||||
| # | 操作 | 应看到 | 结果 |
|
||||
| --- | --- | --- | --- |
|
||||
| 1 | 新建一张资料完整的星盘,或改一次出生时间后保存 | 保存马上返回。没有多出来的等待圈。 | |
|
||||
| 2 | 新开普通对话,问事业 | 回答用到判断表里的因素。正文里不出现 `worksheets.`、`core_chart.` 这种内部路径。受冲只作为计数,不说「两个及以上所以怎样」。 | |
|
||||
| 3 | 对照星盘页的当前大运主星 | 回答里的当前大运主星与星盘页一致。 | |
|
||||
| 4 | 把出生时间改成另一个已确认的时间,再问同一个事业问题 | 回答用的是改过之后的盘,不沿用改之前那次的大运。 | |
|
||||
Reference in New Issue
Block a user