## 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