Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0193vBv6w5MV2cifdTUu9H5P
8.3 KiB
8.3 KiB
TASK · 生时校正交付卡改成三列对比:每列写相对可能性、按该分钟推出的性格处事与经历对照、往后 12 个月的事件窗,让用户选更像哪一列(2026-09-08)
- 基线:
origin/staging@7e3b6cdc(BUG-595/596 已合入并部署;本轮转录跑在这版:逐行卡已上线,范围 04:51–04:59) - 分支:
codex/rectification-candidate-compare-columns-20260908,基于origin/staging - 执行方:coding agent;验收:Claude
- 涉及文件:
frontend/src/components/rectification-range-delivery.tsx、frontend/src/lib/rectification-agentic/v9/divergence-panel.ts(投影改列)、frontend/src/lib/rectification-candidate-result.ts、frontend/src/app/globals.css、scripts/rectification/refinement_packet.py(event_dasha_ledger/prospective_event_windows按候选分钟各算一份)、scripts/rectification/api_service.py、frontend/src/lib/rectification-agentic/v9/score-persist.ts(透传)、frontend/DESIGN.md、frontend/docs/VOICE.md、skills/jyotish-birth-time-rectification/references/candidate-comparison.md - BUG 编号起点:BUG-597
- 优先级:P1(产品负责人 2026-09-08 决定;这是交付卡第三次改形,本单定稿后不再改形,只调文案)
1. 产品决定(原话要点)
"选项一个 row 三个 column 好一些,里面要加上这个时间的可能性、基于这个时间往下推的事件或者性格处事之类,让用户选择他更偏向哪个,而不是现在直接出一个时间。"
这是 09-07 提过的 GPT 式并排对比,当时我改成"区间卡 + 分歧面板",09-08 又改成逐行卡;用户看过实物后选定并排三列。本单推翻 TASK-rectification-delivery-ui-simplify-20260908.md 决策 1 的逐行形态。
2. 现状问题(本轮转录)
逐行卡里 04:59 那一行右侧是空的(与代表分钟 D9/D10 相同就不写),用户看不出为什么要选它;04:53 被预先标成"排盘用",用户觉得是"直接出一个时间"。
3. 决策记录
- 一行三列,每列一个候选分钟簇。 列 =
credible_range内按后验概率最高的至多 3 个候选(inference_state.candidates的probability,同簇合并取代表);不足 3 列就少列;超过 3 个时末尾一句"还有 N 个分钟可能性更低,已并入范围"。不预标"排盘用",最高概率列排第一即可。移动端三列改为横向滑动,不堆叠成三段。 - 每列内容固定五段,全部服务端算好,模型不写:
- 时间 + 相对可能性(
probability四舍五入到整数百分比,标签就叫"相对可能性";这是答题后的后验,不是引擎置信度,卡底边界句保留)。 - 性格与处事:D9 类型表一句(感情相处)、D10 类型表一句(做事方式)、月宿边界两句(若
nakshatra_boundary.near_boundary,按该分钟落在较早/较晚一侧取 traits)。三列写全,不再只写差异;相同的句子也写,用户自己对比。 - 经历对照:该分钟下用户 N 件经历的"强相关 / 有关联 / 弱关联"计数 + 最不吻合的一件(只写"年-月 + 领域",不写摘要)。来源:引擎对
credible_range内 ≤3 个候选各算一份event_dasha_ledger_by_time(同一次 compare 内算,不加请求)。 - 往后 12 个月:该分钟下 1–2 个事件窗(领域 + 月份区间),来源
prospective_event_windows按候选分钟各算(prospective_windows_by_time);没有窗就写"未来一年没有明显的窗口"。 - 按钮「更像这个」:点即采用该分钟(走现有 accept RPC,"正在采用…"→"已采用"),采用后其它列仍可点即改选。用户的选择不计分(题库已耗尽,这是采用动作不是探针)。
- 时间 + 相对可能性(
- 卡底一句边界句"这只是代表性候选,不是已确认的唯一出生分钟",「查看验证报告」折叠块保留在卡下。
- 引擎侧:
api_service.compare返回event_dasha_ledger_by_time与prospective_windows_by_time(键为 HH:MM,只算credible_range内至多 3 个分钟),与现有event_dasha_ledger(代表分钟)并存;minute_step=1、_relative_support、各道门槛不动;额外耗时写进进度记录(预期每分钟 <1s)。 - 采用 RPC、确认门不动;Skill 正文口径不变(不 bump),只改
references/candidate-comparison.md的卡片描述段(不进 SKILL.md hash?——references/在 skill 包内,任何字节变化都要 bump:bump 10.0.18,只改这一段)。
4. 顺带修的流程问题(本轮复盘)
- BUG-598(P2,需核对):点选题"2015 年 5 月前后有没有搬家或长期住到外地"——按 2016 年入学推算用户当年约 17 岁,
DOMAIN_AGE_LO.relocation = 18本应挡掉。probeBelowAdultFloor只在method-followup.ts三处生效,core/candidate-contrast-packet.ts::inspectDiscriminatorProbes没有birthDate,decideAfterInferenceChange的matched ?? inspected.selected回退路径会漏。修:inspectDiscriminatorProbes接birthDate并沿用同一 floor。执行方先用该 Case 的出生年核对是否真的越线(≤1997 年生则不算越线),核对结果写进度记录。 - P2(产品可否决):采集题(家人 / 财务 / 健康 …)给一个 44px 的「没有」按钮,点了等于口述拒答(走现有 declined 路径),用户不用每次打字"没有"。
- 不动:点选题前置于采集(先问 2023.05 再问"哪年入职")是现有设计;每件经历 compare ≈22s 是引擎耗时,本单不动。
5. 任务分解
- 5.1 引擎:决策 4;
tests/test_rectification_v5_services.py加"三分钟各一份 ledger 与窗口、键为 HH:MM、与代表分钟 ledger 一致"。 - 5.2 投影:
divergence-panel.ts改为columns: [{time, candidate_id, probability_percent, traits: {d9, d10, nakshatra[]}, fit: {strong, medium, weak, worst: {year_month, domain} | null}, windows: [{domain, from, to}], more_count}];标签只取类型表与nakshatra_boundary.options[].traits。 - 5.3 组件:三列布局、横向滑动、「更像这个」=
onAccept(candidateId);rectification-delivery-ui-simplify-20260908.test.ts三栏(原逐行 → 三列;原值/新值/原因);agent-voice-copy-contract收「更像这个」「相对可能性」「未来一年没有明显的窗口」。 - 5.4 BUG-598 + 「没有」按钮(若产品同意)。
- 5.5 记录:
docs/BUG_HISTORY.mdBUG-597(关联 BUG-595/583/568)、BUG-598;CHANGELOG.md(Skill 10.0.18);frontend/DESIGN.md(L234 candidates 行、L477 交付段重写);VOICE.md;PROGRESS-…;docs/testing/rectification-scenarios-20260907.md交付段重写。
6. 让步顺序
5.1–5.3 必做同一提交;「往后 12 个月」若引擎在 credible_range 内没有窗,写固定句即可,不得空白;5.4 的「没有」按钮等产品答复,BUG-598 必做;5.5 不可省。
7. 开工前置命令
git fetch origin --prune
git worktree add -b codex/rectification-candidate-compare-columns-20260908 .worktrees/rectification-candidate-compare-columns-20260908 origin/staging
cd .worktrees/rectification-candidate-compare-columns-20260908
ln -s /workspace/Jyotisha/frontend/node_modules frontend/node_modules
ln -s /workspace/Jyotisha/.venv .venv
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)"
cd .. && .venv/bin/python -m pytest tests/test_rectification_v5_services.py -q
验收(Claude,2026-09-09,origin/staging @ 724a1215;实现提交 a43a6db8)
门禁同时间轴验收段(tsc 0 / lint 0 error / 前端 1331/0 / Python 全绿)。
| 项 | 结论 |
|---|---|
| 决策 1–3 三列卡 | 通过。「更像这个」走 accept,不预标排盘用,五段服务端算好 |
| 决策 4 引擎 by_time 字段 | 通过。test_rectification_v5_services.py 35 绿 |
| Skill 10.0.18 | 通过。快照字节一致 |
| BUG-598 成年下限 | 通过。inspect 回退路径接 birthDate;出生年核对结果见进度记录 |
| 「没有」按钮 | 未做,等产品答复(合理) |
结论:通过。真实环境三列卡观感待下次实测。