refactor(rectification): split the chat component into hooks, parameter functions and blocks
Move-only (TASK-rectification-code-split-20260926 T1/T4). No behavior, API,
copy, DB, Skill or scoring change.
- rectification-agentic-chat.tsx: 2043 -> 737 lines; component body
1625 -> 630; useState 35 -> 12, useRef 16 -> 9, effects 9 -> 5,
useCallback 12 -> 6.
- Snapshot sync -> hooks/use-rectification-case-snapshot.ts; board layout
and live label clock -> two small hooks.
- send / submitStructuredChoice / acceptCandidate bodies ->
lib/rectification-chat-{turn,choice,accept}-run.ts parameter functions
(bodies verbatim, deps destructured to the same names); copy/regenerate,
question repair, pure transcript and snapshot helpers and the per-render
view derivation -> lib/rectification-chat-*.ts (no React hooks).
- Question-gap blocks and the read-only range line ->
components/rectification-question-gap-notices.tsx.
- Dependency arrays kept exactly as before (lint warnings +3, listed in
PROGRESS); no dep added to appease the linter.
- Tests: whole-source contracts read tests/rectification-chat-surface.ts
(container + split files, like home-surface.ts); slices of moved code now
call the extracted functions or render the extracted block, each with a
原值/新值/原因 comment. New tests/rectification-growth-contract.test.ts.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017eEAG8HD3mm8gsKXgk8uU8
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
12cbe6f868
commit
3a66c39f48
@@ -22,6 +22,7 @@ import {
|
||||
CASE_ID, SESSION_ID, TURN_ID, USER_ID, FOCUS_ID,
|
||||
computeFixture, dossierFixture, fakeAccounting, receiptHandlers,
|
||||
} from "./rectification-v9-test-support.ts";
|
||||
import { rectificationChatSurface } from "./rectification-chat-surface.ts";
|
||||
|
||||
// Real native-engine response, using explicitly fictional input, not a hand-built contract.
|
||||
const golden = JSON.parse(readFileSync(new URL(
|
||||
@@ -234,7 +235,8 @@ test("stale history exposes explicit recompare and real tools replace old proven
|
||||
assert.equal(refreshed.case.result_identity.read_only, false);
|
||||
assert.equal(refreshed.case.result_identity.algorithm_version, CURRENT);
|
||||
assert.equal(refreshed.case.result_identity.policy_version, golden.versions.decision_policy_version);
|
||||
const component = readFileSync(new URL("../src/components/rectification-agentic-chat.tsx", import.meta.url), "utf8");
|
||||
// 原值: 读 rectification-agentic-chat.tsx 单文件。新值: rectificationChatSurface(容器 + 拆出的 hook / 参数函数 / 块,见 rectification-chat-surface.ts)。原因: TASK-rectification-code-split-20260926 只搬不改,整文件断言跟着代码走;切片断言另行改为调用函数。
|
||||
const component = rectificationChatSurface;
|
||||
assert.match(component, /resultNotice && canRecompare && !historyReadonly/);
|
||||
assert.match(component, /recompareHistoricalResult\(\{ canRecompare, historyReadonly, busy, send \}\)/);
|
||||
assert.match(component, /if \(\(action === "message" && !trimmed\) \|\| conversationReadonly\) return/);
|
||||
|
||||
Reference in New Issue
Block a user