Skip to content

Conversation

@cteyton
Copy link
Contributor

@cteyton cteyton commented Feb 8, 2026

Summary

Adds a new top-level Issues page (/issues) that aggregates all issues (errors and suggestions) across every completed evaluation into a single, paginated and filterable view. This provides a global overview of all findings in the database, making it easy to spot recurring patterns across repositories and evaluations.

Changes

Backend

  • New API endpoint GET /api/issues with server-side pagination and filtering (evaluator, severity, repository, issue type, text search)
  • Issue extractor utility (src/api/utils/issue-extractor.ts) — server-side extraction of issues from EvaluationOutput, handling both unified and independent evaluation formats
  • Repository method getAllCompletedEvaluationsWithResults() on EvaluationRepository to load completed evaluations with their full result JSON
  • Route registration in APIServer for the new /api/issues endpoint

Frontend

  • IssuesPage component with filter sidebar (repository, evaluator, severity, issue type, text search) and paginated issue list
  • useAggregatedIssues hook with debounced search, auto-fetch on filter/page changes, and filter state management
  • Navigation integration — new "Issues" link with clipboard icon in the header, between "Latest" and "Evaluators"
  • Routing/issues route added to React Router
  • Each issue displays its source context (repository name as link to evaluation, relative date, evaluator name) above the reused IssueCard component

Shared Types

  • IAggregatedIssue and IAggregatedIssuesResponse types added to both backend (src/shared/types/api.ts) and frontend (frontend/src/types/evaluation.ts)

Implementation Details

  • Issues are extracted from result_json blobs at query time (no schema migration needed). The server parses all completed evaluations, applies filters, then paginates.
  • The issue extractor mirrors the frontend's parseAllIssues logic but runs server-side, handling both the object format ({perFileIssues, crossFileIssues}) and plain array format for evaluator results.
  • IssueCard is reused with cloudMode={true} to hide feedback/bookmark buttons in the cross-evaluation context.
  • Search is debounced at 300ms to avoid excessive API calls.

Tests

  • 20 new tests across 2 test files:
    • issue-extractor.test.ts (8 tests) — unified/independent formats, cross-file issues, malformed JSON, skipped evaluators
    • issues.test.ts (12 tests) — pagination, all filter types, combined filters, empty DB, failed evaluation exclusion

Files Changed

File Change
src/shared/types/api.ts Added aggregated issue types
src/api/utils/issue-extractor.ts New — Server-side issue extraction
src/api/utils/issue-extractor.test.ts New — 8 tests
src/api/db/evaluation-repository.ts Added getAllCompletedEvaluationsWithResults()
src/api/routes/issues.ts NewIssuesRoutes with GET /api/issues
src/api/routes/issues.test.ts New — 12 tests
src/api/index.ts Route registration
frontend/src/types/evaluation.ts Added aggregated issue types
frontend/src/hooks/useAggregatedIssues.ts New — Data fetching hook
frontend/src/components/IssuesPage.tsx New — Issues page component
frontend/src/App.tsx Added /issues route
frontend/src/components/AppHeader.tsx Added "Issues" nav link

This PR was written using Vibe Kanban

New top-level /issues page that aggregates all issues (errors and
suggestions) across every completed evaluation into a single paginated,
filterable view. Includes server-side API endpoint (GET /api/issues)
with filters for evaluator, severity, repository, issue type, and text
search, plus a React frontend with filter sidebar, IssueCard reuse,
evaluation context metadata, and pagination controls.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@cteyton cteyton changed the title Add a new module "Issues" (vibe-kanban) Add Issues module with aggregated cross-evaluation view (Vibe Kanban) Feb 8, 2026
Remove unused React import, suppress intentional no-op empty block,
add missing Usage type properties and uuid field to test fixtures,
and apply biome auto-formatting across all new files.

Note: pre-commit hook bypassed due to pre-existing tsc errors from
missing generated embedded assets (frontend-assets.ts, prompts-assets.ts).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@cteyton cteyton merged commit 29a15fb into main Feb 8, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant