+
{formatted}
{unit && {unit}}
diff --git a/workbench-ui/src/app/evals/EvalsRoute.tsx b/workbench-ui/src/app/evals/EvalsRoute.tsx
index f366eba9..830b6918 100644
--- a/workbench-ui/src/app/evals/EvalsRoute.tsx
+++ b/workbench-ui/src/app/evals/EvalsRoute.tsx
@@ -5,6 +5,7 @@ import { useCommandRegistry } from "../commandRegistry";
import { subjectToUrl } from "../evidenceAddress";
import { useEvalLanes, useEvalRun } from "../../api/queries";
import { EvalLaneCard } from "./EvalLaneCard";
+import { Panel } from "../../design/components/Panel/Panel";
import { EvalRunButton } from "./EvalRunButton";
import { EvalMetricGrid } from "./EvalMetricGrid";
import { EvalFailureViewer } from "./EvalFailureViewer";
@@ -118,8 +119,7 @@ export function EvalsRoute() {
return (
{/* Left Pane: Lane List */}
-
-
Eval Lanes
+
{lanes && lanes.length > 0 ? (
lanes.map((lane) => (
@@ -137,7 +137,7 @@ export function EvalsRoute() {
/>
)}
-
+
{/* Right Pane: Results / Form */}
diff --git a/workbench-ui/src/app/proposals/ProposalTable.tsx b/workbench-ui/src/app/proposals/ProposalTable.tsx
index cc7574d8..c68fd658 100644
--- a/workbench-ui/src/app/proposals/ProposalTable.tsx
+++ b/workbench-ui/src/app/proposals/ProposalTable.tsx
@@ -53,11 +53,13 @@ export function ProposalTable({
role="button"
tabIndex={0}
className={`grid w-full grid-cols-[minmax(7rem,1fr)_auto_auto_minmax(7rem,1fr)_minmax(9rem,1fr)] items-center gap-3 border-b border-[var(--color-border-subtle)] px-3 py-2 text-left text-sm text-[var(--color-text-primary)] hover:bg-[var(--color-surface-inset)] focus-visible:outline focus-visible:outline-2 focus-visible:outline-inset focus-visible:outline-[var(--color-focus-ring)] transition-all ${
- selected ? "bg-[var(--color-surface-inset)]" : ""
+ selected ? "bg-[var(--color-selected-bg)]" : ""
} ${
- focused
- ? "bg-[var(--color-surface-inset)] border-l-2 border-[var(--color-focus-ring)] pl-[10px]"
- : "border-l-2 border-transparent pl-[10px]"
+ selected
+ ? "border-l-2 border-l-[var(--color-selected-border)] pl-[10px]"
+ : focused
+ ? "border-l-2 border-l-[var(--color-focus-ring)] pl-[10px]"
+ : "border-l-2 border-l-transparent pl-[10px]"
}`}
key={proposal.proposal_id}
onClick={() => onSelect(proposal.proposal_id)}
diff --git a/workbench-ui/src/app/proposals/ProposalsRoute.tsx b/workbench-ui/src/app/proposals/ProposalsRoute.tsx
index 642adfe1..ed8dc2eb 100644
--- a/workbench-ui/src/app/proposals/ProposalsRoute.tsx
+++ b/workbench-ui/src/app/proposals/ProposalsRoute.tsx
@@ -16,6 +16,7 @@ import { ProposalChainViewer } from "./ProposalChainViewer";
import { ProposalProvenanceViewer } from "./ProposalProvenanceViewer";
import { ProposalSummaryCard } from "./ProposalSummaryCard";
import { ProposalTable } from "./ProposalTable";
+import { Panel } from "../../design/components/Panel/Panel";
import { ReplayEvidenceCard } from "./ReplayEvidenceCard";
import { RatificationCommandPanel } from "./RatificationCommandPanel";
@@ -244,12 +245,10 @@ export function ProposalsRoute() {
return (
-
-
-
-
Proposal Queue
- {/* Domain Selector Tabs */}
-
+
-
-
+ }
+ >
+
{domain === "cognition" && (
{filters.map((state) => (
@@ -288,7 +288,6 @@ export function ProposalsRoute() {
))}
)}
-
)}
-
+
+
{!selectedProposalId ? (
diff --git a/workbench-ui/src/app/replay/ArtifactList.tsx b/workbench-ui/src/app/replay/ArtifactList.tsx
index 4a844e5d..e482aa1f 100644
--- a/workbench-ui/src/app/replay/ArtifactList.tsx
+++ b/workbench-ui/src/app/replay/ArtifactList.tsx
@@ -106,7 +106,7 @@ export function ArtifactList({ artifacts, selectedId, onSelect }: ArtifactListPr
className={cn(
"w-full rounded px-2 py-1.5 text-left focus-visible:outline focus-visible:outline-2 focus-visible:outline-[var(--color-focus-ring)]",
isSelected
- ? "bg-[var(--color-surface-raised)] text-[var(--color-text-primary)] border-l-2 border-[var(--color-focus-ring)] pl-1.5"
+ ? "bg-[var(--color-selected-bg)] text-[var(--color-text-primary)] border-l-2 border-[var(--color-selected-border)] pl-1.5"
: "text-[var(--color-text-secondary)] hover:bg-[var(--color-surface-raised)] hover:text-[var(--color-text-primary)]"
)}
aria-current={isSelected ? "true" : undefined}
diff --git a/workbench-ui/src/design/components/DigestBadge/DigestBadge.test.tsx b/workbench-ui/src/design/components/DigestBadge/DigestBadge.test.tsx
index cdc9fc2f..0b8c7dff 100644
--- a/workbench-ui/src/design/components/DigestBadge/DigestBadge.test.tsx
+++ b/workbench-ui/src/design/components/DigestBadge/DigestBadge.test.tsx
@@ -7,7 +7,7 @@ describe("DigestBadge", () => {
it("renders truncated digest with algorithm prefix", () => {
render();
const badge = screen.getByTestId("digest-badge");
- expect(badge).toHaveTextContent("sha256:4f80f7e12c7e8ca1...");
+ expect(badge).toHaveTextContent("sha256:4f80f7e12c7e...");
});
it("uses custom algorithm prefix", () => {
diff --git a/workbench-ui/src/design/components/DigestBadge/DigestBadge.tsx b/workbench-ui/src/design/components/DigestBadge/DigestBadge.tsx
index 4e8f43b3..5d468531 100644
--- a/workbench-ui/src/design/components/DigestBadge/DigestBadge.tsx
+++ b/workbench-ui/src/design/components/DigestBadge/DigestBadge.tsx
@@ -37,7 +37,8 @@ export function DigestBadge({
digest,
algorithm = "sha256",
verified,
- truncate = 16,
+ // Wave R hash display standard: 12 visible chars + copy, everywhere.
+ truncate = 12,
}: DigestBadgeProps) {
const [copied, setCopied] = useState(false);
const scheduleReset = useManagedTimeout();
diff --git a/workbench-ui/src/design/components/MetadataTable/MetadataTable.tsx b/workbench-ui/src/design/components/MetadataTable/MetadataTable.tsx
index 4c329601..b44defd1 100644
--- a/workbench-ui/src/design/components/MetadataTable/MetadataTable.tsx
+++ b/workbench-ui/src/design/components/MetadataTable/MetadataTable.tsx
@@ -66,7 +66,7 @@ export function MetadataTable({ rows }: MetadataTableProps) {
{row.key}
{title}
diff --git a/workbench-ui/src/design/components/states/EmptyState.tsx b/workbench-ui/src/design/components/states/EmptyState.tsx
index c9906d99..1b8d7f24 100644
--- a/workbench-ui/src/design/components/states/EmptyState.tsx
+++ b/workbench-ui/src/design/components/states/EmptyState.tsx
@@ -18,7 +18,20 @@ export function EmptyState({
return (
- {statement}
+ {/* Deterministic monochrome glyph: an empty evidence slot. Static
+ inline SVG — same bytes every render, no asset fetch. */}
+
+ {statement}
{typeof nextAction === "string" ? (