Add Issues module with aggregated cross-evaluation view (Vibe Kanban) #3
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
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
GET /api/issueswith server-side pagination and filtering (evaluator, severity, repository, issue type, text search)src/api/utils/issue-extractor.ts) — server-side extraction of issues fromEvaluationOutput, handling both unified and independent evaluation formatsgetAllCompletedEvaluationsWithResults()onEvaluationRepositoryto load completed evaluations with their full result JSONAPIServerfor the new/api/issuesendpointFrontend
/issuesroute added to React RouterIssueCardcomponentShared Types
IAggregatedIssueandIAggregatedIssuesResponsetypes added to both backend (src/shared/types/api.ts) and frontend (frontend/src/types/evaluation.ts)Implementation Details
result_jsonblobs at query time (no schema migration needed). The server parses all completed evaluations, applies filters, then paginates.parseAllIssueslogic but runs server-side, handling both the object format ({perFileIssues, crossFileIssues}) and plain array format for evaluator results.IssueCardis reused withcloudMode={true}to hide feedback/bookmark buttons in the cross-evaluation context.Tests
issue-extractor.test.ts(8 tests) — unified/independent formats, cross-file issues, malformed JSON, skipped evaluatorsissues.test.ts(12 tests) — pagination, all filter types, combined filters, empty DB, failed evaluation exclusionFiles Changed
src/shared/types/api.tssrc/api/utils/issue-extractor.tssrc/api/utils/issue-extractor.test.tssrc/api/db/evaluation-repository.tsgetAllCompletedEvaluationsWithResults()src/api/routes/issues.tsIssuesRouteswithGET /api/issuessrc/api/routes/issues.test.tssrc/api/index.tsfrontend/src/types/evaluation.tsfrontend/src/hooks/useAggregatedIssues.tsfrontend/src/components/IssuesPage.tsxfrontend/src/App.tsx/issuesroutefrontend/src/components/AppHeader.tsxThis PR was written using Vibe Kanban