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

34 KiB
Raw Blame History

BRD 功能审查与未完成项记录

更新时间:2026-07-14

1. 审查口径

本记录以 物业AI人力资源系统业务需求文档BRD.md 为业务事实源,以 FIGMA_IMPLEMENTATION_MATRIX.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 工程闭环已在位;候选人资料移动端上传/列表现在只接受 APP 候选人本人身份,HR 继续通过独立审核接口处理;需继续保留人工复核证据
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、手机号;补齐手机号映射并确认主管身份后,才执行正式同步和主管数据权限验收
G5 情绪疏导树洞隐私边界 BRD 12.1、附录 A 第三层 当前仓库没有树洞入口、独立存储、留痕策略、训练集排除机制或删除/审计合同;历史一期方案明确将“情绪疏导树洞”列为一期不做。现有陪练中的情绪识别、纠偏和反馈属于训练证据,不能冒充“不留痕树洞” 在进入正式生产前由业务、法务和安全共同确认是否纳入当前阶段;若纳入,必须单独定义匿名/身份边界、零落库与日志脱敏、模型供应商留存、删除证明和误伤升级路径;在决策和合同未明确前保持未实现,不用陪练情绪数据承接树洞诉求
外部 AI 的 PII 出境与留存 4.3.2、4.3.3、G3、G6 对练、面试、SOP、Embedding、Rerank、TTS 的文本请求已统一做最小脱敏;ASR 仍发送音频本体,视觉 OCR/视频关键帧仍发送图片本体,当前没有供应商不留存、删除证明或本地语音/视觉模型证据;视频失败日志已遮蔽文件名中的已知 PII 正式试点前由业务、法务和安全确认供应商留存/训练/跨境条款,或切换本地模型;补音频、图片的审计与删除证据后,才能把 G3/G6 判为通过
管理端/后端生产发布证据 6.3、12.1、L1-C 2026-07-14 已核实并发布:生产根站点 https://peilian.njzhmj.top/、Caddy /prod-api、systemd wygj-aihr.service 和后端 jar 均可核查;管理端静态包、后端 jar 已与本地构建 hash 对齐,租户接口和移动端首页 API 返回 200 发布证据已具备;后续仍需把正式发布命令、回滚脚本和生产部署凭据纳入运维交接,不能把“服务可访问”直接等同于正式试点通过
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 留痕和文本降级链路已有;但当前没有四川话/粤语等方言供应商配置、样本集和准确率/响应时延证据,也没有把图像/视频训练输入纳入一期验收口径 先确定一期方言厂商和可接受指标,用真实短音频做至少一条方言路径回归;图像/视频输入另按场景与合规边界评审,不用通用文本链路冒充完成

P2/P3:明确暂缓,不应混入当前修复

  • 个人 AI 助理、个人资料库、网页抓取、引用问答、PPT 生成:BRD 4.8,阶段二。
  • 开放问题榜、积分/排行榜/荣誉墙、完整七维偏好、独立 AI 教练编排:阶段二/三或后续运营范围。
  • 师徒关系、拜师池、认证和带徒福利:业务已取消,继续保持不实现。

4. 首批执行顺序

  1. 先完成正式组织快照 dry-run 与项目范围核对;不修改正式数据,不用手机号猜角色。
  2. 在本地/测试环境实现“错题本只读聚合”,复用现有训练记录和 retry assignment,补 API、员工入口和主管查看边界。
  3. 已先补岗位学习适配摘要,但它只负责把一期生活顾问导航状态说清楚;下一步接正式岗位/项目/SOP 适用范围,再实现培训任务状态;资格 gating 放在有真实资格规则后接入,避免先做一个无法运营的开关。
  4. 在业务提供一期视频样片及字段口径后,继续扩案例详情数据契约;当前原始音频回放已完成,但不替代视频、学习点和主管点评。
  5. 用正式试点窗口跑 BRD L1/M5,而不是继续增加视觉页面。

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 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 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,尚未发布生产。