fix(rectification): make every gap a live row with retries, give an empty Case a start, and say why a run stopped

The chat used to show "当前没有可回答的问题,正在等待服务端更新" / "当前问题暂时无法显示"
/ "题目加载失败,请刷新" as bare copy above the composer. The gap between a
settled turn and its next question is now a state: `preparing` renders the
same timeline live row the reply uses ("正在准备下一个问题…") and refetches the
Case on a 2s timer up to two retries; `unavailable` renders one line and a
44px reload button. A snapshot that never arrived at hydration is the same
gap. A resumed Case with no turns and no server-started opening shows
"这段校正还没有开始。" with one 开始提问 action. Stopping a run keeps what
streamed and says so instead of "暂时不可用"; the opening turn's live row
names what is happening; a 402 explains itself for 600ms before leaving.

BUG-505, BUG-507

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-03 06:56:17 +00:00
parent 53017d4153
commit 360989ca2c
6 changed files with 169 additions and 50 deletions
+28 -4
View File
@@ -2931,11 +2931,35 @@ input:not([type="radio"]):not([type="checkbox"]):not([class^="ant-"]):not([class
font-weight: 600;
line-height: 1.55;
}
.rectification-composer-status {
margin: 0 0 var(--space-2);
color: var(--color-ink-secondary);
font-size: var(--type-caption);
/* The gap between a settled turn and its next question, as the last entry of the
transcript: a live timeline row while refetching, then copy and a reload. */
.rectification-question-gap {
display: grid;
gap: var(--space-2);
justify-items: start;
margin: var(--space-2) 0 var(--space-3);
margin-inline-start: var(--assistant-content-inset);
}
.rectification-question-gap__copy {
margin: 0;
color: var(--color-ink-secondary);
font-size: var(--type-body-sm);
line-height: 1.55;
}
/* The standalone live row has no summary above it. */
.consultation-run-timeline__list.is-standalone { margin-top: 0; }
/* A Case with nothing to show and no automatic opening: one line and one way to start. */
.rectification-empty-state {
display: grid;
gap: var(--space-3);
justify-items: start;
margin: var(--space-4) 0;
margin-inline-start: var(--assistant-content-inset);
color: var(--color-ink-secondary);
font-size: var(--type-body-sm);
line-height: 1.55;
}
.rectification-empty-state p { margin: 0; }
.rectification-snapshot {
display: grid;
gap: var(--space-3);