Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01N4f2nya58RoRu4yEmJgRGE
16 KiB
PROGRESS · 普通对话「先看受冲、再看旺弱」读法,补齐各领域清单,健康改口径(2026-10-01,三单之二)
- 任务书:
docs/tasks/TASK-consult-affliction-reading-20261001.md(origin/staging9b937c4a) - 执行:Claude fork 子代理(直接执行模式,产品授权);未推送
- 分支 / worktree:
codex/consult-affliction-reading-20261001/.worktrees/consult-affliction-reading-20261001 - 基线:第一单分支
codex/consult-card-affliction-data-202610014c888902(已验收,尚未上 staging),合入origin/staging78823e94(只多一个任务书文档提交,无冲突)→ 合并提交509c88c4。全部门禁的基线数字都在509c88c4的独立检出上实测。 - BUG 编号:开工核对最大 BUG-1159(第一单用到 1159);本单用 1160~1163,1164~1166 未用。
- 代码提交:
40179650;文档另一提交。
环境
- Node 22.14(
/exec-daemon/node);frontend/node_modules用cp -al硬链接自第一单 worktree(真目录,已 gitignore,未提交)。 - 无 Docker:24 条数据库 / 部署套件失败,与基线逐条同名。
- 无模型凭据:本单不跑模型,读法效果由第三单名人回测验收。
- 未改 Python、
skills/**、数据库结构、jyotish_api_server.py。
交付门
| 项 | 基线 509c88c4 |
本分支 |
|---|---|---|
tsc --noEmit |
0 错 | 0 错 |
npm run lint |
0 error / 126 warning | 0 error / 126 warning |
npm test(Node 22) |
4,878(pass 4,813 / fail 24 / skip 41) | 4,884(pass 4,819 / fail 24 / skip 41) |
| 失败名单 | 24 条,数据库 / 部署类 | 与基线逐条同名(diff 无差) |
| 测试名单 | — | 新增 9、改名 3(下表),无删除 |
next build |
/ ○ Static |
/ ○ Static |
| 首屏 gzip | 555,580 B(index.html 引用 26 个脚本 gzip-9 求和;与第一单的 29 个口径不同,基线同法实测) |
555,582 B(+2 B,+0.0004%) |
改名的 3 条测试(断言改动见下):「a route the skill declares no checklist for is reported…」→「…gets this product's own list, never another route's」;「health uses the skill's health-timing-strict checklist」→「health uses the consultation's Chinese health list in place of health-timing-strict」;「methodology names no strict checklist for parents or children…」→「methodology gives parents and children their own consultation lists after the shared reading」。
实现
| 任务 | 落点 |
|---|---|
| T1(BUG-1160) | consultation-condensed-checklist.ts 新增 CONDENSED_SHARED_READING_TITLE「通用读法 · 先看受冲」、CONDENSED_SHARED_READING_LINES(任务书六条 + 第 7 条「瑜伽只认 yogas.hits:hits 里的才是这张盘成立的格局;只在 names 里、没进 hits 的是待检规则,不得说成本人的格局。」)、sharedConsultationReading();consultationMethodologyForDomains 在 sections 最前推一次(多领域同轮也只一次),其后才是 Shared mandatory baseline |
| T2(BUG-1161) | CONSULTATION_CONDENSED_CHECKLISTS 加 parents、children、education、migration、family、annual、general、health 八份(任务书定稿文本);domainMethodology 填本地名 consult-<domain>(注释写明来源是本任务书、不是路由);这八份的 source 为 CONSULT_BRIEF_CHECKLIST_SOURCE。健康在普通对话里不再发英文 health-timing-strict(报告面不变);时运保留英文路由 |
| T3(BUG-1162) | 事业、婚姻、财富各加一行(行数 6 / 8 / 6) |
| T4(BUG-1163) | consultation-domain-registry.ts health:label: "健康",aliases 加 身心压力,prompt 改为「我的身体底子怎样,哪些方面要多留意?」,claimBoundary、confidenceCap: "low" 不变;guided-jyotish-topics.ts 无出生分钟问法改为「请从非医疗诊断的角度,帮我看看我的身体底子怎样,哪些方面要多留意。」;git grep "身心压力" frontend/src 只剩 alias 一处。frontend/docs/VOICE.md 领域名改「健康」并加健康口径一条。无视觉变化(只改文字标签与默认问法),frontend/DESIGN.md 不需改 |
| 提示词 | frontend/src/mastra/index.ts 方法说明句:讲明第一段「通用读法 · 先看受冲」是全领域共用、先于领域清单;列出哪些领域是本产品中文清单。写作形状、product-voice.ts 未动(第三单) |
| 测试 | 新文件 frontend/tests/consult-affliction-reading-20261001.test.ts(6 条):T1 位置与次数、阻塞项钉住、T2 每领域 sections 标题与来源、T3、硬红线 3(清单里每个小写字段名都必须是三张 golden 盘某张卡上的真实键)、T4 |
scripts/research/ 里两个测量脚本的健康问题文本仍是旧问法,只是测量用的问题字符串,不在 frontend/src,未改。
字段名改写(硬红线 3:意思不变,只改到卡上真实位置)
| 位置 | 任务书原文 | 落地文本 | 原因 |
|---|---|---|---|
| T1 第 2 条 ① | 同宫(conjunct_with) |
同宫(星行 conjunct_with、宫行 occupants) | conjunct_with 只在行星行上;领域段宫位行用 occupants 列同宫星 |
| T1 第 2 条 ① | 被土星、火星照(aspected_by) |
原样(aspected_by) | 行星行与领域段宫位行都有 |
| T1 第 2 条 ③ | 本上升的功能凶星 | 本上升的功能凶星(functional_malefics,父母行 functional) | 卡上 base.natal.functional_benefic_malefic.functional_malefics;父母卡 lord_rows / significator_rows 每行带 functional |
| T1 第 2 条 ④ | 落陷或燃烧(combust) |
落陷(status)或燃烧(combust) | 落陷在行星行 status(如「落陷(Debilitated)」);combust 只在 true 时出现 |
| T1 第 7 条(新增) | — | 瑜伽只认 yogas.hits… | 第一单 BUG-1159:names 是领域包的规则候选,只有 hits 成立 |
| parents 第 1 条 | D12 同号宫及其宫主 | D12 同号宫及其宫主(roles.*.d12_house) | D12 同号宫与宫主在 roles.mother/father.d12_house(house/sign/occupants/lord/lord_sign) |
| parents 第 1 条 | roles.father/mother 的 lord_rows、significator_rows |
原样 | 字段存在 |
| education 第 3 条 | 卡上 d9 段和本命 status |
原样 | base.natal.d9、行星行 status 存在 |
| annual 第 2 条 | saturn_from_moon_house |
原样 | 在年运领域段 slow_transits.saturn_from_moon_house |
清单里没写字段名、但卡上本领域段没选中的宫(如迁居的 9 宫、家庭的 2、3 宫、婚姻 UL 的第 2 宫),模型可从 base.natal.houses 星座与行星行推出;未为此改卡。PiK 卡上不出(父亲没有 karaka 行),清单原文「卡上有才看」已覆盖。
改动的既有断言(原值 / 新值 / 原因)
| 文件 · 测试 | 原值 | 新值 | 原因 |
|---|---|---|---|
consultation-methodology.test.ts「the route's own strict checklist…」 |
去掉 baseline 后领域段 = 1 | 去掉 baseline 与通用读法后领域段 = 1 | T1 通用读法不是领域清单 |
| 同文件 education 测试 | domains_without_strict_checklist = ["education"] |
[],且学业段来源是本任务书 |
决策 D6 推翻「报缺不替代」(普通对话) |
| 同文件 health 测试 | 标题含 health-timing-strict | 不含;有 consult-health 段、来源本任务书、含「体质底子」 | 决策 D4/D5 |
consultation-domain-parents-children-20260927.test.ts |
parents / children 报缺;sections[0] = Shared mandatory baseline |
均为 [];sections[0] = 通用读法,baseline 在 sections[1](D7/D12 文字断言保留) |
T1 + D6 |
consult-condensed-checklist-20260927.test.ts「each condensed list is 5–8 lines」 |
全部清单 5–8 行;只有三份 | 三份仍 5–8 行;共 11 份、每份 2–8 行 | T2 定稿文本行数 2–6,不得凑行 |
| 同文件「other routes still quote the live skill…」 | health 段来源是 strict-workflow-router.md | 无 health-timing-strict 段;consult-health 段来源是本任务书 | D4/D5 |
consultation-domain-registry.test.ts 无出生分钟问法 |
「…近期的身心压力和调整重点。」 | 「…我的身体底子怎样,哪些方面要多留意。」 | D4 |
三个 12,000 字符断言(consult-evidence-card-20260927、consult-evidence-card-v2-20260927、consult-condensed-checklist-20260927)一条未改。
字符预算与阻塞项(BLOCKED,待产品决定)
两条断言的口径(开工先核实):
consult-evidence-card-20260927「model-visible size…」:withoutMethod(契约 + 卡,去掉methodology)≤ 12,000 对全部领域;total(整个工具返回,含methodology)≤ 12,000 只对methodHeavy以外的领域(methodHeavy= career / marriage / wealth),≤ 18,000 对全部。consult-condensed-checklist-20260927「size…」:total(含清单)≤ 12,000 对全部 12 个领域(annual / timing 用各自路由 golden)。- 所以任务书「12,000 只算契约 + 卡」的假设不成立:清单在内。
通用读法作为一个 section 占 733 字符(JSON 序列化),年运清单 334。全部下发时实测:
| 盘 / 领域 | 本单之前 含清单 | 全部下发 | 上限 |
|---|---|---|---|
| 泰勒 / annual | 11,918 | 12,979 | 12,000 |
| 乔布斯 / annual | 11,787 | 12,848 | 12,000 |
| 奥巴马 / annual | 11,537 | 12,598 | 12,000 |
| 泰勒 / timing | 11,523 | 12,257 | 12,000 |
| 奥巴马 / timing | 11,496 | 12,230 | 12,000 |
| 乔布斯 / timing | 11,474 | 12,208 | 12,000 |
按交代不改断言、不删清单行、不压缩定稿文本:CONSULT_READING_BUDGET_BLOCKED = {annual, timing}(consultation-methodology.ts,注释写明数字)让只含这两个领域的轮次保持本单之前的方法段(不加通用读法;年运清单已写入但不下发,年运仍列在 domains_without_strict_checklist)。年运或时运与其他领域同轮时,通用读法照常第一段(年运清单仍不发)。测试「T1/T2 budget blocker is pinned」钉住这一缺口,解除时必须有意改它。
产品可选:①把年运 / 时运单领域轮的 12,000 改成与 career / marriage / wealth 同口径(契约 + 卡 ≤ 12,000、总量 ≤ 18,000);②再压卡(年运 slow_transits.key_dates 等)腾出约 1,000 字符;③方法段去掉 further_reading(863 字符)或英文 Shared mandatory baseline(1,007)。决定后删 CONSULT_READING_BUDGET_BLOCKED 的对应项并改钉住测试。
本分支各领域最大值(三张 golden 盘取最大;annual / timing 为阻塞后的实际下发):
| 领域 | 契约+卡 | 含清单 | 盘 |
|---|---|---|---|
| career | 7,233 | 10,653 | 乔布斯 |
| marriage | 8,064 | 11,608 | 泰勒 |
| wealth | 7,466 | 10,824 | 泰勒 |
| health | 7,410 | 10,564 | 乔布斯 |
| education | 6,527 | 9,604 | 泰勒 |
| migration | 6,369 | 9,366 | 泰勒 |
| family | 6,469 | 9,452 | 泰勒 |
| parents | 7,398 | 10,687 | 奥巴马 |
| children | 6,362 | 9,462 | 泰勒 |
| annual | 9,882 | 11,918 | 泰勒 |
| timing | 8,604 | 11,523 | 泰勒 |
| general | 7,859 | 10,877 | 乔布斯 |
健康卡比第一单少 2 字符(标签「身心压力」→「健康」);健康方法段从英文路由换成中文清单,含清单总量反而下降(泰勒 11,120 → 10,485)。
产品决定(2026-10-02):年运 / 时运字数口径,阻塞解除
产品选上节方案 ①:年运、时运单领域轮与事业 / 婚姻 / 财富同口径,契约 + 卡 ≤ 12,000,含清单 ≤ 18,000。在第三单分支 codex/consult-no-presupposition-backtest-20261001 单独一个提交落地:
- 删
CONSULT_READING_BUDGET_BLOCKED:每轮第一段都是通用读法;年运单领域轮下发本产品年运清单(domains_without_strict_checklist为空),时运仍是英文路由。 - 断言改动(原值 / 新值 / 原因):
| 文件 · 测试 | 原值 | 新值 | 原因 |
|---|---|---|---|
consult-evidence-card-20260927「model-visible size…」 |
methodHeavy = career / marriage / wealth |
加 annual、timing | 产品 2026-10-02 字数口径决定 |
consult-condensed-checklist-20260927「size…」 |
全部 12 领域 total ≤ 12,000 | 年运、时运:契约 + 卡 ≤ 12,000、total ≤ 18,000;其余领域不变 | 同上 |
consult-affliction-reading-20261001「T1/T2 budget blocker is pinned」 |
年运只有 baseline 段、报缺;时运无通用读法 | 改为「annual and timing single-domain turns get the shared reading, and annual its list」 | 同上 |
| 同文件 T1、T2 | 跳过年运、时运;annual 期望标题 "" | 全部 12 领域;annual 期望「年运 · consult-annual · 普通对话精简清单」 | 同上 |
- 实测(三张 golden 盘):年运 契约 + 卡 9,501~9,882、总量 12,598~12,979;时运 8,555~8,604、12,208~12,257,都在新口径内。
- BUG-1160、BUG-1161 状态改 resolved(文本层),
BLOCKED.md对应条目划掉。
产品决定(2026-10-02,第二次):受冲读法改为「迹象 + 范围」
第三单名人回测第一轮对照组误报 1 → 15;Claude(PM)按卡片确定性计数核对,在场与缺席的父亲受冲信号数相同。产品改口径,推翻本单以下定稿文本中冲突的部分,实现在第三单分支提交 066558a6:
| 位置 | 原定稿 | 新文本要点 |
|---|---|---|
| 通用读法第 3 条(T1) | 两个及以上受冲:第一句先写这一面,用「可能」 | 引用 AFFLICTION_RANGE_RULE:压力或距离的迹象 + 依据 + 现实范围;不断定传记事实;不写「有分量」「站得住」「不是缺位」「底子不差」「关系稳」「能走下去」;段末请用户说一句,全篇最多一处 |
| 父母第 2 行(T2) | 第一句写「爸爸(妈妈)可能不常在你身边 / 很早就有距离」 | 按通用读法写范围;盘分不出父母在不在身边,不替用户断定 |
| 婚姻受冲行(T3) | 「感情可能不止一段 / 可能有断续」 | 「感情这条线上有波折的迹象」+ 范围,不断定有几段 |
| 健康第 1 行(T2) | 命主兼 6、8 宫主……底子偏弱 | 受冲两个及以上写「身体这条线有压力的迹象」+ 范围,不写「底子不差」,不诊断 |
| 事业第 3 行 | ①接触(消息、面试、初步接洽)②结构性机会(合同、正式职位、长期项目) | ①机会出现(消息、邀约、初步接洽)②成形(合同、合作、长期项目)③公开落地(发布、到账、被看见、名声);另加首行「先讲这张盘一生的事业形态……受冲只说阻力和代价,不改写事业形态」(事业 7 行) |
断言改动(三栏也写在测试注释里):consult-affliction-reading-20261001 父母断言(原 /不得写成「有分量」「站得住」/ → 新「盘分不出父母在不在身边,不替用户断定」且不得再有「可能不常在你身边 / 很早就有距离」)、婚姻断言(原「感情可能不止一段 / 可能有断续」→ 新「感情这条线上有波折的迹象」「不断定有几段」);consult-condensed-checklist-20260927 事业必含词(原「结构性机会」→ 新「机会出现」「成形」「事业形态」,并断言事业清单无「面试 / 职位 / 简历」)。字数断言全部原样通过。
未做 / 交给第三单
- 写作形状去「对象在场」预设、
product-voice.ts逆行示例(排查 D 类源头)——第三单。 - 名人回测(门槛「两个及以上受冲信号」的误报校验)——第三单。
- 年运 / 时运单领域轮的通用读法与年运清单——待产品定字符口径(上节)。