skills/adynato-github/SKILL.md
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.
npx skillsauth add adynato/skills adynato-githubInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Use this skill when working with GitHub on Adynato projects.
Use the gh CLI for all GitHub operations instead of the web interface:
# Create PR
gh pr create --title "Title" --body "Description"
# View PR
gh pr view 123
# Check PR status
gh pr checks 123
# Merge PR
gh pr merge 123 --squash
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
### Automated
- [ ] Login with valid credentials returns token
- [ ] Login with invalid credentials returns 401
- [ ] Protected routes reject unauthenticated requests
- [ ] Logout invalidates token
### Manual
1. Sign in with a test account
2. Open a protected route
3. Confirm authenticated access works
4. Log out and confirm access is revoked
## Screenshots
(if UI changes)
## Related
- Closes #123
- Part of #456
EOF
)"
| Section | When Required | Purpose | |---------|---------------|---------| | Summary | Always | What and why in 2-3 sentences | | Changes | Always | List of files/areas modified | | Testing | Always | Automated coverage and explicit manual testing steps | | Screenshots | UI changes | Visual proof of changes | | Related | If applicable | Linked issues/PRs |
Manual testing steps are required in every PR description. Be specific about the exact flow, commands, requests, accounts, or environment used to verify the change.
For large deliverables, break work into small, stacked PRs that build on each other.
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)
# PR 1: Base branch
git checkout -b feat/user-api
# ... make changes ...
git push -u origin feat/user-api
gh pr create --base main --title "feat: add user API endpoints"
# PR 2: Stack on PR 1
git checkout -b feat/dashboard-data feat/user-api
# ... make changes ...
git push -u origin feat/dashboard-data
gh pr create --base feat/user-api --title "feat: add dashboard data fetching"
# PR 3: Stack on PR 2
git checkout -b feat/dashboard-ui feat/dashboard-data
# ... make changes ...
git push -u origin feat/dashboard-ui
gh pr create --base feat/dashboard-data --title "feat: add dashboard UI"
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.
When the base PR changes:
# Update your branch with changes from base
git checkout feat/dashboard-ui
git rebase feat/dashboard-data
git push --force-with-lease
When base PR merges:
# Rebase onto new base
git checkout feat/dashboard-data
git rebase main
git push --force-with-lease
# Update PR base branch
gh pr edit 102 --base main
| 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.
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>
feat/short-description # New features
fix/issue-description # Bug fixes
refactor/what-changed # Code refactoring
docs/what-documented # Documentation
test/what-tested # Test additions
# Create PR with labels
gh pr create --title "feat: thing" --label "enhancement" --label "needs-review"
# Create open PR
gh pr create --title "feat: thing"
# Request reviewers
gh pr edit 123 --add-reviewer @username
# Check CI status
gh pr checks 123 --watch
# View PR diff
gh pr diff 123
# Checkout PR locally
gh pr checkout 123
# Close PR
gh pr close 123
# Reopen PR
gh pr reopen 123
# List open PRs
gh pr list
# View PR comments
gh pr view 123 --comments
# Merge with squash (preferred)
gh pr merge 123 --squash --delete-branch
# Merge with rebase (for stacks)
gh pr merge 123 --rebase --delete-branch
When fixing review comments, follow this workflow for each comment.
If you are given a direct GitHub comment URL, treat it as an instruction to handle that exact thread end-to-end: inspect it, reply on that thread, resolve it if fixed or invalid, and explicitly tell the user if it remains unresolved.
Create a separate conventional commit for each review comment fix:
# Fix first comment
git add src/auth.ts
git commit -m "fix: add null check for user token
Addresses review comment about potential null reference"
# Fix second comment
git add src/api/users.ts
git commit -m "refactor: extract validation logic to separate function
Addresses review comment about function complexity"
# Fix third comment
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.
Every linked comment must get a thread reply. Do not fix code silently and move on.
If fixed or otherwise addressed:
Fixed in <commit-sha>
Or with more context:
Fixed in abc1234 - added null check before accessing token property.
If the comment is not valid or no code change is needed:
I do not think this change is needed because [reason].
Current behavior is intentional/correct for [explanation], so I am resolving this thread.
If the comment is still valid or not yet addressed:
After replying:
# View comments to get comment IDs
gh api repos/{owner}/{repo}/pulls/{pr}/comments
# Resolve fixed or invalid conversations after replying
# Leave unresolved conversations open
In the GitHub web UI: Click "Resolve conversation" only after your reply if the thread is addressed or invalid.
# 1. Read all comments
gh pr view 123 --comments
# 2. For each valid comment, fix and commit individually
git add src/auth.ts
git commit -m "fix: validate token expiry before use
Addresses review feedback on auth token handling"
# 3. Push all fixes
git push
# 4. Reply to each linked comment thread in GitHub UI or via API
gh api repos/adynato/myrepo/pulls/123/comments/456789/replies \
-f body="Fixed in $(git rev-parse --short HEAD)"
# 5. Resolve only threads that are fixed or invalid
# Leave still-valid threads open and tell the user they remain unresolved
| Scenario | GitHub reply | User report |
|----------|--------------|-------------|
| Fixed | "Fixed in abc1234" | "Resolved." |
| Fixed with explanation | "Fixed in abc1234 - moved validation to middleware as suggested" | "Resolved." |
| Invalid / no change needed | "Current behavior is intentional because [reason], so I am resolving this thread." | "Resolved as invalid / no change needed." |
| Still open / blocked | "I’m looking into this. [status or blocker]" | "This comment is still unresolved because [reason]." |
| Needs discussion | "I see your point, but [reasoning]. What do you think about [alternative]?" | "This comment is still unresolved pending discussion." |
| Won't fix (out of scope) | "Good catch, but out of scope for this PR. Created #456 to track." | "This comment is still unresolved for this PR; follow-up tracked in #456." |
| Question/clarification | "Good question - [explanation of why code works this way]" | "Resolved after clarification." |
tools
Work with Jira, Confluence, and Atlassian Cloud links via Atlassian MCP instead of browser automation. Covers reading `atlassian.net` URLs, preferring MCP over Puppeteer for tickets and pages, summarizing issue state and comments, and falling back only when visual inspection is explicitly needed or MCP is unavailable. Use when a prompt includes Jira tickets, Confluence pages, or Atlassian links.
development
General coding conventions for any repository. Covers writing for the human who owns the code, clear naming, clean structure, comments that explain why, and following existing linting and formatting rules. Use when writing or modifying code in any language, especially for refactors, utilities, tests, and business logic. Prefer this as baseline guidance unless a more specific skill applies.
development
Web development conventions for Adynato projects. Covers image optimization with img4web, asset management, component patterns, styling, and performance best practices. Use when building or modifying web applications, adding images/assets, or creating UI components.
development
Web API development conventions for Adynato projects. Covers API routes, middleware, authentication, error handling, validation, and response formats for Next.js and Node.js backends. Use when building or modifying API endpoints, server actions, or backend logic.