skills/memyselfandm/cconami/shuffling-projects

shuffling-projects

SKILL.md

Shuffling Projects

Reorganize work items between projects, sprints, or releases while maintaining relationships.

Usage

/shuffling-projects [options]

Options

Movement:

  • --from PROJECT: Source project/sprint
  • --to PROJECT: Destination project/sprint
  • --items IDs: Specific items to move (comma-separated)

Filters:

  • --status STATUS: Only move items with status
  • --priority PRIORITY: Only move items with priority
  • --unassigned: Only move unassigned items

Actions:

  • --dry-run: Preview changes without applying
  • --update-deps: Also move blocking items if needed

Examples

# Move items between sprints
/shuffling-projects --from CCC-123.S01 --to CCC-123.S02 --items CCC-456,CCC-457

# Move all todo items from sprint
/shuffling-projects --from CCC-123.S01 --to CCC-123.S02 --status todo

# Preview rebalancing
/shuffling-projects --from "Sprint 1" --to "Sprint 2" --dry-run

# Move with dependencies
/shuffling-projects --items CCC-456 --to CCC-123.S02 --update-deps

Workflow

Step 1: Gather Context

source = pm_context.get_project(from_project) if from_project else None
destination = pm_context.get_project(to_project)

if items_specified:
    items_to_move = [pm_context.get_item(id) for id in item_ids]
else:
    items_to_move = pm_context.list_items({
        project: source.id,
        status: status_filter,
        priority: priority_filter
    })

Step 2: Validate Moves

issues = []

for item in items_to_move:
    # Check dependencies
    if item.blocked_by:
        for blocker_id in item.blocked_by:
            blocker = pm_context.get_item(blocker_id)
            if blocker.project != destination.id:
                if update_deps:
                    items_to_move.append(blocker)
                else:
                    issues.append({
                        "item": item,
                        "issue": f"Blocked by {blocker.key} in different project",
                        "resolution": "Use --update-deps to move blocker too"
                    })

    # Check if item blocks others staying behind
    if item.blocks:
        for blocked_id in item.blocks:
            blocked = pm_context.get_item(blocked_id)
            if blocked not in items_to_move:
                issues.append({
                    "item": item,
                    "issue": f"Blocks {blocked.key} which is staying in source",
                    "resolution": "Move blocked item too or remove dependency"
                })

Step 3: Preview Changes

## Shuffle Preview

### Moving {count} items
From: {source.name}
To: {destination.name}

### Items to Move
{for item in items_to_move:}
- [{item.key}] {item.title}
  - Status: {item.status}
  - Dependencies: {item.blocked_by}

### Validation Issues
{for issue in issues:}
⚠️ [{issue.item.key}]: {issue.issue}
   Resolution: {issue.resolution}

### Impact
- Source will have: {source_remaining} items
- Destination will have: {dest_total} items

Step 4: Execute Moves

if not dry_run and not issues:
    for item in items_to_move:
        pm_context.assign_to_project(item.id, destination.id)

        # Also move children
        children = pm_context.get_children(item.id)
        for child in children:
            pm_context.assign_to_project(child.id, destination.id)

        # Add comment
        pm_context.add_comment(
            item.id,
            f"Moved from {source.name} to {destination.name}"
        )

Step 5: Report

## Shuffle Complete

### Moved {count} items
From: {source.name} → To: {destination.name}

### Items Moved
{for item in moved:}
✅ [{item.key}] {item.title}

### Updated Dependencies
{for dep in updated_deps:}
🔗 {dep.from_item} → {dep.to_item}

### Project Balances

| Project | Before | After |
|---------|--------|-------|
| {source.name} | {before} | {after} |
| {destination.name} | {before} | {after} |

Common Use Cases

Sprint Scope Reduction

# Move uncompleted items to next sprint
/shuffling-projects --from "Sprint 1" --to "Sprint 2" --status todo

Priority Escalation

# Move urgent items to current sprint
/shuffling-projects --items CCC-456 --to "Current Sprint" --update-deps

Workload Rebalancing

# Move items from overloaded sprint
/shuffling-projects --from "Sprint 1" --to "Sprint 2" --unassigned

Release Rescheduling

# Move features to next release
/shuffling-projects --from "v1.0" --to "v1.1" --items FEAT-1,FEAT-2,FEAT-3

Error Handling

Issue Resolution
Dependency in different project Use --update-deps or resolve manually
Item blocks work in source Move blocked item or remove dependency
Circular dependency Report and require manual resolution
Project not found Verify project name/ID
Weekly Installs
2
GitHub Stars
7
First Seen
Mar 1, 2026
Installed on
gemini-cli2
opencode2
codebuddy2
github-copilot2
codex2
kimi-cli2