スキル一覧に戻る
oviney

github-issues-bug-workflow

by oviney

Personal Blog

0🍴 0📅 2026年1月25日
GitHubで見るManusで実行

SKILL.md


name: GitHub Issues Bug Workflow description: Standard Agile process for bug reporting, triage, assignment, and resolution using GitHub Issues version: 1.2.0 triggers:

  • User reports a bug
  • QA finds a defect
  • Production incident
  • Test failure
  • Need to track defect
  • User asks "what should I work on next?"
  • Need to query open issues

Context

This blog uses GitHub Issues (not docs/ISSUES.md) as the single source of truth for bug tracking. All defects must follow the Agile workflow: Report → Triage → Branch → Fix → PR → Review → Merge → Verify → Close.

Critical Rule: NEVER commit bug fixes directly to main. Always use feature branches and Pull Requests.

GitHub Issues URL: https://github.com/oviney/blog/issues

Step-by-Step Instructions

0. Invoking Agent from Existing GitHub Issue

When you return to dev environment and want to action a GitHub Issue:

Option 1: Tell Agent to Process Issue

User: "Process GitHub Issue #123"
User: "Fix bug #123"
User: "Work on issue #123"

Agent automatically:

  1. Fetches issue from https://github.com/oviney/blog/issues/123
  2. Reads title, description, labels, priority
  3. Activates correct agent persona based on labels
  4. Starts workflow at Step 2 (Triage) or Step 3 (Create Branch)

Option 2: Direct Agent Assignment

User: "Creative Director, fix GitHub Issue #123"
User: "QA Gatekeeper, triage issue #123"

Agent:

  1. Adopts specified persona
  2. Fetches issue details
  3. Continues from appropriate workflow step

Option 3: Check All Open Issues

User: "What bugs are open?"
User: "Show me P1 issues"
User: "List all agent:creative-director issues"
User: "What should we work on next?"

Agent (Flow Orchestrator activates):

  1. Queries GitHub Issues API
  2. Filters by label/priority/assignee
  3. Lists issues with quick summary
  4. Asks which to work on

Example:

gh issue list --repo oviney/blog --state open --label P1
gh issue list --repo oviney/blog --label "agent:creative-director"

See also: Flow Orchestrator Agent for backlog management and planning.

1. User Reports Bug (GitHub Issue)

When user asks to log/report a bug, ALWAYS provide the bug template first.

Trigger phrases:

  • "I found a bug"
  • "There's a problem with..."
  • "How do I report a bug?"
  • "What's the bug template?"
  • "I want to log a bug"

Agent response:

Here's the bug template from .github/ISSUE_TEMPLATE/bug_report.yml:

Required fields:
- Priority: P0-P3 (Critical/High/Medium/Low)
- Component: Layout/Design, Blog Posts, Navigation, Performance, SEO, Other
- Bug Description: What's wrong? What did you expect?

Optional fields:
- Steps to Reproduce
- Reference/Screenshots
- Affected URL

Go ahead and describe the bug - I'll help triage and create a GitHub issue.

User creates new issue at https://github.com/oviney/blog/issues/new (or Agent creates it)

Full Template Reference:

