Skip to content

[High] Rebuild the Wave contributions dashboard on server-side data with a robust issue-file parser and caching #520

Description

@james2177

Category: Testing, Design System & Community Tooling

Description: /contributors fetches the GitHub contributors API from the browser (see the CSP issue) and src/lib/issuesParser.ts parses issues.md bullets with indexOf/split(":") heuristics. Rebuild the data pipeline: server-side fetch with ISR, a robust parser supporting both the tracker format and the rich issue-wave-*.md format, and richer dashboard views.

Problem Statement & Context: The parser breaks on titles containing parentheses, colons in contributor fields or multiple metadata blocks, silently defaulting to Medium/150 (which is also inconsistent with waves that only use High). Client-side GitHub calls hit rate limits and CSP. The dashboard is the transparency face of the Wave program and must be trustworthy.

Scope & Acceptance Criteria:

  • Parser rewritten with a small tokenizer/grammar; supports tracker bullets (- #123 Title (Complexity: High, Points: 200, Status: Open, Contributor: G…)) with parentheses in titles, and rich wave files (### Title: [High] … blocks with **Complexity:** High (200 points)), collecting category from ## headings; unknown/malformed entries are reported as parse warnings (shown to maintainers, not silently defaulted) and points derive from a single tier table.
  • Data loaded server-side at build/revalidate time (file read + GitHub issues/PR status when a token is available) with revalidate caching and stale fallback; page hydrates only interactive filters.
  • Dashboard enhancements: filter by wave/category/status, per-wave progress, contributor leaderboard with links, point totals reconciled with the source (test asserts sums), and a "data freshness" indicator.
  • Existing tests (contributors/page.test.tsx) updated; fixtures include the real issues.md and this document format.
  • Out of scope: awarding points or payouts.

Implementation Guidelines (Suggested Execution):

  1. Key Files/Modules: src/lib/issuesParser.ts, src/app/contributors/*, issues.md, issue-wave-9.md, new server data module, src/app/api/contributors/route.ts (from the CSP issue).
  2. Design/Architecture: Parser returns {issues, warnings}; single TIER_POINTS constant; server module loadWaveData() cached.
  3. Edge Cases/Constraints: files with CRLF, duplicate issue ids, contributor addresses that are not valid strkeys (validate/flag), very large files, missing sections.
  4. Testing: Grammar tests (≥ 40 cases including malformed lines), snapshot-free assertions on totals; ≥ 95% coverage of the parser.

Definition of "Done": Baseline DoD, plus screenshots of the enhanced dashboard and documented file-format spec in CONTRIBUTING.md.

Resources: src/lib/issuesParser.ts, issues.md, src/app/contributors/page.test.tsx.

Complexity: High (200 points)

Baseline Definition of Done (applies to every Wave issue)

Each issue's own "Definition of Done" is in addition to this baseline:

  • Code, tests and documentation are included in one PR that references the issue.
  • npm run lint, npm run typecheck, npm test, npm run check:i18n and npm run check:editorconfig pass locally and in CI. (If a command is broken by pre-existing repo debris, see the Repository Health & Build Integrity issues — do not silence the check; note the blocker in the PR.)
  • No new any, no // @ts-ignore / eslint-disable without a justification comment, and no new console.* (use secureLogger from src/lib/secureLogging.ts).
  • All new user-facing strings go through the i18n catalog (src/lib/i18n/messages/en.ts and es.ts).
  • New interactive UI is keyboard-operable, has visible focus, correct ARIA semantics, and works in both the dark and light palettes defined in src/app/globals.css.
  • UI changes include before/after screenshots (desktop and ~400px mobile). Behaviour changes include a short screen recording or test output.
  • Relevant docs under docs/ (and README.md if routes/scripts/env vars change) are updated.
  • The PR is reviewed and approved by a maintainer listed in .github/CODEOWNERS.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    complexity: highHigh complexity Drips Wave issue (200 points)

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions