Summary
In evalite@1.0.0-beta.16 and current v1, clicking a trace row in the eval detail page does not navigate to the per-trace view. The per-trace view is fully implemented — it just never mounts.
Reproduction
pnpm run example (or any run with a case that produces ≥1 trace, e.g. anything using wrapAISDKModel).
- Open the UI, navigate to a suite, open an eval that has traces.
- Click any
Trace N row in the left sidebar.
Expected: URL becomes /suite/<name>/eval/<index>?trace=<N-1> and the right panel swaps to Token Usage / Input / Output for that trace.
Actual: URL does not change; the right panel stays on the eval-level view. The border-l-4 border-primary active indicator also doesn't move.
Workaround: manually append ?trace=N to the URL — the per-trace panel renders correctly, confirming the route logic works and only the click navigation is broken.
Root cause
TraceMenuItem in apps/evalite-ui/app/routes/suite.$name.eval.$evalIndex.tsx accepts a traceIndex prop but the Link never forwards it to the route's search. The route reads trace from Route.useSearch() to choose which panel to render, so if trace is never written to the URL, the per-trace view never mounts.
Proposed fix
PR up: a four-line addition to the Link — search={(prev) => ({ ...prev, trace: props.traceIndex })} — that preserves other search params (timestamp, q) and still clears ?trace for the top "Eval" row (where traceIndex is undefined). The validateSearch schema already declares trace: z.number().optional(), so no schema change is required.
Environment
evalite@1.0.0-beta.16 (reproduced from the shipped bundle), v1 branch (reproduced in source)
main (v0.x) uses different route files and is unaffected.
Summary
In
evalite@1.0.0-beta.16and currentv1, clicking a trace row in the eval detail page does not navigate to the per-trace view. The per-trace view is fully implemented — it just never mounts.Reproduction
pnpm run example(or any run with a case that produces ≥1 trace, e.g. anything usingwrapAISDKModel).Trace Nrow in the left sidebar.Expected: URL becomes
/suite/<name>/eval/<index>?trace=<N-1>and the right panel swaps to Token Usage / Input / Output for that trace.Actual: URL does not change; the right panel stays on the eval-level view. The
border-l-4 border-primaryactive indicator also doesn't move.Workaround: manually append
?trace=Nto the URL — the per-trace panel renders correctly, confirming the route logic works and only the click navigation is broken.Root cause
TraceMenuIteminapps/evalite-ui/app/routes/suite.$name.eval.$evalIndex.tsxaccepts atraceIndexprop but theLinknever forwards it to the route'ssearch. The route readstracefromRoute.useSearch()to choose which panel to render, so iftraceis never written to the URL, the per-trace view never mounts.Proposed fix
PR up: a four-line addition to the
Link—search={(prev) => ({ ...prev, trace: props.traceIndex })}— that preserves other search params (timestamp,q) and still clears?tracefor the top "Eval" row (wheretraceIndexisundefined). ThevalidateSearchschema already declarestrace: z.number().optional(), so no schema change is required.Environment
evalite@1.0.0-beta.16(reproduced from the shipped bundle),v1branch (reproduced in source)main(v0.x) uses different route files and is unaffected.