import type { ReactNode } from "react";
import { Avatar, AvatarFallback } from "@/components/ui/avatar";
import { Badge } from "@/components/ui/badge";
import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card";
import { SystemNotice } from "@/components/SystemNotice";
import { systemNoticeFixtures } from "@/fixtures/systemNoticeFixtures";
import { cn } from "@/lib/utils";
import {
CircleDashed,
FlaskConical,
Layers,
ListChecks,
Sparkles,
} from "lucide-react";
function LabSection({
id,
eyebrow,
title,
description,
accentClassName,
children,
}: {
id?: string;
eyebrow: string;
title: string;
description: string;
accentClassName?: string;
children: ReactNode;
}) {
return (
{description}{title}
Replaces the current pattern where a Paperclip-authored warning renders inside a user-style chat bubble. The notice is one container, system-styled, with hidden-by-default operational metadata. Tone is conveyed by icon, label, and color together so it stays accessible.
Successful run handoff missing
Author reads as You even though the author is the Paperclip system. Two containers stack the warning inside a user-style bubble, and operational evidence is always visible.
Same content. The visible body is one short system sentence; reviewers expand{" "} Details only when they need run evidence. Tone is reinforced by the octagon icon and the "System alert" label, not just red.
{` `}{" "}
from @/components/SystemNotice.
It accepts tone,{" "}
label,{" "}
body,{" "}
metadata, and{" "}
detailsDefaultOpen.
authorType === "system"{" "}
or{" "}
presentation.kind === "system_notice"{" "}
should render as a SystemNotice row at full content width — never inside an{" "}
IssueChatUserMessage{" "}
or assistant bubble.
aria-expanded{" "}
and{" "}
aria-controls{" "}
wired to the panel id. The container exposes{" "}
role="status"{" "}
and an{" "}
aria-label{" "}
equal to the visible tone label so screen readers announce tone with text.
presentation{" "}
keep rendering through the current{" "}
SuccessfulRunHandoffCommentCallout{" "}
string-detector. The new contract is opt-in for the system generators in Phase 5.