46 lines
4.3 KiB
Markdown
46 lines
4.3 KiB
Markdown
# 2026-10-17 知识编辑与采集时间验收
|
||
|
||
PR #48 已真正合入 dev,head 与 merge 均已核对为最新 dev 祖先。本轮从该基线创建独立阶段分支,补齐此前仅通过共享函数测试的知识编辑页实际浏览器验收。
|
||
|
||
使用隔离 PostgreSQL/pgvector、默认生命周期 FastAPI、Vite 和真实浏览器。账号、来源、知识和查询全部是合成数据;没有运行 Embedding 或生成模型。初始化来源、两条知识、文本发布和一条检索记录属于独立 HTTP 准备,不算浏览器录入。
|
||
|
||
## 实际浏览器结果
|
||
|
||
| 操作 | 页面结果与独立核对 |
|
||
|---|---|
|
||
| 匿名打开知识管理,合成管理员登录 | 回跳知识管理页,读取两条真实保存的合成知识 |
|
||
| 编辑已有采集时间的知识 | 原 `2026-10-16T12:34:56.789123+08:00` 按当地时钟回填为 `12:34:56.789` |
|
||
| 只改标题并保存 | 页面显示成功并由 verified 变为 pending;API 确认版本递增、原微秒时间字符串完整保留、审核字段清空 |
|
||
| 打开历史并展开快照 | 页面显示新标题、pending、原微秒采集时间和版本;旧审核快照继续保留 |
|
||
| 编辑原采集时间为空的草稿正文 | 空表单保存成功,API 确认仍为 null,没有补写当前时间 |
|
||
| 明确修改当地采集时间 | 页面保存成功,`13:45:12.345` 存为 `2026-10-16T13:45:12.345000+08:00` |
|
||
| 清空已有采集时间 | 修正后保存成功,历史显示 null;再次打开编辑器仍为空,API 确认持久化 null |
|
||
|
||
最终修正版本中,只改标题保留微秒的历史:
|
||
|
||

|
||
|
||
清空时间后记录 null 的历史:
|
||
|
||

|
||
|
||
## 发现的缺陷与修正
|
||
|
||
原知识页面清空时间后省略 `collected_at`,服务端按 PATCH 语义保留旧值;页面却提示保存成功。明确传 null 后,又暴露出共享 PATCH 校验错误地把知识的可空时间按文档必填字段拒绝,返回 422。
|
||
|
||
现在知识编辑器在空输入时明确传 `collected_at: null`;后端允许清空知识采集时间,仍执行版本检查、审核失效和历史保存。文档的非空时间校验放到文档更新模型,文档传 null 继续返回 422,不产生修改或历史。未改时间仍复用原字符串保留微秒,明确改时仍按本地时钟转换。没有猜测或批量修订业务资料。
|
||
|
||
缺陷复现和最终修正分别使用独立的合成 Schema。修正后重新执行了上表全部编辑路径,没有把首次环境的成功结果代替最终版本复核。接口路径、字段和迁移不变;知识 PATCH 中省略时间与明确 null 的行为见 README。
|
||
|
||
## 独立 HTTP 与自动化验证
|
||
|
||
- 修改知识后,旧文本发布检索返回 409;旧检索记录和此前全部审核快照保持原值。
|
||
- 清空后核验通过请求返回 422,当前版本和历史不变;过期编辑返回 409,不能覆盖新值。补回真实时间并重新审核的恢复路径由后端回归覆盖。
|
||
- 文档采集时间传 null 返回 422,文档与历史均不变。
|
||
- `pytest -q backend/tests/test_catalog.py backend/tests/test_indexing.py backend/tests/test_exports.py`:**75 passed**。新增回归在修正前复现知识清空返回 422,修正后通过;同时覆盖审核前提、旧快照、过期版本与文档必填约束。
|
||
- `npm run test:datetime`:**6 passed**;`npm run build`(含类型检查)、`ruff check backend`、`ruff format --check backend` 和 `git diff --check`:通过。本轮没有重跑此前 PR #48 的全量 312 项测试,不沿用为本轮结果。
|
||
|
||
本轮完成知识编辑页的实际修订验收。原生删除确认、Docker、生产 HTTPS、多浏览器和浏览器改密仍按既有待办处理;没有重试原生确认失败方法或代填新密码。正式领域评测仍需要已核验资料和独立问题集,生成模型实际接入继续延期。
|
||
|
||
复核时在隔离测试库准备一条已核验、带微秒时间的知识和一条无时间草稿,依次执行上表操作,再读取知识详情、历史和旧检索记录比较。原始 HTTP 结果、环境、密码、日志和数据库仅保存在本机 Git 元数据目录;截图只有合成数据。结束后关闭测试服务,删除两轮隔离 Schema 并独立核对。
|