The onboarding wizard created OnboardedTargets that were invisible in the
dashboard, and triggering a scan failed with "Repository <id> not found":
`/targets/{id}/scan` went through `run_scan`, which consulted the global
`unified_pipeline` flag and fell to the legacy repository pipeline (reads
`repositories`, not `onboarded_targets`).
Agent
- Add `ComplianceAgent::run_target_scan`, always dispatching to the unified
`run_target` pipeline. The target-scan endpoint operates on
`onboarded_targets` by construction, so it must not depend on the
transition flag. `trigger_target_scan` now calls it.
- Default `UNIFIED_PIPELINE` to on (no legacy `repositories` data in prod);
set `UNIFIED_PIPELINE=0` to opt back to the legacy pipeline.
- Scheduler now scans `onboarded_targets` (via `run_target_scan`) instead of
the legacy `repositories` collection.
Dashboard
- New Targets page (`/targets`): lists onboarded targets with detected type,
artifacts, findings count, applicable-scans matrix (on expand), plus Run
scan and Delete. Sidebar "Repositories" nav becomes "Targets".
- Remove the "Add Repository" form from the Repositories page — onboarding
is the single entry point (private-repo auth + issue tracker move into the
onboarding flow, revisable on the target).
- Add `delete_target` server fn.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>