# Upgrade Guide: StarPunk v1.1.1 "Polish"

**Release Date**: 2025-11-25
**Previous Version**: v1.1.0
**Target Version**: v1.1.1

## Overview

StarPunk v1.1.1 "Polish" is a maintenance release focused on production readiness, performance optimization, and operational improvements. This release is **100% backward compatible** with v1.1.0 - no breaking changes.

### Key Improvements

- **RSS Memory Optimization**: Streaming feed generation for large feeds
- **Performance Monitoring**: MetricsBuffer with database pool statistics
- **Enhanced Health Checks**: Three-tier health check system
- **Search Improvements**: FTS5 fallback and result highlighting
- **Unicode Slug Support**: Better international character handling
- **Admin Dashboard**: Visual metrics and monitoring interface
- **Memory Monitoring**: Background thread for system metrics
- **Logging Improvements**: Proper log rotation verification

## Prerequisites

Before upgrading:

1. **Backup your data**:
   ```bash
   # Backup database
   cp data/starpunk.db data/starpunk.db.backup

   # Backup notes
   cp -r data/notes data/notes.backup
   ```

2. **Check current version**:
   ```bash
   uv run python -c "import starpunk; print(starpunk.__version__)"
   ```

3. **Review changelog**: Read `CHANGELOG.md` for detailed changes

## Upgrade Steps

### Step 1: Stop StarPunk

If running in production:

```bash
# For systemd service
sudo systemctl stop starpunk

# For container deployment
podman stop starpunk  # or docker stop starpunk
```

### Step 2: Pull Latest Code

```bash
# From git repository
git fetch origin
git checkout v1.1.1

# Or download release tarball
wget https://github.com/YOUR_USERNAME/starpunk/archive/v1.1.1.tar.gz
tar xzf v1.1.1.tar.gz
cd starpunk-1.1.1
```

### Step 3: Update Dependencies

```bash
# Update Python dependencies with uv
uv sync
```

### Step 4: Verify Configuration

No new required configuration variables in v1.1.1, but you can optionally configure new features:

```bash
# Optional: Adjust feed caching (default: 300 seconds)
export FEED_CACHE_SECONDS=300

# Optional: Adjust database pool size (default: 5)
export DB_POOL_SIZE=5

# Optional: Adjust metrics sampling rates
export METRICS_SAMPLING_DATABASE=1.0
export METRICS_SAMPLING_HTTP=0.1
export METRICS_SAMPLING_RENDER=0.1
```

### Step 5: Run Database Migrations

StarPunk uses automatic migrations - no manual SQL needed:

```bash
# Migrations run automatically on startup
# Verify migration status:
uv run python -c "from starpunk.database import init_db; init_db()"
```

Expected output:
```
INFO [init]: Database initialized: data/starpunk.db
INFO [init]: No pending migrations
INFO [init]: Database connection pool initialized (size=5)
```

### Step 6: Verify Installation

Run the test suite to ensure everything works:

```bash
# Run tests (should see 600+ tests passing)
uv run pytest
```

### Step 7: Restart StarPunk

```bash
# For systemd service
sudo systemctl start starpunk
sudo systemctl status starpunk

# For container deployment
podman start starpunk  # or docker start starpunk
podman logs -f starpunk
```

### Step 8: Verify Upgrade

1. **Check version**:
   ```bash
   curl https://your-domain.com/health
   ```
   Should show version "1.1.1"

2. **Test admin dashboard**:
   - Log in to admin interface
   - Navigate to "Metrics" tab
   - Verify charts and statistics display correctly

3. **Test RSS feed**:
   ```bash
   curl https://your-domain.com/feed.xml | head -20
   ```
   Should return valid XML with streaming response

4. **Check logs**:
   ```bash
   tail -f data/logs/starpunk.log
   ```
   Should show clean startup with no errors

## New Features

### Admin Metrics Dashboard

Access the new metrics dashboard at `/admin/dashboard`:

- Real-time performance metrics
- Database connection pool statistics
- Auto-refresh every 10 seconds (requires JavaScript)
- Progressive enhancement (works without JavaScript)
- Charts powered by Chart.js

