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
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_activeactive_key 唯一、uk_csa_idemidempotency_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. 已修复缺陷(验收中发现)
- 学生详情泄露
reviewerId:AppealResponse 对 reviewerId 误加@JsonInclude(ALWAYS)(学生端 null 也被序列化)。修复:移除 ALWAYS,null 由全局 NON_NULL 省略。复验:学生响应不含 reviewerId/actorUserId/phone/email/passwordHash/resumeUrl ✅ - 快照 afterVersion 读到持久化上下文旧值(before=after)。修复:afterVersion 确定性计算
= beforeVersion + 1(或 0)。复验:before=1、after=2 ✅
9. 备注
未删除业务数据;未修改 V1–V24;未修改已验收接口。治理数据仅写入 4 张治理表 + candidate_dimension_scores 新版本 + audit_logs。