Files
Jyotisha/docs/tasks/PROGRESS-rectification-compare-card-polish-20260909.md
T
Jesse_ChenandCursor 5c476ba784
Independent Staging Quality Gate / validate (push) Failing after 9m31s
Independent Staging Quality Gate / publish (push) Has been skipped
fix(rectification): cover all candidate minutes on the compare card and keep delivery narration (BUG-614/615)
Engine by_time ledgers now include the full candidate set so posterior columns can look up fit and windows. Delivery turns keep up to three sentences after idle persist; the card subtracts repeated traits and folds the board chart.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-09 18:32:03 +08:00

53 lines
4.9 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 · 三列对比卡修正与减法(BUG-614/6152026-09-09
工作树:`.worktrees/rectification-compare-card-polish-20260909`
分支:`codex/rectification-compare-card-polish-20260909`
任务书:`docs/tasks/TASK-rectification-compare-card-polish-20260909.md`
基线:任务书写 `origin/staging` @ `365ad799`;本 worktree 按开工时的 `origin/staging` `3005e36d`(任务书本身)切出。合入前 rebase 到当时的 `origin/staging`(含 `17b36f3a` 咨询 BUG-612/613、`584a56bd` 报告图布局 brief、`ca921c3f` 采集按钮/时间轴/已采用列,BUG-618~620)。已采用列继续 `disabled={busy || adopted}`,不把 BUG-618 冲掉。
本单状态:**待验收**。合入 staging 时更新落点 SHA。
预检:本机已跑 `python3 scripts/pre_work_check.py --remote-timeout 8 --command-timeout 45`(含 `diagnose_external_engine_adapters.py --json`),远端可见性 `verified`。前端用 worktree 里指向主仓的 `frontend/node_modules` 符号链接。
未改:采用 RPC、各道门槛、`SCORE_DELTA`、四选项合同、时间轴、Skill 版本 / `references/conversation-strategy.md`
## 做了什么
- **BUG-614** `column_times_for_compare(..., limit=9)` 覆盖引擎 `candidate_times` 去重全集。客户端 `lookupByTime` 缺键 → `fit: null` / `windows: null`,灰字「这一分钟还没对照」,不再把空表渲染成 `0 · 0 · 0`
- **BUG-615** `trimSpokenTurnForInterview``persistNextInterviewIfIdle` **之后**执行:仍有下一问裁到一句;`terminalNote` 保留 ≤3 句。不得在 `streamAttempt` 里先裁。裁完若与流式正文不同,再发一条 `answer.delta` `replace`,气泡与落库一致。
- **卡片减法** 两列及以上共有性格句提到卡顶并改写成「两个/三个时间的…都在…」;列内 `fit_line` / `window_line`;无 `<h3>`;禁用「强相关 / 有关联 / 弱关联」。
- **右栏** `VedicChartSvg` 北印星盘;宫位表与换升时刻默认 `<details>`(summary「换升时刻 · N 个」);显示层并入同一折叠。换分钟只高亮变化宫,无动画。
## 三栏
| 用例 | 原值 | 新值 | 理由 |
| --- | --- | --- | --- |
| 引擎 5 个候选、卡片后验前三与引擎前三不同 | 后验列查不到键 → `0 · 0 · 0` / 「没有窗口」 | `by_time` 含全部候选分钟;列 `fit`/`windows` 有数 | 决策 1:按引擎候选集算,不是按卡片前三 |
| `by_time` 缺某一列的键 | 空数组当 0、当没有窗 | `fit === null`,DOM「这一分钟还没对照」 | 没算 ≠ 没有 |
| 三列 D10 同在巨蟹 | 三列各写一遍 | 卡顶一句「三个时间的事业盘都在巨蟹座:…」 | 相同句只写一次 |
| 交付轮模型写 4 句 | BUG-606 裁成 1 句 | `terminalNote` 时留 3 句 | 决策 2BUG-595 三句口径 |
| 普通证据轮 3 句 | 1 句 | 仍 1 句 | BUG-606 采集轮不变 |
| 右栏本命 | 宫位表常驻 | 北印星盘 + 宫位表折叠 | 读屏仍可打开表 |
| 右栏换升时刻 | 逐分钟常驻列表 | 默认折叠「换升时刻 · N 个」 | 时间轴已表达同一件事 |
## 测试
- `frontend` `./node_modules/.bin/tsc --noEmit`exit 0
- `npm run lint`0 error / 107 warning(仓库既有 warning,无新增 error
- 任务书切片 `tsx --test tests/rectification-*.test.ts tests/agent-voice-copy-contract.test.ts`(排除 database):**1063 passed / 0 failed**
- 本单针对性:`rectification-v9-agent.test.ts` 交付 4→3 句、证据 3→1 句;`rectification-range-delivery-20260907.test.ts` 后验前三有 `fit`、缺键「还没对照」;`rectification-board-model.test.ts` 北印星盘 + 换升默认折叠
- `.venv/bin/python -m pytest tests/test_rectification_v5_services.py::RectificationV5ServicesTest::test_compare_ledgers_cover_all_engine_candidate_times``test_compare_returns_ledger_and_windows_by_candidate_time`**2 passed**。同文件 `test_block_scan_seven_events_finishes_within_fifteen_seconds` 本机 41s 超 15s 预算,与本单无关(既有壁钟断言,见 BUG-570 P2)
- 浏览器真人走查:无登录态,未见真实交付卡/右栏像素
## 偏离
1. 任务书基线 `365ad799`worktree 从已推任务书的 `3005e36d` 切出。未把后续 staging 提交 rebase 进来。
2. 代表分钟缺 `by_time` 键时,经历 ledger 仍可回退到该分钟自己的 `eventDashaLedger`(不是填 0);窗口没有回退。缺键列只要 `windows == null` 仍显示「还没对照」。
3. 单列不把性格句提到卡顶(任务书写的是三列共有)。
4. 浏览器真人走查:本会话无登录态,未见真实交付卡/右栏像素。合同测试覆盖 DOM 字符串,不把它们写成已经看见真实会话。
5. 裁句后补一条 `answer.delta replace`。任务书只要求 idle 之后裁句;不补这条的话流式气泡会停在未裁正文。
## 环境缺口
无登录态、无生产/staging 走查。不把合同测试写成已经看见真实像素。