---
description: Close GitHub issue for completed SpecWeave increment. Posts completion summary with final stats, deliverables, and closes the issue. Links closure in increment metadata.
---

# Close GitHub Issue for Completed Increment

Close the GitHub issue associated with a completed SpecWeave increment.

## ⛔ MANDATORY: Sync Living Docs BEFORE Closing

**GitHub issue content is generated FROM living docs.** If living docs are stale, the closing summary will have outdated information.

**You MUST run `sw:sync-specs` BEFORE closing (unless using sw:sync-progress):**

```bash
# STEP 1: Ensure living docs reflect final state
sw:sync-specs <increment-id>

# STEP 2: Then close GitHub issue
sw-github:close <increment-id>
```

**Why?**
- Closing comment includes final stats from living docs
- User story completion status read from living docs
- AC checkboxes reflect living docs state

**Note:** `sw:done` and `sw:sync-progress` call sync-specs automatically.

---

**Usage**: `sw-github:close <increment-id>`

```bash
sw:github:close-issue <increment-id> [options]
```

## Arguments

- `increment-id`: Increment ID (e.g., `0004` or `0004-plugin-architecture`)

## Options

- `--force`: Force close even if increment not marked complete
- `--comment`: Custom closing comment (default: auto-generated summary)
- `--reopen`: Reopen a previously closed issue
- `--skip-validation`: Skip PM gate validation

## Examples

```bash
# Basic usage (auto-generates completion summary)
sw:github:close-issue 0004

# With custom comment
sw:github:close-issue 0004 --comment "Merged to main, deploying to production"

# Force close (skip validation)
sw:github:close-issue 0004 --force

# Reopen closed issue
sw:github:close-issue 0004 --reopen
```

## What This Command Does

1. **Validates Increment Completion**
   - All tasks completed (48/48)
   - All tests passing
   - PM gates passed (from `sw:done`)
   - Documentation updated

2. **Generates Completion Summary**
   ```markdown
   ✅ **Increment Completed**

   This increment has been successfully completed and is ready for release.

   ## Final Stats

   - **Tasks**: 48/48 completed (100%)
   - **Duration**: 4 weeks (2025-10-01 → 2025-10-30)
   - **Time Tracked**: 240 hours (estimated) / 235 hours (actual)
   - **Test Coverage**: 127 test cases, 95% coverage
   - **Priority**: P1

   ## Deliverables

   ✅ Plugin architecture implemented
   ✅ 15 plugins migrated (github, kubernetes, frontend-stack, ...)
   ✅ Documentation updated (ADRs, user guides, API docs)
   ✅ E2E tests passing (Playwright suite)
   ✅ Integration tests passing (Jest suite)

   ## Key Changes

   - Added plugin system with loader, manager, detector
   - Implemented 4 adapters (Claude, Cursor, Copilot, Generic)
   - Created 15 domain-specific plugins
   - Updated all documentation
   - Achieved 80% test coverage

   ## Files Changed

   - 48 files modified
   - +12,500 lines added
   - -3,200 lines removed
   - Net: +9,300 lines

   ## Related

   - **Spec**: [spec.md](https://github.com/owner/repo/blob/main/.specweave/increments/0004/spec.md)
   - **Plan**: [plan.md](https://github.com/owner/repo/blob/main/.specweave/increments/0004/plan.md)
   - **Tests**: [tests.md](https://github.com/owner/repo/blob/main/.specweave/increments/0004/tests.md)

   ## Next Steps

   - Deploy to production (tracked in #135)
   - Monitor for issues (see runbook)
   - Plan next increment (0005-user-authentication)

   ---

   🎉 Thank you to all contributors!

   🤖 Auto-closed by SpecWeave at 2025-10-30 17:00:00
   ```

3. **Posts Completion Comment**
   ```bash
   gh issue comment 130 --body "$(cat completion-summary.md)"
   ```

4. **Closes GitHub Issue**
   ```bash
   gh issue close 130
   ```

5. **Updates Metadata**
   ```yaml
   # .metadata.yaml
   github:
     issue_number: 130
     issue_url: "https://github.com/owner/repo/issues/130"
     closed_at: "2025-10-30T17:00:00Z"
     closed_by: "specweave-github-plugin"
     closing_comment_id: 1234590
   ```

6. **Reports Result**
   ```
   ✅ GitHub issue #130 closed!

   Increment 0004 is complete.
   Issue: https://github.com/owner/repo/issues/130 (closed)
   ```

## Configuration

Settings from `.specweave/config.yaml`:

```yaml
plugins:
  settings:
    specweave-github:
      # Auto-close issues when increment completes
      auto_close_issue: true

      # Validate before closing
      require_validation: true

      # Include in closing comment
      closing_comment:
        include_stats: true
        include_deliverables: true
        include_file_changes: true
        include_next_steps: true
```

## Output Format

### Success

