Skip to content
Merged
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
2 changes: 1 addition & 1 deletion src/__tests__/unit/components/RecursionBox.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -971,7 +971,7 @@ describe("RecursionCard — allRuns prop (consolidated-run detection)", () => {
return {
id: overrides.id ?? "con-run-1",
workspaceId: "ws-1",
runType: "recursion" as const,
runType: "consolidated" as const,
pipeline: "LEGAL_BENCHMARK_CONSOLIDATED" as import("@prisma/client").StakworkRunType,
status: overrides.status ?? "PENDING" as import("@prisma/client").WorkflowStatus,
projectId: null,
Expand Down
7 changes: 6 additions & 1 deletion src/components/legal/BenchmarkRunsHistory.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -309,11 +309,16 @@ export function BenchmarkRunsHistory({

// Cron-pipeline rows shown alongside (or instead of) the manual window when
// the type filter asks for them. Operational only — no scores, no windowing.
// Explicit allow-list (rather than `!== "manual"`) so only eval/recursion-
// pipeline rows are eligible here: manual rows go through their own path
// above, and "consolidated" rows are deliberately excluded — they flow
// through the merged `runs` list solely for the Recursion tab's Pusher
// tracking and must never render as their own row in this table.
const secondaryRows = useMemo(
() =>
runs.filter(
(r) =>
r.runType !== "manual" &&
r.runType === "recursion" &&
(!selectedTask || r.taskSlug === selectedTask.slug),
),
[runs, selectedTask],
Expand Down
2 changes: 1 addition & 1 deletion src/components/legal/RecursionBox.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -399,7 +399,7 @@ function RecursionCard({ entry, refetch, allRuns }: RecursionCardProps) {
.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
33 changes: 21 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: cross-run "Consolidated
* Report" comparisons. Tagged distinctly from "recursion"
* so BenchmarkRunsHistory's allow-list filter excludes
* these rows from the Runs tab table, while they remain
* in the merged `runs` list so the Recursion tab's Pusher
* subscription/RecursionCard can still find and track
* in-flight / completed consolidated report generation.
*/
export type BenchmarkRunType = "manual" | "recursion";
export type BenchmarkRunType = "manual" | "recursion" | "consolidated";

export interface BenchmarkRunListRow {
id: string;
Expand Down Expand Up @@ -227,9 +234,11 @@ 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. Tagged "consolidated" (distinct from
// "recursion") so BenchmarkRunsHistory's allow-list filter excludes
// them from the Runs tab table — they stay invisible there while
// remaining discoverable in the merged `runs` list for the Recursion tab.
...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