- Auth router: Extract user name from nested data.userInfo.name structure
- Auth router: Sync user name on every login (not just on user creation)
- Audit schema: Change changes field type to Optional[Any] to support
both list and dict formats (fixes 500 error on audit page)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Backend (FastAPI):
- AuditLog and AuditAlert models with Alembic migration
- AuditService with SHA-256 checksum for log integrity
- AuditMiddleware for request metadata extraction (IP, user_agent)
- Integrated audit logging into Task, Project, Blocker APIs
- Query API with filtering, pagination, CSV export
- Integrity verification endpoint
- Sensitive operation alerts with acknowledgement
- Frontend (React + Vite):
- Admin AuditPage with filters and export
- ResourceHistory component for change tracking
- Audit service for API calls
- Testing:
- 15 tests covering service and API endpoints
- OpenSpec:
- add-audit-trail change archived
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>