managing-relationships by aiskillstore
Expert at managing GitHub issue relationships including parent/sub-issues, blocking dependencies, and tracking links using the GraphQL API. Auto-invokes when creating issue hierarchies, setting parent-child relationships, managing dependencies, or linking related issues.
Content & Writing
85 Stars
2 Forks
Updated Jan 19, 2026, 04:39 AM
Why Use This
This skill provides specialized capabilities for aiskillstore's codebase.
Use Cases
- Developing new features in the aiskillstore repository
- Refactoring existing code to follow aiskillstore standards
- Understanding and working with aiskillstore's codebase structure
Install Guide
2 steps- 1
Skip this step if Ananke is already installed.
- 2
Skill Snapshot
Auto scan of skill assets. Informational only.
Valid SKILL.md
Checks against SKILL.md specification
Source & Community
Skill Stats
SKILL.md 476 Lines
Total Files 1
Total Size 0 B
License NOASSERTION
---
name: managing-relationships
description: Expert at managing GitHub issue relationships including parent/sub-issues, blocking dependencies, and tracking links using the GraphQL API. Auto-invokes when creating issue hierarchies, setting parent-child relationships, managing dependencies, or linking related issues.
version: 1.0.0
allowed-tools: Read, Bash, Grep, Glob
---
# Managing Relationships Skill
You are an expert at managing GitHub issue relationships using the GraphQL API. This skill provides capabilities beyond the standard `gh issue` CLI, enabling proper parent-child hierarchies, dependency tracking, and issue linking.
## When to Use This Skill
Auto-invoke this skill when the conversation involves:
- Creating parent-child issue relationships (sub-issues)
- Setting up issue hierarchies or epics
- Managing blocking/blocked-by dependencies
- Linking related issues
- Querying issue relationship graphs
- Keywords: "parent issue", "sub-issue", "child issue", "blocked by", "blocking", "depends on", "epic", "hierarchy"
## Your Capabilities
### 1. **Sub-Issue Management (Parent-Child)**
Create explicit parent-child relationships using GitHub's sub-issues feature.
**Add Sub-Issue:**
```bash
python3 {baseDir}/scripts/manage-relationships.py add-sub-issue \
--parent 67 \
--child 68
```
**Remove Sub-Issue:**
```bash
python3 {baseDir}/scripts/manage-relationships.py remove-sub-issue \
--parent 67 \
--child 68
```
**List Sub-Issues:**
```bash
python3 {baseDir}/scripts/manage-relationships.py list-sub-issues --issue 67
```
### 2. **Dependency Management (Blocking)**
Track blocking dependencies between issues.
**View Dependencies:**
```bash
python3 {baseDir}/scripts/manage-relationships.py show-dependencies --issue 68
```
### 3. **Relationship Queries**
Query complex relationship graphs.
**Get Parent:**
```bash
python3 {baseDir}/scripts/manage-relationships.py get-parent --issue 68
```
**Get All Relationships:**
```bash
python3 {baseDir}/scripts/manage-relationships.py show-all --issue 67
```
## GraphQL API Reference
### Key Mutations
#### addSubIssue
Creates a parent-child relationship.
```graphql
mutation {
addSubIssue(input: {
issueId: "PARENT_NODE_ID",
subIssueId: "CHILD_NODE_ID"
}) {
issue { number title }
subIssue { number title }
}
}
```
**Input Fields:**
- `issueId` (required): Parent issue node ID
- `subIssueId`: Child issue node ID
- `subIssueUrl`: Alternative - child issue URL
- `replaceParent`: Boolean to replace existing parent
#### removeSubIssue
Removes a parent-child relationship.
```graphql
mutation {
removeSubIssue(input: {
issueId: "PARENT_NODE_ID",
subIssueId: "CHILD_NODE_ID"
}) {
issue { number }
subIssue { number }
}
}
```
#### reprioritizeSubIssue
Reorders sub-issues within a parent.
```graphql
mutation {
reprioritizeSubIssue(input: {
issueId: "PARENT_NODE_ID",
subIssueId: "CHILD_NODE_ID",
afterId: "SIBLING_NODE_ID"
}) {
issue { number }
}
}
```
### Key Query Fields
#### Issue Relationships
```graphql
query {
repository(owner: "OWNER", name: "REPO") {
issue(number: 67) {
# Parent-child
parent { number title }
subIssues(first: 50) {
nodes { number title state }
}
subIssuesSummary {
total
completed
percentCompleted
}
# Dependencies
blockedBy(first: 10) {
nodes { number title }
}
blocking(first: 10) {
nodes { number title }
}
# Tracking (from task lists)
trackedInIssues(first: 10) {
nodes { number title }
}
trackedIssues(first: 10) {
nodes { number title }
}
trackedIssuesCount
}
}
}
```
## Direct GraphQL Usage
For operations not covered by scripts, use `gh api graphql` directly:
### Get Issue Node IDs
```bash
gh api graphql -f query='
query {
repository(owner: "OWNER", name: "REPO") {
issue(number: 67) { id }
}
}'
```
### Add Multiple Sub-Issues
```bash
gh api graphql -f query='
mutation {
add1: addSubIssue(input: {issueId: "PARENT_ID", subIssueId: "CHILD1_ID"}) {
subIssue { number }
}
add2: addSubIssue(input: {issueId: "PARENT_ID", subIssueId: "CHILD2_ID"}) {
subIssue { number }
}
}'
```
### Query Full Hierarchy
```bash
gh api graphql -f query='
query {
repository(owner: "OWNER", name: "REPO") {
issue(number: 67) {
number
title
subIssues(first: 100) {
nodes {
number
title
state
subIssues(first: 10) {
nodes { number title }
}
}
}
}
}
}'
```
## Workflow Patterns
### Pattern 1: Create Issue Hierarchy
When creating a parent issue with children:
1. Create all issues first
2. Get node IDs for parent and children
3. Add each child as sub-issue of parent
4. Verify relationships
```bash
# Step 1: Get IDs
python3 {baseDir}/scripts/manage-relationships.py get-ids --issues 67,68,69,70
# Step 2: Add relationships
python3 {baseDir}/scripts/manage-relationships.py add-sub-issue --parent 67 --child 68
python3 {baseDir}/scripts/manage-relationships.py add-sub-issue --parent 67 --child 69
python3 {baseDir}/scripts/manage-relationships.py add-sub-issue --parent 67 --child 70
# Step 3: Verify
python3 {baseDir}/scripts/manage-relationships.py list-sub-issues --issue 67
```
### Pattern 2: Epic with Nested Sub-Issues
For complex hierarchies:
```
Epic (#1)
├── Feature A (#2)
│ ├── Task A1 (#5)
│ └── Task A2 (#6)
└── Feature B (#3)
└── Task B1 (#7)
```
```bash
# Top-level children
python3 {baseDir}/scripts/manage-relationships.py add-sub-issue --parent 1 --child 2
python3 {baseDir}/scripts/manage-relationships.py add-sub-issue --parent 1 --child 3
# Nested children
python3 {baseDir}/scripts/manage-relationships.py add-sub-issue --parent 2 --child 5
python3 {baseDir}/scripts/manage-relationships.py add-sub-issue --parent 2 --child 6
python3 {baseDir}/scripts/manage-relationships.py add-sub-issue --parent 3 --child 7
```
### Pattern 3: Move Issue to New Parent
```bash
# Use replaceParent flag
python3 {baseDir}/scripts/manage-relationships.py add-sub-issue \
--parent 100 \
--child 68 \
--replace-parent
```
## Error Handling
### Common Errors
**"Issue may not contain duplicate sub-issues"**
- Child is already a sub-issue of this parent
- Check existing relationships first
**"Sub issue may only have one parent"**
- Child already has a different parent
- Use `--replace-parent` flag or remove from current parent first
**"Issue not found"**
- Verify issue numbers exist
- Check repository owner/name
### Troubleshooting
```bash
# Check if issue has parent
python3 {baseDir}/scripts/manage-relationships.py get-parent --issue 68
# List all relationships
python3 {baseDir}/scripts/manage-relationships.py show-all --issue 68
```
## Integration with Other Skills
### With creating-issues skill
- After creating issues, use this skill to establish relationships
- Reference parent in issue body: "Part of #67"
### With organizing-with-labels skill
- Labels indicate type, relationships indicate structure
- Use together for complete issue organization
### With managing-projects skill
- Sub-issues appear in project boards
- Track hierarchy progress in projects
## Environment Requirements
This skill requires:
- `gh` CLI authenticated with appropriate permissions
- Repository with Issues enabled
- GraphQL API access
## Best Practices
1. **Create issues first, then relationships** - Ensure all issues exist before linking
2. **Document relationships in body** - Add "Part of #X" for visibility
3. **Check for existing parents** - Avoid orphaning issues
4. **Use hierarchies sparingly** - Deep nesting (>3 levels) becomes hard to manage
5. **Combine with labels** - Use `type:epic` label for parent issues
## Limitations
- **One parent per issue** - Cannot have multiple parents
- **No circular references** - A cannot be parent of B if B is ancestor of A
- **API rate limits** - Batch operations carefully
- **Blocking relationships** - Currently read-only via API (manage in UI)
## Resources
### Scripts
- **manage-relationships.py**: Main CLI for relationship operations
### References
- **graphql-schema.md**: Full GraphQL schema documentation
- **relationship-patterns.md**: Common hierarchy patterns
## Common Mistakes
### Mistake 1: Using Task Lists Instead of Sub-Issues API
```markdown
❌ WRONG - Task lists create "tracked" relationships, not parent-child:
## Child Issues
- [ ] #68
- [ ] #69
- [ ] #70
✅ CORRECT - Use GraphQL addSubIssue mutation:
python manage-relationships.py add-sub-issue --parent 67 --child 68
python manage-relationships.py add-sub-issue --parent 67 --child 69
python manage-relationships.py add-sub-issue --parent 67 --child 70
```
**Why it matters**:
- Task lists only create "tracked by" links visible in the issue sidebar
- Sub-issues create true parent-child hierarchy with:
- Progress tracking (3/4 completed, 75%)
- Hierarchical navigation in GitHub UI
- Sub-issue aggregation and rollup
### Mistake 2: Not Getting Issue Node IDs First
```markdown
❌ WRONG - Using issue numbers directly in GraphQL:
mutation {
addSubIssue(input: {issueId: "67", subIssueId: "68"}) { ... }
}
✅ CORRECT - Get node IDs first, then use them:
# Step 1: Get node IDs
python manage-relationships.py get-ids --issues 67,68
# Step 2: Use node IDs in mutation
mutation {
addSubIssue(input: {
issueId: "I_kwDOQTQw6c7Z4spt",
subIssueId: "I_kwDOQTQw6c7Z4swL"
}) { ... }
}
```
**Why it matters**: GraphQL uses node IDs (not issue numbers). The script handles this automatically, but direct API calls require the conversion.
### Mistake 3: Not Checking for Existing Parent
```markdown
❌ WRONG - Adding sub-issue without checking existing parent:
python manage-relationships.py add-sub-issue --parent 100 --child 68
# Error: Sub issue may only have one parent
✅ CORRECT - Check first, then use --replace-parent if needed:
# Check existing parent
python manage-relationships.py get-parent --issue 68
# If has parent, use replace flag
python manage-relationships.py add-sub-issue --parent 100 --child 68 --replace-parent
```
**Why it matters**: Each issue can only have one parent. Attempting to add to a new parent without the replace flag will fail.
### Mistake 4: Creating Circular References
```markdown
❌ WRONG - Creating cycles in hierarchy:
# A is parent of B
python manage-relationships.py add-sub-issue --parent A --child B
# Then trying to make B parent of A
python manage-relationships.py add-sub-issue --parent B --child A
# Error: Cannot create circular reference
✅ CORRECT - Plan hierarchy before creating:
Epic (#1)
├── Feature A (#2)
│ └── Task A1 (#5)
└── Feature B (#3)
└── Task B1 (#7)
```
**Why it matters**: GitHub prevents circular references. Plan your hierarchy structure before creating relationships.
### Mistake 5: Not Verifying After Creation
```markdown
❌ WRONG - Adding relationships without verification:
python manage-relationships.py add-sub-issue --parent 67 --child 68
# Just assume it worked
✅ CORRECT - Verify relationships were created:
python manage-relationships.py add-sub-issue --parent 67 --child 68
python manage-relationships.py list-sub-issues --issue 67
# Confirms: Sub-issues (4): #68, #69, #70, #71
```
**Why it matters**: API calls can fail silently or partially. Always verify the result matches expectations.
### Mistake 6: Deep Nesting (>3 Levels)
```markdown
❌ WRONG - Too many levels of nesting:
Epic
└── Theme
└── Feature
└── Story
└── Task
└── Subtask (6 levels!)
✅ CORRECT - Keep hierarchy shallow (2-3 levels):
Epic
├── Feature A
│ ├── Task A1
│ └── Task A2
└── Feature B
└── Task B1
```
**Why it matters**: Deep nesting becomes hard to manage and navigate. Most projects work well with 2-3 levels maximum.
## Important Notes
- The standard `gh issue` CLI does NOT support relationship management
- Always use GraphQL API via `gh api graphql` for relationships
- Sub-issues appear in GitHub UI with progress tracking
- Task list checkboxes (`- [ ] #68`) create "tracked" relationships, not parent-child
- Each issue can have only ONE parent (no multiple inheritance)
- Verify relationships after creation to confirm success
Name Size