# Error Handling Patterns
Homeboy uses a centralized error system for consistent error reporting across all commands.
## Error Categories
Errors are categorized by type to provide context about what went wrong:
### Validation Errors
Errors related to input validation and schema compliance:
- **Invalid argument**: Argument value is not allowed
- **Missing required field**: Required configuration field is missing
- **Schema violation**: JSON does not match expected schema
- **Version format invalid**: Version string does not follow semantic versioning
**Example:**
```bash
homeboy component create --local-path /path/to/component --remote-path /path
# Error: build_artifact is required
```
### I/O Errors
Errors related to file and network operations:
- **File not found**: Configuration file or path does not exist
- **Permission denied**: Insufficient permissions for file operation
- **Network connection failed**: Unable to connect to server or API
- **SSH connection failed**: Unable to establish SSH connection
**Example:**
```bash
homeboy component show nonexistent
# Error: Component not found: nonexistent
```
### Module Errors
Errors related to module execution:
- **Module not found**: Module ID not in modules directory
- **Module execution failed**: Module returned non-zero exit code
- **Module not ready**: Module ready_check failed
- **Module manifest invalid**: Module manifest has errors
**Example:**
```bash
homeboy module run nonexistent --project mysite
# Error: Module not found: nonexistent
```
### Configuration Errors
Errors related to configuration management:
- **Configuration not found**: Configuration file does not exist
- **Configuration parse failed**: Invalid JSON syntax
- **Configuration merge failed**: Conflicting or incompatible configuration
**Example:**
```bash
homeboy component set mycomponent --json 'invalid json'
# Error: Failed to parse JSON: unexpected character
```
### Internal Errors
Unexpected errors in Homeboy implementation:
- **Other**: Uncategorized internal errors
- **Panic**: Rust panic (should never occur)
## Error Context
Errors include contextual information to aid debugging:
- **Field name**: Which field caused validation error
- **Field value**: The problematic value
- **File path**: Which file caused I/O error
- **Component ID**: Which component is being processed
- **Project ID**: Which project is being processed
- **Module ID**: Which module is being executed
- **Command**: Which command failed
- **Underlying error**: Original error message
## Error Output
### Human-Readable Output
Errors are displayed with clear messages:
```
Error: Component not found: mycomponent
```
Contextual information follows:
```
• Component ID: mycomponent
• Searched in: /home/user/.config/homeboy/components/
```
### JSON Output
Errors are wrapped in JSON envelope:
```json
{
"success": false,
"error": {
"category": "validation",
"type": "not_found",
"message": "Component not found: mycomponent",
"context": {
"component_id": "mycomponent",
"search_path": "/home/user/.config/homeboy/components/"
}
}
}
```
## Error Recovery Strategies
### Validation Errors
**Cause:** Invalid input or configuration
**Recovery:**
1. Review error message for specific issue
2. Check field values and format
3. Reference documentation for correct schema
4. Retry command with corrected input
**Example:**
```bash
homeboy component create --local-path /path/to/component --remote-path /path
# Error: build_artifact is required
# Recovery:
homeboy component create \
--local-path /path/to/component \
--remote-path /path \
--build-artifact build/component.zip
```
### I/O Errors
**Cause:** File system or network issues
**Recovery:**
1. Verify file paths exist and are accessible
2. Check file permissions
3. Verify network connectivity
4. Check server availability
**Example:**
```bash
homeboy deploy mysite
# Error: SSH connection failed: Connection refused
# Recovery:
1. Check server is running: ping myserver.com
2. Verify SSH port (default 22) is open
3. Check server configuration
```
### Module Errors
**Cause:** Module execution issues
**Recovery:**
1. Verify module is installed: `homeboy module list`
2. Check module manifest for errors
3. Run module setup: `homeboy module setup <module_id>`
4. Review module output for specific error
5. Check module dependencies
**Example:**
```bash
homeboy module run python-script --project mysite
# Error: Module execution failed: exit code 1
# Recovery:
1. Check module logs for error details
2. Verify dependencies: python3 -m pip install -r requirements.txt
3. Test module locally
```
### Configuration Errors
**Cause:** JSON parsing or merge issues
**Recovery:**
1. Validate JSON syntax
2. Check for typos in field names
3. Use JSON linter/formatter
4. Restore from backup if available
5. Re-create configuration via CLI
**Example:**
```bash
homeboy component set mycomponent --json '{ "version": 1.2.3 }'
# Error: Failed to parse JSON: trailing comma
# Recovery:
homeboy component set mycomponent --json '{ "version": "1.2.3" }'
```
## Error Prevention
### Input Validation
Before executing commands, Homeboy validates:
- Required fields are present
- Values match expected types
- Paths exist and are accessible
- IDs reference existing configurations
### Schema Validation
Configuration files are validated against schemas on load:
- Component schema
- Project schema
- Server schema
- Module manifest schema
### Pre-flight Checks
Commands that perform destructive operations run checks:
- SSH connectivity before deploy
- Version detection before version bump
- Component existence before delete
### Safe Defaults
Homeboy uses safe defaults:
- No implicit overwrites (requires explicit flags)
- Dry-run mode for preview
- Backups before destructive operations
## Common Error Scenarios
### SSH Connection Failures
**Error:** `SSH connection failed`
**Common causes:**
- Server is down or unreachable
- Wrong SSH port specified
- Network firewall blocking connection
- SSH service not running on server
**Resolution:**
1. Verify server connectivity: `ping server.com`
2. Check SSH port: `telnet server.com 22`
3. Verify server configuration
4. Check firewall rules
### Module Not Found
**Error:** `Module not found: <module_id>`
**Common causes:**
- Module not installed
- Typo in module ID
- Module directory name differs from manifest ID
**Resolution:**
1. List installed modules: `homeboy module list`
2. Install missing module: `homeboy module install <url>`
3. Verify module ID spelling
### Configuration Not Found
**Error:** `Project not found: <project_id>`
**Common causes:**
- Project not created
- Typo in project ID
- Configuration file deleted
**Resolution:**
1. List existing projects: `homeboy project list`
2. Create missing project: `homeboy project create`
3. Verify project ID spelling
### Permission Denied
**Error:** `Permission denied: <path>`
**Common causes:**
- File permissions too restrictive
- SSH key permissions incorrect
- Directory not writable
**Resolution:**
```bash
# Fix file permissions
chmod 600 ~/.config/homeboy/components/*.json
# Fix SSH key permissions
chmod 600 ~/.ssh/id_ed25519
# Fix directory permissions
chmod 700 ~/.config/homeboy
```
## Debugging Errors
### Verbose Mode
Enable verbose output for detailed information:
```bash
homeboy deploy mysite --verbose
```
### Dry Run Mode
Preview operations without executing:
```bash
homeboy deploy mysite --dry-run
```
### Check Command
Run checks before operations:
```bash
homeboy deploy mysite --check
```
### Review Logs
Check Homeboy logs for detailed error information:
- Location varies by platform
- Contains error stack traces
## Related
- [Architecture overview](./architecture-overview.md) - System architecture
- [Config directory structure](./config-directory.md) - File organization