docs(chat): note the second rebase and renumbering; re-lock the question-stem describedby on the shared composer

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JUei7K13cYxLHE3Axe4A45
This commit is contained in:
Jesse_Chen
2026-09-02 04:04:09 +00:00
parent 6ac55aebbb
commit e3df3d17e7
2 changed files with 10 additions and 1 deletions
+2
View File
@@ -16,6 +16,8 @@
| 3 · 校正复用 ChatComposer / 统一滚动跟随 / JumpToLatest / 900px | 完成(第三批合入后解除阻塞) | `b72c1efc` | BUG-477、BUG-478 |
| 4 · DESIGN.md | 与 0/1/2 对应的条目随各任务改;与 3 对应的四条随任务 3 同 commit | — | — |
**第二次 rebase 与编号再顺延(2026-09-02**:远端又合入 `1a3e14e7`(问题题干显示/占用后解锁采用),占了 BUG-471/472。本分支再次用 `filter-branch` 在原提交上改号后 rebase 到 `1a3e14e7`471→473、472→474、473→475、474→476、475→477、476→478`BUG_HISTORY`、本文件、测试注释、commit message 一并改。冲突两处:`docs/BUG_HISTORY.md`(取 staging 全文 + 我方条目续在后面);`rectification-agentic-chat.tsx`(两边都保留——staging 的 `collectSpokenPromptId` 与题干 `<p>` 原样,staging 加在 `<Textarea>` 上的 `aria-describedby` 改为经 `ChatComposer` 新增的 `describedBy` prop 传入,composer 把它与字数计数 id 合并成一个 `aria-describedby`)。staging 新测试 `rectification-spoken-collect``aria-describedby={collectSpokenPrompt`(内联 Textarea),按红线 3 改锁 `describedBy={collectSpokenPrompt …}` + composer 的合并表达式,注释原值。`character-remaining-contract``aria-describedby={showRemaining ? remainingId : undefined}` 锁随之改为合并表达式。
## 任务 0 · 流式渲染
改动:`src/lib/stream-frame-buffer.ts`(新)、`src/lib/chat-markdown-split.ts`(新)、`src/components/chat-message-content.tsx``src/components/chat-message-row.tsx``streaming` prop)、`src/hooks/use-consultation-run.ts``src/components/rectification-agentic-chat.tsx`
@@ -111,7 +111,14 @@ test("collect_spoken current_question renders the prompt in the question slot",
assert.match(chat, /const collectSpokenPrompt =/);
assert.match(chat, /collectSpokenPrompt\n\s+\? "请回答上面的问题…"/);
assert.match(chat, /rectification-question-slot__prompt/);
assert.match(chat, /aria-describedby=\{collectSpokenPrompt/);
// Former lock: `aria-describedby={collectSpokenPrompt` on the inline <Textarea>. The rectification
// surface now renders the shared ChatComposer (BUG-477) and hands the stem id in as `describedBy`,
// which the composer merges into the field's aria-describedby together with the count id.
assert.match(chat, /describedBy=\{collectSpokenPrompt && !showLiveChoiceCard && !readonly/);
assert.match(
readFileSync(new URL("../src/components/chat-composer.tsx", import.meta.url), "utf8"),
/\[describedBy, showRemaining \? remainingId : undefined\]\.filter\(Boolean\)\.join\(" "\)/,
);
assert.match(chat, /<RectificationChoiceCard/);
assert.doesNotMatch(chat, /rectification-question-slot__spoken/);
assert.doesNotMatch(chat, /请在下方输入框回答/);