--- brief: 5 convoy: polish-dag-tiers-cost role: role-implementer title: PR checks recovery panel status: ready priority: P2 slice_dependencies: [] recommended_model: qwen-coder model_tier: local --- # Brief 5 — `Task-pr-checks-recovery-panel` (Epic 8) ## Goal Mission control detail shows PR checks + Retry — `PR checks recovery` benchmark. ## Files - `apps/web/server/lib/forge/adapters.ts` — add `getChecks({owner, repo, sha})` stub (GitHub `GET /repos/{owner}/{repo}/commits/{sha}/check-runs` with token, Forgejo `GET /repos/{owner}/{repo}/commits/{sha}/statuses`), returns `{checks: [{name, status, conclusion}], canRetry}`. - `apps/web/server/routers/convoys.ts` — add `getChecks` query that loads `convoy.prUrl` + resolves sha via `git ls-remote`, calls adapter. - `apps/web/components/mission-control/convoy-detail-panel.tsx` — panel `Checks` tab when `prUrl` present, shows list + `Retry` button (stub re-run if forge supports). ## Acceptance - Detail panel `Checks` tab shows checks for PR `sha` (mock if no token → `no token` message, not error). - `pnpm lint && pnpm type-check` pass. ## Prompt You are `role-implementer` brief 5. Read `plans/Plan-automation-foundation/Epic-forge-webhooks/Task-pr-checks-recovery-panel.md`, `apps/web/server/lib/forge/adapters.ts`. Keep stub simple, never expose token. ## Depends None — needs PR `prUrl` from prior convoys but works without.