**Bug Description:**
[Clear description of what's broken]

**URL/Location:**
[Where the bug occurs - URL or component]

**Expected Behavior:**
[What should happen]

**Actual Behavior:**
[What's actually happening]

**Steps to Reproduce:**
1. Step 1
2. Step 2
3. Observe issue

**Environment:**
- Browser: Chrome/Safari/Firefox
- Device: Desktop/Mobile/Tablet
- Screen size: [if layout issue]

**Priority Suggestion:**
P0-Critical / P1-High / P2-Medium / P3-Low

**Screenshots:**
[Attach if available]

Labels to add:

  • bug (required)
  • P0, P1, P2, or P3 (priority)

2. QA Gatekeeper Triages Issue (< 1 hour)

QA Gatekeeper persona activates and:

2a. Reproduce Bug

# Start local server
cd /Users/ouray.viney/code/economist-blog-v5
bundle exec jekyll serve --livereload

# Navigate to reported URL
open http://localhost:4000/path/to/bug

2b. Validate & Confirm

  • ✅ Bug is reproducible
  • ✅ Bug is a defect (not feature request)
  • ✅ Bug is not duplicate of existing issue

Add comment to issue:

✅ **Confirmed** - Reproduced locally

**Root Cause:** [Brief analysis]
**Impact:** [How many users affected / severity]
**Estimated Effort:** S (< 1hr) / M (1-4hr) / L (> 4hr)

2c. Assign Priority

Update GitHub labels:

  • P0 - Production down, data loss, security issue
  • P1 - Major feature broken, affects many users
  • P2 - Minor issue, workaround exists
  • P3 - Cosmetic, low impact

2d. Assign to Agent

Add label based on domain:

Bug DomainAgentLabelSkill File
Layout/CSS/VisualCreative Directoragent:creative-directoreconomist-theme/SKILL.md
Tests/CI/PerformanceQA Gatekeeperagent:qa-gatekeeperjekyll-development/SKILL.md
Content/Posts/SEOEditorial Manageragent:editorial-managereditorial/SKILL.md

Add comment:

🤖 **Assigned to:** Creative Director
📚 **Reference:** docs/skills/economist-theme/SKILL.md
🎯 **Sprint:** 2026-01 Sprint 1

2e. Define Acceptance Criteria

Add to issue description:

**Acceptance Criteria:**
- [ ] [Specific testable criterion 1]
- [ ] [Specific testable criterion 2]
- [ ] No visual regressions on other pages
- [ ] All tests pass
- [ ] Works on mobile/tablet/desktop

3. Assigned Agent Asks Clarifying Questions (BEFORE Creating Branch)

CRITICAL STEP: Before writing any code, agent must ask clarifying questions to avoid rework.

3a. Review Issue & Specifications

# Read issue details
gh issue view 123 --repo oviney/blog

# If spec file exists, read it
cat docs/BUG_*.md  # e.g., docs/BUG_BLOG_LAYOUT.md

3b. VERIFY WHICH FILES TO CHANGE

⚠️ CRITICAL ANTI-PATTERN FROM ISSUE #33:

  • Issue described as "blog layout" bug
  • Requirement doc (BUG_BLOG_LAYOUT.md) said "The /blog page layout"
  • BUT actual intent was to fix individual BLOG POST layout (post.html)
  • Agent changed blog archive page (blog.html) → created regression
  • Wasted tokens on rollback and rework

BEFORE implementing, explicitly confirm:

  1. Which template/file needs to change?

    - Blog archive page (blog.html) - lists all posts?
    - Individual post layout (_layouts/post.html) - single post view?
    - Homepage (index.md) - landing page?
    - Other: __________
    
  2. Which URL is affected?

    - /blog/ (archive listing)
    - /blog/2026/01/post-title (individual post)
    - / (homepage)
    - Other: __________
    
  3. Show user example of current state

    # Start server
    bundle exec jekyll serve --livereload
    
    # Take screenshot or describe current layout
    # "I see the blog archive at /blog/ shows a 3-column grid of cards"
    # "Confirm: should I change THIS page, or the individual post view?"
    

Template:

🔍 **Requirement Verification Before Implementation**

Based on the issue description, I understand:
- **File to change**: [blog.html / _layouts/post.html / index.md / other]
- **Affected URL**: [/blog/ / /blog/2026/01/post-title / / other]
- **Current state**: [describe what you see]

**Is this correct?** Please confirm before I start coding.

Wait for explicit user confirmation before proceeding.

3c. Identify Ambiguities

Ask about:

  • Design Details: Exact sizes, colors, fonts (if not fully specified)
  • User Preferences: Options or variations not clarified
  • Edge Cases: Behavior for missing data, empty states
  • Dependencies: External resources needed (images, APIs)
  • Responsive Behavior: Mobile/tablet handling if unclear

Example questions (from issue #33):

**Clarifying Questions Before Implementation:**

1. **Date Display Format**
   - Spec mentions metadata but not date format
   - Should we use "Jan 5, 2026" or "January 5, 2026" or "Jan 5th 2026"?
   - Reference URL: [Economist article]

2. **Category Colors**
   - Should all categories use same gray color?
   - Or different colors per category like Economist does?

3. **Image Fallback**
   - For posts without images, should we:
     a) Use default gray gradient image?
     b) Hide image container entirely?
     c) Show placeholder icon?

3c. Wait for User Response

Do not proceed until:

  • User answers all clarifying questions
  • Design decisions are confirmed
  • Implementation approach is approved

Benefit: Avoids wasted tokens on iterations and rework

4. Assigned Agent Creates Branch

Agent checks out feature branch:

# Get issue number from GitHub (e.g., #123)
git checkout main
git pull origin main
git checkout -b bugfix/GH-123-short-description

# Example:
git checkout -b bugfix/GH-123-related-articles-filter

Branch naming convention:

  • bugfix/GH-<issue#>-<short-kebab-description>
  • Max 50 characters
  • Use GitHub issue number (GH-123)

Add comment to issue:

🔧 **Started work** on branch `bugfix/GH-123-related-articles-filter`

4. Agent Implements Fix

4a. Read Relevant Skill File

# Creative Director reads:
cat docs/skills/economist-theme/SKILL.md

# QA Gatekeeper reads:
cat docs/skills/jekyll-qa/SKILL.md

4b. Implement Fix

  • Follow SKILL.md guidelines
  • Use SCSS variables (no magic numbers)
  • Test at all breakpoints (320px, 768px, 1024px)
  • Run local server to verify

4c. Test Fix (MANDATORY BEFORE COMMIT)

⚠️ CRITICAL ANTI-PATTERN FROM ISSUE #33:

  • Agent committed changes without visual testing
  • Relied only on Jekyll build success (pre-commit hook)
  • Build passing ≠ visual correctness
  • Created regression that wasn't caught until user review

MANDATORY TESTING SEQUENCE:

  1. Build Test (prerequisite)

    bundle exec jekyll build
    # Must pass before proceeding
    
  2. Visual Testing (REQUIRED - not optional)

    # Start local server
    bundle exec jekyll serve --config _config_dev.yml --livereload
    
    # Navigate to EXACT URL mentioned in issue
    # - If issue mentions /blog/, test /blog/
    # - If issue mentions post layout, test a post URL like /2026/01/02/post-title/
    
    # Open browser to http://localhost:4000
    
  3. Verify Against Acceptance Criteria (checklist)

    • Primary bug is fixed (the reported issue)
    • No visual regressions on other pages
    • Test at responsive breakpoints: 320px, 768px, 1024px
    • Browser console shows 0 errors
    • Typography/spacing matches specification
    • Images load correctly
    • Links work
    • Hover states function
  4. Test Related Pages (regression prevention)

    # If you changed blog.html, also test:
    # - / (homepage - uses same card components)
    # - Individual post pages (might share styles)
    
    # If you changed _layouts/post.html, test:
    # - Multiple post URLs (with/without images, categories, etc.)
    # - Different post lengths
    
  5. Screenshot Evidence (for PR)

    • Take screenshots of before/after
    • Test at mobile/tablet/desktop sizes
    • Capture any edge cases

Do NOT commit until all visual testing is complete.

Template for testing notes:

✅ **Testing Complete**

**URLs Tested:**
- http://localhost:4000/blog/ - ✅ 3-column grid displays correctly
- http://localhost:4000/ - ✅ Homepage card layout unchanged
- http://localhost:4000/2026/01/02/post-title/ - ✅ Hero image sized correctly

**Responsive Testing:**
- 320px (mobile) - ✅ Single column, proper spacing
- 768px (tablet) - ✅ Two columns, images scale
- 1024px (desktop) - ✅ Three columns, full layout

**Regression Check:**
- ✅ No visual changes to unrelated pages
- ✅ 0 console errors
- ✅ All links functional

Ready for commit.

4d. Run Automated Tests (if applicable)

# Run test suite (if changes affect tested code)
npm test

4e. Commit to Branch

git add <files>
git commit -m "fix(GH-123): brief description

- Detail 1
- Detail 2
- Detail 3

Closes #123"

# Push to GitHub
git push origin bugfix/GH-123-related-articles-filter

Commit message format:

  • fix(GH-123): <description> - Bug fix
  • Must include Closes #123 to auto-close issue
  • Sign with [Agent Name] at end

5. Agent Creates Pull Request

Create PR on GitHub:

## Description
Fixes #123 - Related articles not filtered by category

## Changes
- Added Liquid filter to prioritize same-category posts
- Excluded current post from related list
- Falls back to other categories if < 6 available

## Testing
- [x] Tested locally on all article pages
- [x] Verified at 320px, 768px, 1024px
- [x] Jekyll build passes
- [x] No console errors

## Acceptance Criteria
- [x] Related articles filtered by category
- [x] Current post excluded
- [x] Max 6 posts shown
- [x] Fallback to other categories
- [x] Tested on existing posts

## Screenshots
[Attach before/after if visual change]

PR Labels:

  • bug
  • agent:creative-director
  • Priority label from issue

Request review from: @oviney (or QA Gatekeeper if different agent)

6. QA Gatekeeper Reviews PR

QA Gatekeeper persona activates and:

6a. Code Review

  • ✅ Follows SKILL.md guidelines
  • ✅ No hardcoded values (uses variables)
  • ✅ Proper commit message format
  • ✅ Tests pass
  • ✅ No security issues

6b. Test on PR Branch

# Checkout PR branch
git fetch origin
git checkout bugfix/GH-123-related-articles-filter

# Test locally
bundle exec jekyll serve --livereload
# Verify fix works
# Check for regressions

6c. Approve or Request Changes

If approved:

✅ **LGTM** (Looks Good To Me)

Verified:
- [x] Fix resolves issue
- [x] No visual regressions
- [x] Tests pass
- [x] Follows design system

Approved for merge to main.

If changes needed:

🔄 **Changes Requested**

Issues found:
- [ ] Issue 1 description
- [ ] Issue 2 description

Please address and re-request review.

7. Merge to Main (After Approval)

QA Gatekeeper or repo owner:

# On GitHub: Click "Merge Pull Request"
# Or via CLI:
git checkout main
git merge --no-ff bugfix/GH-123-related-articles-filter
git push origin main

# Delete branch
git branch -d bugfix/GH-123-related-articles-filter
git push origin --delete bugfix/GH-123-related-articles-filter

GitHub Actions automatically:

  • Runs full test suite
  • Builds Jekyll site
  • Deploys to GitHub Pages (~2 minutes)

8. Verify on Production

QA Gatekeeper verifies:

# Wait for deployment (~2 minutes)
# Monitor: https://github.com/oviney/blog/actions

# Verify on production
open https://www.viney.ca/path/to/fixed-page

# Test at multiple breakpoints
# Check browser console (0 errors)

Add comment to issue:

✅ **Verified on Production**

- Deployment: https://github.com/oviney/blog/actions/runs/XXXXX
- Tested on: https://www.viney.ca/...
- All acceptance criteria met
- No regressions detected

Closing issue. Thanks for the report!

9. Close Issue

Issue auto-closes when PR with Closes #123 merges to main.

If manual close needed:

  • Add final verification comment
  • Close as "Completed"
  • Add milestone if applicable

Common Pitfalls

Pitfall 1: Committing Directly to Main

Problem: Bypassing branch → PR → review workflow
Solution: ALWAYS create feature branch, even for "quick fixes"
Why: No code review, no rollback strategy, breaks production

Pitfall 2: Not Linking Issue in Commit

Problem: Commit message missing Closes #123
Solution: Always include Closes #XXX in commit body
Why: Issue doesn't auto-close, tracking breaks

Pitfall 3: Self-Approving PRs

Problem: Same agent reviews own code
Solution: QA Gatekeeper reviews all PRs, even QA's own fixes
Why: Catches mistakes, enforces quality standards

Pitfall 4: Using docs/ISSUES.md Instead

Problem: Logging bugs in markdown file, not GitHub Issues
Solution: ONLY use GitHub Issues for bug tracking
Why: GitHub Issues has automation, labels, assignments, history

Pitfall 5: Skipping Acceptance Criteria

Problem: Issue has no clear "done" definition
Solution: QA Gatekeeper adds testable acceptance criteria during triage
Why: Prevents scope creep, ensures complete fix

Pitfall 6: No Production Verification

Problem: Marking done after merge, not verifying on live site
Solution: QA Gatekeeper MUST verify on production before closing
Why: Deployment can fail, fix might not work in prod environment

