Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017eEAG8HD3mm8gsKXgk8uU8
13 KiB
13 KiB
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、分类规则)。
事故实证(行号按符号定位,会漂)
- 调研实测(3 张公开 AA 盘 × 10 种问法):模型每轮可见 13.3–14.4 万字符(≈3.8–4.1 万 token);核心数据 32%、研究用 33%、西洋 25%、状态说明 8%、不适用 2%;
frontend/src/mastra/consultation-tools.tstoModelDomainPlanContext单领域时把同一包再放进consultations,约占 49%;technique_audit_table/varga_spectrum/western_spectrum各出现 4 次。领域数据卡只有现状的 2.3%–4.3%。 - 「家庭」混父母与子女:
frontend/src/lib/consultation-domain-registry.tsfamily别名无「父母」;frontend/src/lib/consultation-methodology.tsfamily.strictRoute: null;frontend/src/mastra/consultation-workflow.tsDOMAIN_MUST_USE_LAYERS无 family。Skill 已写明子女 D7、父母/家族 D12(skills/jyotish-vedic-astrology/references/strict-workflow-router.md共用基线;references/birth-time-rectification-decision-tree.md§4)。 - BUG-1054(investigating):
consultation-workflow.tstimingKeys缺md/ad/pd与pratyantardashatimeline,projectAllowlistedTree按键白名单丢弃,模型拿不到当前 Narayana 段与 Vimshottari PD 起止。30/30 复现。 - 本机计时:一轮约 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。两者在引擎侧仍走 Pythonfamily主题(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「咨询默认计算全部分盘并挂上西洋层」的计算口径不变,只改给模型看什么。
硬红线
- 答题契约不丢:系统提示依赖的
status、evidence_contract.answer_policy(含can_answer_direction)、hard_blockers、claim_cards、rectification(及现有提示里引用到的其它顶层键)必须仍出现在模型可见内容里,行为与现状一致;逐项列出并测试。 - 事实逐字:卡里的值只从投影/引擎原值复制,不改写不换算。回归测试用真实引擎响应(golden fixture,AGENTS §7.4),逐字核对上升星座、月亮星座与宫位、当前 MD/AD/PD 起止、Narayana 当前星座、D12/D7/D9/D10 的相关落点。
- Part B 覆盖:每张卡都含双轨大运(Vimshottari + Narayana)、领域分盘、功能吉凶、原始度数/日期;测试逐领域断言。
- BUG-1053 不回退:写答案的那一步看得到卡(真实 Agent + 记录 prompt 的假模型断言);调工具前的文字不进答案;非
stop收尾 →answer_truncated不扣点;续写带卡。补取工具调用发生在答题阶段时,不得让已放出的正文被截断或重复,也不得重置 110 s / 70 s 双钟的语义(写清楚设计)。 - 不改 Python 引擎、
jyotish_api_server.py(行数与类方法数守门)、迁移(除非 D7 需要新表——见 T6 让步)、.gitea/**、deploy/**。 - 前端红线全套:tsc 0、lint 0 error、全量测试(Node 22)失败名单与基线逐条一致、
/○ Static、gzip ±2%;改既有断言写三栏;全量 Python 门禁集必跑(含tests/test_api_server_growth_contract.py:handler 伪造点不得增长,注释里也不能出现该字面量)。 - 隐私:AGENTS §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本单一行改「待验收」。
让步顺序
- T1、T2、T3、红线 1–4 必须完成。
- T4 必须完成(否则提示与卡矛盾)。
- T5 可降级为下一单,但 T3 的元信息里要留「卡外可补取的段名」。
- 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 最大号。