Skip to content
Back to skills

Issue Editing

ASecurity

Use when updating issues in your project tracker. Enforces fetch-before-edit workflow to prevent stale updates, validates field changes, detects concurrent modifications.

  • 8 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added October 6, 2026
ai-agentsbashnodegit

Security analysis

A100/100

Scanned October 6, 2026

npx -y skills add bordenet/superpowers-plus --skill issue-editing --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Issue Editing?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Issue Editing
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/bordenet-issue-editing/badge)](https://www.skillsdirectory.com/skills/bordenet-issue-editing)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: issue-editing
disable-model-invocation: true
source: superpowers-plus
triggers: ["update ticket", "edit issue", "change status of", "assign issue to", "add label to issue"]
anti_triggers: ["create ticket", "create issue", "open a ticket", "file a bug"]
description: Use when updating issues in your project tracker. Enforces fetch-before-edit workflow to prevent stale updates, validates field changes, detects concurrent modifications.
summary: "Use when: updating existing issues. Skip when: creating new issues."
coordination:
  group: issue-tracking
  order: 2
  requires: []
  enables: ['issue-verify']
  escalates_to: []
  internal: false
composition:
  consumes: [todo-items]
  produces: [updated-issue]
  capabilities: [edits-issues]
  priority: 20
---

# Issue Editing

> **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 configuration
>
> **Wrong skill?** Creating new issues → `issue-authoring`. Verifying issue identifiers → `issue-verify`. Adding comments → `issue-comment-debunker`.

## When to Use

- Updating status, assignee, labels, or any field on an existing issue/ticket
- Editing issue descriptions or titles after initial creation
- Bulk-updating issues (apply fetch-before-edit to each one)

---

## ALWAYS Fetch Before Edit

<EXTREMELY_IMPORTANT>

**Before calling your adapter's `update_issue` operation, you MUST:**

1. **Fetch current issue state** — Call `get_issue` with the platform-native identifier
2. **Validate the target type** — Check the `get_issue` response:
   - If `exists: false` → **STOP. Report identifier not found. Do not mutate.**
   - If `entityType: "pull_request"` or `"other"` → **STOP. Route to the appropriate non-issue workflow. Do not call update_issue.**
   - If `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"`.**
3. **Use fetched data as base** — Don't assume memory reflects current state
4. **Check for recent changes** — `updatedAt` timestamp indicates modifications

**Why this matters:**

- Multiple agents/users may edit the same issue
- Memory may reflect stale state from earlier in conversation
- Prevents overwriting recent changes with outdated data

</EXTREMELY_IMPORTANT>

---

## Pre-Edit Workflow

```text
┌─────────────────────────────────────────────────────────────┐
│ 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 Before Update

| 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 |

---

## Concurrent Edit Detection

**Check `updatedAt` timestamp before updating.**

**If issue was updated in the last 5 minutes:**

```text
⚠️ 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
```

---

## Status Transitions

**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.**

---

## Hallucination Prevention

<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>

---

## Edit Checklist

```text
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
```

---

## Example

```bash
# Before editing: capture current state for comparison
# After editing: verify changes applied correctly
node ~/.codex/superpowers-augment/superpowers-augment.js use-skill issue-editing
```

## Failure Modes

- **Stale update:** Editing without fetching — overwrites a teammate's concurrent change
- **Stale identifier:** Using a memorized or guessed identifier instead of fetching it fresh
- **Field type mismatch:** Passing a label name instead of the platform-specific label identifier (e.g., label ID, label name string — depends on tracker)

## Companion Skills

- **issue-authoring**: Standards for creating issues
- **issue-link-verification**: Verify URLs before posting
- **issue-comment-debunker**: Evidence-based comments
- **issue-verify**: Post-edit verification

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…