fix(appeal): close Phase 18 KEEP-VERIFY — 8 defects (zero-coverage appeals table + 6 fake-green tests; operator-notification FK crash; appealType CHECK; escalated dead-end; processAppeal race; soft-delete filters; hardcoded resolved; evidence contract); add AppealPhase18IntegrationTest (15); full regression 494 green

This commit is contained in:
WorkBuddy
2026-09-17 21:07:25 +08:00
parent 307c9efb36
commit 3f60611a74
13 changed files with 661 additions and 151 deletions
@@ -463,15 +463,17 @@ D2——`RelationshipService.createMatch` 不写 episode/lastActivityAt,与 `M
**复验结论:** 修复 6 处真实缺陷(D1 测试库缺三表必崩级盲区、D2 人工标记无审计、D3 敏感访问无审计、D4 审计缺 ip/ua、D5 findByUserId 未过滤软删、D6 jakarta 编译缺陷+risk_events 漏 updated_at);新增集成测试 7 例;全量回归 488 全绿。
**报告:** `docs/Phase-17-V11-Recovery-Completion-Report-2026-09-17.md`。**Phase 18 需用户确认后启动。**
### Phase 18:申诉 — KEEP-VERIFY
### Phase 18:申诉 — KEEP-VERIFY ✅ 已完成(2026-09-17 KEEP-VERIFY 复验通过)
**Files:** appeal 模块、Miniapp appeal 页面和后台 AppealCenter。
- [ ] 回归 ban/suspend 申诉、幂等处理、审批和解除动作。
- [ ] 验证申诉不能绕过仍有效的其他风险处置。
- [ ] 是否首发继续由已确认 Feature Flag 控制。
- [x] 回归 ban/suspend 申诉、幂等处理、审批和解除动作。
- [x] 验证申诉不能绕过仍有效的其他风险处置(负向验证已证守卫有牙)。
- [x] 是否首发继续由已确认 Feature Flag 控制(`features.appeal-enabled`,dev/docker 均 false)。
**Gate:** 申诉通过只解除目标处置;拒绝后原处置保持有效。
**Gate:** 申诉通过只解除目标处置 ✅;拒绝后原处置保持有效 ✅。
**复验结论:** 修复 8 处真实缺陷(D1 测试库缺 `appeals` 表 + `AppealServiceTest` 6 处假绿 → 零覆盖;**D2 escalate 向 operator 发用户通知撞 `notifications.user_id→users(id)` FK,PG 上升级 100% 失败**;**D3 appealType 未校验生产 `chk_appeal_type` 白名单**;D4 escalated 死胡同;D5 processAppeal 先读后写并发竞态;D6 三处查询漏软删过滤;D7 硬编码 resolved;D8 证据字段契约 evidenceFileIds);新增 `AppealPhase18IntegrationTest`(15 例),删除假绿 `AppealServiceTest`(9 例);全量回归 494 全绿。
**报告:** `docs/Phase-18-V11-Recovery-Completion-Report-2026-09-17.md`。**Phase 19 需用户确认后启动。**
### Phase 19:统一运营后台 + 用户端公益服务页面 — ADD/REFACTOR