Feature Proposals¶
This directory contains detailed design proposals for new Mooncake features.
Purpose¶
Proposals help: - Think through design before implementation - Get feedback from community - Document decision-making process - Provide reference during implementation
When to Write a Proposal¶
Write a proposal for: - New major features - Significant additions to Mooncake - Breaking changes - Changes that affect existing configurations - Complex features - Features requiring architectural decisions - Controversial features - Features that may have multiple approaches
Don't need a proposal for: - Bug fixes - Documentation updates - Small improvements - Tests
Proposal Template¶
Create a new file: NNNN-feature-name.md
# Proposal: Feature Name
- **Author:** Your Name (@github-username)
- **Status:** Draft | Under Review | Accepted | Rejected | Implemented
- **Created:** YYYY-MM-DD
- **Updated:** YYYY-MM-DD
## Summary
One paragraph explanation of the feature.
## Motivation
Why is this feature needed? What problem does it solve?
### Use Cases
Concrete examples of when users would use this feature:
1. **Use case 1:** User wants to...
2. **Use case 2:** User needs to...
## Proposed Solution
### Configuration Syntax
\`\`\`yaml
# Example of how users would use this feature
- name: Example step
new_action:
parameter: value
\`\`\`
### Implementation Overview
High-level approach:
1. Changes to config package
2. Changes to executor
3. New packages/files needed
### Detailed Design
#### Data Structures
\`\`\`go
type NewFeature struct {
// Fields...
}
\`\`\`
#### Execution Flow
1. Step 1...
2. Step 2...
#### Error Handling
How errors are detected and reported.
### Examples
Complete working examples:
\`\`\`yaml
# Example 1: Basic usage
- name: Basic example
new_action:
param: value
\`\`\`
## Alternatives Considered
### Alternative 1: Different Approach
**Pros:**
- Advantage 1
- Advantage 2
**Cons:**
- Disadvantage 1
- Disadvantage 2
**Why rejected:** Explanation
### Alternative 2: Another Approach
[Same format]
## Compatibility
### Backward Compatibility
Does this break existing configurations?
- [ ] Yes (requires migration guide)
- [x] No
### Migration Path
If breaking: How do users migrate?
## Implementation Plan
### Phase 1: Core Implementation
- [ ] Task 1
- [ ] Task 2
### Phase 2: Documentation
- [ ] README updates
- [ ] Example creation
- [ ] Proposal in docs
### Phase 3: Testing
- [ ] Unit tests
- [ ] Integration tests
- [ ] Manual testing
### Estimated Effort
- Implementation: X hours/days
- Testing: X hours/days
- Documentation: X hours/days
- **Total:** X hours/days
## Open Questions
1. **Question 1:** What about edge case X?
2. **Question 2:** How should we handle Y?
## References
- Related issues: #123, #456
- Related PRs: #789
- External docs: [link]
## Decision
**Date:** YYYY-MM-DD
**Decision:** Accepted | Rejected
**Reason:** Why was this decision made?
Proposal Process¶
1. Draft¶
- Copy template
- Fill in details
- Focus on motivation and use cases
2. Community Review¶
- Open PR with proposal
- Label:
proposal - Gather feedback
- Update based on comments
3. Decision¶
- Maintainer reviews
- Community discusses
- Accept, reject, or request changes
4. Implementation¶
- Accepted proposals can be implemented
- Link PR to proposal
- Update proposal status
Existing Proposals¶
None yet! Be the first to propose a feature.
Example Proposals¶
Good Examples¶
with_dict Iteration
Problem: Clear use case
Solution: Well-defined syntax
Examples: Multiple working examples
Implementation: Clear approach
Alternatives: Considered and rejected with reasons
What to Avoid¶
Bad Proposal
Problem: Vague "make it better"
Solution: No concrete syntax
Examples: None or incomplete
Implementation: "Just add the feature"
Alternatives: None considered
Tips for Good Proposals¶
- Start with use cases - Real problems users have
- Show examples first - Syntax before implementation
- Consider alternatives - Show you've thought it through
- Keep it focused - One feature per proposal
- Be specific - Concrete syntax and behavior
- Think about errors - How will failures be handled?
- Consider compatibility - Impact on existing configs
Questions?¶
- Open an issue with
[Proposal]prefix - Discuss in community channels
- Tag maintainers for review