---
name: tracker/gh-cli:issue-update
description: Update a GitHub issue's fields (gh-cli implementation of the abstract tracker issue-update op)
version: "0.4.0"
---

# Issue Update (GitHub)

gh-cli implementation of the abstract `tracker:issue-update` operation. Updates an existing GitHub issue's title, body, labels, or assignee. For GitHub, the abstract `id` parameter is the issue number. Acceptance-criteria checkboxes live in the issue body, so checking them off is a `description` (body) update.

## Parameters

| Parameter   | Type     | Required | Description                                         |
| ----------- | -------- | -------- | --------------------------------------------------- |
| id          | string   | Yes      | Issue identifier (GitHub issue number)              |
| title       | string   | No       | Updated title                                       |
| description | string   | No       | Updated body (markdown); replaces the existing body |
| labels      | string[] | No       | Labels to add                                       |
| assignee    | string   | No       | Assignee to add                                     |

## Implementation

```bash
gh issue edit {id} \
  {title ? `--title "${title}"` : ""} \
  {description ? `--body "${description}"` : ""} \
  {labels ? labels.map(l => `--add-label "${l}"`).join(" ") : ""} \
  {assignee ? `--add-assignee "${assignee}"` : ""}
```

## Output

| Field | Type   | Description              |
| ----- | ------ | ------------------------ |
| id    | string | Issue identifier         |
| url   | string | URL of the updated issue |

## Errors

| Code            | Cause                         | Recovery                                               |
| --------------- | ----------------------------- | ------------------------------------------------------ |
| ISSUE_NOT_FOUND | Issue number does not exist   | Verify issue number                                    |
| AUTH_FAILED     | Not authenticated with gh CLI | Run `gh auth login`                                    |
| NO_FIELDS       | No update fields provided     | Pass at least one of title/description/labels/assignee |

## Used By

- dev-task (mark acceptance criteria checkboxes complete)
- dev-sprint (update epic sprint state)
