fix(consult): blank-line paragraphs, drop the H2 contract line, remove the assistant avatar
Independent Staging Quality Gate / validate (push) Failing after 18m5s
Independent Staging Quality Gate / publish (push) Skipped

Acceptance fix for 28113fa0 (TASK-consult-conversational-answer-fix-20261006):
- F1: chat-answer-detail no longer pins 'Every H2 must start its own line'
  (first turns carry no H2), assertion change noted in three columns.
- F2: Good examples separate paragraphs with a blank line and the shape says
  so; .message p is pre-wrap, so a single newline only wraps.
- Product request: remove the assistant avatar on every surface (consult,
  rectification, onboarding); --assistant-content-inset back to 0px.

Full suite 4941 / fail 24, identical to baseline 86cafe68 minus a timing flake;
build keeps / Static; first-load gzip -0.1%.

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-10-06 15:58:40 +08:00
co-authored by Claude Opus 5.5
parent 5a589a9058
commit da226db1d4
14 changed files with 82 additions and 49 deletions
@@ -31,14 +31,6 @@ function motionPreferred() {
if (motionPreferred()) prefetchOnIdle(loadGsap);
/* Restored after real-device review: R3 removed it on the grounds that it was
the most repeated element in a long transcript, but without it the assistant
turn has no visual owner — in the rectification surface especially, where
narration, a question and its options all stack as plain text. */
export function AgentAvatar() {
return <span className="agent-avatar" aria-hidden="true" />;
}
export const ChatMessageRow = memo(function ChatMessageRow({
message,
showActivity = message.state !== "settled",
@@ -138,7 +130,6 @@ export const ChatMessageRow = memo(function ChatMessageRow({
className={`message message-${message.role}`}
aria-label={message.role === "assistant" ? assistantLabel : "你"}
>
{message.role === "assistant" && <AgentAvatar />}
<div className="message-content">
<div className="message-bubble">
{message.role === "assistant" ? (
@@ -1,7 +1,6 @@
"use client";
import { ChatMessageContent } from "@/components/chat-message-content";
import { AgentAvatar } from "@/components/chat-message-row";
import { protectOnboardingPhrases } from "@/lib/onboarding-copy";
import type { Message } from "@/lib/home-types";
@@ -10,7 +9,6 @@ export function OnboardingChatMessage({ role, text, streaming = false, length =
const protectedVisibleText = protectOnboardingPhrases(visibleText);
return (
<article className={`message message-${role} onboarding-message${phraseSafe ? " is-phrase-safe" : ""}`} aria-label={role === "assistant" ? "Jyotisha" : "你"}>
{role === "assistant" && <AgentAvatar />}
<div className="message-content">
<div className="message-bubble">
{role === "assistant" ? (