brainstorming
Structured design dialogue that validates ideas before implementation begins.
git-issue-updater
Update GitHub issues and JIRA tickets with commit progress including user, date, time, and consistent documentation formatting for traceability
Full skill instructions
I provide automatic issue progress updates for both GitHub and JIRA after commits are made:
Use this framework when:
This is a framework skill - it provides issue update functionality that other skills use.
Purpose: Get all relevant details from the most recent commit
Git Commands for Commit Info:
# Get latest commit hash
COMMIT_HASH=$(git rev-parse HEAD)
# Get commit message (subject and body)
COMMIT_MSG=$(git log -1 --pretty=%B)
# Get commit author
COMMIT_AUTHOR=$(git log -1 --pretty=%an)
# Get commit author email
COMMIT_EMAIL=$(git log -1 --pretty=%ae)
# Get commit date and time in ISO 8601 format
COMMIT_DATE=$(git log -1 --date=iso8601 --pretty=%aI)
# Get commit date in human-readable format
COMMIT_DATE_HUMAN=$(git log -1 --date=short --pretty=%aI)
# Get commit time (24-hour format with timezone)
COMMIT_TIME=$(git log -1 --date=format:%H:%M%z --pretty=%aI)
# Get list of changed files
CHANGED_FILES=$(git show --name-only --pretty=format: HEAD | grep -v "^$")
# Get file change statistics
FILE_STATS=$(git diff --stat HEAD~1 HEAD)
Expected Output Example:
COMMIT_HASH: "5f3a2b1c4d5e6f7"
COMMIT_MSG: "feat(auth): add OAuth2 support"
COMMIT_AUTHOR: "John Doe"
COMMIT_EMAIL: "[email protected]"
COMMIT_DATE: "2024-01-25T14:30:45+08:00"
COMMIT_DATE_HUMAN: "2024-01-25"
COMMIT_TIME: "14:30+0800"
CHANGED_FILES: "src/auth/oauth.ts
src/auth/token.ts
src/api/auth.ts"
Purpose: Extract GitHub issue number or JIRA ticket key from commit message
GitHub Issue Detection:
# Extract issue number from commit message (format: #123)
ISSUE_NUM=$(echo "$COMMIT_MSG" | grep -oE '#[0-9]+' | head -1 | sed 's/#//')
if [ -n "$ISSUE_NUM" ]; then
ISSUE_TYPE="github"
ISSUE_REF="#$ISSUE_NUM"
ISSUE_URL="https://github.com/$REPO_OWNER/$REPO_NAME/issues/$ISSUE_NUM"
fi
JIRA Ticket Detection:
# Extract JIRA ticket key from commit message (format: PROJECT-123)
TICKET_KEY=$(echo "$COMMIT_MSG" | grep -oE '[A-Z]+-[0-9]+' | head -1)
if [ -n "$TICKET_KEY" ]; then
ISSUE_TYPE="jira"
ISSUE_REF="$TICKET_KEY"
TICKET_URL="https://company.atlassian.net/browse/$TICKET_KEY"
fi
Combined Detection Logic:
# Try GitHub first
ISSUE_NUM=$(echo "$COMMIT_MSG" | grep -oE '#[0-9]+' | head -1 | sed 's/#//')
# If no GitHub issue, try JIRA
if [ -z "$ISSUE_NUM" ]; then
TICKET_KEY=$(echo "$COMMIT_MSG" | grep -oE '[A-Z]+-[0-9]+' | head -1)
if [ -n "$TICKET_KEY" ]; then
ISSUE_TYPE="jira"
ISSUE_REF="$TICKET_KEY"
fi
else
ISSUE_TYPE="github"
ISSUE_REF="#$ISSUE_NUM"
fi
# If neither found, ask user or use branch name
if [ -z "$ISSUE_TYPE" ]; then
BRANCH_NAME=$(git branch --show-current)
# Check if branch name contains issue reference
if echo "$BRANCH_NAME" | grep -qE '^[0-9]+$'; then
ISSUE_TYPE="github"
ISSUE_REF="#$BRANCH_NAME"
elif echo "$BRANCH_NAME" | grep -qE '[A-Z]+-[0-9]+$'; then
ISSUE_TYPE="jira"
ISSUE_REF="$BRANCH_NAME"
else
echo "⚠️ No issue reference found in commit message or branch name"
echo " Please manually specify issue to update"
read -p "Enter issue/ticket reference: " ISSUE_REF
fi
fi
echo "Detected issue type: $ISSUE_TYPE"
echo "Issue reference: $ISSUE_REF"
Purpose: Create a consistent, well-formatted progress update
Comment Template:
## Progress Update - <Date> at <Time>
**Commit**: `<commit-hash>`
**Author**: `<user>` (<email>)
**Commit Message**: `<commit-message>`
### Changes Made
- [ ] <file1> - <brief description>
- [ ] <file2> - <brief description>
- [ ] <file3> - <brief description>
### Statistics
- Files changed: <count>
- Lines added: <+count>
- Lines removed: <-count>
### Commit Link
<platform-specific-link>
### Files Changed
Filled Example:
## Progress Update - 2024-01-25 at 14:30 (UTC+08:00)
**Commit**: `5f3a2b1c4d5e6f7`
**Author**: John Doe ([email protected])
**Commit Message**: feat(auth): add OAuth2 support for third-party providers
### Changes Made
- [x] `src/auth/oauth.ts` - Implement OAuth2 authentication flow
- [x] `src/auth/token.ts` - Add token refresh mechanism
- [x] `src/api/auth.ts` - Update API endpoints for OAuth
### Statistics
- Files changed: 3
- Lines added: +245
- Lines removed: -12
### Commit Link
[View on GitHub](https://github.com/org/repo/commit/5f3a2b1c4d5e6f7)
### Files Changed
- `src/auth/oauth.ts` (+150 lines)
- `src/auth/token.ts` (+95 lines)
- `src/api/auth.ts` (-12 lines, +12 lines)
JIRA Comment Template:
## Progress Update
**Commit**: `5f3a2b1c4d5e6f7`
**Date**: 2024-01-25 14:30 UTC+08:00
**Author**: John Doe ([email protected])
### Work Completed
- [x] Implement OAuth2 authentication flow
- [x] Add token refresh mechanism
- [x] Update API endpoints
### Files Changed
- `src/auth/oauth.ts`
- `src/auth/token.ts`
- `src/api/auth.ts`
### Statistics
Files changed: 3
Lines added: +245
Lines removed: -12
### Next Steps
1. Add error handling for OAuth failures
2. Write integration tests
3. Update documentation
Purpose: Add progress comment to GitHub issue
GitHub CLI Command:
# Get repository info
REPO_OWNER=$(gh repo view --json ownerLogin --jq '.ownerLogin')
REPO_NAME=$(gh repo view --json name --jq '.name')
# Construct commit URL
COMMIT_URL="https://github.com/${REPO_OWNER}/${REPO_NAME}/commit/${COMMIT_HASH}"
# Add comment to GitHub issue
gh issue comment "$ISSUE_NUM" --body "$COMMENT_BODY"
echo "✅ Comment added to GitHub issue #$ISSUE_NUM"
GitHub Comment Script:
#!/bin/bash
# update-github-issue.sh
# Extract commit info
COMMIT_HASH=$(git rev-parse HEAD)
COMMIT_MSG=$(git log -1 --pretty=%s)
COMMIT_AUTHOR=$(git log -1 --pretty=%an)
COMMIT_EMAIL=$(git log -1 --pretty=%ae)
COMMIT_DATE=$(git log -1 --date=short --pretty=%aI)
COMMIT_TIME=$(git log -1 --date=format:%H:%M --pretty=%aI)
# Extract issue number
ISSUE_NUM=$(echo "$COMMIT_MSG" | grep -oE '#[0-9]+' | head -1 | sed 's/#//')
if [ -z "$ISSUE_NUM" ]; then
echo "❌ No GitHub issue number found in commit message"
exit 1
fi
# Get repository info
REPO_OWNER=$(gh repo view --json ownerLogin --jq '.ownerLogin')
REPO_NAME=$(gh repo view --json name --jq '.name')
COMMIT_URL="https://github.com/${REPO_OWNER}/${REPO_NAME}/commit/${COMMIT_HASH}"
# Get file statistics
FILE_STATS=$(git diff --stat HEAD~1 HEAD)
# Create comment body
COMMENT_BODY=$(cat <<EOF
## Progress Update - ${COMMIT_DATE} at ${COMMIT_TIME}
**Commit**: \`$COMMIT_HASH\`
**Author**: $COMMIT_AUTHOR ($COMMIT_EMAIL)
**Commit Message**: $COMMIT_MSG
### Files Changed
\`\`\`
$FILE_STATS
\`\`\`
### Commit Link
[View on GitHub]($COMMIT_URL)
### File List
$(git show --name-only --pretty=format: HEAD | grep -v "^$" | sed 's/^/- /')
EOF
)
# Add comment to issue
gh issue comment "$ISSUE_NUM" --body "$COMMENT_BODY"
if [ $? -eq 0 ]; then
echo "✅ Successfully updated GitHub issue #$ISSUE_NUM"
echo " Comment URL: https://github.com/${REPO_OWNER}/${REPO_NAME}/issues/${ISSUE_NUM}"
else
echo "❌ Failed to update GitHub issue"
exit 1
fi
Purpose: Add progress comment to JIRA ticket
JIRA API Command:
# Cloud ID (get from environment or use default)
CLOUD_ID="${ATLASSIAN_CLOUD_ID:-<your-cloud-id>}"
# Ticket key (extracted from commit message)
TICKET_KEY="$ISSUE_REF"
# Add comment to JIRA ticket
atlassian_addCommentToJiraIssue \
--cloudId "$CLOUD_ID" \
--issueIdOrKey "$TICKET_KEY" \
--commentBody "$COMMENT_BODY"
echo "✅ Comment added to JIRA ticket $TICKET_KEY"
JIRA Comment Script:
#!/bin/bash
# update-jira-ticket.sh
# Extract commit info
COMMIT_HASH=$(git rev-parse HEAD)
COMMIT_MSG=$(git log -1 --pretty=%s)
COMMIT_AUTHOR=$(git log -1 --pretty=%an)
COMMIT_EMAIL=$(git log -1 --pretty=%ae)
COMMIT_DATE=$(git log -1 --date=short --pretty=%aI)
COMMIT_TIME=$(git log -1 --date=format:%H:%M --pretty=%aI)
# Extract ticket key
TICKET_KEY=$(echo "$COMMIT_MSG" | grep -oE '[A-Z]+-[0-9]+' | head -1)
if [ -z "$TICKET_KEY" ]; then
echo "❌ No JIRA ticket key found in commit message"
exit 1
fi
# Get file statistics
FILE_STATS=$(git diff --stat HEAD~1 HEAD)
# Cloud ID
CLOUD_ID="${ATLASSIAN_CLOUD_ID:-<your-cloud-id>}"
# Create comment body
COMMENT_BODY=$(cat <<EOF
## Progress Update
**Commit**: \`$COMMIT_HASH\`
**Date**: $COMMIT_DATE $COMMIT_TIME UTC
**Author**: $COMMIT_AUTHOR ($COMMIT_EMAIL)
### Work Completed
$COMMIT_MSG
### Files Changed
\`\`\`
$FILE_STATS
\`\`\`
### File List
$(git show --name-only --pretty=format: HEAD | grep -v "^$" | sed 's/^/- /')
### Commit Details
- **Branch**: $(git branch --show-current)
- **Repository**: $(git remote get-url origin)
- **Timestamp**: $COMMIT_DATE $COMMIT_TIME
EOF
)
# Add comment to JIRA ticket
atlassian_addCommentToJiraIssue \
--cloudId "$CLOUD_ID" \
--issueIdOrKey "$TICKET_KEY" \
--commentBody "$COMMENT_BODY"
if [ $? -eq 0 ]; then
echo "✅ Successfully updated JIRA ticket $TICKET_KEY"
echo " Ticket URL: https://company.atlassian.net/browse/$TICKET_KEY"
else
echo "❌ Failed to update JIRA ticket"
exit 1
fi
Purpose: Support multiple commits with appropriate update strategy
Update Strategies:
Strategy 1: Per-Commit Updates
# Each commit gets its own comment
# Use after each commit
git-commit-update # Calls the appropriate update script
Strategy 2: Cumulative Updates
# Combine multiple commits into one update
# Use at the end of a session or before PR
git-session-update
Strategy 3: Checkpoint Updates
# Update at specific milestones (e.g., after completing a phase)
# Use manual triggers or CI/CD milestones
git-checkpoint-update
Incremental Update Example:
## Progress Update #2 - 2024-01-25 at 16:45
Since the last update, the following work has been completed:
### Commits Made
1. **feat(auth): add OAuth2 support** (14:30)
2. **fix(auth): handle token refresh errors** (15:15)
3. **test(auth): add OAuth integration tests** (16:30)
### Files Changed
- `src/auth/oauth.ts` (+245 lines)
- `src/auth/token.ts` (+150 lines, -50 lines)
- `src/api/auth.ts` (+95 lines, -12 lines)
- `src/auth/__tests__/oauth.test.ts` (+180 lines)
### Total Statistics
- Commits: 3
- Files changed: 4
- Total lines added: +670
- Total lines removed: -62
### Next Steps
- [ ] Update documentation for OAuth flow
- [ ] Code review
- [ ] Create pull request
Purpose: Confirm comment was successfully added
GitHub Verification:
# List recent comments on issue
gh issue view "$ISSUE_NUM" --json comments --jq '.comments | length'
# View last comment
gh issue view "$ISSUE_NUM" --json comments --jq '.comments[-1]'
# Verify comment content contains commit hash
gh issue view "$ISSUE_NUM" --json comments --jq \
'.comments[] | select(.body | contains("$COMMIT_HASH")) | length'
JIRA Verification:
# Get issue details including comments
atlassian_getJiraIssue \
--cloudId "$CLOUD_ID" \
--issueIdOrKey "$TICKET_KEY" \
--expand comments
# Check if comment was added
# Verify the last comment matches the commit hash
Every issue update must include:
| Field | Description | Example |
|---|---|---|
| Date | ISO 8601 or readable format | 2024-01-25 |
| Time | 24-hour format with timezone | 14:30 (UTC+08:00) |
| User | Commit author name | John Doe |
| Author email (optional) | [email protected] | |
| Commit Hash | Full SHA or short SHA | 5f3a2b1c4d5e6f7 |
| Commit Message | Subject line or full message | feat(auth): add OAuth2 |
| Files Changed | List of modified files | src/auth/oauth.ts |
| Statistics | Files changed, +lines, -lines | Files: 3, +245, -12 |
ISO 8601 Format (Recommended):
2024-01-25T14:30:45+08:00
Human-Readable Format:
2024-01-25 at 14:30 (UTC+08:00)
Timezone Handling:
GitHub Issue Update:
## Progress Update - 2024-01-25 at 14:30 UTC
**Commit**: [`5f3a2b1c`](https://github.com/org/repo/commit/5f3a2b1c)
**Author**: John Doe ([email protected])
**Commit Message**: feat(auth): add OAuth2 support
### Changes
- [x] Implement OAuth2 authentication flow
- [x] Add token refresh mechanism
- [x] Update API endpoints
### Files Changed
\`\`\`
src/auth/oauth.ts | 150 +++++++++++
src/auth/token.ts | 95 ++++++++
src/api/auth.ts | -12 ---
3 files changed, 245 insertions(+), 12 deletions(-)
\`\`\`
JIRA Ticket Update:
## Progress Update
**Commit**: \`5f3a2b1c4d5e6f7\`
**Date**: 2024-01-25 14:30 UTC
**Author**: John Doe ([email protected])
### Work Completed
feat(auth): add OAuth2 support for third-party providers
### Details
Implemented OAuth2 authentication flow with support for Google and GitHub.
Added token refresh mechanism and error handling for expired tokens.
### Files Changed
- src/auth/oauth.ts
- src/auth/token.ts
- src/api/auth.ts
### Commit Link
View commit in repository
### Next Steps
- Add unit tests
- Update documentation
- Code review
# After making a commit
git add .
git commit -m "feat(api): add user registration"
# Update issue with commit details
git-issue-updater --platform github --issue #123
# Or for JIRA
git-issue-updater --platform jira --ticket IBIS-101
git-issue-creator Workflow:
ticket-branch-workflow Workflow:
Issue: Commit message doesn't contain issue number/ticket key
Solution:
# Ask user to specify issue
echo "No issue reference found in commit message"
read -p "Enter issue/ticket reference: " ISSUE_REF
# Use branch name as fallback
BRANCH_NAME=$(git branch --show-current)
echo "Using branch name: $BRANCH_NAME"
Issue: Unable to add comment to issue/ticket
GitHub Solution:
# Verify GitHub CLI authentication
gh auth status
# Check issue exists
gh issue view "$ISSUE_NUM"
# Verify write permissions
gh auth refresh
JIRA Solution:
# Verify Atlassian MCP tools are available
# Check cloud ID is set
echo $ATLASSIAN_CLOUD_ID
# Verify ticket exists
atlassian_getJiraIssue --cloudId "$CLOUD_ID" --issueIdOrKey "$TICKET_KEY"
Issue: Multiple commits creating duplicate comments
Solution:
# Implement batching strategy
# Track updates in session file
SESSION_FILE=".git-issue-updater-session"
# Add commit to session
echo "$COMMIT_HASH,$COMMIT_DATE,$COMMIT_MSG" >> "$SESSION_FILE"
# Update with cumulative comment at end
if [ "$UPDATE_STRATEGY" = "batch" ]; then
git-issue-updater --batch "$SESSION_FILE"
rm "$SESSION_FILE"
fi
Issue: Inconsistent timezone handling across team
Solution:
# Use UTC as standard timezone
export GIT_TZ="UTC"
# Or store timezone in git config
git config issue-updater.timezone "UTC"
# Use in comments
COMMIT_TIME=$(git log -1 --date=format:%H:%M --pretty=%aI)
Automatically update issue after commit:
#!/bin/bash
# .git/hooks/post-commit
# Extract commit info
COMMIT_HASH=$(git rev-parse HEAD)
COMMIT_MSG=$(git log -1 --pretty=%B)
# Extract issue reference
ISSUE_REF=$(echo "$COMMIT_MSG" | grep -oE '#[0-9]+|[A-Z]+-[0-9]+' | head -1)
# Update issue if reference found
if [ -n "$ISSUE_REF" ]; then
# Call update script in background to not block commit
git-issue-updater "$ISSUE_REF" &
fi
Update issues in CI pipeline:
# .github/workflows/update-issue.yml
name: Update Issue on Commit
on:
push:
branches: [main, develop]
jobs:
update-issue:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Extract issue reference
id: extract
run: |
MSG=$(git log -1 --pretty=%s)
REF=$(echo "$MSG" | grep -oE '#[0-9]+|[A-Z]+-[0-9]+' | head -1)
echo "ref=$REF" >> $GITHUB_OUTPUT
- name: Update GitHub issue
if: steps.extract.outputs.ref != ''
uses: peter-evans/create-or-update-comment@v2
with:
issue-number: ${{ steps.extract.outputs.ref }}
body: |
## Progress Update
**Commit**: ${{ github.sha }}
**Date**: ${{ github.event.head_commit.timestamp }}
**Author**: ${{ github.actor }}
After updating an issue:
# GitHub: Verify comment was added
gh issue view "$ISSUE_NUM" --json comments --jq '.comments | length'
# JIRA: Verify comment was added
atlassian_getJiraIssue \
--cloudId "$CLOUD_ID" \
--issueIdOrKey "$TICKET_KEY" \
--expand comments | jq '.fields.comment.comments | length'
# Check last update timestamp
gh issue view "$ISSUE_NUM" --json updatedAt --jq '.updatedAt'
# View issue timeline for updates
gh issue view "$ISSUE_NUM" --json timeline --jq '.timeline'
Structured design dialogue that validates ideas before implementation begins.
Comprehensive design intelligence for web and mobile UI/UX across 10 technology stacks.
Comprehensive implementation plans for multi-step tasks, breaking down specs into bite-sized, testable steps.
Introduction to the obra skills system with mandatory skill invocation rules and best practices.
Execute a written implementation plan with critical review and task checkpoints.
Delegate independent tasks to specialized agents working concurrently with isolated context.
Isolated git worktrees with smart directory selection and safety verification.
Toolkit for interacting with and testing local web applications using Playwright. Supports verifying frontend functionality, debugging UI behavior, capturing browser screenshots, and viewing browser logs.
Plan searchable and shareable content that drives traffic, builds authority, and generates leads.
README-first repository scanner that extracts commands and classifies reproduction candidates without executing them.
Brainstorm and prioritize marketing strategies tailored to your SaaS stage, budget, and goals.
Plan and optimize your website's page hierarchy, navigation, URL structure, and internal linking.
The world's fastest calendar for remote work
Capture, organize, and utilize your knowledge effortlessly.
Instant Summaries of Audio & Video Interviews with AnySummary
Transform PDFs into engaging mind maps.
Chat with any PDF instantly
Create an optimal daily plan using your voice
A productivity platform to centralize organizational knowledge and workflows with contextual AI assistance.
AskYourPDF Pricing Plans: Tailored to Your Needs