From superpowers-plus
Enforces fetch-before-edit workflow for safe issue updates in project trackers, preventing stale overwrites, validating changes, and detecting concurrent modifications. Use when updating status, assignees, or labels on existing issues.
npx claudepluginhub bordenet/superpowers-plus --plugin superpowers-plusThis skill uses the workspace's default tool permissions.
> **Purpose:** Prevent stale updates and race conditions when modifying issues
Mandates invoking relevant skills via tools before any response in coding sessions. Covers access, priorities, and adaptations for Claude Code, Copilot CLI, Gemini CLI.
Share bugs, ideas, or general feedback.
Purpose: Prevent stale updates and race conditions when modifying issues Pattern: Mirrors wiki editing — always fetch current state before modifying Adapter: See
_adapters/for platform-specific configurationWrong skill? Creating new issues →
issue-authoring. Verifying issue identifiers →issue-verify. Adding comments →issue-comment-debunker.
<EXTREMELY_IMPORTANT>
Before calling your adapter's update_issue operation, you MUST:
get_issue with the platform-native identifierget_issue response:
exists: false → STOP. Report identifier not found. Do not mutate.entityType: "pull_request" or "other" → STOP. Route to the appropriate non-issue workflow. Do not call update_issue.entityType: "unknown" → STOP. Hard-block on mutation paths. Report to user that the target's type cannot be confirmed. Do not mutate without a new fetch that resolves to "issue".updatedAt timestamp indicates modificationsWhy this matters:
</EXTREMELY_IMPORTANT>
┌─────────────────────────────────────────────────────────────┐
│ BEFORE ANY update_issue CALL │
├─────────────────────────────────────────────────────────────┤
│ 1. FETCH: Call get_issue via adapter │
│ 2. VERIFY: exists:true AND entityType:"issue" — else STOP │
│ 3. CHECK: updatedAt for recent modifications │
│ 4. COMPARE: Your intended changes vs current state │
│ 5. UPDATE: Only then call adapter's update operation │
└─────────────────────────────────────────────────────────────┘
| Field | Validation Required |
|---|---|
status | Verify state exists in your workflow |
assignee | Verify the assignee exists AND that the value uses the platform-specific identifier format (e.g., GitHub username, Jira accountId) — not an email address unless your adapter explicitly maps from email |
labels | Verify each label exists |
priority | Use platform-appropriate values |
title | Follow title standards (see issue-authoring) |
description | Invoke issue-link-verification for URLs |
Check updatedAt timestamp before updating.
If issue was updated in the last 5 minutes:
⚠️ RECENT MODIFICATION DETECTED
Issue: [IDENTIFIER]
Last updated: [timestamp]
By: [user if available]
Your edit may conflict with recent changes.
Options:
1. Proceed with update (may overwrite recent changes)
2. Fetch fresh state and review before editing
3. Cancel update
Common workflow transitions (configure for your platform):
| From | To (Valid) |
|---|---|
| New/Triage | Backlog, Ready, Canceled |
| Backlog | Ready, In Progress |
| Ready/Todo | In Progress, Backlog |
| In Progress | Done, Ready, Canceled |
| Done | In Progress (reopen) |
Before changing status, verify transition is valid for your workflow.
<EXTREMELY_IMPORTANT>
NEVER fabricate issue identifiers:
| Behavior | Action |
|---|---|
| User says "update [IDENTIFIER]" | Use get_issue first — issue may not exist |
| Issue not found via get_issue | Report: "Issue [IDENTIFIER] not found" |
| Assuming issue identifier | ALWAYS query first via get_issue |
</EXTREMELY_IMPORTANT>
Before EVERY update:
1. FETCH — Query issue by platform-native identifier
2. VERIFY — Issue exists, identifier is confirmed
3. CHECK — Recent modifications (updatedAt)
4. VALIDATE — Field values are valid
5. UPDATE — Only then modify
# Before editing: capture current state for comparison
# After editing: verify changes applied correctly
node ~/.codex/superpowers-augment/superpowers-augment.js use-skill issue-editing