From cb4f7a7606954911ad45f5e16df96ab5b86e3f0d Mon Sep 17 00:00:00 2001 From: saravanakumardb1 Date: Mon, 1 Jun 2026 00:29:29 -0700 Subject: [PATCH] feat(tracker-web): show job prompt + PR/target config on the detail page The fleet job detail page never rendered the prompt (bodyMd) or the repo/ verify/auto-merge/capabilities/deps config. Add a Prompt card (verbatim body, scrollable) + a target/config grid, with a read-only badge once the job leaves queued/draft (a factory may already be acting on it). Expose verify/autoMerge/ deps on the FleetJob client type. Generated with [Devin](https://cli.devin.ai/docs) Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com> --- .../app/dashboard/fleet/jobs/[id]/page.tsx | 59 +++++++++++++++++++ .../tracker-web/src/lib/fleet-client.ts | 6 ++ 2 files changed, 65 insertions(+) diff --git a/dashboards/tracker-web/src/app/dashboard/fleet/jobs/[id]/page.tsx b/dashboards/tracker-web/src/app/dashboard/fleet/jobs/[id]/page.tsx index 68e00d95..8a2e7f08 100644 --- a/dashboards/tracker-web/src/app/dashboard/fleet/jobs/[id]/page.tsx +++ b/dashboards/tracker-web/src/app/dashboard/fleet/jobs/[id]/page.tsx @@ -255,6 +255,9 @@ export default function FleetJobDetailPage() { + {/* Prompt (the job body) + PR/target config */} + + {/* Review gate (multi-reviewer human gate) */} {job.stage === 'review' && ( = [ + ['Repo', job.repo], + ['Base branch', job.repo ? (job.baseBranch ?? 'main') : undefined], + ['Verify', job.verify], + ['Auto-merge', job.repo ? (job.autoMerge ? 'yes' : 'no') : undefined], + ['Capabilities', job.capabilities?.length ? job.capabilities.join(', ') : undefined], + ['Deps', job.deps?.length ? job.deps.join(', ') : undefined], + ['Idempotency key', job.idempotencyKey], + ]; + const shown = cfg.filter(([, v]) => v != null && v !== ''); + return ( +
+
+

Prompt

+ + {locked ? 'read-only — picked up' : 'queued — not yet picked up'} + +
+
+        {job.bodyMd?.trim() ? job.bodyMd : 'No prompt body.'}
+      
+ {shown.length > 0 && ( +
+ {shown.map(([k, v]) => ( +
+

{k}

+

{v}

+
+ ))} +
+ )} +
+ ); +} + /** Compact stat chip for the per-job cost/token/time totals. */ function Stat({ label, value }: { label: string; value: string }) { return ( diff --git a/dashboards/tracker-web/src/lib/fleet-client.ts b/dashboards/tracker-web/src/lib/fleet-client.ts index e96ad552..b5a40ce9 100644 --- a/dashboards/tracker-web/src/lib/fleet-client.ts +++ b/dashboards/tracker-web/src/lib/fleet-client.ts @@ -27,6 +27,12 @@ export interface FleetJob { reviewDecisions?: ReviewDecision[]; repo?: string; baseBranch?: string; + /** PR mode: verify command run in the checkout before the PR opens. */ + verify?: string; + /** PR mode: squash-merge the PR automatically when verify passes. */ + autoMerge?: boolean; + /** Job dependencies (idempotency keys this job is gated on). */ + deps?: string[]; } export interface FleetFactory {