Version: 1.0.1 Last Updated: 2025-10-13 Status: Active
This document defines the standardized process for submitting, reviewing, and approving technical proposals for the Unified Module System (UMS) project. All significant changes to architecture, specifications, or features should follow this process to ensure thorough review and community alignment.
Proposals are required for:
- New features that affect the UMS specification (v2.0+)
- Breaking changes to existing APIs or specifications
- Architectural changes that impact multiple packages
- New specification versions (e.g., UMS v2.1, v2.2, v3.0)
- Deprecation of major features or components
- Significant new APIs or public interfaces
- Major refactorings that change internal architecture
- New standard library modules or module categories
- Changes to build processes or tooling workflows
- Bug fixes that don't change behavior
- Documentation improvements
- Internal refactorings without API changes
- Minor performance optimizations
- Test additions or improvements
┌─────────────┐
│ Draft │ ← Author creates proposal
└─────┬───────┘
│
▼
┌─────────────┐
│ Review │ ← Community reviews and provides feedback
└─────┬───────┘
│
├──────────────┐
▼ ▼
┌─────────────┐ ┌──────────────┐
│ Approved │ │ Rejected │
└─────┬───────┘ └──────────────┘
│ │
▼ ▼
┌─────────────┐ ┌──────────────┐
│Implementing │ │ Archived │
└─────┬───────┘ └──────────────┘
│
▼
┌─────────────┐
│ Completed │
└─────────────┘
- Draft: Initial proposal under development by author(s)
- Review: Proposal submitted for community and maintainer review
- Approved for Implementation: Proposal accepted, implementation may begin
- Rejected: Proposal was formally reviewed and declined by maintainers, with documented rationale explaining the decision
- Implementing: Work in progress following approved proposal
- Completed: Implementation finished and merged
- Archived: Proposal was withdrawn by author, superseded by another proposal, or became obsolete before a final decision was reached
All proposals must follow the standard template located at:
docs/spec/proposals/TEMPLATE.md
-
Header Metadata
- Status
- Author(s)
- Date
- Last Reviewed
- Target Version
- Tracking Issue
-
Abstract
- One-paragraph summary of the proposal
- Clear statement of what is being proposed
-
Motivation
- Problem statement
- Current limitations
- Use cases
- Expected benefits
-
Current State
- How things work today
- Why current approach is insufficient
-
Proposed Design
- Detailed technical design
- API changes or additions
- Examples demonstrating usage
- Edge cases and error handling
-
Implementation Details
- Build system changes
- Validation rules
- Migration considerations
-
Alternatives Considered
- Other approaches evaluated
- Why they were rejected
- Trade-offs analysis
-
Drawbacks and Risks
- Known issues or limitations
- Mitigation strategies
- Open questions
-
Migration Path
- How to adopt the change
- Backward compatibility strategy
- Deprecation timeline (if applicable)
-
Success Metrics
- How success will be measured
- Adoption targets
- Performance benchmarks
- Design Decisions: Resolved questions with rationale
- Implementation Roadmap: Phased rollout plan
- Technical Review Summary: Outcome of formal review
- References: Links to related specs, issues, or discussions
- Appendices: Supporting materials, type definitions, etc.
-
Copy the template:
cp docs/spec/proposals/TEMPLATE.md docs/spec/proposals/your-proposal-name.md
-
Fill in required sections:
- Use clear, concise language
- Include code examples
- Provide type definitions when applicable
- Reference existing specifications
-
Self-review checklist:
- Problem clearly stated
- Proposed solution is detailed
- Examples demonstrate key scenarios
- Alternatives considered and documented
- Risks identified with mitigations
- Migration path defined
- All required sections completed
Before formal submission, consider:
- Opening a GitHub Discussion for early feedback
- Sharing in team channels for quick sanity check
- Getting input from affected stakeholders
This helps refine the proposal before formal review.
-
Create a feature branch:
git checkout -b proposal/your-proposal-name
-
Commit the proposal:
git add docs/spec/proposals/your-proposal-name.md git commit -m "proposal: add proposal for [brief description]" -
Open a Pull Request:
- Title:
[PROPOSAL] Your Proposal Name - Description: Link to proposal file and provide context
- Label:
proposal,needs-review - Assign relevant reviewers
- Title:
-
Create tracking issue:
- Title:
[Proposal] Your Proposal Name - Link to proposal file in PR
- Add to project board under "Proposals"
- Title:
Minimum Review Period: 7 days for standard proposals, 14 days for breaking changes
During review:
- Respond to feedback and questions
- Update proposal based on discussion
- Mark major revisions in commit messages
- Participate in design discussions
Reviewers evaluate proposals on:
-
Technical Soundness
- Is the design architecturally coherent?
- Does it align with UMS principles?
- Are edge cases addressed?
-
Problem-Solution Fit
- Does this solve the stated problem?
- Is this the right solution?
- Are there simpler alternatives?
-
Completeness
- Are all required sections filled?
- Is implementation detail sufficient?
- Are examples clear and comprehensive?
-
Impact Assessment
- Breaking changes justified?
- Migration path clear?
- Risk mitigation adequate?
-
Maintainability
- Will this be sustainable long-term?
- Does it add appropriate complexity?
- Is testing strategy defined?
Author(s):
- Responds to feedback
- Updates proposal
- Clarifies design decisions
Community Reviewers:
- Provide feedback and suggestions
- Ask clarifying questions
- Test assumptions
Maintainers:
- Ensure completeness
- Assess architectural fit
- Make final approval decision
Domain Experts (when applicable):
- Review technical accuracy
- Validate approach
- Suggest improvements
For Reviewers:
- Be constructive and specific
- Ask questions to understand intent
- Suggest alternatives with rationale
- Focus on technical merit
For Authors:
- Address all feedback, even if disagreeing
- Explain design decisions clearly
- Update proposal based on consensus
- Document resolved discussions
A proposal is approved when:
- ✅ Minimum review period has elapsed
- ✅ All major concerns addressed
- ✅ At least 2 maintainer approvals
- ✅ No unresolved blocking objections
- ✅ Technical review summary completed (for major proposals)
Technical Review Summary: For major proposals (breaking changes, new spec versions, architectural changes), the lead maintainer should author a Technical Review Summary that captures:
- The final consensus reached
- Key trade-offs considered during review
- The ultimate rationale for approval or rejection
- Critical success factors for implementation
This summary is typically added to the proposal as a new section after review is complete.
A proposal may be rejected if:
- ❌ Problem is not significant enough
- ❌ Solution doesn't fit UMS architecture
- ❌ Better alternatives exist
- ❌ Implementation costs outweigh benefits
- ❌ Unresolvable conflicts with other designs
- ❌ Breaking changes unjustified
Note: Rejection includes documented rationale and may suggest alternative approaches.
Standard Approval (2 maintainers):
- New features within existing architecture
- Non-breaking API additions
- Documentation or tooling improvements
Enhanced Approval (3+ maintainers + community discussion):
- Breaking changes to specifications
- New specification versions
- Major architectural changes
- Deprecation of core features
**Status**: Approved for Implementation
**Approved By**: @maintainer1, @maintainer2
**Approval Date**: 2025-10-13Add to proposal:
- Implementation Roadmap section with phases
- Success Criteria for each phase
- Timeline estimates
- Resource Requirements
- Create tracking issue (if not already created)
- Break into subtasks on project board
- Assign implementers
- Link PRs to proposal in commits
- Implementation PRs reference proposal
- Reviewers verify alignment with approved design
- Deviations require proposal amendment or new proposal
Once implementation is merged:
- Update proposal status to Completed
- Add Implementation Notes section documenting any deviations
- Link to relevant PRs and commits
- Update related documentation
Location: docs/spec/proposals/TEMPLATE.md
Use this template for all standard proposals.
For simple, non-controversial proposals:
# Proposal: [Brief Title]
**Status**: Draft
**Author**: Your Name
**Date**: YYYY-MM-DD
## Problem
[One paragraph describing the problem]
## Proposed Solution
[Detailed solution with examples]
## Alternatives Considered
[Other approaches and why they were rejected]
## Implementation
[High-level implementation plan]- Selective Module Inclusion - Comprehensive example with full review cycle
All active and historical proposals are tracked in:
docs/spec/proposals/README.md
This index includes:
- Proposal status
- Brief description
- Links to tracking issues
- Implementation status
- Start with "Why": Clearly articulate the problem before jumping to solutions
- Show, Don't Tell: Use code examples and concrete scenarios
- Be Thorough: Address edge cases, errors, and migration
- Consider Impact: Think about all affected users and systems
- Iterate Quickly: Respond to feedback promptly
- Document Decisions: Capture the "why" behind design choices
- Review Promptly: Try to provide feedback within 3 days
- Be Specific: Point to exact sections and suggest improvements
- Ask Questions: Seek to understand before critiquing
- Suggest Alternatives: Don't just identify problems, propose solutions
- Focus on Value: Balance perfectionism with practical value
- Approve Explicitly: Use GitHub's approval feature when satisfied
- Set Clear Expectations: Communicate review timeline and requirements
- Facilitate Discussion: Help resolve disagreements constructively
- Make Decisions: Don't let proposals languish indefinitely
- Document Rationale: Explain approval or rejection clearly
- Track Progress: Ensure approved proposals are implemented
- Close the Loop: Update proposal status as work progresses
For major proposals (breaking changes, new spec versions), a Proposal Review Committee may be convened:
- Composition: 3-5 maintainers + 1-2 community representatives
- Responsibilities: Deep technical review, recommendation to maintainers
- Timeline: 7-day review period for committee assessment
If a proposal is rejected, authors may:
- Request Clarification: Ask maintainers to elaborate on concerns
- Revise and Resubmit: Address issues and submit updated proposal
- Appeal Decision: Present case to Proposal Review Committee (for major proposals)
Approved proposals may be amended:
- Minor Changes: Update proposal file, note in "Amendments" section
- Major Changes: Require new review cycle with "Amendment" label
- Version Tracking: Track proposal version in header metadata
This proposal process is itself subject to improvement:
- Feedback Welcome: Suggest improvements via GitHub issues
- Regular Review: Process reviewed quarterly
- Template Updates: Templates evolve based on community needs
To propose changes to this process:
- Open issue:
[Meta] Proposal Process Improvement: [topic] - Label:
meta,process - Follow simplified proposal format
Proposal filenames should follow this pattern:
[category]-[brief-description].md
Categories:
feature-- New feature proposalsbreaking-- Breaking changesarch-- Architectural changesspec-- Specification updatesdeprecation-- Feature deprecations
Choosing the Right Category:
When a proposal fits multiple categories, choose the one representing the most significant impact:
- Breaking changes take precedence: If a new feature introduces breaking changes, use
breaking- - Architectural changes are next: Major architectural changes, even if non-breaking, should use
arch- - Spec versions are explicit: New spec versions always use
spec- - Features are default: If no other category applies, use
feature-
Examples:
feature-selective-module-inclusion.md- New feature, non-breakingbreaking-ums-v3-api-redesign.md- Breaking change (even if it adds features)arch-distributed-module-registry.md- Architectural changespec-ums-v2.1-additions.md- Specification updatedeprecation-yaml-module-format.md- Feature deprecationbreaking-remove-v1-support.md- Breaking change, notdeprecation-(because it's the removal)
- Used standard template
- All required sections complete
- Problem clearly stated
- Solution detailed with examples
- Alternatives considered
- Risks and mitigations documented
- Migration path defined
- Success metrics identified
- Self-reviewed for clarity
- Created feature branch
- Opened PR with
[PROPOSAL]prefix - Created tracking issue
- Notified relevant stakeholders
- Read proposal thoroughly
- Understood problem and motivation
- Evaluated proposed solution
- Considered alternatives
- Assessed risks and mitigations
- Checked implementation feasibility
- Verified migration path
- Provided specific, constructive feedback
- Approved or requested changes
- Minimum review period elapsed
- All feedback addressed
- 2+ maintainer approvals
- No blocking objections
- Technical review completed (if required)
- Status updated to "Approved"
- Implementation roadmap added
- Tracking issue updated
For questions about the proposal process:
- GitHub Issues: Use
[Meta]prefix for process questions - Discussions: Post in "Proposals" category
- Email: [maintainer contact if applicable]
Document Version: 1.0.1 Changelog:
- 2025-10-13 (v1.0.1): Refinements based on technical review
- Clarified distinction between "Rejected" and "Archived" status definitions
- Added guidance on Technical Review Summary authorship and purpose
- Enhanced naming convention with category precedence rules
- 2025-10-13 (v1.0.0): Initial version based on selective-module-inclusion proposal review