Instructions for Claude Code to regenerate the sprint planning worksheets in this directory. This process is expected to run roughly monthly.
Prerequisites
ghCLI authenticated with access to IBM/mcp-context-forge- Python 3.11+ available
- Access to the full open issue list (currently ~661 issues)
Overview
The process produces four artifacts:
- sprint-plan.csv — Master issue inventory with sprint assignments and effort estimates
- epic-categories.csv — Epic inventory with child issue rollup
- label-fixes.csv — Label/title consistency audit
- milestone-sprint-matrix.csv — Milestone vs sprint cross-reference
Step-by-Step Process
Step 1: Fetch All Open Issues
gh issue list --repo IBM/mcp-context-forge --state open --limit 1000 \
--json number,title,labels,milestone \
> /tmp/all_issues.json
Important: The default limit is 30. Always set --limit high enough to capture all open issues. Verify the count matches what GitHub reports.
Step 2: Fetch Milestones
gh api repos/IBM/mcp-context-forge/milestones --paginate \
--jq '.[] | [.number, .title, .open_issues, .closed_issues] | @tsv'
Note: The != operator in jq requires escaping in zsh. Use Python to filter null milestones from JSON rather than jq select() with negation.
Step 3: Classify Each Issue
3a. Issue Type (from title tags)
| Title Pattern | Type |
|---|---|
[EPIC] in title OR epic label |
Epic |
[BUG] in title OR bug label |
Bug |
[FEATURE] or [ENHANCEMENT] in title |
Feature |
[PERFORMANCE] in title |
Performance |
[TESTING] or [CHORE][TESTING] in title |
Testing |
[CHORE] in title |
Chore |
[DOCS] or [README] or [QUICK-START] in title |
Docs |
| Default | Feature |
Priority: Epic > Bug > Performance > Testing > Chore > Docs > Feature. If multiple tags match, use the highest priority type.
3b. MoSCoW Priority (from labels)
Look for these exact label strings: MUST, SHOULD, COULD, WOULD.
If none found, mark as empty/unset.
3c. Epic Category
Assign each issue to exactly one of these 12 categories based on title tags and labels:
| # | Category | Matching signals |
|---|---|---|
| 1 | Security & Auth | [AUTH], [SECURITY], [SSO], [RBAC], [COMPLIANCE], security label |
| 2 | Admin UI & Frontend | [UI], [CATALOG], frontend label, ui label |
| 3 | Protocol & Transport | [PROTOCOL], [API], [A2A], [RUNTIME], [INTEGRATION], mcp-protocol label |
| 4 | Performance & Database | [PERFORMANCE], [DB], [DATABASE], [RUST], performance label, database label |
| 5 | Plugins & Extensions | [PLUGIN], [PLUGINS], plugins label |
| 6 | DevOps & Infrastructure | [HELM], [DOCKER], [CICD], [K8S], [DEPLOYMENT], devops label |
| 7 | Observability & Monitoring | [OBSERVABILITY], [LOGGING], observability label |
| 8 | SaaS Readiness | [COMPLIANCE] (when SaaS-specific), SaaS-related billing/metering |
| 9 | Client Integration | wxo label, client-* labels, ica label |
| 10 | Testing & QA | [TESTING], testing label, manual-testing label |
| 11 | Documentation & Samples | [DOCS], [README], [QUICK-START], documentation label |
| 12 | AI & Discovery | [AI], [SEARCH], AI/ML/semantic keywords |
Priority order when multiple match: Client Integration (9) > Security (1) > Protocol (3) > Performance (4) > Plugins (5) > UI (2) > Observability (7) > SaaS (8) > Testing (10) > DevOps (6) > Docs (11) > AI (12).
Step 4: Sprint Priority Assignment
| Priority | Criteria |
|---|---|
| P0 | Has wxo label, or any client-* label, or ica label |
| P1 | SaaS enablement: security hardening, compliance, auth, billing, multi-tenancy |
| P2 | A2A/LLM gateway: protocol compliance, transport, A2A features |
| P3 | Platform quality: performance, database, observability, bug fixes |
| P4 | Developer experience: DevOps, testing infrastructure, documentation, CI/CD |
| P5 | Nice-to-have: COULD/WOULD items without higher priority signals |
Step 5: Sprint Assignment
| Sprint | Rule |
|---|---|
| Sprint 1 | P0 + MUST |
| Sprint 2 | P0 remaining + P1 MUST |
| Sprint 3 | P1 SHOULD + P2 MUST (theme: Protocol & Compliance) |
| Sprint 4 | P2 SHOULD + P3 MUST (theme: Performance, DB, Testing & UI Infrastructure) |
| Sprint 5A | P3 SHOULD bugs + performance items |
| Sprint 5B | P3 SHOULD testing items |
| Sprint 5C | P3 SHOULD features + epics (theme: Security Hardening) |
| Sprint 6 | P4 SHOULD (theme: DevOps, Docs & Polish) |
| Backlog | Everything else (COULD, WOULD, P5) |
Target capacity per sprint: ~200-270 SP. If any sprint exceeds ~300 SP, rebalance by:
- Moving items to the next sprint that fits thematically
- Pushing aspirational items (AI & Discovery, speculative epics) to Backlog
Step 6: Effort Estimation
Apply effort estimates to sprint-assigned issues only (not Backlog).
Story Point Scale (Fibonacci)
| SP | Person-Days | Typical Use |
|---|---|---|
| 1 | 0.5 | Trivial config change, typo fix |
| 2 | 1 | Small bug fix, minor feature, single-file change |
| 3 | 1.5-2 | Standard feature, moderate bug, 2-3 file change |
| 5 | 3-4 | Multi-file feature, complex bug, new endpoint |
| 8 | 5-7 | Large feature, significant refactor, new service |
| 13 | 8-12 | Epic-sized, multi-component, new subsystem |
| 21 | 13-20 | Major epic, cross-cutting architectural change |
Estimation Heuristics
- Epics: 13 SP (Medium/Large) or 21 SP (XL). Always Low confidence.
- Bugs: 1-2 SP (simple), 3-5 SP (complex/multi-file), 8 SP (architectural).
- Features: 3 SP (standard), 5 SP (multi-component), 8 SP (large/new service).
- Testing manual test plans: 3 SP each (write + first-pass execution).
- Performance: 2-3 SP (config/index), 5 SP (refactor), 8+ SP (architectural).
- Chores: 2 SP (simple), 3-5 SP (moderate), 8 SP (large restructure).
- Docs: 2 SP (standard), 5-8 SP (comprehensive framework adoption).
Confidence levels:
- High: Well-scoped, clear requirements, similar past work.
- Medium: Reasonable scope but some unknowns.
- Low: Epics, architectural changes, first-of-kind work.
Step 7: Epic-to-Issue Mapping
For non-epic issues, identify a parent epic by matching:
- Explicit title/label overlap: Issue title tags match epic title tags (e.g.,
[AUTH]issue under[EPIC][AUTH]). - Functional domain: Issue addresses a story within the epic's scope.
- Label intersection: Shared labels like
security,plugins,ui.
Record the parent epic number and a brief justification. These mappings are proposals — always get approval before creating GitHub sub-issue links.
Step 8: Label Consistency Audit
Check every issue for mismatches between title tags and labels:
| Title Tag | Expected Label |
|---|---|
[EPIC] |
epic |
[BUG] |
bug |
[FEATURE] or [ENHANCEMENT] |
enhancement |
[CHORE] |
chore |
[UI] |
ui |
[SECURITY] or [AUTH] or [COMPLIANCE] |
security |
[PLUGIN] or [PLUGINS] |
plugins |
[PERFORMANCE] |
performance |
[DB] or [DATABASE] |
database |
[OBSERVABILITY] |
observability |
[PROTOCOL] |
mcp-protocol |
Also flag the reverse: labels present without matching title tags. And flag issues with no labels at all.
Step 9: Milestone-Sprint Matrix
Cross-reference GitHub milestone assignments against sprint assignments. Produce two matrices:
- Story Points matrix: Milestone (rows) x Sprint (columns), cell = total SP.
- Issue Count matrix: Same structure, cell = number of issues.
Include a (No milestone) row and TOTAL row/column.
Step 10: Generate README.md
Update the README.md in this directory with:
- File listing and descriptions
- Column definitions for each CSV
- Sprint summary table with themes and SP totals
- Key observations for each worksheet
- Milestone summary
Known Pitfalls
gh issue listdefault limit is 30. Always use--limit 1000or higher.- jq
!=requires escaping in zsh. Use Python for null filtering instead ofselect(.field != null). - Large JSON output may exceed tool limits. Use TSV or process with Python scripts instead of trying to read raw JSON.
- Backlog items should not have effort estimates. Clear SP/Person-Days/Confidence/Notes when moving items to Backlog.
- Epic detection is dual-source. Check both
[EPIC]in title ANDepiclabel — some epics only have one or the other (which is itself a label-fix finding). - Sprint 5 splitting. If any sprint exceeds ~300 SP after initial assignment, split by type: bugs+performance (A), testing (B), features+epics (C).
- Thematic coherence matters. When rebalancing, keep sprint themes intact rather than just leveling SP counts. Ask the user for theme preferences.
Verification Checklist
After regeneration, verify:
- Total issue count matches
gh issue list --state opencount - All sprint SP totals are in the 150-280 SP range (except Sprint 1 which may be smaller)
- No Backlog items have story point values
- Every epic appears in epic-categories.csv
- Milestone matrix row totals match milestone open issue counts
- Label fixes CSV has no duplicate rows (same issue + same fix)
- README.md sprint summary table matches actual CSV data