Files
FedDIY/CONTRIBUTING.md
T
Matsubaa 941a9da928 feat: Update ROADMAP with personal data handling and user moderation features
- Added goals for defining personal data categories and retention obligations.
- Included exit criteria for user-level moderation, personal collections, and self-service data export.
- Expanded Phase 2 goals to include remote actor moderation and shareable block lists.

chore: Update flake.nix to specify main program

- Set the main program for the project in the flake configuration.

feat: Add issue templates for bug reports, feature requests, and questions

- Created structured templates to streamline issue reporting and feature suggestions.

docs: Add pull request template for consistent contributions

- Introduced a PR template to guide contributors on providing necessary information.

docs: Establish a Code of Conduct for community behavior

- Implemented a Code of Conduct to promote a respectful and inclusive environment.

docs: Create Diversity, Equity, and Inclusion (DEI) statement

- Outlined commitment to diversity and inclusion within the FeDIY community.

docs: Define Code Review Guidelines for constructive feedback

- Established guidelines to ensure respectful and effective code reviews.

docs: Implement Security Policy for vulnerability reporting

- Created a security policy detailing how to report vulnerabilities and our commitment to addressing them.
2026-05-23 17:26:28 -05:00

251 lines
10 KiB
Markdown

# Contributing to FeDIY
Welcome! We're thrilled you're interested in contributing to FeDIY. Whether you're a Rust expert, a DIY enthusiast, a designer, a writer, or just someone curious about federated projects, there's a place for you here.
## Code of Conduct
Before you get started, please read our [Code of Conduct](CODE_OF_CONDUCT.md). We are committed to providing a welcoming, harassment-free environment for everyone. If you witness or experience behavior that violates the code of conduct, please report it.
## Diversity, Equity, and Inclusion
FeDIY is built on the belief that diverse perspectives make us stronger. We actively welcome contributions from people of all backgrounds, identities, and experience levels. See [DEI.md](DEI.md) for details on how we're building an inclusive community.
## Ways You Can Contribute
Not a code expert? No problem! We value all types of contributions:
### Code and Technical Work
- **Bug fixes:** Found a bug? Fix it! Start with issues labeled `bug`.
- **Features:** Want to implement something new? Check issues labeled `feature` or `help-wanted`.
- **Tests:** Improve test coverage or write new tests.
- **Performance improvements:** Optimize code or fix inefficiencies.
- **Rust learning:** If you're learning Rust, this is a great place to practice. We're happy to help with code review and guidance.
### Documentation and Writing
- **README improvements:** Is something confusing? Improve the docs!
- **API documentation:** Write clear, well-commented documentation for public APIs.
- **Tutorial and guides:** Help newcomers get started with FeDIY.
- **Blog posts or articles:** Share your experience with FeDIY (ask us before publishing to avoid duplication).
### Design and Accessibility
- **UI/UX improvements:** Suggest interface improvements or general enhancements.
- **Accessibility testing and review:** Test features with screen readers, keyboard navigation, and other assistive technologies. Report issues with WCAG 2.1 AA compliance. See [DEI.md](DEI.md) for our accessibility commitments.
- **Alt text and captions:** Help write or improve alt text for images, transcripts for videos, and captions for audio content.
- **Accessible documentation:** Improve docs for clarity, readability, and accessibility (plain language, good structure, proper heading hierarchy).
- **Accessibility tooling:** Develop or suggest tools to help creators make their content accessible (e.g., alt text helpers, caption templates).
- **Design for sensory differences:** Suggest improvements for people who are blind, low-vision, Deaf, hard-of-hearing, or have motor differences.
- **Architecture diagrams:** Help visualize how FeDIY works in multiple formats (visual diagrams, text descriptions, accessible charts).
### Community and Outreach
- **Issue triage:** Help organize and categorize issues.
- **Code review:** Review pull requests and provide constructive feedback.
- **Community discussions:** Participate in GitHub Discussions or forums.
- **Mentoring:** Help newer contributors get up to speed.
## Getting Started
### 1. Set Up Your Development Environment
Clone the repository and set up the development environment:
```bash
git clone https://github.com/moturpin/FeDIY.git
cd FeDIY
nix flake update # Update Nix dependencies
nix develop # Enter the development shell
cargo build # Build the project
cargo test # Run tests
```
**Note:** We use Nix flakes for reproducible development. If you don't have Nix installed, see our [README](README.md) for alternative setup instructions.
### 2. Choose Something to Work On
- **New to the project?** Look for issues labeled `good-first-issue` or `help-wanted`.
- **Want to learn?** Pick an issue that interests you and comment to let us know.
- **Have an idea?** Open a GitHub Discussion to get feedback before starting work.
- **Not sure?** Ask! Comment on an issue or start a discussion.
### 3. Create a Branch and Make Your Changes
We use GitHub Flow for branching:
```bash
git checkout -b feature/your-feature-name
# or: git checkout -b fix/issue-number-short-description
```
**Branch naming conventions:**
- `feature/feature-name` for new features
- `fix/issue-number-description` for bug fixes
- `docs/description` for documentation changes
- `refactor/description` for code cleanup
### 4. Write Commit Messages
Use clear, descriptive commit messages:
```
Summarize change in ~50 characters or less
Add more detailed explanation here if needed, wrapping around 72 characters.
If this closes an issue, mention it:
Closes #123
```
Follow the [conventional commits](https://www.conventionalcommits.org/) style when possible:
- `fix:` for bug fixes
- `feat:` for new features
- `docs:` for documentation changes
- `test:` for test changes
- `refactor:` for code cleanup
### 5. Testing and Quality
Before pushing, ensure your code is ready:
```bash
cargo fmt # Format code
cargo clippy # Run linter
cargo test # Run tests
cargo build --release # Build in release mode
```
All of these should pass before submitting a PR.
### 6. Push and Open a Pull Request
```bash
git push origin feature/your-feature-name
```
Then open a pull request on GitHub. Include:
- **Description:** What does this change do? Why?
- **Testing:** How did you test this? What should reviewers test?
- **Screenshots or examples** (if applicable)
- **Links to related issues** (e.g., "Closes #123")
We'll review your PR and provide feedback. Don't worry if we ask for changes—that's part of the process!
## Development Process
We follow Test-Driven Development (TDD) / Behavior-Driven Development (BDD):
### Red-Green-Refactor Cycle
1. **Red:** Write a test that fails (describes the desired behavior)
2. **Green:** Write minimal code to make the test pass
3. **Refactor:** Improve the code without changing behavior
See [WORKFLOW.md](docs/WORKFLOW.md) for more details on our development process.
## Code Style and Guidelines
- **Rust:** Follow [Rust API Guidelines](https://rust-lang.github.io/api-guidelines/). We use `rustfmt` for formatting.
- **Comments:** Write comments that explain *why*, not just *what*. The code itself shows what it does.
- **Type safety:** Leverage Rust's type system to prevent bugs. Prefer explicit types over type inference when it improves clarity.
- **Error handling:** Use Result/Option types appropriately. Avoid panicking except in truly unrecoverable situations.
- **Naming:** Use clear, descriptive names. Prefer `is_active` over `active` for booleans.
Run these before submitting:
```bash
cargo fmt --all
cargo clippy --all-targets -- -D warnings
```
## Human-Authored Core Code Policy
We are committed to human-authored, human-reviewed code for FeDIY's core:
- **Executable core code** (src/, tests/) must be written and understood by humans.
- **AI Assistants:** Agents may help with documentation, planning, housekeeping, and Nix environment management.
- **Implementation help:** When asking for coding guidance, you'll receive links to primary sources (especially the [Rust Book](https://doc.rust-lang.org/book/)), paraphrased explanations, and implementation checklists—not generated code.
This policy ensures code quality, maintainability, and learning. It doesn't prevent you from *using* AI tools; it just means you're responsible for understanding and authoring the final code.
## Architecture and Design
Before making large changes, review:
- [ARCHITECTURE.md](docs/ARCHITECTURE.md) — System design and component boundaries
- [ROADMAP.md](docs/ROADMAP.md) — Project phases and long-term direction
- [OPEN_QUESTIONS.md](docs/OPEN_QUESTIONS.md) — Unresolved design decisions
For significant changes, consider opening an issue or discussion first. This helps prevent duplicate work and ensures alignment with the project's direction.
## Pull Request Review Process
We value constructive, respectful code review:
- **Review timeframe:** We aim to provide initial feedback within 48 hours of a PR submission.
- **Expectations:** We may ask questions, suggest improvements, or request changes. This is normal!
- **Approval:** PRs need at least one approval from a maintainer before merging.
- **Passing checks:** All automated checks (formatting, linting, tests) must pass.
### For Reviewers
- Be respectful and constructive. Focus on the code, not the person.
- Explain *why* you're suggesting a change, not just that it should change.
- Acknowledge good work. Celebrate learning and growth.
- Ask questions rather than making demands.
## Licensing
All contributions are licensed under **CC BY-SA 4.0** (Creative Commons Attribution-ShareAlike 4.0). By contributing, you agree to this licensing.
- See [LICENSE](LICENSE) for details.
- This applies to all contributions (code, documentation, designs, etc.).
## Reporting Issues
Found a bug or have a feature request?
1. **Check existing issues** to avoid duplicates.
2. **Be clear and specific.**
- Include steps to reproduce for bugs.
- Explain your use case for features.
- Add error messages, logs, or screenshots if helpful.
3. **Include environment info:**
- OS and version
- Rust version (if relevant)
- How you built/ran FeDIY
## Security Issues
**Don't open public issues for security vulnerabilities!** See [SECURITY.md](SECURITY.md) for the responsible disclosure process.
## Getting Help
- **Stuck?** Open a GitHub Discussion or ask in an issue.
- **Questions about contribution?** Check [docs/WORKFLOW.md](docs/WORKFLOW.md) or ask.
- **Feedback on your PR?** Ask for help! Code review is collaborative.
- **Want to discuss design?** [OPEN_QUESTIONS.md](docs/OPEN_QUESTIONS.md) is a good place to start.
## Recognizing Contributors
We believe in recognizing contributions. Contributors are listed in:
- **GitHub:** Automatically in the repository's contributor graph
- **Release notes:** Major contributors mentioned in release announcements
- **Project documentation:** Long-term contributors highlighted
## Questions?
- **General questions:** Start a GitHub Discussion
- **Code of Conduct questions:** <conduct@moturpin.com>
- **Security issues:** <security@moturpin.com>
- **Other:** Open an issue and tag with `question`
---
Thank you for contributing! Together, we're building a federated DIY community that welcomes everyone. Happy coding!