Files
Jyotisha/docs/tasks/TASK-rectification-delivery-report-facts-20260908.md
T

67 lines
5.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# TASK · 生时校正修复单:交付轮验证报告引用推断前的引擎事实(宽度 29 分钟、双轨偏向已淘汰分钟、D10 星座算错)(2026-09-08
- 基线:`origin/staging` @ `f3a1a583`(代码头 `7ca6ade2`;本轮转录跑在这版,职业答完已自动出卡,BUG-590 真实环境通过)
- 分支:`codex/rectification-delivery-report-facts-20260908`,基于 `origin/staging`;与 `codex/rectification-same-year-probe-dedupe-20260908`BUG-592)无文件重叠
- 执行方:coding agent;验收:Claude
- 涉及文件:`frontend/src/mastra/rectification-v9-tools.ts`L455505 结果投影、`buildSkillVerificationReport` 入参)、`frontend/src/lib/rectification-agentic/v9/skill-verification-report.ts`(或该函数所在文件)、`skills/jyotish-birth-time-rectification/SKILL.md` §9 L119 + `references/candidate-comparison.md`
- BUG 编号起点:**BUG-593**
- 优先级:**P2**(出口已通,但交付轮正文三处事实与卡片矛盾,用户会怀疑结果)
## 1. 事故实证(2026-09-08 staging `7ca6ade2`,只写结构)
交付卡:范围 04:5104:53、排盘用 04:53、对照 8 件经历、分歧面板只剩月宿边界一行。同一轮模型正文的验证报告里:
| # | 正文写的 | 事实 |
| --- | --- | --- |
| 1 | "当前是一段不可分区间(宽度 29 分钟)" | 卡片范围宽 3 分钟;29 来自引擎门 `exact_confirmation.indistinguishable_width_minutes`,是推断层之前的引擎候选跨度 |
| 2 | "主限更偏向 05:06、分盘大运更偏向 04:59,二者冲突" | 两个分钟都已被答题淘汰;`dasha_agreement` 由引擎在全部候选上算,不看推断层 |
| 3 | "若采用 04:53D10 升狮子座" | `window_scan` 里 D10 在 05:00 才从巨蟹座换到狮子座,04:53 的 D10 上升是巨蟹座;模型自己从换升表推算,算错 |
## 2. 根因
`rectification-v9-tools.ts` L455505 的结果投影把 `candidates` 换成推断层投影,但 `indistinguishable_width_minutes: width``dasha_agreement: refinement.dasha_agreement` 仍是引擎原值,且原样喂进 `buildSkillVerificationReport({ widthMinutes: width, dashaAgreement })`——服务端自己生成的报告模板就把 29 和 05:06/04:59 写给了模型。分盘上升没有按候选分钟给出现成的星座,Skill L119 要求"方法 23 D9/D10 类型对照",模型只能拿 `window_scan.transitions` 自己算,于是算错。
## 3. 决策记录
1. **报告只用推断层事实。**`inference_state` 时:`widthMinutes` = `credible_range` 宽度(分钟数,含两端);`dasha_agreement` 在 **active 候选**内重算 top(没有 active 候选或 top 相同则 `status="agree"`/`"n/a"`),并保留引擎原值为 `dasha_agreement_pre_inference` 供审计,不进报告。`indistinguishable_width_minutes` 投影字段保留但改名 `engine_indistinguishable_width_minutes`,报告不用。
2. **报告给出每个候选分钟的 D9 / D10 上升星座**`sign_by_candidate: {time: {d9, d10}}`),由 `window_scan.transitions` 服务端算,与 `divergence-panel.ts` 复用同一分钟→星座函数。Skill L119 与 `references/candidate-comparison.md` 增一句:"分盘上升只抄 `skill_verification_report.sign_by_candidate`,不得自行按换升时刻推算"。Skill bump **10.0.16**versions/ 快照、registry 同步)。
3. 边界句"不是已确认的唯一出生分钟"保留;确认门不动。
## 4. 任务分解
- 4.1 决策 1:形状用例——推断层范围 04:51–04:53、引擎 `indistinguishable_width_minutes=29`、引擎双轨 top 均为已淘汰分钟 → 报告 `width_minutes === 3``dasha_agreement` 只含 active 候选,正文模板不出现 29 / 已淘汰分钟。
- 4.2 决策 2D10 在 05:00 换升、候选 04:51/04:53 → `sign_by_candidate["04:53"].d10 === "巨蟹座"``agent-voice-copy-contract`/skill 合同锁新句;`skill-registry.test.ts` 过 10.0.16。
- 4.3 记录:`docs/BUG_HISTORY.md` BUG-593(关联 BUG-545 单分钟念两遍、BUG-568 区间读盘);`CHANGELOG.md`Skill 10.0.16);`PROGRESS-…``docs/testing/rectification-scenarios-20260907.md` 加"交付轮正文的宽度、双轨、分盘星座必须与卡片一致"。
## 5. 让步顺序
4.1 必做;4.2 若 Skill bump 牵扯太广,可先做 `sign_by_candidate` 投影、Skill 句子后置为 P3,但要写进度记录;4.3 不可省。
## 6. 开工前置命令
```bash
git fetch origin --prune
git worktree add -b codex/rectification-delivery-report-facts-20260908 .worktrees/rectification-delivery-report-facts-20260908 origin/staging
cd .worktrees/rectification-delivery-report-facts-20260908
ln -s /workspace/Jyotisha/frontend/node_modules frontend/node_modules
cd frontend && ./node_modules/.bin/tsc --noEmit; npm run lint 2>&1 | tail -1
ls tests/rectification-*.test.ts tests/agent-voice-copy-contract.test.ts tests/skill-registry.test.ts | grep -v database | xargs npx tsx --test 2>&1 | grep -E "^# (tests|pass|fail)"
```
## 验收(Claude2026-09-08`origin/staging` @ `6a687085`staging 已部署同 SHA
| 门 | 结果 |
| --- | --- |
| tsc | 0 错 |
| lint | 0 error / 103 warning |
| 前端 rectification + consultation + voice + skill-registry(非 DB | 1270 / 0 |
| Python v5_services + event_probes + growth contract | 全绿 |
| 项 | 结论 |
| --- | --- |
| 4.1 决策 1 | 通过。真实 Case 报告"28 分钟不可分区间(04:4705:14)"与卡片一致;双轨改为 active 过滤,未点名已淘汰分钟 |
| 4.2 决策 2 | 通过。`sign_by_candidate` 表进报告,真实 Case 04:53 D10 写巨蟹座;Skill 10.0.16 与 versions/ 字节一致 |
| 4.3 记录 | 通过 |
结论:通过。但同一 Case 暴露范围回弹(13→28 分钟),另立 `TASK-rectification-new-minute-inherit-20260908.md`BUG-594)。