## Decision: Universal Model History via django-pghistory

### Pattern Implementation
- **Tracking Method**: `pghistory.Snapshot()` applied to all concrete models
- **Inheritance Strategy**: Base model class with history tracking
- **Context Capture**:
  ```python
  # core/models.py
  import pghistory
  
  class HistoricalModel(models.Model):
      class Meta:
          abstract = True

      @pghistory.track(pghistory.Snapshot())
      def save(self, *args, **kwargs):
          return super().save(*args, **kwargs)
  ```

### Integration Scope
1. **Model Layer**:
   - All concrete models inherit from `HistoricalModel`
   - Automatic event labeling:
     ```python
     @pghistory.track(
         pghistory.Snapshot('model.create'),
         pghistory.AfterInsert('model.update'),
         pghistory.BeforeDelete('model.delete')
     )
     ```

2. **Context Middleware**:
   ```python
   # core/middleware.py
   pghistory.context(lambda request: {
       'user': str(request.user) if request.user.is_authenticated else None,
       'ip': request.META.get('REMOTE_ADDR'),
       'user_agent': request.META.get('HTTP_USER_AGENT'),
       'session_key': request.session.session_key
   })
   ```

3. **Admin Integration**:
   - Custom history view for Django Admin
   - Version comparison interface