Pitfall 7: Merged PR Without Tests Passing

Problem: Merging when GitHub Actions shows red X
Solution: Wait for green checkmark, fix failing tests first
Why: Broken builds reach production

Code Snippets/Patterns

Fetch GitHub Issue Details

# Get issue details via GitHub CLI
gh issue view 123

# Get issue details via API
curl -s https://api.github.com/repos/oviney/blog/issues/123 | jq '.title, .body, .labels[].name'

# List open issues with specific label
gh issue list --label "agent:creative-director" --state open

Agent Invocation Commands

User saysAgent action:

  • "Process issue #123" → Fetch issue, determine agent, start workflow
  • "Show open P1 bugs" → Query GitHub, list P1 issues
  • "Creative Director fix #123" → Adopt Creative Director persona, start Step 3
  • "What bugs need QA Gatekeeper?" → List issues with agent:qa-gatekeeper label

Quick Branch Creation

# From GitHub issue #123
ISSUE=123
DESC="related-articles-filter"
git checkout main && git pull && git checkout -b bugfix/GH-${ISSUE}-${DESC}

Commit Template

git commit -m "fix(GH-123): filter related articles by category

- Added Liquid where_exp filter for category matching
- Excluded current post from results
- Falls back to other categories if < 6 available
- Tested on all article pages

Closes #123

[Creative Director]"

PR Creation (via GitHub CLI)

gh pr create \
  --title "fix(GH-123): filter related articles by category" \
  --body "Fixes #123 - See commit message for details" \
  --label "bug,agent:creative-director,P1:high" \
  --reviewer oviney

Quick Production Check

# After deployment completes
curl -s https://www.viney.ca/ | grep -i "error" && echo "❌ ERRORS FOUND" || echo "✅ NO ERRORS"

GitHub Labels Setup

PREREQUISITE: GitHub repository must have these labels configured before workflow can function.

Required Labels

Priority Labels:

gh label create "P1:high" --repo oviney/blog --color "d73a4a" --description "High priority - impacts core functionality or brand"
gh label create "P2:medium" --repo oviney/blog --color "fbca04" --description "Medium priority - important but not urgent"
gh label create "P3:low" --repo oviney/blog --color "0e8a16" --description "Low priority - nice to have improvements"

Agent Labels:

gh label create "agent:creative-director" --repo oviney/blog --color "5319e7" --description "Assigned to Creative Director (CSS/Layout/Design)"
gh label create "agent:qa-gatekeeper" --repo oviney/blog --color "1d76db" --description "Assigned to QA Gatekeeper (Testing/Quality/CI)"
gh label create "agent:editorial-manager" --repo oviney/blog --color "c5def5" --description "Assigned to Editorial Manager (Content/Writing/SEO)"

Type Labels (GitHub defaults):

  • bug - Red
  • enhancement - Feature request
  • documentation - Doc updates
  • question - Need clarification

Verifying Labels

# List all labels
gh label list --repo oviney/blog

# Check if specific label exists
gh label list --repo oviney/blog | grep "P1:high"

If labels are missing during triage:

  1. Agent should notify user
  2. User/agent creates labels using commands above
  3. Continue workflow

Success Criteria

  • Bug reported via GitHub Issue (not markdown file)
  • QA Gatekeeper triaged within 1 hour
  • Feature branch created (bugfix/GH-XXX)
  • Fix implemented on branch (not main)
  • Visual testing completed BEFORE commit
  • Files to change confirmed with user BEFORE implementation
  • PR created with screenshots
  • CI tests pass (GitHub Actions)
  • Code review approved
  • Merged to main
  • Verified on production (viney.ca)
  • Issue closed with "Closes #123" in commit

Anti-Patterns & Lessons Learned

Issue #33 - Blog Layout Regression (January 2026)

What Went Wrong:

  1. Misunderstood requirements: Issue title said "blog layout" but meant individual post template, not blog archive
  2. Changed wrong files: Modified blog.html (archive page) instead of _layouts/post.html (post template)
  3. Committed without visual testing: Relied only on Jekyll build success, didn't verify visual output
  4. Created regression: Blog archive changed from 3-column grid to single-column horizontal layout
  5. Wasted tokens: Required rollback commit and rework

