feat(reports): split monthly reports into planned vs opportunistic work#586
Merged
feat(reports): split monthly reports into planned vs opportunistic work#586
Conversation
Add subsections to each Focus Area and Work Type category showing: - 📋 Planned Work: Items tracked on project board - ⚡ Opportunistic Work: Items fixed directly in repos without board tracking Changes: - Created monitored-repos.js config with list of tracked repositories - Added fetchClosedItemsFromRepo() to fetch closed issues/PRs from GitHub repos - Updated generate-report.js to fetch opportunistic work from all monitored repos - Modified markdown-generator.js to split each category into subsections - Updated summary to show breakdown: Total, Planned, Opportunistic Impact: - December 2025 report shows 8 planned + 182 opportunistic items - Makes reports more comprehensive by capturing ALL work done - Shows true project velocity beyond just board tracking - Helps identify popular areas for organic contributions Assisted-by: Claude Sonnet 4 via Cline
Fixes two issues with opportunistic work reporting: 1. **Deduplicate items across categories** - Items with multiple labels now appear only once (in first matching category) - Use Set to track displayed URLs across all sections - Pass displayedUrls set through category generation functions 2. **Contributors = PR authors only (people who wrote code)** - Previously counted all issue/PR closers (54 people) - Now only counts merged PR authors (22 people) - Better reflects actual code contributors vs issue reporters - Added __typename field to opportunistic items transformation Impact: - December report: 190 unique items (was showing duplicates before) - 22 contributors (down from 54) - more accurate representation - Each item appears exactly once in most relevant category Assisted-by: Claude Sonnet 4 via Cline
Filter out copilot-swe-agent bot from contributor lists in monthly reports. This ensures only human contributors are counted and displayed.
castrojo
added a commit
that referenced
this pull request
Jan 27, 2026
Replace project board API dependency with repository-based tracking: - Planned work: merged PRs from projectbluefin/common - Opportunistic work: merged PRs from other monitored repos - Filter out closed issues (only include merged PRs) This approach: - Works with standard GITHUB_TOKEN (no project:read scope needed) - Captures ~50% of planned work based on historical data - Removes dependency on organization-level Projects V2 API December 2025 report regenerated with new approach: - 49 planned PRs (was 8, excluded 9 issues) - 78 opportunistic PRs (was 179, excluded 55 issues) - All items now show merged contributions only Refs: #586 (planned vs opportunistic work split)
4 tasks
castrojo
added a commit
that referenced
this pull request
Jan 27, 2026
Regenerate January 2026 monthly report to include structural improvements: - Split categories into Planned vs Opportunistic subsections - Use projectbluefin/common for planned work tracking - Separate Focus Area (area/ labels) from Work by Type (kind/ labels) - Apply proper bot filtering and contributor tracking - Fix MDX curly brace escaping in PR titles to prevent build errors Script improvements: - Add --month=YYYY-MM CLI argument for report regeneration - Escape curly braces in PR/issue titles to prevent MDX/JSX parsing errors - Applied fix to all formatItemList functions in markdown generator Previous report was generated before PRs #586 and #587 were merged. This regeneration brings the January report up to date with current format. Fixes MDX build error: "boot is not defined" caused by unescaped curly braces in PR titles like "/{boot,tmp}" being interpreted as JSX. Refs: #586, #587
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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
Split monthly reports into 📋 Planned Work (tracked on project board) and ⚡ Opportunistic Work (fixed directly in monitored repos) to provide a complete picture of all project activity.
Motivation
Previously, monthly reports only showed items tracked on the project board (todo.projectbluefin.io). This missed the significant amount of work happening organically across repositories—quick fixes, drive-by improvements, and community contributions that go straight to PRs without formal tracking.
This change surfaces all work happening across the Bluefin ecosystem.
Changes
New Features
Files Modified
scripts/lib/monitored-repos.js- NEW: Configuration of 10 monitored reposscripts/lib/graphql-queries.js- Added repo-level closed items queryscripts/generate-report.js- Fetches and separates planned vs opportunisticscripts/lib/markdown-generator.js- Generates split subsections with deduplicationscripts/lib/contributor-tracker.js- Added copilot-swe-agent to bot filtersreports/2025-12-31-report.mdx- Regenerated with new formatMonitored Repositories
Impact
December 2025 Report
Report Structure
Each Focus Area and Work Type category now has:
Technical Decisions
Deduplication Logic
Contributors = PR Authors Only
Bot Filtering
GraphQL Item Type Detection
__typenamefield to opportunistic itemsTesting
✅ Build validated:
npm run buildcompletes successfully✅ Dev server tested: Report renders correctly at http://localhost:3000/reports
✅ December regenerated: 187 total items, 21 contributors, no duplicates
✅ Deduplication verified: Items appear only once across all categories
✅ Bot filtering verified: copilot-swe-agent excluded from human contributors
Preview
You can test this locally:
Known Limitations
These can be addressed in future PRs if needed.
Follow-up Tasks
Related
Ready for review! This is a significant enhancement to the monthly report system that surfaces all work happening across the Bluefin project, not just formally tracked items.