Thank you for your interest in contributing to Spring Voyage. This document covers the workflow for the open-source platform.
See docs/developer/setup.md for prerequisites and build instructions.
- Bug reports: Use the "Bug Report" template.
- Feature requests: Use the "Feature Request" template.
- New interfaces/extension points: Use the "OSS Interface" template when proposing a new abstraction or extension point.
- Create a branch from
mainfor your work. - Make focused changes — one issue per PR.
- Write tests for all new public methods.
- Run
dotnet buildanddotnet testbefore opening a PR. - Run
dotnet format --verify-no-changesto check formatting. - Open a PR against
mainwith a clear description. - Reference the issue in your commit message:
Closes #N. - Use a Conventional Commits message —
CHANGELOG.mdis generated from these (see Commit messages and the changelog).
CHANGELOG.md is generated from Conventional Commit subjects by git-cliff — do not hand-edit it. The [Unreleased] section is regenerated from the commits on main (eng/release/update-changelog.sh, enforced by release.sh at each release), so what you write in the commit subject is what appears in the changelog:
- Use Conventional Commits:
type(scope): summary. The type picks the changelog group —feat→ Features,fix→ Bug fixes,perf→ Performance,refactor→ Refactor,docs→ Documentation.chore,ci,test,build, andstyleare omitted. - Write the summary for a reader — it is the user-facing line — and put the area in the
scope(e.g.fix(messaging): …). - Breaking changes: add
!after the type/scope (feat(api)!: …) or aBREAKING CHANGE:footer; they surface under Breaking changes. Also apply thebreaking-changelabel. Seedocs/developer/releases.mdfor the full policy. - The PR number GitHub appends on squash-merge (
(#NNN)) is auto-linked — no manual reference needed. - Earlier history below the marker in
CHANGELOG.mdis hand-curated and frozen; leave it untouched.
All PRs require review before merging. Reviewers check:
- Adherence to CONVENTIONS.md
- Test coverage
- Architecture alignment with the architecture index and the decision records
- No breaking changes to Core interfaces without discussion
All external contributors must sign a Contributor License Agreement before their first PR can be merged. The CLA grants CVOYA LLC a license to use your contributions, which is necessary to support the open core model (see LICENSE.md).
When you open your first PR, the CLA bot will comment with instructions. Signing is a one-time process.
What the CLA covers:
- You grant CVOYA LLC a perpetual, worldwide, non-exclusive license to use your contributions
- You retain full copyright over your contributions
- You confirm that you have the right to submit the contribution
All conventions are in CONVENTIONS.md. Key points:
- Namespace:
Cvoya.Spring.* - Target: .NET 10
Cvoya.Spring.Corehas ZERO external dependencies- System.Text.Json only
- Interface-first: define in Core, implement in Dapr
- Test naming:
MethodName_Scenario_ExpectedResult
- Concepts — the mental model
- Architecture — how it's built
- Decision Records — the "why" behind the major architectural choices
- Roadmap (archived) — historical (pre-v0.1) planning narrative; live progress now lives on the GitHub milestones
- Releases and Versioning — SemVer, release process, CI/CD
| Label | Meaning |
|---|---|
bug |
Something is broken |
enhancement |
New feature or improvement |
oss-interface |
New interface/extension point |
breaking-change |
Requires coordinated updates |
good first issue |
Suitable for new contributors |