fix: support authenticated video citation playback

This commit is contained in:
key
2026-08-02 22:04:09 +08:00
parent 6ad8a017a4
commit a07bbcca07
7 changed files with 83 additions and 26 deletions
@@ -2,7 +2,7 @@
> 制定日期:2026-07-31
>
> 当前状态:阶段 0 基线冻结已完成;阶段 1—5 已实现部分能力但尚未满足完整技术通过门禁;阶段 6 未开始
> 当前状态(2026-08-02):阶段 0 基线冻结已完成;阶段 1—5 已实现部分能力,本机 H5 已验证文本、图片、视频引用详情及视频 Range 实播,但完整越权矩阵、App-Plus/Android 真机和性能门禁未闭合;阶段 6 未开始
>
> 适用范围:`mobile-uni` 员工端“问 · 数字师傅”、`/api/aihr/agent/**`、知识检索与受控原始资料接口
@@ -263,7 +263,7 @@ mvn -f backend/pom.xml -pl ruoyi-modules/ruoyi-aihr -am `
| 字段 | 实际值 |
|---|---|
| 状态 | 实现中 |
| commit | 工作区未提交,当前 HEAD `cafb836` |
| 构建源 | 阶段 1 实现已进入当前分支;2026-08-02 本轮未新增该阶段代码 |
| JUnit | 未运行:当前 PowerShell 未找到 `java`/`mvn` |
| 迁移幂等 | 本地 locator 迁移与回填已执行;未完成两次正式迁移的 JUnit 证明 |
| 六类样本定位 | 当前本地 seed 仅有 5 个文本附件、15 个 TEXT locator;PDF/DOCX/PPTX/XLSX/IMAGE/VIDEO 固定样本未完成 |
@@ -367,14 +367,14 @@ GET /api/knowledge/citations/{detailRef}
| 字段 | 实际值 |
|---|---|
| 状态 | 实现中 |
| commit | 工作区未提交,当前 HEAD `cafb836` |
| JUnit | 未运行:当前 PowerShell 未找到 `java`/`mvn` |
| 正授权 | 未完成;本地 `aihr_knowledge_app` 为空,真实问答返回“当前登录端未启用知识问答应用” |
| 构建源 | 2026-08-02 本轮修复提交见 Git 历史;该提交不代表生产发布 |
| JUnit | `AihrKnowledgeResourceRangeTest`:`2/2` 通过,覆盖首次无 Range 请求的 inline/MIME 通路和带 Range 请求转发 |
| 正授权 | 本机已用已发布的合成文本、图片、视频资产通过 APP 登录态检索并打开详情 `3/3`;未执行生产正式账号验收 |
| 越权矩阵 | 未完成;源码保留租户、应用、主体、来源治理复验,未形成后端运行证据 |
| Range | 未完成后端运行验证;实现已加入 OSS/MinIO Range 链路 |
| Range | 本机合成 MP4 完整请求 `200 video/mp4` 且 inline;Range 请求 `206 video/mp4`,返回合法 `Content-Range` 和 1024 字节 |
| 日志敏感信息扫描 | 未完成后端运行日志扫描;未在移动端脱敏证据中写入手机号、令牌或 OSS 原址 |
| 证据目录 | `output/citation-source-viewer/20260731-local/` |
| 遗留项 | 需要 Java/Maven、真实 APP 应用绑定、带 `oss_id` 的授权附件及后端正反权限矩阵 |
| 遗留项 | 生产正式账号、撤权/跨租户/伪造/过期票据反例、日志扫描和完整权限矩阵仍待验证 |
---
@@ -452,14 +452,14 @@ npm --prefix mobile-uni run build:app
| 字段 | 实际值 |
|---|---|
| 状态 | 实现中 |
| commit | 工作区未提交,当前 HEAD `cafb836` |
| Node tests | `node --test mobile-uni/tests/*.test.mjs`:`211/211` 通过;有既有 WebSocket 端口占用告警但无失败用例 |
| 构建源 | 2026-08-02 本轮修复提交见 Git 历史;该提交不代表生产发布 |
| Node tests | `node --test mobile-uni/tests/*.test.mjs`:`217/217` 通过,包含 H5 媒体地址不得落入 `/h5/dev-api/` 的回归测试 |
| typecheck | `npm --prefix mobile-uni run typecheck`:通过 |
| H5/App build | `npm --prefix mobile-uni run build:h5` 与 `build:app`:均完成;仅有既有 Sass 弃用告警 |
| 390×844 文本/图片/视频 | 真实引用 `0/3`:员工首页和问页面可加载,但本地应用未启用知识问答,未生成真实 citation;未伪造图片/视频 fixture |
| 错误状态 | 详情页无引用参数正确显示不可查看状态;点击“返回问答”回到首页;问答业务错误明确显示应用未启用 |
| 截图目录 | `output/citation-source-viewer/20260731-local/`,含首页、问答错误和详情不可查看截图 |
| 遗留项 | 未完成真实文本高亮、图片缩放、视频定位;需配置本地 APP 绑定和受控附件后复核 |
| H5/App build | `npm --prefix mobile-uni run build:h5`:通过;本轮未重跑 App-Plus 构建 |
| 390×844 文本/图片/视频 | 本机合成已发布资产 `3/3`:文本详情及命中高亮、图片原图及放大、视频详情均按对应形式呈现 |
| 视频实播 | 合成 MP4 `readyState=4`、时长约 `10.03s`、尺寸 `320×176`,播放时间由 `0` 推进到约 `2.36s` |
| 错误状态 | 详情页无引用参数正确显示不可查看状态;点击“返回问答”回到首页 |
| 遗留项 | App-Plus/Android 真机、正式资源和正式账号验收仍未完成;本机合成素材不得作为生产样本 |
本次浏览器复核(2026-07-31,指定在职测试账号切换后):通过内置 Browser 完成退出旧会话、重新获取验证码、登录和进入员工端“问”页面;固定制度问题返回真实回答并展开 `3` 条引用。当前 3 条引用均为旧知识片段,DOM 中 `.citation-action` 与“查看出处”入口均为 `0`,因此没有可安全构造的 `detailRef`,未伪造详情 URL。已保存脱敏页面证据:`output/citation-source-viewer/20260731-local/question-citations-expanded.png`。本次验证结论为“引用展示通过,出处详情被定位数据缺失阻断”,不计入文本/图片/视频 `3/3` 详情门禁。
@@ -535,7 +535,7 @@ qdrant_points_unchanged
| 字段 | 实际值 |
|---|---|
| 状态 | 实现中 |
| commit | 工作区未提交,当前 HEAD `cafb836` |
| 构建源 | 阶段 4 实现已进入当前分支;2026-08-02 本轮未新增该阶段代码 |
| 计划分母 | `attachments_total=5`,`locators_before=15` |
| exact/coarse/ambiguous/failed | `exact=15`,`coarse=0`,`ambiguous=0`,`failed=0`;`locators_created=0` |
| 抽检 | 已核对本地 5 个 seed 附件及 15 条 locator;未覆盖计划要求的 PDF/PPT/图片/视频抽检样本 |
@@ -588,17 +588,17 @@ qdrant_points_unchanged
| 字段 | 实际值 |
|---|---|
| 状态 | 实现中 |
| commit | 工作区未提交,当前 HEAD `cafb836` |
| 后端测试 | 未运行:当前 PowerShell 未找到 `java`/`mvn` |
| 移动端测试 | Node `211/211` 通过;typecheck、H5/App build 通过 |
| 构建源 | 2026-08-02 本轮修复提交见 Git 历史;该提交不代表生产发布 |
| 后端测试 | `AihrKnowledgeResourceRangeTest`:`2/2` 通过 |
| 移动端测试 | Node `217/217`、typecheck、H5 build 通过;本轮未重跑 App-Plus 构建 |
| 越权矩阵 | 未完成真实后端矩阵;仅完成源码级治理约束复核 |
| 定位误差 | 未测量;无真实视频引用数据 |
| Range | 未测量;无带 `oss_id` 的本地授权视频 fixture |
| Range | 本机合成授权视频完整请求 `200`、Range 请求 `206`;未覆盖首段/中段/尾段/非法范围完整矩阵 |
| p50/p95 | 未测量 |
| 资源泄漏循环 | Node 单元覆盖 Blob URL 释放,未完成 20 次真实页面循环 |
| 敏感信息扫描 | 移动端截图/DOM 证据未包含手机号、验证码、令牌、票据或 OSS 原址;后端日志扫描未完成 |
| 证据目录 | `output/citation-source-viewer/20260731-local/` |
| 遗留项 | 后端运行时、正式/测试授权数据、Range 样本和性能基准均待补齐 |
| 遗留项 | 正反权限矩阵、完整 Range 矩阵、定位误差、性能基准、资源循环和生产/真机证据仍待补齐 |
---
@@ -662,7 +662,7 @@ Android 真机:
| 字段 | 实际值 |
|---|---|
| 状态 | 未开始 |
| release commit | 未发布;工作区未提交,当前 HEAD `cafb836` |
| release commit | 未发布;2026-08-02 本机修复提交不等于生产发布 |
| schema 版本/迁移结果 | 仅本地 Docker 数据库验证;未执行生产迁移 |
| 生产 JAR SHA-256 | 未生成/未部署 |
| H5 构建与远端哈希 | 本地 H5 构建完成;未生产发布、未计算远端哈希 |