Skip to content

[Bug] Dashboard "Issues Opened / Resolved" trend graph shows incorrect data #1000

@ventura-oss

Description

@ventura-oss

Description

The "Active Network" trend chart on the Dashboard page shows inaccurate data for the "Issues Opened" and "Issues Resolved" series. The current implementation uses the /issues API endpoint (IssueBounty[]), which only returns bounty-backed issues (33 total, 28 completed). This is a tiny fraction of the actual issue activity tracked across the network.

The miner aggregate data (MinerEvaluation) correctly shows 1,030 total issues (239 solved, 595 open, 196 closed) across 74 miners — but these are all-time totals without timestamps, so they cannot be used for time-series bucketing in the trend graph.

Current Behavior

  • Issues Opened shows 33 (all-time) — only bounty-backed issues
  • Issues Resolved shows 28 (all-time) — only completed bounties
  • The Issue Discoveries overview cards correctly show 1,030 total issues (from miner aggregates)
  • This creates a large discrepancy between the overview cards and the trend graph

Expected Behavior

The trend graph's issue series should reflect all discovered issues across the network, not just bounty-backed ones.

Root Cause

Data Source Count Has Timestamps Scope
/issues API (bounties) 33 total (28 resolved) createdAt, completedAt Bounty-backed only
MinerEvaluation aggregates 1,030 total (239 solved) ❌ All-time totals only All mirror issues
Mirror per-miner API (/miners/{id}/issues) ~1,030 individual issues created_at, closed_at Requires fan-out (74+ calls)
PR issueMultiplier field Always null in /prs N/A Never populated globally
PR labelMultiplier field ALL PRs match (>0) N/A Scoring bonus, not issue linkage

The trend graph (buildDashboardTrendData in dashboardData.ts) currently uses IssueBounty[] from the /issues endpoint for time-series bucketing, which only captures bounty-backed issues.

Possible Solutions

  1. New backend endpoint — Expose a global issue discovery feed (e.g. /dash/issues) that aggregates timestamped issues from all miners without requiring per-miner fan-out
  2. Mirror fan-out with caching — Aggregate issues client-side from /miners/{id}/issues for all active miners, with caching to reduce API load
  3. Populate issueMultiplier on /prs — If the global PR endpoint included issueMultiplier values, PRs could serve as a proxy for issue activity

Affected Files

  • src/pages/dashboard/dashboardData.tsbuildDashboardTrendData(), buildDashboardKpis()
  • src/pages/dashboard/useDashboardData.ts — data composition hook
  • src/api/IssuesApi.ts/issues endpoint (bounty-only)

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions