Pull Request Workflow
All helioy repos use squash merge. The PR title becomes the squash commit message, which release-please parses to generate changelogs and version bumps.
PR Title Format
PR titles MUST follow the Conventional Commits specification:
<type>(<scope>): <description>
Types
| Type | When | Appears in changelog |
|---|---|---|
feat |
New feature or capability | Yes (Features) |
fix |
Bug fix | Yes (Bug Fixes) |
perf |
Performance improvement | Yes (Performance) |
refactor |
Code restructuring, no behavior change | Hidden |
docs |
Documentation only | Hidden |
test |
Adding or updating tests | Hidden |
chore |
Maintenance, deps, CI | Hidden |
ci |
CI/CD changes | Hidden |
Scope
Optional. Use the crate or component name when the change is localized:
feat(cm-store): add FTS5 prefix query support
fix(cm-cli): handle broken pipe on MCP shutdown
refactor(cm-core): extract ScopePath validation
Omit scope for cross-cutting changes:
feat: implement tools.toml codegen pipeline
chore: update workspace dependencies
Examples
feat: implement cx_recall tool with FTS5 search
feat(cm-store): add content deduplication via BLAKE3
fix: remove isError flag from MCP error responses
refactor: split monolithic tools.rs into per-tool modules
test: add 31 integration tests for MCP tool handlers
chore: add CI and release workflows
docs: update CLAUDE.md with tool conventions
perf(cm-store): optimize scope ancestor walk query
Branch Commits
Branch commits do NOT need conventional commit format. The existing convention works fine:
worker[ALP-1400]: Implement tools.toml codegen pipeline
review[ALP-1367]: Fix MCP instructions placement
Only the PR title matters for release-please.
Workflow
- Push branch to remote with
-uflag - Create PR with
gh pr create - PR title follows conventional commits format above
- PR body includes summary bullets and test plan
- Squash merge into main preserves the PR title as the commit message
PR Body Template
## Summary
- <bullet points describing what changed and why>
## Test plan
- [ ] All workspace tests pass (`just test`)
- [ ] Clippy clean (`just check`)
- [ ] <additional verification steps>