# Contributing Guide > English is the primary language. A brief Chinese hint: 若需中文协助可在 Issue 中说明。 Thank you for investing time in contributing! This document describes how to propose changes and how we maintain quality and consistency across the project. ## Quick Links - Code of Conduct: ./CODE_OF_CONDUCT.md - Security Policy: ./SECURITY.md - Issues: https://github.com/CarmJos/configured/issues - Discussions / Q&A: (open an Issue if Discussions are disabled) ## Table of Contents 1. Principles 2. Scope of Contributions 3. Getting Started (Environment & Build) 4. Project Structure 5. Branching & Workflow 6. Issue Workflow 7. Pull Request Guidelines 8. Commit Message Convention 9. Coding Standards 10. Testing Guidelines 11. Documentation & JavaDoc 12. Dependency Policy 13. Versioning & Releases 14. Performance Expectations 15. Internationalization / Language 16. FAQ for Contributors 17. Attribution --- ## 1. Principles We value: correctness, clarity, minimalism, maintainability, security-by-default, and performance without premature complexity. Every contribution should move at least one of these forward while not regressing the others. ## 2. Scope of Contributions Acceptable contributions include (but are not limited to): - Bug fixes & test coverage improvements - Performance optimizations with measurable benefit - New configuration providers (storage backends) with generic value - Validation or serialization helpers - Documentation, examples, or tutorials - Tooling that improves developer productivity or release robustness Out-of-scope (likely to be declined): - Vendor lock‑in features narrowly targeting one proprietary platform (unless optional & isolated) - Large feature branches without prior design discussion - Unbounded abstraction that increases complexity with unclear user value ## 3. Getting Started (Environment & Build) Requirements: - JDK 8 (minimum). Later JDKs may work but target bytecode is 1.8. - Maven 3.8+ (Wrapper optional; project assumes standard mvn). Build all modules: ```bash mvn -q clean verify ``` Skip tests (NOT recommended for PR validation): ```bash mvn -q clean install -DskipTests ``` Run a single module: ```bash mvn -q -pl core -am test ``` Generate JavaDoc (already bound in build): ```bash mvn -q javadoc:javadoc ``` ## 4. Project Structure (High-level) - core/ : Fundamental abstractions (Configuration, Value types, factories) - features/ : Optional, orthogonal enhancements (validators, section, text, etc.) - providers/ : Concrete persistence / parsing backends (yaml, gson, hocon, sql, mongodb, temp) - demo/ : Usage demonstrations & sample scenarios Rules: - Core must not depend on feature or provider modules. - Features must not form cycles; prefer depending only on core. - Providers should keep external dependencies minimal and shaded/isolated only if necessary. ## 5. Branching & Workflow - main (or master): Stable; only fast‑forward / squash from reviewed PRs. - feature/: New feature work. Open draft PR early for feedback. - fix/-: Bug fix referencing an Issue. - chore/: Build, infra, docs improvements. Never force push to main. Force pushes allowed only to your own feature branches. ## 6. Issue Workflow 1. Search existing issues first to avoid duplication. 2. Provide reproduction steps (minimal code or config) for bugs. 3. Label suggestions as enhancement; performance items as perf. 4. For larger features, open a design issue summarizing: Problem, Motivation, Proposed API, Alternatives. ## 7. Pull Request Guidelines Checklist before opening a PR: - Linked to at least one Issue (unless trivial doc fix) - Passes `mvn verify` - Adds or updates tests covering new behavior / bug - Includes JavaDoc / README / CHANGELOG fragment if user-facing - No unrelated refactors or formatting churn - Minimal diff: avoid reordering imports unless enforced by style Review expectations: - Maintainers strive to respond within 5 business days. - Use constructive, action‑oriented comments. - Resolve conversations or explain why not. - Squash commits if they are noisy; retain meaningful logical grouping. ## 8. Commit Message Convention Use Conventional Commits (https://www.conventionalcommits.org/) with optional scope: ``` (): (optional)