### RSS Feed Optimization

The RSS feed now uses streaming for better memory efficiency:

- Memory usage reduced from O(n) to O(1)
- Lower time-to-first-byte for large feeds
- Cache stores note list, not full XML
- Transparent to clients (no API changes)

### Enhanced Health Checks

Three tiers of health checks available:

1. **Basic** (`/health`): Public, minimal response
2. **Detailed** (`/health?detailed=true`): Authenticated, comprehensive
3. **Full Diagnostics** (`/admin/health`): Authenticated, includes metrics

### Search Improvements

- FTS5 detection at startup
- Graceful fallback to LIKE queries if FTS5 unavailable
- Search result highlighting with XSS prevention

### Unicode Slug Support

- Unicode normalization (NFKD) for international characters
- Timestamp-based fallback for untranslatable text
- Never fails Micropub requests due to slug issues

## Configuration Changes

### No Breaking Changes

All existing configuration continues to work. New optional variables:

```bash
# Performance tuning (all optional)
FEED_CACHE_SECONDS=300          # RSS feed cache duration
DB_POOL_SIZE=5                  # Database connection pool size
METRICS_SAMPLING_DATABASE=1.0   # Sample 100% of DB operations
METRICS_SAMPLING_HTTP=0.1       # Sample 10% of HTTP requests
METRICS_SAMPLING_RENDER=0.1     # Sample 10% of template renders
```

### Removed Configuration

None. All v1.1.0 configuration variables continue to work.

## Rollback Procedure

If you encounter issues, rollback to v1.1.0:

### Step 1: Stop StarPunk

```bash
sudo systemctl stop starpunk  # or podman/docker stop
```

### Step 2: Restore Previous Version

```bash
# Restore from git
git checkout v1.1.0

# Or restore from backup
cd /path/to/backup
cp -r starpunk-1.1.0/* /path/to/starpunk/
```

### Step 3: Restore Database (if needed)

```bash
# Only if database issues occurred
cp data/starpunk.db.backup data/starpunk.db
```

### Step 4: Restart

```bash
sudo systemctl start starpunk
```

## Common Issues

### Issue: Log Rotation Not Working

**Symptom**: Log files growing unbounded

**Solution**:
1. Check log file permissions
2. Verify `data/logs/` directory exists
3. Check `LOG_LEVEL` configuration
4. See `docs/operations/troubleshooting.md`

### Issue: Metrics Dashboard Not Loading

**Symptom**: 404 or blank metrics page

**Solution**:
1. Clear browser cache
2. Verify you're logged in as admin
3. Check browser console for JavaScript errors
4. Verify htmx and Chart.js CDN accessible

### Issue: RSS Feed Validation Errors

**Symptom**: Feed validators report errors

**Solution**:
1. Streaming implementation is RSS 2.0 compliant
2. Verify XML structure with validator
3. Check for special characters in note content
4. See `docs/operations/troubleshooting.md`

## Performance Tuning

See `docs/operations/performance-tuning.md` for detailed guidance on:

- Database pool sizing
- Metrics sampling rates
- Cache configuration
- Log rotation settings

## Support

If you encounter issues:

1. Check `docs/operations/troubleshooting.md`
2. Review logs in `data/logs/starpunk.log`
3. Run health checks: `curl /admin/health`
4. File issue on GitHub with logs and configuration

## Next Steps

After upgrading:

1. **Review new metrics**: Check `/admin/dashboard` regularly
2. **Adjust sampling**: Tune metrics sampling for your workload
3. **Monitor performance**: Use health endpoints for monitoring
4. **Update documentation**: Review operational guides
5. **Plan for v1.2.0**: Review roadmap for upcoming features

## Version History

- **v1.1.1 (2025-11-25)**: Polish release (current)
- **v1.1.0 (2025-11-25)**: Search and custom slugs
- **v1.0.1 (2025-11-25)**: Bug fixes
- **v1.0.0 (2025-11-24)**: First production release
