fix(aihr): version candidate interview review migration

This commit is contained in:
2026-07-15 00:59:08 +08:00
parent ef21d4d61b
commit 1ca5d1eca4
5 changed files with 233 additions and 3 deletions
+2
View File
@@ -1,5 +1,7 @@
# BRD 功能审查与未完成项记录
- 2026-07-15 BRD 候选人/面试生产迁移缺口修复:生产只读复核发现 `aihr_candidate_material` 缺少 `reviewer/reviewed_time`,`aihr_interview_result` 缺少人工复核字段和 `questions_json`,`aihr_candidate_employee_link` 尚不存在;这些路径此前依赖运行时懒迁移。现新增可重复执行的 `aihr_20260715_candidate_interview_review_mysql8.sql`,兼容空库、旧表和重复执行,纳入生产迁移 Runbook、schema 回归和 `demo-check` marker;仅补结构,不写生产业务数据,正式迁移仍需发布窗口、备份和回滚责任。
- 2026-07-15 BRD 4.3/4.4/4.5 生产迁移缺口修复:严格试点门禁要求 `aihr_practice_session` 的 8 个证据字段,但版本化迁移此前只覆盖三项五维字段,`annotations_json`、主管复盘建议、人工贡献分和满意度字段仍可能依赖运行时懒迁移。现新增幂等 MySQL 8 迁移补齐其余 5 列,纳入 Runbook、schema 回归和 `demo-check` marker;仅补结构,不写业务数据,尚未执行生产迁移。
- 2026-07-15 BRD G3/4.7 生产迁移缺口修复:`aihr_knowledge_gap` 与 `aihr_knowledge_answer_feedback` 此前只在 `AihrSopSeedService` 运行时懒建,生产迁移 Runbook 没有对应版本化脚本,可能出现应用启动前结构缺失、反馈/知识缺口审计不可用。现新增幂等 MySQL 8 迁移,兼容旧反馈表补齐 `review_id/reviewer/reviewed_time`,纳入迁移 Runbook、迁移回归测试和 `demo-check` marker;仅补结构,不写业务数据,尚未执行生产迁移。
+7 -2
View File
@@ -10,6 +10,7 @@
- `aihr_case_record` 缺 `media_oss_id`、`media_url`;
- 对练五维、每日三题评分模式、SOP 提问主体/版本、组织入职日期字段尚未全部迁移;
- `aihr_prompt_template` 表存在,但内置模板数量为 `0`;
- `aihr_candidate_material` 缺少 `reviewer/reviewed_time`,`aihr_interview_result` 缺少人工复核字段和 `questions_json`,`aihr_candidate_employee_link` 尚不存在;这些候选人/HR 复核链路不能依赖首次请求触发懒迁移;
- 这些事实不能由应用启动时的懒迁移或页面 fallback 代替。
## 发布前置条件
@@ -28,6 +29,7 @@ mysql --default-character-set=utf8mb4 "$DB_NAME" < backend/script/sql/update/aih
mysql --default-character-set=utf8mb4 "$DB_NAME" < backend/script/sql/update/aihr_20260714_practice_brd_scenarios_mysql8.sql
mysql --default-character-set=utf8mb4 "$DB_NAME" < backend/script/sql/update/aihr_20260714_brd_sop_seed_mysql8.sql
mysql --default-character-set=utf8mb4 "$DB_NAME" < backend/script/sql/update/aihr_20260714_prompt_template_seed_mysql8.sql
mysql --default-character-set=utf8mb4 "$DB_NAME" < backend/script/sql/update/aihr_20260715_candidate_interview_review_mysql8.sql
mysql --default-character-set=utf8mb4 "$DB_NAME" < backend/script/sql/update/aihr_20260714_practice_evidence_mysql8.sql
mysql --default-character-set=utf8mb4 "$DB_NAME" < backend/script/sql/update/aihr_20260714_case_media_mysql8.sql
mysql --default-character-set=utf8mb4 "$DB_NAME" < backend/script/sql/update/aihr_20260714_case_learning_mysql8.sql
@@ -52,7 +54,8 @@ WHERE table_schema = DATABASE()
AND table_name IN (
'aihr_practice_scenario', 'aihr_practice_rubric', 'aihr_practice_rubric_dimension',
'aihr_practice_audio', 'aihr_practice_audio_upload', 'aihr_practice_calibration',
'aihr_knowledge_gap', 'aihr_knowledge_answer_feedback'
'aihr_knowledge_gap', 'aihr_knowledge_answer_feedback',
'aihr_candidate_material', 'aihr_interview_result', 'aihr_candidate_employee_link'
)
ORDER BY table_name;
@@ -65,6 +68,8 @@ WHERE table_schema = DATABASE()
OR (table_name = 'aihr_practice_assignment' AND column_name IN ('score', 'score_mode'))
OR (table_name = 'aihr_sop_answer_review' AND column_name IN ('prompt_version', 'requester_ext_party_id'))
OR (table_name = 'aihr_org_snapshot' AND column_name = 'hire_date')
OR (table_name = 'aihr_candidate_material' AND column_name IN ('reviewer', 'reviewed_time'))
OR (table_name = 'aihr_interview_result' AND column_name IN ('questions_json', 'reviewed_score', 'review_status', 'reviewer', 'review_note', 'reviewed_time'))
)
ORDER BY table_name, column_name;
@@ -74,7 +79,7 @@ WHERE tenant_id = '000000'
AND code IN ('summary_card', 'sop_answer', 'mentor_rewrite', 'review_annotation', 'prep_card', 'supervision_image_analysis_maintenance');
```
预期是三张场景/Rubric 表、三张证据表和两张知识治理表均存在,会话证据字段为 `8/8`,字段查询覆盖所有列,内置 Prompt 数量为 `6`。这只证明 schema/seed 迁移完成,不证明正式试点完成。
预期是三张场景/Rubric 表、三张证据表、两张知识治理表和三张候选人/面试表均存在,会话证据字段为 `8/8`,候选资料审核字段为 `2/2`,面试复核字段为 `6/6`,字段查询覆盖所有列,内置 Prompt 数量为 `6`。这只证明 schema/seed 迁移完成,不证明正式试点完成。
## 迁移后应用回归