docs(tasks): consult card full-source fix brief

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017eEAG8HD3mm8gsKXgk8uU8
This commit is contained in:
Jesse_Chen
2026-10-09 06:37:15 +08:00
co-authored by Claude Opus 5.5
parent 256fdb26b9
commit 19bae8a8b0
2 changed files with 59 additions and 1 deletions
+2 -1
View File
@@ -129,7 +129,8 @@
| 任务书 | 进度 | 主题 | 状态 | 落点 |
| --- | --- | --- | --- | --- |
| `TASK-consult-card-full-source-20261007.md` | — | **对话数据卡与报告同源 + 领域综合判断表**:事业卡只有约 7,600 字符、无自然代表星、无大运主星关系、D10 联动只能补取、补取上限 1;全 12 领域;综合判断表、参与清单(不止 D1/D9,含精度闸)、补取 3 次、资料目录均已确认;KP 不上卡、不联网、不接书籍语料;排在 sync6 与报告单之后 | 待领取(10-08 更新:前序已部署,取值入口 `read_full_data_domain` 已在) | — |
| `TASK-consult-card-full-source-20261007.md` | — | **对话数据卡与报告同源 + 领域综合判断表**:事业卡只有约 7,600 字符、无自然代表星、无大运主星关系、D10 联动只能补取、补取上限 1;全 12 领域;综合判断表、参与清单(不止 D1/D9,含精度闸)、补取 3 次、资料目录均已确认;KP 不上卡、不联网、不接书籍语料;排在 sync6 与报告单之后 | 验收未通过(`35dafd1e`,见 fix-20261009) | — |
| `TASK-consult-card-full-source-fix-20261009.md` | — | **对话卡同源修复**:缓存键无日期致当前大运冻结、整卡 37.5K(每格带内部路径)、星照整列 blocked(资料库其实有出处)、前端测试手写数据、无预热;合入前用临时 key 跑模型 A/B 与生平回测 | 待领取 | — |
| — (产品 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,57 @@
# 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 产出端到端组卡量体量。