Thank you for your interest in contributing to WaveHouse! This guide will help you get started.
Looking for help instead of contributing code? See SUPPORT.md for where to ask questions, report bugs, and what the alpha-stage response cadence is. Found a security issue? Use the private channel in SECURITY.md, not a public issue.
- Fork the repository and clone your fork.
- Follow the Development Guide to set up your local environment.
- Create a feature branch:
git checkout -b feat/my-feature
Open a bug report issue with:
- WaveHouse version
- Steps to reproduce
- Expected vs. actual behavior
- Relevant logs or error messages
Open a feature request issue describing:
- The problem you're trying to solve
- Your proposed solution
- Any alternatives you've considered
-
Ensure your changes pass all checks:
make ci # full local pipeline: verify + builds + all test suites (Docker required)The pre-push hook (installed by
make tools) blocks a push until the tree has been validated locally: a code change needsmake ci, a docs/prose-only change needs onlymake verify(the same split CI makes).make lint/make test/make buildare fast inner-loop subsets. -
Write tests for new functionality. Unit tests go alongside the code in
internal/. Integration tests go intests/with the//go:build integrationtag. -
Update documentation if your change affects:
- API endpoints → update
docs/src/content/docs/api.md - Configuration options → update
docs/src/content/docs/configuration.md - Deployment → update
docs/src/content/docs/deployment.md - Architecture → update
docs/src/content/docs/architecture.md
- API endpoints → update
-
Follow the commit message format (see below).
-
Open a pull request against
main.
Use Conventional Commits:
<type>(<scope>): <description>
[optional body]
Types:
feat— New featurefix— Bug fixdocs— Documentation onlyrefactor— Code change that neither fixes a bug nor adds a featuretest— Adding or updating testschore— Miscellaneous tasks that don't fit elsewhereci— CI/CD and GitHub Actions changesdeps— Dependency version bumps (typically opened by Dependabot)build— Build system changes (Makefile, Dockerfile, goreleaser)perf— Performance improvementsrevert— Reverting a previous commitstyle— Formatting changes with no functional effect
The PR title is enforced by the required CI check's PR title job (.github/workflows/ci.yml): Conventional Commits format, ≤ 72 characters, lowercase-first subject with no trailing period — it becomes the squash-merge commit message on main, so keep it parseable. Check a title locally with scripts/lint-pr-title.sh "<title>" before opening the PR.
Examples:
feat(api): add rate limiting middleware
fix(dedupe): handle external DB timeout gracefully
docs(api): add SSE authentication example
test(cache): add tiered cache stampede test
- Formatting: Code must be formatted with
gofumpt(a strict superset ofgofmt).make fmtchecks it (CI runs the same target);make fixapplies it. - Linting: All lint checks in
.golangci.ymlmust pass (seemake lint). - Naming: Follow Go naming conventions.
- Interfaces: Define interfaces where they are consumed, not where they are implemented.
- Errors: Return errors rather than panicking. Use
fmt.Errorf("context: %w", err)for wrapping.
All submissions require review before merging. Reviewers will look for:
- Correctness and test coverage
- Adherence to existing architecture patterns
- Documentation updates where applicable
- No security regressions (role-based access control, input validation)
By contributing, you agree that your contributions will be licensed under the Apache License 2.0.