Root Causes:

  • Ambiguous issue description ("blog layout" can mean multiple things)
  • Didn't confirm which file/URL to change before coding
  • Pre-commit hook only validates build, not visual correctness
  • No visual regression testing before commit

Prevention (now in workflow):

  1. Step 3b added: "Verify Which Files to Change" - explicit confirmation with user
  2. Step 4c expanded: Mandatory visual testing sequence with checklist
  3. Template provided: "Requirement Verification Before Implementation"
  4. Testing notes template: Document what was tested before commit

Correct Approach:

Agent: "Based on issue #33, I see two possible interpretations:
1. Change blog archive page (blog.html) at /blog/
2. Change individual post layout (_layouts/post.html) at /2026/01/post-title/

I've started the Jekyll server. The blog archive currently shows a 3-column 
grid. Should I change THIS page, or the individual post template?"

User: "The individual post template - not the archive."

Agent: "✅ Confirmed. I'll modify _layouts/post.html and test at URLs like 
/2026/01/02/post-title/. Will not touch blog.html."

Lesson: When issue describes a "page" or "layout", always clarify:

  • Which specific file/template?
  • Which URL path?
  • Show current state and confirm before changing

Impact: ~2 hours wasted, regression introduced to production, reduced trust

  • All tests pass locally
  • PR created with proper description
  • Code review completed
  • PR approved by QA Gatekeeper
  • Merged to main after approval
  • GitHub Actions deployment succeeded
  • Verified on production (https://www.viney.ca/)
  • Issue auto-closed or manually closed
  • No rollbacks or hotfixes needed

Example Workflow (End-to-End)

Scenario: User logs bug, returns next day to fix it

Day 1 (Evening):

User browses blog → Notices related articles showing wrong posts
User goes to: https://github.com/oviney/blog/issues/new
User creates Issue #123:
  Title: "Related articles not filtered by category"
  Labels: bug, P1:high
  Description: [Full details]
User closes laptop

Day 2 (Morning):

User: "What P1 bugs are open?"

Agent (QA Gatekeeper activates):
  → Queries GitHub Issues
  → Lists: "#123 - Related articles not filtered by category (P1, bug, no agent assigned)"

User: "Process issue #123"

Agent (QA Gatekeeper):
  → Fetches issue details
  → Reproduces bug locally
  → Confirms it's a layout issue
  → Adds label: agent:creative-director
  → Comments on issue: "Confirmed. Assigning to Creative Director"

Agent (switches to Creative Director):
  → Reads docs/skills/economist-theme/SKILL.md
  → Creates branch: bugfix/GH-123-related-articles-filter
  → Implements fix in _layouts/post.html
  → Tests at all breakpoints
  → Commits with "Closes #123"
  → Pushes branch
  → Creates PR

Agent: "PR created: https://github.com/oviney/blog/pull/124. Ready for review."

User: Reviews PR → Approves

Agent (QA Gatekeeper):
  → Merges PR to main
  → Waits for GitHub Actions
  → Ve2.0** (2026-01-05): Added Flow Orchestrator integration for backlog management, added planning triggers
- **1.rifies on production
  → Comments: "✅ Verified on production"
  → Issue auto-closes

DONE. Total time: ~15 minutes.

Version History

  • 1.1.0 (2026-01-05): Added clarifying questions step (Step 3), GitHub labels setup section, updated QA skill reference to jekyll-qa
  • 1.0.0 (2026-01-05): Initial creation - Established GitHub Issues as single source of truth for bug tracking

スコア

総合スコア

45/100

リポジトリの品質指標に基づく評価

SKILL.md

SKILL.mdファイルが含まれている

+20
LICENSE

ライセンスが設定されている

0/10
説明文

100文字以上の説明がある

0/10
人気

GitHub Stars 100以上

0/15
最近の活動

3ヶ月以内に更新がある

0/10
フォーク

10回以上フォークされている

0/5
Issue管理

オープンIssueが50未満

0/5
言語

プログラミング言語が設定されている

+5
タグ

1つ以上のタグが設定されている

0/5

レビュー

💬

レビュー機能は近日公開予定です