You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

3.0 KiB

评分治理基础模块 验收记录

日期:2026-08-20 · 状态:✅ 已验收(Docker/MySQL 黑盒 PASS=48 · FAIL=0 · SKIP=0)

1. Flyway V25 迁移结果

  • 最新成功迁移 V25(candidate scoring governance,success=1) ✅
  • H2(测试)与 MySQL(运行库)均已成功应用。

2. 四张治理表

  • candidate_scoring_appeals(uk_csa_active active_key 唯一、uk_csa_idem idempotency_key 唯一、dimension/status CHECK)
  • candidate_scoring_appeal_history(含 actor_role)
  • candidate_scoring_snapshot_history(回滚前后 score/version/rulesVersion)
  • candidate_scoring_rollback_limits(rollback_year,UNIQUE(student_user_id, rollback_year))

3. 黑盒结果

PASS=48 · FAIL=0 · SKIP=0(Docker/MySQL 真实环境)

  • 学生:申诉→PENDING、列表/详情、history 脱敏、同幂等键同体重放 200、不同体 409/8607、同维度同周期 409/8602、撤销→CANCELLED、重复撤销 409/8606
  • 管理员:列表、REJECT 缺 reason 400/8604、APPROVE→APPROVED、重复 APPROVE 幂等、终态改决定 409/8603、回滚→ROLLED_BACK、重复回滚幂等、history 顺序 PENDING→APPROVED→ROLLED_BACK
  • 回滚限流:3 次后第 4 次 409/8605,rollback_limits 计数保持 3
  • 快照审计:afterVersion = beforeVersion + 1,rulesVersion 正确
  • 权限:COMPANY 全 403/2002、STUDENT 访问 admin 403/2002、跨学生 403、未登录 401
  • 数据隔离:jobs/applications/offers/candidate_feedback/student_profiles/student_preferences 零改动
  • 回归:既有 6 个评分接口均 HTTP 200

4. OpenAPI 路径数

95 paths(静态 docs/openapi-rc.json 与运行时 /v3/api-docs 一致;治理新增 8 paths / 9 operations,POST+GET 共享 /appeals)

5. 权限矩阵

接口 未登录 STUDENT COMPANY ADMIN
申诉 1–4 401 ✅ 本人 403 403
历史(8) 401 ✅ 本人(脱敏) 403 ✅ 全量
admin 5/6/7/9 401 403 403 ✅

6. 回滚前后快照审计

candidate_scoring_snapshot_history 记录 action=ROLLBACK、before/after score、before/after version、before/after rules_version;afterVersion = beforeVersion + 1。

7. 年度回滚上限

每学生每自然年 ≤3 次;SELECT ... FOR UPDATE 悲观锁串行化并发;第 4 次稳定 409/8605,计数不超额。

8. 已修复缺陷(验收中发现)

  1. 学生详情泄露 reviewerId:AppealResponse 对 reviewerId 误加 @JsonInclude(ALWAYS)(学生端 null 也被序列化)。修复:移除 ALWAYS,null 由全局 NON_NULL 省略。复验:学生响应不含 reviewerId/actorUserId/phone/email/passwordHash/resumeUrl ✅
  2. 快照 afterVersion 读到持久化上下文旧值(before=after)。修复:afterVersion 确定性计算 = beforeVersion + 1(或 0)。复验:before=1、after=2 ✅

9. 备注

未删除业务数据;未修改 V1–V24;未修改已验收接口。治理数据仅写入 4 张治理表 + candidate_dimension_scores 新版本 + audit_logs。