Thanks for your interest in contributing!
- Fork and clone the repo
- Run
task setup(or manually:cp .env.example .env, add your API token,go mod download) - Run
task testto verify everything works
This project uses bd (beads) for issue tracking. Do NOT use markdown TODOs or external trackers.
# Find ready work
bd ready
# Create new issues
bd create "Issue title" -t bug|feature|task -p 0-4
# Claim and work on an issue
bd update bd-42 --status in_progress
# Complete work
bd close bd-42 --reason "Implemented feature X"bug- Something brokenfeature- New functionalitytask- Work item (tests, docs, refactoring)epic- Large feature with subtaskschore- Maintenance (dependencies, tooling)
0- Critical (security, data loss, broken builds)1- High (major features, important bugs)2- Medium (default, nice-to-have)3- Low (polish, optimization)4- Backlog (future ideas)
- Write self-contained issues with clear implementation steps
- Link discovered work:
bd create "Found bug" --deps discovered-from:bd-123 - Always commit
.beads/issues.jsonlwith code changes
See CLAUDE.md for complete bd documentation.
Before submitting:
task format # Format code (gofmt)
task lint # Run golangci-lint (all issues)
task lint-quality # Run golangci-lint (new violations only, same as CI)
task test # Run testsCI now hard-fails on new lint violations. The linter is configured to only report issues introduced in your branch (compared to origin/main). This means:
- Existing violations won't block your PR
- New violations you introduce will cause CI to fail
- Use
task lint-qualitylocally to preview CI behavior
To fix failing CI lint:
- Run
task lint-qualityto see new violations - Fix the reported issues
- Commit and push the fixes
- Create a feature branch from
main - Make focused, atomic commits using Conventional Commits
feat: add deck exportfix: handle empty card list
- Ensure tests pass and lint is clean
- Open a PR with a clear description
This project uses GitHub Actions for automated releases with GoReleaser.
- Ensure quality:
task test && task lint - Test locally:
task snapshot && ls dist/ - Create and push tag:
git tag -a v1.0.0 -m "Release v1.0.0: Description" git push origin v1.0.0 - GitHub Actions automatically builds all platforms and publishes to GitHub Releases
- Follow Semantic Versioning: Major.Minor.Patch
feat:commits → Minor version bumpfix:commits → Patch version bump- Breaking changes → Major version bump
- CLAUDE.md: Project overview, architecture, workflow guidance
- README.md: User-facing documentation, quick start, features
- Code comments: Explain "why", not "what"
- CSV exports: Document field definitions in CSV_EXPORTS.md
- Planning docs: Store in
history/directory (ephemeral)
Open an issue or start a discussion.