Compare commits

...
6 changed files with 138 additions and 0 deletions
+5
View File
@@ -1,5 +1,10 @@
# BLOCKED
## #241 · D6、D8 事件类别缺少评分映射
- 现有事件类别没有 D6 日常压力或冲突、D8 突变或重大转折。相近的纠纷与重大失落类别评分使用 D30。需要确认非医疗事件的类别键、分盘、宫位与行星,或确认暂时跳过这两类事件题。
- 替代证据:用虚构分界线验证两侧可取得 Vimshottari AD/PD 和 Narayana MD/AD。现有选盘与占星师测试通过。见 [#241 进度](docs/tasks/PROGRESS-chart-choice-questions-20261113.md)。
## #237 · Windows 全量门禁与预检
- 快速门的三项 PyJHora 检查在同机基线复现。咨询 VedAstro 对照在门禁内波动,分支与基线单独重跑均通过。目录预检超时,定向预检复现既有历史镜像路径断言失败。
+13
View File
@@ -25255,3 +25255,16 @@
- 验证与防复发:合成短段和顺序回归、实际引擎 D6/D8 扫描、隔离 PostgreSQL 秒级档案与历史读回,见 [#238 进度](tasks/PROGRESS-chart-choice-rounds-engine-20261113.md)。
- 关联记录:#238、#239、BUG-1654、BUG-1865。
- 修复版本:`codex/chart-choice-rounds-engine-20261113`,待发布。
## BUG-1875 | 多轮选盘缺少分界线事件题与判边依据
- 状态:blocked(D6、D8 事件评分映射待确认)。
- 首次发现 / 最近更新:2026-11-13 / 2026-11-13。
- 影响面:多轮选盘事件题、跨轮日期清单和最终候选段依据。
- 现象:已有分界线性格对比,多轮结果的事件清单为空。任务书要求对部分换盘线增加按年龄段选择的事件题。
- 触发条件:分界线涉及 D6 或 D8,且要从现有事件表选择非医疗类别并按该盘评分。
- 根因:现有 `EVENT_CATEGORIES` 没有 D6 或 D8 项。与冲突和变故最接近的现有类别使用 D30,`_dasha_score` 与 `_varga_score` 均从事件表取定义。
- 验证:虚构分界线两侧均可取得 Vimshottari AD/PD、Narayana MD/AD。选盘与占星师基线测试通过。见 [#241 进度](tasks/PROGRESS-chart-choice-questions-20261113.md)。
- 防复发:待确定类别映射后验证出题、分盘评分和已记录事件使用同一类别。
- 关联记录:#229、#238、#241、BUG-405、BUG-1703、BUG-1759、BUG-1872。
- 修复版本:待映射确认。
@@ -0,0 +1,13 @@
# #241 需拍板答复:D6、D8 本轮不出事件题(2026-11-13,Claude)
本文件补充任务书,冲突时以本文件为准。
**结论:本轮只给 D9、D10、D2 出事件题。D6、D8 的线只出补充题(#238 已写的日常说法),不新增事件类别。**
原因:D6、D8 的事件类别要用哪些宫位和行星属于占星方法。她的事件表里没有定义,最接近的两个类别打分用的是 D30。按项目规则,产品不能自己发明她的方法。
处理:
1. D6、D8 的线照常按 #238 的顺序排进轮次。这些线的问题只有补充题。判边用补充题分数(每题 0.5)加上现有的 `decide()` 兜底,规则不变。
2. 在 PROGRESS 和产品合同 G 节写明:「D6、D8 的生时纠正事件题待占星师定义宫位与行星;在此之前只用补充题。」这条另外整理成问题,交给占星师。
3. 结果页「六张盘」里,靠补充题定下的 D6、D8,要和靠事件定下的分开记录(例如 `decided_by: "supplement"`),页面单可以据此显示。
@@ -0,0 +1,7 @@
# #241 分界线事件题与判边进度
- 执行者 Codex。可信规划评论 42921 指向 staging `92ef755c6e3ea1a70d89f834b0f27f4f3c013586`,分支首个任务书提交为 `46b6fc249e6f5dc7468aed954a672bd447757276`。
- `_minute_row` 为每侧生成 Vimshottari 时间线和 Narayana MD/AD。既有浮点拆分可以取得 AD/PD 边界,`_dasha_score` 可在同一时段采样两侧,`_varga_score` 提供类别分盘的静态得分。在一条虚构 D9 分界线上已验证这些层均可取得。对婚恋开始类别抽查的日期中,两侧的大运分数相同,此样本不能据此声称存在可出题时段。
- `EVENT_CATEGORIES` 已有 D9 感情、D10 工作和 D2 财务的类别。D6、D8 可计算,但事件表没有相应条目。现有纠纷、重大失落均取 D30,且会触发 D30 路由。直接改其定义会影响旧占星师入口。另加类别则需要明确该类别的宫位和行星,才能复用原评分函数。
- 建议为多轮流程指定 D6 日常压力或冲突、D8 突变或重大转折的独立非医疗类别,确认每类评分对应的分盘、宫位与行星。也可先放行 D9、D10、D2 事件题,D6、D8 保留原补充题,等类别确定再接入。
- `python -m pytest -q tests/test_chart_choice.py tests/test_chart_choice_astrologer.py` 通过 45 项。预检的 Python、目录扫描、外部适配器和 Gitea 可见性通过,既有 `.workbuddy` 历史镜像路径断言失败。本轮为任务书冲突诊断,评分代码与产品合同尚未变更。
+1
View File
@@ -33,6 +33,7 @@
| 任务书 | 进度 | 主题 | 状态 | 落点 |
| --- | --- | --- | --- | --- |
| [#241 任务书](TASK-chart-choice-questions-20261113.md) | [执行进度](PROGRESS-chart-choice-questions-20261113.md) | 多轮选盘事件题与判边(BUG-1875) | 需拍板 | `codex/chart-choice-questions-20261113` |
| [#238 任务书](TASK-chart-choice-rounds-engine-20261113.md) | [执行进度](PROGRESS-chart-choice-rounds-engine-20261113.md) | 多轮选盘与秒级采纳(BUG-1872) | 待验收 | `codex/chart-choice-rounds-engine-20261113` |
| [#237 任务书](TASK-reading-window-edge-20261113.md) | [执行进度](PROGRESS-reading-window-edge-20261113.md) | 个人报告区间端点换座判定(BUG-1871) | 待验收 | `codex/reading-window-edge-20261113` |
| [#220 修订任务书](FIX-reading-snapshot-binding-1.md) | [执行进度](PROGRESS-reading-snapshot-binding-20261112.md) | 个人报告生成快照、逐节拦截原因和离线验收包(BUG-1863) | 待验收 | `codex/reading-snapshot-binding-20261112` |
@@ -0,0 +1,99 @@
# TASK:合并流程的出题与判边:每条线按「年龄段 + 具体事件」出题,D1 线加外表和胎记,结果给出依据与把握(2026-11-13)
- Gitea:#241(父单 #229)
- 分支:`codex/chart-choice-questions-20261113`,基于 staging(#238 已合入)。
- Bug 编号:BUG-1875
- 验收:Claude(jyotisha-e6)
不得自行写「产品决定/裁定」;任务书没写的取舍一律选「需拍板」。不得修改或删除既有断言来让测试通过;确需修改的,写明原值、新值和原因。
## 补充:产品负责人 2026-11-13 已同意合并方案(以本节为准)
画布:https://claude.ai/artifact/XcxXXAfHEyAmhWbxGGbEW7 ,父单 #229 的规划评论里也有文字版。选盘和占星师方法合成一条流程:
1. 时间范围
2. 找关键换盘线
3. 逐处确认,最多 3 处
4. 结果是候选时间段
5. 「用这个时间段继续」
三处拍板:
- 每处的主问题是「某个年龄段有没有发生某件事」,即她的 A–D 四档;性格对比降为可跳过的补充。
- 外表、胎记只在主盘 D1 上升换座时问。
- 有日期的事少于 3 件时,结果只写「倾向」,不给把握等级。
问哪条线的顺序按她的决策树:D1 → D9 → D10 → D2/D6/D8。不再按「离填写时刻最近」。
本任务书里与上面冲突的地方,一律按本节执行。
## 背景
合并以前有两套流程:
- **选盘**:每条线给两版盘的性格描述,问「更像哪一种」(`readings.py::build_question`)。
- **占星师方法**:`scripts/chart_choice/astrologer.py`。先做 A/B/C/D 问卷,再收外表、胎记,再收至少 5 件有日期的事,最后整段扫描打分。
她上游最新的写法(yinduzhanxing `8aaf6099`,`skills/jyotish-birth-time-rectification/references/interview_playbook.md` 的「Main-repository override: candidate-first interview」一节):
- 先算候选差异,再选问题。
- 问具体事件类别;**只有在实际算出的时间依据支持时**,才给具体时段。
- 用户认出事件之后,才问确切日期。
- 不能把「有 5 件有日期的事」当成开场任务。
- 接受「没有」「时间不对」「不确定」三种回答,否定的回答也要保留。
## 要做的(只改 `scripts/chart_choice/` 及其测试、API 路由的出入参)
1. **每条线的事件题。** 对 #238 选出的那条线:
- 取线两侧代表时刻的盘(#238 已修过的、落在各自一侧内的时刻)。
- 对这条线翻转的每个关键分盘,按领域映射到 `EVENT_CATEGORIES` 的类别:D9 → 感情 / 婚姻,D10 → 工作,D2 → 收入 / 财务,D6 → 日常压力 / 冲突,D8 → 突变 / 重大转折。D6、D8 的题面用日常说法,不涉及疾病和身体部位,题面要能直接显示给用户。
- 用她现有的大运打分(`_dasha_score` / `_varga_score` 那一套,现成函数直接复用,不新写评分),在 15 岁到今天之间,按 AD/PD 粒度找出「两侧激活程度差得最多」的时段:一侧明显激活、另一侧不激活。每侧最多取 1 段,换算成年龄段(例如 25–27 岁)。
- 题面形如:「感情上的大变化,线前多落在 X–Y 岁,线后多落在 P–Q 岁。你哪一段有过恋爱开始、分开或结婚?」
- 选项:X–Y 岁有 / P–Q 岁有 / 两段都有 / 两段都没有 / 记不清。
- 两侧找不到有区分度的时段时,不出这类题。这种情况要记进 PROGRESS,不得编造年龄段。
- 每条线的事件题最多 2 道。
2. **追问日期。** 选了某段「有」,接着问:
- 大概哪一年(必填一个年份,月份可选);
- 是哪种事(按类别给 3–4 个选项,例如感情:开始恋爱 / 结婚 / 分开 / 其他)。
答案按 `parse_events` 现有的格式进入事件清单(`events`),在多轮之间累积。前端会把清单带在 `resolved` 请求里,格式由你定,写进 contract。
3. **D1 线的外表和胎记。** 只有这条线翻转 D1 时才问:
- 外表:用 `appearance_options` 现有的表,只列线两侧这两个上升的描述,外加「说不清」;
- 胎记:用现有的 13 个部位,可多选,有「没有」。
其他线一律不问这两题。
4. **补充的性格对比。** 沿用 `readings.py` 的对比文字和「更像哪一种」,标记为 `optional: true`,前端放在折叠里。
5. **判边规则**(每条线;在 `decision.py` 旁新增一个函数,原函数不改):
- 事件题:选中某侧年龄段,给那一侧 +2;「两段都有」两侧各 +1;「两段都没有」「记不清」0 分。
- 外表题:选中的那侧 +1。胎记:用 `_birthmark_supported` 判断,支持哪侧就给哪侧 +1。
- 性格对比:每答一题,选中的那侧 +0.5。
- 一侧比另一侧至少多 2 分,选这一侧,`rule = "evidence"`。否则沿用现有 `decide()` 的「保留填写那一侧 / 中性时按多数」,`rule` 照旧。
- 分数和每一项的来源都放进返回结果,前端要显示「依据」。
- 这些分值是产品规则,**不是**她的方法。在 PROGRESS 里写明,并在 `references/product_runtime_contract.md` 的 G 节公告区追加一段「生时纠正判边规则(产品)」,写明原值、新值和原因。
6. **结果的依据和把握。** 最终段确定后:
- 用现有的 `score_minute`、`engine_confidence`、`coverage` 对**最终段内**的分钟和累积的事件清单打分。
- 给出:提到几件事;几件和这一段的大运对上(`matched` 的口径照她的打分);她的把握分级。
- 有日期的事少于 3 件时,不给把握分级,`confidence = "tendency_only"`,前端显示「倾向」。
- 回测说明(`astrologer.py` 里现有的 19/20/34 那句)原样附在结果里。
7. **旧入口。** `/api/chart_choice/astrologer` 的独立流程保留,但前端会去掉入口(#239)。本单不删它,只在 docstring 里写明「合并后由多轮流程调用其中的函数」。
## 不要碰
- 她的打分权重和阈值
- `astrologer_engine.py`
- 冻结文件
- 前端(#239 负责)
## 验收(新测试)
1. 合成一条 D9 线:两侧算出的年龄段不同,题面、选项正确;选「X–Y 岁有」并填年份后,事件进入清单。
2. 两侧找不到有区分度的时段:不出事件题,只出补充题。
3. 只有 D1 线才出外表、胎记题;D10 线不出。
4. 判边:事件题选线后、外表选线前、两道补充题都选线前 → 线后 +2,线前 +1 +1 = +2,差距不到 2,按现有规则判;把分数和来源都核对一遍。
5. 有日期的事 2 件 → `tendency_only`;4 件 → 返回她的分级。
6. #238 的测试和现有选盘测试全部通过;Python 快速门通过。
## 何时停下来选「需拍板」
- 她的大运打分无法按侧、按时段给出可比较的激活度。
- D6、D8 的事件题绕不开医疗含义。