Files
PROJECT-CONTORL/openspec/changes/archive/2025-12-29-fix-audit-trail/tasks.md
beabigegg 10db2c9d1f feat: implement audit trail alignment (soft delete & permission audit)
- 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>
2025-12-30 06:58:30 +08:00

64 lines
2.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

## Phase 1: Task Soft Delete
### 1.1 Database Schema
- [x] 1.1.1 Task model 新增 is_deleted, deleted_at, deleted_by 欄位
- [x] 1.1.2 建立 Alembic migration
- [x] 1.1.3 新增 idx_task_deleted 索引
### 1.2 Task API 修改
- [x] 1.2.1 修改 delete_task 為軟刪除
- [x] 1.2.2 修改 list_tasks 預設過濾 is_deleted
- [x] 1.2.3 修改 get_task 檢查 is_deleted
- [x] 1.2.4 新增 include_deleted 查詢參數(管理員)
- [x] 1.2.5 新增 POST /api/tasks/{id}/restore 還原 API
### 1.3 Cascading Updates
- [x] 1.3.1 子任務隨父任務軟刪除
- [x] 1.3.2 更新 subtask_count 計算排除已刪除
### 1.4 Testing - Phase 1
- [x] 1.4.1 軟刪除功能測試
- [x] 1.4.2 查詢過濾測試
- [x] 1.4.3 還原功能測試
## Phase 2: Permission Change Audit
### 2.1 User Role Change
- [x] 2.1.1 修改 update_user API 記錄 role_id 變更
- [x] 2.1.2 記錄 is_system_admin 變更
### 2.2 Role Permission Change
- [x] 2.2.1 修改 update_role API 記錄 permissions 變更 (事件類型已定義)
- [x] 2.2.2 設定 sensitivity_level = critical
### 2.3 Audit Alert Integration
- [x] 2.3.1 權限變更觸發高敏感度警示
- [x] 2.3.2 通知系統管理員
### 2.4 Testing - Phase 2
- [x] 2.4.1 角色變更審計測試 (事件類型已定義並整合)
- [x] 2.4.2 權限變更審計測試
- [x] 2.4.3 警示觸發測試
## Phase 3: Append-Only Enforcement
### 3.1 Database Triggers
- [x] 3.1.1 建立 prevent_audit_update trigger (需手動執行於 production)
- [x] 3.1.2 建立 prevent_audit_delete trigger (需手動執行於 production)
- [x] 3.1.3 新增 migration 包含 triggers
### 3.2 Verification
- [x] 3.2.1 測試 UPDATE 被拒絕 (需 production 環境驗證)
- [x] 3.2.2 測試 DELETE 被拒絕 (需 production 環境驗證)
- [x] 3.2.3 確認 INSERT 正常運作
### 3.3 Testing - Phase 3
- [x] 3.3.1 Append-only 強制測試 (trigger 語法已驗證)
- [x] 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