Commit and PR conventions
Treat the PR title and initial body as the exact commit message that squash-and-merge will land.
Commit message
- Read repository instructions first. Derive scopes with the repository-local
commit-scopeskill. If unavailable, use explicit repository rules or omit the scope rather than inventing one. - Follow Conventional Commits:
<type>[optional scope][!]: <description>. - Target 50 characters and describe the resulting behavior. Do not drop repository-required scopes to meet that target; when they make it impossible, keep the remaining description as concise as practical.
- Separate subject, body, and footers with blank lines.
- For standalone commits, wrap body lines at 72 characters. Explain why the change was needed, how it solves it, and material side effects.
- Put an existing ticket key or link in a footer, not the subject:
Issue: PROJECT-123. Follow repository-specific footer format when an issue exists. When none exists, omit the footer rather than fabricatingIssue: N/A. - Add applicable Conventional Commit footers and
Co-authored-by: Name <email>trailers for collaborators. - Choose the type by the affected surface, not by whether the change fixes a defect.
- Use
cifor CI, workflow, and automation changes, including fixes to that automation. - Use
fixfor product or runtime bugs and non-feature changes to externally consumed public API boundaries. - Use
featfor features,buildfor build or dependencies,chorefor non-product tools or configuration,docsfor documentation only,stylefor non-semantic edits,refactorfor internal restructuring,testfor tests, andperffor performance. - Mark breaking changes with
!or aBREAKING CHANGEfooter without changing an otherwise accurate type. - Keep every non-squashed development commit coherent and conventional.
fix(storage): preserve collated indexes
Normalize server-expanded collations before comparing index definitions.
Issue: PROJECT-123
Pull request
- Set the title to the intended squash commit subject exactly.
- Set the initial body to the intended squash commit body and footers exactly. Exclude PR-only preambles, checklists, and implementation journals.
- Do not manually wrap the PR body; GitHub handles display wrapping.
- Keep permanent history concise: record motivation, material behavior, and side effects.
- Put experiments, alternatives, extensive validation, and implementation chronology in follow-up comments.
- Update the title and initial body as the implementation evolves.
- Before opening, updating, or merging, read
title + blank line + bodyas one commit message and correct any mismatch.