Branch naming
Create descriptive branch names based on the type of work:- Features:
feat/my-feature-name - Bug fixes:
fix/issue-description - Documentation:
docs/update-description - Refactoring:
refactor/component-name - Tests:
test/test-description
Development steps
Make your changes
Write your code following the code standards.
Commit your changes
Follow the commit message convention:
Push and create a pull request
Push your branch and create a PR on GitHub:Then create a PR with a detailed description.
Commit message convention
Erst follows the Conventional Commits specification:Types
feat: A new featurefix: A bug fixtest: Adding or improving testsdocs: Documentation changesrefactor: Code refactoring without feature changesperf: Performance improvementschore: Build, CI, or dependency updatesci: CI/CD configuration changes
Scopes
Use specific areas of the codebase:sim: Simulator (Rust)cli: CLI interface (Go)updater: Update mechanismtrace: Trace vieweranalyzer: Transaction analyzerrpc: RPC client
Examples
Commit rules
- Keep subject under 50 characters
- Use imperative mood: “add” not “added” or “adds”
- No period at the end of the subject
- Provide detailed explanation in the body if the change is non-obvious
- Reference related issues:
Closes #350,Refs #343
Pull request structure
Create clear, well-documented pull requests:PR title
Follow the same format as commit messages:PR description template
PR checks
Before submitting, ensure:- All CI checks pass
- Code coverage doesn’t decrease
- All tests pass locally
- Strict linting passes (
make lint-all-strict) - Documentation is updated if needed
The CI pipeline will automatically run tests, linting, and coverage checks. PRs with failing checks will not be merged.
Formatting and linting
Run formatting and linting before every commit:Format code
Run linting
Using pre-commit hooks
Install pre-commit hooks to automatically check your code: Pre-commit hooks will automatically:- Format Go code with
gofmt - Format Rust code with
cargo fmt - Run
golangci-lint - Run
cargo clippy - Check for merge conflicts
- Validate YAML files
Code review checklist
When reviewing PRs, ensure:- Code follows naming and style conventions
- Error handling is appropriate
- Tests are adequate and pass
- Documentation is clear and complete
- No unnecessary dependencies added
- Performance implications considered
- Security implications reviewed
- Commit messages follow convention
- No dead code or unused variables
- Linting passes without suppressions (unless justified)
Common development tasks
Building the project
Building the project
Building for specific OS
Building for specific OS
Cleaning build artifacts
Cleaning build artifacts
Installing dependencies
Installing dependencies
Updating dependencies
Updating dependencies
Addressing review feedback
When maintainers request changes:- Make the requested changes in your local branch
- Commit with a descriptive message:
fix: address review comments on error handling - Push to your branch:
git push origin feat/my-feature - Reply to comments explaining your changes
- Re-request review when ready
Don’t force-push unless you’re rebasing or squashing commits. Regular pushes preserve the review history.
Rebasing and squashing
Before merging, you may be asked to rebase or squash commits:Getting unblocked
If you’re stuck:- Review the documentation in
docs/ - Check existing issues for similar problems
- Ask in GitHub Discussions for general questions
- Create an issue for specific bugs or feature questions
- Tag maintainers in your PR if you need guidance
Important reminders
- No emojis in commit messages or PR titles
- No vague messages like “fixes stuff” or “updates things”
- Always run strict linting before pushing
- All tests must pass before requesting review
- Update documentation when changing functionality
- Reference issues in commit messages and PRs