```
🔒 Closing GitHub issue for increment 0004...

Validation:
✓ All tasks completed (48/48)
✓ All tests passing (127/127)
✓ PM gates passed
✓ Documentation updated

Generating completion summary...
✓ Final stats calculated
✓ Deliverables listed
✓ File changes summarized

Closing issue...
✓ Posted completion comment (ID: 1234590)
✓ Issue #130 closed
✓ Metadata updated

✅ GitHub Issue Closed!

Issue #130: https://github.com/owner/repo/issues/130
Status: Closed
Closed at: 2025-10-30 17:00:00

Increment 0004 is complete! 🎉
```

### Validation Failure

```
❌ Cannot close issue: Validation failed

Increment 0004 is not yet complete:

Issues:
✗ Tasks: 45/48 completed (3 remaining)
  - T-046: Update documentation
  - T-047: Run E2E tests
  - T-048: Final review

✗ Tests: 2 tests failing
  - TC-105: Plugin unload test
  - TC-127: E2E sync test

✗ PM Gates: Not run yet
  - Run sw:done 0004 first

Fix these issues, then retry:
  sw:github:close-issue 0004

Or force close (not recommended):
  sw:github:close-issue 0004 --force
```

## Requirements

- GitHub CLI (`gh`) installed and authenticated
- Increment marked as complete (via `sw:done`)
- Valid GitHub issue exists for increment

## Error Handling

**Increment not complete**:
```
❌ Error: Increment 0004 is not complete

Status: in_progress (should be: completed)

Complete the increment first:
  sw:done 0004

Then close the issue:
  sw:github:close-issue 0004
```

**Issue not found**:
```
❌ Error: No GitHub issue found for increment 0004

Check .metadata.yaml for issue number.

Create issue first:
  sw:github:create-issue 0004
```

**Issue already closed**:
```
ℹ️  Issue #130 is already closed

Closed by: @developer1
Closed at: 2025-10-30 16:00:00

Use --reopen to reopen the issue.
```

**Permission denied**:
```
❌ Error: Insufficient permissions to close issue #130

Required: Write or Admin access to repository

Contact repository admin for access.
```

## Related Commands

- `sw:done <increment-id>`: Mark increment complete (run this first)
- `sw:github:sync <increment-id>`: Sync final progress before closing
- `sw:github:status <increment-id>`: Check issue status

## Tips

1. **Auto-Close**: Enable `auto_close_issue: true` for automatic closing when running `sw:done`

2. **Final Sync**: Always run `sw:github:sync` before closing to ensure latest progress is posted

3. **Validation**: Don't skip validation (`--force`) unless absolutely necessary - it ensures quality

4. **Custom Comments**: Use `--comment` for release-specific notes (deployment status, known issues, etc.)

5. **Reopening**: If increment needs more work after closing, use `--reopen` to reopen the issue

## Advanced

### Custom Closing Template

Create `.specweave/github/closing-template.md`:

```markdown
# 🎉 Increment {{id}} Completed!

{{summary}}

## Achievements

{{deliverables}}

## Stats

- Duration: {{duration}}
- Team size: {{team_size}}
- Commits: {{commit_count}}

## Deployment

- Merged to: {{branch}}
- Deployed to: {{environment}}
- Release: {{version}}

## Thank You

Special thanks to:
{{contributors}}

---

_Closed by SpecWeave on {{date}}_
```

### Conditional Closing

Close only if specific conditions met:

```yaml
plugins:
  settings:
    specweave-github:
      closing_conditions:
        # Require all tests passing
        - type: "tests"
          threshold: 100
          required: true

        # Require coverage >= 80%
        - type: "coverage"
          threshold: 80
          required: true

        # Require PR merged
        - type: "pr_merged"
          required: true

        # Require approval from architect
        - type: "approval"
          approvers: ["@architect"]
          required: true
```

### Post-Closing Actions

Trigger actions after closing:

```yaml
plugins:
  settings:
    specweave-github:
      post_close:
        # Create release tag
        - action: "create_tag"
          format: "increment-{{id}}"

        # Trigger deployment
        - action: "github_workflow"
          workflow: "deploy.yml"
          inputs:
            increment: "{{id}}"

        # Notify team
        - action: "slack_notification"
          channel: "#releases"
          message: "Increment {{id}} completed! 🎉"

        # Archive to notion
        - action: "notion_export"
          database: "Completed Increments"
```

### Bulk Close

Close multiple completed increments:

```bash
# Close all completed increments
sw:github:close-issue --status completed --all

# Close specific increments
for i in 0004 0005 0006; do
  sw:github:close-issue $i
done
```

### Reopen with Context

Reopen issue with explanation:

```bash
sw:github:close-issue 0004 --reopen \
  --comment "Reopening: Critical bug found in production (issue #140). Need to add rollback mechanism."
```

### Close and Lock

Close and lock issue to prevent further comments:

```bash
sw:github:close-issue 0004 --lock \
  --lock-reason "resolved"  # or "off-topic", "spam", "too heated"
```

---

**Command**: `sw:github:close-issue`
**Plugin**: specweave-github
**Agent**: github-sync
**Version**: 1.0.0
**Last Updated**: 2025-10-30
