Files
Jyotisha/docs/tasks/TASK-consult-evidence-card-20260927.md
T

13 KiB
Raw Blame History

TASK · 普通对话改用「数据卡」:按问题挑数据给模型,家庭拆父母/子女,补取一次,反馈记录(2026-09-27)

基线

  • origin/staging,必须包含 BUG-1053(eef0cb74,去掉盲写第三步)与数据卡调研(d8d03b5a + 门禁补修 560d4fc2)。开工时 git fetch 后核对这三个提交是 origin/staging 的祖先,并把实际基线写进 PROGRESS。
  • 分支 codex/consult-evidence-card-20260927,工作树 .worktrees/consult-evidence-card-20260927。
  • 依据:docs/research/consult_evidence_card_research_2026_09_27.md(已验收,见 docs/tasks/PROGRESS-consult-evidence-card-research-20260927.md 逐条验收表)、草案 docs/research/consult_evidence_card_draft_2026_09_27.json、研究库 scripts/research/consult_evidence_card_lib.py(CARD_SPECS、verbatim_check、分类规则)。

事故实证(行号按符号定位,会漂)

  1. 调研实测(3 张公开 AA 盘 × 10 种问法):模型每轮可见 13.3–14.4 万字符(≈3.8–4.1 万 token);核心数据 32%、研究用 33%、西洋 25%、状态说明 8%、不适用 2%;frontend/src/mastra/consultation-tools.ts toModelDomainPlanContext 单领域时把同一包再放进 consultations,约占 49%;technique_audit_table / varga_spectrum / western_spectrum 各出现 4 次。领域数据卡只有现状的 2.3%–4.3%。
  2. 「家庭」混父母与子女:frontend/src/lib/consultation-domain-registry.ts family 别名无「父母」;frontend/src/lib/consultation-methodology.ts family.strictRoute: null;frontend/src/mastra/consultation-workflow.ts DOMAIN_MUST_USE_LAYERS 无 family。Skill 已写明子女 D7、父母/家族 D12(skills/jyotish-vedic-astrology/references/strict-workflow-router.md 共用基线;references/birth-time-rectification-decision-tree.md §4)。
  3. BUG-1054(investigating):consultation-workflow.ts timingKeys 缺 md / ad / pd 与 pratyantardashatimeline,projectAllowlistedTree 按键白名单丢弃,模型拿不到当前 Narayana 段与 Vimshottari PD 起止。30/30 复现。
  4. 本机计时:一轮约 2.6 s,校正门约 2.5 s;研究分盘合计 < 0.01 s。少算提速可忽略。

根因

咨询「全算全给」,没有按问题筛选的一层;领域→技法散在注册表、方法学、前端必用层、Python 焦点四处且不一致;投影白名单还漏了两段时间数据。

决策记录(产品 2026-09-27,逐条同意调研报告 7 项推荐 + 补取一次)

  • D1 写答案的模型只读数据卡:基础段(上升、十二宫星座与宫主、行星落宫、功能吉凶含宫主归属、当前 Vimshottari MD/AD/PD 起止、Narayana 当前段)+ 当前问题所属领域段(按调研草案 CARD_SPECS)。一句问两件事时合并两张卡,基础段只放一份(沿用现有一轮最多 2 领域的规则)。追问未点领域时沿用上一轮领域(现有路由/会话上下文如已处理则保持)。
  • D2 「家庭」拆成「父母」「子女」:新增领域 parents(D12、4 宫、9 宫及宫主、月亮、太阳)与 children(D7、5 宫及宫主、木星);别名至少含 父母/父亲/母亲/爸爸/妈妈/爸妈/parents 与 子女/孩子/儿子/女儿/children。两者在引擎侧仍走 Python family 主题(workflowThemes: ["family"]),只在卡的领域段上区分,不改 Python 引擎。原 family 保留作兜底(问「家里」「家庭氛围」等泛问)。
  • D3 状态说明、研究用分盘(40 张 D-N、D81/D108/D144、Ashtottari)、西洋层、本轮不适用项不进写答案的上下文:照旧计算、照旧进回执与「本轮技法」折叠面板、报告与审计照用。
  • D4 MEVG / 真实案例校准:模型不读长状态说明;卡的元信息里固定一行「全网资料核对、真实案例校准:未做,置信度封顶」,回执保留原状态行。这是产品对 AGENTS Part B B3/B4 在普通对话里的落法决定;Part B 其余要求(双轨大运、领域分盘、功能吉凶、原始数据)必须由卡覆盖。
  • D5 先修 BUG-1054,再上卡(同一分支内先后两个提交)。
  • D6 不为提速改计算:Python 引擎、计算范围、校正门都不动。
  • D7 反馈记录只存 6 项:领域、卡版本、卡字符数、卡 token 估计、答案引用了卡里哪些字段名、点赞/点踩;不存问题、回答、出生资料、姓名、邮箱、用户/会话 id、匹配到的原文。
  • D8 补取一次:卡里没有、确实需要时(例如用户点名问 D60、某个西洋层、某个格局明细),模型可调用一个只读补取工具,从本轮已算好的请求级缓存里取指定一段(受限枚举),不重算;每轮最多 1 次。
  • 推翻/改写的既有口径:frontend/src/mastra/index.ts 系统提示中「evidence_contract.technique_audit_table is the invocation record… Use every executed layer…」一类要求模型通读全量层的句子,按 D1/D3 改写为「以数据卡为准,卡外数据可补取一次」。BUG-287「咨询默认计算全部分盘并挂上西洋层」的计算口径不变,只改给模型看什么。

