diff --git a/docs/tasks/README.md b/docs/tasks/README.md index 5c6b39c8..693fbde3 100644 --- a/docs/tasks/README.md +++ b/docs/tasks/README.md @@ -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 | diff --git a/docs/tasks/TASK-consult-card-full-source-fix-20261009.md b/docs/tasks/TASK-consult-card-full-source-fix-20261009.md new file mode 100644 index 00000000..1b8f7b40 --- /dev/null +++ b/docs/tasks/TASK-consult-card-full-source-fix-20261009.md @@ -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 产出端到端组卡量体量。