| name | git-workflow |
| description | Git branch management, commit conventions, and PR creation workflow. Use for all tasks that require code changes, regardless of language or scope. |
Git Workflow
Standard Git workflow for all tasks in this repository.
⚠️ MANDATORY: Check Branch Before Starting ANY Task
This is the FIRST step for ANY task that involves code changes.
Before writing any code or making any changes, you MUST check the current branch:
git branch --show-current
Decision Flow
Current Branch?
│
├─ main → ❌ DO NOT work here
│ → Create a new branch first (see "Creating a New Branch")
│
├─ Feature branch for this task → ✅ Continue working
│
└─ Different feature branch → ⚠️ Ask user which branch to use
If on main Branch
NEVER make changes directly on main. Always create a new branch first:
git fetch origin
git reset --hard origin/main
git checkout -b {type}/{brief-description}-{issue-number}
If on Wrong Feature Branch
Ask the user:
"You are currently on branch {current-branch}. Should I:
- Continue working on this branch?
- Switch to
main and create a new branch for this task?"
Example Check Output
$ git branch --show-current
main
$ git branch --show-current
feature/add-taproot-support-123
Branch Management
Creating a New Branch
Always create from latest main:
git fetch origin
git checkout main
git reset --hard origin/main
git checkout -b {type}/{brief-description}-{issue-number}
Branch Naming Convention
Format: {type}/{brief-description}-{issue-number}
- Description should be short and meaningful (use kebab-case)
- Issue number at the end (just the number, no "issue-" prefix)
| Type | Prefix | Example |
|---|
| Feature | feature/ | feature/add-taproot-support-123 |
| Bug fix | fix/ | fix/db-connection-error-456 |
| Refactoring | refactor/ | refactor/clean-arch-layer-789 |
| Documentation | docs/ | docs/update-readme-311 |
| DevOps/CI | ci/ | ci/add-lint-workflow-100 |
| Chore | chore/ | chore/update-deps-200 |
Branch Rules
- Always from
main: Never branch from feature branches
- One issue = One branch: Create only one branch per issue
- Short-lived: Merge within days, not weeks
- Delete after merge: Keep repository clean
⚠️ Important: No Multiple Branches Per Issue
Do NOT create multiple branches for the same issue.
❌ Prohibited Pattern:
issue-123 → fix/first-attempt-123
→ fix/second-attempt-123 ← Do NOT create this
→ fix/another-fix-123 ← Do NOT create this either
✅ Correct Pattern:
issue-123 → fix/description-123
→ Create PR → Review → Merge
→ (If needed) Create new issue with new branch
Pre-Work Verification
Before creating a new branch, always check the following:
git branch -a | grep "{issue-number}"
gh pr list --search "{issue-number}"
- If existing branch exists: Continue working on that branch
- If existing PR exists: Merge the PR before starting new work
- If nothing exists: OK to create a new branch
Commit Conventions
This project uses Conventional Commits format.
Commit messages are validated by lefthook commit-msg hook.
Format
{type}({scope}): {brief description}
- {detail 1}
- {detail 2}
Closes #{issue_number}
Types (Required)
| Type | Description | Release Impact |
|---|
feat | New feature | MINOR |
fix | Bug fix | PATCH |
docs | Documentation only | - |
refactor | Code refactoring (no feature/fix) | - |
test | Adding or updating tests | - |
ci | CI/CD changes | - |
chore | Maintenance tasks | - |
build | Build system changes | - |
perf | Performance improvements | PATCH |
style | Code style (formatting, etc.) | - |
revert | Revert a previous commit | - |
Breaking Changes
Add ! after type/scope to indicate breaking changes:
feat(btc)!: change address format to bech32m only
fix!: remove deprecated API endpoint
Scope (Optional)
The following are suggested scopes, but other alphanumeric scopes are also permitted.
| Scope | Description |
|---|
btc | Bitcoin-related |
bch | Bitcoin Cash-related |
eth | Ethereum-related |
xrp | XRP-related |
db | Database |
api | API changes |
cli | CLI changes |
pr | PR review fixes |
Examples
git commit -m "feat(btc): add taproot address support
- Add bech32m encoding
- Update address validation
Closes #123"
git commit -m "fix: resolve database connection timeout
- Increase pool timeout
- Add retry logic
Closes #456"
git commit -m "docs: update architecture guide
- Add layer diagram
- Clarify dependency rules
Closes #789"
git commit -m "feat(btc)!: require bech32m for all taproot addresses
BREAKING CHANGE: Legacy address format no longer supported
Closes #999"
Validation Error
If commit message validation fails:
ERROR: Commit message does not follow Conventional Commits format.
Expected format: <type>(<scope>): <description>
Types: feat, fix, docs, refactor, test, ci, chore, build, perf, style, revert
Examples:
feat(btc): add taproot address support
fix: resolve database connection timeout
docs: update architecture guide
refactor(api): reorganize endpoint handlers
Your commit message: <your-invalid-commit-message>
Pull Request Creation
⚠️ MANDATORY: Ask Before Creating PR
Always ask the user before creating a PR.
Multi-phase tasks create multiple commits on a single branch.
Do not create a PR until all commits are complete.
After commits are pushed, ALWAYS ask:
> "Would you like me to create a PR? Or is there additional work to do?"
When to Ask
| Situation | Action |
|---|
| Single commit task | Ask before creating PR |
| Multi-phase task | Ask after ALL phases are complete |
| User explicitly requests PR | Create PR without asking |
Create PR
git push -u origin {branch-name}
gh pr create --title "{type}: {description}" --body "$(cat <<'EOF'
## Summary
- {change 1}
- {change 2}
## Test plan
- [ ] Verification commands pass
- [ ] Manual testing completed
Closes #{issue_number}
EOF
)"
PR Title Format
{type}: {description} (Closes #{issue_number})
Examples:
feat: add taproot address support (Closes #123)
fix: resolve database connection timeout (Closes #456)
docs: update architecture guide (Closes #789)
PR Description Template
## Summary
- Brief description of changes
## Changes
- Change 1
- Change 2
## Test plan
- [ ] Unit tests pass
- [ ] Integration tests pass (if applicable)
- [ ] Manual testing completed
## Related
- Closes #{issue_number}
- Related to #{other_issue}
Pre-Commit Self-Review (Required)
Before EVERY commit, you MUST complete self-review:
Step 1: Run Verification Commands
Execute verification commands for the modified file types:
| File Type | Required Commands |
|---|
Go (*.go) | make go-lint && make tidy && make check-build && make go-test |
TypeScript (*.ts) | See typescript-development skill (Bun for xrpl-grpc-server, npm for eth-contracts) |
Shell (*.sh) | make shfmt |
| Makefile | make mk-lint |
| SQL/HCL | make atlas-fmt && make atlas-lint |
Step 2: Complete Self-Review Checklist
Read the applicable language skill and verify ALL checklist items:
| File Type | Skill | Section to Check |
|---|
Go (*.go) | go-development | Self-Review Checklist |
| TypeScript/JS | typescript-development | Self-Review Checklist |
Shell (*.sh) | shell-scripts | Verification Checklist |
| Makefile | makefile-update | Verification Checklist |
| SQL/HCL | db-migration | Verification Checklist |
Step 3: Confirm Before Commit
Only proceed to commit after:
⚠️ DO NOT commit until all steps are verified.
Safety Rules
Allowed Operations
git add - Stage changes
git commit - Create commits
git push - Push to remote
git checkout -b - Create branches
NOT Allowed Operations
git push --force - Never force push
git merge - Don't merge locally
git rebase on shared branches - Avoid rebasing
- Direct commits to
main - Always use PRs
Quick Reference
New Issue Workflow
git branch -a | grep "{issue-number}"
gh pr list --search "{issue-number}"
git fetch origin && git checkout main && git reset --hard origin/main
git checkout -b {type}/{brief-description}-{issue-number}
git add <files>
git commit -m "{type}: {description}
Closes #{number}"
git push -u origin {branch-name}
gh pr create --title "{type}: {description}"
PR Review Fixes
git add <files>
git commit -m "fix(pr): address review comments"
git push