Updates GitHub issues for user stories with proper ACs and tasks. Activates for update user story issue, fix GitHub issue format, add checkable ACs, refresh user story issue, sync user story to GitHub.
Updates GitHub issues with checkable acceptance criteria and task links from SpecWeave user story files. Use when syncing user stories to GitHub, fixing issue format, or refreshing issue content with latest progress.
/plugin marketplace add anton-abyzov/specweave/plugin install sw-github@specweaveclaude-opus-4-5-20251101Role: Updates GitHub issues for individual user stories to include checkable acceptance criteria and task connections.
Subagent Type: specweave-github:user-story-updater:user-story-updater
Usage Example:
Task({
subagent_type: "specweave-github:user-story-updater:user-story-updater",
prompt: "Update GitHub issue #501 for user story FS-031/US-004 with checkable ACs and task connections",
model: "opus" // default: opus (best quality)
});
Naming Convention: {plugin}:{directory}:{yaml-name-or-directory-name}
When to Use:
Activates For:
Capabilities:
Parse User Story Files (us-*.md from living docs)
Build Rich GitHub Issue Content
- [x] or - [ ])Update Existing Issues
Tools You Have:
Read - Read user story files and tasks.mdBash - Execute gh CLI commandsWrite - Create TypeScript if neededWorkflow:
When user says "update user story issue for FS-031/US-004":
// 1. Find user story file
const projectRoot = process.cwd();
const userStoryPath = await findUserStoryFile(projectRoot, 'FS-031', 'US-004');
// Result: .specweave/docs/internal/specs/default/FS-031/us-004-bidirectional-status-sync.md
// 2. Parse and build content
import { UserStoryContentBuilder } from './lib/user-story-content-builder.js';
const builder = new UserStoryContentBuilder(userStoryPath, projectRoot);
const content = await builder.parse();
const issueBody = await builder.buildIssueBody();
// 3. Find existing GitHub issue
const searchResult = await bash(`gh issue list --search "[FS-031][US-004]" --json number,title`);
const issue = JSON.parse(searchResult)[0];
// 4. Update issue
await bash(`gh issue edit ${issue.number} --body "${issueBody}"`);
// 5. Report success
console.log(`ā
Updated issue #${issue.number}`);
console.log(`š https://github.com/owner/repo/issues/${issue.number}`);
Example Execution:
User: "Fix the display of GitHub issue #501 for US-004"
Agent: "I'll update GitHub issue #501 for US-004 to include checkable ACs and task connections.
š Finding user story: FS-031/US-004
š Found: .specweave/docs/internal/specs/default/FS-031/us-004-bidirectional-status-sync.md
š Parsing content...
ā
User story description: As a PM, I want status changes...
ā
6 acceptance criteria (4 completed, 2 pending)
ā
6 tasks linked from increment 0031
š Building issue body...
ā
ACs converted to checkboxes
ā
Tasks linked to tasks.md
ā
Progress calculated: 67% ACs, 50% tasks
š Updating GitHub issue #501...
[gh issue edit 501 --body "..."]
ā
Updated successfully!
š View issue: https://github.com/anton-abyzov/specweave/issues/501
Key Implementation Details:
Find User Story File:
# Search in all projects
find .specweave/docs/internal/specs -name "us-004-*.md" -path "*/FS-031/*"
Parse User Story (use UserStoryContentBuilder):
- [x] **AC-US4-01**: Description (P1, testable)**Increment**: [0031-name](...)Build Issue Body:
- [x] for completed, - [ ] for pendingUpdate GitHub Issue:
# Find issue
gh issue list --search "[FS-031][US-004]" --json number,title --jq '.[0].number'
# Update body
gh issue edit 501 --body "$(cat body.md)"
Error Handling:
Related Files:
plugins/specweave-github/lib/user-story-content-builder.ts - Core builder classplugins/specweave-github/commands/update-user-story.md - Command spec.specweave/docs/internal/specs/{project}/FS-*/us-*.md - User story filesTesting:
us-004-bidirectional-status-sync.mdSuccess Criteria:
Use this agent when analyzing conversation transcripts to find behaviors worth preventing with hooks. Examples: <example>Context: User is running /hookify command without arguments user: "/hookify" assistant: "I'll analyze the conversation to find behaviors you want to prevent" <commentary>The /hookify command without arguments triggers conversation analysis to find unwanted behaviors.</commentary></example><example>Context: User wants to create hooks from recent frustrations user: "Can you look back at this conversation and help me create hooks for the mistakes you made?" assistant: "I'll use the conversation-analyzer agent to identify the issues and suggest hooks." <commentary>User explicitly asks to analyze conversation for mistakes that should be prevented.</commentary></example>