chore(release): lock BRD alignment batch 20260715

This commit is contained in:
2026-07-15 15:58:19 +08:00
parent c861977ec0
commit 09492db96a
13 changed files with 282 additions and 118 deletions
+24 -5
View File
@@ -1,5 +1,23 @@
# BRD 功能审查与未完成项记录
## 现阶段总览(2026-07-15)
本节只回答当前 `mobile-uni` 三端交互输入与 BRD 的匹配程度,不替代 L0/L1、生产发布或正式试点验收。按 BRD v1.2 的最终多模态目标评估,当前约为 **60%–70%(部分匹配)**;按总纲阶段一“陪练”执行边界评估,约为 **80%–90%(核心链路基本匹配)**。区间是工程审查判断,不是 BRD 官方验收指标。
| 角色端 | 文字输入 | 语音输入 | 图片/视频输入 | BRD 判断 |
|---|---|---|---|---|
| 员工端 | 对练、每日三题、问师傅和复盘意见支持文字 | 对练与每日三题支持浏览器录音或选择音频后 ASR;案例素材支持音频上传;问师傅仍仅支持文字 | 对练与问师傅均无图片/视频入口 | 满足阶段一语音/文本主链路;未满足 BRD 4.3.3 图像/视频情境输入 |
| 候选人端 | 面试支持文字作答 | 面试支持录音转文字和选择音频 | 补充资料支持 PDF/Word/常见图片,但不是图片面试或多模态评分 | 满足 BRD 4.1 语音/文本作答;资料图片上传属于附加能力,不能冲抵 4.3.3 缺口 |
| 主管端 | 专项指派、复盘建议和后续训练原因支持文字 | 可回听员工训练录音,不支持主管录音输入 | 无图片/视频提交入口 | 符合当前“查看回放→写复盘→派训练”职责;BRD 未要求主管端同时具备三种输入 |
已匹配的输入链路:候选人语音/文本面试(BRD 4.1)、员工语音/文本对练与每日一练(4.3/4.4)、主管文字复盘与录音回听(4.4)、案例音频上传(4.6)。尚未闭合的终态要求:员工图像/视频情境输入和服务录像回放(4.3.3)、四川话/粤语等方言的真实样本与 `<=5s` 响应证据(6.5/L1-C)、员工个人文字/文件/图片/链接收藏与混合问答(4.8,明确属于阶段二)。
本批次已将 `pages/user/today/index.vue` 的“语音提问,快速解答”修正为“文字提问,快速解答”,与 `pages/user/sop/index.vue` 的实际输入能力一致。若后续提供语音问师傅,应直接复用 `mobile-uni/src/services/speech.ts` 和现有 `/api/ai/asr`,不新增移动端专用 ASR 接口。
审查证据来自当前源码与本地渲染控件;本轮未重新执行真实方言 ASR、图片上传、语音响应时延或生产环境端到端测试,因此这些能力继续标记为未验证。图片/视频情境输入已在 `AI陪练二期开发推进计划.md` 中明确为文本场景稳定后的独立评估项;个人知识空间按 `银城员工端APP分阶段实施总纲.md` 留在阶段二,不应拉入当前阶段一主线。
- 2026-07-15 管理端资料处理分页静态发布:已备份生产根目录至 `/opt/wygj/backups/www-20260715134936`,再同步 `frontend/dist/`;根目录同步未使用 `--delete`,因此未覆盖同目录的 `/h5`。线上 `processing-yUVzof10.js` SHA-256 与本地构建一致。真实管理员会话确认任务分页共 97 页、第二页仍展示 10 条,状态筛选后回到第一页;根站、H5 和租户接口均返回 `200`。本轮未发布后端、迁移数据库或写入业务数据。
- 2026-07-15 当前发布与资料导入复核:提交 `eacf1a0a` 已发布到线上,`release-preflight.sh` 通过资源/后端哈希、`16/16` schema、根站/H5/API 健康检查,`wygj-aihr.service` 为 `active`。使用真实管理员认证在生产验证 ZIP 异步资料链路:ZIP 入队后拆为 `2` 条队列记录,`2/2` 完成,生成 `1` 个文档和 `2` 个片段;测试队列、附件、片段和 OSS 对象已清理。当前生产 BRD 证据仍未达标:评分校准 `0` 条,SOP 评审 `0/14`,候选资料 `0` 条;组织快照为在职 `22` 条、`2` 个项目、主管/经理岗位 `7` 条,但手机号映射为 `0`。该结果证明“版本已发布、ZIP 功能可用”,不等于正式试点验收完成。
- 2026-07-15 发布 schema gate 回归:`RELEASE_VERIFY_REMOTE_SCHEMA=true` 的只读预检在保留两份 Figma 文档脏工作区的临时索引下正常运行,根站、租户和员工首页均为 `200`,随后准确拦截线上缺失的 8 张表:`aihr_candidate_employee_link`、`aihr_onboard_task`、`aihr_position_responsibility`、`aihr_practice_rubric`、`aihr_practice_rubric_dimension`、`aihr_practice_scenario`、`aihr_qualification_gate`、`aihr_sop_applicability`;未执行迁移或发布。
@@ -276,7 +294,7 @@
- 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 当前状态复核:本地 `ry-vue` 组织快照有 `3001` 条 active 记录,但手机号可映射仅 `1` 条、项目 `41` 个,不能作为正式 1–2 项目试点身份数据;线上根站、`/h5/` 和租户接口均返回 `200`,但线上管理端仍加载 `index-CJZ3Ax3Z.js`,本地现有构建产物为 `index-Cz1rtpOj.js`,且发布预检被两份已有未提交 Figma 文档阻断,因此未把最新本地提交宣称为已发布。该组织身份结论已由 2026-07-15 线上组织同步闭环条目替代。
- 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,避免普通后台账号越权读取团队训练数据或创建派题。
@@ -435,14 +453,14 @@
- 2026-07-14 BRD 门禁夹具同步:严格预检已将 SOP 正式样本限定为带 `requester_ext_party_id` 且能命中在职组织身份的提问记录;原 `demo-check-pilot-gates` 临时表仍是旧 6 列,导致 SOP 指标为空并无法真实覆盖新口径。现补齐主体与 `prompt_version` 字段,使用安全员工主体 `E` 验证 `sop_usable=1/1`、待评审数和窗口过滤,未改变业务数据。
- 2026-07-14 BRD 生产迁移回归固化:新增 `scripts/tests/aihr-schema-migrations.test.sh`,在临时 MySQL 库验证 SOP 主体/版本字段和组织入职日期迁移面对旧表、缺前置表时可安全执行且重复执行幂等;不写入开发库业务数据。
- 2026-07-14 BRD 生产迁移回归扩展:同一临时 MySQL 回归测试同时连续执行 `aihr_20260714_practice_evidence_mysql8.sql`,确认 `aihr_practice_audio` 与 `aihr_practice_calibration` 两张证据表可重复创建;不写入开发库业务数据。
- 2026-07-14 BRD 当前开发库审查快照:生活顾问启用场景 `12`、校准记录 `20`、已评审 SOP `2`,但住宅 SOP 文档仅 `3/5`、已入库案例 `2/20`,在职组织快照 `3001` 条中手机号可映射仅 `1` 条;这些数据不能作为正式试点通过,下一步优先补内容负责人确认的核心流程素材和正式组织身份映射,不用烟测记录替代。
- 2026-07-14 BRD 当前开发库审查快照:生活顾问启用场景 `12`、校准记录 `20`、已评审 SOP `2`,但住宅 SOP 文档仅 `3/5`、已入库案例 `2/20`,在职组织快照 `3001` 条中手机号可映射仅 `1` 条;这些数据不能作为正式试点通过,下一步优先补内容负责人确认的核心流程素材和正式组织身份映射,不用烟测记录替代。该组织身份映射结论已由 2026-07-15 线上组织同步闭环条目替代,内容/案例/正式试点样本风险仍需继续跟进。
- 2026-07-14 BRD 5.4 训练隐私边界补强:组织快照存在且默认关闭显示字段时,员工历史、主管复盘详情、任务列表和正式试点 CSV 明细不再直接返回历史 `trainee_name`,统一回退为“员工”;新产生的训练、每日题和错题再练记录也不再默认写入姓名,只有显式开启 `aihr.org-sync.store-display-fields` 才展示/保留名称。新增服务回归断言与 `demo-check` marker,保留稳定 `formal_ext_party_id`、项目和训练证据字段;该修复不替代历史显示字段清理、保留期和法务确认。
- 2026-07-14 BRD G3 组织快照缺失 fail-closed:主管团队接口此前在 `aihr_org_snapshot` 不存在时回退读取训练/派发表,生产迁移遗漏可能把历史姓名和非正式范围暴露给后台主管视图;现仅 `dev/local` profile 允许演示回退,其他 profile 在组织快照不可用时返回空团队并停止继续查询活动数据。新增“非 Demo 无快照直接为空”回归测试与 `demo-check` marker,不改变本地演示路径。
- 2026-07-14 BRD 5.4 隐私开关一致性修复:部分兼容查询此前只有在检测到组织快照表时才隐藏姓名,组织表暂缺时可能绕过 `store-display-fields=false`;现员工历史、任务/主管记录、复盘详情及无快照演示成员读取均统一由显示开关控制,默认关闭即返回“员工”。dev 配置仍显式开启用于演示,生产默认关闭;AIHR 全量真测试通过,未修改业务数据。
- 2026-07-14 BRD 严格门禁绕过修复:`AIHR_DEMO_CHECK_LIBRARY_ONLY=true` 仅允许测试加载脚本函数,和 `AIHR_PILOT_STRICT=true` 同时使用时现在直接失败,避免调试开关把正式试点检查静默跳过;新增回归断言,未修改业务数据。
- 2026-07-14 线上浏览器身份复核:使用数据库已有手机号 `13900001111` 和当前 dev 验证码规则登录 `https://peilian.njzhmj.top/h5/` 成功,但随后进入“确认岗位”页并提示“未从组织数据匹配到岗位”,说明线上手机号登录链路可用而正式组织岗位映射仍未闭合;本轮未点击岗位确认,不写入线上岗位数据。
- 2026-07-14 BRD 本轮线上只读复核:生产根站、`/h5/`、`/prod-api/auth/tenant/list` 和 `/prod-api/api/aihr/mobile/home/user` 均返回 `200`;线上仍加载管理端 `assets/index-CJZ3Ax3Z.js` 与 H5 `assets/index-D4-NrEpb.js`。当前本地 `HEAD=8d5cb3d6` 的隐私/组织快照修复尚未重新构建或发布,本轮未执行生产静态同步、后端重启或业务数据写入;线上手机号登录仍会进入“确认岗位”但无法匹配正式组织岗位,P0 组织同步缺口保持未完成。
- 2026-07-14 BRD 5.4 组织快照响应字段复核:`OrgPersonRow` 不包含 `person_phone`,手机号只用于服务端身份映射、过滤和统计;`/api/aihr/org/snapshot` 仍要求 `superadmin/hr_operator`,`store-display-fields=false` 时姓名和部门返回空值。当前未发现新的手机号响应泄露,因此不新增重复脱敏代码;正式组织同步、手机号覆盖率和历史字段治理仍保持 P0 未完成。
- 2026-07-14 BRD 本轮线上只读复核:生产根站、`/h5/`、`/prod-api/auth/tenant/list` 和 `/prod-api/api/aihr/mobile/home/user` 均返回 `200`;线上仍加载管理端 `assets/index-CJZ3Ax3Z.js` 与 H5 `assets/index-D4-NrEpb.js`。当前本地 `HEAD=8d5cb3d6` 的隐私/组织快照修复尚未重新构建或发布,本轮未执行生产静态同步、后端重启或业务数据写入;线上手机号登录仍会进入“确认岗位”但无法匹配正式组织岗位。该 P0 组织同步缺口已由 2026-07-15 线上组织同步闭环条目替代,本条只保留当时线上资源状态。
- 2026-07-14 BRD 5.4 组织快照响应字段复核:`OrgPersonRow` 不包含 `person_phone`,手机号只用于服务端身份映射、过滤和统计;`/api/aihr/org/snapshot` 仍要求 `superadmin/hr_operator`,`store-display-fields=false` 时姓名和部门返回空值。当前未发现新的手机号响应泄露,因此不新增重复脱敏代码;正式组织同步和手机号覆盖率已由 2026-07-15 线上同步闭环补齐,历史字段治理仍需独立跟进。
- 2026-07-14 BRD 发布预检复核:在隔离干净工作树按当前 `HEAD=8f2ace4a` 重新构建管理端、`mobile-uni` H5 和后端 jar,`release-preflight.sh` 的产物新鲜度、根站和租户业务码检查通过;本地管理端主资源 `index-CX4fynEb.js`(SHA-256 `c800022a22e82e81782da590cfec81145852014a6521f7521775720e0f1087fe`)与 H5 `index-C1WoTt0t.js`(SHA-256 `bfb07609acecde3678ed18bf48ce022f36596c6b946e076436fe242cf3e15675`)均与线上 `index-CJZ3Ax3Z.js` / `index-D4-NrEpb.js` 不一致,预检按预期停止;本轮未执行生产静态同步、后端重启或业务数据写入。
- 2026-07-14 BRD G3 OSS 元数据租户隔离修复:SOP 文档去重、处理概览和文件解析元数据此前通过 `JdbcTemplate` 仅按 `sys_oss.oss_id` 读取/更新,未显式约束 `sys_oss.tenant_id`;现统一要求 `sys_oss.tenant_id = aihr_knowledge_attach.tenant_id` 或当前租户,避免跨租户 OSS 元数据被误读/覆盖。新增 `AihrSopSeedServiceTest` 契约断言与 `demo-check` marker;未修改业务数据或生产环境。
- 2026-07-14 BRD G3 Qdrant 共享 collection 隔离修复:重建单租户向量索引此前会删除整个共享 Qdrant collection,并用全局点数与当前租户 MySQL 数量比较;现改为按当前租户 payload filter 删除和统计点数,保留其他租户向量。新增回归契约与 `demo-check` marker;未修改业务数据或生产环境。
@@ -456,4 +474,5 @@
- 2026-07-15 BRD G3 候选人面试操作角色边界修复:`/api/recruit/interview/start`、`answer`、`finish` 此前只要求登录,普通后台系统用户可绕过 HR/管理员权限创建或完成面试;现统一限制为 APP 候选人本人或 `superadmin/hr_operator`,候选人会话仍按本人手机号绑定。新增源码契约测试和 `demo-check` marker;尚未发布生产。
- 2026-07-15 BRD G3 面试未知会话状态边界修复:系统用户调用 `answer` 携带不存在或已失效的 `sessionId` 此前会返回“已暂存”而不暴露会话无效;现统一要求会话存在且属于当前租户,`finish` 保留 HR 管理端既有的兼容性创建逻辑。新增服务回归测试和 `demo-check` marker;尚未发布生产。
- 2026-07-15 BRD 发布状态只读复核:生产根站、`/h5/`、`/prod-api/auth/tenant/list` 和 `/prod-api/api/aihr/mobile/home/user` 均返回 HTTP `200`,`wygj-aihr.service` 为 `active`;生产 H5 仍加载 `index-CDn6TrX8.js`,本地最新候选人面试权限/未知会话修复提交 `217edb09` 尚未证明已发布。本轮仅执行 HTTP、服务状态和 H5 资源只读检查,未同步静态资源、重启后端、执行迁移或写入生产业务数据。
# 2026-07-15 BRD G3/G6 训练语音原始地址暴露收紧:ASR/TTS 成功响应此前可直接返回 `sys_oss.url`,训练历史、主管复盘和管理端复盘在缺少 `audioOssId` 时也会回退播放原始 `audioUrl`;现统一只回传受保护 OSS 编号,服务端持久化/响应仅保留 `data:audio/*` 内联降级,客户端也拒绝 HTTP 音频地址直接播放。TTS 仍写入 `sys_oss`,旧移动端通过内联 data URL 保持可播放;已补源码契约测试和两端回放边界,未修改生产资源或生产数据。
- 2026-07-15 BRD G3/G6 训练语音原始地址暴露收紧:ASR/TTS 成功响应此前可直接返回 `sys_oss.url`,训练历史、主管复盘和管理端复盘在缺少 `audioOssId` 时也会回退播放原始 `audioUrl`;现统一只回传受保护 OSS 编号,服务端持久化/响应仅保留 `data:audio/*` 内联降级,客户端也拒绝 HTTP 音频地址直接播放。TTS 仍写入 `sys_oss`,旧移动端通过内联 data URL 保持可播放;已补源码契约测试和两端回放边界,未修改生产资源或生产数据。
- 2026-07-15 BRD 4.6/P0 组织同步线上闭环:生产 `/opt/wygj/config/wygj.env` 已配置开放组织同步变量并备份为 `/opt/wygj/config/wygj.env.bak-orgsync-20260715141150`,`wygj-aihr.service` 重启后租户接口和员工首页 API 均返回业务成功;线上执行 `POST /prod-api/api/aihr/org/sync` dry-run 与覆盖同步成功,开放平台返回公司 17、部门 963、员工 3417,生产 `aihr_org_snapshot` 为 3417 行、手机号可映射 3392、手机号不可用 25、疑似乱码 0、在职 2943、离职 474。本轮未替换 jar 或静态资源;25 名员工手机号不可用是上游数据问题,不阻塞组织同步功能发布,但正式试点仍需真实训练、校准和 SOP 评审样本。