Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017eEAG8HD3mm8gsKXgk8uU8
6.2 KiB
6.2 KiB
TASK · 对话数据卡同源修复单:缓存按日、卡片瘦身、星照、真实金样、模型回测(2026-10-09)
- 分支:继续在
codex/consult-card-full-source-20261007(远端35dafd1e)上做。 - 开工第一步先 rebase 到最新
origin/staging:写作时 staging 已含256fdb26(7 种星座大运进报告,改了scripts/pl9_full_data_export.py,本单读的就是它产出的资料包)。rebase 后重跑 Python 全量。 - 前序任务书
TASK-consult-card-full-source-20261007.md仍有效;本单只列 Claude 2026-10-09 验收未通过的项。 - BUG 编号:本分支已用 BUG-1293~1295;本单从 1296 起,开工时核对最大号。
1. 验收实证(Claude,2026-10-09,Linux)
通过:Python 全量 62 条失败与基线逐名相同;快速门通过;npm test 4995 / 失败 24 与基线相同;tsc 0;lint 0 error;补取 3 次、按领域资料目录、年运卡仍读 tajika_yogas。
未通过:
| # | 问题 | 证据 |
|---|---|---|
| C1 | 缓存键没有日期 | scripts/consult_full_data_cache.py 模块说明「key is chart identity + ayanamsa + node mode + engine version」;build_full_data_packet 用的是第一次计算那天的 date.today() 作 today / transit_date / target_year。同一张盘之后每次命中缓存,判断表里的「当前 MD / AD / PD 主星」、行运、年盘都停在那一天;同一张卡的旧基础段(base.timing)按当天算,两者会不一致。进度记录自己也写了「当前大运冻在第一次计算的那天」 |
| C2 | 卡片体量超标 | 乔布斯 golden 盘事业题,用真实 Python 产出的 consult_card_facts 端到端组卡:整卡 37,507 字符(临时上限 20,000)。其中 judgment_table 27,159、participation 5,447。原因:判断表每个格子都带 {"status","path","check","value"},例如 "path": "worksheets.strengths_and_scores.shadbala.planets.Sun.total_rupas"。这些内部路径原样送进模型 |
| C3 | 星照整列 blocked | 进度记录写「Parashari 星照在 references/strict-workflow-router.md 找不到单独列为参与层的段落,12 个领域都是 blocked」。但 references/signs-and-houses.md 约第 262 行就有特殊相位表(火星照第 4、8 宫等),引擎也已有 graha_drishti 层(BUG-1155,宫行 aspected_by) |
| C4 | 前端合同测试用手写数据 | frontend/tests/consult-card-full-source-20261007.test.ts 的 facts 是手写对象(leaf("core_chart.planets.Sun.sign", "Aries") 等)。违反 AGENTS §7.4:合同测试的 fixture 必须来自真实引擎响应。Python 侧用真实盘测,但「Python 产出 → 前端组卡」这一段没有真实数据串起来 |
| C5 | 没有后台预热 | 前序 T1 要求「星盘新建或修改资料后在后台预热」,未做 |
| C6 | 模型 A/B 与名人生平回测未跑(前序 T6 / T7) | 无模型 key。产品 2026-10-09:会提供临时 key,合入前要跑 |
2. 决策记录(产品 2026-10-09)
- 本单交执行方修;Claude 验收后合入。
- 合入前跑模型 A/B 与名人生平回测,key 由产品临时提供:只放执行方会话的环境变量,不进仓库、进度记录、Bug 历史或任何文件。
- 其余沿用前序决策(同源、全领域、综合判断表、参与清单、补取 3 次、资料目录;KP 不上卡;不联网;不接书籍语料)。
3. 硬红线
- 送进模型的卡里不得出现内部字段路径或
check这类机器字段;路径只留在服务端(可以放在卡的服务端副本或回执里,供审计)。 - 判断表的值仍原样复制,不改写、不四舍五入;缺的写 gap,不补。受冲仍只计数、不设门槛。
- 当前大运、行运、年盘这类随日期变化的值,必须和同一张卡上其他段使用同一个参照日期。
- 系统提示不增长(≤ 26.6K);首轮形状、口吻规则不改。
- 运行时不得导入
jhora;scripts/jyotish_api_server.py类方法数不增长。 - 生平回测:严重冲突数不得高于开工基线,对照组误报不得增加;每份跑 2 次。
4. 任务分解
| # | 内容 | 验收标准 |
|---|---|---|
| F0 | rebase 到最新 origin/staging |
Python 全量失败名单 ⊆ 基线 |
| F1 | C1:缓存键加入参照日期(取请求的 today / transit_date,没有则用服务端当天日期);或把不随日期变的部分与随日期变的部分分开缓存。旧文件要有清理(例如只保留最近 2 天) |
新测试:同一张盘、两个不同日期,判断表里的当前大运主星与 base.timing 一致;缓存目录不会无限增长 |
| F2 | C2:判断表的模型视图只带值(缺的、withheld 的保留一个简短状态字);path / check 留在服务端副本 |
用真实 Python 产出组卡:乔布斯、奥巴马、泰勒 × 12 领域,每张卡 ≤ 20,000 字符;卡里不出现 worksheets.、core_chart.、"check" |
| F3 | C3:星照列有出处后接上(references/signs-and-houses.md 的特殊相位表与引擎 graha_drishti 层),12 个领域的「照」不再整列 blocked |
每个领域至少有一行「照」有值;出处写在 T0 表里 |
| F4 | C4:用真实引擎产出生成前端金样(三张公开盘 + 虚构盘),替换手写 facts;写明生成命令 |
前端测试读金样;三栏记录改动的断言 |
| F5 | C5:星盘新建或修改出生资料后,后台预热当天的资料包 | 预热不阻塞保存;改出生资料后旧缓存失效(BUG-1251) |
| F6 | C6:模型 A/B(沿用 docs/testing/prompt-slim-20261007-model-runs.md 的做法):输入 token、首字时间、总耗时、空答率,改前改后对比;生平回测改前改后各 2 次 |
数字写进进度记录;按红线 6 判定;据此给出最终卡片上限的建议 |
| F7 | 记录 | docs/BUG_HISTORY.md(新编号从 1296)、CHANGELOG.md、进度记录、状态板、docs/testing/ 真机清单 |
5. 让步顺序
F5 → F3 中个别领域。F1、F2、F4、F6 不让步。
6. 验收口径
Linux 或门禁同等环境:快速门、Python 全量 ⊆ 基线、npm test 失败名单与基线相同、tsc 0、lint 0 error、next build / Static;用真实 Python 产出端到端组卡量体量。