Files
Jyotisha/docs/tasks/PROGRESS-rectification-candidate-compare-columns-20260908.md
T
Jesse_ChenandCursor a43a6db884
Independent Staging Quality Gate / validate (push) Successful in 14m8s
Independent Staging Quality Gate / publish (push) Successful in 10m21s
fix(rectification): three-column candidate compare card (BUG-597, BUG-598)
Replace the minute-row delivery card with up to three compare columns so users can pick the time that fits, and apply the adult-year floor on inspect fallbacks.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-09 00:12:20 +08:00

57 lines
4.5 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.
# PROGRESS · 生时校正交付卡三列对照(2026-09-08)
工作树:`.worktrees/rectification-candidate-compare-columns-20260908`
分支:`codex/rectification-candidate-compare-columns-20260908`
任务书:`docs/tasks/TASK-rectification-candidate-compare-columns-20260908.md`
基线:`origin/staging` @ `a9125e3d`(任务书已在该提交)
本单状态:**待验收**。代码在执行分支,尚未 commit / push。
未改:采用 RPC、确认门、各道门槛、`minute_step``_relative_support``page.tsx`。Skill 从 10.0.17 升到 **10.0.18**(只改 `references/candidate-comparison.md` 的卡片描述)。采集题「没有」按钮未做,等产品答复。
主仓仍停在 `codex/minute-rectification-p0` 且有脏文件,未 checkout / reset。本单在独立 worktree 基于 `origin/staging` 做。
## 做了什么
- **决策 1** 区间卡改成一行至多三列。按 `inference_state.candidates` 后验概率排序,精确 HH:MM 去重,最多三列。超过三列末尾写「还有 N 个分钟可能性更低,已并入范围」。不预标「排盘用」。
- **决策 2** 每列五段全由服务端算好:时间 + 相对可能性;D9/D10 类型表全文 + 月宿边界 traits;经历强/中/弱计数与最不吻合一件(年-月+领域,不写摘要);往后 12 个月 1–2 窗或「未来一年没有明显的窗口」;「更像这个」走现有 accept RPC,选择不计分。
- **决策 3** 卡底边界句与收起的「查看验证报告」保留。交付正文仍三句,不再写代表分钟「排盘用」。
- **决策 4** compare 同一次返回 `event_dasha_ledger_by_time``prospective_windows_by_time`(HH:MM 键,≤3 分钟),与代表分钟 ledger 并存;耗时写入 `column_compare_ms`
- **BUG-598** `inspectDiscriminatorProbes` 接收 `birthDate`,与 followup 共用 `adult-floor.ts`。inspect 回退不再漏过成年下限。
- **P2「没有」按钮** 跳过,等产品。
## 三栏(被触碰断言)
| 用例 | 原值 | 新值 | 理由 |
| --- | --- | --- | --- |
| 交付卡形态 | 每个候选分钟一行,点行采用 | 至多三列,「更像这个」采用 | BUG-597 决策 1 |
| 「排盘用」 | 代表分钟预标 | 不预标 | BUG-597 决策 1 |
| 列文案 | 只写与代表分钟不同的 D9/D10 | 三列写全 D9/D10/月宿 + 经历计数 + 未来窗 | BUG-597 决策 2 |
| 引擎 compare | 只有代表分钟 ledger | 另有 by_time ledger 与 windows | BUG-597 决策 4 |
| Skill | 10.0.17 | 10.0.18 | 任务书 |
| inspect 成年下限 | 仅 followup 过滤 | inspect 同样 `below_adult_floor` | BUG-598 |
| 采集「没有」按钮 | 无 | 仍无 | 等产品 |
## 测试
- `frontend` `./node_modules/.bin/tsc --noEmit`exit 0
- `npm run lint`0 errors / 108 warnings(仓库基线 warning,无新 error
- 任务书指定 TS 切片:1040 tests / 1040 pass / 0 fail
- `tests/test_rectification_v5_services.py`35 passed
- Docker `database-rectification-*.test.ts`:本机未跑,记 blocked
- 浏览器真人走查:无登录态,记 blocked
Skill 10.0.18 SHA256`ad209a7824d7eb65f35efd7d6245e9a3752a8b32972de0fbafb751691e86a1ad`。live `SKILL.md` + `references/``versions/10.0.18` 字节一致。
## 偏离
1. **不按 `cluster_range` 合并不同分钟。** 任务书写「同簇合并取代表」。04:53 与 04:59 若同簇会被合成一列,正好把本单要对照的差别藏掉。实现按精确 HH:MM 去重。
2. 引擎 `column_times``candidate_decisions` 前 3 个唯一分钟(引擎分序)并保证代表分钟在列里。卡片列按后验排序。后验前三若与引擎前三不一致,缺的分钟回退代表 ledger / 空窗口句。
3. `prospective_windows_for_time` 用该分钟月曜起的未来 12 个月 Vimshottari 起始月,领域目前标 `career`;没有 static context / 月曜则空列表,卡片写固定句。
4. 采集题「没有」按钮未做。
5. BUG-598 真实 Case 出生年:本工作树没有该 Case 档案,不能用出生资料核对。按年份公式:2015 年迁居题越线当且仅当出生年 > 1997。≤1997 年生在 2015 年已满 18 岁,不越线。
6. 本机主仓停在 `codex/minute-rectification-p0` 且有脏文件,未动。
7. 预检系统 Python 缺 swisseph/pytest;不把预检失败写成云端未同步。
8. `.venv``frontend/node_modules` 是指向主仓的 symlink,不提交。
9. 浏览器真人走查:本会话无登录态,记 blocked。见 `docs/testing/rectification-scenarios-20260907.md` §5。