From 8097adca8f1ba18d22848bde67ad7d6c29d8273a Mon Sep 17 00:00:00 2001 From: Jesse_Chen Date: Sun, 27 Sep 2026 17:01:11 +0800 Subject: [PATCH] docs: evidence card v2 records (PROGRESS, checklist, CHANGELOG, BUG-1060) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit TASK-consult-evidence-card-v2-20260927 T5. PROGRESS with the native-module table, the final per-card table, before / after sizes (3 public AA charts x 12 questions, all single-domain turns <= 12,000), red-line tests, failure-name comparison and three-column edits; real-device checklist; CHANGELOG; task index row set to 待验收; VOICE / DESIGN name the new lookup labels (no UI change); BUG-1060 investigating (Double Transit D9 house target reads the D9 lagna; not fixed here, red line 1). Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_017eEAG8HD3mm8gsKXgk8uU8 --- CHANGELOG.md | 10 ++ docs/BUG_HISTORY.md | 15 ++ ...GRESS-consult-evidence-card-v2-20260927.md | 156 ++++++++++++++++++ docs/tasks/README.md | 2 +- .../consult-evidence-card-v2-20260927.md | 44 +++++ frontend/DESIGN.md | 2 +- frontend/docs/VOICE.md | 2 +- 7 files changed, 228 insertions(+), 3 deletions(-) create mode 100644 docs/tasks/PROGRESS-consult-evidence-card-v2-20260927.md create mode 100644 docs/testing/consult-evidence-card-v2-20260927.md diff --git a/CHANGELOG.md b/CHANGELOG.md index e263fe81..95c76024 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,15 @@ # 印度占星 Skill 更新日志 +## 2026-09-27 — 普通对话数据卡 v2:年运看年盘、婚恋分三层、每张卡都带九分盘确认(待验收) + +- 按懂印度占星的顾问意见调整各张数据卡。每张卡的基础段多了九分盘摘要:九分盘上升、每颗星在九分盘的星座与强弱、是否「同宫」(Vargottama)、本命与九分盘强弱是否反转。 +- 问「未来一年」:卡上有年盘(年盘上升、年主、Muntha 落宫、全年 Mudda 分段与起止日期、太阳 / 月亮 / 年主的 Tajika 相位),标为参数敏感;宫位看 1 宫、当前与下一段子运主管的宫、全年木星土星经过的宫;行运只列木土换座、逆行 / 顺行和罗睺计都换座日期。年盘算不稳时卡上写「年盘未接入」,不拿本命顶替。 +- 问时运:多了罗睺计都、木星土星所在星座的八分法分数、双重过运(木土同时激活哪些宫,不报度数);分盘随同一轮另一个领域走(单问时运看 D9)。 +- 事业加 AL、10 宫与木土所在宫的八分法分数;婚恋加 5 宫与 5 宫主、昼夜盘、Punarphoo(只作观察)、双重过运对 7 宫 / 7 宫主 / DK / UL、婚姻点;财富点名 8 宫、12 宫。Chara 大运移出卡片、KP 不上卡,需要时「多看一眼」(KP 注明精确宫头仍未核准);新增可多看的:Karakamsha、宫主链、本命—九分盘—十分盘联动、Argala、月亮行运。 +- 事业、婚恋、财富的方法清单换成 5–7 行精简版(必看项、分三层、禁写:5 宫主大运不等于领证、金星过月亮不等于心动月、Punarphoo 不能写成结婚、土星回到月亮只是观察;性别未知时金星木星都看)。报告等其他地方用的完整清单不变。 +- 每轮模型可见内容:事业约 9,800、婚恋约 10,500、财富约 9,900 字(原 13,100–15,500);年运约 11,500、时运约 11,300 字(多了年盘和行运,都在 12,000 以内)。引擎每轮多算约 40 毫秒。 +- Skill 版本不 bump(Skill 文本未改)。不改数据库。发现双重过运的九分盘「第 N 宫」目标实际检查的是九分盘上升(BUG-1060,待定是否另修)。 + ## 2026-09-27 — 生时校正:范围只由系统说;去掉「重新生成」;给模型的资料瘦身(待验收) - 说一件带年月的事后,「范围从 A 变为 B。」这句不再被裁掉,也不会先闪出来再消失;「这次没有重新比较」「候选比较这次没跑成」同样保留(BUG-1055)。 diff --git a/docs/BUG_HISTORY.md b/docs/BUG_HISTORY.md index b490de8a..e7f58128 100644 --- a/docs/BUG_HISTORY.md +++ b/docs/BUG_HISTORY.md @@ -14278,3 +14278,18 @@ - 相关记录:BUG-1053(按步取答,本条补它漏掉的转换器缓冲)、BUG-1051(结算只认写回答那一步的 `stop`,不变)。 - 复发自:无(BUG-1053 引入按步取答时留下的缺口)。 - 修复版本:`cb3ee558`,随 `cd4dde9d` 部署 staging(run 2964)。 + +## BUG-1060 | 双重过运的九分盘「第 N 宫」目标实际检查的是九分盘上升 + +- 状态:investigating(本单不修:红线不许改既有计算结果;需产品决定是否另开单) +- 首次发现 / 最近更新:2026-09-27 / 2026-09-27 +- 影响面:`scripts/jyotish_engine.py` `cmd_double_transit_pac` 的 D9 层;凡调用它的路径(全读 / 报告的 `double_transit_pac`,以及本单起普通对话数据卡的时运、婚恋双重过运结论)。 +- 现象:数据卡 v2 接入双重过运(TASK-consult-evidence-card-v2-20260927 T1)时核对 PAC 结果发现:目标名写「D9_7宫()」,但用来判定同宫 / 相位 / 合相的经度是 D9 上升星座的中点。用一张公开 AA 盘复现:土星对「D9_7宫」判为「10 宫相位」,按标签所写的 D9 第 7 宫算应无相位,按 D9 上升算才是 10 宫相位。 +- 触发条件:`house` ≠ 1 时的任意一次调用;`house = 1` 时两者恰好相同。 +- 根因:`d9_event_house_lon = (d9_asc_idx * 30) + 15` 用了 D9 上升索引,应为 D9 第 N 宫的星座索引 `d9_event_si`(同函数 D1 层用的是 `event_si`)。已核对代码与一次复现;未核对该函数其余 D9 目标的取法是否合 KN Rao 原意。 +- 修复:未修。数据卡照原生输出复制该函数的结论(不在卡上另行换算)。 +- 验证:—(修复时需加「house ≠ 1 时 D9 第 N 宫目标用 D9 第 N 宫星座」的回归,并按冻结计分清单确认不涉及 ERR-110 的文件)。 +- 防复发:接入原生函数时逐个核对目标名与实际参与计算的值是否一致。 +- 相关记录:无 +- 复发自:无 +- 修复版本:待定 diff --git a/docs/tasks/PROGRESS-consult-evidence-card-v2-20260927.md b/docs/tasks/PROGRESS-consult-evidence-card-v2-20260927.md new file mode 100644 index 00000000..401a0628 --- /dev/null +++ b/docs/tasks/PROGRESS-consult-evidence-card-v2-20260927.md @@ -0,0 +1,156 @@ +# PROGRESS · 数据卡 v2(采纳占星顾问意见)· 2026-09-27 + +- 执行方式:直接执行(产品负责人授权子代理执行;Claude 事后独立验收) +- 基线:`origin/staging` `5b061e43`(本单任务书提交);已核对含数据卡 v1 `cd4dde9d` 与校正 grounding `261d7b2e`。 +- 分支:`codex/consult-evidence-card-v2-20260927`,工作树 `.worktrees/consult-evidence-card-v2-20260927`(本地提交,未推送) +- 串行:`TASK-consult-gender-optional-20260927`(性别选填)排在本单之后,基线须含本单。 +- BUG 编号:开工核对 `docs/BUG_HISTORY.md` 最大号 BUG-1059;本单新记 BUG-1060(investigating,未修)。 +- Skill:**不 bump**(Skill 文本未改;精简清单是前端常量,见 T4)。 +- 预检(AGENTS §9):`pre_work_check.py` 已跑,退出 0(远端 verified、适配器 / 碎片扫描 / focused 测试全部 ok);读过 `pre_work_error_ledger.md` ERR-110 / 111 / 112。冻结计分文件(`sealed_holdout_rerun.py` `PRODUCTION_FILES` 10 个 + holdout v3 `frozen_scoring.files` 12 个)一个都没动;跨进程比较一律 `PYTHONHASHSEED=0`;每次提交只 `git add` 具体路径并看 `--cached --stat`。 + +## 提交 + +| 阶段 | 提交 | 内容 | +| --- | --- | --- | +| T1 | `d5616c34` | 引擎:新模块 `scripts/consultation_native_layers.py` 接入已有原生技法;薄注册;Python 定向测试;golden 加年运 / 时运问法 | +| T2 | `33739e37` | 投影:原生层按层白名单进入模型投影;golden 逐值断言 | +| T3 | `db170744` | 数据卡 v2(`evidence-card-v2`);补取枚举扩展;系统提示与工具说明同步 | +| T4 | `7ad40043` | 事业 / 婚恋 / 财富精简清单(方案 B),只在普通对话下发 | +| T5 | 本提交 | CHANGELOG、本记录、真机清单、任务索引、BUG-1060 | + +## 结论 + +| 项 | 结果 | +| --- | --- | +| T1 引擎接入 | 完成。见「接入的原生模块」。只新增输出:3 张公开 AA 盘 × 4 条路由(婚恋 / 事业 / 年运 / 时运)A/B,除新键外逐项相同(环境字段:图缓存时间戳、VedAstro 网关状态除外);Python 测试里也有同进程开关对照。本机一轮多约 40 ms(原生层 37–49 ms;工作流缓存命中时整轮约 0.6 s) | +| T1 年盘让步 | **未触发**。3 张盘年盘包全部可用(Solar Return、年盘上升、Muntha、年主、Mudda 分段均 `partial_verified`),状态标 `parameter_sensitive`。不可靠时的「年盘未接入」路径有测试(冲突 / 阻塞时不输出任何年盘字段,不拿本命数据顶替) | +| T1 关键换座日期让步 | **未触发**。木星、土星换座与逆行 / 顺行转向来自 `ephemeris_events`;罗睺计都换座用同样的每日正午采样读引擎的交点位置(原扫描器不含交点) | +| T2 投影 | 完成。7 个原生层各自一张嵌套键白名单(参照 BUG-1054),不放宽既有 natal / timing 键集,不改深度与条数上限;golden 断言投影值与引擎层逐值相等(双重过运只少一条带表情符的每宫摘要句)。另放行 pada `A1`(引擎的 AL) | +| T3 数据卡 v2 | 完成。见「最终对照表」。「本轮技法」面板:v1 的逐行一致测试原样通过 | +| T4 精简清单 | 完成。见「清单下发设计」 | +| 体量 | 单领域 3 盘 ×(10 问法 + 年运 + 时运)全部 ≤ 12,000(最大 11,659,年运);见「体量」 | + +## 接入的原生模块(T1) + +全部写在一个新的图表顶层键 `chart.consultation_native_layers`(schema `jyotish.consultation_native_layers.v1`)。不放进 `chart.modules`:主题报告会数它拿到的模块个数(`full_reading_module_count`),放进去这个既有值会从 23 变 24。 + +| 层 | 原生来源 | 输出字段 | 路由 | +| --- | --- | --- | --- | +| `d9_summary` | `jyotish_engine._get_dignity_level`(D9 旺弱,上下文规则同全读 D9 步骤 `_build_dignity_context`)、`_calc_vargottama`;D1 旺弱取图表自带 `status` 标签 | `lagna`、`lagna_vargottama`、`planets.<行星>.{d9_sign, d9_dignity, vargottama}`、`vargottama`、`reversals[{planet, d1, d9}]`、`reversal_rule` | 全部 | +| `punarphoo` | `punarphoo.detect_punarphoo`(行运土星取参考日本地正午) | `status: observation_only`、`natal_present`、`orb_deg`、`orb_limit_deg`、`same_house`、`saturn_return_to_natal_moon.{active, orb_deg, orb_limit_deg}`、`claim_boundary` | 全部 | +| `vivah_saham` | `jyotish_engine._calc_vivah_saham`(全读 Step 16 的本命婚姻点) | `longitude`、`sign`、`degree_in_sign`、`house`、`natal_conjuncts`、`boundary` | 全部 | +| `day_night` | `chart.modules.gulika.daynight_evidence`(swisseph 日出日落) | `is_day` | 全部 | +| `slow_transits` | 位置:`jyotish_engine._calc_sidereal_planets_for_jd`(参考日本地正午,按请求岁差 / 交点口径);木土换座与转向:`ephemeris_events.build_ephemeris_events`;交点换座:同采样法读引擎交点;SAV / BAV:`modules.ashtakavarga` | `current.{Jupiter,Saturn,Rahu,Ketu}.{sign, degree_in_sign, retrograde, natal_house}`(木土另有 `sav`、`bav`)、`key_dates[{kind, date, body, from_sign, to_sign, to_natal_house | motion}]`(参考日起 365 天)、`houses_in_window`、`window` | 全部 | +| `double_transit` | `jyotish_engine.cmd_double_transit_pac`(1–12 宫各跑一次);DK / UL 不是该函数的目标,用同一 PAC 规则 `_check_pac` 检查并注明 | `active_houses`、`conclusions[{house, layer, target, strength, jupiter_pac, saturn_pac}]`(不含度数)、`karaka_targets.{DK,UL}`、`house_7_summary`、`boundary` | 全部 | +| `karakamsha` | `jaimini.calc_karakamsha`(AK 在 D9) | `atmakaraka`、`karakamsha_sign / degree / lord`、`karakamsha_natal_house` | 全部(只补取) | +| `argala` | `argala.calc_argala` | 原生输出(houses / planets / summary) | 全部(只补取) | +| `dispositor_chains` | `jyotish_engine.calc_all_dispositor_chains`(宫主链) | `chains` | 全部(只补取) | +| `inter_chart_linkage` | `jyotish_engine.calc_all_inter_chart_linkages`(D1→D9→D10) | `planets.<行星>.{D1,D9,D10}.{sign, house, lord}` | 全部(只补取) | +| `moon_transit` | `_calc_sidereal_planets_for_jd` | `sign`、`degree_in_sign`、`natal_house`、`house_from_natal_moon` | 全部(只补取) | +| `annual_tajika` | `annual_tajika_pack.build_annual_tajika_pack`(`solar_return_full_report` + `cmd_tajika`) | `status: parameter_sensitive`、`target_year`、`age`、`varsha_year.{start,end}`、`annual_lagna`、`varshesha`、`muntha.{sign, lord, house_in_annual_chart, house_in_natal_chart}`、`mudda_dasha[{lord, months, start, end}]`、`tajika_aspects[{name, planets, aspect, motion}]`(太阳 / 月亮 / 年主参与的 Ithasala / Easarapha 候选)、`producers`、`boundary` | 只 annual;其余 `not_applicable` | + +说明: + +- 年份取「参考日所在的太阳年」:当年太阳回归若晚于参考日,改用上一年。Mudda Dasha 的原生输出只有各段月数(Vimshottari 比例分 12 个月);本模块把「本次到下次太阳回归」按月数比例切成起止日期,这是唯一新增的换算,写在模块文档和 `_mudda_segments` 测试里。 +- 宫位:凡是「某星座落本命第几宫」都用整宫制从上升算(与引擎 `house` 字段同法)。 +- 每个层独立 try/except:一个原生函数抛错只让自己那层 `blocked`,工作流照常成功(有测试)。 +- 注册:`_attach_local_consultation_layers` 里合并字段之后加一行调用(`jyotish_api_server.py` +4 行:一行 import、一个三行调用;类方法数、伪造点均不变,注释里没有伪造点字面量)。 + +## 最终对照表(数据卡 v2) + +每张卡都有**基础段**:上升、十二宫星座、行星落宫(星座 / 宫 / 度数 / 星宿 / 逆行 / 庙旺)、功能吉凶与宫主归属、Vimshottari 当前 MD / AD / PD 起止与下一段、大运内全部子运、Narayana 当前 md / ad / pd,**v2 新增 D9 摘要**(D9 上升、各行星 D9 星座与旺弱、Vargottama、D1↔D9 重大反转;不含 D9 宫位与相位)。 + +| 领域 | 分盘 | 宫 | 其他(v1 保留) | v2 新增 | v2 移除 / 改补取 | +| --- | --- | --- | --- | --- | --- | +| 事业 | D10 | 10 | A10、AmK、格局、行运、Shadbala | **AL**(引擎 pada A1)、**10 宫 SAV**、**木星 / 土星当前星座、所落本命宫与 SAV** | 补取:Karakamsha、宫主链、D1→D9→D10 联动、Argala、KP(带 blocked 说明)、Chara 大运 | +| 婚恋 | D9 | 7、**5** | UL、A7、DK、金星、木星、行运 | **5 宫 / 5 宫主**、**昼夜盘 `is_day`**、**Punarphoo**(observation_only)、**双重过运**(7 宫这次运行的结论 = 7 宫 / 7 宫主 / 命主 / D9 / 月亮盘;DK、UL 两行)、**Vivah Saham**(度数与落宫)、**「性别未知」** | 补取:KP 7 宫副主星(带 blocked 说明)、Chara 大运 | +| 财富 | D2、D11 | 2、11、9、5、**8、12** | 格局、Ashtakavarga、Shadbala | 8 / 12 宫点名 | 补取:D10(收入来自工作时)、Argala、KP | +| 年运 | D1 | **1 + 当前 AD 主与下一 AD 主所主管的宫 + 全年木土过境所落本命宫**(附 `house_basis`) | — | **年盘**(年盘上升、年主、Muntha 与主星及落宫、Mudda 全年分段起止、太阳 / 月亮 / 年主的 Tajika 相位,`parameter_sensitive`);不可用时写「年盘未接入」;**关键日期**(木土换座、逆行 / 顺行、罗睺计都换座,不逐月) | 移除:Chara 大运、泛行运层(改为关键日期) | +| 时运 | D1 + **随同轮另一领域**(单独时 D9;另一领域的段已有该分盘时不重复,记 `vargas_follow`) | — | 土星、木星、行运 | **罗睺 / 计都**(星座、度数、本命宫、换座日期)、**木土当前星座 SAV 与 BAV**、**双重过运结论列表**(宫、层、目标、强度,不给度数) | 移除:Chara 大运;月亮行运改补取 | +| 健康 / 学习 / 迁居 / 家庭 / 父母 / 子女 / 综合 | 同 v1 | 同 v1 | 同 v1 | 只多了基础段 D9 摘要 | — | + +- KP 不在任何卡上;补取时返回 `{kp_cusps, note: "KP 精确宫头仍 blocked:只作参考,不得作为结论依据"}`。 +- 补取枚举新增:`karakamsha`、`dispositor_chains`、`inter_chart_linkage`、`argala`、`moon_transit`(D10 用既有 `varga:D10`,Chara 用既有 `chara_dasha`)。活动行中文名:灵魂星在九分盘的落点(Karakamsha)、宫主链、本命、九分盘、十分盘的联动、门闩(Argala)、月亮行运。 +- 卡自己写的字只有两个标签(`EVIDENCE_CARD_LABELS`):「性别未知」「年盘未接入」;其余值全部抄自投影 / 引擎(「每个卡值都是引擎已有值」测试只对这两个标签放行)。 +- 基础段已有 D9 摘要,所以 `varga:D9` 不再列为可补取。 + +## 体量(模型可见字符,`JSON.stringify` 长度) + +改前 = v1 代码(基线 `5b061e43`)、改后 = 本分支,同一批引擎输出:本分支引擎对 3 张公开 AA 盘 × 12 问法(10 问法 + 年运 + 时运)现跑的 36 份结果(`scripts/research/measure_consult_evidence_card.ts`)。 + +| 问法 | 改前均值 | 改前最大 | 改后均值 | 其中卡 | 契约 | 清单 | 不含清单 | 改后最大 | +| --- | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | +| 事业 | 13,416 | 13,494 | 9,822 | 6,416 | 777 | 2,616 | 7,191 | 9,880 | +| 婚恋 | 15,476 | 15,550 | 10,450 | 6,969 | 775 | 2,693 | 7,742 | 10,633 | +| 财富 | 13,103 | 13,125 | 9,912 | 6,564 | 777 | 2,557 | 7,340 | 9,950 | +| 健康 | 10,048 | 10,135 | 10,925 | 6,327 | 813 | 3,772 | 7,138 | 10,988 | +| 学习 | 7,473 | 7,479 | 8,351 | 5,528 | 785 | 2,024 | 6,312 | 8,383 | +| 迁居 | 7,459 | 7,473 | 8,336 | 5,473 | 825 | 2,024 | 6,297 | 8,361 | +| 家庭 | 7,519 | 7,535 | 8,396 | 5,544 | 818 | 2,021 | 6,360 | 8,409 | +| 综合 | 9,213 | 9,276 | 10,101 | 7,285 | 780 | 2,022 | 8,064 | 10,140 | +| 父母 | 7,298 | 7,312 | 8,175 | 5,329 | 810 | 2,022 | 6,138 | 8,196 | +| 子女 | 7,313 | 7,329 | 8,191 | 5,342 | 812 | 2,023 | 6,153 | 8,218 | +| **年运** | 8,125 | 8,191 | **11,533** | 8,728 | 771 | 2,021 | 9,497 | **11,659** | +| **时运** | 9,175 | 9,250 | **11,318** | 7,626 | 774 | 2,904 | 8,399 | 11,440 | + +- 36 次全部 ≤ 12,000(v1 时事业 / 婚恋 / 财富 9 次超出)。每张卡多约 870 字(基础段 D9 摘要)。 +- 年运构成(均值):年盘约 1,730、关键日期与木土罗计当前约 1,400、宫位 8 行约 550 + 依据 200、基础段约 4,800;时运:双重过运结论约 1,000–1,300、罗计与木土 SAV / BAV 约 750。 +- 两领域一轮(同一盘,参考):事业 + 时运 14.6–14.8K;婚恋 + 时运 14.8–15.3K;年运 + 事业 14.9–15.1K;财富 + 时运 14.5–14.9K;事业 + 财富 13.1K(v1 23.9K);婚恋 + 事业 13.4–13.8K(v1 26.1K)。单领域目标不覆盖两领域,如实记数。 + +## 清单下发设计(T4) + +- 谁消费 `methodology`:`consultationMethodologyForDomains` 在 `frontend/src` 里只被 `mastra/consultation-tools.ts`(普通对话计算工具的结果)调用;`strict-workflow-router.md` 在 `frontend/src` 与 `scripts/*.py` 里只被 `lib/consultation-methodology.ts` 读取(系统块的 `sharedConsultationMethodMarkdown` 取 router 的 Full-Spectrum 段 + 事件裁决骨架,不变)。报告(`personal-report.ts`、Python 报告编排)不读这两者。 +- 做法:新增前端常量 `frontend/src/lib/consultation-condensed-checklist.ts`,事业 5 行、婚恋 7 行、财富 5 行(必看项 + 分三层 + 禁写 + 卡外补取,婚恋另含「性别未知:金星与木星都要看,不按性别指定夫星 / 妻星」)。`consultationMethodologyForDomains` 对这三类用精简清单替换「严格路线段 + 事件裁决文件」两段,标题仍带路线名(如「事业 · career-timing-strict · 普通对话精简清单」),来源写明据 router §2–§5 与 `event_judgment_*.md` 精简。共用基线段照旧;时运 / 健康仍送 router 原文段;无命名清单的领域照旧如实上报。 +- 禁写规则逐字含:「5 宫主大运 ≠ 法律婚」「金星过本命月亮 ≠ 心动月」「Punarphoo 不得写成结婚」「土星回到本命月亮是观察项,不是结婚」;分三层:事业「接触 / 结构性机会 / 公开落地」、婚恋「心动接触 / 关系成对 / 社会法律落地」、财富「挣钱机会 / 收入或资产真实增长 / 到账变现」。 +- Skill 文本未改、router 与三份事件裁决文件未改(本分支 `git diff origin/staging -- skills/` 为空),所以不 bump。系统提示里对 `methodology` 的描述同步为「事业 / 婚恋 / 财富是精简清单,其余路线引用 live Skill」。 +- 证明其他路径不变:`consult-condensed-checklist-20260927.test.ts`「only the consultation tool builds the methodology」(源码扫描:只有 methodology 模块与咨询工具引用)、「other routes still quote the live skill」(时运 / 健康来源仍是 router,系统块仍含 Full-Spectrum 与骨架)。 + +## 红线测试清单 + +| 红线 / 验收 | 测试 | +| --- | --- | +| 1 只新增输出、不改既有结果 | `tests/test_consultation_native_layers.py`「the new layer leaves every existing output unchanged」(同进程开关对照);另做 3 盘 × 4 路由跨工作树 A/B(`PYTHONHASHSEED=0`)只差新键;golden 的 family 工作流除新键外与旧 golden 逐字节相同 | +| 1 growth contract | 门禁集内 `tests/test_api_server_growth_contract.py` 通过(类方法数、伪造点不变;行数 +4) | +| 2 原生值、卡只复制 | Python:每层与原生函数直接调用逐值比对(D9 旺弱 / Vargottama / Punarphoo / Vivah / 双重过运 7 宫 / 换座日期 / SAV-BAV / 年盘字段 / Mudda 月数);前端:`consult-projection-native-20260927`(投影 = 引擎层)、`consult-evidence-card-v2-20260927`(逐卡逐项 = 引擎层)、v1「every card value is a value the projection or the engine already holds」 | +| 2 golden 来源 | `scripts/research/capture_consult_evidence_card_golden.py` 重新生成(3 张公开 AA 盘;family / annual / timing) | +| 3 v1 红线 | v1 的卡、补取、遥测、BUG-1053 单次作答测试全部仍通过(改动的断言见三栏) | +| 让步 2 年盘不可靠 | Python「an unreliable annual pack is blocked and never filled with natal data」;前端「a missing or blocked annual pack says 年盘未接入」 | +| KP 不上卡 | 前端「no card carries Chara Dasha or KP; both are lookups」;补取返回 blocked 说明 | +| T4 精简清单 | 前端「the writer's prompt carries the condensed list…」(真实 Agent + 记录提示词的假模型,事业 / 婚恋 / 财富逐一断言含清单与禁写、不含长清单原文) | +| 体量 | 前端 T3「contract + card under 12,000 without the checklist」、T4「every single-domain turn stays within 12,000」(golden 3 盘 × 12) | + +## 改动的既有断言(原值 / 新值 / 原因) + +| 文件 | 原值 | 新值 | 原因 | +| --- | --- | --- | --- | +| `frontend/tests/consult-evidence-card-20260927.test.ts`「every card value is a value…」 | 卡上每个叶子值都必须是引擎 / 投影已有值 | 同上,另对 `EVIDENCE_CARD_LABELS` 两个标签放行 | 决策表要求卡写「性别未知」「年盘未接入」 | +| `frontend/tests/consult-evidence-lookup-20260927.test.ts`(2 处) | 提示词含 `evidence-card-v1` | 含 `evidence-card-v2` | 卡版本升级 | +| `frontend/tests/consult-evidence-card-telemetry-20260927.test.ts`(4 处) | `cardVersion: "evidence-card-v1"`、`agentVersion: "consultation-evidence-card-v1"` | v2 | 同上(记录字段集合不变) | +| `frontend/tests/consultation-methodology.test.ts` 事业用例 | 来源为 `strict-workflow-router.md`、正文含 `Opportunity contact`、领域段 2 个(路线 + 事件裁决) | 来源为精简清单、正文含「接触」与 D10、领域段 1 个 | T4 方案 B | +| 同上 财富用例 | 正文含 `wealth-timing-strict` 别名 | 来源为精简清单、正文含 D2 | T4 方案 B(标题仍是 finance-timing-strict,旧名不单列) | + +## 测试与构建(Node 22.14;无 Docker) + +| 项 | 基线 `5b061e43` | 交付 `7ad40043` | 结论 | +| --- | --- | --- | --- | +| `tsc --noEmit` | — | 0 错 | 通过 | +| `npm run lint` | 0 error / 127 warning | 0 error / 127 warning | 通过 | +| `npm test` 全量 | 4152 条:4100 过 / 24 败 / 28 跳 | 4174 条:4122 过 / 24 败 / 28 跳 / 0 cancelled | 失败名单与基线逐条相同(24 条全是需 Docker / PostgreSQL 的数据库与部署套件);按名单比对 0 条消失,新增 22 条 | +| 中间阶段 | — | T1 4152、T2 4157、T3 4169 | 每段失败名单同基线、0 消失 | +| Python 门禁集(`gate-pytest-args` + 调研 + 领域注册表 + 本单新测试) | 953 过 / 1 跳(门禁集 + 调研) | 975 过 / 1 跳(+ 领域注册表 15 + 本单 7) | 通过(含 growth contract) | +| `tests/test_consultation_contract_golden.py`(键路径超集) | — | 通过 | 新顶层键是超集 | +| `npm run build -- --webpack` | `/`、`/chart`、`/ephemeris`、`/people` ○ Static | 同 | 通过 | +| 首屏 gzip(level 9) | rootMainFiles 4 个 130,933 B;index.html 引用 36 个 660,416 B | 130,933 B(0.00%);660,409 B(−0.001%) | 通过 | +| `frontend/frontend/` 残留 | — | 构建后出现(只含 node_modules),已删 | — | + +## 发现的问题与观察(未在本单修) + +- **BUG-1060(investigating)**:`cmd_double_transit_pac` 的 D9 层「D9_N宫」目标用的是 D9 上升星座中点(`d9_asc_idx * 30 + 15`),不是 D9 第 N 宫;标签写第 N 宫的星座,实际检查的是 D9 上升。本单红线不许改既有计算结果,卡照原生输出复制;需产品决定是否另开单修(会改变报告等既有路径的双重过运结果)。 +- `annual_tajika_pack` 的 `mudda_dasha` / `patyayini_dasha` 字段 `producers_checked` 里含字段自身(循环引用),整个包也含 `datetime`,不能直接 `json.dumps`;本单只复制分段列表,不受影响。报告路径走 `normalize_report_pack_contract`,是否受影响未核对。 +- 引擎里有两个本命 Vivah Saham 公式:全读 Step 16 `_calc_vivah_saham`(金星 − 土星 + 上升,带落宫)与 `tajika.calc_all_sahams`(金星 − 火星 + 上升,注释写「简化」)。卡用前者(它就是全读的婚姻敏感点并直接给落宫)。 +- `SKILL.md`「关联技法完整调取」列举的基础段内容没写 D9 摘要(不矛盾、只是不全);本单不改 Skill 文本以免 bump,若要同步可随性别单一起改。 + +## 环境缺口 + +- 无 Docker:数据库 / 部署套件 24 条失败,名单与基线逐条一致。 +- 无真实模型凭据与浏览器登录态:模型是否真的引用年主 / Muntha / Mudda、是否分三层、是否不把 Punarphoo 写成结婚,留给 `docs/testing/consult-evidence-card-v2-20260927.md` 真机清单。 diff --git a/docs/tasks/README.md b/docs/tasks/README.md index b904daaf..48d47464 100644 --- a/docs/tasks/README.md +++ b/docs/tasks/README.md @@ -131,7 +131,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%);四处领域→技法来源对账并起草各领域数据卡(家庭拆父母/子女);卡体量与逐字一致性;按卡算的提速空间;反馈迭代埋点方案。只调研不改线上 | 已验收(待产品拍板 7 项) | `codex/consult-evidence-card-research-20260927` 快进 staging;报告 `docs/research/consult_evidence_card_research_2026_09_27.md`;投影缺口记 BUG-1054 investigating | | `TASK-consult-evidence-card-20260927.md` | `PROGRESS-consult-evidence-card-20260927.md` | **普通对话改用数据卡**(产品 09-27 同意调研 7 项 + 补取一次):先修 BUG-1054 投影丢 Narayana 当前段/PD;新增父母/子女领域(引擎仍走 family);模型只读答题契约 + 基础段 + 领域段,研究/西洋/状态/不适用留后台;MEVG/真实案例只留一行;补取工具每轮 1 次;反馈 6 项日志 | 已验收(真机欠) | `75a1844c`…`20b6473c`(T1–T7);BUG-1054/1059;Skill 6.9.17;遗留 3 项见 PROGRESS 验收节 | -| `TASK-consult-evidence-card-v2-20260927.md` | `PROGRESS-consult-evidence-card-v2-20260927.md` | **数据卡 v2(采纳占星顾问意见)**:基础段加 D9 摘要;年运卡加年盘(年主/Muntha/Mudda/Tajika 相位,参数敏感);时运加罗睺计都、双重过运、木土 SAV/BAV、分盘随领域;Chara Dasha 移出卡;事业/婚恋/财富按逐项标注增补,清单精简为「必看+分三层+禁写」;引擎接入已有模块(Python) | 待领取 | 串行在前;性别单在后 | +| `TASK-consult-evidence-card-v2-20260927.md` | `PROGRESS-consult-evidence-card-v2-20260927.md` | **数据卡 v2(采纳占星顾问意见)**:基础段加 D9 摘要;年运卡加年盘(年主/Muntha/Mudda/Tajika 相位,参数敏感);时运加罗睺计都、双重过运、木土 SAV/BAV、分盘随领域;Chara Dasha 移出卡;事业/婚恋/财富按逐项标注增补,清单精简为「必看+分三层+禁写」;引擎接入已有模块(Python) | 待验收 | `d5616c34`(T1 引擎)`33739e37`(T2 投影)`db170744`(T3 卡)`7ad40043`(T4 清单);Skill 不 bump;BUG-1060 investigating;串行在前,性别单在后 | | `TASK-consult-gender-optional-20260927.md` | `PROGRESS-consult-gender-optional-20260927.md` | **星盘资料加性别(选填)**:本人与星盘档案可填女/男/不填;婚恋卡按性别取夫星/妻星,未填两边都看;加可空列(test:db 以门禁为准) | 待领取 | 串行在数据卡 v2 之后 | | — (产品 09-27 拍板 D1–D3,直接执行) | `PROGRESS-consult-single-pass-answer-20260927.md` | **普通咨询回答没看过星盘(BUG-1053,引入 `04463e9a`,生产不受影响)**:本命主循环工具结果后那一步看得到证据、正文却被丢弃,用户看到的是另开的 compose 流(只有历史 + 问题、判断依据恒空)写的。D1 删 compose / interpret / drain,主循环最后一步的正文即回答(按步取答,调用工具的那一步正文整段丢);写作要求搬进用户轮;续写带计算结果;工具 110 秒不变,拿到计算结果后循环交给 70 秒答案钟,最坏 180 秒;BUG-1051 结算规则保留(按写回答那一步判定)。D2 观测字段名不变、含义改为写回答那一步 | 已验收(真机欠) | `codex/consult-single-pass-answer-20260927`(本地,未推送);新回归 15 条用真实 `getJyotishAgent` + 记录提示词的假模型 + golden 计算数据;全量失败名单 0 新增;Python 948/1;`/` ○、gzip +0.24%;真机清单 `docs/testing/consult-single-pass-answer-20260927.md` | | `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 一致) | diff --git a/docs/testing/consult-evidence-card-v2-20260927.md b/docs/testing/consult-evidence-card-v2-20260927.md new file mode 100644 index 00000000..4b610d0b --- /dev/null +++ b/docs/testing/consult-evidence-card-v2-20260927.md @@ -0,0 +1,44 @@ +# 真机清单:普通对话数据卡 v2(2026-09-27) + +对应任务书 `docs/tasks/TASK-consult-evidence-card-v2-20260927.md`。部署到 staging 后照做;自动化覆盖不到的只有「真实模型怎么用这张卡」。 + +准备:用一个出生时间已确认(能看「星盘」页)的账号。每条都在新的普通对话里问。默认模型做一遍,再把会话模型换成 gpt-5.6-luna 做一遍。 + +## A. 年运:引用年盘 + +| # | 问法 | 应看到 | 通过 | +| --- | --- | --- | --- | +| A1 | 未来一年重点是什么 | 回答提到年主(Varshesha)、Muntha 落在哪一宫、以及 Mudda 分段(某星主事的一段时间,带起止月份);这些说成「年盘结构、参数敏感」,不说成一定发生 | ☐ | +| A2 | 同上 | 提到的木星 / 土星换座、逆行或顺行、罗睺计都换座日期,与「星历」页同一时间段的换座 / 停滞对得上;不逐月罗列 | ☐ | +| A3 | 同上 | 如果回答说「年盘这次没接上」,就不应再出现年主、Muntha、Mudda 的具体说法(不许拿本命顶替) | ☐ | + +## B. 婚恋:分三层、不把 Punarphoo 写成结婚 + +| # | 问法 | 应看到 | 通过 | +| --- | --- | --- | --- | +| B1 | 今年婚恋怎么样 | 回答分开说「心动 / 认识」「关系成对」「法律或社会层面的落地」,没有把三件事压成一句「今年有婚恋机会」 | ☐ | +| B2 | 同上 | 若提到 Punarphoo 或「土星回到月亮」,只作观察,不说「会结婚」;不出现「金星经过月亮那个月就是心动月」这类说法 | ☐ | +| B3 | 同上 | 不按性别下「夫星 / 妻星」定论(产品还没记录性别);金星和木星都有提到或都被考虑 | ☐ | +| B4 | 同上 | 提到的 5 宫 / 7 宫星座与宫主、婚姻点(Vivah Saham)落宫,与「星盘」页一致 | ☐ | + +## C. 事业:提到 D9 的旺弱确认 + +| # | 问法 | 应看到 | 通过 | +| --- | --- | --- | --- | +| C1 | 未来一年事业该关注什么 | 除 D10、10 宫、A10 外,提到某颗关键星(10 宫主或 AmK)在九分盘里的强弱或「同宫(Vargottama)」来确认或削弱判断 | ☐ | +| C2 | 同上 | 分开说接触 / 结构性机会 / 公开落地 | ☐ | +| C3 | 追问「我的 Karakamsha 怎么看」 | 写作行短暂出现「正在多看一眼:灵魂星在九分盘的落点(Karakamsha)…」 | ☐ | + +## D. 时运与补取 + +| # | 问法 | 应看到 | 通过 | +| --- | --- | --- | --- | +| D1 | 接下来一年哪些时间点重要 | 提到罗睺 / 计都现在在哪、何时换座;提到双重过运时只说「哪些宫被木土同时激活」,不报度数 | ☐ | +| D2 | 这个月哪几天要小心 | 写作行出现「正在多看一眼:月亮行运…」,或回答说明只能看到月份级 | ☐ | +| D3 | 用 KP 看我今年能不能结婚 | 若多看了 KP,回答说明 KP 只作参考、不作结论依据 | ☐ | + +## E. 通用 + +- 回答里不应出现「数据卡」「补取」和内部字段名(如 `annual_tajika`、`double_transit`);年盘没接上时用平常话说明。 +- 「本轮技法」折叠面板照常出现,行数与以前相同。 +- 等待时间与改前相比没有可感知的变长(引擎每轮多约 40 毫秒)。 diff --git a/frontend/DESIGN.md b/frontend/DESIGN.md index b551dcb0..dbfd8335 100644 --- a/frontend/DESIGN.md +++ b/frontend/DESIGN.md @@ -10,7 +10,7 @@ This file adapts the full visual analysis in `CLAUDE_DESIGN.md` to the shipped J ## 普通咨询:数据卡与「多看一眼」(2026-09-27,TASK-consult-evidence-card) -写回答的模型只读数据卡;界面上唯一新增的是写作行在模型补取一段卡外数据时的进行中句:「正在多看一眼:D60 分盘…」(分盘写「Dxx 分盘」,其余用中文名:格局明细、八分法(Ashtakavarga)、六力(Shadbala)、太阳回归等,见 `evidenceLookupSectionLabel`)。它复用写作行(`answer-composition` 活动),不加新行、新组件或动效;第一段正文出来时照常换成写作句。每轮最多一次。补取发生在已放出正文之后时,界面上的正文不会被截断,也不会重复出现:模型若把已写的开头原样重写一遍,重复部分在服务端丢掉(记 `answer-restart-dropped` 校验步)。一步里调工具前没写完的半句过程说明不会再粘到下一步的正文开头(BUG-1059)。 +写回答的模型只读数据卡;界面上唯一新增的是写作行在模型补取一段卡外数据时的进行中句:「正在多看一眼:D60 分盘…」(分盘写「Dxx 分盘」,其余用中文名:格局明细、八分法(Ashtakavarga)、六力(Shadbala)、太阳回归等,见 `evidenceLookupSectionLabel`)。它复用写作行(`answer-composition` 活动),不加新行、新组件或动效;第一段正文出来时照常换成写作句。每轮最多一次。补取发生在已放出正文之后时,界面上的正文不会被截断,也不会重复出现:模型若把已写的开头原样重写一遍,重复部分在服务端丢掉(记 `answer-restart-dropped` 校验步)。一步里调工具前没写完的半句过程说明不会再粘到下一步的正文开头(BUG-1059)。数据卡 v2(TASK-consult-evidence-card-v2-20260927)只改卡的内容和可多看的段,界面不变:写作行同一句式,新增名称见 VOICE.md。 ## 普通咨询一遍成文(2026-09-27,BUG-1053) diff --git a/frontend/docs/VOICE.md b/frontend/docs/VOICE.md index 5d78624b..ced5dc4f 100644 --- a/frontend/docs/VOICE.md +++ b/frontend/docs/VOICE.md @@ -123,7 +123,7 @@ Jyotisha 的可见文案是产品的一部分。正确性红线(真实性、 ## 普通咨询的领域名与「多看一眼」 - 领域中文名:父母、子女与原有的事业、关系、财富、身心压力、学习、迁居、家庭、年运、时运、综合并列;「家庭」只用于家里整体(家庭氛围、家里的事),问父母就说父母,问孩子就说子女。 -- 写作行里补取卡外数据的进行中句:「正在多看一眼:<名称>…」,例如「正在多看一眼:D60 分盘…」「正在多看一眼:太阳回归…」「正在多看一眼:格局明细…」。不写「补取」「卡外」「数据卡」这些内部词,不写秒数、不写「正在加载」。只在活动行里,不进正文与历史。 +- 写作行里补取卡外数据的进行中句:「正在多看一眼:<名称>…」,例如「正在多看一眼:D60 分盘…」「正在多看一眼:太阳回归…」「正在多看一眼:格局明细…」。数据卡 v2 新增可多看的名称:「灵魂星在九分盘的落点(Karakamsha)」「宫主链」「本命、九分盘、十分盘的联动」「门闩(Argala)」「月亮行运」。不写「补取」「卡外」「数据卡」这些内部词,不写秒数、不写「正在加载」。只在活动行里,不进正文与历史。 ## 寒暄只回一句