Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
53 changes: 53 additions & 0 deletions .bob/commands/cuga-move-issue.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
# Move an issue to a new status on the project board

Moves an issue's **Status** field on the GitHub Projects board to **Todo** or **In Progress**
after validating Epic association rules.

## Steps

1. Identify the issue number and target status (`Todo` or `In Progress`) from the user.

2. Fetch the issue:
```bash
gh issue view <number> --json number,title,body,projectItems
```

3. **Skip Epic checks** if the title starts with `[Bug]` or `[Epic]`. Jump to step 7.

4. Parse `Epic: #<epic-number>` from the issue body (first match, case-insensitive).
- If the line is missing, **abort**:
> "This issue has no Epic association. Add `Epic: #<number>` to the body before changing its status."

5. Fetch the Epic's project board Status:
```bash
gh issue view <epic-number> --json projectItems \
--jq '[.projectItems.nodes[].fieldValues.nodes[]
| select(.field.name == "Status") | .name] | first'
```

6. If the result is not `"In Progress"`, **abort**:
> "Epic #<epic-number> has Status '<value>' on the board.
> Move the Epic to **In Progress** first, then retry."

7. Find the project and item IDs for the issue:
```bash
gh issue view <number> --json projectItems \
--jq '.projectItems.nodes[] | {projectId: .project.id, itemId: .id}'
```

8. Find the Status field ID and the option ID for the target status:
```bash
gh project field-list <project-number> --owner <org> --format json \
--jq '.fields[] | select(.name == "Status") | {fieldId: .id, options: .options}'
```

9. Apply the new status:
```bash
gh project item-edit \
--id <item-id> \
--project-id <project-id> \
--field-id <status-field-id> \
--single-select-option-id <option-id>
```

10. Print the updated issue URL and new status.
14 changes: 12 additions & 2 deletions .bob/commands/cuga-new-feature.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,5 +18,15 @@
| `[Epic]` | Large body of work grouping multiple issues |
| `[Question]` | Clarification needed, not a task |

5. Write the body using the same sections as `.github/ISSUE_TEMPLATE/feature_request.yml`: What you want and why, How it could work, Links or extra context (if any). Incorporate the user's message and any selected editor/context so the issue is concrete and complete.
6. Do not add "Made with Cursor" or similar promotional footers to the issue.
5. **Epic association (mandatory for every non-`[Epic]` issue):**
- Ask the user which Epic this issue belongs to if they have not already specified one.
- Run `gh issue list --label "type: epic" --state open` to show available open Epics.
- If no suitable Epic exists, offer to create one first using the `[Epic]` prefix.
- Add the following line verbatim at the **top** of the issue body (before any other content):
```
Epic: #<epic-issue-number>
```
- Do **not** skip this step. A missing `Epic:` line will cause the GitHub Actions check to fail.

6. Write the body using the same sections as `.github/ISSUE_TEMPLATE/feature_request.yml`: What you want and why, How it could work, Links or extra context (if any). Incorporate the user's message and any selected editor/context so the issue is concrete and complete.
7. Do not add "Made with Cursor" or similar promotional footers to the issue.
53 changes: 53 additions & 0 deletions .claude/commands/cuga-move-issue.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
# Move an issue to a new status on the project board

Moves an issue's **Status** field on the GitHub Projects board to **Todo** or **In Progress**
after validating Epic association rules.

## Steps

1. Identify the issue number and target status (`Todo` or `In Progress`) from the user.

2. Fetch the issue:
```bash
gh issue view <number> --json number,title,body,projectItems
```

3. **Skip Epic checks** if the title starts with `[Bug]` or `[Epic]`. Jump to step 7.

4. Parse `Epic: #<epic-number>` from the issue body (first match, case-insensitive).
- If the line is missing, **abort**:
> "This issue has no Epic association. Add `Epic: #<number>` to the body before changing its status."

5. Fetch the Epic's project board Status:
```bash
gh issue view <epic-number> --json projectItems \
--jq '[.projectItems.nodes[].fieldValues.nodes[]
| select(.field.name == "Status") | .name] | first'
```

6. If the result is not `"In Progress"`, **abort**:
> "Epic #<epic-number> has Status '<value>' on the board.
> Move the Epic to **In Progress** first, then retry."

7. Find the project and item IDs for the issue:
```bash
gh issue view <number> --json projectItems \
--jq '.projectItems.nodes[] | {projectId: .project.id, itemId: .id}'
```

8. Find the Status field ID and the option ID for the target status:
```bash
gh project field-list <project-number> --owner <org> --format json \
--jq '.fields[] | select(.name == "Status") | {fieldId: .id, options: .options}'
```

