Files
prop-ai-hr/docs/BRD_IMPLEMENTATION_AUDIT.md
T

278 lines
87 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.
# BRD 功能审查与未完成项记录
更新时间:2026-07-14
## 1. 审查口径
本记录以 [物业AI人力资源系统业务需求文档BRD.md](物业AI人力资源系统业务需求文档BRD.md) 为业务事实源,以 [FIGMA_IMPLEMENTATION_MATRIX.md](FIGMA_IMPLEMENTATION_MATRIX.md) 判断页面与视觉落地,以 [API_INTEGRATION.md](API_INTEGRATION.md) 和真实接口/浏览器结果判断运行闭环。
`Figma` 的 `[x]` 只表示画板对应页面已实现,不代表正式试点数据、组织权限或线上生产验收已经完成。BRD 的“阶段二个人 AI 助理”和三期运营页面不纳入当前一期修复范围。
## 2. 已确认完成的当前基线
| 领域 | 当前证据 | 结论 |
|---|---|---|
| 员工端今日/练/问/我 | `mobile-uni/src/pages/user/*`;员工首页、训练前预习、独立练习路由已实现 | 2026-07-14 已同步线上 H5;线上主 JS 与本地构建 SHA-256 一致,学习页已显示错题本和原因筛选,后续只做发布后回归 |
| 主管工作台/复盘/派发 | `mobile-uni/src/pages/supervisor/*`;线上工作台已完成视觉回归 | 页面主链路已在位;正式主管身份仍依赖组织数据 |
| 训练音频对象权限 | `AihrMobileController`、`AihrPracticeSeedService`;`GET /api/aihr/mobile/oss/{ossId}` | 已按员工本人、主管项目范围和系统用户区分音频读取权限;本地真实 HTTP 验证:归属员工 200,其他员工 403;生产正式主管范围仍需组织同步数据支撑 |
| 候选人面试与 HR 复核 | `mobile-uni/src/pages/candidate/*`、`frontend/src/views/recruit/interview.vue`、`AihrInterviewController` | 候选人资料移动端上传/列表只接受 APP 候选人本人身份,HR 通过独立审核接口处理;AI 面试结果现已持久化 `待复核/已复核`、AI 分、人工复核分、最终采用分、复核人、意见和时间,管理端可提交人工复核;正式试点仍需抽查复核证据 |
| SOP/RAG/资料处理 | `frontend/src/views/knowledge/*`、`backend/.../AihrSopSeedService.java` | 搜索、引用、反馈、异步处理和评审入口已在位 |
| 对练/每日题/主管带教 | `backend/.../AihrPracticeSeedService.java`、`mobile-uni/src/pages/user/practice` | 每日三题现支持文字或录音转写,语音 `audioUrl/ossId` 随作业提交并持久化;普通陪练、即时反馈、低分再练、错题归因和主管带教已在位,正式窗口仍需验证真实音频与低分样本 |
| 案例上传/整理/筛选 | `backend/.../AihrCaseService.java`、`mobile-uni/src/pages/user/cases`、`frontend/src/views/knowledge/cases.vue` | 上传与整理已在位,案例状态在内存缺失时可从 `aihr_case_record` 回读恢复;APP 用户的读取按项目范围校验,写入接口已增加“主管/项目经理/系统用户”门禁,普通员工不能提交、整理或入库案例;原始音频现在上传到 `sys_oss` 并在 `aihr_case_record.media_oss_id/media_url` 留痕,员工端和管理端详情均可回放;本轮补上管理端上传的项目选择与后端无项目拒绝,避免案例落成员工不可见的无范围记录;当前仓库仍没有可用预渲染视频样片资产,也没有稳定的学习点/主管点评模型,不能用音频回放冒充完整案例学习闭环 |
## 3. 未完成项与优先级
### P0:必须先解决,否则不能称为正式试点完成
| 缺口 | BRD依据 | 当前事实 | 下一步 |
|---|---|---|---|
| 正式主管身份、项目范围和数据权限 | 5.4、L1-B、G3 | 代码已有 `aihr_org_snapshot`、岗位/项目过滤和主管接口;生产快照当前为 22 条 active、2 个项目,但手机号关联为 0/22;生产环境当前未配置 `AIHR_ORG_SYNC_*` 组织同步凭据;移动端角色查询失败已改为安全降级员工端,员工登录/路由现在通过认证的 `/api/aihr/mobile/me` 刷新官方岗位,只有组织未映射时才保留本地演示岗位回退;线上视觉测试不能替代真实主管身份验证;组织覆盖写入现在会拒绝被跳过、手机号不完整、脱敏手机号或疑似乱码的快照,除非显式传 `allowPartialReplace=true`;重复 `ext_party_id` 无论是否允许部分覆盖都直接拒绝,避免唯一键折叠不同员工身份 | 由业务/运维提供正式组织接口配置后先做 dry-run,核对项目、岗位、`ext_party_id`、手机号;补齐手机号映射并确认主管身份后,才执行正式同步和主管数据权限验收 |
| 组织快照姓名/部门存储边界 | BRD 5.4、TechSpec 3.1 | BRD 要求本地只存外部 `party_id`,当前快照历史表仍有姓名/部门字段;已增加生产默认关闭的 `store-display-fields`,新同步和快照 API 可不再写/返姓名部门,但旧行尚未清理,且 `person_phone` 仍用于身份映射 | 由业务/法务/安全确定最小字段清单和保留期;完成历史数据清理、生产迁移和管理端只读展示方案后,才能关闭该 P0 |
| G5 情绪疏导树洞隐私边界 | BRD 12.1、附录 A 第三层 | 当前仓库没有树洞入口、独立存储、留痕策略、训练集排除机制或删除/审计合同;历史一期方案明确将“情绪疏导树洞”列为一期不做。现有陪练中的情绪识别、纠偏和反馈属于训练证据,不能冒充“不留痕树洞” | 在进入正式生产前由业务、法务和安全共同确认是否纳入当前阶段;若纳入,必须单独定义匿名/身份边界、零落库与日志脱敏、模型供应商留存、删除证明和误伤升级路径;在决策和合同未明确前保持未实现,不用陪练情绪数据承接树洞诉求 |
| 外部 AI 的 PII 出境与留存 | 4.3.2、4.3.3、G3、G6 | 对练、面试、SOP、Embedding、Rerank、TTS 的文本请求已统一做最小脱敏;ASR 仍发送音频本体,视觉 OCR/视频关键帧仍发送图片本体,当前没有供应商不留存、删除证明或本地语音/视觉模型证据;视频失败日志已遮蔽文件名中的已知 PII | 正式试点前由业务、法务和安全确认供应商留存/训练/跨境条款,或切换本地模型;补音频、图片的审计与删除证据后,才能把 G3/G6 判为通过 |
| LLM/ASR/TTS 调用成本计量与自动降级 | 6.3、12.1、G6、TechSpec 3.8 | 已有 `AIHR_AI_RUNTIME_ENABLED`、`AIHR_AI_CHAT_ENABLED`、`AIHR_AI_SPEECH_ENABLED` 手动断路器;当前没有 `llm_call_log`,也没有按模块、模型、token、延迟和费用的持久化月度计量,不能把手动开关宣称为成本闸门已完成 | 先由供应商/财务确认 token 计费字段、单价、月度上限和告警阈值,再新增租户范围的调用日志与自动降级;在计费契约明确前保持手动断路器,不硬编码价格或用日志估算正式成本 |
| 管理端/后端生产发布证据 | 6.3、12.1、L1-C | 生产根站点 `https://peilian.njzhmj.top/`、Caddy `/prod-api`、systemd `wygj-aihr.service` 和后端 jar 的基础发布链路可核查;租户接口和移动端首页 API 返回 200。当前分支最新管理端资源与线上 hash 不一致,不能把基础服务可访问认定为当前修复已发布 | 发布基础设施证据已具备;仍需按正式发布批次核对管理端静态包、后端 jar、回滚脚本和生产部署凭据,不能把“服务可访问”直接等同于当前分支已上线或正式试点通过 |
| M5 正式试点证据 | L1-B/C/D、G1/G3/G4 | 已补员工训练后 1–5 分满意度和可选意见采集,意见脱敏后写入 `aihr_practice_session`,CSV/严格门禁可读满意度响应数与平均分;但本地样本不能代表正式窗口,仍不能用 seed/烟测数据替代,尚无法证明“满意度 ≥4/5” | 固定 1–2 个住宅项目和窗口,按唯一在职身份采集训练、人工校准、SOP 评审、完训率和满意度;严格门禁要求满意度有真实响应且平均分 ≥4.0/5 |
| AI 分数与人工复核边界 | 4.1、4.5、G1/G2 | 面试和对练已有人工复核/校准入口;正式试点 CSV 已补明细级 AI 分、人工校准分、校准人、校准时间和最终采用分;管理端与员工端均已显示“AI 仅作辅助参考、人可复核/否决、不直接决定绩效或晋升”;正式试点仍需用真实窗口验证人工可否决证据 | 在正式试点报告中抽查校准记录与最终采用值,确认人工分可覆盖 AI 建议且不直接挂钩绩效/晋升 |
### P1:一期 BRD 功能仍未形成完整业务闭环
| 缺口 | BRD依据 | 当前事实 | 建议实现顺序 |
|---|---|---|---|
| 岗位-SOP匹配与上岗资格 gating | 3.1、4.2、TechSpec P1 | 已补 `GET /api/knowledge/position-sop` 和员工学习页状态提示:一期只确认生活顾问内置学习导航;尚无 `sop_applicability`、`onboard_task`、`qualification_gate` 正式数据闭环,不能作为上岗资格判断 | 先接正式岗位/项目与 SOP 适用范围数据,再补培训任务状态;资格 gating 必须由 HR 明确规则和证据来源后实现 |
| BRD 全覆盖训练场景 | 3.1、4.3.4 | 当前首批 12 条生活顾问场景覆盖投诉、催费/停车费、报修跟进、突发求助;BRD 另列服务推介/增值与日常服务,当前没有对应的核心场景内容和 SOP 口径 | 由内容负责人确认服务推介、日常服务的成功条件、合规边界和 SOP 后,再按现有场景表补内容;不先用开发者自拟话术充当正式验收素材 |
| 认证等级与激励规则可配置 | 4.5、10.2-A、TechSpec M6 | 成长激励页已有初/中/高级证据包和学分口径展示,但规则仍是前端硬编码;原“排行榜”开关无实际业务作用,已移除并明确标记只读;尚无 `cert_rule`/`incentive_rule` 的持久化、版本、角色权限和生效记录 | 先由 HR 确认学分来源、分值、防刷和初/中/高级条件,再设计规则表与管理员 CRUD;在规则契约明确前,不把静态展示称为可配置 |
| 智能错题本 | 3.1、4.4、TechSpec P1 | 已补员工本人错题本和主管 `/api/aihr/mobile/practice/team` 内的 `mistakes` 聚合:按当前项目权限统计场景、归因、次数、影响人数、平均分和最近发生时间;员工端可跳转待训练 retry assignment,retry 已完成时改为显示“已完成”,不再重复引导进入已完成任务;不新增独立错题事实表 | 继续用正式组织快照和试点窗口验证主管只看到本项目数据;后续可在真实错题量上来后补趋势/导出,不把本地演示样本当正式指标 |
| 案例学习/视频详情 | 3.1、4.6、矩阵第35行 | `AihrCaseService` 已能从 `aihr_case_record` 恢复转写案例,且新增按项目范围校验的 `GET /api/knowledge/case/records/{caseId}`;原始音频已写入 `sys_oss` 并在详情回放,仍缺预渲染视频样片、学习点、主管点评和相关训练场景 | 由业务提供一期样片或正式视频媒体 URL,并确定学习点、主管点评和训练场景字段,再扩持久化契约;当前不把原始音频回放冒充视频学习详情 |
| 案例库质量与数量 | L1-B、4.6/4.7 | 上传/整理/筛选路径已有;“至少20条脱敏案例”和每周每项目一条需要正式数据证明,当前也没有可用于一期样片验收的真实视频资产 | 先按项目窗口采集并脱敏检查,再补案例统计/学习详情导出;不使用空壳视频或演示 seed 冒充 |
| RAG 可用率与知识治理 | 4.7、L1-C、G3 | 搜索、引用、反馈、知识缺口和人工评审入口已有;员工反馈保存同一次搜索的 `reviewId`,SOP 评审记录和搜索响应现在保留答案生成 `promptVersion`;知识库上传、导入、向量重建、评审队列和模型配置管理接口已收紧为 `superadmin/hr_operator`;住宅核心流程覆盖率与可用率仍需正式评审数据,不能宣称完成逐问答全链路追溯 | 后续由业务确认模型/检索批次的正式版本口径,再补检索批次与模型版本;当前先用 `reviewId + promptVersion + query + fragment` 做可追溯统计,不伪造正式可用率 |
| 方言语音与多模态训练验收 | 4.3.2、4.3.3、L1-C | ASR/TTS、音频 OSS 留痕和文本降级链路已有;但当前没有四川话/粤语等方言供应商配置、样本集和准确率/响应时延证据,也没有把图像/视频训练输入纳入一期验收口径 | 先确定一期方言厂商和可接受指标,用真实短音频做至少一条方言路径回归;图像/视频输入另按场景与合规边界评审,不用通用文本链路冒充完成 |
### 2026-07-14 增量:BRD 内容数量门槛
- `scripts/demo-check.sh` 的严格模式现在额外检查已解析的住宅 SOP 文档数量 `>=5`(`aihr_knowledge_attach.type='sop' AND status=2`)、已入库案例数量 `>=20`(`aihr_case_record.status='已入库'`)和案例文本中已知手机号/邮箱/房号模式为 0。
- 这些查询只证明数量和已知模式脱敏,不证明 5 个核心流程覆盖、姓名等未结构化 PII、每周每项目产出或视频学习内容;这些仍需业务内容复核和正式窗口数据。
- `scripts/tests/demo-check-pilot-gates.test.sh` 已补充跨租户、错误状态和非 SOP 文档样本,防止严格门禁用错误数据刷过。
### 2026-07-14 候选资料上传边界复核
- 发现移动端候选资料选择器虽然只显示 PDF/Word/JPG/PNG/WebP,后端此前只校验 20MB,直接构造 multipart 请求仍可把任意扩展名文件写入 `sys_oss`。
- 已在 `AihrCandidateMaterialService` 增加服务端同源扩展名白名单,并清理文件名中的路径分隔符和控制字符;补充单测和 `demo-check` marker。该修复只收紧上传边界,不改变候选人本人绑定、HR 审核三态或现有资料表结构。
- RAG 评审追溯同时补上空问题门禁:空查询仍返回明确的无结果响应,但不再写入 `aihr_sop_answer_review`,避免误点击污染正式 SOP 可用率分母;已有 `verify_demo_questions` 演示来源跳过规则保持不变。
- 案例语音上传也补上服务端扩展名白名单(MP3/WAV/M4A/WebM/OGG/AAC/FLAC)和文件名清理,避免只依赖管理端/移动端的 `accept` 属性;该修复不改变 ASR、OSS 留痕或项目权限链路。
### 2026-07-14 增量:BRD 核心流程覆盖无法判定
- BRD 4.3.4 要求投诉处理、费用催缴、服务推介/增值、日常服务与突发应急等一期训练覆盖;TechSpec 只给出 `投诉/催费/推介/应急` 的场景类型示例,当前没有双方确认的核心流程编码表。
- 当前生活顾问启用场景只有 4 类:`投诉处理`、`催费/停车费`、`报修跟进`、`突发求助`;其中缺少明确的服务推介/增值与日常服务内容,不能用“场景总数 12”替代覆盖证明。
- 当前 `aihr_knowledge_attach` 只有文档名称、类型、状态和备注,没有 `core_flow_code` 或岗位/项目适用范围字段;本地已解析住宅 SOP 文档只有 3 个,也不能从文件名猜出 BRD 要求的 5 个核心流程。
- 因此严格门禁暂时只检查 SOP 数量,不把文件名或 `scenario_type` 自行映射成正式流程;下一步需要内容负责人确认 5 个流程编码、每个流程的 SOP 文档和成功条件,再补数据字段、管理入口和覆盖率门禁。
### 2026-07-14 增量:用户端真实数据边界复核
- 对 `mobile-uni` 员工端今日、学习中心、练习和问师傅页面做了接口失败、真实空列表和路由状态复核:接口失败时会清空对应私有数据并提示错误,真实空列表保持为空,没有把静态任务、训练记录或知识答案伪装成业务数据;练习页的投诉场景仅作为初始选择,不作为已完成记录或正式试点数据。
- `npm --prefix mobile-uni run typecheck`、`npm --prefix mobile-uni run test:unit`(49/49)和 `npm --prefix mobile-uni run build:h5` 通过;仅有 Sass 弃用提示和测试环境 WebSocket 端口占用警告,不影响退出码。
- 本轮没有发现适合在用户端继续扩展的明确安全缺口,暂不新增代码;正式未完成项仍集中在组织身份、核心流程内容、外部 AI 留存/成本、正式试点数据和发布同步。
### 2026-07-14 增量:线上资源与发布边界复核
- 生产根站、`/h5/` 和租户接口均返回 `200`,但线上仍加载管理端 `assets/index-CJZ3Ax3Z.js`(SHA-256 `8b9278a26ccb760abce489b12a20b221748c64d4c4153613d2511777bb9677bc`)与 H5 `assets/index-D4-NrEpb.js`(SHA-256 `ab15bfd17cabe58e2f34b0ac61ee198a837128ed85dc6bb0ddf77bc3e22dcd9c`)。当前 `0f663546` 本地产物为管理端 `assets/index-CBwlIDYP.js`(SHA-256 `5ebd0ab763871b8110c01d4b7556158d14c94c0d02438fa8bfad05a5cba9e1da`)与 H5 `assets/index-Byx3WtY1.js`(SHA-256 `1d2a9d8f947e8a198c31f15a5cf4b66ba4220b1f549c4376c72cc1da56b1d7eb`),当前修复尚未与线上资源对齐。
- `scripts/release-preflight.sh` 的只读比对仍受两份既有未提交 Figma 文档阻断;本轮未执行生产静态资源同步、后端重启或业务数据写入,不把线上 `200` 认定为当前分支已发布。
### 2026-07-14 增量:正式试点导出契约复核
- `GET /api/train/practice/export` 已强制要求 `startDate/endDate`,服务层拒绝缺失日期和反向日期;CSV 契约测试 `5/5`、严格门禁 SQL 测试和 `bash -n scripts/demo-check.sh` 通过,训练/校准统计使用同一租户、日期窗口、在职组织身份和原始分子,不用四舍五入后的比率反推门禁。
- 仍有一个正式数据契约缺口:`aihr_sop_answer_review` 当前保存评审人和评审时间,但没有提问员工的 `ext_party_id` 或等价正式主体字段;当前 SOP 可用率只能按租户、分类和评审窗口统计,不能证明样本来自正式试点员工。该字段需要业务确认“提问员工主体”与“HR 评审人”的关系后再做 schema/API 迁移,暂不硬编码或用评审人冒充员工。
- 管理端三角色对练页的“导出试点 CSV”已提供日期范围选择;日期不完整或反向时按钮不可用,点击后把合法 `startDate/endDate` 传入后端。`frontend/src/views/train/pilot-export.test.ts` 已覆盖空值、非法日期、反向日期和合法窗口,当前无需再补页面逻辑。
### P2/P3:明确暂缓,不应混入当前修复
- 个人 AI 助理、个人资料库、网页抓取、引用问答、PPT 生成:BRD 4.8,阶段二。
- 开放问题榜、积分/排行榜/荣誉墙、完整七维偏好、独立 AI 教练编排:阶段二/三或后续运营范围。
- 师徒关系、拜师池、认证和带徒福利:业务已取消,继续保持不实现。
## 4. 首批执行顺序
1. 先完成正式组织快照 dry-run 与项目范围核对;不修改正式数据,不用手机号猜角色。
2. 在本地/测试环境实现“错题本只读聚合”,复用现有训练记录和 retry assignment,补 API、员工入口和主管查看边界。
3. 已先补岗位学习适配摘要,但它只负责把一期生活顾问导航状态说清楚;下一步接正式岗位/项目/SOP 适用范围,再实现培训任务状态;资格 gating 放在有真实资格规则后接入,避免先做一个无法运营的开关。
4. 在业务提供一期视频样片及字段口径后,继续扩案例详情数据契约;当前原始音频回放已完成,但不替代视频、学习点和主管点评。
5. 用正式试点窗口跑 BRD L1/M5,而不是继续增加视觉页面。
## 2026-07-14 增量:组织快照异常统计修复
- 发现 `AihrOrgSyncService.snapshot()` 的疑似乱码统计把问号写成 `like '%?%'`,问号位于 SQL 字符串字面量内,未形成有效的参数或字符匹配,导致管理端组织快照的异常计数可能恒为 0。
- 已改为 MySQL `instr(coalesce(field, ''), '?') > 0`,继续沿用当前租户和筛选条件,并补回归测试与 `demo-check` marker;本地 `ry-vue` 直接查询得到 `3473` 条快照、`8` 条疑似异常文本,与修复后的统计口径一致。
- 该修复只恢复异常计数的真实性,不代表外部组织快照已经具备完整手机号映射;正式主管身份和项目范围仍需真实组织同步数据。
## 5. 每批完成定义
- 有明确 BRD 条款、代码路径和数据证据。
- 读写权限按员工本人、主管项目范围、HR/运营角色区分。
- 真实接口或浏览器验证通过;不能验证的外部数据依赖必须标明。
- 不用 seed、烟测样本或固定演示账号冒充正式试点达标。
- 发布前同步矩阵、API 文档、验收脚本和本记录。
## 6. 本轮线上核对记录(2026-07-14)
- 线上入口 `https://peilian.njzhmj.top/h5/` 返回 `HTTP 200`;本轮管理端发布后根站点 `https://peilian.njzhmj.top/` 也返回 `HTTP 200`,生产 HTML 的 `Last-Modified` 为 `2026-07-13 19:53:16 GMT`。
- 发布前线上 HTML 引用 `index-DSualpPE.js`;同步后已改为 `index-DJfe2tlN.js`,主 JS SHA-256 均为 `56afec70ae0f404a3e4a2520b604ea797dc7c1f2a16ce558e6652cea246b45a9`。
- 使用本地数据库已有手机号和 dev 固定验证码登录线上 H5,岗位确认、员工首页和 `/pages/user/practice/index` 均可打开;这证明线上登录/基础路由可用,不证明线上包已追平当前代码。
- 发布后真实浏览器登录并打开 `/pages/user/learning/index`,页面已出现“错题本”“全部/红线话术/情绪承接/流程合规/综合得分不足”;打开 `/pages/user/practice/index` 可见训练前预习、最近练过和每日三题。
- 本次远端备份为 `/opt/wygj/backups/h5-20260714034906`(H5)和 `/opt/wygj/backups/release-20260714035418`(管理端 index/assets 与后端 jar);静态包、后端服务和 H5 资源均已发布,后续发布仍必须保留备份、资源哈希和浏览器回归三项证据。
- 发布后 hash 证据:管理端主 JS `index-CVcvQ1KE.js` 为 `a49ad7d3009ea64f37922cc042f09c1930557052e4fe20c11f8083222e0e4531`,后端 `ruoyi-admin.jar` 为 `3998f075a06f3a8014c270f66ad777606c7a04117233b7258e3326dbe516e211`,H5 主 JS 仍为 `56afec70ae0f404a3e4a2520b604ea797dc7c1f2a16ce558e6652cea246b45a9`;线上 `wygj-aihr.service` 为 active,`/prod-api/auth/tenant/list` 与 `/prod-api/api/aihr/mobile/home/user` 返回 200。
- 生产浏览器回归:管理员可登录首页和 `/system/model`;页面可见“提示词模板”列表、新增模板入口和启停控件,说明本轮管理端 UI 已加载。当前验证使用生产 admin 测试账号和 Redis 验证码,不在文档记录账号或个人数据。
- 2026-07-14 04:05 后续发布:移动端满意度采集、CSV 指标和后端接口已同步到生产;备份为 `/opt/wygj/backups/release-20260714040515`,H5 主 JS `index-5mNjsnek.js` 本地与线上 SHA-256 均为 `5c5af11be7b2b3ef7ceafd5b820fdd3e1326fcfc612b89c69b00dfe06635573c`,后端 jar SHA-256 为 `aa0bd917a2ab94ffd740ac709af2c59dd5bed6c8db995fa9aa1e80bcc4662c07`;生产浏览器实际完成训练、提交 1–5 分满意度并收到成功提示,随后已清理临时训练和派发数据。
- 2026-07-14 04:18 后续发布:SOP 反馈追溯已同步到生产;备份为 `/opt/wygj/backups/release-20260714041836`,H5 主 JS `index-Dh7w59t7.js` 本地与线上 SHA-256 均为 `0fce49deff7f95b3816cd97cf7b5f1733f31b2815162d141c27be9d1257a1f58`,后端 jar SHA-256 为 `18f4643f401aafeab3ee896d7d6341733f31b2815162d141c27be9d1257a1f58`;生产 API smoke 已验证搜索 `reviewId`、反馈写入 `review_id`,并清理 smoke 记录。
- 2026-07-14 后续审查:移动端 `/me` 在同一手机号对应多条 active 组织记录时优先识别“主管/项目经理”,避免按首条一线记录误判员工端;正式试点满意度统计改为复用安全 `org_identity`,冲突或无法唯一映射的组织身份不计入满意度分母;模型配置、提示词模板列表/写入、知识库管理/评审和后台案例标注写接口均已补 HR/管理员角色门禁;脚本行为测试已覆盖该边界,但这仍属于数据口径与权限加固,不替代正式组织同步和试点证据。
- 2026-07-14 线上只读复核:生产根站点与 `/h5/` 均返回 HTTP 200,线上 H5 入口仍加载 `index-Dh7w59t7.js`;`/prod-api/api/aihr/mobile/home/user` 返回业务 `code=200`。本次未发布、未修改生产数据;该结果只证明公开入口和员工首页 API 可用,不替代正式登录、主管身份和试点验收。
- 本次线上核对发现 schema 漂移:生产库已存在 `aihr_practice_session.satisfaction_score`、`satisfaction_comment`,但尚未显式创建 `aihr_practice_audio`。当前代码仍有运行时懒建表兜底,满意度链路不受影响;正式音频留痕试点前必须执行并核验显式迁移,不能依赖首次请求触发;严格预检已增加该表存在性检查。
- 2026-07-14 后续 BRD 审查:`组织与权限` 页已确认具备组织快照、dry-run、写入确认和 HR/管理员角色门禁;本轮修正写入模式按钮文案,并避免取消确认时误报“同步接口不可用”。岗位-SOP 页面继续明确显示“当前摘要不代表正式上岗资格”,在正式 `sop_applicability`、培训任务和资格规则未由 HR 确认前,不扩展为伪资格 gating。
- 2026-07-14 权限审查:候选人面试、案例处理、ASR/TTS、SOP 搜索/反馈/总结卡、候选人资料接口均补控制器级登录门禁;匿名首页与 `position-sop` 导航摘要仍保持公开只读,写入、模型调用和候选人私有记录不再依赖业务层“失败返回”兜底。
- 2026-07-14 案例详情审查:管理端案例详情已同步展示 `mediaUrl` 原始音频播放器,与员工端音频回放保持一致;当前仍没有正式预渲染视频样片、学习点、主管点评和相关训练场景字段,因此不把音频回放计为完整视频学习闭环。
- 2026-07-14 BRD 深度复核:重新按“业务条款→源码路径→数据证据”核对岗位-SOP、训练/错题本、案例详情、RAG、候选人面试、组织权限和成长证据,补发现首批场景尚未覆盖 BRD 明列的服务推介/增值与日常服务内容;`mobile-uni` H5 构建、类型检查与 49 个用户侧单测通过,AIHR 案例/对练定向测试 31 个通过。剩余 P0/P1 仍是正式组织映射、住宅项目试点数据、补齐场景内容、方言供应商与样本、预渲染视频资产、HR 规则契约等输入,不能用继续扩页面或未经确认的 seed 话术替代。
- 2026-07-14 候选人入职链路补齐:管理端候选人面试页新增 HR/管理员将本地候选人 ID 关联至当前租户已同步在职 `ext_party_id` 的入口,后端以独立关系表保存租户、主体 ID、状态和操作审计,不复制组织姓名/部门;关联目标必须存在于当前租户在职组织快照,重复同主体幂等,候选人更换主体或同一主体被其他候选人占用均拒绝,并由唯一约束兜底。正式组织同步和真实入职数据仍需试点验证。
- 2026-07-14 线上资源只读核对:生产管理端当前加载 `/assets/index-CVcvQ1KE.js`,可检出提示词模板标记但检不出本分支新增的 `case-audio` 管理端播放器标记;因此 `6292e741` 的管理端案例音频回放尚未发布,不能把本地源码状态当作线上状态。发布前需按现有备份、资源哈希和浏览器回归流程执行。
- 2026-07-14 发布差异取证:当前分支生产构建管理端主 JS `frontend/dist/assets/index-CJZ3Ax3Z.js` SHA-256 为 `8b9278a26ccb760abce489b12a20b221748c64d4c4153613d2511777bb9677bc`,后端 `backend/ruoyi-admin/target/ruoyi-admin.jar` 为 `2817e0b30a4a0bc52cd5d88a8dd68c52981698185fb5320c24fa2743ab17ccf7`;生产仍加载 `index-CVcvQ1KE.js`,远端 jar SHA-256 为 `18f4643f401aafeab3ee896d7d6341736d5d7ee2343fee0fa86992c5797adcb9`。本轮只读核对,未执行远端写入。
- 2026-07-14 06:07 发布完成:备份目录为 `/opt/wygj/backups/release-20260714060705`;管理端、`mobile-uni` H5 和后端 jar 均已同步,线上管理端加载 `index-CJZ3Ax3Z.js`,H5 加载 `index-D4-NrEpb.js`,H5 主 JS SHA-256 为 `ab15bfd17cabe58e2f34b0ac61ee198a837128ed85dc6bb0ddf77bc3e22dcd9c`,后端 jar SHA-256 为 `2817e0b30a4a0bc52cd5d88a8dd68c52981698185fb5320c24fa2743ab17ccf7`;`wygj-aihr.service` active,生产根站点、`/h5/`、`/prod-api/auth/tenant/list` 和员工首页 API 均返回 200,线上管理端资源可检出 `case-audio`。重启瞬间的短暂 502 在服务启动完成后恢复,未形成持续故障;Chrome headless 已确认管理端标题、H5 标题和员工首页真实渲染。
- 2026-07-14 生产数据核验限制:通过 SSH 尝试使用默认 `root/root` 连接生产 `ry-vue` 被拒绝;本轮不读取、不修改生产业务数据,也不把本地计数或旧快照冒充当前正式组织/M5 证据。后续需运维提供只读数据库凭据或正式导出文件,核验 `aihr_org_snapshot`、`aihr_practice_audio`、校准、SOP 评审和满意度数据。
- 2026-07-14 生产 schema 修复:使用生产 `/opt/wygj/config/wygj.env` 中的数据库连接配置核对后,按仓库现有 `aihr_practice_mysql8.sql`/运行时建表定义执行 `CREATE TABLE IF NOT EXISTS`,补齐缺失的 `aihr_practice_audio`(9 列)和 `aihr_practice_calibration`(11 列);未写入任何业务行、未新增自定义字段。复核结果为 `org_active=22`、`org_phone_linked=0`、`calibration=0`、`sop_review=13`、`audio=0`,租户接口仍返回 200。该操作只解除 schema 漂移阻塞,不代表正式组织映射或 M5 试点完成。
- 2026-07-14 候选人关联发布边界核对:生产根站点与 `/h5/` 返回 200,`wygj-aihr.service` active,线上后端仍为上一版 jar;远端管理端主 JS 未包含本批 `入职主体关联/candidate-links`,本批源码已提交但尚未发布。后续发布需按现有备份、静态资源同步、后端重启和浏览器回归流程执行。
- 2026-07-14 门禁合同复核:`scripts/tests/demo-check-pilot-gates.test.sh` 通过,确认严格预检覆盖批次日期、唯一在职身份、1–2 个项目、每人至少 10 次训练、80% 完训、20 条校准、AI/人工分档一致率、SOP 可用率、满意度和音频/RAG schema;`scripts/tests/pilot-export-contract.test.mjs` 5/5 通过,AIHR 案例/对练定向测试 31/31 通过,`mobile-uni` 类型检查与 49 个单测通过。当前没有新增可安全实现的门禁缺口,剩余阻塞仍是正式组织映射、正式试点数据、视频样片和方言样本等外部输入。
- 2026-07-14 租户边界复核:AI 面试结果、候选人入职主体关联、候选人补充资料、模型配置和案例记录的查询、写入、组织身份解析均改为使用当前登录租户;无登录上下文时仅保留本地开发默认租户 `000000` 回退。该修复已覆盖案例服务的列表、详情、项目范围、贡献者校验、保存和持久化回读路径,仍需在正式多租户环境做隔离回归。
- 2026-07-14 仪表盘租户边界复核:管理端首页的面试、训练、知识库、案例、候选资料、组织和模型统计改为按当前登录租户查询;组织同步写入和组织快照查询也改为当前登录租户;无登录上下文时保留本地开发默认租户回退。尚未把批量知识处理队列和完整 SOP 服务的全部租户调用统一替换,后续继续按数据敏感度分批审查。
- 2026-07-14 SOP/RAG 租户边界复核:知识库搜索、知识缺口、SOP 问答评审、答案反馈、异步导入任务、文档/片段/向量写入及 Qdrant tenant filter 改为当前登录租户;无登录上下文时回退本地开发租户 `000000`。定向 AIHR 测试 48/48 通过;正式多租户检索隔离仍需在测试环境做跨租户回归,批量上传队列仍待单独审查。
- 2026-07-14 剩余固定租户审查:`AihrPracticeSeedService` 仍有 79 处运行时 `TENANT_ID`,覆盖场景、训练记录、派题、复盘、导出和 Prompt 管理;这些路径可按同步请求上下文分批迁移。`AihrUploadQueueService` 仍有 19 处固定租户引用,但其后台 worker 会脱离登录线程并调用 SOP 加工,不能机械替换为 `LoginHelper`;下一步需让队列条目携带租户、worker 按条目租户加工,并补跨租户领取/隔离测试。
- 2026-07-14 训练租户边界修复:`AihrPracticeSeedService` 的场景、训练记录、派题、复盘、导出、Prompt、标注和音频明细运行时查询/写入统一使用当前登录租户;无登录上下文回退本地开发租户 `000000`。定向 AIHR 测试 48/48、管理端完整打包均通过。`AihrUploadQueueService` 仍保留固定租户,原因是后台 worker 需要下一批显式携带条目租户后再调用 SOP 加工,避免机械替换造成跨租户队列停摆。
- 2026-07-14 异步上传队列租户边界修复:请求入队、查询和重试按当前登录租户;后台领取按队列条目租户跨租户扫描,文件加工通过 `TenantHelper.dynamic` 进入对应租户,ZIP 子条目、失败回写和卡死清扫均沿用条目租户;新增队列结构回归测试。AIHR 全量测试 50/50、`ruoyi-admin` 跳测试打包通过;正式多租户文件上传、向量写入和跨租户隔离仍需测试环境回归。
- 2026-07-14 目录导入异步任务租户边界修复:`startLocalImportTask` 捕获当前租户,并用 `TenantHelper.dynamic` 包住整个后台导入 worker,任务进度、取消状态、OSS/片段/向量写入不再因脱离登录线程回退到 `000000`;新增异步上下文回归测试。正式多租户目录导入仍需测试环境验证。
- 2026-07-14 线上只读复核:生产根站点、`/h5/`、租户列表和员工首页 API 均返回 200;线上仍加载管理端 `index-CJZ3Ax3Z.js` 与 H5 `index-D4-NrEpb.js`,本地最新租户边界修复提交 `6ec17726`、`c95cb1ff` 尚未发布。本次未修改生产环境,发布前需先做测试环境跨租户上传/目录导入回归。
- 2026-07-14 异步队列清扫修复:上传队列 worker 的卡死任务清扫改为跨租户扫描,避免无登录线程回退到 `000000` 后只清理默认租户;实际加工、失败回写和 SOP 处理仍按队列条目租户隔离。`AihrUploadQueueServiceTest` 与 AIHR 全量测试 51/51 通过;双租户上传/目录导入仍需测试环境回归。
- 2026-07-14 移动端短信登录租户修复:手机号查询补充 `tenant_id` 条件,避免同一手机号在不同租户登录时复用其他租户的 `sys_user`;新增认证策略边界回归测试。正式多租户登录仍需用测试租户账号做 HTTP 回归。
- 2026-07-14 测试租户 HTTP 回归:在本地临时建立 `codex-a`/`codex-b` 两个租户,用同一手机号分别登录并授予各自 `superadmin` 测试角色;两租户分别调用异步上传和目录导入接口。A 查询不到 B 的上传批次/导入任务,B 也查询不到 A;两个目录导入任务均完成 `1/1`。后台 worker 的队列加工、目录导入、任务进度和查询均保持租户隔离。测试产生的租户、用户、角色、知识库行和临时文件已清理为 0。该证据只覆盖本地测试环境,不替代正式组织同步和生产多租户验收。
- 2026-07-14 上传队列上下文收口:`AihrUploadQueueService` 的同步请求租户读取改为 `TenantHelper.getTenantId()`,动态租户上下文优先于登录态,避免重试/嵌套任务回退到错误租户;`AihrUploadQueueServiceTest` 已补对应源码契约断言。AIHR 定向测试与模块编译通过。
- 2026-07-14 发布前检查补齐:新增只读 `scripts/release-preflight.sh`,统一核验当前 commit、管理端/H5/后端产物存在性、入口 JS 和 SHA-256;传入 `RELEASE_REMOTE_URL` 时只做公开根站点与租户列表 HTTP 检查,不执行 SSH、rsync、服务重启或生产写入。`docs/DEV_SETUP.md` 已同步发布证据与回滚留痕要求。
- 2026-07-14 当前状态复核:本地 `ry-vue` 组织快照有 `3001` 条 active 记录,但手机号可映射仅 `1` 条、项目 `41` 个,不能作为正式 1–2 项目试点身份数据;线上根站、`/h5/` 和租户接口均返回 `200`,但线上管理端仍加载 `index-CJZ3Ax3Z.js`,本地现有构建产物为 `index-Cz1rtpOj.js`,且发布预检被两份已有未提交 Figma 文档阻断,因此未把最新本地提交宣称为已发布。
- 2026-07-14 BRD 公开导航回归:`GET /api/knowledge/position-sop` 明确是一期生活顾问学习导航摘要,不返回个人或项目私有数据;控制器补 `@SaIgnore` 后匿名请求返回 `200`,而同一控制器的 `POST /api/knowledge/search` 仍返回业务 `401`,保持“公开只读导航、登录后查询与反馈”的边界。同步完成跨租户异步上传成功路径回归:codex-a/codex-b 各上传独立文件并加工为 `status=2`,互查批次均为空;临时租户、用户、队列、知识库、OSS 与暂存文件已清理。
- 2026-07-14 BRD G3 仪表盘权限收口:`/api/aihr/dashboard/overview` 返回组织、训练、知识库、案例和候选资料统计,控制器新增显式 `@SaCheckLogin`;匿名请求业务返回 `401`,同时保留服务层按当前租户过滤。后续正式主管可见范围仍需组织快照和项目权限数据支撑。
- 2026-07-14 BRD G3 主管接口权限复核:移动端主管/团队/预警/派题/复盘接口对后台系统用户现在要求 `superadmin` 或 `hr_operator` 角色;APP 用户仍要求组织快照中的主管/项目经理身份。新增源码契约测试与 `demo-check` marker,避免普通后台账号越权读取团队训练数据或创建派题。
- 2026-07-14 BRD G1 评级语义复核:管理端、员工端和证据包文案已将“当前等级/AI等级”明确为“训练画像参考等级”,并标注需 HR/主管人工复核;AI 结果仍只作训练与晋升证据参考,不直接生成正式晋升结论。
- 2026-07-14 BRD G5 边界复核:BRD 将“情绪疏导树洞”列为生产前隐私闸门,但一期历史方案又明确标注为一期不做;当前代码没有树洞入口、独立数据隔离或“不留痕/不进训练集”证明。该项不能用陪练情绪识别、红线纠偏或满意度意见替代,后续需业务/法务/安全先确认是否纳入当前阶段,再决定设计与实现。
- 2026-07-14 只读发布前复核:生产根站点、`/h5/`、租户列表和员工首页 API 均返回 200;当前本地提交 `8105413d` 的管理端主资源 `index-BWnisJoz.js` 与后端 jar 尚未与生产资源/hash 对齐,H5 仍与生产 `index-D4-NrEpb.js` 一致。本轮未发布、未修改生产数据;后续若发布管理端 OCR 状态修正或后端批次,必须重新执行备份、资源 hash、服务状态和浏览器回归。
- 2026-07-14 线上资源复核更新:生产管理端仍加载 `index-CJZ3Ax3Z.js`(SHA-256 `8b9278a26ccb760abce489b12a20b221748c64d4c4153613d2511777bb9677bc`),当前本地管理端构建加载 `index-CIgkCgjC.js`(SHA-256 `f0e9bca71dc2ee484745f0d4058079c54f493cf0be51bfe279f1da64dd62dcfd`);两者不一致。生产主资源已包含既有“提示词模板”能力,但不能据此证明本地最新成长激励/资料处理修复已上线。
- 2026-07-14 09:29 只读发布核对:生产根站点、`/h5/` 和 `/prod-api/auth/tenant/list` 均返回 200;生产仍加载管理端 `index-CJZ3Ax3Z.js`(SHA-256 `8b9278a26ccb760abce489b12a20b221748c64d4c4153613d2511777bb9677bc`)与 H5 `index-D4-NrEpb.js`(SHA-256 `ab15bfd17cabe58e2f34b0ac61ee198a837128ed85dc6bb0ddf77bc3e22dcd9c`),当前提交 `896495dd` 的本地构建为管理端 `index-DF7MSq-V.js`(SHA-256 `96969b2ae71192cb08b3b2f14edb84355dce6b00679f8237d508ab392c97d7d9`) 与 H5 `index-CVrAL1eh.js`(SHA-256 `4e416176e5b390d1a1a174375d1da820b317b017c00fd0549ffae3f0da77d06d`),本轮候选资料、案例音频和 RAG 评审修复尚未发布;本次未执行远端写入。
- 2026-07-14 07:30 只读发布预检:当前本地提交 `9832caa4` 的管理端构建加载 `index-Cz1rtpOj.js`(SHA-256 `558392609617377b8327918c411887fc6766d1e545e0a703e2fc3dbaaa1d1a66`),生产仍加载 `index-CJZ3Ax3Z.js`(SHA-256 `8b9278a26ccb760abce489b12a20b221748c64d4c4153613d2511777bb9677bc`);生产根站点和租户接口均返回 200。本次只读核对,未发布;最新主管权限与评级语义修复尚未在线上生效。
- 2026-07-14 BRD G3/G6 外发文本复核:发现对练、面试调用的共享 LLM 边界和 SOP 总结卡独立直连路径此前把原始文本直接放进外部模型请求;新增 `AihrSensitiveText`,在模型请求体写出前统一遮蔽手机号、邮箱、房号和带称谓姓名,结构化候选人姓名改为匿名角色,TTS 文本也走同一规则,并补源码契约/规则测试。案例转写入库前已有文本脱敏,但 ASR 接收的是音频本体、视觉 OCR 接收的是图片本体,无法在本地转写/识别前可靠遮蔽语音或图片中的 PII;正式试点仍需供应商不留存/合规合同或本地语音/视觉模型、审计与删除证明,不能把文本脱敏说成完整 G3/G6 通过。
- 2026-07-14 BRD G3 训练接口权限复核:发现三角色对练控制器缺少类级登录门禁,匿名请求理论上可伪造 `extPartyId` 创建训练会话;已为 `AihrPracticeController` 增加 `@SaCheckLogin`,并补源码契约测试与 `demo-check` marker。管理员和员工端既有登录链路不变,场景读取、训练创建、回合提交和完成记录统一要求登录;本地真实 HTTP 对匿名 `/api/train/practice/start` 验证为业务 `401`。
- 2026-07-14 外部错误信息复核:ASR、TTS、LLM、组织同步和视频处理路径已不再把外部响应体、ffmpeg 输出或视频识别异常原文写入日志/业务异常;新增的隐藏响应体与视频错误契约测试通过。该修复只收紧错误暴露,不改变模型失败后的 seed/文本降级链路;ASR 原始音频与视觉图片出境的供应商留存和删除证明仍未解决。
- 2026-07-14 只读发布预检:当前分支 `37b8ed97` 工作区干净,管理端本地构建资源为 `index-Cz1rtpOj.js`,生产仍加载 `index-CJZ3Ax3Z.js`;`mobile-uni` 本地与生产仍为 `index-D4-NrEpb.js`。生产根站点与租户接口均返回 200。本轮新增后端登录/错误信息修复尚未发布,未执行生产写入或重启。
- 2026-07-14 G3 错误暴露复核:继续扫描 AIHR 后端后,补齐 ASR/TTS 调用、TTS 临时文件、模型回退、面试/对练解析、案例上传/摘要、组织同步、目录导入、RAG 重排/总结卡和异步上传队列的原始 `Exception.getMessage()` 日志或状态回传;统一改为固定错误提示,保留原有 seed/文本降级和重试行为。AIHR 全量测试 `55/55`、`bash -n scripts/demo-check.sh`、`git diff --check` 通过;当前未发现同类日志/任务状态暴露点。该修复已提交为 `c16dc0e2`,尚未发布生产。
- 2026-07-14 G3 复核补充:异步上传入队的暂存文件写入异常也改为固定提示“暂存文件写入失败,请重试或联系管理员”,不再把本地 `IOException` 原文返回给前端;AIHR 全量测试仍为 `55/55`,修复提交为 `7f519dd8`,尚未发布生产。
- 2026-07-14 G3 认证边界复核:`AihrMobileController` 增加类级 `@SaCheckLogin`,仅保留 `/home/{role}` 方法级 `@SaIgnore` 作为公开只读入口;新增源码契约 marker,避免后续移动端新增接口意外匿名开放。AIHR 全量测试 `55/55`、脚本语法和空白检查通过,修复提交为 `343213cf`,尚未发布生产。
- 2026-07-14 只读发布预检:当前提交 `596d204d` 工作区干净,`release-preflight.sh` 通过;生产根站点与租户接口均返回 200。生产管理端仍加载 `index-CJZ3Ax3Z.js`,本地构建资源为 `index-Cz1rtpOj.js`;H5 生产与本地均为 `index-D4-NrEpb.js`。本轮后端认证与错误信息修复未发布,未执行生产写入或重启。
- 2026-07-14 G3 面试数据权限复核:发现 `/api/recruit/interview/records` 对普通后台登录用户只要求登录,可能读取当前租户全部候选人面试记录;现改为后台系统用户必须具备 `superadmin` 或 `hr_operator`,APP 候选人仍强制绑定本人手机号查询。新增源码契约测试,AIHR 全量测试 `56/56`、脚本语法和空白检查通过,修复提交为 `13e5545c`,尚未发布生产。
- 2026-07-14 G3 案例写入权限复核:发现案例上传、整理和标注入口对任意已登录后台系统用户放行,与 BRD 的 HR/主管/项目负责人边界不一致;现收紧为 `superadmin`/`hr_operator`,APP 用户继续通过组织快照中的主管/项目经理身份校验。新增源码契约测试,AIHR 全量测试 `57/57`、脚本语法和空白检查通过,修复提交为 `a728904a`,尚未发布生产。
- 2026-07-14 G3 案例读取权限复核:发现案例列表和详情对任意已登录后台系统用户返回当前租户数据,存在普通后台账号横向读取案例资产的风险;现收紧为 `superadmin`/`hr_operator`,APP 用户保留登录后的项目范围读取。新增源码契约测试,AIHR 全量测试 `57/57`、脚本语法和空白检查通过,修复提交为 `b0d24970`,尚未发布生产。
- 2026-07-14 G3 驾驶舱权限复核:发现管理驾驶舱只要求登录,APP 用户或普通后台账号理论上可读取当前租户的组织、训练、知识库、案例和候选人汇总;现收紧为 `superadmin`/`hr_operator`,主管团队数据继续走移动端项目范围接口。新增源码契约测试,AIHR 全量测试 `58/58`、脚本语法和空白检查通过,修复提交为 `7522794d`,尚未发布生产。
- 2026-07-14 后续 BRD P1 复核:认证/晋升规则、岗位-SOP 资格 gating、方言样本、正式案例视频样片与组织项目范围仍依赖 HR/运维输入;当前不继续用硬编码、演示 seed 或新增页面伪造完成,下一批优先接正式规则与试点数据后再实现。
- 2026-07-14 BRD 4.5.1 五维能力画像对齐:员工端与管理端画像现在统一返回“任务完成度、话术规范性、情绪管理能力、响应时效、增值转化潜力”五项;话术规范性由现有合规+沟通陪练分数作为训练代理,情绪和增值转化分别由陪练情绪/营销分代理。任务完成度、响应时效因尚未接入工单闭环、首解率、首响时长和处理周期,明确返回“待采集”,不再用训练次数或综合分伪造 BRD 绩效指标;正式权重和绩效口径仍需 HR 确认。
- 2026-07-14 BRD 五维画像展示语义收紧:员工端、管理端和证据包导出将平均对练分称为“训练综合分”,缺失的五维指标统一显示“待采集”,不再把空值导出为 `null` 或把训练综合分称为正式绩效总分。
- 2026-07-14 BRD 动态难度复核:场景表已有 `difficulty` 字段,但开始训练仍按用户/主管传入的场景直接启动,没有基于连续高分自动升级复合高压场景的规则、候选场景映射、人工关闭开关或升级证据。该项需要 HR 确认连续高分阈值、升级范围和降级条件后再实现,当前不以固定阈值直接改变员工训练难度。
- 2026-07-14 线上资源复核:生产根站、`/h5/` 和租户接口均返回 `200`;生产管理端仍加载 `index-CJZ3Ax3Z.js`(SHA-256 `8b9278a26ccb760abce489b12a20b221748c64d4c4153613d2511777bb9677bc`),当前本地构建为 `index-DF7MSq-V.js`(SHA-256 `96969b2ae71192cb08b3b2f14edb84355dce6b00679f8237d508ab392c97d7d9`),管理端五维画像修复尚未发布;mobile-uni 线上与本地均为 `index-D4-NrEpb.js` 且 hash 一致。发布预检仍因两个既有 Figma 文档未提交而阻断,本轮未执行生产写入或重启。
- 2026-07-14 只读发布预检:当前提交 `07557656` 工作区干净,本地管理端、`mobile-uni` H5 与后端 jar 均有产物;生产根站点与租户接口返回 200。本轮权限修复尚未执行生产同步、服务重启或业务数据写入,不能把本地提交视为线上已生效。
- 2026-07-14 AI 面试人工复核闭环:`aihr_interview_result` 现在持久化 AI 分、人工复核分、最终采用分、复核状态、复核人、意见和时间;HR/管理员可通过 `/api/recruit/interview/records/{sessionId}/review` 复核,候选人端无该角色权限。`finish` 响应同步返回真实 `sessionId`,便于后续复核定位。AIHR 全量测试 `65/65`、真实本地 HTTP 烟测和旧库懒迁移验证通过;正式试点仍需抽查人工复核证据,生产尚未发布。
- 2026-07-14 线上资源只读核对:生产根站、`/h5/` 和 `/prod-api/auth/tenant/list` 均返回 `200`;生产管理端仍加载 `index-CJZ3Ax3Z.js`,本地当前管理端构建为 `index-D4ywKu9Y.js`。本次只读检查,未执行生产写入、静态资源同步或后端重启,因此不能把本地人工复核修复宣称为线上已生效。
- 2026-07-14 BRD G3 面试会话归属复核:发现候选人端 `answer/finish` 原先只按客户端提交的 `sessionId` 查内存会话,未知会话还会自动创建并落库;现由控制器把当前 APP 手机号传入服务,APP 请求必须匹配启动会话的候选人 ID,外部会话和未知会话统一拒绝;后台系统调用保留原有兼容行为。新增越权/未知会话回归测试与 `demo-check` marker,未修改生产环境。
- 2026-07-14 BRD G3 对练会话归属复核:发现三角色对练的 `start` 虽已绑定 APP 手机号,但 `turn/finish` 原先可用任意会话 ID继续提交,未知会话还会回退场景并落成训练记录;现由控制器把当前 APP 手机号传入服务,移动端回合与完成操作必须匹配启动会话的 `ext_party_id`,外部/未知会话统一拒绝;后台管理端调用保留原有演示兼容行为。新增越权/未知会话回归测试与 `demo-check` marker,未修改生产环境。
- 2026-07-14 BRD G3 主管身份多记录复核:同一手机号可能对应多条在职组织记录,主管身份检查和团队范围解析现从全部匹配记录中选择“主管/项目经理”,不再因第一条记录是一线岗位而误拒主管或选错项目范围;新增多岗位手机号回归测试,未修改生产环境。
- 2026-07-14 BRD G3 移动端角色降级复核:`/api/aihr/mobile/me` 组织快照查询异常时原先会直接返回 500,与“组织身份不可用时安全降级员工端”的口径不一致;现捕获组织查询运行时异常并返回员工端默认身份,同时仅记录固定错误提示,不泄露外部/数据库错误详情;新增源码契约 marker,未修改生产环境。
- 2026-07-14 BRD G3 移动端公开首页复核:`/api/aihr/mobile/home/{role}` 保留未登录首屏能力,但匿名请求此前会读取员工训练统计和主管团队完训/低分/待复盘数据;现改为匿名只返回无租户业务统计的静态 seed,已登录 `mobile-uni` 自动携带 `Authorization/clientid` 后,员工只读取本人统计、主管只读取组织快照解析出的项目范围统计,普通员工请求主管角色直接拒绝;已补 service、controller、前端请求、源码契约和真实 HTTP 回归测试;未修改生产环境。
- 2026-07-14 BRD G3 公开入口扫描:AIHR 当前仅保留公开的移动端静态首页和岗位-SOP 导航两个 `@SaIgnore` 入口;训练、上传、搜索、复盘、模型、组织同步等控制器均有登录或角色门禁,未发现新的匿名写入或业务数据公开入口;未修改生产环境。
- 2026-07-14 BRD G3 项目范围复核:发现主管身份和团队范围查询仍使用 `LIMIT 1`,同一手机号关联多个在职项目时可能只取首个项目,导致主管团队数据漏项;现改为收集全部主管/项目经理项目编码并合并其在职成员与手机号范围,保留一线员工仅查看本人数据的降级边界。新增多项目范围回归测试;AIHR 全量测试 `70/70` 通过,未修改生产环境。
- 2026-07-14 发布差异复核:本地最新提交 `2f36476e` 已包含主管多项目范围修复,但 `release-preflight.sh` 因两份既有未提交 Figma 文档阻断;生产根站和 `/h5/` 均返回 `200`,生产管理端仍加载旧资源 `index-CJZ3Ax3Z.js`。本轮未执行生产写入、静态资源同步或服务重启,不能把本地权限修复视为线上已生效。
- 2026-07-14 BRD 4.4 每日三题口径复核:当前 `ensureDailyDrills` 以“移动端训练记录少于 3 次”作为新员工近似条件;`aihr_org_snapshot` 只有快照日期,没有入职/任职起始日期,因此不能证明“入职 3 个月内”,也不能用账号创建时间替代。当前保留该近似仅用于 Demo;正式试点需由组织同步提供并确认 `hire_date/entry_date` 字段后,再把每日派题资格改为真实任职日期判断。
- 2026-07-14 BRD G3 移动首页权限复核:发现公开首页方法对已登录 SYS 用户仍可能调用全局统计分支;现要求只有 APP 用户且身份非空才读取员工/主管动态数据,后台系统用户和异常身份统一返回无业务统计的公开 seed。AIHR 全量测试 `70/70` 通过,未修改生产环境。
- 2026-07-14 BRD G3 音频读取权限复核:发现移动端音频下载接口对已登录 SYS 用户未校验角色,普通后台账号理论上可枚举 `ossId` 读取训练录音;现复用 `superadmin/hr_operator` 门禁,APP 用户继续按本人/主管项目范围校验,其他身份返回 403。AIHR 全量测试 `70/70` 通过,未修改生产环境。
- 2026-07-14 BRD 4.4 每日三题资格补强:每日派题现在在组织快照存在 `hire_date` 列时按“入职日期至今不超过 3 个月”判断,边界按自然月且包含当天;旧 Demo 快照没有该列时继续使用“移动端训练记录少于 3 次”的兼容回退。正式试点仍需在外部组织同步落地并校验 `hire_date`,不能把回退口径当成正式新员工资格。
- 2026-07-14 BRD 4.4 每日三题提交幂等复核:前端虽已禁用已完成题,后端原先仍允许重复 POST 覆盖答案、反馈和音频证据;现要求查询和更新均只接受“当天、本人、`status='待训练'`”的记录,并校验更新行数,已完成或历史日期记录保留原始证据,重复或并发请求按“不存在或已完成”处理。
- 2026-07-14 BRD 4.4 派发任务启动复核:移动端带 `assignmentId` 开始训练时,后端现校验任务属于当前员工、来源不是每日题、状态仍为“待训练”,并校验请求场景与派发场景一致;自由选场景请求不受影响,避免客户端改写 `scenarioId` 后错误完成主管派发任务。
- 2026-07-14 BRD 4.4 派发任务完成归属复核:训练结束时原先再次信任客户端 `finish.assignmentId`,可能把员工名下另一条待训任务误标为完成;现只使用开始会话中服务端绑定的 `ActiveSession.assignmentId` 更新任务,客户端不能替换完成对象。
- 2026-07-14 BRD G3 候选资料审核状态复核:候选人资料审核接口此前在空请求体时默认写回“待审核”,可能覆盖已有“已通过/已驳回”状态;现要求审核动作显式提交三态之一,空值和未知状态直接拒绝,避免后台误操作回退审核结论。
- 2026-07-14 BRD 案例署名复核:案例库已有负责人字段,但此前上传、整理和入库记录都硬编码为“培训组”,无法追溯案例贡献者;现复用既有 `owner` 字段保存首次上传身份,整理和入库阶段保留原署名,手机号身份仅显示员工末四位,避免把原始手机号写入案例展示。
- 2026-07-14 BRD 候选人关联完整性复核:候选人—员工关联接口此前只校验员工主体在职,允许给不存在的任意 `candidateId` 建立入职关联;现要求候选人必须来自内置候选档案、活动面试会话或当前租户已持久化面试记录,保留已有幂等关联和历史数据兼容。
- 2026-07-14 BRD SOP 审核留痕复核:SOP 问答评审接口此前接受请求体中的 `reviewer` 并直接入库,登录用户可伪造审核人;现由控制器从当前登录用户传入服务端操作人,请求体仅保留评审结论和备注,保留旧服务调用的默认“人工评审”兼容。
- 2026-07-14 BRD 知识答案反馈复核:原先只更新 `review_status`,没有复核人和复核时间;现由服务端记录登录操作人到 `reviewer/reviewed_time`,管理端待复核表同步展示留痕。
- 2026-07-14 BRD 知识反馈归属复核:答案反馈原先信任客户端传入的片段 ID,未校验知识片段是否属于当前租户;现入库前按当前租户校验片段归属并限制单次最多 20 个片段。
- 2026-07-14 BRD 知识反馈关联复核:答案反馈原先直接接受客户端传入的 `reviewId`;现仅保留当前租户存在的 SOP 评审关联,非法或跨租户 ID 归一为空。
- 2026-07-14 BRD 候选资料审核留痕:候选资料审核此前只有状态三态,没有审核人和审核时间;现由服务端从当前 HR 登录态写入 `reviewer/reviewed_time`,管理端审核表同步展示。
- 2026-07-14 BRD 试点门禁租户参数化:严格试点预检此前将 M5 查询固定到 `tenant_id='000000'`,正式试点切换租户时会统计错误;现支持经过字符白名单校验的 `AIHR_PILOT_TENANT_ID`,默认仍为本地开发租户,试点命令和文档已同步。
- 2026-07-14 BRD SOP 人工评审结论完整性:`POST /api/knowledge/reviews/{id}` 现在要求明确提交 `usable=true/false`,空请求或缺少结论会拒绝,不再把未作答误记为“不可用”;`reviewer` 仍由当前登录操作人写入。已补服务层回归测试与 `demo-check` marker,但这只修正评审数据完整性,不代表住宅 SOP 可用率已达到正式试点门槛。
- 2026-07-14 线上只读核对:生产根站点、`/h5/` 和 `/prod-api/auth/tenant/list` 均返回 `200`,当前线上仍加载管理端 `index-CJZ3Ax3Z.js` 与 H5 `index-D4-NrEpb.js`;本地 `8fcc58fe` 的 SOP 评审结论校验尚未发布。`release-preflight.sh` 仍因两份既有 Figma 文档未提交而阻断,本轮未执行生产写入、静态资源同步或后端重启。
- 2026-07-14 BRD 4.6 案例发布状态复核:员工端案例列表和详情原先只按租户/项目范围读取,未限制案例状态,理论上可能看到仍处于“已转写/已整理”的管理流程半成品;现对 APP 项目范围读取增加 `status='已入库'`,管理端 HR/管理员仍可查看全部状态以继续处理。新增案例服务回归测试,AIHR 全量测试 `81/81` 通过;视频样片、学习点和主管点评仍需正式业务输入。
- 2026-07-14 BRD 案例提交能力边界复核:移动端案例页原先对所有登录员工展示“提交素材”表单,但后端仅允许主管/项目负责人提交,普通员工点击后才得到权限错误;现新增只读 `GET /api/knowledge/case/capabilities`,复用服务端唯一贡献者判定,员工端仅在 `canSubmit=true` 时展示提交入口,其他员工显示案例学习说明。后端权限仍保留为最终防线。
- 2026-07-14 线上只读发布差异:生产根站和 `/h5/` 返回 `200`,生产仍加载 H5 `assets/index-D4-NrEpb.js`;本地 `b8be1bb6` 构建已生成 `mobile-uni/dist/build/h5/assets/index-u8NWYNWX.js`,案例状态过滤和提交能力入口尚未发布。本轮未执行生产静态资源同步、后端重启或业务数据写入。
- 2026-07-14 BRD 4.7 SOP 指标口径复核:正式试点的 SOP 可用率与待评审数现只统计评审表中 `category='sop'` 或名称包含 `SOP` 的记录,并继续按租户和试点日期窗口过滤;培训类或其他知识问答不会混入正式 SOP 分母。后端导出、严格预检和单测夹具已统一该条件;岗位与住宅项目的正式适用性仍需组织/HR 规则输入,不能仅靠分类字符串替代。
- 2026-07-14 BRD 4.4 每日三题结果留痕补强:每日三题提交返回的分数此前只存在响应内,刷新任务列表后无法恢复数值分数;现新增 `aihr_practice_assignment.score`,提交、查询、员工学习页均保留“得分 + 反馈”。当前得分仍来自可解释关键词规则兜底,不把它宣称为语义级 AI 评分;后续若启用模型评估,需单独补评分模式、成本闸门和人工抽检证据。
- 2026-07-14 BRD 4.4 每日一练评分能力复核:当前 `scoreDailyDrill` 使用参考答案关键词命中和长度规则即时反馈,属于可解释的规则兜底,不等同于 BRD 所称的语义级“AI 秒评”;正式升级前需确认模型、成本闸门、评分维度和人工抽检样本,当前不把规则分数宣称为 AI 评测结果。
- 2026-07-14 BRD G6 成本计量复核:模型调用已有手动运行断路器,但当前没有 `llm_call_log` 或等价的租户级 token、延迟、费用持久化;由于供应商计费字段、单价和月度阈值尚未确认,本轮不新增价格硬编码或生产数据表,先把该项保留为生产前闸门。
- 2026-07-14 TechSpec 3.8 调用反馈补强:模型测试接口成功调用时现在返回供应商 `prompt_tokens/completion_tokens/total_tokens` 和本次 `latencyMs`;未配置、成本断路器或调用失败仍返回空 usage,不伪造 token 或费用。该反馈可作为后续 `llm_call_log` 的输入,但不等于已完成月度成本计量和自动阈值降级。
- 2026-07-14 线上只读发布差异复核:生产根站点、`/h5/`、`/prod-api/auth/tenant/list` 和 `/prod-api/api/aihr/mobile/home/user` 均返回 `200`;生产管理端仍加载 `index-CJZ3Ax3Z.js`(SHA-256 `8b9278a26ccb760abce489b12a20b221748c64d4c4153613d2511777bb9677bc`),H5 仍加载 `index-D4-NrEpb.js`(SHA-256 `ab15bfd17cabe58e2f34b0ac61ee198a837128ed85dc6bb0ddf77bc3e22dcd9c`),当前本地构建为管理端 `index-BM4_rycA.js`(SHA-256 `f5a0fa82a20bb242ebad85f72dca6330faa7d0d51435876210528e84053a2e93`)和 H5 `index-Byx3WtY1.js`(SHA-256 `1d2a9d8f947e8a198c31f15a5cf4b66ba4220b1f549c4376c72cc1da56b1d7eb`)。本轮未执行生产同步、重启或数据写入,不能把本地 BRD 修复宣称为线上已生效。
- 2026-07-14 发布预检补强:`scripts/release-preflight.sh` 新增可选 `RELEASE_VERIFY_REMOTE_MATCH=true`,发布后可从线上 HTML 解析管理端/H5 主 JS 并与本地产物 SHA-256 对比;默认不开启,不影响发布前检查。当前只读核验仍显示两端 hash 不一致,尚未执行生产同步。
- 2026-07-14 异步上传队列租户审计校正:此前“队列仍使用固定租户、待按条目租户改造”的记录已被后续实现覆盖。当前入队、列表、详情和重试按请求租户隔离;worker 领取时读取并 CAS 校验行内 `tenant_id`,加工通过 `TenantHelper.dynamic(tenantId, ...)` 进入条目租户,成功/失败回写、ZIP 子条目和卡死清扫均沿用条目租户;`AihrUploadQueueServiceTest` 已覆盖这些源码契约。`000000` 仅保留为无登录本地开发回退。结论:当前未发现队列跨租户处理缺口,正式多租户仍需测试环境持续回归。
- 2026-07-14 BRD schema 状态校正:早期记录中的 `aihr_practice_audio` 缺失已由后续生产 schema 修复覆盖;当前仓库 reset SQL、运行时建表定义和生产核验记录均包含该表,严格预检继续保留显式存在性检查。后续若正式试点启用音频留痕,仍需抽查真实音频行和 OSS 对象权限,不把“表存在”当成音频链路验收完成。
- 2026-07-14 最新线上资源复核:生产根站与 `/h5/` 均返回 `200`,线上管理端 `index-CJZ3Ax3Z.js` SHA-256 为 `8b9278a26ccb760abce489b12a20b221748c64d4c4153613d2511777bb9677bc`,H5 `index-D4-NrEpb.js` SHA-256 为 `ab15bfd17cabe58e2f34b0ac61ee198a837128ed85dc6bb0ddf77bc3e22dcd9c`;当前 HEAD `1757dcb8` 重建后的本地入口分别为 `index-v0LFXtVo.js` SHA-256 `0fc78c86e734be76aeb8ae03a551f98df9f689db5352a92af77c781c70efccde`、`index-Byx3WtY1.js` SHA-256 `1d2a9d8f947e8a198c31f15a5cf4b66ba4220b1f549c4376c72cc1da56b1d7eb`。两端仍未发布,本轮只读核验,无静态资源同步、后端重启或业务数据写入。
- 2026-07-14 生产迁移资产复核:`aihr_practice_audio`、`aihr_practice_calibration` 已存在于 reset SQL 和运行时懒建表定义,但 `backend/script/sql/update/` 尚无对应版本化生产迁移脚本;生产 schema 曾通过人工 `CREATE TABLE IF NOT EXISTS` 修复。当前不把 reset SQL 或懒建表当正式发布迁移,待 DBA/运维确认迁移归属和执行窗口后,再补经审阅的幂等脚本并做回滚/结构核验。
- 2026-07-14 BRD 用户端入口复核:员工端“问师傅/练/学习中心/案例学习”均已有真实页面和业务路径;“工作上报”进入明确的建设中页,但该能力属于阶段二信息直达或阶段三北森/报事集成范围,不属于一期陪练缺口。当前不把建设中入口改成空壳功能,待对应阶段专项计划和接口契约确定后再实现。
- 2026-07-14 BRD G3/G6 异步模型租户上下文复核:`AihrModelSeedService` 原先用 `LoginHelper.getTenantId()` 解析模型配置,异步上传队列、目录导入等 worker 虽已用 `TenantHelper.dynamic(tenantId, ...)`,进入模型/语音/RAG调用后仍可能因无登录态回退 `000000`;现统一改用动态租户优先的 `TenantHelper.getTenantId()`,普通请求仍回退登录租户,补源码契约测试。覆盖模型配置、对练/面试、语音、SOP 向量/重排/视觉和异步资料加工的共享边界;未修改数据库或生产环境。
- 2026-07-14 测试门禁复核:父 POM 默认 `skipTests=true`,普通 `mvn ... test` 只完成编译;改用 `-DskipTests=false` 真跑 AIHR 测试时发现 `AihrSensitiveTextTest` 仍检查已移出 `AihrModelSeedService` 的 `latencyMs` 字符串,已按当前 `ModelUsage + Duration` 实现修正断言。后续 AIHR 测试命令必须显式关闭跳测,避免把编译成功误判为测试通过。
- 2026-07-14 最新线上只读复核:生产根站与 `/h5/` 返回 `200`,线上管理端仍加载 `index-CJZ3Ax3Z.js`(SHA-256 `8b9278a26ccb760abce489b12a20b221748c64d4c4153613d2511777bb9677bc`),H5 仍加载 `index-D4-NrEpb.js`(SHA-256 `ab15bfd17cabe58e2f34b0ac61ee198a837128ed85dc6bb0ddf77bc3e22dcd9c`);当前分支 `b32be4a3` 工作区本地构建仍为管理端 `index-v0LFXtVo.js`、H5 `index-Byx3WtY1.js`,两端资源未对齐。本轮只读核验,未执行生产静态同步、后端重启或业务数据写入。
- 2026-07-14 BRD 5.4 主数据边界复核:发现 `aihr_org_snapshot` 及 `AihrOrgSyncService` 当前仍持久化并通过管理端组织快照返回 `project_name/dept_name/person_name`,同时保留 `person_phone` 做移动端身份映射;这与 BRD“本地只存外部 `party_id`,绝不复制姓名/部门”的硬约束不一致。TechSpec 3.1 又把 `sync_person.name/phone` 列为外部同步快照字段,项目现有 Demo/管理端也依赖姓名、部门和项目展示,因此不能直接删列或清空生产数据,否则会破坏组织筛选、主管范围展示和训练记录标签。该项暂列 P0 合规缺口:正式组织同步前必须由业务/法务/安全确认“生产只存 ID 与必要映射”还是允许受控显示缓存,并给出迁移、脱敏和管理端展示方案;在决策完成前不执行正式覆盖同步,也不把当前组织快照称为符合 BRD 5.4。
- 2026-07-14 BRD 5.4 渐进缓解:增加 `aihr.org-sync.store-display-fields` 开关,生产配置默认 `false`,开发配置显式 `true`;关闭时组织同步不再写入姓名/部门,组织快照接口也不返回历史姓名/部门,关键词搜索同步收窄为外部主体、项目和岗位字段,管理端人员列回退显示 `ext_party_id`。该修复降低新同步和 API 暴露风险,但不等于完成数据模型迁移:历史生产行仍可能保留旧显示字段,`person_phone` 仍是身份映射必要字段,正式上线前仍需 DBA/法务确认清理、保留期和最小字段方案。
- 2026-07-14 BRD 5.4 前端回退复核:生产关闭组织显示字段后,成长激励页人员选择器原先仍直接渲染 `personName`,会出现“空姓名 / 岗位”;现统一回退为 `personName || extPartyId`,与组织权限页、主管复盘页保持一致,并加入 `demo-check` 防回归标记。该修复只保证最小身份展示,不改变 BRD 5.4 的历史数据迁移和正式组织同步结论。
- 2026-07-14 BRD 4.5 认证规则复核:成长激励页、证据包和后端画像均明确“训练画像参考等级/需 HR 或主管复核”,学分规则显示“待 HR 配置、当前不生效”;后端初/中/高级阈值仅用于训练证据展示,未作为正式资格、晋升或绩效结论。当前无需再加一套伪配置页面,待 HR 明确 `cert_rule`/`incentive_rule` 的来源、版本、生效时间、防刷和人工审批后再实现持久化规则。
- 2026-07-14 BRD 4.7/10.2 内容指标语义复核:管理驾驶舱原先把“已处理 SOP 文档数”直接标成“B1 目标 >=5 流程”,可能把文档数量误判为核心流程覆盖;现改为“`SOP文档` / 核心流程覆盖待内容确认”,并保持提醒态。待内容负责人确认 5 个核心流程编码和适用范围后,再增加正式覆盖率统计。
- 2026-07-14 BRD L1-D 组织人数口径复核:管理驾驶舱原先把当前租户 `aihr_org_snapshot` 的 active 人数直接标成“试点人数”,但该数量不代表正式窗口内有唯一在职身份、手机号映射和训练参与记录;现改为“`组织快照人数` / 正式试点身份待核对”,并保持提醒态。正式试点人数仍以限定窗口和唯一组织身份统计为准。
- 2026-07-14 BRD L0-2 端到端路径口径复核:管理驾驶舱原先把面试、训练、案例、知识四个数据域是否有记录的数量标成“端到端路径”,这不能证明任一英雄路径从入口到结果完整跑通;现改为“`已有业务数据域` / 不等于端到端验收”,真实链路仍以浏览器/API 证据为准。
- 2026-07-14 BRD L1 主页状态口径复核:驾驶舱阶段卡片原先把组织快照存在直接显示为“已接入”,SOP 文档数达到 5 直接显示为“已满足”;现统一改为“快照已存在”和“已处理文档、核心流程待确认”,避免首页状态越过正式组织同步和内容覆盖证据。
- 2026-07-14 BRD 6.3 演示回退语义复核:资料处理中心接口失败时仍保留内置演示统计用于断网演示,但此前没有明确标识,可能被误读为真实库数据;现增加“当前显示演示数据,不代表真实库统计”提示,真实接口成功时不显示该提示。
- 2026-07-14 最新线上只读复核:生产根站、`/h5/` 和租户接口均返回 `200`;线上管理端主资源 `index-CJZ3Ax3Z.js` SHA-256 为 `8b9278a26ccb760abce489b12a20b221748c64d4c4153613d2511777bb9677bc`,H5 主资源 `index-D4-NrEpb.js` SHA-256 为 `ab15bfd17cabe58e2f34b0ac61ee198a837128ed85dc6bb0ddf77bc3e22dcd9c`;当前本地构建为管理端 `index-Cin-vnjm.js` SHA-256 `ca210da50942693d52fb103fe34785be31e2bd263c7d11c0a60959c4dd90deaa`、H5 `index-Byx3WtY1.js` SHA-256 `1d2a9d8f947e8a198c31f15a5cf4b66ba4220b1f549c4376c72cc1da56b1d7eb`。本轮只读核对,未执行生产同步、重启或业务数据写入。
- 2026-07-14 BRD 6.3 案例回退语义复核:案例列表接口失败时原先只弹一次提示并静默展示内置案例记录,可能被误读为真实案例库数据;现增加持久的“当前显示演示记录,不代表真实案例库数据”提示,接口恢复后自动消失。该修复只校正演示回退语义,不增加案例数量或替代正式案例资产。
- 2026-07-14 BRD G3 异步资料队列租户复核:队列领取与卡死清扫按所有租户扫描,单条加工从队列条目携带的 `tenant_id` 进入 `TenantHelper.dynamic(tenantId, ...)`,状态回写继续带租户条件;定向 `AihrUploadQueueServiceTest` 通过。当前仍缺真实双租户上传/目录导入回归,不能仅凭源码契约测试宣称生产隔离已验收。
- 2026-07-14 BRD 6.3 模型配置回退语义复核:模型供应商/模型接口失败时原先会静默保留内置默认清单,仅通过一次性 toast 提示;现增加持久的“当前显示内置默认清单,不代表真实租户配置”提示,接口恢复后自动消失。该修复不改变模型配置、密钥或调用降级规则。
- 2026-07-14 BRD 6.3 提示词模板回退语义复核:模型配置页的提示词模板接口失败时原先直接显示空列表,无法区分真实无模板与接口不可用;现增加持久的“当前列表不代表真实租户模板数据”提示,接口恢复后自动消失。该修复不创建默认模板,也不改变模板写入权限。
- 2026-07-14 BRD 6.3 AI 面试记录回退语义复核:面试记录接口成功返回空列表时原先会错误替换为内置历史记录,接口失败时也只静默回退;现保留真实空列表,仅失败时展示演示记录并增加持久提示“当前显示演示记录,不代表真实面试数据”。该修复不改变面试题生成、评分或复核流程。
- 2026-07-14 BRD 6.3 复盘与 SOP 数据来源复核:复盘页在试点指标接口失败时原先用待复盘记录数代替校准样本数,现改为显示未知并持久提示接口不可用;SOP 文档表继续保留断网演示样例,但为内置演示/已上传记录增加来源标识和提示,避免把演示文档或列表数量误当真实库覆盖与 M5 指标。
- 2026-07-14 BRD 6.3 对练记录回退语义复核:管理端三角色对练页原先始终显示三条静态最近记录,未请求真实复盘记录;现改为 API 优先,真实空列表保持为空,只有接口失败才显示演示记录并持续提示。当前会话完成后追加到现有列表,不再重置时覆盖历史记录。
- 2026-07-14 BRD 6.3 管理端记录首屏回退复核:面试、案例和三角色对练页此前在接口结果返回前就初始化内置 `baseRecords`,慢请求期间可能把演示记录误看成真实业务记录;现统一改为加载期间空表加 loading,只有接口明确失败后才展示演示记录并保留持久提示,真实空列表继续保持为空。补充 `demo-check` 静态标记,管理端 ESLint 与构建通过;本轮未发布生产。
- 2026-07-14 BRD 6.3 候选人记录失效回退复核:首页、进度和资料页刷新接口失败时原先保留上一次成功结果,错误提示出现但旧面试/资料仍可被误读为当前状态;现统一在失败时清空失效数据,登录过期仍沿用原有跳转提示。补充候选端源码回归测试、`demo-check` 标记,`mobile-uni` 单测 `50/50`、类型检查和 H5 构建通过;本轮未发布生产。
- 2026-07-14 线上资源差异复核:生产根站、`/h5/`、`/prod-api/auth/tenant/list` 和 `/prod-api/api/aihr/mobile/home/user` 均返回 `200`;线上管理端仍加载 `/assets/index-CJZ3Ax3Z.js`,H5 仍加载 `/h5/assets/index-D4-NrEpb.js`,当前本地构建分别为 `/assets/index-ClaGy0E5.js`(SHA-256 `788247429e1e20d10306258747d08abdc6903f57fe1313a3e742d141ddcd77fb`)和 `/h5/assets/index-C5pwI-WO.js`(SHA-256 `9d1c53f98561799f4b13fda37e7a25899d4ccc877a3d54a93369bfbfc984dbf7`)。当前只读核验,未执行生产静态资源同步、后端重启或业务数据写入;发布预检继续保留未提交文件保护。
- 2026-07-14 发布预检卫生复核:根目录 `node_modules/` 确认为构建工具生成物,已加入 `.gitignore`,避免依赖目录阻塞发布检查;`RELEASE_VERIFY_REMOTE_MATCH=true` 的预检仍因两份用户未提交的 Figma 文档退出,说明未绕过“发布批次必须干净”的保护。
- 2026-07-14 BRD G3 匿名入口复核:扫描 AIHR 全部控制器后,当前仅保留两个 `@SaIgnore` 方法:公开移动首页 `/api/aihr/mobile/home/{role}` 和岗位-SOP 导航 `/api/knowledge/position-sop`;训练、搜索、上传、复盘、模型、组织同步及音频读取均有登录或角色门禁,未发现新的匿名业务数据入口。本轮无新增代码修复。
- 2026-07-14 BRD M5 导出指标语义复核:`formal_org_login_count` 原名会把按安全手机号映射统计的在职组织身份误读为登录次数;现统一更名为 `formal_org_identity_count`,统计 SQL 不变,CSV 契约、严格校验和验证脚本同步更新。AIHR 目标测试 `34/34`、CSV 契约测试 `5/5` 通过;不改变真实试点数据门槛,也未发布生产。
- 2026-07-14 BRD G3/M5 评审样本绕过复核:SOP 搜索的 `source=verify_demo_questions` 原由客户端直接控制,普通登录用户可借此跳过评审样本写入,稀释正式可用率分母;现仅超级管理员保留该内部验证来源,其他请求自动归一为普通 `knowledge_search`,并补预检标记与回归测试。未修改生产环境。
- 2026-07-14 M5 试点输出口径复核:严格预检的组织映射数量已与 CSV 的 `formal_org_identity_count` 统一显示为 `org_identity`,并同步行为测试断言;统计逻辑不变,避免把在职组织身份映射数误读为登录次数。未修改生产环境。
- 2026-07-14 BRD 4.7/G3 反馈追溯复核:答案反馈原先只校验客户端传入的 `reviewId` 属于当前租户,可能把其他问题的同租户评审记录绑定到当前反馈;现同时校验评审记录中的脱敏问题文本与反馈问题一致,不一致时仅清空关联、不阻断正常反馈写入,并补源码契约与预检标记。未修改生产环境。
- 2026-07-14 线上只读核对:生产根站、`/h5/` 和 `/prod-api/auth/tenant/list` 均返回 `200`,线上仍加载管理端 `index-CJZ3Ax3Z.js` 与 H5 `index-D4-NrEpb.js`;本轮 `aa7e1508`、`5d85d63c` 两个 BRD 修复提交尚未发布。未执行生产同步、重启或业务数据写入。
- 2026-07-14 发布证据链复核:`release-preflight.sh` 原先只检查构建产物存在和 hash,旧产物可能被误当成当前提交发布;现增加跨 macOS/Linux 的产物时间门禁,管理端、H5 入口/主资源和后端 jar 必须不早于当前 `HEAD`,否则明确要求重建。该修复只收紧本地发布前检查,未修改生产环境。
- 2026-07-14 BRD 发布边界复核:基于当前 `HEAD=0433250b` 重新构建管理端、`mobile-uni` H5 和后端 jar 后,`release-preflight.sh` 的产物新鲜度检查通过;线上根站与 `/h5/` 仍返回 `200`,但线上仍加载管理端 `assets/index-CJZ3Ax3Z.js`、H5 `assets/index-D4-NrEpb.js`,本地当前产物分别为 `assets/index-ClaGy0E5.js`、`assets/index-C5pwI-WO.js`。预检随后因两份用户未提交的 Figma 文档停止;本轮未修改、暂存或提交这两份文档,也未执行生产同步、后端重启或业务数据写入,因此当前 BRD 修复仍未被证明在线上生效。
- 2026-07-14 BRD 4.3.4 门禁补强:严格试点预检不再只按启用场景数量判断覆盖,新增“服务推介/增值”和“日常服务”场景存在性统计;当前仅增加事实检查,不臆造场景内容,场景成功条件、SOP 适用范围和正式质量仍需内容负责人确认。行为测试夹具已覆盖两类统计,严格门禁会在缺任一核心流程时明确失败。
- 2026-07-14 BRD G3 个人数据边界复核:移动端个人历史、错题、画像、晋升证据和任务读取共用 `ownMobileExtPartyId`;此前普通系统用户可传任意 `extPartyId`,绕过 HR/管理员角色读取员工个人数据。现统一要求系统用户具备 `superadmin` 或 `hr_operator`,APP 用户仍只使用登录手机号,主管团队接口继续走独立项目范围校验;补源码回归断言,未改变数据库或生产数据。
- 2026-07-14 BRD G3 空身份路径复核:员工任务列表省略 `extPartyId` 时此前会进入空身份查询,普通系统用户可能看到当前租户任务集合;现与个人历史/画像共用同一身份归一化,APP 用户按登录手机号、HR/超级管理员按授权范围读取,普通系统用户直接拒绝;补回归断言,未改变数据库或生产数据。
- 2026-07-14 BRD 发布证据复核:当前 HEAD 的管理端、`mobile-uni` H5 和 `ruoyi-admin` jar 均已重新构建通过;只读线上根站与 `/h5/` 均返回 `200`,线上仍加载管理端 `index-CJZ3Ax3Z.js`、H5 `index-D4-NrEpb.js`,本地当前产物已刷新为管理端 `index-Cin-vnjm.js`、H5 `index-Byx3WtY1.js`。`RELEASE_VERIFY_REMOTE_MATCH=true` 的发布预检在产物新鲜度通过后,因两份用户未提交 Figma 文档停止;本轮未修改、暂存或提交这两份文档,也未执行生产同步、后端重启或业务数据写入。
- 2026-07-14 BRD 4.3.4 内容现状核对:本地开发租户当前启用生活顾问场景 `12` 条,但服务推介/增值场景 `0` 条、日常服务场景 `0` 条;已入库案例 `2` 条,知识附件处理数 `0` 条。严格预检继续把两类核心流程和正式内容数量作为事实门禁;本轮不自拟业务话术或伪造知识/案例数据,待内容负责人提供正式 SOP、成功条件和脱敏素材后再入库验收。
- 2026-07-14 BRD G1/4.5 证据包评分边界修复:成长/晋升证据包此前只展示 AI 测评分,人工校准结果仅存在于试点 CSV;现复用 `aihr_practice_calibration` 最新记录,向管理端和员工端同时返回人工校准分、最终采用分和校准样本数,并在导出证据包中保留三项字段。未校准时明确显示“待采集”,不把 AI 分伪装成人工结论;AI 仍仅作训练参考,不直接生成绩效或晋升结论。
- 2026-07-14 BRD 4.5/4.7 案例贡献证据边界复核:现有 `aihr_case_record.owner` 仅保存负责人展示值(系统用户或员工末四位),没有稳定 `ext_party_id`、采纳审核任务或 `incentive_point.source='case_contribution'` 关联;当前案例上传/入库数量不能安全算作员工案例贡献。成长证据包现明确提示“案例上传/入库”与“正式采纳、署名、积分”分离,未把案例数量伪装成晋升证据;待 HR 确认 `review_task` 终审、署名和积分规则后,再设计正式关联与统计。
- 2026-07-14 BRD 4.5/B5 贡献度口径修复:能力画像此前把训练次数和待复盘状态混入 `contribution`,会将训练活跃度误显示为有效贡献;现将贡献度收敛为 `aihr_practice_session.incentive_point` 的人工确认分,训练次数继续单独展示。未新增积分来源或自动案例计分,正式案例贡献仍等待 `review_task`/署名/积分规则。
- 2026-07-14 BRD 4.4 错题本任务来源展示修复:员工学习中心此前把所有非每日题任务统一显示为“专项训练”,会遮蔽 `retry` 错题再练和 `camp` 训练营来源;现按服务端来源分别显示“错题再练/训练营/专项训练”,并保留每日三题标签与样式区分。该修复只校正任务语义展示,不把 `source='camp'` 标签扩展成未配置的训练营计划、进度或完成规则。
- 2026-07-14 BRD G3 组织快照质量门禁修复:生产默认关闭 `store-display-fields` 时,`AihrOrgSyncService` 原先在 `orgRow()` 内先清空姓名/部门,再以已屏蔽的 `OrgRow` 计算 `suspectText`,外部姓名/部门中的问号乱码可能被漏报,覆盖写入保护因此不完整。现先基于外部原始字段计算 `suspectText`,再独立保存质量标记;展示字段仍按生产脱敏策略清空,组织表结构和写入字段不变。新增 `AihrOrgSyncServiceTest` 回归和 `demo-check` marker;未修改生产数据。正式同步仍需真实上游快照、手机号映射和法务确认。
- 2026-07-14 BRD 4.3.4 每日三题资格边界修复:`aihr_org_snapshot` 没有 `hire_date` 时,旧逻辑用“移动端训练记录少于 3 次”推断新员工,可能把老员工或临时账号误派每日三题。现仅在本地 `application-dev.yml` 显式开启 `allow-legacy-daily-drill-fallback=true`;生产默认关闭,正式环境必须等组织同步提供 `hire_date` 后再按三个月窗口派发。新增边界测试和 `demo-check` marker;不改数据库结构,不伪造正式新员工数据。
- 2026-07-14 BRD 4.3.4 每日三题生产 profile 硬门禁:旧回退即使被环境变量显式打开,仍可能在生产 profile 生效;现仅允许 `dev/local` profile 使用训练次数兼容回退,`prod` 或混合 profile 强制关闭。新增 profile 边界测试和 `demo-check` marker;未修改数据库结构或生产数据。
- 2026-07-14 BRD 6.3 SOP 来源标识修复:SOP 检索成功时前端原先忽略 API 返回的 `records`,后端返回的内置记录也没有来源字段,可能把演示文档显示成真实知识库;现 API 成功态只使用响应记录,内置记录明确标记 `source=demo`,失败/未检索态继续保留已有回退提示。未修改知识库数据或生产环境。
- 2026-07-14 当前线上资源复核:生产根站、`/h5/` 和 `/prod-api/auth/tenant/list` 均返回 `200`;线上管理端 `index-CJZ3Ax3Z.js` SHA-256 为 `8b9278a26ccb760abce489b12a20b221748c64d4c4153613d2511777bb9677bc`,当前分支构建 `index-B3bSjqdi.js` SHA-256 为 `2ff13b11307631f9cd672247d6d08e395fb674ac5b9c6f7c4fb27832eacdf075`;线上 H5 `index-D4-NrEpb.js` SHA-256 为 `ab15bfd17cabe58e2f34b0ac61ee198a837128ed85dc6bb0ddf77bc3e22dcd9c`,当前分支构建 `index-8gZKJTho.js` SHA-256 为 `c6b01faeba4198cb7ff9f5c2ffa88f1cc97c8ecdf20be86f432ca7a1d673f3e1`。本轮只读核验,未执行生产静态资源同步、后端重启或业务数据写入。
- 2026-07-14 BRD 4.4 场景派发覆盖复核:数据库已有 12 个生活顾问场景,但移动端主管“指派专项”和“复盘后再练”此前只提供 3 个静态场景,导致其余已启用场景无法从主管入口使用;现改为 API 优先加载已启用场景,失败时保留 3 个本地兜底。BRD 所称 7–14 天专项训练营目前仍只有 `source='camp'` 标签,没有训练营计划、天数、每日任务、进度和完成规则,需 HR 确认内容与运营口径后再实现,不以标签冒充训练营闭环。
- 2026-07-14 BRD G3/M5 派发来源完整性复核:主管派发接口此前信任客户端 `source`,理论上可把手工派发伪装成 `daily`、`retry` 或 `camp`,污染每日题、低分再练和训练营统计;现将主管创建任务的来源固定为服务端 `manual`,`daily/retry` 仍只由各自系统路径生成。新增服务源码回归测试与 `demo-check` marker,未修改生产数据。
- 2026-07-14 BRD M1 场景启停边界复核:停用场景此前在新训练启动时可能因内置 seed 回退而继续可用,管理端“停用”不具备实际阻断效果;现仅在新开始训练前检查数据库场景的 `enabled` 状态,已停用场景明确拒绝,历史训练/复盘读取不受影响。新增服务源码回归测试与 `demo-check` marker,未修改生产数据。
- 2026-07-14 BRD M1 派发场景状态与展示一致性复核:修复停用场景仍可通过直接派发接口进入待训练,以及客户端传入场景名称可与场景 ID 不一致的问题;主管派发现在复用启停校验,记录名称始终取服务端场景定义。历史任务读取不受影响,未修改生产数据。
- 2026-07-14 BRD M1 场景筛选回退语义复核:场景表查询成功但岗位/类型没有启用场景时,旧逻辑仍回退到内置场景,可能把不匹配或已停用场景展示给员工/主管;现仅在数据库异常时保留 seed fallback,真实空结果保持为空,并补岗位筛选回归测试。未修改生产数据。
- 2026-07-14 BRD M1 主管场景入口回退复核:后端已启用场景 API 优先,但主管指派页模板仍循环三条静态场景,且 API 正常空结果会继续显示静态选项;现改为循环 API 场景,真实空结果显示“暂无可派发的已启用场景”,只有请求失败才使用本地兜底。复盘后再练入口同步保持真实空结果为空,未修改生产数据。