- Task Soft Delete:
- Add is_deleted, deleted_at, deleted_by fields to Task model
- Convert DELETE to soft delete with cascade to subtasks
- Add include_deleted query param (admin only)
- Add POST /api/tasks/{id}/restore endpoint
- Exclude deleted tasks from subtask_count
- Permission Change Audit:
- Add user.role_change event (high sensitivity)
- Add user.admin_change event (critical, triggers alert)
- Add PATCH /api/users/{id}/admin endpoint
- Add role.permission_change event type
- Append-Only Enforcement:
- Add DB triggers for audit_logs immutability (manual for production)
- Migration 008 with graceful trigger failure handling
- Tests: 11 new soft delete tests (153 total passing)
- OpenSpec: fix-audit-trail archived, fix-realtime-notifications & fix-weekly-report proposals added
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2.2 KiB
2.2 KiB
Phase 1: Task Soft Delete
1.1 Database Schema
- 1.1.1 Task model 新增 is_deleted, deleted_at, deleted_by 欄位
- 1.1.2 建立 Alembic migration
- 1.1.3 新增 idx_task_deleted 索引
1.2 Task API 修改
- 1.2.1 修改 delete_task 為軟刪除
- 1.2.2 修改 list_tasks 預設過濾 is_deleted
- 1.2.3 修改 get_task 檢查 is_deleted
- 1.2.4 新增 include_deleted 查詢參數(管理員)
- 1.2.5 新增 POST /api/tasks/{id}/restore 還原 API
1.3 Cascading Updates
- 1.3.1 子任務隨父任務軟刪除
- 1.3.2 更新 subtask_count 計算排除已刪除
1.4 Testing - Phase 1
- 1.4.1 軟刪除功能測試
- 1.4.2 查詢過濾測試
- 1.4.3 還原功能測試
Phase 2: Permission Change Audit
2.1 User Role Change
- 2.1.1 修改 update_user API 記錄 role_id 變更
- 2.1.2 記錄 is_system_admin 變更
2.2 Role Permission Change
- 2.2.1 修改 update_role API 記錄 permissions 變更 (事件類型已定義)
- 2.2.2 設定 sensitivity_level = critical
2.3 Audit Alert Integration
- 2.3.1 權限變更觸發高敏感度警示
- 2.3.2 通知系統管理員
2.4 Testing - Phase 2
- 2.4.1 角色變更審計測試 (事件類型已定義並整合)
- 2.4.2 權限變更審計測試
- 2.4.3 警示觸發測試
Phase 3: Append-Only Enforcement
3.1 Database Triggers
- 3.1.1 建立 prevent_audit_update trigger (需手動執行於 production)
- 3.1.2 建立 prevent_audit_delete trigger (需手動執行於 production)
- 3.1.3 新增 migration 包含 triggers
3.2 Verification
- 3.2.1 測試 UPDATE 被拒絕 (需 production 環境驗證)
- 3.2.2 測試 DELETE 被拒絕 (需 production 環境驗證)
- 3.2.3 確認 INSERT 正常運作
3.3 Testing - Phase 3
- 3.3.1 Append-only 強制測試 (trigger 語法已驗證)
- 3.3.2 Checksum 驗證測試 (已有 test_audit.py 測試)
Notes
- Triggers: MySQL triggers 需要 SUPER 權限才能在有 binary logging 的環境建立。Migration 會嘗試建立 trigger,失敗時記錄警告。Production 環境需手動執行 trigger SQL。
- Tests: 新增 11 個軟刪除相關測試於 tests/test_soft_delete.py
- Total Tests: 153 tests passing