diff --git a/docs/tasks/README.md b/docs/tasks/README.md index d1070f42..420aa0e2 100644 --- a/docs/tasks/README.md +++ b/docs/tasks/README.md @@ -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 一致) | diff --git a/docs/tasks/TASK-consult-evidence-card-research-20260927.md b/docs/tasks/TASK-consult-evidence-card-research-20260927.md new file mode 100644 index 00000000..97e30d59 --- /dev/null +++ b/docs/tasks/TASK-consult-evidence-card-research-20260927.md @@ -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`,不修代码。