docs(tasks): consult evidence-card research brief

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017eEAG8HD3mm8gsKXgk8uU8
This commit is contained in:
Jesse_Chen
2026-09-27 00:50:04 +08:00
co-authored by Claude Opus 5.5
parent 5f2e007f64
commit 76924e3362
2 changed files with 117 additions and 0 deletions
+1
View File
@@ -127,6 +127,7 @@
| 任务书 | 进度 | 主题 | 状态 | 落点 |
| --- | --- | --- | --- | --- |
| — (产品 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%);四处领域→技法来源对账并起草各领域数据卡(家庭拆父母/子女);卡体量与逐字一致性;按卡算的提速空间;反馈迭代埋点方案。只调研不改线上 | 待领取 | 分支 `codex/consult-evidence-card-research-20260927`;与 BUG-1053 实现单并行,不碰 consult route / stream-agent-response |
| `TASK-scroll-anchor-hook-fixes-20260926.md` | `PROGRESS-scroll-anchor-hook-fixes-20260926.md` | **滚动锚两处老问题**:直接打开已有会话时监听未挂上(BUG-1043)、校正长回答钉顶后因 96px 阈值被拉到底(BUG-1044)。排在 BUG-1042 合入后。挂载改由容器元素本身驱动(每次提交比对元素 / active / resetKey);钉顶只由用户滚动手势解除 | 已验收(Claude 09-26 直接执行:子代理复现两处根因并修复;Claude 独立复验 tsc/lint 0、全量 3970 条失败名单与基线逐条一致、四路由 ○、gzip 不变;iOS 惯性滚动留真机清单) | `da2613ff`(随 `f1d16405` 部署,health 一致) |
| `TASK-latest-turn-actions-gap-20260926.md` | — | **最后一轮正文与点赞 / 踩之间空大半屏**:BUG-930 钉顶留白(`min-height: 视口 − 本轮开头`)加在 `.message-assistant` 上,把兄弟节点 `.message-actions` 推到留白之后;改为加在整轮外层,按钮紧贴正文、空白落在后面;不动滚动 hook | 已验收(Claude 09-26 直接执行:子代理实现,Claude 独立复验 tsc/lint 0、全量 3961 条失败名单与基线逐条一致、四路由 ○、gzip 不变;CDP 实测间距 450–600px → 23px,钉顶仍在) | `080ea5ca`(已部署 `509987b9`,health 一致) |
| `TASK-starter-home-polish-20260926.md` | `PROGRESS-starter-home-polish-20260926.md` | **首页开场小字与图标**:今日趋势(每日模型生成,非写死)移到问候下方副行;入口下方提示只在有未完成校正或非本人时出现,删两句固定文案并修正已校正仍显示首次文案的分支;今日星语图标 MoonStar、点数图标 Coins。排在 BUG-1038、1040 之后。分支误判实为入口摘要解析读错键名(BUG-1041) | 已验收(Claude 09-26 直接执行:子代理实现并查出 BUG-1041 入口摘要驼峰/下划线字段不一致;Claude 改恢复提示文案为「可以在历史对话里接着做」;独立复验 tsc/lint 0、全量 3960 条失败名单与基线逐条一致、四路由 ○、gzip 不变) | `f04da103`(已部署 `62d4c9c4`,health 一致) |
@@ -0,0 +1,116 @@
# TASK · 普通对话「数据卡」调研:后台筛掉多余,只把能出数据的部分交给模型(2026-09-27)
> 调研单,**不改任何线上行为**。产出一份报告、一套可复跑的脚本和一张按领域的数据卡草案,交产品与懂印占的人拍板后,再另开实现单。
## 基线
- `origin/staging` `5f2e007f`(开工时以 `git fetch` 后的最新 `origin/staging` 为准,写进 PROGRESS)。
- 分支 `codex/consult-evidence-card-research-20260927`,工作树 `.worktrees/consult-evidence-card-research-20260927`。
- 并行中的实现单 `codex/consult-single-pass-answer-20260927`(BUG-1053,去掉盲写第三步)改的是 `frontend/src/app/api/consult/route.ts`、`frontend/src/lib/stream-agent-response.ts`。**本单不得修改这两个文件**;调研脚本只读调用引擎与投影函数。
## 事故实证(行号按符号定位,会漂)
1. 2026-09-27 真机:「我和父母关系如何」跑了 10 步,回答却说「这次消息里没有父母主题的盘面证据」。诊断已确认:写答案那一步拿不到任何排盘结果(`route.ts` `composeAnswer` 只带 `baseMessages` + `consultationComposePrompt()`,判断依据恒空),由 BUG-1053 处理。本单研究的是**修好之后**该给模型什么。
2. 体量(诊断时用公开样例盘实测):
- Python `/api/consultation_workflow`(`scripts/jyotish_api_server.py` `_compute_consultation_workflow`,编排在 `scripts/unified_consultation_orchestrator.py`)原始输出约 478K 字符。
- 投影后进模型的工具结果约 133–144K 字符(约 4 万 token)。
- 单领域时 `frontend/src/mastra/consultation-tools.ts` `toModelDomainPlanContext` 返回 `{...consultations[0], ...plan, consultations}`,同一个包出现两次(`consultations` 约 71K 字符)。
- 每份里 `varga_spectrum` 约 17K、`western_spectrum` 约 6K、技法审计表约 6.9K(43 行),在 natal 卡与 `evidence_contract` 里各出现一次。系统提示里的 Skill 方法块约 23K 字符。
3. 相关度:父母问题真正要用的宫位、行星、D12、大运与子运、功能吉凶合计约 5K / 144K ≈ **3.5%**。
4. 领域路由缺口:
- `frontend/src/lib/consultation-domain-registry.ts` 的 `family` 把父母与子女混在一起,别名没有「父母 / parents」。
- `frontend/src/lib/consultation-methodology.ts` 里 `family` 的 `strictRoute: null`;`frontend/src/mastra/consultation-workflow.ts` `DOMAIN_MUST_USE_LAYERS` 没有 family 项。
- Skill 只有一句「D12 for family/ancestral themes」(`skills/jyotish-vedic-astrology/references/strict-workflow-router.md` 约 163 行)。
- Python 路由的 `focus_techniques`(如 D12/4/9 宫)没有投影给模型。
5. 43 项技法审计表(09-26 真机截图)粗分:核心数据约 12 项;状态说明约 8 项(VedAstro 云状态、MEVG、真实案例校准、盲技术模式、时间精度门、证据包等,只说「没做 / 受限」);本轮不适用 4 项;研究用约 4 项(40 张研究型 D-N、D81/D108/D144、Ashtottari「参数敏感、未验证」);西洋约 11 项。
## 根因(本单要证实或推翻)
咨询默认「全算全给」(BUG-287 起),没有一层按问题筛选:模型每轮读约 4 万 token,能用的只有几个百分点;领域到技法的对应关系散落在注册表、方法学、Skill 与 Python 路由四处,彼此不一致,还缺父母这一类。
## 决策记录(产品 2026-09-27)
- D1 方向已定:在计算引擎与写答案的模型之间加**后台筛选**。计算可以照旧算全,但只把能写进答案的数据按领域组成「数据卡」交给模型;状态说明、不适用、研究用、西洋层留在后台(报告与审计照用),不给写答案的模型。
- D2 之后按反馈迭代:记录用了哪张卡、答案引用了卡里哪些数据、点赞 / 点踩,据此增删卡内容。本单只设计埋点方案,不实现。
- D3 本单只调研、出草案;数据卡的最终内容由产品和懂印占的人拍板,再另开实现单。
- D4 「家庭」计划拆成「父母」与「子女」两类,本单给出建议映射与依据。
- 本单**不推翻**任何既有红线:AGENTS Part B 的高严谨要求(双轨大运、按领域分盘、功能吉凶、原始数据)是对输出占星解读的约束,数据卡必须能满足它;若某项红线与「只给相关数据」冲突,写进报告交产品决定,不自行取舍。
## 硬红线
1. 不改线上行为:不改 `frontend/src/app/api/consult/**`、`frontend/src/lib/stream-agent-response.ts`、`frontend/src/mastra/**` 的运行逻辑、Python 引擎、Skill 文本、数据库。新增文件只放在 `scripts/research/`、`tests/`(只测研究脚本的纯函数)、`docs/research/`、`docs/tasks/`。
2. 数据只用公开名人样例(仓库 `references/real_case_calibration/` 下的公开 AA 开放集)或明确虚构的出生资料;不得出现任何真实用户资料(AGENTS §8)。
3. 每个数字都要附复跑命令;同机 A/B,不跨机器比较浮点哈希(BUG-985)。
4. 不下占星结论。本单是数据工程调研,报告里不写「某人父母关系如何」之类的解读。
5. 禁止 `git stash`;提交只 `git add <具体路径>`,提交前看 `git diff --cached --stat`(ERR-112)。不推送,完成后本地提交交验收。
## 任务分解(每条带验收标准)
### R1 盘点:引擎输出逐项分类与计量
- 用 3 个公开样例盘 × 8 个领域(事业、婚恋、财富、健康、学习、迁居、家庭、综合;另加「父母」「子女」两种问法,走现有 family 路由)真跑 `_compute_consultation_workflow`,再经 `toModelOutput` / `toModelDomainPlanContext` 投影,得到**模型实际看到的文本**。
- 把投影后的字段逐项归入五类:核心数据 / 状态说明 / 不适用 / 研究用 / 西洋。给出每项的字符数与 token 估算(写明估算方法),以及重复出现的字段与次数。
- **验收**:一张「字段 → 类别 → 大小 → 是否重复」总表(JSON + 报告里的汇总表);五类合计与总大小对得上(误差 < 1%)。
### R2 领域 → 技法对照表草案
- 汇总四处现有来源:`consultation-domain-registry.ts` 的 `requiredLayers`、`consultation-methodology.ts`、`consultation-workflow.ts` `DOMAIN_MUST_USE_LAYERS`、Skill `strict-workflow-router.md` 与 `jyotish-vedic-astrology` 其余 references,外加 Python 路由的 `focus_techniques`,列出每个领域在四处的差异。
- 起草每个领域的数据卡:
- **基础段**(每张卡都带):上升、12 宫落星与宫主、功能吉凶星、当前 Vimshottari MD/AD/PD 及起止日期、Narayana 当前段。
- **领域段**:该领域专属的宫位、宫主、分盘、自然星、格局、行运窗口。
- 「父母」「子女」两张新卡给出依据(引用仓库内 Skill 文字或公开经典出处)。
- 标出每张卡里有没有满足 AGENTS Part B(双轨大运、领域分盘、功能吉凶、原始数据)的字段;不满足的写明缺口。
- **验收**:一张可给非程序员看的对照表(领域 × 基础段 / 领域段 / 数据来源 / Part B 覆盖),外加机器可读的 JSON 草案。
### R3 数据卡原型与体量对比
- 写一个研究用的纯函数(`scripts/research/` 下,Python 或 TS 皆可),输入 R1 的投影结果,按 R2 草案裁出数据卡文本。
- 对 3 盘 × 10 种问法输出数据卡,给出每张卡的大小,与现状(约 4 万 token)对比;并核对卡里关键事实与引擎原始值逐字一致(上升星座、月亮星座与宫位、当前大运起止日期、D12 相关落点)。
- **验收**:体量对比表;逐字一致性检查 100% 通过(不一致即报告为缺陷,不得在卡里改值);样例卡片附在报告附录里(公开名人盘)。
### R4 提速空间(只量不改)
- 统计每个领域的数据卡实际依赖哪些计算模块,估算「只算卡里需要的」能省多少引擎耗时(用本机同机计时,不跑外部 VedAstro;外部取证单独列出不计入)。
- **验收**:模块 → 被哪些卡依赖 → 本机耗时的表;给出「全算 vs 按卡算」的耗时估计与方法说明。
### R5 反馈迭代的埋点方案(只设计)
- 设计每轮要记的字段:领域、卡版本、卡大小、答案引用了卡里哪些字段(如何判定引用,需写清楚方法与误判风险)、点赞 / 点踩。只存数字、枚举与字段名,不存用户文本(AGENTS §8、参照 `TASK-rectification-telemetry-20260926` 的做法)。
- 设计后台汇总:哪些字段长期不被引用、哪类问题点踩率高。
- **验收**:字段表 + 汇总视图草图(文字描述即可)+ 隐私核对清单。
### R6 报告
- `docs/research/consult_evidence_card_research_2026_09_27.md`:结论先行,五节对应 R1–R5;每节一句话结论、复跑命令、是否建议立实现单。
- 结果 JSON 放 `docs/research/`;`docs/tasks/PROGRESS-consult-evidence-card-research-20260927.md` 记开工基线、做了什么、没做什么、环境缺口;`docs/tasks/README.md` 本单一行改为「待验收」。
- **验收**:报告里给产品的决策清单(需要拍板的每一项,附推荐与理由),不超过一页。
## 让步顺序(时间不够时)
1. R1、R2、R3 必须完成(这是拍板的依据)。
2. R4 可以只做 3 个领域。
3. R5 可以只给字段表,汇总视图留待实现单。
## 开工前置命令
```bash
cd /workspace/Jyotisha && git fetch origin --prune
git worktree add -b codex/consult-evidence-card-research-20260927 .worktrees/consult-evidence-card-research-20260927 origin/staging
ln -s /workspace/Jyotisha/frontend/node_modules .worktrees/consult-evidence-card-research-20260927/frontend/node_modules
cd .worktrees/consult-evidence-card-research-20260927
git status -sb
python3 scripts/pre_work_check.py --remote-timeout 8 --command-timeout 45 # 涉及引擎输出,按 AGENTS §9 先跑预检
export PATH=/exec-daemon:$PATH # 需要跑 TS 投影函数时用 Node 22
```
先读:`AGENTS.md`(§5、§8、§9、Part B)、`docs/research/pre_work_error_ledger.md`(ERR-110 冻结计分文件、ERR-111 PYTHONHASHSEED、ERR-112)、`docs/BUG_HISTORY.md` 中 BUG-287、BUG-298、BUG-943、BUG-1053(开工时若已合入)。
## 验收口径
- 新增的研究测试:`python3 -m pytest tests/test_consult_evidence_card_research.py`(如有)通过;`tests/test_repo_privacy_markers.py`、`tests/test_bug_history_workflow.py` 通过。
- 本单提交里不出现 `frontend/src/**`、`scripts/*.py`(`scripts/research/` 除外)、`skills/**`、迁移文件的改动。
- 所有表格数字可由报告里的命令复跑得到。
## BUG 编号
本单是调研,默认不开 BUG。若发现缺陷(例如投影丢字段、卡里事实与引擎不一致),开工时核对 `docs/BUG_HISTORY.md` 最大号(staging 上当前为 BUG-1051;BUG-1052、BUG-1053 已被并行实现单占用),从 **BUG-1054** 起,记为 `investigating`,不修代码。