From 16acc0609e857a8a2fc1199e7a080bf38f6504aa Mon Sep 17 00:00:00 2001 From: lmiranda Date: Sun, 1 Feb 2026 12:38:02 -0500 Subject: [PATCH] feat(projman): add RFC system for feature tracking MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Implement wiki-based Request for Comments system for capturing, reviewing, and tracking feature ideas through their lifecycle. New commands: - /rfc-create: Create RFC from conversation or clarified spec - /rfc-list: List RFCs grouped by status - /rfc-review: Submit Draft RFC for review - /rfc-approve: Approve RFC for sprint planning - /rfc-reject: Reject RFC with documented reason RFC lifecycle: Draft → Review → Approved → Implementing → Implemented Integration: - /sprint-plan detects approved RFCs and offers selection - /sprint-close updates RFC status on completion - clarity-assist suggests /rfc-create for feature ideas New MCP tool: allocate_rfc_number Co-Authored-By: Claude Opus 4.5 --- CHANGELOG.md | 34 ++ CLAUDE.md | 16 +- docs/COMMANDS-CHEATSHEET.md | 21 + mcp-servers/gitea/mcp_server/server.py | 17 + mcp-servers/gitea/mcp_server/tools/wiki.py | 38 ++ plugins/clarity-assist/commands/clarify.md | 24 ++ .../clarity-assist/hooks/vagueness-check.sh | 42 +- plugins/projman/claude-md-integration.md | 9 +- plugins/projman/commands/rfc-approve.md | 83 ++++ plugins/projman/commands/rfc-create.md | 84 ++++ plugins/projman/commands/rfc-list.md | 98 +++++ plugins/projman/commands/rfc-reject.md | 90 +++++ plugins/projman/commands/rfc-review.md | 81 ++++ plugins/projman/commands/sprint-close.md | 42 +- plugins/projman/skills/input-detection.md | 46 ++- plugins/projman/skills/planning-workflow.md | 41 +- plugins/projman/skills/rfc-templates.md | 380 ++++++++++++++++++ plugins/projman/skills/rfc-workflow.md | 308 ++++++++++++++ 18 files changed, 1441 insertions(+), 13 deletions(-) create mode 100644 plugins/projman/commands/rfc-approve.md create mode 100644 plugins/projman/commands/rfc-create.md create mode 100644 plugins/projman/commands/rfc-list.md create mode 100644 plugins/projman/commands/rfc-reject.md create mode 100644 plugins/projman/commands/rfc-review.md create mode 100644 plugins/projman/skills/rfc-templates.md create mode 100644 plugins/projman/skills/rfc-workflow.md diff --git a/CHANGELOG.md b/CHANGELOG.md index f98f75d..75ed4af 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,40 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). ## [Unreleased] +### Added + +#### RFC System for Feature Tracking +Wiki-based Request for Comments (RFC) system for capturing, reviewing, and tracking feature ideas through their lifecycle. + +**New Commands (projman):** +- `/rfc-create` - Create new RFC from conversation or clarified specification +- `/rfc-list` - List all RFCs grouped by status (Draft, Review, Approved, Implementing, Implemented, Rejected, Stale) +- `/rfc-review` - Submit Draft RFC for maintainer review +- `/rfc-approve` - Approve RFC, making it available for sprint planning +- `/rfc-reject` - Reject RFC with documented reason + +**RFC Lifecycle:** +- Draft → Review → Approved → Implementing → Implemented +- Terminal states: Rejected, Superseded +- Stale: Drafts with no activity >90 days + +**Sprint Integration:** +- `/sprint-plan` now detects approved RFCs and offers selection +- `/sprint-close` updates RFC status to Implemented on completion +- RFC-Index wiki page auto-maintained with status sections + +**Clarity-Assist Integration:** +- Vagueness hook now detects feature request patterns +- Suggests `/rfc-create` for feature ideas +- `/clarify` offers RFC creation after delivering clarified spec + +**New MCP Tool:** +- `allocate_rfc_number` - Allocates next sequential RFC number + +**New Skills:** +- `skills/rfc-workflow.md` - RFC lifecycle and state transitions +- `skills/rfc-templates.md` - RFC page template specifications + ### Changed #### Sprint 8: Hook Efficiency Quick Wins diff --git a/CLAUDE.md b/CLAUDE.md index 112f576..b74eb21 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -279,7 +279,7 @@ leo-claude-mktplace/ | Labels | `get_labels`, `suggest_labels`, `create_label`, `create_label_smart` | | Milestones | `list_milestones`, `get_milestone`, `create_milestone`, `update_milestone`, `delete_milestone` | | Dependencies | `list_issue_dependencies`, `create_issue_dependency`, `remove_issue_dependency`, `get_execution_order` | -| Wiki | `list_wiki_pages`, `get_wiki_page`, `create_wiki_page`, `update_wiki_page`, `create_lesson`, `search_lessons` | +| Wiki | `list_wiki_pages`, `get_wiki_page`, `create_wiki_page`, `update_wiki_page`, `create_lesson`, `search_lessons`, `allocate_rfc_number` | | **Pull Requests** | `list_pull_requests`, `get_pull_request`, `get_pr_diff`, `get_pr_comments`, `create_pr_review`, `add_pr_comment` | | Validation | `validate_repo_org`, `get_branch_protection` | @@ -300,6 +300,20 @@ leo-claude-mktplace/ | `staging` | Staging | Read-only code, can create issues | | `main`, `master` | Production | Read-only, emergency only | +### RFC System + +Wiki-based Request for Comments system for tracking feature ideas from proposal through implementation. + +**RFC Wiki Naming:** +- RFC pages: `RFC-NNNN: Short Title` (4-digit zero-padded) +- Index page: `RFC-Index` (auto-maintained) + +**Lifecycle:** Draft → Review → Approved → Implementing → Implemented + +**Integration with Sprint Planning:** +- `/sprint-plan` detects approved RFCs and offers selection +- `/sprint-close` updates RFC status on completion + ## Label Taxonomy 43 labels total: 27 organization + 16 repository diff --git a/docs/COMMANDS-CHEATSHEET.md b/docs/COMMANDS-CHEATSHEET.md index bfe56ee..8f2b09e 100644 --- a/docs/COMMANDS-CHEATSHEET.md +++ b/docs/COMMANDS-CHEATSHEET.md @@ -21,6 +21,11 @@ Quick reference for all commands in the Leo Claude Marketplace. | **projman** | `/suggest-version` | | X | Analyze CHANGELOG and recommend semantic version bump | | **projman** | `/proposal-status` | | X | View proposal and implementation hierarchy with status | | **projman** | `/clear-cache` | | X | Clear plugin cache to force fresh configuration reload | +| **projman** | `/rfc-create` | | X | Create new RFC from conversation or clarified spec | +| **projman** | `/rfc-list` | | X | List all RFCs grouped by status | +| **projman** | `/rfc-review` | | X | Submit Draft RFC for review | +| **projman** | `/rfc-approve` | | X | Approve RFC in Review status for sprint planning | +| **projman** | `/rfc-reject` | | X | Reject RFC with documented reason | | **git-flow** | `/commit` | | X | Create commit with auto-generated conventional message | | **git-flow** | `/commit-push` | | X | Commit and push to remote in one operation | | **git-flow** | `/commit-merge` | | X | Commit current changes, then merge into target branch | @@ -129,6 +134,22 @@ Quick reference for all commands in the Leo Claude Marketplace. ## Dev Workflow Examples +### Example 0: RFC-Driven Feature Development + +Full workflow from idea to implementation using RFCs: + +``` +1. /clarify # Clarify the feature idea +2. /rfc-create # Create RFC from clarified spec + ... refine RFC content ... +3. /rfc-review 0001 # Submit RFC for review + ... review discussion ... +4. /rfc-approve 0001 # Approve RFC for implementation +5. /sprint-plan # Select approved RFC for sprint + ... implement feature ... +6. /sprint-close # Complete sprint, RFC marked Implemented +``` + ### Example 1: Starting a New Feature Sprint A typical workflow for planning and executing a feature sprint: diff --git a/mcp-servers/gitea/mcp_server/server.py b/mcp-servers/gitea/mcp_server/server.py index 70d06a4..7451605 100644 --- a/mcp-servers/gitea/mcp_server/server.py +++ b/mcp-servers/gitea/mcp_server/server.py @@ -435,6 +435,19 @@ class GiteaMCPServer: } } ), + Tool( + name="allocate_rfc_number", + description="Allocate the next available RFC number by scanning existing RFC wiki pages", + inputSchema={ + "type": "object", + "properties": { + "repo": { + "type": "string", + "description": "Repository name (owner/repo format)" + } + } + } + ), # Milestone Tools Tool( name="list_milestones", @@ -980,6 +993,10 @@ class GiteaMCPServer: limit=arguments.get('limit', 20), repo=arguments.get('repo') ) + elif name == "allocate_rfc_number": + result = await self.wiki_tools.allocate_rfc_number( + repo=arguments.get('repo') + ) # Milestone tools elif name == "list_milestones": result = await self.milestone_tools.list_milestones(**arguments) diff --git a/mcp-servers/gitea/mcp_server/tools/wiki.py b/mcp-servers/gitea/mcp_server/tools/wiki.py index 25e3de6..36f389e 100644 --- a/mcp-servers/gitea/mcp_server/tools/wiki.py +++ b/mcp-servers/gitea/mcp_server/tools/wiki.py @@ -4,9 +4,11 @@ Wiki management tools for MCP server. Provides async wrappers for wiki operations to support lessons learned: - Page CRUD operations - Lessons learned creation and search +- RFC number allocation """ import asyncio import logging +import re from typing import List, Dict, Optional logging.basicConfig(level=logging.INFO) @@ -147,3 +149,39 @@ class WikiTools: lambda: self.gitea.search_lessons(query, tags, repo) ) return results[:limit] + + async def allocate_rfc_number(self, repo: Optional[str] = None) -> Dict: + """ + Allocate the next available RFC number. + + Scans existing wiki pages for RFC-NNNN pattern and returns + the next sequential number. + + Args: + repo: Repository in owner/repo format + + Returns: + Dict with 'next_number' (int) and 'formatted' (str like 'RFC-0001') + """ + pages = await self.list_wiki_pages(repo) + + # Extract RFC numbers from page titles + rfc_numbers = [] + rfc_pattern = re.compile(r'^RFC-(\d{4})') + + for page in pages: + title = page.get('title', '') + match = rfc_pattern.match(title) + if match: + rfc_numbers.append(int(match.group(1))) + + # Calculate next number + if rfc_numbers: + next_num = max(rfc_numbers) + 1 + else: + next_num = 1 + + return { + 'next_number': next_num, + 'formatted': f'RFC-{next_num:04d}' + } diff --git a/plugins/clarity-assist/commands/clarify.md b/plugins/clarity-assist/commands/clarify.md index 7713088..04b5950 100644 --- a/plugins/clarity-assist/commands/clarify.md +++ b/plugins/clarity-assist/commands/clarify.md @@ -34,7 +34,31 @@ Load these skills before proceeding: 2. **Diagnose** - Identify gaps and conflicts 3. **Develop** - Gather clarifications via structured questions 4. **Deliver** - Present refined specification +5. **Offer RFC Creation** - For feature work, offer to save as RFC ## Output Format Use the Deliver phase template from `skills/4d-methodology.md` to present the clarified specification for user confirmation. + +## RFC Creation Offer (Step 5) + +After presenting the clarified specification, if the request appears to be a feature or enhancement: + +``` +--- + +Would you like to save this as an RFC for formal tracking? + +An RFC (Request for Comments) provides: +- Structured documentation of the proposal +- Review workflow before implementation +- Integration with sprint planning + +[1] Yes, create RFC from this specification +[2] No, proceed with implementation directly +``` + +If user selects [1]: +- Pass clarified specification to `/rfc-create` +- The Summary, Motivation, and Design sections will be populated from the clarified spec +- User can then refine the RFC and submit for review diff --git a/plugins/clarity-assist/hooks/vagueness-check.sh b/plugins/clarity-assist/hooks/vagueness-check.sh index 4efaac1..8fe017a 100755 --- a/plugins/clarity-assist/hooks/vagueness-check.sh +++ b/plugins/clarity-assist/hooks/vagueness-check.sh @@ -197,6 +197,38 @@ if (( $(echo "$SCORE > 1.0" | bc -l) )); then SCORE="1.0" fi +# ============================================================================ +# Feature Request Detection (for RFC suggestion) +# ============================================================================ + +FEATURE_REQUEST=false + +# Feature request phrases +FEATURE_PHRASES=( + "we should" + "it would be nice" + "feature request" + "idea:" + "suggestion:" + "what if we" + "wouldn't it be great" + "i think we need" + "we need to add" + "we could add" + "how about adding" + "can we add" + "new feature" + "enhancement" + "proposal" +) + +for phrase in "${FEATURE_PHRASES[@]}"; do + if [[ "$PROMPT_LOWER" == *"$phrase"* ]]; then + FEATURE_REQUEST=true + break + fi +done + # ============================================================================ # Output suggestion if score exceeds threshold # ============================================================================ @@ -208,8 +240,16 @@ if (( $(echo "$SCORE >= $THRESHOLD" | bc -l) )); then # Gentle, non-blocking suggestion echo "$PREFIX Your prompt could benefit from more clarity." - echo "$PREFIX Consider running /clarity-assist to refine your request." + echo "$PREFIX Consider running /clarify to refine your request." echo "$PREFIX (Vagueness score: ${SCORE_PCT}% - this is a suggestion, not a block)" + + # Additional RFC suggestion if feature request detected + if [[ "$FEATURE_REQUEST" == true ]]; then + echo "$PREFIX This looks like a feature idea. Consider /rfc-create to track it formally." + fi +elif [[ "$FEATURE_REQUEST" == true ]]; then + # Feature request detected but not vague - still suggest RFC + echo "$PREFIX This looks like a feature idea. Consider /rfc-create to track it formally." fi # Always exit 0 - this hook is non-blocking diff --git a/plugins/projman/claude-md-integration.md b/plugins/projman/claude-md-integration.md index 1c2d81a..048fb7f 100644 --- a/plugins/projman/claude-md-integration.md +++ b/plugins/projman/claude-md-integration.md @@ -12,6 +12,11 @@ This project uses the **projman** plugin for sprint planning and project managem | `/sprint-close` | Complete sprint and capture lessons learned to Gitea Wiki | | `/labels-sync` | Synchronize label taxonomy from Gitea | | `/initial-setup` | Run initial setup for projman plugin | +| `/rfc-create` | Create new RFC from conversation or clarified spec | +| `/rfc-list` | List all RFCs grouped by status | +| `/rfc-review` | Submit Draft RFC for review | +| `/rfc-approve` | Approve RFC for sprint planning | +| `/rfc-reject` | Reject RFC with documented reason | ### MCP Tools Available @@ -40,12 +45,14 @@ The following Gitea MCP tools are available for issue and project management: - `create_issue_dependency` - Create dependency between issues - `get_execution_order` - Get parallel execution batches -**Wiki (Lessons Learned):** +**Wiki (Lessons Learned & RFCs):** - `list_wiki_pages` - List wiki pages - `get_wiki_page` - Fetch specific page content - `create_wiki_page` - Create new wiki page +- `update_wiki_page` - Update existing wiki page - `create_lesson` - Create lessons learned document - `search_lessons` - Search past lessons by tags +- `allocate_rfc_number` - Get next available RFC number ### Usage Guidelines diff --git a/plugins/projman/commands/rfc-approve.md b/plugins/projman/commands/rfc-approve.md new file mode 100644 index 0000000..409c35a --- /dev/null +++ b/plugins/projman/commands/rfc-approve.md @@ -0,0 +1,83 @@ +--- +description: Approve an RFC in Review status, making it ready for sprint planning +agent: planner +--- + +# Approve RFC + +## Skills Required + +- skills/mcp-tools-reference.md +- skills/rfc-workflow.md +- skills/rfc-templates.md + +## Purpose + +Transition an RFC from Review to Approved status, indicating the proposal has been accepted and is ready for implementation in an upcoming sprint. + +## Invocation + +Run `/rfc-approve ` where number is the RFC number: +- `/rfc-approve 0003` +- `/rfc-approve 3` (leading zeros optional) + +## Workflow + +1. **Validate RFC Number** + - Normalize input (add leading zeros if needed) + - Fetch RFC page: `RFC-NNNN: *` + +2. **Check Current Status** + - Parse frontmatter to get current status + - **STOP** if status is not "Review" + - Error: "RFC-NNNN is in [status] status. Only RFCs in Review can be approved." + +3. **Gather Decision Details** + - Prompt: "Please provide the approval rationale (why is this RFC being approved?):" + - This becomes the Decision section content + +4. **Update RFC Page** + - Change status: Review → Approved + - Update "Updated" date + - Add/update Decision section: + ```markdown + ## Decision + + **Decision:** Approved + **Date:** YYYY-MM-DD + **Decided By:** @[current user or maintainer] + + **Rationale:** + + [User-provided rationale] + ``` + +5. **Update RFC-Index** + - Remove entry from "## In Review" section + - Add entry to "## Approved" section + +6. **Confirm Approval** + - Display updated status + - Note that RFC is now available for `/sprint-plan` + +## Visual Output + +``` ++----------------------------------------------------------------------+ +| PROJMAN - RFC Approval | ++----------------------------------------------------------------------+ + +RFC-0003: Feature X has been approved! + +Status: Review → Approved +Decision recorded in RFC page. + +This RFC is now available for sprint planning. +Use /sprint-plan and select this RFC when prompted. +``` + +## Validation Errors + +- **RFC not found**: "RFC-NNNN not found. Check the number with /rfc-list" +- **Wrong status**: "RFC-NNNN is [status]. Only RFCs in Review can be approved." +- **No rationale provided**: "Approval rationale is required. Please explain why this RFC is being approved." diff --git a/plugins/projman/commands/rfc-create.md b/plugins/projman/commands/rfc-create.md new file mode 100644 index 0000000..4545e8e --- /dev/null +++ b/plugins/projman/commands/rfc-create.md @@ -0,0 +1,84 @@ +--- +description: Create a new RFC (Request for Comments) from conversation or clarified specification +agent: planner +--- + +# Create RFC + +## Skills Required + +- skills/mcp-tools-reference.md +- skills/rfc-workflow.md +- skills/rfc-templates.md + +## Purpose + +Create a new RFC wiki page to track a feature idea, proposal, or enhancement through the review lifecycle. RFCs provide a structured way to document, discuss, and approve changes before implementation. + +## Invocation + +Run `/rfc-create` with optional context: +- After `/clarify` to convert clarified spec to RFC +- With description of feature idea +- From conversation context + +## Workflow + +1. **Gather Input** + - Check if conversation has clarified specification (from `/clarify`) + - If no context: prompt for Summary, Motivation, and initial Design + - Extract author from context or prompt + +2. **Allocate RFC Number** + - Call `allocate_rfc_number` MCP tool + - Get next sequential 4-digit number + +3. **Create RFC Page** + - Use template from `skills/rfc-templates.md` + - Fill in frontmatter (number, title, status=Draft, author, dates) + - Populate Summary, Motivation, Detailed Design sections + - Create wiki page: `RFC-NNNN: Title` + +4. **Update RFC-Index** + - Fetch RFC-Index (create if doesn't exist) + - Add entry to "## Draft" section + - Update wiki page + +5. **Confirm Creation** + - Display RFC number and wiki link + - Remind about next steps (refine → `/rfc-review`) + +## Visual Output + +``` ++----------------------------------------------------------------------+ +| PROJMAN - RFC Creation | ++----------------------------------------------------------------------+ + +RFC-0001: [Title] created successfully! + +Status: Draft +Wiki: [link to RFC page] + +Next steps: +- Refine the RFC with additional details +- When ready: /rfc-review 0001 to submit for review +``` + +## Input Mapping + +When converting from `/clarify` output: + +| Clarify Section | RFC Section | +|-----------------|-------------| +| Problem/Context | Motivation > Problem Statement | +| Goals/Outcomes | Motivation > Goals | +| Scope/Requirements | Detailed Design > Overview | +| Constraints | Non-Goals or Detailed Design | +| Success Criteria | Testing Strategy | + +## Edge Cases + +- **No RFC-Index exists**: Create it with empty sections +- **User provides minimal input**: Create minimal RFC template, note sections to fill +- **Duplicate title**: Proceed (RFC numbers are unique, titles don't need to be) diff --git a/plugins/projman/commands/rfc-list.md b/plugins/projman/commands/rfc-list.md new file mode 100644 index 0000000..10a57c5 --- /dev/null +++ b/plugins/projman/commands/rfc-list.md @@ -0,0 +1,98 @@ +--- +description: List all RFCs grouped by status from RFC-Index wiki page +agent: planner +--- + +# List RFCs + +## Skills Required + +- skills/mcp-tools-reference.md +- skills/rfc-workflow.md + +## Purpose + +Display all RFCs grouped by their lifecycle status. Highlights "Approved" RFCs that are ready for sprint planning. + +## Invocation + +Run `/rfc-list` to see all RFCs. + +Optional filters: +- `/rfc-list approved` - Show only approved RFCs +- `/rfc-list draft` - Show only draft RFCs +- `/rfc-list review` - Show only RFCs in review + +## Workflow + +1. **Fetch RFC-Index** + - Call `get_wiki_page` for "RFC-Index" + - Handle missing index gracefully + +2. **Parse Sections** + - Extract tables from each status section + - Parse RFC number, title, and metadata from each row + +3. **Display Results** + - Group by status + - Highlight Approved section (ready for planning) + - Show counts per status + +## Visual Output + +``` ++----------------------------------------------------------------------+ +| PROJMAN - RFC Index | ++----------------------------------------------------------------------+ + +## Approved (Ready for Sprint Planning) + +| RFC | Title | Champion | Created | +|-----|-------|----------|---------| +| RFC-0003 | Feature X | @user | 2026-01-15 | +| RFC-0007 | Enhancement Y | @user | 2026-01-28 | + +## In Review (2) + +| RFC | Title | Author | Created | +|-----|-------|--------|---------| +| RFC-0004 | Feature Y | @user | 2026-01-20 | +| RFC-0008 | Idea Z | @user | 2026-01-29 | + +## Draft (3) + +| RFC | Title | Author | Created | +|-----|-------|--------|---------| +| RFC-0005 | Concept A | @user | 2026-01-22 | +| RFC-0009 | Proposal B | @user | 2026-01-30 | +| RFC-0010 | Sketch C | @user | 2026-01-30 | + +## Implementing (1) + +| RFC | Title | Sprint | Started | +|-----|-------|--------|---------| +| RFC-0002 | Feature W | Sprint 18 | 2026-01-22 | + +## Implemented (1) + +| RFC | Title | Completed | Release | +|-----|-------|-----------|---------| +| RFC-0001 | Initial Feature | 2026-01-10 | v5.0.0 | + +## Rejected (0) + +(none) + +## Stale (0) + +(none) + +--- +Total: 10 RFCs | 2 Approved | 1 Implementing +``` + +## Edge Cases + +- **No RFC-Index**: Display message "No RFCs yet. Create one with /rfc-create" +- **Empty sections**: Show "(none)" for empty status categories +- **Filter applied**: Only show matching section, still show total counts diff --git a/plugins/projman/commands/rfc-reject.md b/plugins/projman/commands/rfc-reject.md new file mode 100644 index 0000000..9cee144 --- /dev/null +++ b/plugins/projman/commands/rfc-reject.md @@ -0,0 +1,90 @@ +--- +description: Reject an RFC with documented reason, marking it as declined +agent: planner +--- + +# Reject RFC + +## Skills Required + +- skills/mcp-tools-reference.md +- skills/rfc-workflow.md +- skills/rfc-templates.md + +## Purpose + +Transition an RFC to Rejected status with a documented reason. Rejected RFCs remain in the wiki for historical reference but are marked as declined. + +## Invocation + +Run `/rfc-reject ` where number is the RFC number: +- `/rfc-reject 0006` +- `/rfc-reject 6` (leading zeros optional) + +## Workflow + +1. **Validate RFC Number** + - Normalize input (add leading zeros if needed) + - Fetch RFC page: `RFC-NNNN: *` + +2. **Check Current Status** + - Parse frontmatter to get current status + - **STOP** if status is not "Draft" or "Review" + - Error: "RFC-NNNN is in [status] status. Only Draft or Review RFCs can be rejected." + +3. **Require Rejection Reason** + - Prompt: "Please provide the rejection reason (required):" + - **STOP** if no reason provided + - Error: "Rejection reason is required to document why this RFC was declined." + +4. **Update RFC Page** + - Change status: [current] → Rejected + - Update "Updated" date + - Add/update Decision section: + ```markdown + ## Decision + + **Decision:** Rejected + **Date:** YYYY-MM-DD + **Decided By:** @[current user or maintainer] + + **Reason:** + + [User-provided rejection reason] + ``` + +5. **Update RFC-Index** + - Remove entry from current section ("## Draft" or "## In Review") + - Add entry to "## Rejected" section with reason summary + +6. **Confirm Rejection** + - Display updated status + - Note that RFC remains in wiki for reference + +## Visual Output + +``` ++----------------------------------------------------------------------+ +| PROJMAN - RFC Rejection | ++----------------------------------------------------------------------+ + +RFC-0006: Proposed Feature has been rejected. + +Status: Review → Rejected +Reason: Out of scope for current project direction + +The RFC remains in the wiki for historical reference. +If circumstances change, a new RFC can be created. +``` + +## Validation Errors + +- **RFC not found**: "RFC-NNNN not found. Check the number with /rfc-list" +- **Wrong status**: "RFC-NNNN is [status]. Only Draft or Review RFCs can be rejected." +- **No reason provided**: "Rejection reason is required. Please document why this RFC is being declined." + +## Notes + +- Rejected is a terminal state +- To reconsider, create a new RFC that references the rejected one +- Rejection reasons help future contributors understand project direction diff --git a/plugins/projman/commands/rfc-review.md b/plugins/projman/commands/rfc-review.md new file mode 100644 index 0000000..f706541 --- /dev/null +++ b/plugins/projman/commands/rfc-review.md @@ -0,0 +1,81 @@ +--- +description: Submit a Draft RFC for review, transitioning status to Review +agent: planner +--- + +# Submit RFC for Review + +## Skills Required + +- skills/mcp-tools-reference.md +- skills/rfc-workflow.md +- skills/rfc-templates.md + +## Purpose + +Transition an RFC from Draft to Review status, indicating it's ready for maintainer evaluation. Optionally assign a champion to shepherd the RFC through review. + +## Invocation + +Run `/rfc-review ` where number is the RFC number: +- `/rfc-review 0001` +- `/rfc-review 1` (leading zeros optional) + +## Workflow + +1. **Validate RFC Number** + - Normalize input (add leading zeros if needed) + - Fetch RFC page: `RFC-NNNN: *` + +2. **Check Current Status** + - Parse frontmatter to get current status + - **STOP** if status is not "Draft" + - Error: "RFC-NNNN is in [status] status. Only Draft RFCs can be submitted for review." + +3. **Validate Minimum Content** + - Check for Summary section (required) + - Check for Motivation section (required) + - Check for Detailed Design > Overview (required) + - Warn if Alternatives Considered is empty + +4. **Optional: Assign Champion** + - Ask: "Would you like to assign a champion? (Enter username or skip)" + - Champion is responsible for driving the RFC through review + +5. **Update RFC Page** + - Change status: Draft → Review + - Update "Updated" date + - Set Champion if provided + - Add Review Notes section if not present + +6. **Update RFC-Index** + - Remove entry from "## Draft" section + - Add entry to "## In Review" section + +7. **Confirm Transition** + - Display updated status + - Note next steps (review discussion, then /rfc-approve or /rfc-reject) + +## Visual Output + +``` ++----------------------------------------------------------------------+ +| PROJMAN - RFC Review Submission | ++----------------------------------------------------------------------+ + +RFC-0005: Feature Idea submitted for review + +Status: Draft → Review +Champion: @assigned_user (or: unassigned) +Updated: RFC-Index + +Next steps: +- Discuss in RFC wiki page comments or meetings +- When decision reached: /rfc-approve 0005 or /rfc-reject 0005 +``` + +## Validation Errors + +- **RFC not found**: "RFC-NNNN not found. Check the number with /rfc-list" +- **Wrong status**: "RFC-NNNN is [status]. Only Draft RFCs can be reviewed." +- **Missing sections**: "RFC-NNNN is missing required sections: [list]. Please complete before review." diff --git a/plugins/projman/commands/sprint-close.md b/plugins/projman/commands/sprint-close.md index 8d102f8..dbb25c7 100644 --- a/plugins/projman/commands/sprint-close.md +++ b/plugins/projman/commands/sprint-close.md @@ -10,6 +10,7 @@ agent: orchestrator - skills/mcp-tools-reference.md - skills/lessons-learned.md - skills/wiki-conventions.md +- skills/rfc-workflow.md - skills/progress-tracking.md - skills/git-workflow.md @@ -31,11 +32,42 @@ Execute the sprint close workflow: 4. **Save to Gitea Wiki** - Use `create_lesson` with metadata and implementation link 5. **Update Wiki Implementation Page** - Change status to Implemented/Partial/Failed 6. **Update Wiki Proposal Page** - Update overall status if all implementations complete -7. **New Command Verification** - Remind user new commands require session restart -8. **Update CHANGELOG** (MANDATORY) - Add changes to `[Unreleased]` section -9. **Version Check** - Run `/suggest-version` to recommend version bump -10. **Git Operations** - Commit, merge, tag, clean up branches -11. **Close Milestone** - Update milestone state to closed +7. **Update RFC Status (if applicable)** - See RFC Update section below +8. **New Command Verification** - Remind user new commands require session restart +9. **Update CHANGELOG** (MANDATORY) - Add changes to `[Unreleased]` section +10. **Version Check** - Run `/suggest-version` to recommend version bump +11. **Git Operations** - Commit, merge, tag, clean up branches +12. **Close Milestone** - Update milestone state to closed + +## RFC Status Update (Step 7) + +If the sprint was linked to an RFC: + +1. **Check Sprint Completion Status:** + - All issues completed → RFC status = Implemented + - Partial completion → RFC status stays Implementing (note progress) + - Blocked/Failed → RFC status reverts to Draft (with notes) + +2. **Update RFC Page (if Implemented):** + - Change status: Implementing → Implemented + - Add Completion section with date and release version + - Link to lessons learned page + ```python + update_wiki_page( + page_name="RFC-NNNN:-Title", + content="[content with Implemented status and completion details]", + repo="org/repo" + ) + ``` + +3. **Update RFC-Index:** + - Remove from "## Implementing" section + - Add to "## Implemented" section with completion date and release + +4. **Handle Partial Completion:** + - Keep RFC in Implementing status + - Add progress notes to Implementation section + - Next sprint can continue the work **Don't skip lessons learned!** Future sprints will benefit from captured insights. diff --git a/plugins/projman/skills/input-detection.md b/plugins/projman/skills/input-detection.md index ee95435..48af239 100644 --- a/plugins/projman/skills/input-detection.md +++ b/plugins/projman/skills/input-detection.md @@ -1,6 +1,6 @@ --- name: input-detection -description: Detect planning input source (file, wiki, or conversation) +description: Detect planning input source (RFC, file, wiki, or conversation) --- # Input Source Detection @@ -20,12 +20,56 @@ Defines how to detect where planning input is coming from and how to handle each | Priority | Source | Detection | Action | |----------|--------|-----------|--------| +| 0 | Approved RFC | RFC-Index has entries in "Approved" section | Offer RFC selection or new work | | 1 | Local file | `docs/changes/*.md` exists | Parse frontmatter, migrate to wiki, delete local | | 2 | Existing wiki | `Change VXX.X.X: Proposal` exists | Use as-is, create implementation page | | 3 | Conversation | Neither exists | Create wiki from discussion context | --- +## RFC Detection (Priority 0) + +Before checking for local files or wiki proposals, check for approved RFCs. + +### Detection Steps + +1. **Fetch RFC-Index:** + ```python + get_wiki_page(page_name="RFC-Index", repo="org/repo") + ``` + +2. **Parse Approved Section:** + - Find "## Approved" section + - Extract RFC entries from table + +3. **If Approved RFCs Exist:** + ``` + Approved RFCs available for implementation: + + | RFC | Title | Champion | + |-----|-------|----------| + | RFC-0003 | Feature X | @user | + | RFC-0007 | Enhancement Y | @user | + + Options: + [1] Implement RFC-0003: Feature X + [2] Implement RFC-0007: Enhancement Y + [3] Describe new work (skip RFCs) + + Select an option: + ``` + +4. **If RFC Selected:** + - Use RFC content as planning input + - Status will transition to Implementing after planning approval + - Skip local file and wiki proposal detection + +5. **If "New Work" Selected:** + - Continue with normal Priority 1-3 detection + - Optionally offer: "Would you like to create an RFC first? (y/n)" + +--- + ## Local File Format ```yaml diff --git a/plugins/projman/skills/planning-workflow.md b/plugins/projman/skills/planning-workflow.md index c0d7321..be808d4 100644 --- a/plugins/projman/skills/planning-workflow.md +++ b/plugins/projman/skills/planning-workflow.md @@ -40,10 +40,18 @@ Execute in order: ### 3. Detect Input Source Follow `skills/input-detection.md`: -1. Check for `docs/changes/*.md` files -2. Check for existing wiki proposal -3. If neither: use conversation context -4. If ambiguous: ask user +1. **Check for approved RFCs** (Priority 0) +2. Check for `docs/changes/*.md` files +3. Check for existing wiki proposal +4. If neither: use conversation context +5. If ambiguous: ask user + +### 3a. RFC Status Update (if RFC selected) + +If input source is an RFC: +1. **Note the RFC number** for later status update +2. RFC status update happens AFTER sprint approval (Step 11) +3. The RFC provides the planning context - use its Summary, Motivation, and Design sections ### 4. Search Relevant Lessons Learned @@ -110,6 +118,31 @@ Follow `skills/sprint-approval.md`: - Wait for explicit user approval - Record approval in milestone description +### 12. Update RFC Status (if applicable) + +If planning input was an RFC: + +1. **Fetch RFC page:** + ```python + get_wiki_page(page_name="RFC-NNNN:-Title", repo="org/repo") + ``` + +2. **Update RFC page:** + - Change status: Approved → Implementing + - Add Sprint reference to frontmatter + - Add Implementation section with sprint details and issue links + ```python + update_wiki_page( + page_name="RFC-NNNN:-Title", + content="[updated content with Implementing status]", + repo="org/repo" + ) + ``` + +3. **Update RFC-Index:** + - Remove from "## Approved" section + - Add to "## Implementing" section with sprint reference + --- ## Cleanup After Planning diff --git a/plugins/projman/skills/rfc-templates.md b/plugins/projman/skills/rfc-templates.md new file mode 100644 index 0000000..9c0b1c9 --- /dev/null +++ b/plugins/projman/skills/rfc-templates.md @@ -0,0 +1,380 @@ +--- +name: rfc-templates +description: RFC page templates and frontmatter format specifications +--- + +# RFC Templates + +## Purpose + +Provides templates for RFC wiki pages and defines the required/optional sections for complete RFC documentation. + +## When to Use + +- **Commands**: `/rfc-create` when generating new RFC pages +- **Integration**: Referenced by `rfc-workflow.md` for page structure + +--- + +## RFC Page Frontmatter + +Every RFC page starts with a metadata block using blockquote format: + +```markdown +> **RFC:** 0001 +> **Title:** Short Descriptive Title +> **Status:** Draft +> **Author:** @username +> **Created:** 2026-01-25 +> **Updated:** 2026-01-25 +> **Champion:** (unassigned) +> **Sprint:** (none) +> **Superseded-By:** (none) +``` + +### Frontmatter Fields + +| Field | Required | Description | +|-------|----------|-------------| +| `RFC` | Yes | 4-digit RFC number (e.g., 0001) | +| `Title` | Yes | Short descriptive title | +| `Status` | Yes | Current lifecycle status | +| `Author` | Yes | Original RFC author | +| `Created` | Yes | Creation date (YYYY-MM-DD) | +| `Updated` | Yes | Last update date (YYYY-MM-DD) | +| `Champion` | No | Assigned reviewer/sponsor | +| `Sprint` | No | Sprint reference when implementing | +| `Superseded-By` | No | RFC number if superseded | + +--- + +## Full RFC Page Template + +```markdown +> **RFC:** NNNN +> **Title:** [Short Title] +> **Status:** Draft +> **Author:** @[username] +> **Created:** YYYY-MM-DD +> **Updated:** YYYY-MM-DD +> **Champion:** (unassigned) +> **Sprint:** (none) +> **Superseded-By:** (none) + +# RFC-NNNN: [Full Title] + +## Summary + +A brief (2-3 paragraph) explanation of the proposed change. This should be understandable by someone unfamiliar with the codebase. + +**What:** What is being proposed? +**Why:** Why is this change needed? +**Impact:** What will be different after this is implemented? + +## Motivation + +### Problem Statement + +Describe the problem this RFC addresses. Include: +- Current pain points or limitations +- User stories or use cases +- Why existing solutions are insufficient + +### Goals + +- [ ] Goal 1: Specific, measurable outcome +- [ ] Goal 2: Another specific outcome +- [ ] Goal 3: Third outcome + +### Non-Goals + +What is explicitly out of scope for this RFC: +- Non-goal 1 +- Non-goal 2 + +## Detailed Design + +### Overview + +High-level description of the solution approach. + +### Architecture + +Describe the technical architecture: +- Components involved +- Data flow +- Integration points + +### Implementation Details + +#### Component 1 + +Detailed implementation for component 1. + +#### Component 2 + +Detailed implementation for component 2. + +### API/Interface Changes + +If applicable, describe any API or interface changes: + +```python +# Example new API +def new_function(param1: str, param2: int) -> dict: + """Description of new function.""" + pass +``` + +### Database/Storage Changes + +If applicable, describe any data model changes. + +### Configuration Changes + +If applicable, describe any new configuration options. + +## Alternatives Considered + +### Alternative 1: [Name] + +**Description:** Brief description of this alternative. + +**Pros:** +- Pro 1 +- Pro 2 + +**Cons:** +- Con 1 +- Con 2 + +**Why not chosen:** Explanation. + +### Alternative 2: [Name] + +**Description:** Brief description of this alternative. + +**Pros:** +- Pro 1 + +**Cons:** +- Con 1 + +**Why not chosen:** Explanation. + +## Unresolved Questions + +Questions that need to be answered before or during implementation: + +1. **Question 1:** Description of open question + - Possible answer A + - Possible answer B + +2. **Question 2:** Description of another open question + +## Dependencies + +- Dependency 1: Description and status +- Dependency 2: Description and status + +## Security Considerations + +Describe any security implications: +- Authentication/authorization impacts +- Data privacy considerations +- Potential attack vectors and mitigations + +## Testing Strategy + +How will this be tested: +- Unit tests +- Integration tests +- Manual testing checklist + +## Rollout Plan + +How will this be deployed: +- Feature flags +- Phased rollout +- Rollback strategy + +--- + +## Review Notes + +*(Added during Review phase)* + +### Review Discussion + +Summary of review feedback and discussions. + +### Changes Made + +List of changes made in response to review feedback. + +--- + +## Decision + +*(Added when Approved or Rejected)* + +**Decision:** [Approved/Rejected] +**Date:** YYYY-MM-DD +**Decided By:** @[username] + +**Rationale:** + +Explanation of the decision. + +--- + +## Implementation + +*(Added during Implementing phase)* + +**Sprint:** [Sprint reference] +**Started:** YYYY-MM-DD +**Issues:** +- #123: Issue title +- #124: Another issue + +### Progress Notes + +Updates during implementation. + +--- + +## Completion + +*(Added when Implemented)* + +**Completed:** YYYY-MM-DD +**Release:** vX.Y.Z +**Lessons Learned:** [Link to lessons wiki page] + +### Final Notes + +Summary of what was implemented and any deviations from the original design. +``` + +--- + +## Section Requirements by Status + +### Draft (Minimum) +- Summary (complete) +- Motivation (at least Problem Statement) +- Detailed Design (at least Overview) + +### Review (Required) +All Draft sections plus: +- Alternatives Considered (at least 1) +- Unresolved Questions (can be empty if none) + +### Approved (Required) +All Review sections plus: +- Decision section with approval + +### Implementing (Required) +All Approved sections plus: +- Implementation section with Sprint and Issues + +### Implemented (Required) +All Implementing sections plus: +- Completion section + +--- + +## RFC-Index Entry Format + +### Draft Section Entry +```markdown +| [RFC-0005](RFC-0005:-Idea-Z) | Idea Z | @user | 2026-01-25 | +``` + +### Review Section Entry +```markdown +| [RFC-0004](RFC-0004:-Feature-Y) | Feature Y | @user | 2026-01-20 | +``` + +### Approved Section Entry +```markdown +| [RFC-0003](RFC-0003:-Feature-X) | Feature X | @champion | 2026-01-15 | +``` + +### Implementing Section Entry +```markdown +| [RFC-0002](RFC-0002:-Feature-W) | Feature W | Sprint 18 | 2026-01-22 | +``` + +### Implemented Section Entry +```markdown +| [RFC-0001](RFC-0001:-Initial-Feature) | Initial Feature | 2026-01-10 | v5.0.0 | +``` + +### Rejected Section Entry +```markdown +| [RFC-0006](RFC-0006:-Rejected-Idea) | Rejected Idea | Out of scope | 2026-01-18 | +``` + +--- + +## Minimal RFC Template (Quick Start) + +For rapid RFC creation from conversation: + +```markdown +> **RFC:** NNNN +> **Title:** [Title] +> **Status:** Draft +> **Author:** @[username] +> **Created:** YYYY-MM-DD +> **Updated:** YYYY-MM-DD +> **Champion:** (unassigned) +> **Sprint:** (none) +> **Superseded-By:** (none) + +# RFC-NNNN: [Title] + +## Summary + +[Brief description of the proposal] + +## Motivation + +### Problem Statement + +[What problem does this solve?] + +### Goals + +- [ ] [Primary goal] + +## Detailed Design + +### Overview + +[High-level approach] + +## Alternatives Considered + +*(To be added during review)* + +## Unresolved Questions + +- [Any open questions?] +``` + +--- + +## Creating RFC from Clarified Spec + +When `/clarify` provides a clarified specification, map sections: + +| Clarify Output | RFC Section | +|----------------|-------------| +| Problem/Context | Motivation > Problem Statement | +| Goals/Outcomes | Motivation > Goals | +| Scope/Requirements | Detailed Design > Overview | +| Constraints | Detailed Design or Non-Goals | +| Success Criteria | Testing Strategy | diff --git a/plugins/projman/skills/rfc-workflow.md b/plugins/projman/skills/rfc-workflow.md new file mode 100644 index 0000000..5cf609d --- /dev/null +++ b/plugins/projman/skills/rfc-workflow.md @@ -0,0 +1,308 @@ +--- +name: rfc-workflow +description: RFC lifecycle management, state transitions, and wiki page conventions +--- + +# RFC Workflow + +## Purpose + +Defines the Request for Comments (RFC) system for capturing, reviewing, and tracking feature ideas through their lifecycle from initial proposal to implementation. + +## When to Use + +- **Planner agent**: When detecting approved RFCs for sprint planning +- **Commands**: `/rfc-create`, `/rfc-list`, `/rfc-review`, `/rfc-approve`, `/rfc-reject` +- **Integration**: With `/sprint-plan` to select approved RFCs for implementation + +--- + +## RFC Lifecycle States + +``` + ┌──────────────────────────────────────────────┐ + │ │ + ▼ │ +┌─────────┐ ┌─────────┐ ┌──────────┐ ┌──────────────┐ │ +│ Draft │───▶│ Review │───▶│ Approved │───▶│ Implementing │────┤ +└─────────┘ └─────────┘ └──────────┘ └──────────────┘ │ + │ │ │ │ + │ │ ▼ │ + │ │ ┌─────────────┐ │ + │ │ │ Implemented │ │ + │ │ └─────────────┘ │ + │ │ │ │ + │ ▼ ▼ │ + │ ┌──────────┐ ┌────────────┐ │ + │ │ Rejected │ │ Superseded │ │ + │ └──────────┘ └────────────┘ │ + │ │ + ▼ │ +┌─────────┐ │ +│ Stale │────────────────────────────────────────────────────────┘ +└─────────┘ (revived → Draft) +``` + +--- + +## State Definitions + +| Status | Meaning | Valid Transitions | +|--------|---------|-------------------| +| `Draft` | Idea captured, needs refinement | → Review, → Stale | +| `Review` | Being evaluated by maintainers | → Approved, → Rejected, → Draft | +| `Approved` | Ready for sprint planning | → Implementing | +| `Rejected` | Declined with documented reason | (terminal) | +| `Implementing` | Active sprint work in progress | → Implemented, → Draft (if blocked) | +| `Implemented` | Completed, links to release | → Superseded | +| `Stale` | Draft with no activity >90 days | → Draft (if revived) | +| `Superseded` | Replaced by newer RFC | (terminal) | + +--- + +## State Transition Rules + +### Draft → Review +- **Who can transition**: RFC author or any maintainer +- **Requirements**: RFC has complete Summary, Motivation, and Detailed Design sections +- **Action**: Update status, optionally assign champion + +### Review → Approved +- **Who can transition**: Maintainer or designated reviewer +- **Requirements**: Review discussion complete, no blocking concerns +- **Action**: Update status, add Decision section with approval reason + +### Review → Rejected +- **Who can transition**: Maintainer or designated reviewer +- **Requirements**: Reason must be documented +- **Action**: Update status, add Decision section with rejection reason + +### Approved → Implementing +- **Who can transition**: Planner agent via `/sprint-plan` +- **Requirements**: RFC selected for sprint +- **Action**: Update status, add Sprint reference, update RFC-Index + +### Implementing → Implemented +- **Who can transition**: Orchestrator agent via `/sprint-close` +- **Requirements**: Sprint completed successfully +- **Action**: Update status, add completion date, link to lessons learned + +### Implementing → Draft +- **Who can transition**: Any maintainer +- **Requirements**: Implementation blocked, needs rework +- **Action**: Update status, add Implementation Notes explaining why + +### Draft → Stale +- **Automatic**: No activity for 90 days +- **Action**: Update status in RFC-Index + +### Stale → Draft +- **Who can transition**: Anyone +- **Requirements**: Renewed interest, updated content +- **Action**: Update status, add Revival Notes + +### Implemented → Superseded +- **Who can transition**: Any maintainer +- **Requirements**: New RFC replaces functionality +- **Action**: Update status, add Superseded-By reference + +--- + +## Wiki Page Naming + +| Page Type | Naming Convention | Example | +|-----------|-------------------|---------| +| RFC Page | `RFC-NNNN: Short Title` | `RFC-0001: RFC System Implementation` | +| Index Page | `RFC-Index` | `RFC-Index` | + +**Number Format:** +- 4-digit zero-padded (0001, 0002, 0003, ...) +- Sequential, never reused +- Allocated via `allocate_rfc_number` MCP tool + +--- + +## Number Allocation Logic + +```python +# Pseudocode for allocate_rfc_number +async def allocate_rfc_number(repo): + pages = await list_wiki_pages(repo) + rfc_pages = [p for p in pages if p['title'].startswith('RFC-')] + + if not rfc_pages: + return {'next_number': 1, 'formatted': 'RFC-0001'} + + numbers = [] + for page in rfc_pages: + # Extract number from "RFC-NNNN: Title" + match = re.match(r'RFC-(\d{4})', page['title']) + if match: + numbers.append(int(match.group(1))) + + next_num = max(numbers) + 1 if numbers else 1 + return { + 'next_number': next_num, + 'formatted': f'RFC-{next_num:04d}' + } +``` + +--- + +## RFC-Index Page Format + +The RFC-Index page organizes RFCs by status: + +```markdown +# RFC Index + +## Approved + +RFCs ready for implementation in upcoming sprints. + +| RFC | Title | Champion | Created | +|-----|-------|----------|---------| +| [RFC-0003](RFC-0003:-Feature-X) | Feature X | @user | 2026-01-15 | + +## In Review + +RFCs currently being evaluated. + +| RFC | Title | Author | Created | +|-----|-------|--------|---------| +| [RFC-0004](RFC-0004:-Feature-Y) | Feature Y | @user | 2026-01-20 | + +## Draft + +RFCs in early development. + +| RFC | Title | Author | Created | +|-----|-------|--------|---------| +| [RFC-0005](RFC-0005:-Idea-Z) | Idea Z | @user | 2026-01-25 | + +## Implementing + +RFCs currently being implemented. + +| RFC | Title | Sprint | Started | +|-----|-------|--------|---------| +| [RFC-0002](RFC-0002:-Feature-W) | Feature W | Sprint 18 | 2026-01-22 | + +## Implemented + +Completed RFCs. + +| RFC | Title | Completed | Release | +|-----|-------|-----------|---------| +| [RFC-0001](RFC-0001:-Initial-Feature) | Initial Feature | 2026-01-10 | v5.0.0 | + +## Rejected + +RFCs that were declined. + +| RFC | Title | Reason | Date | +|-----|-------|--------|------| +| [RFC-0006](RFC-0006:-Rejected-Idea) | Rejected Idea | Out of scope | 2026-01-18 | + +## Stale + +Inactive RFCs (no updates >90 days). + +| RFC | Title | Last Updated | +|-----|-------|--------------| +``` + +--- + +## Creating RFC-Index + +If RFC-Index doesn't exist when creating first RFC: + +```python +create_wiki_page( + repo="org/repo", + title="RFC-Index", + content="""# RFC Index + +## Approved + +RFCs ready for implementation in upcoming sprints. + +| RFC | Title | Champion | Created | +|-----|-------|----------|---------| + +## In Review + +RFCs currently being evaluated. + +| RFC | Title | Author | Created | +|-----|-------|--------|---------| + +## Draft + +RFCs in early development. + +| RFC | Title | Author | Created | +|-----|-------|--------|---------| + +## Implementing + +RFCs currently being implemented. + +| RFC | Title | Sprint | Started | +|-----|-------|--------|---------| + +## Implemented + +Completed RFCs. + +| RFC | Title | Completed | Release | +|-----|-------|-----------|---------| + +## Rejected + +RFCs that were declined. + +| RFC | Title | Reason | Date | +|-----|-------|--------|------| + +## Stale + +Inactive RFCs (no updates >90 days). + +| RFC | Title | Last Updated | +|-----|-------|--------------| +""" +) +``` + +--- + +## Updating RFC-Index + +When RFC status changes: + +1. Fetch current RFC-Index content +2. Parse sections by status header +3. Remove RFC entry from old section (if present) +4. Add RFC entry to new section +5. Update wiki page + +**Example status change (Draft → Review):** +1. Remove from "## Draft" section +2. Add to "## In Review" section + +--- + +## Integration Points + +| Component | How It Uses RFC System | +|-----------|------------------------| +| `/rfc-create` | Creates RFC page + updates RFC-Index | +| `/rfc-list` | Reads and displays RFC-Index | +| `/rfc-review` | Transitions Draft → Review | +| `/rfc-approve` | Transitions Review → Approved | +| `/rfc-reject` | Transitions Review/Draft → Rejected | +| `/sprint-plan` | Detects Approved RFCs, transitions to Implementing | +| `/sprint-close` | Transitions Implementing → Implemented | +| `clarity-assist` | Suggests `/rfc-create` for feature ideas | -- 2.49.1