9. Apply the new status:
```bash
gh project item-edit \
--id <item-id> \
--project-id <project-id> \
--field-id <status-field-id> \
--single-select-option-id <option-id>
```

10. Print the updated issue URL and new status.
14 changes: 12 additions & 2 deletions .claude/commands/cuga-new-feature.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,5 +18,15 @@
| `[Epic]` | Large body of work grouping multiple issues |
| `[Question]` | Clarification needed, not a task |

5. Write the body using the same sections as `.github/ISSUE_TEMPLATE/feature_request.yml`: What you want and why, How it could work, Links or extra context (if any). Incorporate the user's message and any selected editor/context so the issue is concrete and complete.
6. Do not add "Made with Cursor" or similar promotional footers to the issue.
5. **Epic association (mandatory for every non-`[Epic]` issue):**
- Ask the user which Epic this issue belongs to if they have not already specified one.
- Run `gh issue list --label "type: epic" --state open` to show available open Epics.
- If no suitable Epic exists, offer to create one first using the `[Epic]` prefix.
- Add the following line verbatim at the **top** of the issue body (before any other content):
```
Epic: #<epic-issue-number>
```
- Do **not** skip this step. A missing `Epic:` line will cause the GitHub Actions check to fail.

6. Write the body using the same sections as `.github/ISSUE_TEMPLATE/feature_request.yml`: What you want and why, How it could work, Links or extra context (if any). Incorporate the user's message and any selected editor/context so the issue is concrete and complete.
7. Do not add "Made with Cursor" or similar promotional footers to the issue.
53 changes: 53 additions & 0 deletions .cursor/commands/cuga-move-issue.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
# Move an issue to a new status on the project board

Moves an issue's **Status** field on the GitHub Projects board to **Todo** or **In Progress**
after validating Epic association rules.

## Steps

1. Identify the issue number and target status (`Todo` or `In Progress`) from the user.

2. Fetch the issue:
```bash
gh issue view <number> --json number,title,body,projectItems
```

3. **Skip Epic checks** if the title starts with `[Bug]` or `[Epic]`. Jump to step 7.

4. Parse `Epic: #<epic-number>` from the issue body (first match, case-insensitive).
- If the line is missing, **abort**:
> "This issue has no Epic association. Add `Epic: #<number>` to the body before changing its status."

5. Fetch the Epic's project board Status:
```bash
gh issue view <epic-number> --json projectItems \
--jq '[.projectItems.nodes[].fieldValues.nodes[]
| select(.field.name == "Status") | .name] | first'
```

6. If the result is not `"In Progress"`, **abort**:
> "Epic #<epic-number> has Status '<value>' on the board.
> Move the Epic to **In Progress** first, then retry."

7. Find the project and item IDs for the issue:
```bash
gh issue view <number> --json projectItems \
--jq '.projectItems.nodes[] | {projectId: .project.id, itemId: .id}'
```

8. Find the Status field ID and the option ID for the target status:
```bash
gh project field-list <project-number> --owner <org> --format json \
--jq '.fields[] | select(.name == "Status") | {fieldId: .id, options: .options}'
```

9. Apply the new status:
```bash
gh project item-edit \
--id <item-id> \
--project-id <project-id> \
--field-id <status-field-id> \
--single-select-option-id <option-id>
```

10. Print the updated issue URL and new status.
14 changes: 12 additions & 2 deletions .cursor/commands/cuga-new-feature.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,5 +18,15 @@
| `[Epic]` | Large body of work grouping multiple issues |
| `[Question]` | Clarification needed, not a task |

5. Write the body using the same sections as `.github/ISSUE_TEMPLATE/feature_request.yml`: What you want and why, How it could work, Links or extra context (if any). Incorporate the user's message and any selected editor/context so the issue is concrete and complete.
6. Do not add "Made with Cursor" or similar promotional footers to the issue.
5. **Epic association (mandatory for every non-`[Epic]` issue):**
- Ask the user which Epic this issue belongs to if they have not already specified one.
- Run `gh issue list --label "type: epic" --state open` to show available open Epics.
- If no suitable Epic exists, offer to create one first using the `[Epic]` prefix.
- Add the following line verbatim at the **top** of the issue body (before any other content):
```
Epic: #<epic-issue-number>
```
- Do **not** skip this step. A missing `Epic:` line will cause the GitHub Actions check to fail.

6. Write the body using the same sections as `.github/ISSUE_TEMPLATE/feature_request.yml`: What you want and why, How it could work, Links or extra context (if any). Incorporate the user's message and any selected editor/context so the issue is concrete and complete.
7. Do not add "Made with Cursor" or similar promotional footers to the issue.
Loading
Loading