硬红线

  1. 答题契约不丢:系统提示依赖的 status、evidence_contract.answer_policy(含 can_answer_direction)、hard_blockers、claim_cards、rectification(及现有提示里引用到的其它顶层键)必须仍出现在模型可见内容里,行为与现状一致;逐项列出并测试。
  2. 事实逐字:卡里的值只从投影/引擎原值复制,不改写不换算。回归测试用真实引擎响应(golden fixture,AGENTS §7.4),逐字核对上升星座、月亮星座与宫位、当前 MD/AD/PD 起止、Narayana 当前星座、D12/D7/D9/D10 的相关落点。
  3. Part B 覆盖:每张卡都含双轨大运(Vimshottari + Narayana)、领域分盘、功能吉凶、原始度数/日期;测试逐领域断言。
  4. BUG-1053 不回退:写答案的那一步看得到卡(真实 Agent + 记录 prompt 的假模型断言);调工具前的文字不进答案;非 stop 收尾 → answer_truncated 不扣点;续写带卡。补取工具调用发生在答题阶段时,不得让已放出的正文被截断或重复,也不得重置 110 s / 70 s 双钟的语义(写清楚设计)。
  5. 不改 Python 引擎、jyotish_api_server.py(行数与类方法数守门)、迁移(除非 D7 需要新表——见 T6 让步)、.gitea/**、deploy/**。
  6. 前端红线全套:tsc 0、lint 0 error、全量测试(Node 22)失败名单与基线逐条一致、/ ○ Static、gzip ±2%;改既有断言写三栏;全量 Python 门禁集必跑(含 tests/test_api_server_growth_contract.py:handler 伪造点不得增长,注释里也不能出现该字面量)。
  7. 隐私:AGENTS §8;反馈记录字段白名单写进测试。
  8. 禁止 git stash;只 git add <具体路径>,提交前看 git diff --cached --stat(ERR-112)。

任务分解(每条带验收标准)

T1 修 BUG-1054(先单独一个提交)

  • timingKeys(或对应投影)放行 Narayana 当前段的嵌套键与 PD 时间线,保持其余白名单不变、深度/条数上限不变。
  • 验收:golden 回归测试断言引擎的当前 Narayana 星座与 PD 起止原样出现在模型可见 timing 内容里(不能只断言键存在);BUG-1054 记录补修复与验证,状态 resolved(部署后补 run 号)。

T2 领域:新增 parents / children

  • 注册表、方法学(strictRoute 与必用层)、DOMAIN_MUST_USE_LAYERS、领域 zod 枚举、领域计划工具说明、MAX_CONSULTATION_DOMAIN_PLAN_VALUES 相关 schema 同步;引擎侧映射到 family。
  • 路由:模型从枚举里选;服务端别名兜底。「我和父母关系如何」→ parents;「孩子学业」→ children(若同时命中 education,按现有两领域规则)。
  • 验收:分类/路由单测覆盖别名与混合问法;原 family 泛问仍可用;领域在回执、/admin 相关展示处有中文名(父母 / 子女)。

T3 数据卡构建器

  • 新模块 frontend/src/lib/consultation-evidence-card.ts(参数式纯函数,无 React hook):输入投影后的上下文 + 领域列表,输出卡(基础段 + 领域段 + 元信息:卡版本 evidence-card-v1、领域、D4 那一行、卡外可补取的段名清单)。
  • 领域段内容以调研草案 CARD_SPECS 为准,把它移植成 TS 常量(单一来源);调研报告里健康 D30、学习 D5 的差异按 Python 焦点纳入,并在 PROGRESS 列出最终对照表。
  • 工具结果给模型的部分改为:答题契约(红线 1)+ 数据卡;完整结果仍留在服务端(请求级缓存、回执、技法折叠面板、报告路径不受影响)。去掉 consultations 整包重复。
  • 验收:3 盘 × 10 问法(沿用调研脚本的公开盘与问法)模型可见字符数下降到调研卡体量量级(单领域 ≤ 12,000 字符,含答题契约;超出须在 PROGRESS 说明);红线 1/2/3 测试全过;「本轮技法」折叠面板内容与改前逐行一致。

T4 提示与 Skill 对齐

  • 改写系统提示(frontend/src/mastra/index.ts、product-voice.ts 等)里要求通读全量层、引用审计表的句子;写明「以数据卡为准;卡外数据用补取工具一次」。
  • 若 skills/jyotish-vedic-astrology 文本需同步,按 Skill 版本规则 bump(快照 + registry sha + 旧版本 deprecated 保留,BUG-621 教训),CHANGELOG 写明。
  • 验收:提示与 Skill 中不再出现「用尽每个已执行层」类要求;Skill 版本相关测试三栏更新。

T5 补取工具(D8)

  • 新工具(如 read-consultation-evidence),参数为受限枚举(分盘编号、西洋层名、格局明细、Ashtakavarga、Shadbala 等调研 R1 中「核心数据」之外但有数据的段),只读请求级缓存;缓存未命中返回结构化「不可用」,不触发重算;每轮最多 1 次(第二次返回拒绝)。
  • 与 BUG-1053 的按步截留、双钟、结算规则一致(红线 4)。
  • 验收:测试覆盖命中、未命中、超次数、答题阶段内调用后正文完整;回执记一条补取步骤(中文人话标签)。

T6 反馈记录(D7)

  • 每轮在 [agent-observability] 记录 6 项(数字/枚举/字段名);「引用了哪些字段」按调研 R5 的判定规则(ISO 日期、度数、≥8 字符的「行星在星座」短语原样出现才算),匹配原文不落库。
  • 点赞/点踩:查清现有赞踩的存储位置;若已落库,按轮关联卡版本与领域即可;若需要新表,本单只做日志,新表与后台汇总另开单(让步项)。
  • 验收:字段白名单测试;日志不含用户文本(测试用虚构敏感串断言不出现)。

T7 记录

  • docs/BUG_HISTORY.md:BUG-1054 修复;若实现中发现新缺陷从 BUG-1059 起。
  • CHANGELOG(用户可感知:回答依据更集中、父母/子女分开);frontend/DESIGN.md(若回执出现补取步骤);frontend/docs/VOICE.md(新领域中文名、补取步骤文案)。
  • docs/tasks/PROGRESS-consult-evidence-card-20260927.md:最终领域→技法对照表、体量前后对比、红线测试清单、失败名单对比、三栏改动。
  • docs/testing/consult-evidence-card-20260927.md:真机清单——父母、子女、婚恋、事业各问一次(默认模型与 gpt-5.6-luna),把回答里的上升/月亮/宫位/大运日期与「星盘」页核对;追问「那明年呢」看是否沿用领域;点名问 D60 看补取;看等待时间。
  • docs/tasks/README.md 本单一行改「待验收」。

让步顺序

  1. T1、T2、T3、红线 1–4 必须完成。
  2. T4 必须完成(否则提示与卡矛盾)。
  3. T5 可降级为下一单,但 T3 的元信息里要留「卡外可补取的段名」。
  4. T6 可只做日志。

开工前置命令

cd /workspace/Jyotisha && git fetch origin --prune
git merge-base --is-ancestor eef0cb74 origin/staging && git merge-base --is-ancestor 560d4fc2 origin/staging && echo base-ok
git worktree add -b codex/consult-evidence-card-20260927 .worktrees/consult-evidence-card-20260927 origin/staging
ln -s /workspace/Jyotisha/frontend/node_modules .worktrees/consult-evidence-card-20260927/frontend/node_modules
cd .worktrees/consult-evidence-card-20260927 && git status -sb
export PATH=/exec-daemon:$PATH   # Node 22

先读:AGENTS.md(§5–§8、Part B)、frontend/AGENTS.md、frontend/DESIGN.md、frontend/docs/VOICE.md、调研报告与逐条验收表、docs/BUG_HISTORY.md 的 BUG-287、BUG-298、BUG-943、BUG-1051、BUG-1053、BUG-1054、docs/research/pre_work_error_ledger.md ERR-110/111/112。

基线测试:开工先在未改动的基线上跑全量前端测试(Node 22)与全量 Python 门禁集,存日志作对比。

BUG 编号

修 BUG-1054(已存在)。BUG-1055~1058 已预留给并行的 TASK-rectification-grounding-20260927,本单新缺陷从 BUG-1059 起,开工与提交时各核对一次 docs/BUG_HISTORY.md 最大号。