| name | adynato-github |
| description | GitHub workflow conventions for Adynato projects. Covers creating PRs with gh CLI, writing thorough descriptions, and using stacked PRs for large deliverables. Use when creating pull requests, managing branches, or breaking down large features. |
GitHub Skill
Use this skill when working with GitHub on Adynato projects.
Always Use gh CLI
Use the gh CLI for all GitHub operations instead of the web interface:
gh pr create --title "Title" --body "Description"
gh pr view 123
gh pr checks 123
gh pr merge 123 --squash
PR Descriptions
Every PR must have a thorough description. Use this template:
gh pr create --title "feat: add user authentication" --body "$(cat <<'EOF'
## Summary
Brief description of what this PR does and why.
- Added JWT-based authentication flow
- Implemented login/logout endpoints
- Added auth middleware for protected routes
## Changes
- `lib/auth.ts` - Auth utilities and token management
- `app/api/auth/login/route.ts` - Login endpoint
- `app/api/auth/logout/route.ts` - Logout endpoint
- `middleware.ts` - Route protection
## Testing
- [ ] Login with valid credentials returns token
- [ ] Login with invalid credentials returns 401
- [ ] Protected routes reject unauthenticated requests
- [ ] Logout invalidates token
## Screenshots
(if UI changes)
## Related
- Closes #123
- Part of #456
EOF
)"
Required Sections
| Section | When Required | Purpose |
|---|
| Summary | Always | What and why in 2-3 sentences |
| Changes | Always | List of files/areas modified |
| Testing | Always | How to verify it works |
| Screenshots | UI changes | Visual proof of changes |
| Related | If applicable | Linked issues/PRs |
Stacked PRs
For large deliverables, break work into small, stacked PRs that build on each other.
Why Stack PRs
- Easier review - Reviewers can focus on one concern at a time
- Faster merges - Small PRs get approved faster
- Lower risk - Each PR is independently deployable
- Better history - Clear progression of changes
Stacking Strategy
For a feature like "Add user dashboard":
PR 1: Add user API endpoints (base)
↓
PR 2: Add dashboard data fetching (stacked on PR 1)
↓
PR 3: Add dashboard UI components (stacked on PR 2)
↓
PR 4: Add dashboard tests (stacked on PR 3)
Creating Stacked PRs
git checkout -b feat/user-api
git push -u origin feat/user-api
gh pr create --base main --title "feat: add user API endpoints"
git checkout -b feat/dashboard-data feat/user-api
git push -u origin feat/dashboard-data
gh pr create --base feat/user-api --title "feat: add dashboard data fetching"
git checkout -b feat/dashboard-ui feat/dashboard-data
git push -u origin feat/dashboard-ui
gh pr create --base feat/dashboard-data --title "feat: add dashboard UI"
Stack Description
In stacked PRs, note the relationship:
## Summary
Adds dashboard UI components.
## Stack
This PR is part of a stack:
1. #101 - Add user API endpoints ← **merged**
2. #102 - Add dashboard data fetching ← **base**
3. **#103 - Add dashboard UI** ← you are here
4. #104 - Add dashboard tests
Please review and merge in order.
Updating Stacked PRs
When the base PR changes:
git checkout feat/dashboard-ui
git rebase feat/dashboard-data
git push --force-with-lease
When base PR merges:
git checkout feat/dashboard-data
git rebase main
git push --force-with-lease
gh pr edit 102 --base main
PR Size Guidelines
| Size | Lines Changed | Review Time | Recommendation |
|---|
| XS | < 50 | Minutes | Ideal |
| S | 50-200 | < 1 hour | Good |
| M | 200-500 | 1-2 hours | Acceptable |
| L | 500-1000 | 2-4 hours | Split if possible |
| XL | > 1000 | Days | Must split |
Target: Keep PRs under 300 lines changed.
Commit Messages
Use conventional commits:
feat: add user authentication
fix: resolve login redirect loop
docs: update API documentation
refactor: extract auth utilities
test: add auth endpoint tests
chore: update dependencies
Format:
<type>: <short description>
<optional body explaining why>
<optional footer with references>
Branch Naming
feat/short-description # New features
fix/issue-description # Bug fixes
refactor/what-changed # Code refactoring
docs/what-documented # Documentation
test/what-tested # Test additions
Common gh Commands
gh pr create --title "feat: thing" --label "enhancement" --label "needs-review"
gh pr create --title "wip: thing" --draft
gh pr edit 123 --add-reviewer @username
gh pr checks 123 --watch
gh pr diff 123
gh pr checkout 123
gh pr close 123
gh pr reopen 123
gh pr list
gh pr view 123 --comments
Review Process
- Self-review first - Read your own diff before requesting review
- CI must pass - Don't request review until checks are green
- Respond to feedback - Address or discuss all comments
- Squash on merge - Keep main history clean
gh pr merge 123 --squash --delete-branch
gh pr merge 123 --rebase --delete-branch
Addressing PR Comments
When fixing review comments, follow this workflow for each comment:
1. Make Individual Commits
Create a separate conventional commit for each review comment fix:
git add src/auth.ts
git commit -m "fix: add null check for user token
Addresses review comment about potential null reference"
git add src/api/users.ts
git commit -m "refactor: extract validation logic to separate function
Addresses review comment about function complexity"
git add src/utils.ts
git commit -m "fix: handle edge case for empty array
Addresses review comment about missing edge case handling"
Do NOT batch multiple comment fixes into one commit. Each fix should be atomic and traceable.
2. Reply to the Comment
After committing the fix, reply to the review comment:
If fixed:
Fixed in <commit-sha>
Or with more context:
Fixed in abc1234 - added null check before accessing token property.
If not valid or won't fix:
I don't think this change is necessary because [reason].
[Explanation of why current implementation is correct/preferred]
Or:
This is intentional - [explanation]. Happy to discuss further if you disagree.
3. Resolve the Comment
After replying, resolve the conversation:
gh api repos/{owner}/{repo}/pulls/{pr}/comments
In the GitHub web UI: Click "Resolve conversation" after your reply.
Complete Workflow Example
gh pr view 123 --comments
git add src/auth.ts
git commit -m "fix: validate token expiry before use
Addresses review feedback on auth token handling"
git push
gh api repos/adynato/myrepo/pulls/123/comments/456789/replies \
-f body="Fixed in $(git rev-parse --short HEAD)"
Comment Response Templates
| Scenario | Response |
|---|
| Fixed | "Fixed in abc1234" |
| Fixed with explanation | "Fixed in abc1234 - moved validation to middleware as suggested" |
| Needs discussion | "I see your point, but [reasoning]. What do you think about [alternative]?" |
| Won't fix (valid reason) | "Intentionally kept as-is because [reason]. The tradeoff is [explanation]." |
| Won't fix (out of scope) | "Good catch, but out of scope for this PR. Created #456 to track." |
| Question/clarification | "Good question - [explanation of why code works this way]" |
Rules
- One commit per comment - Makes it easy to trace what fixed what
- Always reply - Never leave comments unaddressed
- Always resolve - Clean up the conversation thread
- Reference commits - Include SHA so reviewer can verify the fix
- Be respectful - Even when disagreeing, explain your reasoning
- Create issues for scope creep - If a comment suggests something bigger, create an issue instead