# TASK · 生时校正代码拆分(只搬不改)+ 增长上限(2026-09-26) ## 基线 - 排在 `TASK-rectification-fewer-probes-card-20260926` 与 `TASK-rectification-telemetry-20260926` **都合入之后**的 `origin/staging`。分支 `codex/rectification-code-split-20260926`。 ## 事故实证(09-26 盘点,`origin/staging` 3ce11ee0) | 文件 | 行数 | 说明 | | --- | --- | --- | | `frontend/src/components/rectification-agentic-chat.tsx` | 2043 | 组件本体约 1620 行;useState 35、useRef 16、useEffect 7、useLayoutEffect 2、useCallback 12 | | `frontend/src/app/api/rectification/agent/route.ts` | 1077 | `POST` 约 926 行 | | `frontend/src/lib/rectification-agentic/v9/agent-run.ts` | 1400 | `runV9AgentTurn` 约 1047 行 | - 无任何行数 / hook 数增长上限(对比首页 `home-shell-growth-contract.test.ts`)。 - 79 个测试文件把这些文件当源码文本读,其中 42 个用 `indexOf` / `sourceBetween` 共 269 处切片;这类测试多次让门禁翻红(BUG-308、342、736、933、940、975、1014、692、748)。 ## 决策记录(产品 2026-09-26) - D1 **只搬代码不改行为**(同首页拆分 `TASK-home-page-split-20260925` 的做法): - 聊天组件:按职责拆出 hook(快照同步、提交与流、选择题、时间轴 / 范围)与展示组件;参数式 lib 函数内部不调用 React hook。 - `POST`:按分支拆成独立处理函数(打字回答、选择题、开场、只读、交付),`route.ts` 只做装配。 - `runV9AgentTurn`:按阶段拆(准备、单次尝试、收尾、重跑),行为逐行一致。 - D2 目标:聊天组件本体 ≤ 900 行、useState ≤ 20;`POST` ≤ 250 行;`runV9AgentTurn` ≤ 300 行(达不到按让步写明)。 - D3 加增长合同测试(与首页同型:行数基线 + 150 余量、hook 数上限),锁住成果。 - D4 **切源码字符串的测试改为调用被抽出的函数**(行为断言等价或更强);不得删除测试来"解决"断言;每条改写三栏。 ## 硬红线 1. 行为零变化:全量前端测试(Node 22)失败名单与开工基线逐条一致、新增 0;Python 快速门通过;首页 / 各页 `○ Static`、gzip ±2%。 2. 不改接口、数据库、Skill、文案、打分。 3. 不得用挤行 / 删注释凑行数(AGENTS §6)。 4. 分阶段提交(组件、路由、agent-run 各自可单独回滚),每阶段都跑全量。 ## 任务分解 - T1 聊天组件拆分 + 增长合同。 - T2 路由拆分 + 增长合同。 - T3 agent-run 拆分 + 增长合同。 - T4 切片测试改调用函数(随各阶段进行)。 - T5 记录:CHANGELOG(无用户可见变化)、PROGRESS(每阶段行数 / hook 数 / 测试对比);不开 BUG 号。