Compare commits
24 Commits
v5.5.0
...
de6cba5f31
| Author | SHA1 | Date | |
|---|---|---|---|
| de6cba5f31 | |||
| 31dcf0338c | |||
| 569dc9a8f2 | |||
| 7217790143 | |||
| 97159274c7 | |||
| 5cf4b4a78c | |||
| 96a612a1f4 | |||
| 47a3a8b48a | |||
| 1b75b10fec | |||
| e925f80252 | |||
| b1070aac52 | |||
| d2b6560fba | |||
| 4b1c561bb6 | |||
| 786d3c0013 | |||
| 59cc67f857 | |||
| 6613ef1d67 | |||
| 6619d0a2fb | |||
| dc08ce1439 | |||
| 2173f3389a | |||
| fab1345bcb | |||
| 36e6ac2dd0 | |||
| 3e0e779803 | |||
| 74198743ab | |||
| d57bff184e |
@@ -6,12 +6,12 @@
|
|||||||
},
|
},
|
||||||
"metadata": {
|
"metadata": {
|
||||||
"description": "Project management plugins with Gitea and NetBox integrations",
|
"description": "Project management plugins with Gitea and NetBox integrations",
|
||||||
"version": "5.5.0"
|
"version": "5.4.1"
|
||||||
},
|
},
|
||||||
"plugins": [
|
"plugins": [
|
||||||
{
|
{
|
||||||
"name": "projman",
|
"name": "projman",
|
||||||
"version": "3.4.0",
|
"version": "3.3.0",
|
||||||
"description": "Sprint planning and project management with Gitea integration",
|
"description": "Sprint planning and project management with Gitea integration",
|
||||||
"source": "./plugins/projman",
|
"source": "./plugins/projman",
|
||||||
"author": {
|
"author": {
|
||||||
|
|||||||
36
CHANGELOG.md
36
CHANGELOG.md
@@ -4,41 +4,7 @@ All notable changes to the Leo Claude Marketplace will be documented in this fil
|
|||||||
|
|
||||||
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
|
||||||
|
|
||||||
## [5.5.0] - 2026-02-01
|
## [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
|
### Changed
|
||||||
|
|
||||||
|
|||||||
16
CLAUDE.md
16
CLAUDE.md
@@ -279,7 +279,7 @@ leo-claude-mktplace/
|
|||||||
| Labels | `get_labels`, `suggest_labels`, `create_label`, `create_label_smart` |
|
| Labels | `get_labels`, `suggest_labels`, `create_label`, `create_label_smart` |
|
||||||
| Milestones | `list_milestones`, `get_milestone`, `create_milestone`, `update_milestone`, `delete_milestone` |
|
| Milestones | `list_milestones`, `get_milestone`, `create_milestone`, `update_milestone`, `delete_milestone` |
|
||||||
| Dependencies | `list_issue_dependencies`, `create_issue_dependency`, `remove_issue_dependency`, `get_execution_order` |
|
| 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`, `allocate_rfc_number` |
|
| Wiki | `list_wiki_pages`, `get_wiki_page`, `create_wiki_page`, `update_wiki_page`, `create_lesson`, `search_lessons` |
|
||||||
| **Pull Requests** | `list_pull_requests`, `get_pull_request`, `get_pr_diff`, `get_pr_comments`, `create_pr_review`, `add_pr_comment` |
|
| **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` |
|
| Validation | `validate_repo_org`, `get_branch_protection` |
|
||||||
|
|
||||||
@@ -300,20 +300,6 @@ leo-claude-mktplace/
|
|||||||
| `staging` | Staging | Read-only code, can create issues |
|
| `staging` | Staging | Read-only code, can create issues |
|
||||||
| `main`, `master` | Production | Read-only, emergency only |
|
| `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
|
## Label Taxonomy
|
||||||
|
|
||||||
43 labels total: 27 organization + 16 repository
|
43 labels total: 27 organization + 16 repository
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# Leo Claude Marketplace - v5.5.0
|
# Leo Claude Marketplace - v5.4.1
|
||||||
|
|
||||||
A collection of Claude Code plugins for project management, infrastructure automation, and development workflows.
|
A collection of Claude Code plugins for project management, infrastructure automation, and development workflows.
|
||||||
|
|
||||||
@@ -19,7 +19,7 @@ AI-guided sprint planning with full Gitea integration. Transforms a proven 15-sp
|
|||||||
- Branch-aware security (development/staging/production)
|
- Branch-aware security (development/staging/production)
|
||||||
- Pre-sprint-close code quality review and test verification
|
- Pre-sprint-close code quality review and test verification
|
||||||
|
|
||||||
**Commands:** `/sprint-plan`, `/sprint-start`, `/sprint-status`, `/sprint-close`, `/labels-sync`, `/setup`, `/review`, `/test`, `/debug`, `/suggest-version`, `/proposal-status`, `/clear-cache`, `/rfc-create`, `/rfc-list`, `/rfc-review`, `/rfc-approve`, `/rfc-reject`
|
**Commands:** `/sprint-plan`, `/sprint-start`, `/sprint-status`, `/sprint-close`, `/labels-sync`, `/setup`, `/review`, `/test`, `/debug`, `/suggest-version`, `/proposal-status`, `/clear-cache`
|
||||||
|
|
||||||
#### [git-flow](./plugins/git-flow) *NEW in v3.0.0*
|
#### [git-flow](./plugins/git-flow) *NEW in v3.0.0*
|
||||||
**Git Workflow Automation**
|
**Git Workflow Automation**
|
||||||
|
|||||||
@@ -21,11 +21,6 @@ Quick reference for all commands in the Leo Claude Marketplace.
|
|||||||
| **projman** | `/suggest-version` | | X | Analyze CHANGELOG and recommend semantic version bump |
|
| **projman** | `/suggest-version` | | X | Analyze CHANGELOG and recommend semantic version bump |
|
||||||
| **projman** | `/proposal-status` | | X | View proposal and implementation hierarchy with status |
|
| **projman** | `/proposal-status` | | X | View proposal and implementation hierarchy with status |
|
||||||
| **projman** | `/clear-cache` | | X | Clear plugin cache to force fresh configuration reload |
|
| **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` | | X | Create commit with auto-generated conventional message |
|
||||||
| **git-flow** | `/commit-push` | | X | Commit and push to remote in one operation |
|
| **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 |
|
| **git-flow** | `/commit-merge` | | X | Commit current changes, then merge into target branch |
|
||||||
@@ -134,22 +129,6 @@ Quick reference for all commands in the Leo Claude Marketplace.
|
|||||||
|
|
||||||
## Dev Workflow Examples
|
## 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
|
### Example 1: Starting a New Feature Sprint
|
||||||
|
|
||||||
A typical workflow for planning and executing a feature sprint:
|
A typical workflow for planning and executing a feature sprint:
|
||||||
|
|||||||
@@ -435,19 +435,6 @@ 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
|
# Milestone Tools
|
||||||
Tool(
|
Tool(
|
||||||
name="list_milestones",
|
name="list_milestones",
|
||||||
@@ -993,10 +980,6 @@ class GiteaMCPServer:
|
|||||||
limit=arguments.get('limit', 20),
|
limit=arguments.get('limit', 20),
|
||||||
repo=arguments.get('repo')
|
repo=arguments.get('repo')
|
||||||
)
|
)
|
||||||
elif name == "allocate_rfc_number":
|
|
||||||
result = await self.wiki_tools.allocate_rfc_number(
|
|
||||||
repo=arguments.get('repo')
|
|
||||||
)
|
|
||||||
# Milestone tools
|
# Milestone tools
|
||||||
elif name == "list_milestones":
|
elif name == "list_milestones":
|
||||||
result = await self.milestone_tools.list_milestones(**arguments)
|
result = await self.milestone_tools.list_milestones(**arguments)
|
||||||
|
|||||||
@@ -4,11 +4,9 @@ Wiki management tools for MCP server.
|
|||||||
Provides async wrappers for wiki operations to support lessons learned:
|
Provides async wrappers for wiki operations to support lessons learned:
|
||||||
- Page CRUD operations
|
- Page CRUD operations
|
||||||
- Lessons learned creation and search
|
- Lessons learned creation and search
|
||||||
- RFC number allocation
|
|
||||||
"""
|
"""
|
||||||
import asyncio
|
import asyncio
|
||||||
import logging
|
import logging
|
||||||
import re
|
|
||||||
from typing import List, Dict, Optional
|
from typing import List, Dict, Optional
|
||||||
|
|
||||||
logging.basicConfig(level=logging.INFO)
|
logging.basicConfig(level=logging.INFO)
|
||||||
@@ -149,39 +147,3 @@ class WikiTools:
|
|||||||
lambda: self.gitea.search_lessons(query, tags, repo)
|
lambda: self.gitea.search_lessons(query, tags, repo)
|
||||||
)
|
)
|
||||||
return results[:limit]
|
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}'
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -34,31 +34,7 @@ Load these skills before proceeding:
|
|||||||
2. **Diagnose** - Identify gaps and conflicts
|
2. **Diagnose** - Identify gaps and conflicts
|
||||||
3. **Develop** - Gather clarifications via structured questions
|
3. **Develop** - Gather clarifications via structured questions
|
||||||
4. **Deliver** - Present refined specification
|
4. **Deliver** - Present refined specification
|
||||||
5. **Offer RFC Creation** - For feature work, offer to save as RFC
|
|
||||||
|
|
||||||
## Output Format
|
## Output Format
|
||||||
|
|
||||||
Use the Deliver phase template from `skills/4d-methodology.md` to present the clarified specification for user confirmation.
|
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
|
|
||||||
|
|||||||
@@ -2,13 +2,8 @@
|
|||||||
"hooks": {
|
"hooks": {
|
||||||
"UserPromptSubmit": [
|
"UserPromptSubmit": [
|
||||||
{
|
{
|
||||||
"matcher": "",
|
"type": "command",
|
||||||
"hooks": [
|
"command": "${CLAUDE_PLUGIN_ROOT}/hooks/vagueness-check.sh"
|
||||||
{
|
|
||||||
"type": "command",
|
|
||||||
"command": "${CLAUDE_PLUGIN_ROOT}/hooks/vagueness-check.sh"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -197,38 +197,6 @@ if (( $(echo "$SCORE > 1.0" | bc -l) )); then
|
|||||||
SCORE="1.0"
|
SCORE="1.0"
|
||||||
fi
|
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
|
# Output suggestion if score exceeds threshold
|
||||||
# ============================================================================
|
# ============================================================================
|
||||||
@@ -240,16 +208,8 @@ if (( $(echo "$SCORE >= $THRESHOLD" | bc -l) )); then
|
|||||||
|
|
||||||
# Gentle, non-blocking suggestion
|
# Gentle, non-blocking suggestion
|
||||||
echo "$PREFIX Your prompt could benefit from more clarity."
|
echo "$PREFIX Your prompt could benefit from more clarity."
|
||||||
echo "$PREFIX Consider running /clarify to refine your request."
|
echo "$PREFIX Consider running /clarity-assist to refine your request."
|
||||||
echo "$PREFIX (Vagueness score: ${SCORE_PCT}% - this is a suggestion, not a block)"
|
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
|
fi
|
||||||
|
|
||||||
# Always exit 0 - this hook is non-blocking
|
# Always exit 0 - this hook is non-blocking
|
||||||
|
|||||||
@@ -2,13 +2,8 @@
|
|||||||
"hooks": {
|
"hooks": {
|
||||||
"SessionStart": [
|
"SessionStart": [
|
||||||
{
|
{
|
||||||
"matcher": "",
|
"type": "command",
|
||||||
"hooks": [
|
"command": "${CLAUDE_PLUGIN_ROOT}/hooks/enforce-rules.sh"
|
||||||
{
|
|
||||||
"type": "command",
|
|
||||||
"command": "${CLAUDE_PLUGIN_ROOT}/hooks/enforce-rules.sh"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,13 +2,8 @@
|
|||||||
"hooks": {
|
"hooks": {
|
||||||
"SessionStart": [
|
"SessionStart": [
|
||||||
{
|
{
|
||||||
"matcher": "",
|
"type": "command",
|
||||||
"hooks": [
|
"command": "${CLAUDE_PLUGIN_ROOT}/hooks/startup-check.sh"
|
||||||
{
|
|
||||||
"type": "command",
|
|
||||||
"command": "${CLAUDE_PLUGIN_ROOT}/hooks/startup-check.sh"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"PreToolUse": [
|
"PreToolUse": [
|
||||||
|
|||||||
@@ -2,13 +2,8 @@
|
|||||||
"hooks": {
|
"hooks": {
|
||||||
"SessionStart": [
|
"SessionStart": [
|
||||||
{
|
{
|
||||||
"matcher": "",
|
"type": "command",
|
||||||
"hooks": [
|
"command": "${CLAUDE_PLUGIN_ROOT}/hooks/auto-validate.sh"
|
||||||
{
|
|
||||||
"type": "command",
|
|
||||||
"command": "${CLAUDE_PLUGIN_ROOT}/hooks/auto-validate.sh"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"PostToolUse": [
|
"PostToolUse": [
|
||||||
|
|||||||
@@ -2,13 +2,8 @@
|
|||||||
"hooks": {
|
"hooks": {
|
||||||
"SessionStart": [
|
"SessionStart": [
|
||||||
{
|
{
|
||||||
"matcher": "",
|
"type": "command",
|
||||||
"hooks": [
|
"command": "${CLAUDE_PLUGIN_ROOT}/hooks/startup-check.sh"
|
||||||
{
|
|
||||||
"type": "command",
|
|
||||||
"command": "${CLAUDE_PLUGIN_ROOT}/hooks/startup-check.sh"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"PostToolUse": [
|
"PostToolUse": [
|
||||||
|
|||||||
@@ -2,13 +2,8 @@
|
|||||||
"hooks": {
|
"hooks": {
|
||||||
"SessionStart": [
|
"SessionStart": [
|
||||||
{
|
{
|
||||||
"matcher": "",
|
"type": "command",
|
||||||
"hooks": [
|
"command": "${CLAUDE_PLUGIN_ROOT}/hooks/startup-check.sh"
|
||||||
{
|
|
||||||
"type": "command",
|
|
||||||
"command": "${CLAUDE_PLUGIN_ROOT}/hooks/startup-check.sh"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,11 +12,6 @@ This project uses the **projman** plugin for sprint planning and project managem
|
|||||||
| `/sprint-close` | Complete sprint and capture lessons learned to Gitea Wiki |
|
| `/sprint-close` | Complete sprint and capture lessons learned to Gitea Wiki |
|
||||||
| `/labels-sync` | Synchronize label taxonomy from Gitea |
|
| `/labels-sync` | Synchronize label taxonomy from Gitea |
|
||||||
| `/initial-setup` | Run initial setup for projman plugin |
|
| `/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
|
### MCP Tools Available
|
||||||
|
|
||||||
@@ -45,14 +40,12 @@ The following Gitea MCP tools are available for issue and project management:
|
|||||||
- `create_issue_dependency` - Create dependency between issues
|
- `create_issue_dependency` - Create dependency between issues
|
||||||
- `get_execution_order` - Get parallel execution batches
|
- `get_execution_order` - Get parallel execution batches
|
||||||
|
|
||||||
**Wiki (Lessons Learned & RFCs):**
|
**Wiki (Lessons Learned):**
|
||||||
- `list_wiki_pages` - List wiki pages
|
- `list_wiki_pages` - List wiki pages
|
||||||
- `get_wiki_page` - Fetch specific page content
|
- `get_wiki_page` - Fetch specific page content
|
||||||
- `create_wiki_page` - Create new wiki page
|
- `create_wiki_page` - Create new wiki page
|
||||||
- `update_wiki_page` - Update existing wiki page
|
|
||||||
- `create_lesson` - Create lessons learned document
|
- `create_lesson` - Create lessons learned document
|
||||||
- `search_lessons` - Search past lessons by tags
|
- `search_lessons` - Search past lessons by tags
|
||||||
- `allocate_rfc_number` - Get next available RFC number
|
|
||||||
|
|
||||||
### Usage Guidelines
|
### Usage Guidelines
|
||||||
|
|
||||||
|
|||||||
@@ -1,83 +0,0 @@
|
|||||||
---
|
|
||||||
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."
|
|
||||||
@@ -1,84 +0,0 @@
|
|||||||
---
|
|
||||||
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)
|
|
||||||
@@ -1,98 +0,0 @@
|
|||||||
---
|
|
||||||
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
|
|
||||||
@@ -1,90 +0,0 @@
|
|||||||
---
|
|
||||||
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
|
|
||||||
@@ -1,81 +0,0 @@
|
|||||||
---
|
|
||||||
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,7 +10,6 @@ agent: orchestrator
|
|||||||
- skills/mcp-tools-reference.md
|
- skills/mcp-tools-reference.md
|
||||||
- skills/lessons-learned.md
|
- skills/lessons-learned.md
|
||||||
- skills/wiki-conventions.md
|
- skills/wiki-conventions.md
|
||||||
- skills/rfc-workflow.md
|
|
||||||
- skills/progress-tracking.md
|
- skills/progress-tracking.md
|
||||||
- skills/git-workflow.md
|
- skills/git-workflow.md
|
||||||
|
|
||||||
@@ -32,42 +31,11 @@ Execute the sprint close workflow:
|
|||||||
4. **Save to Gitea Wiki** - Use `create_lesson` with metadata and implementation link
|
4. **Save to Gitea Wiki** - Use `create_lesson` with metadata and implementation link
|
||||||
5. **Update Wiki Implementation Page** - Change status to Implemented/Partial/Failed
|
5. **Update Wiki Implementation Page** - Change status to Implemented/Partial/Failed
|
||||||
6. **Update Wiki Proposal Page** - Update overall status if all implementations complete
|
6. **Update Wiki Proposal Page** - Update overall status if all implementations complete
|
||||||
7. **Update RFC Status (if applicable)** - See RFC Update section below
|
7. **New Command Verification** - Remind user new commands require session restart
|
||||||
8. **New Command Verification** - Remind user new commands require session restart
|
8. **Update CHANGELOG** (MANDATORY) - Add changes to `[Unreleased]` section
|
||||||
9. **Update CHANGELOG** (MANDATORY) - Add changes to `[Unreleased]` section
|
9. **Version Check** - Run `/suggest-version` to recommend version bump
|
||||||
10. **Version Check** - Run `/suggest-version` to recommend version bump
|
10. **Git Operations** - Commit, merge, tag, clean up branches
|
||||||
11. **Git Operations** - Commit, merge, tag, clean up branches
|
11. **Close Milestone** - Update milestone state to closed
|
||||||
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.
|
**Don't skip lessons learned!** Future sprints will benefit from captured insights.
|
||||||
|
|
||||||
|
|||||||
@@ -2,13 +2,8 @@
|
|||||||
"hooks": {
|
"hooks": {
|
||||||
"SessionStart": [
|
"SessionStart": [
|
||||||
{
|
{
|
||||||
"matcher": "",
|
"type": "command",
|
||||||
"hooks": [
|
"command": "${CLAUDE_PLUGIN_ROOT}/hooks/startup-check.sh"
|
||||||
{
|
|
||||||
"type": "command",
|
|
||||||
"command": "${CLAUDE_PLUGIN_ROOT}/hooks/startup-check.sh"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
---
|
---
|
||||||
name: input-detection
|
name: input-detection
|
||||||
description: Detect planning input source (RFC, file, wiki, or conversation)
|
description: Detect planning input source (file, wiki, or conversation)
|
||||||
---
|
---
|
||||||
|
|
||||||
# Input Source Detection
|
# Input Source Detection
|
||||||
@@ -20,56 +20,12 @@ Defines how to detect where planning input is coming from and how to handle each
|
|||||||
|
|
||||||
| Priority | Source | Detection | Action |
|
| 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 |
|
| 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 |
|
| 2 | Existing wiki | `Change VXX.X.X: Proposal` exists | Use as-is, create implementation page |
|
||||||
| 3 | Conversation | Neither exists | Create wiki from discussion context |
|
| 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
|
## Local File Format
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
|
|||||||
@@ -40,18 +40,10 @@ Execute in order:
|
|||||||
### 3. Detect Input Source
|
### 3. Detect Input Source
|
||||||
|
|
||||||
Follow `skills/input-detection.md`:
|
Follow `skills/input-detection.md`:
|
||||||
1. **Check for approved RFCs** (Priority 0)
|
1. Check for `docs/changes/*.md` files
|
||||||
2. Check for `docs/changes/*.md` files
|
2. Check for existing wiki proposal
|
||||||
3. Check for existing wiki proposal
|
3. If neither: use conversation context
|
||||||
4. If neither: use conversation context
|
4. If ambiguous: ask user
|
||||||
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
|
### 4. Search Relevant Lessons Learned
|
||||||
|
|
||||||
@@ -118,31 +110,6 @@ Follow `skills/sprint-approval.md`:
|
|||||||
- Wait for explicit user approval
|
- Wait for explicit user approval
|
||||||
- Record approval in milestone description
|
- 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
|
## Cleanup After Planning
|
||||||
|
|||||||
@@ -1,380 +0,0 @@
|
|||||||
---
|
|
||||||
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 |
|
|
||||||
@@ -1,308 +0,0 @@
|
|||||||
---
|
|
||||||
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 |
|
|
||||||
@@ -1,3 +1,3 @@
|
|||||||
{
|
{
|
||||||
"hooks": {}
|
"hooks": []
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user