feat(projman): add RFC system for feature tracking
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 <noreply@anthropic.com>
This commit is contained in:
83
plugins/projman/commands/rfc-approve.md
Normal file
83
plugins/projman/commands/rfc-approve.md
Normal file
@@ -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 <number>` 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."
|
||||
84
plugins/projman/commands/rfc-create.md
Normal file
84
plugins/projman/commands/rfc-create.md
Normal file
@@ -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)
|
||||
98
plugins/projman/commands/rfc-list.md
Normal file
98
plugins/projman/commands/rfc-list.md
Normal file
@@ -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
|
||||
90
plugins/projman/commands/rfc-reject.md
Normal file
90
plugins/projman/commands/rfc-reject.md
Normal file
@@ -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 <number>` 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
|
||||
81
plugins/projman/commands/rfc-review.md
Normal file
81
plugins/projman/commands/rfc-review.md
Normal file
@@ -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 <number>` 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."
|
||||
@@ -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.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user