Compare commits

...
Author SHA1 Message Date
Claude 93dbee3206 docs: brief for synastry-precision-20261114 (BUG-1889, #276)
Adds product contract section L (synastry interim rules, pending astrologer rulings).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyn7Hj3LCW3BUs5bZ8
2026-11-14 18:16:14 +08:00
2 changed files with 91 additions and 0 deletions
@@ -0,0 +1,83 @@
# TASK:合盘第 2 批:两人各自的出生时间误差(2026-11-14)
- Gitea:#276
- 分支:`codex/synastry-precision-20261114`,从 staging `29ac0138` 切出。
- Bug 编号:BUG-1889。开工时核对 `docs/BUG_HISTORY.md` 末尾;已被占用就顺延,并在 PROGRESS 写明。
- 负责验收:Claude(jyotisha-3f)。
- 同时在做:#275(合盘第 1 批,BUG-1888),会改 `synastry-full-technical.ts` 和 `full_dossier.py`。两单各改各的函数,后合入的负责 rebase。
任务书没写到的取舍,不得写成"产品决定"或"裁定",一律标「需拍板」。不得修改或删除既有断言来让测试通过。确需修改的,在 PROGRESS 逐条写明原值、新值和原因。
## 背景
- 占星师合盘子 skill SKILL.md:28-30:出生时间不够精确时,依赖它的层要标 parameter_sensitive 或 blocked。
- 产品负责人 2026-11-13(#224):出生时间误差用用户自报的范围,没填就按前后 30 分钟。个人报告和年运都已这样做。
- 产品负责人 2026-11-13:分盘跨界在生时纠正里解决,报告只负责照实显示,不在报告里分支。
- 现状:合盘完全没有处理误差。
- `marriage-match-service.ts` 的 `engineBirth`(80-112 行)只传时、分,不传误差,引擎按「已确认」处理。
- 附录只有一句「以各自档案里已经保存的时间为准」(`synastry-full-technical.ts:122`)。
- 暂行规则见 `references/product_runtime_contract.md` 第 L 节第 3 条(本任务书同一提交)。只封一侧还是整层都封,等她裁定(合盘问题 6)。本单按「只封一侧」做,并在代码注释和 PROGRESS 写明是暂行。
## 要做的
### 1. 每人的误差窗口
- 前端:两人各自按个人报告的做法取窗口。复用 `personal-report-longform-birth.ts` 里 `buildLongformBirthPayload` 的窗口逻辑,不另写一套:
- 有自报误差就用;
- 采用过生时纠正的,用纠正后的区间;
- 都没有就前后 30 分钟,`source: default_unknown_30`。
- 把两人的窗口传给合盘引擎请求,后端用 `report_render.birth_precision_window.report_birth_window` 读取。
### 2. 每人扫描三项
- 只用已有的函数:
- D1、D9 上升:`report_render.birth_precision_margins.ascendant_margins(birth, {1, 9}, window=...)`;
- 月亮星宿和 pada:照同样的做法求窗口内月亮会不会跨星宿或 pada 边界。没有现成函数就在 `marriage_match_service` 下新写一个小函数,用引擎的星历取月亮经度,不改冻结文件。
- 每人记录:每一项是 `stable` 还是 `varies`;`varies` 时写出候选值(星座或星宿中文名)和大约在误差内的哪一侧。
### 3. 标出受影响的层(只封一侧)
- 某人 D1 上升 `varies`:这个人一侧的上升、宫位、宫主、UL、A7、AL、Narayana 起点,以及用到这一侧宫位的两盘互落,都标参数敏感。
- 某人 D9 上升 `varies`:这个人一侧的 D9 层,以及 D9 两盘对照,标参数敏感。
- 某人月亮星宿或 pada `varies`:Ashtakoota 里依赖月亮星宿的各项、星宿关系,以及这个人的 Vimshottari 起点,标参数敏感。Ashtakoota 分数在附录照现在一样显示,加一句「这个人的月亮在出生时间误差内可能换星宿,以下几项会变」。
- 另一人不受影响。
- 做法:在 dossier 新增 `birth_precision` 块,按人记录扫描结果和受影响的层。她的 builder 输出不改,只在我方包装层叠加标记。
- 已有的 `parameter_sensitive` 行保留,不能因为误差稳定就改成 executed。
### 4. 写作输入、附录、审计
- 写作输入:每一节加一句「哪个人的哪几层在出生时间误差内会变」(中文,用甲方、乙方的称呼)。提示词写明:这些层不能写成确定的结论,也不能说没有算出。
- 附录「计算参数」:把「以各自档案里已经保存的时间为准」换成每人一行,写误差来源(自报、纠正区间或默认前后 30 分钟)和三项扫描结果。
- 技法执行情况:受影响的行在「计算」一栏标参数敏感,理由写「出生时间误差内会变」。
- 两人误差都稳定时,附录照实写「误差内稳定」,不加多余提示。
### 5. 不改的
- 不在合盘里给出分支结论,也不替用户选时间(11-13 业主规则)。
- 冻结文件、她的 `skills/jyotish-full-synastry-reading/**` 只能调用。`references/**`(L 节已由本提交写好)、`consult-preset-prompts.ts` 不碰。
- 不改四类事件、事件扫描、断言标签。
- 不调用 DeepSeek。
## 要改的文件
- `frontend/src/lib/marriage-match-service.ts`、合盘发起和生成链路里传请求体的地方
- `scripts/marriage_match_service/api.py`、`scripts/marriage_match_service/full_dossier.py`,必要时新增 `scripts/marriage_match_service/birth_precision.py`
- `frontend/src/lib/synastry-full-technical.ts`、`frontend/src/lib/synastry-full-sections.ts`(只加写作输入那一句和提示词规则)
- 测试:`tests/test_synastry_precision_20261114.py`、`frontend/tests/synastry-precision-20261114.test.tsx`。合成数据覆盖:
- 两人都稳定;
- 只有甲方 D1 上升会变:只有甲方一侧和用到甲方宫位的互落被标,乙方不变;
- 只有乙方 D9 上升会变;
- 月亮跨 pada:Ashtakoota 相关项被标;
- 没填误差:按前后 30 分钟,附录写明默认;
- 有自报误差:用自报值;
- 写作输入里会变的层不出现「没有算出」;
- 用户可见文字没有「·」、字段名或下划线。
- `docs/BUG_HISTORY.md`,只在末尾追加
- `docs/tasks/PROGRESS-synastry-precision-20261114.md`
## 验收标准
1. 公开名人盘一对(没填误差):附录每人一行误差来源和三项扫描结果;会变的层在技法表里标参数敏感,理由正确。
2. 合成测试覆盖上面列出的每种情况。
3. 写作输入只多了误差那一句;其余写作输入不变(同一请求、误差稳定时,evidence 哈希与改前一致)。
4. tsc、eslint(0 错)、`npm test`(基线失败除外)、quick gate 全部通过。
+8
View File
@@ -352,3 +352,11 @@ evidence_card.backstage records, for the backend only, that global web evidence
- 出生时间误差按 #224:用户自报的误差,否则前后 30 分钟。
- 研究方法(Yoga/Nakshatra Pravesha)只作观察,不进必需。
- 本条不减少她要求执行的任何技法,也不把「需说明」项写成结论依据。
## L. 合盘的暂行做法(产品 2026-11-14,待占星师裁定)
<!-- 产品对她合盘子 skill(skills/jyotish-full-synastry-reading,7a773d13)的暂行落地,不是她的方法。依据:2026-11-14 合盘差距盘点;产品负责人 2026-11-12「计算依据附录照实列网上资料核对、真实案例校准两行」、2026-11-13 出生时间误差规则(#224)。下列各条在她裁定前暂行,裁定后按她的改。 -->
- 技法执行情况分两栏:「计算」照她回执的状态写;`ready_for_comparison` 写「输入已齐」,不写「已执行」(她 SKILL.md:105-107)。「在本报告中」是产品的 v1 映射:executed、ready_for_comparison 写「供写作参考」,parameter_sensitive、partial 写「只作观察」,blocked、not_applicable 写「未使用」并附理由。
- 附录照实列「网上资料核对:未完成」「真实案例校准:未完成」两行。正文不提。
- 出生时间误差:每人用自报误差,没填按前后 30 分钟。某人的 D1 上升、D9 上升或月亮星宿在误差内会变时,只把这个人一侧依赖它的层,以及用到这一侧的两盘对照,标为参数敏感,并在附录写明;另一人不受影响。是只封一侧还是整层都封,待她裁定(合盘问题 6)。
- 以下沿用现状,待她裁定,不算产品规则:附录显示的回执方法名(问题 1)、模型自选的 6 个断言标签(问题 2)、产品自写的逐类激活扫描和四类事件(问题 3–5)、Raman 默认并列显示(问题 8)。