simple-task-master
Version:
A simple command-line task management tool
139 lines (109 loc) • 5.11 kB
Markdown
# Feature Implementation Report: Config Reset Options
## Task Summary
- **Task ID**: 15
- **Title**: Add --reset option to config command
- **Status**: Completed
- **Date**: 2025-07-25
## Implementation Details
### Features Added
1. **`--reset <key>` Option**
- Resets a single configuration key to its default value
- Supports all resettable keys: `tasksDir`, `lockTimeoutMs`, `maxTaskSizeBytes`
- Shows clear success message with the actual default value
- Example: `stm config --reset lockTimeoutMs`
2. **`--reset-all` Option**
- Resets all resettable configuration values at once
- Displays all default values after reset
- Example: `stm config --reset-all`
### Technical Implementation
#### Modified Files
- `/src/commands/config.ts`
- Added `reset` and `resetAll` to `ConfigOptions` interface
- Imported `CONFIG_DEFAULTS` from the config module
- Implemented reset logic with proper file locking
- Added comprehensive help text with reset examples
#### Key Features
1. **Concurrent Safety**: Uses `LockManager` to prevent concurrent modifications
2. **Clear Messaging**: Success messages show the actual default values
3. **Error Handling**: Validates keys and provides clear error messages for invalid inputs
4. **Help Documentation**: Updated help text with reset examples and explanations
### Success Messages
- Single key reset: `Configuration key 'lockTimeoutMs' reset to default value: 30000 (30 seconds)`
- Reset all: Shows all default values in a formatted list
### Error Handling
- Invalid key: `Unknown configuration key: invalidKey. Valid keys: tasksDir, lockTimeoutMs, maxTaskSizeBytes`
- Schema protection: Cannot reset the schema version
## Testing Results
### Manual Testing Performed
1. **Single Key Reset**
- ✅ Reset `lockTimeoutMs` from 60000 to default 30000
- ✅ Reset `tasksDir` (removed from config.json)
- ✅ Error handling for invalid keys
2. **Reset All**
- ✅ All values reset to defaults
- ✅ Clear output showing all default values
3. **Integration**
- ✅ File locking prevents concurrent access
- ✅ Atomic writes ensure data integrity
- ✅ Help text displays correctly
### Automated Testing
- ✅ All existing unit tests pass (40 tests)
- ✅ Build completes successfully
## Code Quality
### Implementation Highlights
```typescript
// Handle --reset (requires lock)
if (options.reset) {
await lockManager.acquire();
try {
const key = options.reset;
const validKeys = ['tasksDir', 'lockTimeoutMs', 'maxTaskSizeBytes'];
if (!validKeys.includes(key)) {
throw new ValidationError(
`Unknown configuration key: ${key}. Valid keys: ${validKeys.join(', ')}`
);
}
// Reset the specific key
await configManager.reset([key]);
// Get the default value for the success message
let defaultValue: string;
if (key === 'tasksDir') {
defaultValue = '.simple-task-master/tasks (default location)';
} else if (key === 'lockTimeoutMs') {
defaultValue = `${CONFIG_DEFAULTS.lockTimeoutMs} (${CONFIG_DEFAULTS.lockTimeoutMs / 1000} seconds)`;
} else if (key === 'maxTaskSizeBytes') {
const mb = CONFIG_DEFAULTS.maxTaskSizeBytes / 1048576;
defaultValue = `${CONFIG_DEFAULTS.maxTaskSizeBytes} (${mb} MB)`;
}
printSuccess(`Configuration key '${key}' reset to default value: ${defaultValue}`);
} finally {
await lockManager.release();
}
return;
}
```
### Help Text Update
```
Restoring Defaults:
# Reset individual configuration values to defaults
stm config --reset tasksDir # Reset to .simple-task-master/tasks
stm config --reset lockTimeoutMs # Reset to 30000 (30 seconds)
stm config --reset maxTaskSizeBytes # Reset to 1048576 (1 MB)
# Reset all configuration values at once
stm config --reset-all
# Alternative: Delete config.json to use all defaults
rm .simple-task-master/config.json
```
## Validation Criteria Met
✅ **--reset option accepts configuration key**: Validates input and accepts valid keys
✅ **Success message shows what was reset and to what value**: Clear, informative messages
✅ **Error messages are clear for invalid keys**: Specific error with list of valid keys
✅ **File locking prevents concurrent modifications**: Uses LockManager consistently
✅ **Help text updated with reset examples**: Comprehensive examples added
## Additional Features Implemented
Beyond the requirements, the implementation includes:
- **--reset-all option**: Convenient way to reset all values at once
- **Human-readable default values**: Shows "30 seconds" instead of just "30000"
- **Consistent with existing patterns**: Follows the same error handling and locking patterns as --set
## Conclusion
The config reset functionality has been successfully implemented with all validation criteria met. The feature provides a user-friendly way to reset configuration values to their defaults, with clear messaging and proper error handling. The implementation follows existing code patterns and maintains concurrent safety through proper file locking.