Abandon an incomplete increment (requirements changed, obsolete)
Moves incomplete increments to archive when requirements change or approach is wrong.
/plugin marketplace add anton-abyzov/specweave/plugin install sw@specweaveUsage: /sw:abandon <increment-id> --reason="<reason>"
⚠️ THIS ACTION MOVES THE INCREMENT TO _archive/ FOLDER
Abandon an increment when:
/sw:abandon 0153 or /sw:abandon 0153-feature-namestatus: → "abandoned"abandonedReason: User-provided reasonabandonedAt: Current timestamp.specweave/increments/{id}/.specweave/increments/_archive/{id}//sw:abandon 0008 --reason="Requirements changed - feature no longer needed"
⚠️ This will move increment 0008 to _archive/
Reason: Requirements changed - feature no longer needed
Continue? [y/N]: y
✅ Increment 0008 abandoned
📦 Moved to: .specweave/increments/_archive/0008-old-feature/
📝 Reason: Requirements changed - feature no longer needed
💾 All work preserved for reference
💡 To un-abandon: Manually move back to increments/ folder
/sw:abandon 0009
❓ Why are you abandoning this increment?
1. Requirements changed
2. Approach was wrong
3. Superseded by different work
4. Experiment failed
5. Other (type reason)
> 1
⚠️ This will move increment 0009 to _archive/
Reason: Requirements changed
Continue? [y/N]: y
✅ Increment 0009 abandoned
📦 Moved to: .specweave/increments/_archive/0009-experiment/
/sw:abandon 0005
❌ Cannot abandon increment 0005
Status: completed
Completed increments cannot be abandoned
💡 Increments are done - no need to abandon
/sw:abandon 0008
⚠️ Increment 0008 is already abandoned
Location: .specweave/increments/_abandoned/0008-old-feature/
Reason: Requirements changed
No action needed.
/sw:abandon 9999
❌ Increment not found: 9999
💡 Check available increments: /sw:status
/sw:abandon 0008 --reason="Not needed"
⚠️ This will move increment 0008 to _archive/
Reason: Not needed
Continue? [y/N]: n
❌ Abandonment cancelled
Increment 0008 remains active
This command uses the MetadataManager and file system operations:
import { MetadataManager, IncrementStatus } from '../src/core/increment/metadata-manager';
import * as fs from 'fs-extra';
import * as path from 'path';
// Read current metadata
const metadata = MetadataManager.read(incrementId);
// Validate can abandon
if (metadata.status === IncrementStatus.COMPLETED) {
throw new Error('Cannot abandon completed increment');
}
// Confirmation prompt
const confirmed = await prompt('Continue? [y/N]');
if (!confirmed) {
console.log('Abandonment cancelled');
return;
}
// Update metadata
MetadataManager.updateStatus(incrementId, IncrementStatus.ABANDONED, reason);
// Move to _archive/ folder
const fromPath = path.join('.specweave/increments', incrementId);
const toPath = path.join('.specweave/increments/_archive', incrementId);
fs.moveSync(fromPath, toPath);
console.log(`✅ Moved to: ${toPath}`);
active ──abandon──> abandoned
│
paused ──abandon──> abandoned
│
abandoned (already abandoned - no-op)
completed (CANNOT abandon)
.specweave/increments/
├── 0023-release-management/ # Active
├── 0024-bidirectional-spec/ # Active
├── 0025-per-project-config/ # Active
├── _archive/ # All archived/abandoned/old increments
│ ├── 0001-core-framework/ # Completed (archived)
│ ├── 0002-core-enhancements/ # Completed (archived)
│ ├── 0008-old-approach/ # Abandoned
│ │ ├── spec.md
│ │ ├── plan.md
│ │ ├── tasks.md
│ │ └── metadata.json (status: abandoned)
│ ├── 0009-failed-experiment/ # Abandoned
│ └── 0029-cicd-auto-fix/ # Abandoned
└── _backlog/ # Future work
To un-abandon an increment:
# 1. Move back to increments/
mv .specweave/increments/_archive/0008-feature \
.specweave/increments/0008-feature
# 2. Resume via command
/sw:resume 0008
✅ Increment 0008 resumed
⚠️ Note: Was abandoned 10 days ago
Reason: Requirements changed
💡 Review spec.md to ensure still relevant
/sw:pause <id> - Pause increment (temporary, can resume)/sw:resume <id> - Resume paused or abandoned increment/sw:status - Show all increments (including abandoned count)/sw:status --abandoned - Show only abandoned increments✅ Always provide clear reason - Future you will thank you
✅ Document learnings - Add retrospective notes to spec.md before abandoning
✅ Extract reusable parts - Move to _backlog/ if salvageable
✅ Communicate - Let team know if collaborative
❌ Don't abandon as procrastination - Pause if temporarily blocked
❌ Don't delete - Abandon moves to _abandoned/, preserves history
Experiments (--type=experiment) auto-abandon after 14 days of inactivity:
# Create experiment
/sw:inc "Try GraphQL" --type=experiment
# ... 15 days pass with no activity ...
# Automatic abandonment
/sw:status
📊 Auto-Abandoned (1):
🧪 0010-graphql-experiment [experiment]
Abandoned: automatically (14+ days inactive)
Created: 15 days ago
Last activity: 15 days ago
💡 Experiments auto-abandon after 14 days of inactivity
To prevent: Update lastActivity via /sw:do or manual touch
View abandonment statistics:
/sw:status
✅ Completed (4):
0001-core-framework
0002-core-enhancements
0003-model-selection
0004-plugin-architecture
❌ Abandoned (3):
0008-old-approach (Requirements changed)
0009-failed-experiment (Experiment failed)
0010-superseded (Replaced by 0011)
📊 Summary:
- Success rate: 57% (4/7 completed)
- Abandonment rate: 43% (3/7 abandoned)
- Common reasons: Requirements changed (2), Experiment failed (1)
Abandoned work is valuable!
💡 Periodically review _archive/ folder for insights
Command: /sw:abandon
Plugin: specweave (core)
Version: v0.7.0+
Part of: Increment 0007 - Smart Status Management