Merge pull request 'development' (#349) from development into main

Reviewed-on: #349
This commit was merged in pull request #349.
This commit is contained in:
2026-02-01 18:49:22 +00:00
18 changed files with 1441 additions and 13 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -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:

View File

@@ -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)

View File

@@ -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}'
}

View File

@@ -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

View File

@@ -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

View File

@@ -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

View 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."

View 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)

View 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

View 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

View 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."

View File

@@ -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.

View File

@@ -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

View File

@@ -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

View File

@@ -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 |

View File

@@ -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 |