Files
Jyotisha/docs/tasks/TASK-consult-card-full-source-fix-20261009.md
T

6.2 KiB
Raw Blame History

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)

  1. 本单交执行方修;Claude 验收后合入。
  2. 合入前跑模型 A/B 与名人生平回测,key 由产品临时提供:只放执行方会话的环境变量,不进仓库、进度记录、Bug 历史或任何文件。
  3. 其余沿用前序决策(同源、全领域、综合判断表、参与清单、补取 3 次、资料目录;KP 不上卡;不联网;不接书籍语料)。

3. 硬红线

  1. 送进模型的卡里不得出现内部字段路径或 check 这类机器字段;路径只留在服务端(可以放在卡的服务端副本或回执里,供审计)。
  2. 判断表的值仍原样复制,不改写、不四舍五入;缺的写 gap,不补。受冲仍只计数、不设门槛。
  3. 当前大运、行运、年盘这类随日期变化的值,必须和同一张卡上其他段使用同一个参照日期。
  4. 系统提示不增长(≤ 26.6K);首轮形状、口吻规则不改。
  5. 运行时不得导入 jhora;scripts/jyotish_api_server.py 类方法数不增长。
  6. 生平回测:严重冲突数不得高于开工基线,对照组误报不得增加;每份跑 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 产出端到端组卡量体量。