docs(tasks): rectification code split acceptance
Independent Staging Quality Gate / validate (push) Failing after 6m56s
Independent Staging Quality Gate / publish (push) Skipped

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017eEAG8HD3mm8gsKXgk8uU8
This commit is contained in:
Jesse_Chen
2026-09-26 20:25:19 +08:00
co-authored by Claude Opus 5.5
parent c1592c21ad
commit e0e2b38210
2 changed files with 14 additions and 1 deletions
@@ -169,3 +169,16 @@ grep -E "^(not )?ok [0-9]+ - " <log> | sed -E 's/^(not )?ok [0-9]+ - //; s/ # .*
- `frontend/DESIGN.md` 一处文件指向更正:时间轴与盘面标题行共用的 `workingRectificationTime(result)` 现在由 `rectification-chat-view.ts` 的 `deriveRectificationChatView` 调用(仍是容器每次渲染一次),只改说明位置,不改 UI。
- 本轮没有浏览器真机走查;行为靠全量测试与原样搬移保证,两条组件级渲染测试(`rectification-dup-question-20260926.test.tsx`、`rectification-latency-20260926.test.tsx`)和三条路由级子进程测试照常通过。
- 没有推 `origin/staging`,没有推 `main`,没有改 workflow,没有装或升级依赖。
## 验收(Claude,2026-09-26)
在同机新建 `origin/staging` `12cbe6f8` 基线工作树,先后跑基线与本分支(Node 22.14):
| 项 | 基线 | 本分支 |
| --- | --- | --- |
| `npm test` | 4037 / 25 fail / 28 skip | 4045 / 25 / 28;失败名单逐条一致,无消失的测试名,新增 8 条增长合同 |
| tsc / lint | — | 0 错 / 0 error(warning 126→128,为保持原依赖数组不改业务代码,认可) |
| Python 门禁集 | 937 passed / 11 failed / 1 skipped | 同左,失败名单一致(均为 `test_qizheng_*`,本机缺 `vendor/stem-branch/dist/cli.cjs` 的环境缺口,门禁里会构建) |
| build | — | `/`、`/chart`、`/ephemeris`、`/people` ○ Static;rootMainFiles gzip 130933 B(±0%) |
代码抽查:聊天组件 effect 顺序唯一变化是 `currentQuestionRef` 的 layout effect 移到滚动锚 hook 之前,两者无依赖;三个抽出 hook 的 effect 依赖数组与原文一致。D2 四项目标全部达成。
+1 -1
View File
@@ -38,7 +38,7 @@
| `TASK-rectification-fewer-probes-card-20260926.md` | [PROGRESS](PROGRESS-rectification-fewer-probes-card-20260926.md) | **减少无效追问 + 卡片区间为主**:引导补件离线新增达标 0 → 上限 6→2、定向题问完门槛未达直接出卡;卡片区间为主标题、代表分钟副标题,第一二名差距 ≥5 个百分点才显示百分比,否则写「目前区分不开」。不放宽任何置信度。先做 | 已验收(真机清单欠) | `4e6e8d87` + 验收补改 `7203d94e`(区分不开时隐藏「最可能」),deploy-staging run 2933 已部署;回放真值 ±30/±60 19→20、宽度中位 ±1 分钟、提问 11.4→7.8;Skill 10.0.30;真机清单 `docs/testing/rectification-fewer-probes-card-20260926.md` 未走 |
| `TASK-rectification-telemetry-20260926.md` | [PROGRESS](PROGRESS-rectification-telemetry-20260926.md) | **匿名聚合统计**:每会话一行只存数字 / 枚举(题数分类、宽度、差距、停止原因、门槛达标、耗时、版本),管理后台只看汇总、保留 180 天;动表须 test:db。排在 fewer-probes 后 | 已验收(后台登录走查欠) | `d0bfc1fc`,门禁 run 2938 含真实 PG 测试通过、migrate 2940、deploy 2941(`e801fcf5`);只存数字/枚举、不存用户 id;后台「校正统计」页 |
| `TASK-rectification-offline-research-20260926.md` | `PROGRESS-rectification-offline-research-20260926.md` | **三项离线研究**:答错 1–2 题的容错、V1/V2 分盘配权正确重跑、改正「1 分钟≈1.1 天」(实测中位 3.8 天)并核实 `_representative_pairs` 推断。不改线上。结论(`docs/research/rectification_offline_research_2026_09_26.md`):R1 答错 1 题真值在区间 98–100%、头名降三到四成,答错 2 题 ±30/±60 挤出 7–10%(两道反答=8 分=淘汰线);R2 权重生效,V1/V2 在 ±30/±60 按定义恒等、±10 六题后指标不变 → `no_benefit`(已实测);R3 3.8 天/分钟复现,45 天闸≈8–34 分钟,`_representative_pairs` 推断被推翻(全配对题数不变,卡在逐月评估),另记 BUG-1048 `investigating`(闸门跨年豁免 + zip 错位)。三项均不建议立实现单 | 已验收 | `0f5442ce`(纯研究,不改线上);三项均不立实现单:答错 2 题 ±30 真值入区间 0.93、V1/V2 no_benefit、每分钟边界位移中位 3.82 天(勘误 5 份文档);新发现 BUG-1048 出题闸门两处漏洞待产品决定 |
| `TASK-rectification-code-split-20260926.md` | `PROGRESS-rectification-code-split-20260926.md` | **代码拆分(只搬不改)**:聊天组件 2043 行 / 35 useState、`POST` 926 行、`runV9AgentTurn` 1047 行,269 处切源码测试;拆分 + 增长合同 + 切片测试改调用函数。排在 fewer-probes、telemetry 之后 | 待验收(D2 四项全达:组件本体 630 行 / useState 12、POST 114、runV9AgentTurn 25;全量失败名单与基线逐条一致、测试名无缺失) | `3a66c39f` / `eb773f12` / `a00c40d4`(未推送) |
| `TASK-rectification-code-split-20260926.md` | `PROGRESS-rectification-code-split-20260926.md` | **代码拆分(只搬不改)**:聊天组件 2043 行 / 35 useState、`POST` 926 行、`runV9AgentTurn` 1047 行,269 处切源码测试;拆分 + 增长合同 + 切片测试改调用函数。排在 fewer-probes、telemetry 之后 | 已验收 | `3a66c39f` 组件 / `eb773f12` 路由 / `a00c40d4` agent-run;组件本体 1625→630、useState 35→12、POST 927→114、runV9AgentTurn 1046→25;增长合同 8 条 |
| `TASK-rectification-dup-question-20260926.md` | `PROGRESS-rectification-dup-question-20260926.md` | **同一轮问题出现两次(BUG-1045,复发自 BUG-585,BUG-969 拼回题干、去重只在刷新路径)+ 同一道选择题连画两张(BUG-1046:提交失败不回滚本地已答 + 兜底问题块条件过宽;H2 漏收回合)**。先于 latency 单 | 已验收(Claude 09-26 直接执行:子代理复现 A 与 B-H1(选择题提交 409 / 网络错误不回滚本地已答);Claude 变基到含 BUG-1043/1044 的 staging 后独立复验 tsc/lint 0、全量 3981 条失败名单与基线逐条一致、四路由 ○、gzip 不变) | `e4c1c7a3`(已部署 `f1d16405`,health 一致) |
| `TASK-rectification-latency-20260926.md` | `PROGRESS-rectification-latency-20260926.md` | **每轮等待过长(BUG-1047)**:一轮打字回答串行 5 次开思考的模型调用,分类在开流前且无超时。产品定:收尾两步不动、分类保持思考只加 10 秒超时、发出后立即出确定性进度句并按阶段更新;补埋点;服务端无口吻优化须 A/B 逐位一致。排在 dup-question 之后 | 已验收(Claude 09-26 直接执行:子代理实现 D1–D4 与 D5 两项;Claude 用 Node 22 独立复验 tsc/lint 0、全量 4002 条失败名单与 Node 22 基线逐条一致(24 条均为 Docker/DB)、四路由 ○、gzip 不变。D5 第 1 项(探针复用)输出逐字节一致但触发冻结打分身份,Claude 建议暂不做) | `86ff9a40`(已部署 `8a409434`,health 一致) |
| `TASK-rectification-session-title-result-20260922.md` | `PROGRESS-rectification-session-title-result-20260922.md` | **校正会话标题改写结果(BUG-1001)**:BUG-988 把副标题改成最后活动时间后,标题里的日期成了重复;而 BUG-929 删掉 `uniquifySessionTitle` 之后,`resolveSessionTitle` 对校正入口只返回 `生时校正 · M月D日`,**同一天多条标题完全相同**(真机截图:9/17 三条同名、9/16 两条同名、9/14 一天 5 条);旧标题的钟点后缀是创建时间、副标题是最后活动时间,同一行两个对不上的时间。**产品 09-22 拍板**:D1 标题改为承载结果——有 `accepted_time`/`confirmed_time` 写 `生时校正 · HH:MM`,否则写 `candidate_range` 的 `生时校正 · HH:MM–HH:MM`(推翻 BUG-929 的日期口径,但「不得再加墙钟去重后缀」保留);D2 存量批量重算(推翻 BUG-929「旧标题不批量改」,先例 `20260916020000_rectification_session_title_repair.sql`);D3 今日节奏保留日期(我判定的例外);D4 只在结果变化时改 title,`open` 路径不动(对 BUG-699 边界的有限扩展)。**红线**:任何写标题的路径都不得 bump `updated_at`(否则 13 条历史会话集体跳顶、毁掉 BUG-988);标题算式必须只有一处实现(一个 SQL 函数,触发器与回填共用)——BUG-987/992 都栽在「两层规则各写一份」。T4 跨层对断不得让步。已 grep 出真正受影响的只有 7 个文件,Python 侧只查裸字符串、无需改。BUG 段 1001 起 | 已验收(Claude 09-25:单一 SQL 函数、不动 updated_at、手改名不覆盖、回填幂等) | `88fe67df`/`a94a1d67`(已部署) |