Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 8 additions & 1 deletion src/components/legal/BenchmarkRunsHistory.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -313,7 +313,14 @@ export function BenchmarkRunsHistory({
() =>
runs.filter(
(r) =>
r.runType !== "manual" &&
// Allow-list, not deny-list: only "recursion"-tagged rows (the
// LEGAL_BENCHMARK_EVAL / LEGAL_BENCHMARK_RECURSION loop) surface
// here. "manual" rows have their own path via manualRuns/manualRows,
// and "consolidated" rows (LEGAL_BENCHMARK_CONSOLIDATED) are
// excluded from both — they never render as their own row in this
// table, even though they still flow through the hook's merged
// `runs` list for the Recursion tab's Pusher-driven status tracking.
r.runType === "recursion" &&
(!selectedTask || r.taskSlug === selectedTask.slug),
),
[runs, selectedTask],
Expand Down
9 changes: 7 additions & 2 deletions src/components/legal/RecursionBox.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -393,13 +393,18 @@ function RecursionCard({ entry, refetch, allRuns }: RecursionCardProps) {
// `allRuns` is lifted from RecursionTab (via RecursionList) so the whole tab
// shares one fetch-and-poll loop instead of one per card.

// Find the most recent CONSOLIDATED run for this taskSlug.
// Find the most recent CONSOLIDATED run for this taskSlug. Consolidated
// rows are tagged "consolidated" (distinct from the "recursion" loop tag)
// by useLegalBenchmarkRunList specifically so they stay invisible in the
// Runs tab table — but this card still needs to find them here, in the
// same merged `allRuns` list, to seed in-flight/completed status after a
// page refresh.
const existingConsolidated = useMemo(() => {
return (allRuns ?? [])
.filter(
(r) =>
r.taskSlug === entry.id &&
r.runType === "recursion" &&
r.runType === "consolidated" &&
(r.status === WorkflowStatus.PENDING ||
r.status === WorkflowStatus.IN_PROGRESS) &&
!r.hasReport,
Expand Down
34 changes: 22 additions & 12 deletions src/hooks/useLegalBenchmarkRunList.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,16 +8,23 @@ import { getWorkspaceChannelName, PUSHER_EVENTS } from "@/lib/pusher";

/**
* Display name per StakworkRun pipeline:
* - "manual" — LEGAL_BENCHMARK_RUNNER: a human clicked Run; scored
* - "recursion" — the automated loop, covering BOTH cron pipelines:
* LEGAL_BENCHMARK_EVAL (failure analysis; writes cause
* annotations onto the source run) and
* LEGAL_BENCHMARK_RECURSION (the fix-proposal step).
* Analysis is an internal stage of the loop, not a category
* an operator distinguishes — neither pipeline ever scores;
* re-scored attempts land graph-side (Recursion tab).
* - "manual" — LEGAL_BENCHMARK_RUNNER: a human clicked Run; scored
* - "recursion" — the automated loop, covering BOTH cron pipelines:
* LEGAL_BENCHMARK_EVAL (failure analysis; writes cause
* annotations onto the source run) and
* LEGAL_BENCHMARK_RECURSION (the fix-proposal step).
* Analysis is an internal stage of the loop, not a category
* an operator distinguishes — neither pipeline ever scores;
* re-scored attempts land graph-side (Recursion tab).
* - "consolidated" — LEGAL_BENCHMARK_CONSOLIDATED: the cross-run "Consolidated
* Report" comparison. Tagged distinctly from "recursion" so
* BenchmarkRunsHistory's allow-list filter excludes it from
* the Runs tab table entirely, while still flowing through
* this hook's merged `runs` list/Pusher subscription so the
* Recursion tab's RecursionCard can seed in-flight/completed
* consolidated-report status after a page refresh.
*/
export type BenchmarkRunType = "manual" | "recursion";
export type BenchmarkRunType = "manual" | "recursion" | "consolidated";

export interface BenchmarkRunListRow {
id: string;
Expand Down Expand Up @@ -227,9 +234,12 @@ export function useLegalBenchmarkRunList(
// CONSOLIDATED rows are merged so Pusher updates for them flow through
// the existing channel subscription without new polling logic, enabling
// RecursionCard to surface in-flight / completed consolidated report
// status after a page refresh. They are not surfaced in the Runs tab
// table — the runType tag keeps them invisible there.
...rawConsolidatedRows.map((r) => mapSecondary(r, "recursion")),
// status after a page refresh. They are tagged "consolidated" — a tag
// distinct from "recursion" — specifically so BenchmarkRunsHistory's
// allow-list filter excludes them from ever rendering as their own row
// in the Runs tab table, while remaining in this merged list (and thus
// reachable by RecursionCard/allRuns) for the Recursion tab's seeding.
...rawConsolidatedRows.map((r) => mapSecondary(r, "consolidated")),
].sort((a, b) => new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime());

runsRef.current = merged;
Expand Down
Loading