## Summary
Follow-up on **#2127** (Quality plugin already on `main`). This PR only
lands the remaining Quality deltas that were not merged:
- **Experimental gate fix** — `TaskStore.getSettings()` is async; the
gate now awaits merged settings so enabling
`experimentalFeatures.qualityPlugin` actually works, and status-bearing
errors return structured `{ status, body }` instead of collapsing to
hard failures
- **Done-task QA worktrees** — when a task has no live worktree (typical
after land), preview/task runs create a disposable checkout under
`.fusion/quality-qa/` at the task branch or merge commit so processes
run the **done task’s code**, not project root
- **Hub layout** — shared `ViewHeader` + dashboard spacing/typography so
Quality matches Insights / Compound Engineering / Goals
Scoped to `plugins/fusion-plugin-quality/**` only (rebased onto current
`main`; duplicate plugin-landing commits dropped).
## Test plan
- [ ] Enable **Settings → Experimental → Quality Plugin**, restart if
routes were cold
- [ ] Quality hub: header matches other views; refresh + presets work
- [ ] Done task → QA tab → Start preview uses QA worktree at
branch/merge commit (not project root)
- [ ] Active task with live worktree still uses that worktree
- [ ] Flag off: clear experimental-disabled error (not generic empty
failure)
- [ ] `pnpm --filter @fusion-plugin-examples/quality test` (32 tests)
24 lines
739 B
TypeScript
24 lines
739 B
TypeScript
// Ambient host interop (no runtime dependency on @fusion/dashboard).
|
|
// Vite aliases resolve these to the real dashboard sources at build time.
|
|
// Mirrors fusion-plugin-compound-engineering/src/dashboard-interop.d.ts.
|
|
|
|
declare module "@fusion/dashboard/app/plugins/types" {
|
|
export interface PluginDashboardViewContext {
|
|
projectId?: string;
|
|
}
|
|
}
|
|
|
|
declare module "@fusion/dashboard/app/components/ViewHeader" {
|
|
import type { ComponentType, ReactNode } from "react";
|
|
import type { LucideProps } from "lucide-react";
|
|
|
|
export interface ViewHeaderProps {
|
|
icon: ComponentType<LucideProps>;
|
|
title: string;
|
|
actions?: ReactNode;
|
|
titleId?: string;
|
|
}
|
|
|
|
export function ViewHeader(props: ViewHeaderProps): ReactNode;
|
|
}
|