From e8e681adbfa597ad0872d84dc8d51a6fcec9d514 Mon Sep 17 00:00:00 2001 From: Bryan Helmkamp Date: Fri, 18 Sep 2026 10:54:45 -0400 Subject: [PATCH] Remove the retry, rewind, fork and timeline endpoints and commands The legacy executor replayed a run from a checkpoint; Petri resumes a run from its records instead, and the checkpoint timeline, rewind, fork and retry were the operations that replay carried. The server dropped their handlers with the executor; this removes the rest: - the API spec's `/runs/{id}/retry`, `/rewind`, `/fork` and `/timeline` paths with the `ForkRequest`, `ForkResponse`, `RewindRequest`, `RewindResponse` and `TimelineEntryResponse` schemas, and the generated TypeScript models; - `fabro rewind` and `fabro fork` (with the checkpoint timeline printer and the repo-origin check only they used), their reference pages and the checkpoints guide's rewind and fork sections; - `fabro-client`'s `rewind_run`, `fork_run` and `run_timeline`; - the web app's Retry action on the run list and the run page. `Run.retried_from` stays on the run type: a run that was retried before the cutover would still name its source. Co-Authored-By: Claude Fable 5.1 --- .../components/runs-list/row-actions-menu.tsx | 18 +- apps/fabro-web/app/lib/mutations.ts | 20 +- apps/fabro-web/app/lib/query-keys.ts | 1 - apps/fabro-web/app/lib/run-actions.test.ts | 28 -- apps/fabro-web/app/lib/run-actions.ts | 18 +- apps/fabro-web/app/routes/run-detail.test.ts | 60 ---- apps/fabro-web/app/routes/run-detail.tsx | 16 +- .../app/routes/run-detail/lifecycle-toasts.ts | 10 - docs/public/api-reference/fabro-api.yaml | 280 --------------- docs/public/execution/checkpoints.mdx | 40 --- docs/public/reference/cli.mdx | 46 --- lib/apps/fabro-cli/src/args.rs | 39 --- lib/apps/fabro-cli/src/commands/run/mod.rs | 11 - lib/apps/fabro-cli/src/shared/mod.rs | 1 - lib/apps/fabro-cli/tests/it/cmd/fabro.rs | 2 - lib/apps/fabro-cli/tests/it/cmd/mod.rs | 2 - lib/apps/fabro-cli/tests/it/cmd/support.rs | 15 +- lib/apps/fabro-server/src/server.rs | 25 +- lib/foundation/fabro-client/src/client.rs | 58 ---- .../src/.openapi-generator/FILES | 5 - .../fabro-api-client/src/api/runs-api.ts | 318 ------------------ .../fabro-api-client/src/models/index.ts | 5 - 22 files changed, 21 insertions(+), 997 deletions(-) diff --git a/apps/fabro-web/app/components/runs-list/row-actions-menu.tsx b/apps/fabro-web/app/components/runs-list/row-actions-menu.tsx index 8d543e24c..717a83fee 100644 --- a/apps/fabro-web/app/components/runs-list/row-actions-menu.tsx +++ b/apps/fabro-web/app/components/runs-list/row-actions-menu.tsx @@ -20,7 +20,6 @@ import { denyRun, isCancellationPendingState, mapError, - retryRun, unarchiveRun, } from "../../lib/run-actions"; import type { LifecycleAction } from "../../lib/run-actions"; @@ -44,7 +43,6 @@ export function RowActionsMenu({ run }: { run: RunWithStatus }) { const status = run.lifecycleStatus; const showApprove = run.pendingApproval === true; const showDeny = run.pendingApproval === true; - const showRetry = status === "failed" || status === "dead"; const showArchive = canArchive(status); const showUnarchive = canUnarchive(status); const showCancel = canCancel(status); @@ -56,7 +54,7 @@ export function RowActionsMenu({ run }: { run: RunWithStatus }) { ); const pending = pendingAction !== null || cancellationPending; - const hasLifecycle = showRetry || showArchive || showUnarchive; + const hasLifecycle = showArchive || showUnarchive; const hasDestructive = showDeny || showCancel || showDelete; async function runAction( @@ -162,20 +160,6 @@ export function RowActionsMenu({ run }: { run: RunWithStatus }) { )} - {showRetry && ( - - - - )} {showArchive && (