Files
border-red-post-nalati/docs/BROWSER_ACCEPTANCE.md
T

7.4 KiB
Raw Blame History

2026-10-16 浏览器与后端联调验收

本轮在真实浏览器中访问 Vite 页面,经同源 /api 代理连接默认生命周期 FastAPI 和隔离 PostgreSQL 16 + pgvector,验证合成资料的录入、审核、发布、检索以及 Cookie/CSRF/角色权限。数据仅用于功能验收,不代表那拉提文旅事实、领域质量或生产性能。

代码基线与范围

  • PR #17 的上下文阶段经真正 merged 的 替代 PR #23 合入 dev。重放产生新 SHA,不能只看旧 AGit PR 是否仍打开。本轮核对替代 head/merge 均为最新 dev 的祖先;完整 backend 文件树、RAG 调用类型与专用契约文档和原实现一致,前端依赖 JSON 相同、锁文件对应版本与完整性值相同,通用说明保留集成后的更新。
  • 从最新 dev 创建 test/backend-browser-acceptance,没有叠加待审功能;实际生成模型仍延期,没有调用生成模型或配置其凭据。
  • 使用真实固定 BGE small 中文 Embedding(revision 7999e1d3359715c523056ef9478215996d62a620、512 维)及现有离线缓存;不是用坐标 fixture 生成本轮页面上的检索结果。自动化回归中的坐标 fixture 仍只用于协议/数据库边界测试。
  • 浏览器、SQL 实例、测试账号和原始检查记录属于本机隔离环境;仓库仅保留步骤、结果摘要及明确含有合成资料的截图,不提交运行环境、日志、凭据或个人数据。

真实浏览器操作与结果

验收路径 观察结果
匿名打开受保护页面 跳转登录页,保留回跳路径
管理员登录后刷新页面 Cookie 会话恢复,管理员身份和受保护列表正常读取
来源登记 经浏览器提交来源、网址和合成备注,成功后列表显示 1 条
知识录入 保存为 pending,不能直接进入检索
缺失采集时间时审核 后端拒绝通过,页面如实显示须补全来源与真实采集时间
完整元数据知识审核 填入明确采集时间、来源、合成核验人和说明后审核保存成功
文本快照构建与发布 仅 1 条已核验知识进入 1 个 chunk;另一待审条目被排除;ready 后显式发布、代数递增
真实向量构建与发布 本地固定模型编码后保存向量,ready 后显式发布;页面显示真实向量版本
管理员 RRF 查询 关键词与向量各命中 1 条同一合成依据,页面展示原文与来源链接,说明尚未生成模型答案
文档登记 选择已登记来源并填入采集时间,创建成功;来源关联、正文和第一页列表可读取
管理员用户列表 数据来自服务端;只有一页时前后翻页按钮正确禁用。本轮未验证多页/大规模表现
退出登录 返回登录页;再次访问受保护页面仍跳转登录
普通用户注册及登录 服务端返回 user,界面不显示任何管理菜单
普通用户直接访问管理路由及登录回跳 /admin 与 /indexes 均跳转个人中心的 forbidden 状态,没有获得管理页面
普通用户查询 重新发布当前资料快照后,普通用户仍能收到真实 RRF 原文证据,管理入口保持隐藏

管理员检索画面:

管理员真实浏览器检索

普通用户检索与菜单:

普通用户检索

普通用户访问管理路由后的角色状态:

普通用户角色拦截

本轮修正

  1. 知识录入原表单没有采集时间字段,导致从页面新建的知识无法满足后端审核前置条件。增加可选的采集时间输入,转换为带时区的 ISO 字符串提交;未填写仍可登记为待审,审核通过的后端约束继续有效,不自动猜测采集时间。
  2. 主工作台缺少审核与文档管理入口。增加仅管理员可见的导航按钮,沿用已有路由和服务端授权,普通用户菜单验收通过。
  3. 首页仍显示“尚未接入检索”,来源页仍称文档工作台待接入。按实际状态改为已接入检索证据、生成式回答未启用及已有文档管理入口;README 不再把尚未确定的生成模型供应商写成已选择。

API 与数据库交叉核对

以下为独立 HTTP 检查,和上表的浏览器操作分别记录,不把 API 检查冒充浏览器动作:

  • 匿名读取管理资源返回 401;普通用户读取知识、来源、文档、文本/向量索引、用户、检索历史和 RAG 准备历史八类管理资源均返回 403。
  • 管理员写入缺少 CSRF 返回 403;使用正确 CSRF 但 Origin 不在允许列表仍返回 403。浏览器真实写入成功,说明正常代理调用携带了会话和 CSRF。
  • 真实登录响应含 HttpOnly 与 SameSite=Lax;本次仅为隔离 HTTP test 环境关闭 Secure,生产默认配置未改。本轮没有 HTTPS/Secure Cookie 浏览器验收结论。
  • 退出后 /api/auth/me 返回 401。浏览器刷新恢复及退出跳转与服务端会话状态一致。
  • 文档等目录写入后,旧向量查询明确返回 409;API 重新构建/发布后恢复查询,仍只命中那条已核验知识。这是现有保守失效策略,不自动使用旧快照。
  • 持久化记录为 1 条来源、2 条知识(其中 1 条未审核)、1 条关联文档。真实模型的空间、版本和归一化契约沿用 VECTOR_API.md。
  • 最新检索记录可准备 RAG 上下文,状态 prepared 且 model_called=false;没有以准备结果冒充生成式回答。

复现路径

  1. 使用单独测试数据库或隔离 Schema,启用 public 的 vector 扩展,执行 alembic upgrade head。不要把合成验收资料写入业务库。
  2. 依 AUTH_API.md 初始化本机测试管理员;真实密码、环境文件与日志不入库。前后端 Origin、Cookie 的开发设置按该文档配置。
  3. 依 VECTOR_API.md 配置固定本地模型的离线缓存,启动默认生命周期后端及 Vite。
  4. 从浏览器执行上表步骤,先验证缺失元数据被拒绝,再录入有明确采集时间的合成资料并审核、发布文本和向量、查询证据。
  5. 使用独立普通用户核对菜单、直接路由拦截与退出;同时用 HTTP 核对服务端授权、CSRF 和失效行为。
  6. 保存验收摘要与合成截图后,关闭本次测试服务并清理隔离 Schema;本次运行环境与原始记录仅保存在 Git 元数据目录。

本轮回归验证

  • pytest -q backend/tests:224 passed, 1 skipped;使用隔离 PostgreSQL,skip 为必须显式启用的真实 Embedding 专项。
  • ruff check backend、ruff format --check backend:通过。
  • 前端 npm run build(含 vue-tsc -b):通过。
  • 本轮真实固定 BGE small 的运行证据来自上述浏览器/HTTP 验收,和常规自动化的坐标 fixture 分开记录;没有生成模型调用。

尚未完成的验收

本轮不替代 Docker 容器验收、多浏览器/设备回归、生产 HTTPS、浏览器改密和历史知识元数据修订页面。既有后端自动化已覆盖改密、撤销和重启持久化,本轮未将它们称作浏览器操作。生成模型、已核验领域资料/独立问题集和领域质量实验继续保留后续范围。