docs(test): record KnowledgeFS workflow v2 coverage

Document the executed Workflow Knowledge Retrieval v2 matrix, Linear issue mapping, fix verification, remaining environment blockers, and reusable DSL fixtures.
This commit is contained in:
Jyong 2026-08-11 11:51:08 -04:00
parent c8780dcb7c
commit a220bf394f
5 changed files with 769 additions and 350 deletions

View File

@ -1,5 +1,7 @@
# KnowledgeFS 详细功能测试用例
Workflow `knowledge-retrieval-v2` 的 39 个已执行场景、15 个环境阻塞项、3 个规格/实现阻塞项及完整证据见:[Workflow Knowledge Retrieval v2 / KnowledgeFS 功能补测报告](./knowledge-retrieval-v2-functional-test-report.md)。
## 使用说明
### 通用前置条件
@ -29,317 +31,336 @@
## A. 入口、路由与导航
| ID | P | 测试场景/步骤 | 预期结果 | 本轮结果 |
|---|---|---|---|---|
| TC-NAV-001 | P0 | 直接访问 `/datasets?view=new` | 进入新版 Knowledge 列表New 按钮为 pressed | PASS |
| TC-NAV-002 | P0 | 在列表点击“旧版”,再切回“新版” | 路由、选中状态和列表内容同步;新版恢复 `view=new` | PASS |
| TC-NAV-003 | P0 | 在概览/Sources/Documents/Retrieval/Quality/Settings 刷新 | 深链可独立恢复,不回到列表或旧版 | PASS |
| TC-NAV-004 | P0 | 打开合法 space ID 的深链 | 左侧导航、名称、模式和页面内容加载正常 | PASS |
| TC-NAV-005 | P0 | 打开不存在的 UUID 空间 | 显示本地化的不存在/无权页,不泄露后端信息 | FAIL见 KF-BUG-004 |
| TC-NAV-006 | P1 | 点击“欢迎使用新版知识库”,关闭后再进入 | 引导弹层可关闭,不阻断页面操作 | PASS |
| TC-NAV-007 | P1 | 左侧导航折叠/展开后逐项访问 | 每个链接路由正确,焦点与选中项一致 | PARTIAL路由已验证 |
| TC-NAV-008 | P1 | 390×844 视口访问所有二级导航 | 所有页签有明确滚动/折叠可达性,不遮挡内容 | FAIL-CANDIDATE见 KF-BUG-012 |
| TC-NAV-009 | P1 | 使用 Tab/Shift+Tab/Enter/Escape 访问页签、菜单、抽屉和对话框 | 键盘可完成主流程,焦点不丢失 | NOT-RUN |
| TC-NAV-010 | P1 | 用无 new-rag feature flag 的 workspace 访问 | 不显示新版入口或给出明确说明 | NOT-RUN |
| ID | P | 测试场景/步骤 | 预期结果 | 本轮结果 |
| ---------- | --- | ------------------------------------------------------------ | ------------------------------------------------- | ----------------------------- |
| TC-NAV-001 | P0 | 直接访问 `/datasets?view=new` | 进入新版 Knowledge 列表New 按钮为 pressed | PASS |
| TC-NAV-002 | P0 | 在列表点击“旧版”,再切回“新版” | 路由、选中状态和列表内容同步;新版恢复 `view=new` | PASS |
| TC-NAV-003 | P0 | 在概览/Sources/Documents/Retrieval/Quality/Settings 刷新 | 深链可独立恢复,不回到列表或旧版 | PASS |
| TC-NAV-004 | P0 | 打开合法 space ID 的深链 | 左侧导航、名称、模式和页面内容加载正常 | PASS |
| TC-NAV-005 | P0 | 打开不存在的 UUID 空间 | 显示本地化的不存在/无权页,不泄露后端信息 | FAIL见 KF-BUG-004 |
| TC-NAV-006 | P1 | 点击“欢迎使用新版知识库”,关闭后再进入 | 引导弹层可关闭,不阻断页面操作 | PASS |
| TC-NAV-007 | P1 | 左侧导航折叠/展开后逐项访问 | 每个链接路由正确,焦点与选中项一致 | PARTIAL路由已验证 |
| TC-NAV-008 | P1 | 390×844 视口访问所有二级导航 | 所有页签有明确滚动/折叠可达性,不遮挡内容 | FAIL-CANDIDATE见 KF-BUG-012 |
| TC-NAV-009 | P1 | 使用 Tab/Shift+Tab/Enter/Escape 访问页签、菜单、抽屉和对话框 | 键盘可完成主流程,焦点不丢失 | NOT-RUN |
| TC-NAV-010 | P1 | 用无 new-rag feature flag 的 workspace 访问 | 不显示新版入口或给出明确说明 | NOT-RUN |
## B. 列表、搜索和筛选
| ID | P | 测试场景/步骤 | 预期结果 | 本轮结果 |
|---|---|---|---|---|
| TC-LI-001 | P0 | 加载有数据的新版列表 | 每张卡显示名称、描述、文档/应用计数、更新时间 | PASS |
| TC-LI-002 | P0 | 输入名称子串 `ces` | 只显示 `ceshi` | PASS |
| TC-LI-003 | P0 | 输入大写 `CESHI` | 搜索大小写不敏感,显示 `ceshi` | PASS |
| TC-LI-004 | P1 | 输入不存在的唯一字符串 | 显示“无搜索结果”及清除条件入口 | FAIL见 KF-BUG-011 |
| TC-LI-005 | P1 | 清空搜索框 | 恢复全部列表 | PASS |
| TC-LI-006 | P1 | 打开“创建者”下拉 | 显示成员搜索、列表和重置入口 | PASS |
| TC-LI-007 | P1 | 搜索不存在的创建者 | 显示“没有找到创建者” | PASS |
| TC-LI-008 | P1 | 选中当前创建者 | 条件显示“创建者: 1”结果与成员匹配 | PASS |
| TC-LI-009 | P1 | 重置创建者筛选 | 标签和列表恢复 | PASS |
| TC-LI-010 | P1 | 创建新空间后回列表 | 新空间出现在列表前部,描述和计数正确 | PASS |
| TC-LI-011 | P1 | 点击“标签” | 如后端未提供则给出明确不可用提示 | PASS提示 KnowledgeFS 待提供 metadata |
| TC-LI-012 | P1 | 点击“外部知识库 API” | 打开管理抽屉,无凭据泄露 | PASS |
| TC-LI-013 | P1 | 点击“服务 API” | 显示 endpoint 和 key 管理入口 | PASS |
| TC-LI-014 | P1 | 超过一页数据时搜索只在末页出现的名称 | 搜索全数据集,不只过滤已加载卡片 | STATIC-RISK数据不足未实证 |
| TC-LI-015 | P2 | 连续快速改变搜索和创建者条件 | 旧请求不覆盖新请求,无闪回 | NOT-RUN |
| ID | P | 测试场景/步骤 | 预期结果 | 本轮结果 |
| --------- | --- | ------------------------------------ | --------------------------------------------- | -------------------------------------- |
| TC-LI-001 | P0 | 加载有数据的新版列表 | 每张卡显示名称、描述、文档/应用计数、更新时间 | PASS |
| TC-LI-002 | P0 | 输入名称子串 `ces` | 只显示 `ceshi` | PASS |
| TC-LI-003 | P0 | 输入大写 `CESHI` | 搜索大小写不敏感,显示 `ceshi` | PASS |
| TC-LI-004 | P1 | 输入不存在的唯一字符串 | 显示“无搜索结果”及清除条件入口 | FAIL见 KF-BUG-011 |
| TC-LI-005 | P1 | 清空搜索框 | 恢复全部列表 | PASS |
| TC-LI-006 | P1 | 打开“创建者”下拉 | 显示成员搜索、列表和重置入口 | PASS |
| TC-LI-007 | P1 | 搜索不存在的创建者 | 显示“没有找到创建者” | PASS |
| TC-LI-008 | P1 | 选中当前创建者 | 条件显示“创建者: 1”结果与成员匹配 | PASS |
| TC-LI-009 | P1 | 重置创建者筛选 | 标签和列表恢复 | PASS |
| TC-LI-010 | P1 | 创建新空间后回列表 | 新空间出现在列表前部,描述和计数正确 | PASS |
| TC-LI-011 | P1 | 点击“标签” | 如后端未提供则给出明确不可用提示 | PASS提示 KnowledgeFS 待提供 metadata |
| TC-LI-012 | P1 | 点击“外部知识库 API” | 打开管理抽屉,无凭据泄露 | PASS |
| TC-LI-013 | P1 | 点击“服务 API” | 显示 endpoint 和 key 管理入口 | PASS |
| TC-LI-014 | P1 | 超过一页数据时搜索只在末页出现的名称 | 搜索全数据集,不只过滤已加载卡片 | STATIC-RISK数据不足未实证 |
| TC-LI-015 | P2 | 连续快速改变搜索和创建者条件 | 旧请求不覆盖新请求,无闪回 | NOT-RUN |
## C. 创建知识库
| ID | P | 测试场景/输入 | 预期结果 | 本轮结果 |
|---|---|---|---|---|
| TC-CR-001 | P0 | 点击“创建” | 打开创建对话框,默认从空白开始/only_me | PASS |
| TC-CR-002 | P0 | 名称留空 | 创建按钮禁用或显示必填错误 | PASS |
| TC-CR-003 | P0 | 名称仅空格 | 视为空值,禁止创建 | PASS |
| TC-CR-004 | P0 | 名称 1 字 | 创建成功 | NOT-RUN |
| TC-CR-005 | P0 | 名称精确 40 字 | 允许提交并保存成功 | PASS在 QA Settings 验证同约束 |
| TC-CR-006 | P0 | 名称 41 字 | 字段级拦截,不请求后端 | FAIL见 KF-BUG-002 |
| TC-CR-007 | P0 | 描述精确 2000 字 | 允许保存 | PASS在 QA Settings 实测 |
| TC-CR-008 | P0 | 描述 2001 字 | 字段级拦截,不请求后端 | FAILSettings 同约束见 KF-BUG-003 |
| TC-CR-009 | P0 | 从空白开始 + 合法名称 | 只创建 1 个空间202/provisioning 后进入 active Sources | PASS |
| TC-CR-010 | P0 | 在加载中连续双击“创建知识库” | 幂等,只创建 1 个空间 | NOT-RUN |
| TC-CR-011 | P0 | 提交后制造超时,再点重试 | 通过幂等 key 收敛到同一 space | NOT-RUN |
| TC-CR-012 | P1 | 可见权限选择 only_me | 只有 owner 可见,创建成功 | PASS |
| TC-CR-013 | P1 | 可见权限选择 all_team_members | 所有有效成员可以 viewer 身份查看 | NOT-RUN缺多用户 |
| TC-CR-014 | P1 | 选择 partial_members 但不选成员 | 显示“至少一名成员”并禁止保存 | PASSSettings 实测 |
| TC-CR-015 | P1 | 连接数据源方式创建 | 创建空间后进入 provider 配置,取消不留垃圾数据 | NOT-RUN |
| TC-CR-016 | P1 | 上传文件方式创建 | 创建与 staged upload claim 原子收敛,不重复文档 | ENV-BLOCKEDDocuments 入口已证实 staging 服务异常,本轮未再创建空间 |
| TC-CR-017 | P1 | 模型配置 pending/fail/retry | 显示可解释状态和重试,不重复创建 | NOT-RUN |
| TC-CR-018 | P1 | 同 slug 不同创建意图/幂等载荷 | 返回可理解 409/4xx不出现 500 | STATIC-RISK |
| ID | P | 测试场景/输入 | 预期结果 | 本轮结果 |
| --------- | --- | ------------------------------- | ------------------------------------------------------- | -------------------------------------------------------------------- |
| TC-CR-001 | P0 | 点击“创建” | 打开创建对话框,默认从空白开始/only_me | PASS |
| TC-CR-002 | P0 | 名称留空 | 创建按钮禁用或显示必填错误 | PASS |
| TC-CR-003 | P0 | 名称仅空格 | 视为空值,禁止创建 | PASS |
| TC-CR-004 | P0 | 名称 1 字 | 创建成功 | NOT-RUN |
| TC-CR-005 | P0 | 名称精确 40 字 | 允许提交并保存成功 | PASS在 QA Settings 验证同约束 |
| TC-CR-006 | P0 | 名称 41 字 | 字段级拦截,不请求后端 | FAIL见 KF-BUG-002 |
| TC-CR-007 | P0 | 描述精确 2000 字 | 允许保存 | PASS在 QA Settings 实测 |
| TC-CR-008 | P0 | 描述 2001 字 | 字段级拦截,不请求后端 | FAILSettings 同约束见 KF-BUG-003 |
| TC-CR-009 | P0 | 从空白开始 + 合法名称 | 只创建 1 个空间202/provisioning 后进入 active Sources | PASS |
| TC-CR-010 | P0 | 在加载中连续双击“创建知识库” | 幂等,只创建 1 个空间 | NOT-RUN |
| TC-CR-011 | P0 | 提交后制造超时,再点重试 | 通过幂等 key 收敛到同一 space | NOT-RUN |
| TC-CR-012 | P1 | 可见权限选择 only_me | 只有 owner 可见,创建成功 | PASS |
| TC-CR-013 | P1 | 可见权限选择 all_team_members | 所有有效成员可以 viewer 身份查看 | NOT-RUN缺多用户 |
| TC-CR-014 | P1 | 选择 partial_members 但不选成员 | 显示“至少一名成员”并禁止保存 | PASSSettings 实测 |
| TC-CR-015 | P1 | 连接数据源方式创建 | 创建空间后进入 provider 配置,取消不留垃圾数据 | NOT-RUN |
| TC-CR-016 | P1 | 上传文件方式创建 | 创建与 staged upload claim 原子收敛,不重复文档 | ENV-BLOCKEDDocuments 入口已证实 staging 服务异常,本轮未再创建空间 |
| TC-CR-017 | P1 | 模型配置 pending/fail/retry | 显示可解释状态和重试,不重复创建 | NOT-RUN |
| TC-CR-018 | P1 | 同 slug 不同创建意图/幂等载荷 | 返回可理解 409/4xx不出现 500 | STATIC-RISK |
## D. 数据源与网站抓取
| ID | P | 测试场景/输入 | 预期结果 | 本轮结果 |
|---|---|---|---|---|
| TC-SO-001 | P0 | 空间打开 Sources | 显示空状态、常用 provider 和“添加数据源” | PASS |
| TC-SO-002 | P0 | 打开添加数据源 | 显示 Website/Online Documents/Online Drive 三类 | PASS |
| TC-SO-003 | P0 | 检查 provider 清单 | Firecrawl/Jina/WaterCrawl、Notion/Google Docs/Confluence、Drive/OneDrive/S3 入口正确 | PASS |
| TC-SO-004 | P0 | Website 根 URL 输入 `not-a-url` | 提示必须为 http(s),抓取按钮禁用 | PASS |
| TC-SO-005 | P0 | Website 根 URL 输入 `https://example.com` | URL 校验通过,名称有效后可抓取 | PASS |
| TC-SO-006 | P0 | 最大页数输入 0 | 提示最小为 1禁止抓取 | FAIL可见 0/实际 1 |
| TC-SO-007 | P0 | 最大页数输入 1 | 允许抓取 1 页 | PASS |
| TC-SO-008 | P0 | 最大页数输入 1.5 | 提示只能是整数,禁止抓取 | FAIL可见 1.5/实际 1 |
| TC-SO-009 | P0 | 最大页数输入 200 | 允许 | PASS |
| TC-SO-010 | P0 | 最大页数输入 1001 | 提示最大 200禁止抓取 | FAIL可见 1001/实际 200 |
| TC-SO-011 | P0 | Firecrawl 连接状态 | 显示已连接时才允许预览 | PASS |
| TC-SO-012 | P0 | Firecrawl 对 example.com 抓取预览 | 在可接受时间内返回页列表或明确失败 | ENV36+ 秒仍 0 页 |
| TC-SO-013 | P0 | 抓取进行中点击 Stop | 进入 stopping最终 stopped表单可再操作 | PASS |
| TC-SO-014 | P0 | stopped 后点 Retry | 仅新建 1 个后续工作流,进度重置 | NOT-RUN只检查入口 |
| TC-SO-015 | P0 | 抓取返回页面后全选/反选/单选 | 选中数量、最多 200 和添加按钮状态正确 | ENV |
| TC-SO-016 | P0 | 选择页面后“添加数据源” | 创建 source文档进入解析/索引,不留临时 workflow | ENV |
| TC-SO-017 | P1 | 有草稿时点击取消/离开 | 弹出“放弃数据源更改”确认 | PASS |
| TC-SO-018 | P1 | 在确认对话框点“取消” | 草稿保留,返回配置页 | PASS |
| TC-SO-019 | P1 | 在确认对话框点“放弃草稿” | 临时配置/预览被清理,列表无 source | PENDING-CONFIRM |
| TC-SO-020 | P1 | 选 Jina Reader | 未安装时明确显示安装入口 | PASS环境显示未安装 |
| TC-SO-021 | P1 | 选 WaterCrawl 并验证凭据 | 未安装/未配置时给出可操作的状态 | NOT-RUN |
| TC-SO-022 | P1 | 同时提供 connectionId 和 credentials | 请求被 422 拒绝,不创建 source | NOT-RUN |
| TC-SO-023 | P1 | Source PATCH 为空 payload | 拒绝无效操作,无 revision 变化 | NOT-RUN |
| TC-SO-024 | P1 | sync policy custom interval = 3599/3600/2592000/2592001 | 只允许 36002592000 秒 | NOT-RUN |
| TC-SO-025 | P1 | manual mode 同时提交 customInterval | 拒绝矛盾组合,不静默保留无效值 | STATIC-RISK |
| TC-SO-026 | P1 | stale expectedRevision/sourceVersion 保存数据源 | 返回 409UI 提示刷新后重试 | NOT-RUN |
| TC-SO-027 | P1 | 删除 source 选 `documents=keep` | source 删除,文档和检索仍可用 | PENDING-CONFIRM |
| TC-SO-028 | P1 | 删除 source 选 `documents=cascade` | source 和所属文档按 durable job 完成清理 | PENDING-CONFIRM |
| ID | P | 测试场景/输入 | 预期结果 | 本轮结果 |
| --------- | --- | ------------------------------------------------------- | ------------------------------------------------------------------------------------ | ------------------------ |
| TC-SO-001 | P0 | 空间打开 Sources | 显示空状态、常用 provider 和“添加数据源” | PASS |
| TC-SO-002 | P0 | 打开添加数据源 | 显示 Website/Online Documents/Online Drive 三类 | PASS |
| TC-SO-003 | P0 | 检查 provider 清单 | Firecrawl/Jina/WaterCrawl、Notion/Google Docs/Confluence、Drive/OneDrive/S3 入口正确 | PASS |
| TC-SO-004 | P0 | Website 根 URL 输入 `not-a-url` | 提示必须为 http(s),抓取按钮禁用 | PASS |
| TC-SO-005 | P0 | Website 根 URL 输入 `https://example.com` | URL 校验通过,名称有效后可抓取 | PASS |
| TC-SO-006 | P0 | 最大页数输入 0 | 提示最小为 1禁止抓取 | FAIL可见 0/实际 1 |
| TC-SO-007 | P0 | 最大页数输入 1 | 允许抓取 1 页 | PASS |
| TC-SO-008 | P0 | 最大页数输入 1.5 | 提示只能是整数,禁止抓取 | FAIL可见 1.5/实际 1 |
| TC-SO-009 | P0 | 最大页数输入 200 | 允许 | PASS |
| TC-SO-010 | P0 | 最大页数输入 1001 | 提示最大 200禁止抓取 | FAIL可见 1001/实际 200 |
| TC-SO-011 | P0 | Firecrawl 连接状态 | 显示已连接时才允许预览 | PASS |
| TC-SO-012 | P0 | Firecrawl 对 example.com 抓取预览 | 在可接受时间内返回页列表或明确失败 | ENV36+ 秒仍 0 页 |
| TC-SO-013 | P0 | 抓取进行中点击 Stop | 进入 stopping最终 stopped表单可再操作 | PASS |
| TC-SO-014 | P0 | stopped 后点 Retry | 仅新建 1 个后续工作流,进度重置 | NOT-RUN只检查入口 |
| TC-SO-015 | P0 | 抓取返回页面后全选/反选/单选 | 选中数量、最多 200 和添加按钮状态正确 | ENV |
| TC-SO-016 | P0 | 选择页面后“添加数据源” | 创建 source文档进入解析/索引,不留临时 workflow | ENV |
| TC-SO-017 | P1 | 有草稿时点击取消/离开 | 弹出“放弃数据源更改”确认 | PASS |
| TC-SO-018 | P1 | 在确认对话框点“取消” | 草稿保留,返回配置页 | PASS |
| TC-SO-019 | P1 | 在确认对话框点“放弃草稿” | 临时配置/预览被清理,列表无 source | PENDING-CONFIRM |
| TC-SO-020 | P1 | 选 Jina Reader | 未安装时明确显示安装入口 | PASS环境显示未安装 |
| TC-SO-021 | P1 | 选 WaterCrawl 并验证凭据 | 未安装/未配置时给出可操作的状态 | NOT-RUN |
| TC-SO-022 | P1 | 同时提供 connectionId 和 credentials | 请求被 422 拒绝,不创建 source | NOT-RUN |
| TC-SO-023 | P1 | Source PATCH 为空 payload | 拒绝无效操作,无 revision 变化 | NOT-RUN |
| TC-SO-024 | P1 | sync policy custom interval = 3599/3600/2592000/2592001 | 只允许 36002592000 秒 | NOT-RUN |
| TC-SO-025 | P1 | manual mode 同时提交 customInterval | 拒绝矛盾组合,不静默保留无效值 | STATIC-RISK |
| TC-SO-026 | P1 | stale expectedRevision/sourceVersion 保存数据源 | 返回 409UI 提示刷新后重试 | NOT-RUN |
| TC-SO-027 | P1 | 删除 source 选 `documents=keep` | source 删除,文档和检索仍可用 | PENDING-CONFIRM |
| TC-SO-028 | P1 | 删除 source 选 `documents=cascade` | source 和所属文档按 durable job 完成清理 | PENDING-CONFIRM |
## E. 文档上传、列表与任务
| ID | P | 测试场景/输入 | 预期结果 | 本轮结果 |
|---|---|---|---|---|
| TC-DO-001 | P0 | 空知识库打开 Documents | 显示“暂无文档”和上传入口 | PASS |
| TC-DO-002 | P0 | 点击“添加文档” | 打开上传表单,显示支持格式和 15 MB 限制 | PASS |
| TC-DO-003 | P0 | 上传 TXT/MD/CSV/JSONL/HTML/PDF/DOCX/XLSX 小文件 | staged upload 成功claim 一次,文档进入 processing→ready | FAIL3 个合法 TXT/MD 均显示 `Internal Server Error`0 文档 |
| TC-DO-004 | P0 | 上传 Unicode 文件名和中文内容 | 文件名、内容、分块和下载名不乱码 | FAIL-BLOCKED中文文件名本地显示正常但 staging 500无法验证解析 |
| TC-DO-005 | P0 | 上传空文件 | 返回 422UI 明确说明空文件,无空文档 | FAIL0 B 被计为有效并启用提交,后端 422 仅显示英文通用错误 |
| TC-DO-006 | P0 | 上传不支持 `.exe` | 客户端或服务端拒绝,无 staged upload 残留 | PASS本地显示“不支持或无效的文件类型”0/1 有效且提交禁用 |
| TC-DO-007 | P0 | 上传精确 15 MiB 文件 | 根据合同允许边界值,不会 413 | PARTIAL/FAIL前端正确接收但 43+ 秒停留“正在上传…”;取消后无文档 |
| TC-DO-008 | P0 | 上传 15 MiB + 1 byte | 返回 413UI 提示超限,无计费/索引任务 | PASS本地标记“超过 15 MB 限制”0/1 有效且未 staging |
| TC-DO-009 | P0 | 同时上传合法、空、超限和不支持文件 | 每个文件独立结果,部分失败不丢成功项,可重试失败项 | PARTIAL/FAIL合法文件逐个报错并另有汇总错误未能进入 claim 部分成功 |
| TC-DO-010 | P0 | 对同一 staged upload 网络重试 | 同 upload ID 仅被 claim 一次,无重复文档 | ENV-BLOCKEDstaging 未成功返回 upload ID |
| TC-DO-011 | P0 | claim 前 abort staged upload | 上传被废弃,不可再 claim | PARTIAL取消 15 MiB in-flight 上传后表单关闭且 0 文档,但请求随后仍弹失败提示 |
| TC-DO-012 | P0 | claim 后再 abort | 拒绝废弃,已创建文档状态不被破坏 | ENV-BLOCKED无可 claim 的 upload ID |
| TC-DO-013 | P0 | 不同用户或不同 space 试图 claim upload | 统一返回无权/不存在,不能跨用户移动文件 | NOT-RUN |
| TC-DO-014 | P1 | 上传同内容不同文件名 | 产品按规则创建两个 logical document 或明确去重,不静默丢失 | ENV-BLOCKED两个文件均 staging 500未创建 logical document |
| TC-DO-015 | P0 | 现有文档列表加载 | 显示名称、来源、状态、修订、更新时间 | PASS7 条 |
| TC-DO-016 | P0 | 状态筛选 Ready | 只显示 ready 文档 | PASS4 条 |
| TC-DO-017 | P0 | 状态筛选 Failed | 只显示 failed 文档 | PASS3 条 |
| TC-DO-018 | P1 | 文档名大小写不敏感搜索 | 返回匹配项,清空后恢复 | PASS |
| TC-DO-019 | P1 | 搜索无匹配 | 显示明确无结果空状态 | PASS |
| TC-DO-020 | P0 | 打开 Tasks 抽屉 | 显示需关注/失败任务、原因和可用操作 | PASS5 条失败/中断 |
| TC-DO-021 | P0 | 对失败任务点 Retry | 只创建一个 retry attempt状态可跟踪 | PENDING-CONFIRM不重试既有业务文档 |
| TC-DO-022 | P1 | 对进行中任务 Cancel | 任务进入 canceling/canceled无半索引残留 | PENDING-CONFIRM |
| TC-DO-023 | P1 | 任务 SSE 断网再连 | 续接或 polling 收敛,不倒退、不重复任务 | NOT-RUN |
| TC-DO-024 | P1 | 打开 Metadata schema 对话框 | 显示现有 schema能力未开放时按钮禁用且有说明 | PASSAdd Metadata 禁用 |
| TC-DO-025 | P1 | 勾选一个文档 | 显示批量操作条和正确选中计数 | PASS |
| TC-DO-026 | P1 | 选中文档后查看 Reindex/Download/Delete 状态 | 按权限和实现能力准确启用/禁用 | PASSReindex 可用Download/Delete 禁用 |
| TC-DO-027 | P0 | 批量 Reindex 选择 1/1000/1001 文档 | 只允许 11000单一 durable job不重复 | PENDING-CONFIRM |
| TC-DO-028 | P0 | Reindex payload 同时包含 `all=true` 和 documentIds | 返回 422不运行任务 | NOT-RUN |
| TC-DO-029 | P0 | 批量删除含存在/不存在 ID | 事件结果可追踪,幂等重放不多删 | PENDING-CONFIRM |
| TC-DO-030 | P1 | 行菜单打开 | 根据状态显示 rename/reindex/disable/archive/download/delete | PASS |
| TC-DO-031 | P1 | Rename 留空 | 保存禁用或字段必填 | PASS |
| TC-DO-032 | P1 | Rename 输入 304 字 | 按后端合同限制,超限时前端拦截 | FAIL-CANDIDATE保存仍可用未提交 |
| TC-DO-033 | P1 | Ready/Failed/Processing 文档的禁用、归档、下载按钮 | 按状态机正确启用,禁用项有解释 | PARTIAL已检查当前状态 |
| TC-DO-034 | P1 | 两标签页并发 metadata PATCH使用 stale rowVersion | 第二个返回 409UI 刷新后可重试 | NOT-RUN |
| TC-DO-035 | P0 | 删除文档时重复使用同 Idempotency-Key/不同 payload | 同 payload 重放同结果,不同 payload 返回冲突 | PENDING-CONFIRM |
| ID | P | 测试场景/输入 | 预期结果 | 本轮结果 |
| --------- | --- | -------------------------------------------------- | ----------------------------------------------------------- | ------------------------------------------------------------------------------ |
| TC-DO-001 | P0 | 空知识库打开 Documents | 显示“暂无文档”和上传入口 | PASS |
| TC-DO-002 | P0 | 点击“添加文档” | 打开上传表单,显示支持格式和 15 MB 限制 | PASS |
| TC-DO-003 | P0 | 上传 TXT/MD/CSV/JSONL/HTML/PDF/DOCX/XLSX 小文件 | staged upload 成功claim 一次,文档进入 processing→ready | FAIL3 个合法 TXT/MD 均显示 `Internal Server Error`0 文档 |
| TC-DO-004 | P0 | 上传 Unicode 文件名和中文内容 | 文件名、内容、分块和下载名不乱码 | FAIL-BLOCKED中文文件名本地显示正常但 staging 500无法验证解析 |
| TC-DO-005 | P0 | 上传空文件 | 返回 422UI 明确说明空文件,无空文档 | FAIL0 B 被计为有效并启用提交,后端 422 仅显示英文通用错误 |
| TC-DO-006 | P0 | 上传不支持 `.exe` | 客户端或服务端拒绝,无 staged upload 残留 | PASS本地显示“不支持或无效的文件类型”0/1 有效且提交禁用 |
| TC-DO-007 | P0 | 上传精确 15 MiB 文件 | 根据合同允许边界值,不会 413 | PARTIAL/FAIL前端正确接收但 43+ 秒停留“正在上传…”;取消后无文档 |
| TC-DO-008 | P0 | 上传 15 MiB + 1 byte | 返回 413UI 提示超限,无计费/索引任务 | PASS本地标记“超过 15 MB 限制”0/1 有效且未 staging |
| TC-DO-009 | P0 | 同时上传合法、空、超限和不支持文件 | 每个文件独立结果,部分失败不丢成功项,可重试失败项 | PARTIAL/FAIL合法文件逐个报错并另有汇总错误未能进入 claim 部分成功 |
| TC-DO-010 | P0 | 对同一 staged upload 网络重试 | 同 upload ID 仅被 claim 一次,无重复文档 | ENV-BLOCKEDstaging 未成功返回 upload ID |
| TC-DO-011 | P0 | claim 前 abort staged upload | 上传被废弃,不可再 claim | PARTIAL取消 15 MiB in-flight 上传后表单关闭且 0 文档,但请求随后仍弹失败提示 |
| TC-DO-012 | P0 | claim 后再 abort | 拒绝废弃,已创建文档状态不被破坏 | ENV-BLOCKED无可 claim 的 upload ID |
| TC-DO-013 | P0 | 不同用户或不同 space 试图 claim upload | 统一返回无权/不存在,不能跨用户移动文件 | NOT-RUN |
| TC-DO-014 | P1 | 上传同内容不同文件名 | 产品按规则创建两个 logical document 或明确去重,不静默丢失 | ENV-BLOCKED两个文件均 staging 500未创建 logical document |
| TC-DO-015 | P0 | 现有文档列表加载 | 显示名称、来源、状态、修订、更新时间 | PASS7 条 |
| TC-DO-016 | P0 | 状态筛选 Ready | 只显示 ready 文档 | PASS4 条 |
| TC-DO-017 | P0 | 状态筛选 Failed | 只显示 failed 文档 | PASS3 条 |
| TC-DO-018 | P1 | 文档名大小写不敏感搜索 | 返回匹配项,清空后恢复 | PASS |
| TC-DO-019 | P1 | 搜索无匹配 | 显示明确无结果空状态 | PASS |
| TC-DO-020 | P0 | 打开 Tasks 抽屉 | 显示需关注/失败任务、原因和可用操作 | PASS5 条失败/中断 |
| TC-DO-021 | P0 | 对失败任务点 Retry | 只创建一个 retry attempt状态可跟踪 | PENDING-CONFIRM不重试既有业务文档 |
| TC-DO-022 | P1 | 对进行中任务 Cancel | 任务进入 canceling/canceled无半索引残留 | PENDING-CONFIRM |
| TC-DO-023 | P1 | 任务 SSE 断网再连 | 续接或 polling 收敛,不倒退、不重复任务 | NOT-RUN |
| TC-DO-024 | P1 | 打开 Metadata schema 对话框 | 显示现有 schema能力未开放时按钮禁用且有说明 | PASSAdd Metadata 禁用 |
| TC-DO-025 | P1 | 勾选一个文档 | 显示批量操作条和正确选中计数 | PASS |
| TC-DO-026 | P1 | 选中文档后查看 Reindex/Download/Delete 状态 | 按权限和实现能力准确启用/禁用 | PASSReindex 可用Download/Delete 禁用 |
| TC-DO-027 | P0 | 批量 Reindex 选择 1/1000/1001 文档 | 只允许 11000单一 durable job不重复 | PENDING-CONFIRM |
| TC-DO-028 | P0 | Reindex payload 同时包含 `all=true` 和 documentIds | 返回 422不运行任务 | NOT-RUN |
| TC-DO-029 | P0 | 批量删除含存在/不存在 ID | 事件结果可追踪,幂等重放不多删 | PENDING-CONFIRM |
| TC-DO-030 | P1 | 行菜单打开 | 根据状态显示 rename/reindex/disable/archive/download/delete | PASS |
| TC-DO-031 | P1 | Rename 留空 | 保存禁用或字段必填 | PASS |
| TC-DO-032 | P1 | Rename 输入 304 字 | 按后端合同限制,超限时前端拦截 | FAIL-CANDIDATE保存仍可用未提交 |
| TC-DO-033 | P1 | Ready/Failed/Processing 文档的禁用、归档、下载按钮 | 按状态机正确启用,禁用项有解释 | PARTIAL已检查当前状态 |
| TC-DO-034 | P1 | 两标签页并发 metadata PATCH使用 stale rowVersion | 第二个返回 409UI 刷新后可重试 | NOT-RUN |
| TC-DO-035 | P0 | 删除文档时重复使用同 Idempotency-Key/不同 payload | 同 payload 重放同结果,不同 payload 返回冲突 | PENDING-CONFIRM |
## F. 文档详情、修订、分块与 Metadata
| ID | P | 测试场景/步骤 | 预期结果 | 本轮结果 |
|---|---|---|---|---|
| TC-DD-001 | P0 | 打开 Ready 文档详情 | 标题、内容、来源、状态正常加载,无错误 toast | FAIL内容成功但 3 条 404 toast |
| TC-DD-002 | P0 | 详情页不展示未授权原始内容 | viewer 仅读且内容遵循 workspace 隔离 | NOT-RUN |
| TC-DD-003 | P1 | 点击 Metadata “编辑” | 打开编辑器或明确提示不支持,按钮可恢复 | FAIL见 KF-BUG-007 |
| TC-DD-004 | P1 | 查看 revisions 列表 | 按时间倒序active revision 明确标识 | PENDING-CONFIRM需自有文档 |
| TC-DD-005 | P1 | 切换不同 revision | 内容、chunk 和 outline 与修订一致,无版本竞态 | PENDING-CONFIRM |
| TC-DD-006 | P1 | 查看 revision chunks | 分页/游标无重复丢失chunk 内容与解析结果一致 | PENDING-CONFIRM |
| TC-DD-007 | P1 | 打开单个 chunk 详情 | 显示标识、位置、内容和 metadata新版不提供编辑假入口 | PENDING-CONFIRM |
| TC-DD-008 | P1 | 查看 outline | 层级顺序与原文档匹配,空 outline 有空状态 | PENDING-CONFIRM |
| TC-DD-009 | P1 | schema 名称 1/255/256 字及重名 | 允许 1255拒绝 256/重名/内建名 | PENDING-CONFIRM |
| TC-DD-010 | P1 | schema type 为 string/number/time | 每种类型保存和文档值校验正确 | PENDING-CONFIRM |
| TC-DD-011 | P1 | stale schema expectedRowVersion 更新/删除 | 返回 409不静默覆盖 | PENDING-CONFIRM |
| TC-DD-012 | P1 | metadata value 与 schema type 不匹配 | 字段级拒绝,其他值不受影响 | PENDING-CONFIRM |
| ID | P | 测试场景/步骤 | 预期结果 | 本轮结果 |
| --------- | --- | ----------------------------------------- | ----------------------------------------------------- | ------------------------------- |
| TC-DD-001 | P0 | 打开 Ready 文档详情 | 标题、内容、来源、状态正常加载,无错误 toast | FAIL内容成功但 3 条 404 toast |
| TC-DD-002 | P0 | 详情页不展示未授权原始内容 | viewer 仅读且内容遵循 workspace 隔离 | NOT-RUN |
| TC-DD-003 | P1 | 点击 Metadata “编辑” | 打开编辑器或明确提示不支持,按钮可恢复 | FAIL见 KF-BUG-007 |
| TC-DD-004 | P1 | 查看 revisions 列表 | 按时间倒序active revision 明确标识 | PENDING-CONFIRM需自有文档 |
| TC-DD-005 | P1 | 切换不同 revision | 内容、chunk 和 outline 与修订一致,无版本竞态 | PENDING-CONFIRM |
| TC-DD-006 | P1 | 查看 revision chunks | 分页/游标无重复丢失chunk 内容与解析结果一致 | PENDING-CONFIRM |
| TC-DD-007 | P1 | 打开单个 chunk 详情 | 显示标识、位置、内容和 metadata新版不提供编辑假入口 | PENDING-CONFIRM |
| TC-DD-008 | P1 | 查看 outline | 层级顺序与原文档匹配,空 outline 有空状态 | PENDING-CONFIRM |
| TC-DD-009 | P1 | schema 名称 1/255/256 字及重名 | 允许 1255拒绝 256/重名/内建名 | PENDING-CONFIRM |
| TC-DD-010 | P1 | schema type 为 string/number/time | 每种类型保存和文档值校验正确 | PENDING-CONFIRM |
| TC-DD-011 | P1 | stale schema expectedRowVersion 更新/删除 | 返回 409不静默覆盖 | PENDING-CONFIRM |
| TC-DD-012 | P1 | metadata value 与 schema type 不匹配 | 字段级拒绝,其他值不受影响 | PENDING-CONFIRM |
## G. 概览与可观测性
| ID | P | 测试场景/步骤 | 预期结果 | 本轮结果 |
|---|---|---|---|---|
| TC-OV-001 | P0 | 新建空间打开 Overview | 显示添加第一个数据源 onboarding指标为— | PASS |
| TC-OV-002 | P0 | 有数据空间查看 24h/30d 指标 | 时间范围切换后查询数、回答率和对比值一致 | PASS24h 030d 11/100% |
| TC-OV-003 | P1 | 需要关注列表分页 | 前后翻页稳定,不重复丢失 | PASS2 页 |
| TC-OV-004 | P1 | 打开最近活动抽屉 | Today/30d 和活动事件显示正常 | PASS |
| TC-OV-005 | P1 | 最近活动按 operator 筛选 | 只显示对应 actor/System 事件 | PASS |
| TC-OV-006 | P1 | 资产概况文档/实体/关系/覆盖数 | 与后端 inventory 一致 | PASS4/398/380/104 |
| TC-OV-007 | P1 | Documents 列表包含 failed 文档时核对 Overview “文档” | 标签说明是 total 还是 ready各页口径一致 | AMBIGUOUSOverview=4列表/卡片=7 |
| TC-OV-008 | P1 | 新上传文档完成后不刷新查看指标 | 按设计实时/轮询更新,不长期过期 | PENDING-CONFIRM |
| TC-OV-009 | P1 | 删除文档/source/space 后核对 stats | durable job 完成后计数无残留 | PENDING-CONFIRM |
| ID | P | 测试场景/步骤 | 预期结果 | 本轮结果 |
| --------- | --- | ---------------------------------------------------- | ----------------------------------------- | ---------------------------------- |
| TC-OV-001 | P0 | 新建空间打开 Overview | 显示添加第一个数据源 onboarding指标为— | PASS |
| TC-OV-002 | P0 | 有数据空间查看 24h/30d 指标 | 时间范围切换后查询数、回答率和对比值一致 | PASS24h 030d 11/100% |
| TC-OV-003 | P1 | 需要关注列表分页 | 前后翻页稳定,不重复丢失 | PASS2 页 |
| TC-OV-004 | P1 | 打开最近活动抽屉 | Today/30d 和活动事件显示正常 | PASS |
| TC-OV-005 | P1 | 最近活动按 operator 筛选 | 只显示对应 actor/System 事件 | PASS |
| TC-OV-006 | P1 | 资产概况文档/实体/关系/覆盖数 | 与后端 inventory 一致 | PASS4/398/380/104 |
| TC-OV-007 | P1 | Documents 列表包含 failed 文档时核对 Overview “文档” | 标签说明是 total 还是 ready各页口径一致 | AMBIGUOUSOverview=4列表/卡片=7 |
| TC-OV-008 | P1 | 新上传文档完成后不刷新查看指标 | 按设计实时/轮询更新,不长期过期 | PENDING-CONFIRM |
| TC-OV-009 | P1 | 删除文档/source/space 后核对 stats | durable job 完成后计数无残留 | PENDING-CONFIRM |
## H. Fast / Deep / Research 检索
| ID | P | 测试场景/输入 | 预期结果 | 本轮结果 |
|---|---|---|---|---|
| TC-RE-001 | P0 | 空库打开 Retrieval | 显示输入框、三种模式和空记录状态 | PASS |
| TC-RE-002 | P0 | 问题留空或仅空格 | Start 禁用 | PASS |
| TC-RE-003 | P0 | 问题精确 2000 字 | UI 允许,后端 query 长度约束不冲突 | PARTIAL已核对 maxLength=2000 |
| TC-RE-004 | P0 | 问题 2001 字 | UI 拦截/字段错误,不静默截断 | NOT-RUN |
| TC-RE-005 | P0 | 单次 Fast Start | 只产生 1 个 admission、1 个 SSE 任务、1 条记录 | PASSQA 空库 813 ms 返回 1 条记录、0 分段 |
| TC-RE-006 | P0 | 单次 Fast Retry | 只生成 1 个新 attempt与原 trace 关联 | FAIL生成 2 条KF-BUG-001 |
| TC-RE-007 | P0 | 单次 Deep Start | 只产生 1 个任务和 1 条记录 | FAIL生成 2 条KF-BUG-001 |
| TC-RE-008 | P0 | 单次 Research Start | 只产生 1 个 research task阶段流式更新 | FAIL/PARTIAL既有库可启动QA 空库单击后 27+ 秒无任务、阶段或错误,见 KF-BUG-019 |
| TC-RE-009 | P0 | Fast 对唯一 marker 检索 | 答案包含 markercitation 定位到正确 chunk | PENDING-CONFIRM需上传并有额度 |
| TC-RE-010 | P0 | Deep 对同一 marker 检索 | 深度检索只生成一个结果,引用可回溯 | PENDING-CONFIRM |
| TC-RE-011 | P0 | Research 对多文档问题 | 计划→检索→分析→结果完整,证据与冲突可查 | PENDING-CONFIRM |
| TC-RE-012 | P0 | 无结果查询 | 明确“无充分证据”,不编造引用 | PASSQA 空库 Fast/Deep 明确“未召回分段”0 引用 |
| TC-RE-013 | P0 | Fast/Deep 正常查询 | 流式完成且无错误,记录状态与答案一致 | PARTIALQA 空库正常 0 结果;既有库受模型额度阻塞 |
| TC-RE-014 | P1 | Research 无召回 | 阶段和最终错误一致,可重试 | FAIL/PARTIALQA 空库静默回到 idle既有库显示检索失败/未召回 |
| TC-RE-015 | P1 | 有历史记录时加载 Retrieval | 不再显示“暂无测试记录” | FAIL见 KF-BUG-010 |
| TC-RE-016 | P1 | SSE 进行中断网、恢复网络 | 续接原 trace不重复计费/任务 | NOT-RUN |
| TC-RE-017 | P1 | 进行中取消查询 | 服务端停止,记录为 canceled不持续消耗额度 | NOT-RUN |
| TC-RE-018 | P1 | activeDocumentIds 100/101 | 允许 100拒绝 101UI 显示限制 | NOT-RUN |
| TC-RE-019 | P1 | query images 1/4/5重复 UUID | 最多 4重复被去重或拒绝5 张拒绝 | NOT-RUN |
| TC-RE-020 | P1 | 图片 10 MB 边界、总 32 MB 边界、伪装 MIME | 仅 gif/jpeg/png/webp严格限制单张/总大小 | NOT-RUN |
| TC-RE-021 | P1 | 引用点击/键盘激活 | 定位正确文档、revision 和 chunk焦点可返回 | PENDING-CONFIRM |
| TC-RE-022 | P1 | Auto 模式通过 App/Workflow Knowledge Retrieval v2 运行 | 按 Settings 自动选 Fast/Deep/Research运行和发布一致 | NOT-RUN |
| TC-RE-023 | P1 | 用废弃 `/queries` 路由 | UI 不调用该路由;服务返回明确 503/deprecated | STATIC-VERIFIED |
| ID | P | 测试场景/输入 | 预期结果 | 本轮结果 |
| --------- | --- | -------------------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| TC-RE-001 | P0 | 空库打开 Retrieval | 显示输入框、三种模式和空记录状态 | PASS |
| TC-RE-002 | P0 | 问题留空或仅空格 | Start 禁用 | PASS |
| TC-RE-003 | P0 | 问题精确 2000 字 | UI 允许,后端 query 长度约束不冲突 | PARTIAL已核对 maxLength=2000 |
| TC-RE-004 | P0 | 问题 2001 字 | UI 拦截/字段错误,不静默截断 | NOT-RUN |
| TC-RE-005 | P0 | 单次 Fast Start | 只产生 1 个 admission、1 个 SSE 任务、1 条记录 | PASSQA 空库 813 ms 返回 1 条记录、0 分段 |
| TC-RE-006 | P0 | 单次 Fast Retry | 只生成 1 个新 attempt与原 trace 关联 | FAIL生成 2 条KF-BUG-001 |
| TC-RE-007 | P0 | 单次 Deep Start | 只产生 1 个任务和 1 条记录 | FAIL生成 2 条KF-BUG-001 |
| TC-RE-008 | P0 | 单次 Research Start | 只产生 1 个 research task阶段流式更新 | FAIL/PARTIAL既有库可启动QA 空库单击后 27+ 秒无任务、阶段或错误,见 KF-BUG-019 |
| TC-RE-009 | P0 | Fast 对唯一 marker 检索 | 答案包含 markercitation 定位到正确 chunk | PENDING-CONFIRM需上传并有额度 |
| TC-RE-010 | P0 | Deep 对同一 marker 检索 | 深度检索只生成一个结果,引用可回溯 | PENDING-CONFIRM |
| TC-RE-011 | P0 | Research 对多文档问题 | 计划→检索→分析→结果完整,证据与冲突可查 | PENDING-CONFIRM |
| TC-RE-012 | P0 | 无结果查询 | 明确“无充分证据”,不编造引用 | PASSQA 空库 Fast/Deep 明确“未召回分段”0 引用 |
| TC-RE-013 | P0 | Fast/Deep 正常查询 | 流式完成且无错误,记录状态与答案一致 | PARTIALQA 空库正常 0 结果;既有库受模型额度阻塞 |
| TC-RE-014 | P1 | Research 无召回 | 阶段和最终错误一致,可重试 | FAIL/PARTIALQA 空库静默回到 idle既有库显示检索失败/未召回 |
| TC-RE-015 | P1 | 有历史记录时加载 Retrieval | 不再显示“暂无测试记录” | FAIL见 KF-BUG-010 |
| TC-RE-016 | P1 | SSE 进行中断网、恢复网络 | 续接原 trace不重复计费/任务 | NOT-RUN |
| TC-RE-017 | P1 | 进行中取消查询 | 服务端停止,记录为 canceled不持续消耗额度 | NOT-RUN |
| TC-RE-018 | P1 | activeDocumentIds 100/101 | 允许 100拒绝 101UI 显示限制 | NOT-RUN |
| TC-RE-019 | P1 | query images 1/4/5重复 UUID | 最多 4重复被去重或拒绝5 张拒绝 | NOT-RUN |
| TC-RE-020 | P1 | 图片 10 MB 边界、总 32 MB 边界、伪装 MIME | 仅 gif/jpeg/png/webp严格限制单张/总大小 | NOT-RUN |
| TC-RE-021 | P1 | 引用点击/键盘激活 | 定位正确文档、revision 和 chunk焦点可返回 | PENDING-CONFIRM |
| TC-RE-022 | P1 | 省略 mode通过 App/Workflow Knowledge Retrieval v2 跟随空间配置运行 | 使用各空间 Settings草稿、发布 Web 与 Service API 一致 | 初测 FAIL/ENV-BLOCKED配置、保存与发布通过但所有运行入口均误报未绑定。KF-BUG-021 / WTA-1953 已完成代码修复和专项回归待部署后验证真实草稿、Web 与 Service 正向结果;字面 `auto` 按合同应拒绝 |
| TC-RE-023 | P1 | 用废弃 `/queries` 路由 | UI 不调用该路由;服务返回明确 503/deprecated | STATIC-VERIFIED |
## I. Quality参考问题、问题案例与 Replay
| ID | P | 测试场景/输入 | 预期结果 | 本轮结果 |
|---|---|---|---|---|
| TC-QA-001 | P0 | 空空间打开 Quality | 参考问题 0、问题案例 0空状态正确 | PASS |
| TC-QA-002 | P0 | 切换参考问题/问题案例 | tab 选中和 `?tab=bad-cases` 路由一致 | PASS |
| TC-QA-003 | P0 | 创建问题与备注留空 | 在字段下显示必填错误,不创建记录 | PASS |
| TC-QA-004 | P0 | 触发必填错误后输入合法问题/备注 | 错误和红色边框立即清除 | FAIL见 KF-BUG-008 |
| TC-QA-005 | P0 | 合法问题+备注,不选证据直接保存 | 创建 1 条 draft列表计数+1 | PASS |
| TC-QA-006 | P0 | 编辑已有 draft 备注并保存 | 列表内容和更新时间同步 | PASS |
| TC-QA-007 | P1 | 勾选一条参考问题 | 显示“已选 1”、删除入口和清除选择 | PASS |
| TC-QA-008 | P1 | 有效证据文本后点“查找证据” | 返回候选 chunk 或明确无匹配,不报未知错误 | FAIL/ENV当前为“未知错误” |
| TC-QA-009 | P0 | 导入合法 CSVquestion/evidence/tags | 显示行级预览和导入结果,未匹配证据保存草稿 | FAIL2 行预览正确;提交后仅显示“未知错误”,刷新仍为 1 条、无部分成功 |
| TC-QA-010 | P0 | CSV 使用中文表头、quoted commas/tags | 正确解析,不错列/乱码 | PARTIAL英文表头与 quoted tags 正确预览;中文表头未执行 |
| TC-QA-011 | P0 | CSV 500/501 行 | 允许 500拒绝 501告知上限 | NOT-RUN基础 2 行导入已失败 |
| TC-QA-012 | P0 | CSV 精确 1 MiB/1 MiB+1 | 允许边界,超限拒绝且无部分落库 | NOT-RUN基础 2 行导入已失败 |
| TC-QA-013 | P1 | CSV 包含合法与非法行 | 行级结果清晰,可重试失败行,不重复成功行 | NOT-RUN基础 2 行导入已失败 |
| TC-QA-014 | P1 | 执行 replay run | 重测每个问题,显示通过/失败/无证据和可追溯 trace | PENDING-CONFIRM |
| TC-QA-015 | P1 | replay 进行中断网/刷新 | 状态可恢复,不重复执行同一问题 | NOT-RUN |
| TC-QA-016 | P1 | 问题案例从真实查询转入 | 保留 query/trace/evidence 关联,列表计数及时更新 | NOT-RUN |
| TC-QA-017 | P1 | 删除单个/批量参考问题 | 仅删除选中项,重复确认不多删 | PENDING-CONFIRM |
| ID | P | 测试场景/输入 | 预期结果 | 本轮结果 |
| --------- | --- | -------------------------------------- | ------------------------------------------------ | --------------------------------------------------------------------- |
| TC-QA-001 | P0 | 空空间打开 Quality | 参考问题 0、问题案例 0空状态正确 | PASS |
| TC-QA-002 | P0 | 切换参考问题/问题案例 | tab 选中和 `?tab=bad-cases` 路由一致 | PASS |
| TC-QA-003 | P0 | 创建问题与备注留空 | 在字段下显示必填错误,不创建记录 | PASS |
| TC-QA-004 | P0 | 触发必填错误后输入合法问题/备注 | 错误和红色边框立即清除 | FAIL见 KF-BUG-008 |
| TC-QA-005 | P0 | 合法问题+备注,不选证据直接保存 | 创建 1 条 draft列表计数+1 | PASS |
| TC-QA-006 | P0 | 编辑已有 draft 备注并保存 | 列表内容和更新时间同步 | PASS |
| TC-QA-007 | P1 | 勾选一条参考问题 | 显示“已选 1”、删除入口和清除选择 | PASS |
| TC-QA-008 | P1 | 有效证据文本后点“查找证据” | 返回候选 chunk 或明确无匹配,不报未知错误 | FAIL/ENV当前为“未知错误” |
| TC-QA-009 | P0 | 导入合法 CSVquestion/evidence/tags | 显示行级预览和导入结果,未匹配证据保存草稿 | FAIL2 行预览正确;提交后仅显示“未知错误”,刷新仍为 1 条、无部分成功 |
| TC-QA-010 | P0 | CSV 使用中文表头、quoted commas/tags | 正确解析,不错列/乱码 | PARTIAL英文表头与 quoted tags 正确预览;中文表头未执行 |
| TC-QA-011 | P0 | CSV 500/501 行 | 允许 500拒绝 501告知上限 | NOT-RUN基础 2 行导入已失败 |
| TC-QA-012 | P0 | CSV 精确 1 MiB/1 MiB+1 | 允许边界,超限拒绝且无部分落库 | NOT-RUN基础 2 行导入已失败 |
| TC-QA-013 | P1 | CSV 包含合法与非法行 | 行级结果清晰,可重试失败行,不重复成功行 | NOT-RUN基础 2 行导入已失败 |
| TC-QA-014 | P1 | 执行 replay run | 重测每个问题,显示通过/失败/无证据和可追溯 trace | PENDING-CONFIRM |
| TC-QA-015 | P1 | replay 进行中断网/刷新 | 状态可恢复,不重复执行同一问题 | NOT-RUN |
| TC-QA-016 | P1 | 问题案例从真实查询转入 | 保留 query/trace/evidence 关联,列表计数及时更新 | NOT-RUN |
| TC-QA-017 | P1 | 删除单个/批量参考问题 | 仅删除选中项,重复确认不多删 | PENDING-CONFIRM |
## J. Settings基础信息、可见性与检索参数
| ID | P | 测试场景/输入 | 预期结果 | 本轮结果 |
|---|---|---|---|---|
| TC-ST-001 | P0 | 打开 Settings | 基础信息、API、模型、检索和危险操作加载正常 | PASS |
| TC-ST-002 | P0 | 名称留空/仅空格 | 显示必填错误Save 禁用 | PASS |
| TC-ST-003 | P0 | 名称精确 40 字保存 | 保存成功,侧边栏/列表同步 | PASS后已恢复 |
| TC-ST-004 | P0 | 名称 41 字 | 前端拦截和字段提示 | FAIL创建页已证实 |
| TC-ST-005 | P0 | 描述精确 2000 字 | 保存成功 | PASS后已恢复 |
| TC-ST-006 | P0 | 描述 2001 字 | 前端拦截,显示字段错误 | FAIL见 KF-BUG-003 |
| TC-ST-007 | P0 | 合法名称/描述保存后刷新 | 持久值正确Save 回到禁用 | PASS |
| TC-ST-008 | P1 | 改动后 Cancel | 恢复服务端值,不发 PATCH | PASS可见性试改 |
| TC-ST-009 | P0 | 可见性 only_me/all/partial 下拉 | 三种选项齐全,与隐藏值一致 | PASS |
| TC-ST-010 | P0 | partial 不选任何成员 | 显示至少一人,禁止保存 | PASS |
| TC-ST-011 | P1 | partial 添加/移除成员并保存 | 成员权限和 auth epoch 正确更新 | NOT-RUN缺多用户 |
| TC-ST-012 | P1 | API Access 开关 on/off | 立即保存或明确告知自动保存,侧边栏同步 | PASS已恢复 off |
| TC-ST-013 | P0 | 系统推理模型下拉 | 只显示可用模型,缺失/失效时可解释 | PARTIAL当前 gpt-5.6 |
| TC-ST-014 | P0 | Embedding 模型下拉 | 只显示可用 embeddingFast/Deep 不允许缺失 | PARTIAL当前 text-embedding-3-large |
| TC-ST-015 | P0 | 同时修改 embedding 与 retrieval settings | 产品要求拆分操作,返回明确 422 而非部分保存 | NOT-RUN |
| TC-ST-016 | P0 | embedding migration queued/running/succeeded/failed/canceled | 进度、checkpoint 和恢复入口清晰,激活前不破坏旧索引 | NOT-RUN |
| TC-ST-017 | P0 | 启用 Rerank 但不选模型 | 禁止保存并提示必选模型 | NOT-RUN |
| TC-ST-018 | P0 | Rerank 关闭时尝试启用 Fast/Deep Score threshold | threshold 禁用,规则清晰 | PASS当前禁用 |
| TC-ST-019 | P0 | Retrieval mode Fast→Deep→Fast | 每次只保存一次,选中状态持久 | PASS已恢复 Fast |
| TC-ST-020 | P0 | Retrieval mode Research | 模式保存并使 Retrieval 按钮语义变为开始研究 | PASS在 Retrieval 已验证 |
| TC-ST-021 | P0 | Top K = 0 | 拦截或明确 clamp 到 1显示值与保存值一致 | PASS显示和 slider 均为 1 |
| TC-ST-022 | P0 | Top K = 1/10 | 允许边界值,持久后一致 | PASS |
| TC-ST-023 | P0 | Top K = 11 | 拦截或明确 clamp 到 10显示值与保存值一致 | PASS显示和 slider 均为 10 |
| TC-ST-024 | P0 | threshold = -0.01/0/1/1.01 | 只允许 01保存值与显示一致 | NOT-RUNrerank 未配置 |
| TC-ST-025 | P0 | 两标签页使用相同 expectedRevision 并发保存 | 第二次 409给出刷新/合并引导,不静默覆盖 | NOT-RUN |
| TC-ST-026 | P1 | Save 返回 422/409/503 | 区分字段错误、冲突和服务不可用,不统一报网络 | FAIL422 被误报网络 |
| TC-ST-027 | P0 | 点击删除空间 | 必须二次确认,完成后立即从列表隐藏 | PENDING-CONFIRM |
| ID | P | 测试场景/输入 | 预期结果 | 本轮结果 |
| --------- | --- | ------------------------------------------------------------ | --------------------------------------------------- | ------------------------------------ |
| TC-ST-001 | P0 | 打开 Settings | 基础信息、API、模型、检索和危险操作加载正常 | PASS |
| TC-ST-002 | P0 | 名称留空/仅空格 | 显示必填错误Save 禁用 | PASS |
| TC-ST-003 | P0 | 名称精确 40 字保存 | 保存成功,侧边栏/列表同步 | PASS后已恢复 |
| TC-ST-004 | P0 | 名称 41 字 | 前端拦截和字段提示 | FAIL创建页已证实 |
| TC-ST-005 | P0 | 描述精确 2000 字 | 保存成功 | PASS后已恢复 |
| TC-ST-006 | P0 | 描述 2001 字 | 前端拦截,显示字段错误 | FAIL见 KF-BUG-003 |
| TC-ST-007 | P0 | 合法名称/描述保存后刷新 | 持久值正确Save 回到禁用 | PASS |
| TC-ST-008 | P1 | 改动后 Cancel | 恢复服务端值,不发 PATCH | PASS可见性试改 |
| TC-ST-009 | P0 | 可见性 only_me/all/partial 下拉 | 三种选项齐全,与隐藏值一致 | PASS |
| TC-ST-010 | P0 | partial 不选任何成员 | 显示至少一人,禁止保存 | PASS |
| TC-ST-011 | P1 | partial 添加/移除成员并保存 | 成员权限和 auth epoch 正确更新 | NOT-RUN缺多用户 |
| TC-ST-012 | P1 | API Access 开关 on/off | 立即保存或明确告知自动保存,侧边栏同步 | PASS已恢复 off |
| TC-ST-013 | P0 | 系统推理模型下拉 | 只显示可用模型,缺失/失效时可解释 | PARTIAL当前 gpt-5.6 |
| TC-ST-014 | P0 | Embedding 模型下拉 | 只显示可用 embeddingFast/Deep 不允许缺失 | PARTIAL当前 text-embedding-3-large |
| TC-ST-015 | P0 | 同时修改 embedding 与 retrieval settings | 产品要求拆分操作,返回明确 422 而非部分保存 | NOT-RUN |
| TC-ST-016 | P0 | embedding migration queued/running/succeeded/failed/canceled | 进度、checkpoint 和恢复入口清晰,激活前不破坏旧索引 | NOT-RUN |
| TC-ST-017 | P0 | 启用 Rerank 但不选模型 | 禁止保存并提示必选模型 | NOT-RUN |
| TC-ST-018 | P0 | Rerank 关闭时尝试启用 Fast/Deep Score threshold | threshold 禁用,规则清晰 | PASS当前禁用 |
| TC-ST-019 | P0 | Retrieval mode Fast→Deep→Fast | 每次只保存一次,选中状态持久 | PASS已恢复 Fast |
| TC-ST-020 | P0 | Retrieval mode Research | 模式保存并使 Retrieval 按钮语义变为开始研究 | PASS在 Retrieval 已验证 |
| TC-ST-021 | P0 | Top K = 0 | 拦截或明确 clamp 到 1显示值与保存值一致 | PASS显示和 slider 均为 1 |
| TC-ST-022 | P0 | Top K = 1/10 | 允许边界值,持久后一致 | PASS |
| TC-ST-023 | P0 | Top K = 11 | 拦截或明确 clamp 到 10显示值与保存值一致 | PASS显示和 slider 均为 10 |
| TC-ST-024 | P0 | threshold = -0.01/0/1/1.01 | 只允许 01保存值与显示一致 | NOT-RUNrerank 未配置 |
| TC-ST-025 | P0 | 两标签页使用相同 expectedRevision 并发保存 | 第二次 409给出刷新/合并引导,不静默覆盖 | NOT-RUN |
| TC-ST-026 | P1 | Save 返回 422/409/503 | 区分字段错误、冲突和服务不可用,不统一报网络 | FAIL422 被误报网络 |
| TC-ST-027 | P0 | 点击删除空间 | 必须二次确认,完成后立即从列表隐藏 | PENDING-CONFIRM |
## K. 权限、成员、API 和应用绑定
| ID | P | 测试场景/角色 | 预期结果 | 本轮结果 |
|---|---|---|---|---|
| TC-AU-001 | P0 | owner 访问列表/详情/上传/设置/成员/API/删除 | 所有功能可用 | PARTIALowner 主流程通过 |
| TC-AU-002 | P0 | editor 访问读/编辑/文档写/检索 | 允许;成员/API key/删库按合同禁止 | NOT-RUN |
| TC-AU-003 | P0 | viewer 访问读/检索 | 只读和 query 允许;所有写操作隐藏/禁止 | NOT-RUN |
| TC-AU-004 | P0 | only_me 下非 owner 访问深链 | 与不存在资源统一为 404 | NOT-RUN |
| TC-AU-005 | P0 | all_team_members 的未显式成员 | 以 viewer 访问,不获得编辑权 | NOT-RUN |
| TC-AU-006 | P0 | partial_members 的非选中成员 | 列表不可见,深链 404 | NOT-RUN |
| TC-AU-007 | P0 | RBAC 查询异常 | fail closed不使用本地角色绕过 | NOT-RUN |
| TC-AU-008 | P0 | 成员被移除/可见性收窄时仍打开详情 | 页面下一次请求立即失效,旧 SSE/token 不能继续 | NOT-RUN |
| TC-AU-009 | P0 | 用旧 API credential 在撤权后访问 | 立即 401/403/404不等 TTL 过期 | NOT-RUN |
| TC-AU-010 | P0 | External API endpoint 为 `not-a-url` | 只显示一条本地化字段错误,不保存 | FAIL见 KF-BUG-009 |
| TC-AU-011 | P1 | External API 合法 endpoint/key 创建并测试 | 保存后可编辑/撤销key 不再明文显示 | NOT-RUN无可用外部 API |
| TC-AU-012 | P0 | 创建 Service API Key | 只在创建瞬间显示 secret复制和撤销可用 | PASS已创建 1 枚临时 key |
| TC-AU-013 | P0 | 撤销 Service API Key 后重试访问 | 立即失效,不会继续签发空间 token | PENDING-CONFIRM |
| TC-AU-014 | P0 | Agent/Agent Chat 绑定 Agent channel | 只允许支持的 app 类型且 space active/channel enabled | NOT-RUN |
| TC-AU-015 | P0 | Workflow/Advanced Chat 绑定 Workflow channel | 最多 10 个 space第 11 个有明确错误 | NOT-RUN |
| TC-AU-016 | P0 | 解除 app binding 后运行已发布 app | 旧 binding 不再可用,运行给出明确错误 | NOT-RUN |
| TC-AU-017 | P0 | 使用新 Service API Key 请求 `/v1/datasets` | 返回 200 和合法分页 JSON | PASS |
| TC-AU-018 | P0 | 将 Service API Key 修改一位后请求 | 返回 401不返回数据 | PASS |
| TC-AU-019 | P1 | 合法 key 使用成功后重新打开密钥列表 | 最后使用时间更新 | FAIL仍显示“从未”KF-BUG-013 |
| TC-AU-020 | P0 | QA space API Access = off 时用有效 key 请求该 space ID | 返回不可见/404 | PASS返回 404 |
| TC-AU-021 | P0 | QA space API Access on→刷新→off→刷新 | 即时保存;两次刷新均与服务端一致,最终恢复关闭 | PASS开启显示“已启用”最终确认 `aria-checked=false` |
| TC-AU-022 | P0 | 用旧 Dataset Service API Key 调用 KFS admission | 旧 key 不可冒充 KFS scoped credential | PASSAPI 域名返回 401 `knowledge_fs_invalid_credential` |
| TC-AU-023 | P0 | API Access 已开启时点击空间侧栏“API 访问” | 显示可用 endpoint、专属 credential 创建/管理或明确下一步 | FAIL只弹空白“不可用”对话框见 KF-BUG-018 |
| ID | P | 测试场景/角色 | 预期结果 | 本轮结果 |
| --------- | --- | ------------------------------------------------------ | -------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| TC-AU-001 | P0 | owner 访问列表/详情/上传/设置/成员/API/删除 | 所有功能可用 | PARTIALowner 主流程通过 |
| TC-AU-002 | P0 | editor 访问读/编辑/文档写/检索 | 允许;成员/API key/删库按合同禁止 | NOT-RUN |
| TC-AU-003 | P0 | viewer 访问读/检索 | 只读和 query 允许;所有写操作隐藏/禁止 | NOT-RUN |
| TC-AU-004 | P0 | only_me 下非 owner 访问深链 | 与不存在资源统一为 404 | NOT-RUN |
| TC-AU-005 | P0 | all_team_members 的未显式成员 | 以 viewer 访问,不获得编辑权 | NOT-RUN |
| TC-AU-006 | P0 | partial_members 的非选中成员 | 列表不可见,深链 404 | NOT-RUN |
| TC-AU-007 | P0 | RBAC 查询异常 | fail closed不使用本地角色绕过 | NOT-RUN |
| TC-AU-008 | P0 | 成员被移除/可见性收窄时仍打开详情 | 页面下一次请求立即失效,旧 SSE/token 不能继续 | NOT-RUN |
| TC-AU-009 | P0 | 用旧 API credential 在撤权后访问 | 立即 401/403/404不等 TTL 过期 | NOT-RUN |
| TC-AU-010 | P0 | External API endpoint 为 `not-a-url` | 只显示一条本地化字段错误,不保存 | FAIL见 KF-BUG-009 |
| TC-AU-011 | P1 | External API 合法 endpoint/key 创建并测试 | 保存后可编辑/撤销key 不再明文显示 | NOT-RUN无可用外部 API |
| TC-AU-012 | P0 | 创建 Service API Key | 只在创建瞬间显示 secret复制和撤销可用 | PASS已创建 1 枚临时 key |
| TC-AU-013 | P0 | 撤销 Service API Key 后重试访问 | 立即失效,不会继续签发空间 token | PASS临时 Workflow App key 删除后同 key 立即返回 401 |
| TC-AU-014 | P0 | Agent/Agent Chat 绑定 Agent channel | 只允许支持的 app 类型且 space active/channel enabled | NOT-RUN |
| TC-AU-015 | P0 | Workflow/Advanced Chat 绑定 Workflow channel | 最多 10 个 space第 11 个有明确错误 | 初测 PARTIAL/FAIL真实发布后 binding 精确建立1/6 空间通过、10/11 由自动化合同覆盖。KF-BUG-021 / WTA-1953 已增加独立 Workflow Access 开关并细分 admission 错误,专项回归通过;尚未部署,真实 channel 正向运行仍为 ENV-BLOCKED |
| TC-AU-016 | P0 | 解除 app binding 后运行已发布 app | 旧 binding 不再可用,运行给出明确错误 | PARTIAL/ENV-BLOCKED发布图从 `ceshi` 切到 QA 时旧 binding 由 1→0切回恢复 1KF-BUG-021 已补齐 binding/channel/space/auth 的可区分错误,但部署前仍无法验证真实旧 capability 撤权 |
| TC-AU-017 | P0 | 使用新 Service API Key 请求 `/v1/datasets` | 返回 200 和合法分页 JSON | PASS |
| TC-AU-018 | P0 | 将 Service API Key 修改一位后请求 | 返回 401不返回数据 | PASS |
| TC-AU-019 | P1 | 合法 key 使用成功后重新打开密钥列表 | 最后使用时间更新 | FAIL仍显示“从未”KF-BUG-013 |
| TC-AU-020 | P0 | QA space API Access = off 时用有效 key 请求该 space ID | 返回不可见/404 | PASS返回 404 |
| TC-AU-021 | P0 | QA space API Access on→刷新→off→刷新 | 即时保存;两次刷新均与服务端一致,最终恢复关闭 | PASS开启显示“已启用”最终确认 `aria-checked=false` |
| TC-AU-022 | P0 | 用旧 Dataset Service API Key 调用 KFS admission | 旧 key 不可冒充 KFS scoped credential | PASSAPI 域名返回 401 `knowledge_fs_invalid_credential` |
| TC-AU-023 | P0 | API Access 已开启时点击空间侧栏“API 访问” | 显示可用 endpoint、专属 credential 创建/管理或明确下一步 | FAIL只弹空白“不可用”对话框见 KF-BUG-018 |
## L. 恢复性、错误映射与非功能
| ID | P | 测试场景 | 预期结果 | 本轮结果 |
|---|---|---|---|---|
| TC-RS-001 | P0 | API 返回 401 | 刷新身份后仅重放一次,不重复 reindex/query 等 POST | NOT-RUN |
| TC-RS-002 | P0 | API 返回 403/404 | 无权与不存在对外表现一致,不泄露资源 | FAIL-PARTIAL404 toast 泄露路由 |
| TC-RS-003 | P0 | API 返回 409 revision conflict | 保留编辑,提示刷新/合并,不静默覆盖 | NOT-RUN |
| TC-RS-004 | P0 | API 返回 422 field validation | 错误映射到具体字段和限制 | FAIL名称/描述均只给通用错误 |
| TC-RS-005 | P1 | API 返回 429 | 显示重试时间,按 Retry-After 控制,不密集重试 | NOT-RUN |
| TC-RS-006 | P1 | API 返回 503 | 区分服务不可用与网络断开,保留可重试数据 | ENV/PARTIAL |
| TC-RS-007 | P1 | 断网后在表单点 Save恢复后 Retry | 不丢输入,仅提交一次 | NOT-RUN |
| TC-RS-008 | P1 | 长任务刷新/关闭再进入 | 根据 durable job ID 恢复进度,不新建任务 | NOT-RUN |
| TC-RS-009 | P1 | 快速连续点击 Start/Retry/Save | 前端防抖+后端幂等,仅一次运行 | FAILRetrieval 已复现重复 |
| TC-RS-010 | P1 | 多标签页交错加载列表/详情并返回 | 旧响应不覆盖新路由,焦点和状态正确 | NOT-RUN |
| TC-RS-011 | P1 | 390 px/768 px/1280 px 响应式 | 无内容遮挡、不可达导航和水平滚动陷阱 | PARTIAL390 px 有导航溢出 |
| TC-RS-012 | P1 | WCAG A/AA 自动扫描新版六个页面 | 无 serious/critical表单标签和对比度合格 | NOT-RUN现有 a11y E2E 只扫 legacy |
| TC-RS-013 | P2 | Chrome 缩放 200%、系统大字体 | 无截断、遮挡、无法滚动的对话框 | NOT-RUN |
| ID | P | 测试场景 | 预期结果 | 本轮结果 |
| --------- | --- | --------------------------------- | -------------------------------------------------- | ---------------------------------- |
| TC-RS-001 | P0 | API 返回 401 | 刷新身份后仅重放一次,不重复 reindex/query 等 POST | NOT-RUN |
| TC-RS-002 | P0 | API 返回 403/404 | 无权与不存在对外表现一致,不泄露资源 | FAIL-PARTIAL404 toast 泄露路由 |
| TC-RS-003 | P0 | API 返回 409 revision conflict | 保留编辑,提示刷新/合并,不静默覆盖 | NOT-RUN |
| TC-RS-004 | P0 | API 返回 422 field validation | 错误映射到具体字段和限制 | FAIL名称/描述均只给通用错误 |
| TC-RS-005 | P1 | API 返回 429 | 显示重试时间,按 Retry-After 控制,不密集重试 | NOT-RUN |
| TC-RS-006 | P1 | API 返回 503 | 区分服务不可用与网络断开,保留可重试数据 | ENV/PARTIAL |
| TC-RS-007 | P1 | 断网后在表单点 Save恢复后 Retry | 不丢输入,仅提交一次 | NOT-RUN |
| TC-RS-008 | P1 | 长任务刷新/关闭再进入 | 根据 durable job ID 恢复进度,不新建任务 | NOT-RUN |
| TC-RS-009 | P1 | 快速连续点击 Start/Retry/Save | 前端防抖+后端幂等,仅一次运行 | FAILRetrieval 已复现重复 |
| TC-RS-010 | P1 | 多标签页交错加载列表/详情并返回 | 旧响应不覆盖新路由,焦点和状态正确 | NOT-RUN |
| TC-RS-011 | P1 | 390 px/768 px/1280 px 响应式 | 无内容遮挡、不可达导航和水平滚动陷阱 | PARTIAL390 px 有导航溢出 |
| TC-RS-012 | P1 | WCAG A/AA 自动扫描新版六个页面 | 无 serious/critical表单标签和对比度合格 | NOT-RUN现有 a11y E2E 只扫 legacy |
| TC-RS-013 | P2 | Chrome 缩放 200%、系统大字体 | 无截断、遮挡、无法滚动的对话框 | NOT-RUN |
## M. Legacy Dataset / RAG Pipeline 回归高风险用例
> 新版 KnowledgeFS 与旧 Dataset 后端仍并存。以下是为防止切流/兼容回归必须保留的用例,本轮没有在业务数据上执行。
| ID | P | 测试场景 | 预期结果 | 本轮结果 |
|---|---|---|---|---|
| TC-LG-001 | P0 | 旧 segment 创建不传 `attachment_ids` | 正常创建、建向量且返回 2xx不得“500 但已部分落库” | STATIC-RISK |
| TC-LG-002 | P0 | 旧 metadata rename 重名/冲突 | 明确失败,刷新后真实名称不变 | STATIC-RISK |
| TC-LG-003 | P0 | 旧 metadata delete 不存在 ID | 返回 404/4xx不吞异常后 204 | STATIC-RISK |
| TC-LG-004 | P0 | 删除仍被 App/Workflow 使用的 dataset | use-check 阻止并指明关联应用,不断链 | STATIC-RISK |
| TC-LG-005 | P1 | hit test topK 0/超大/负数/NaNscore 越界 | 统一严格校验,不进入模型/数据库 | NOT-RUN |
| TC-LG-006 | P1 | segment 空内容、QA 空 answer、disabled 后编辑 | 按状态机拒绝,无向量残留 | NOT-RUN |
| TC-LG-007 | P1 | 上传后快速 pause/resume/retry/delete/archive | 按 indexing/paused/error/archived 状态机仅允许合法操作 | NOT-RUN |
| TC-LG-008 | P1 | Pipeline draft 用 JSON/text/plain/其他 Content-Type | 只接受 application/json 或 text/plain JSON其他 415 | NOT-RUN |
| TC-LG-009 | P1 | 两标签页保存同一 draft hash | 第二次 DraftWorkflowNotSync不静默覆盖 | NOT-RUN |
| TC-LG-010 | P1 | 无 draft/缺 knowledge-index node/缺 embedding/不兼容 chunk 发布 | 发布前完整验证,不产生半成品 published version | NOT-RUN |
| TC-LG-011 | P1 | 删除 active workflow/draftrestore draft | 阻止删 active/draft只能从 published restore | NOT-RUN |
| TC-LG-012 | P1 | DSL import 无效 YAML/依赖 pending/export secret | 失败 400依赖待确认 202默认 export 剥离凭据 | NOT-RUN |
| ID | P | 测试场景 | 预期结果 | 本轮结果 |
| --------- | --- | --------------------------------------------------------------- | ------------------------------------------------------ | ----------- |
| TC-LG-001 | P0 | 旧 segment 创建不传 `attachment_ids` | 正常创建、建向量且返回 2xx不得“500 但已部分落库” | STATIC-RISK |
| TC-LG-002 | P0 | 旧 metadata rename 重名/冲突 | 明确失败,刷新后真实名称不变 | STATIC-RISK |
| TC-LG-003 | P0 | 旧 metadata delete 不存在 ID | 返回 404/4xx不吞异常后 204 | STATIC-RISK |
| TC-LG-004 | P0 | 删除仍被 App/Workflow 使用的 dataset | use-check 阻止并指明关联应用,不断链 | STATIC-RISK |
| TC-LG-005 | P1 | hit test topK 0/超大/负数/NaNscore 越界 | 统一严格校验,不进入模型/数据库 | NOT-RUN |
| TC-LG-006 | P1 | segment 空内容、QA 空 answer、disabled 后编辑 | 按状态机拒绝,无向量残留 | NOT-RUN |
| TC-LG-007 | P1 | 上传后快速 pause/resume/retry/delete/archive | 按 indexing/paused/error/archived 状态机仅允许合法操作 | NOT-RUN |
| TC-LG-008 | P1 | Pipeline draft 用 JSON/text/plain/其他 Content-Type | 只接受 application/json 或 text/plain JSON其他 415 | NOT-RUN |
| TC-LG-009 | P1 | 两标签页保存同一 draft hash | 第二次 DraftWorkflowNotSync不静默覆盖 | NOT-RUN |
| TC-LG-010 | P1 | 无 draft/缺 knowledge-index node/缺 embedding/不兼容 chunk 发布 | 发布前完整验证,不产生半成品 published version | NOT-RUN |
| TC-LG-011 | P1 | 删除 active workflow/draftrestore draft | 阻止删 active/draft只能从 published restore | NOT-RUN |
| TC-LG-012 | P1 | DSL import 无效 YAML/依赖 pending/export secret | 失败 400依赖待确认 202默认 export 剥离凭据 | NOT-RUN |
## N. Workflow Knowledge Retrieval v2 补测
本轮新增独立补测矩阵,共执行 39 个浏览器/核心合同场景31 个通过或通过负向合同、5 个失败、1 个部分失败、2 个被同一运行缺陷阻断;这些是初测原始结果,继续保留。另有 15 个真实链路断言标记为 `ENV-BLOCKED`3 个取消/error-strategy/retry 断言标记为规格或实现阻塞,未使用 mock 结果冒充端到端通过。
已确认问题:
1. `KF-BUG-020` / [WTA-1954](https://linear.app/dify/issue/WTA-1954)HighDone初测从节点选择器新增 v2 节点后主编辑区空白并出现未处理 `AbortError`。根因是通用 `WorkflowHistoryStoreInitializer` 在约 500 ms 后接收到新的 history 对象便卸载整棵 Workflow 子树;`AbortError` 是卸载后查询取消的结果。代码已修复,更宽的 Workflow 组合回归 9 个 spec、27 个测试通过,待部署后真实 Chrome 复测。
2. `KF-BUG-021` / [WTA-1953](https://linear.app/dify/issue/WTA-1953)HighDone初测时 binding 已建立,但 channel/permissions 未就绪的所有运行表面统一显示未绑定。代码已增加独立 `workflow_enabled` 开关,细分 binding/channel/space/auth admission 状态,并以稳定 marker 映射为 24 个 locale 的本地化消息020/021 最终 Web 组合 7 个 spec、70 个测试通过API 18 个测试通过,待部署后真实正向运行。
3. `KF-BUG-022` / [WTA-1956](https://linear.app/dify/issue/WTA-1956)HighBacklog`created_after` / `created_before` 输入在刷新和 DSL 导出后静默丢失。
4. `KF-BUG-023` / [WTA-1955](https://linear.app/dify/issue/WTA-1955)MediumBacklog最后一个 node-kind filter 无法取消。
5. `KF-BUG-024` / [WTA-1957](https://linear.app/dify/issue/WTA-1957)MediumBacklog未解析空间在草稿检查清单中无持久警告发布时才显示未本地化内部 ID。
以上五个 issue 均属于 Linear 项目 `Make RAG Great Again`、Milestone `测试联调`020/021 已指派给 `jyong` 并完成022024 保持 Backlog。修复后的自动化结果不改写 WF2 原始浏览器 FAIL也不代表尚未部署的真实 E2E 已通过。
另有一个已静态确认但未按浏览器缺陷编号的合同缺口:`KNOWLEDGE_FS_BASE_URL` 未配置时 composition root 会在 I/O 前 fail closed但 v2 节点解析 runtime 的位置可能绕过其受控 `RetrievalUnavailable` 映射;详见补测报告 `WF2-CONTRACT-001`
完整逐项结果、运行表面、自动化证据、测试对象和环境恢复记录见:[Workflow Knowledge Retrieval v2 / KnowledgeFS 功能补测报告](./knowledge-retrieval-v2-functional-test-report.md)。
## 测试执行建议顺序
1. 先解决 KF-BUG-001005补充有额度的模型环境。
2. 经用户确认后执行 TC-DO-003014等索引 ready。
3. 紧接执行 TC-DD-004012、TC-RE-009011、TC-QA-009017保证同一批合成语料可串联校验。
4. 使用 owner/editor/viewer 三账号执行 TC-AU-001009并在正在运行的 SSE 中撤权。
5. 最后执行删除和清理核对列表、FS、检索、概览和 App binding 全部无残留。
1. 部署已修复的 KF-BUG-020/021在真实 Chrome 中先验证添加任意节点后等待超过 history 保存窗口仍不白屏,再通过独立 Workflow Access 开关启用 `workflow_enabled=true`;同时准备 permissions ready、含唯一 marker 的固定空间。
2. 修复 KF-BUG-022并用刷新、DSL 导出与真实 filtered retrieval 三层验证时间过滤;随后处理 KF-BUG-023/024。
3. 经用户确认后执行 TC-DO-003014等索引 ready。
4. 紧接执行 TC-DD-004012、TC-RE-009011、TC-QA-009017 及补测报告 WF2-LIVE-001015先完成规格/实现后再执行 WF2-LIVE-016018。
5. 使用 owner/editor/viewer 三账号执行 TC-AU-001009并在正在运行的 SSE 中撤权。
6. 最后执行删除和清理核对列表、FS、检索、概览和 App binding 全部无残留。

View File

@ -1,6 +1,6 @@
# KnowledgeFS 全功能测试报告
配套交付:[详细测试用例](./knowledge-fs-detailed-test-cases.md) · [合成上传数据](./test-data/)
配套交付:[详细测试用例](./knowledge-fs-detailed-test-cases.md) · [Workflow Knowledge Retrieval v2 补测报告](./knowledge-retrieval-v2-functional-test-report.md) · [合成测试数据](./test-data/)
## 1. 测试摘要
@ -9,17 +9,18 @@
- 测试终端:用户已登录的 Google Chrome桌面视口 + 390×844 移动视口
- 测试角色:当前 workspace 的 owner 用户
- 测试方法:真实浏览器功能测试、边界值、错误处理、状态流转、恢复性、静态代码/现有自动化测试对照
- 用例库:已编制 242 条可执行用例;按当前用例状态统计为 89 `PASS`、33 条含 `FAIL`、4 `ENV`、4 `ENV-BLOCKED`、27 `PENDING-CONFIRM`,其余为部分执行、需多用户/provider/大数据的未执行项或静态风险
- 初始测试状态Chrome 本地文件权限已修复,合成文件已实际提交到上传/Quality 页面QA API Access 已完成 off→on→刷新→off→刷新并恢复关闭。初测时所有文档 staging 均失败或悬挂QA 空间为 0 文档。永久删除、创建 KnowledgeFS 专属凭据与密钥撤销仍等待操作前确认。
- 修复复测状态19 个已确认缺陷中 18 个已完成代码修复、专项自动化回归及 Linear 状态同步;唯一未关闭的是 KF-BUG-014 / WTA-1928。该项复测时 TXT/Markdown staging 已成功,但测试环境的文档 claim 路由稳定返回 404需部署当前 API 后完成 `staging → claim 202 → ready` 实链路复测。
- 用例库:主矩阵已编制 242 条可执行用例;本轮另补 39 条 Workflow v2 已执行场景和 18 条真实运行断言。主矩阵原状态统计仍保留为 89 `PASS`、33 条含 `FAIL`、4 `ENV`、4 `ENV-BLOCKED`、27 `PENDING-CONFIRM`Workflow 补测不混入旧统计,逐项结果见独立报告。
- 初始测试状态Chrome 本地文件权限已修复,合成文件已实际提交到上传/Quality 页面QA API Access 已完成 off→on→刷新→off→刷新并恢复关闭。初测时所有文档 staging 均失败或悬挂QA 空间为 0 文档。
- 修复复测状态:原 19 个已确认缺陷中 18 个已完成代码修复、专项自动化回归及 Linear 状态同步;唯一未关闭的是 KF-BUG-014 / WTA-1928。该项复测时 TXT/Markdown staging 已成功,但测试环境的文档 claim 路由稳定返回 404需部署当前 API 后完成 `staging → claim 202 → ready` 实链路复测。
- Workflow v2 补测状态39 个浏览器/核心合同场景已执行;另有 15 个真实运行断言被 Workflow channel、permissions-ready KFS 或已索引语料条件阻塞3 个被产品规格/实现阻塞取消信号、error strategy、retry并确认 1 个 endpoint 未配置时的节点错误映射合同缺口。KF-BUG-020024 均已创建到 Linear 项目 `Make RAG Great Again` 的 Milestone `测试联调`KF-BUG-020/021 已完成代码修复和专项自动化回归,待部署后做真实 Chrome 正向链路复测KF-BUG-022024 保持 Backlog。
## 2. 结论
初始功能测试表明 KnowledgeFS 新版的页面架构和大部分基础交互可用新旧版切换、列表筛选、空库创建、空状态、概览指标、文档列表、任务抽屉、Fast/Deep 空库检索、Quality 参考问题创建/编辑、设置保存与 API Access 开关持久化均能正常工作。
经过本轮修复,除 KF-BUG-014 的测试环境部署阻塞外,其余 18 个已确认缺陷均已修复并通过所属层专项回归。下列条目保留初测时的风险与现象,最新修复状态以第 4 节缺陷表和各缺陷复测记录为准。
经过原缺陷修复,除 KF-BUG-014 的测试环境部署阻塞外KF-BUG-001019 中其余 18 个均已修复并通过所属层专项回归。随后对 Workflow `knowledge-retrieval-v2` 的专项补测又确认 5 个新问题:新增节点白屏、运行通道不可用、时间过滤静默丢失、最后一个 node kind 无法清除,以及未解析空间缺少草稿期警告。最新状态以第 4 节缺陷表和独立补测报告为准。
但当前不建议直接认定为“可全量发布”。除原有 5 个 P1 级问题外,本轮真实文件/API 集成又暴露出 5 个 P1 级阻断
当前仍不建议认定为“可全量发布”。以下 110 条保留初测时 KF-BUG-001019 的原始阻断证据,其中除第 6 条对应的 KF-BUG-014 外均已有代码修复Workflow v2 当前发布门禁另见其后的新增结论
1. Fast/Deep 检索单次操作会生成重复记录/重复任务,存在重复计费和重复执行风险。
2. 创建名称超长和设置描述超长均缺少前端校验,后端拒绝后界面还给出错误或误导性归因。
@ -32,6 +33,8 @@
9. API Access 开启且刷新持久后,侧栏入口仍只弹空白“不可用”;旧 Dataset Service API Key 调用 KFS admission 得到 401界面没有可用的 KFS 专属凭据路径。
10. QA 空库 Research 单击后 27+ 秒无任务、阶段、结果或错误静默回到可重试状态Fast/Deep 在同一空库均能正确显示 0 分段。
Workflow v2 初测结论仍保留为不可发布:发布会建立并精确同步 binding但当时的测试部署在 Workflow channel/permissions 未就绪时,草稿完整运行、单节点运行、已发布 Web App、Service API blocking/streaming 都只显示“not bound”且从选择器新增任意节点约 500 ms 后会使主编辑区白屏。当前代码已修复 KF-BUG-020/021初始化器不再因新的 history 引用卸载 Workflow 子树Settings 增加独立 `workflow_enabled` 开关admission 将 binding、channel、space、authorization 状态细分,并通过稳定 marker 映射为 24 个 locale 的本地化错误。由于修复尚未部署到测试环境,真实 Fast/Deep/Research、引用、filters 和多空间合并仍保持 `ENV-BLOCKED`,不能把自动化回归提升为真实 E2E 通过。
## 3. 测试数据与环境影响
### 3.1 本轮创建的合成数据
@ -45,7 +48,10 @@
- Quality 参考问题1 条合成草稿已验证创建和编辑2 行 CSV 导入失败且刷新后无部分落库
- Firecrawl1 个已停止的临时抓取草稿,未添加为数据源
- 文件:尝试 3 个小型 TXT/MD、0 B、精确 15 MiB、15 MiB+1、`.exe`staging/本地校验后仍为 0 文档
- Service API Key已创建 1 个临时 key已完成鉴权测试尚未撤销完整 secret 未写入报告
- Dataset Service API Key初测时创建 1 个临时 key 并完成鉴权;其历史清理状态与 Workflow App key 分开记录
- Workflow 测试 App`KF-WF-V2-LIVE-CESHI-20260811`、`KF-WF-V2-UNRESOLVED-20260811`、`KF-WF-V2-QA-20260811`
- Workflow App API Key已临时创建用于 blocking/streaming测试后已删除同 key 立即返回 401完整 secret 未写入报告
- Workflow channel初测部署的运行证据表明该通道关闭或不可用且 Settings UI 当时无可发现开关;当前代码已增加独立 `workflow_enabled` 控件但尚未部署复测。QA API Access 按合同仅控制 Service/Agent、保留 Workflow 现值;本轮临时开启后已恢复关闭
QA 空间的 Fast 和 Deep 各执行过一次 0 文档检索并正常返回 0 分段这些“记录”刷新后不再显示。Research 单次执行没有生成可见记录。
@ -61,61 +67,75 @@ QA 空间的 Fast 和 Deep 各执行过一次 0 文档检索并正常返回 0
## 4. 已确认缺陷
| 编号 | 优先级 | 模块 | 摘要 | 状态 |
|---|---|---|---|---|
| KF-BUG-001 | P1 / Major | Retrieval | Fast/Deep 单次开始或重试生成两条记录/任务 | 已修复WTA-1914 Done |
| KF-BUG-002 | P1 / Major | Create | 41 字名称可提交,后端拒绝后误报“权限” | 已修复WTA-1915 Done |
| KF-BUG-003 | P1 / Major | Settings | 2001 字描述可提交,后端拒绝后误报“网络” | 已修复WTA-1916 Done |
| KF-BUG-004 | P1 / Major | Error handling | 不存在空间的 404 toast 暴露后端 API 路由 | 已修复WTA-1917 Done |
| KF-BUG-005 | P1 / Major | Website source | 抓取页数显示值与实际提交值静默不一致 | 已修复WTA-1918 Done |
| KF-BUG-006 | P2 / Major | Document detail | 详情内容已加载时同时出现 3 条相同英文 404 toast | 已修复WTA-1919 Done |
| KF-BUG-007 | P2 / Major | Metadata | 详情页点击“编辑”后按钮永久禁用,无编辑器和反馈 | 已修复WTA-1920 Done |
| KF-BUG-008 | P2 / Normal | Quality | 必填错误在输入合法值后不消失,查找证据只报“未知错误” | 已修复WTA-1921 Done |
| KF-BUG-009 | P2 / Normal | External API | 非法 endpoint 同时弹出两条错误,中英混用 | 已修复WTA-1922 Done |
| KF-BUG-010 | P3 / Minor | Retrieval | 有大量历史记录时仍显示“暂无测试记录” | 已修复WTA-1923 Done |
| KF-BUG-011 | P3 / Minor | List | 搜索无结果时列表全空,无“无结果”解释和清除指引 | 已修复WTA-1924 Done |
| KF-BUG-012 | P3 / Usability | Responsive | 390 px 下顶部功能导航超出视口,“设置”无明显可达性提示 | 已修复WTA-1925 Done |
| KF-BUG-013 | P2 / Normal | Service API | Key 已成功鉴权调用 200密钥列表“最后使用”仍持续显示“从未” | 已修复WTA-1926 Done |
| KF-BUG-014 | P1 / Major | Document upload | 合法 TXT/Markdown staged upload 全部报 `Internal Server Error`0 文档 | 复测阻塞staging 已成功claim 端点 404WTA-1928 未关闭 |
| KF-BUG-015 | P1 / Major | Upload validation | 0 B 文件被计为有效并启用提交422 仅显示英文通用错误 | 已修复WTA-1929 Done |
| KF-BUG-016 | P2 / Major | Upload recovery | 精确 15 MiB 上传 43+ 秒持续“正在上传…”,无超时/失败收敛 | 已修复WTA-1930 Done |
| KF-BUG-017 | P1 / Major | Quality CSV | 合法 2 行 CSV 预览正确,提交只报“未知错误”且 0 行落库 | 已修复WTA-1931 Done |
| KF-BUG-018 | P1 / Major | KnowledgeFS API | API Access 已启用但侧栏仅弹空白“不可用”,无 KFS 凭据路径 | 已修复WTA-1932 Done |
| KF-BUG-019 | P1 / Major | Research | 空库 Research 单次启动后无任务、阶段、结果或错误反馈 | 已修复WTA-1933 Done |
| 编号 | 优先级 | 模块 | 摘要 | 状态 |
| ---------- | -------------- | ---------------------- | ---------------------------------------------------------------------------- | --------------------------------------------------------- |
| KF-BUG-001 | P1 / Major | Retrieval | Fast/Deep 单次开始或重试生成两条记录/任务 | 已修复WTA-1914 Done |
| KF-BUG-002 | P1 / Major | Create | 41 字名称可提交,后端拒绝后误报“权限” | 已修复WTA-1915 Done |
| KF-BUG-003 | P1 / Major | Settings | 2001 字描述可提交,后端拒绝后误报“网络” | 已修复WTA-1916 Done |
| KF-BUG-004 | P1 / Major | Error handling | 不存在空间的 404 toast 暴露后端 API 路由 | 已修复WTA-1917 Done |
| KF-BUG-005 | P1 / Major | Website source | 抓取页数显示值与实际提交值静默不一致 | 已修复WTA-1918 Done |
| KF-BUG-006 | P2 / Major | Document detail | 详情内容已加载时同时出现 3 条相同英文 404 toast | 已修复WTA-1919 Done |
| KF-BUG-007 | P2 / Major | Metadata | 详情页点击“编辑”后按钮永久禁用,无编辑器和反馈 | 已修复WTA-1920 Done |
| KF-BUG-008 | P2 / Normal | Quality | 必填错误在输入合法值后不消失,查找证据只报“未知错误” | 已修复WTA-1921 Done |
| KF-BUG-009 | P2 / Normal | External API | 非法 endpoint 同时弹出两条错误,中英混用 | 已修复WTA-1922 Done |
| KF-BUG-010 | P3 / Minor | Retrieval | 有大量历史记录时仍显示“暂无测试记录” | 已修复WTA-1923 Done |
| KF-BUG-011 | P3 / Minor | List | 搜索无结果时列表全空,无“无结果”解释和清除指引 | 已修复WTA-1924 Done |
| KF-BUG-012 | P3 / Usability | Responsive | 390 px 下顶部功能导航超出视口,“设置”无明显可达性提示 | 已修复WTA-1925 Done |
| KF-BUG-013 | P2 / Normal | Service API | Key 已成功鉴权调用 200密钥列表“最后使用”仍持续显示“从未” | 已修复WTA-1926 Done |
| KF-BUG-014 | P1 / Major | Document upload | 合法 TXT/Markdown staged upload 全部报 `Internal Server Error`0 文档 | 复测阻塞staging 已成功claim 端点 404WTA-1928 未关闭 |
| KF-BUG-015 | P1 / Major | Upload validation | 0 B 文件被计为有效并启用提交422 仅显示英文通用错误 | 已修复WTA-1929 Done |
| KF-BUG-016 | P2 / Major | Upload recovery | 精确 15 MiB 上传 43+ 秒持续“正在上传…”,无超时/失败收敛 | 已修复WTA-1930 Done |
| KF-BUG-017 | P1 / Major | Quality CSV | 合法 2 行 CSV 预览正确,提交只报“未知错误”且 0 行落库 | 已修复WTA-1931 Done |
| KF-BUG-018 | P1 / Major | KnowledgeFS API | API Access 已启用但侧栏仅弹空白“不可用”,无 KFS 凭据路径 | 已修复WTA-1932 Done |
| KF-BUG-019 | P1 / Major | Research | 空库 Research 单次启动后无任务、阶段、结果或错误反馈 | 已修复WTA-1933 Done |
| KF-BUG-020 | P1 / Major | Workflow v2 UI | 从节点选择器新增 KnowledgeFS 检索后主编辑区空白,未处理 `AbortError` | 已修复WTA-1954 Done待部署后真实 Chrome 复测 |
| KF-BUG-021 | P1 / Blocker | Workflow v2 runtime | Settings UI 无 Workflow channel 开关channel/permissions 失败统一误报未绑定 | 已修复WTA-1953 Done待部署后真实运行复测 |
| KF-BUG-022 | P1 / Major | Workflow v2 filters | `created_after` / `created_before` 保存后静默丢失 | 已建单WTA-1956 Backlog |
| KF-BUG-023 | P2 / Normal | Workflow v2 filters | 最后一个 node kind 无法取消 | 已建单WTA-1955 Backlog |
| KF-BUG-024 | P2 / Normal | Workflow v2 validation | 未解析空间在草稿无持久警告,发布才显示原始英文与内部 ID | 已建单WTA-1957 Backlog |
### 4.1 修复验证
- Web14 个所属功能 spec、507 个测试全部通过;全量 `pnpm type-check` 通过。
- Dify API5 个相关测试文件、172 个测试全部通过;目标 Ruff 检查通过。
- KnowledgeFS APIGolden Question gateway 回归 5/5 通过API package TypeScript 检查通过。
- Workflow v2 Web6 个关联 spec 文件整体 22/22 通过,其中 16 项为 v2 直接断言、6 项为同一 hook spec 的通用节点元数据用例。
- Workflow v2 Dify API节点、admission、binding、execution、capability、broker、runtime、DTO、operation、controller 与 remote HTTP 共 13 个关联文件,文件整体 340/340 通过;部分 controller/DTO/remote 用例并非 v2 专属。这些仍是 mocked/fake/mock HTTP/进程内合同,不替代真实 KFS 正向链路。
- KF-BUG-020 专项:更宽的 Workflow 组合回归为 9 个 spec、27 个测试通过;回归证明 history 引用变化后 Workflow 子树仍保持挂载。根因是通用 `WorkflowHistoryStoreInitializer` 在约 500 ms 的 history 保存产生新对象后返回空内容并卸载整棵子树Console `AbortError` 是查询观察者随卸载取消的后果,而非 KnowledgeFS 请求根因。
- KF-BUG-020/021 最终组合Web 7 个 spec、70 个测试通过Dify API admission/node 18 个测试通过;全量 Web TypeScript 检查及目标 locale ESLint 通过。覆盖独立 Workflow Access 保存/失败回滚、四类 admission 错误、稳定 marker、运行表面映射与 24 个 locale 本地化。上述结果均为本地分层自动化,尚未替代部署后的真实 Chrome/Web/Service 正向召回。
- 补丁完整性:`git diff --check` 通过;本轮未创建 Git commit。
- Linear18 个已验证缺陷均更新为 `Done` 并指派给 `jyong`WTA-1928 保持未关闭并继续归属 Milestone `测试联调`
- LinearKF-BUG-020 / WTA-1954 与 KF-BUG-021 / WTA-1953 均已更新为 `Done` 并指派给 `jyong`KF-BUG-022024 分别为 WTA-1956、WTA-1955、WTA-1957状态保持 `Backlog`。五项均归属项目 `Make RAG Great Again`、Milestone `测试联调`WTA-1928 仍保持未关闭
### 4.2 Linear Issue 映射
以下缺陷均已创建到 Linear 项目 [Make RAG Great Again](https://linear.app/dify/project/make-rag-great-again-b9f26b73ca33/issues)Team 为 `WTA`,初始状态为 `Backlog`Milestone 为 `测试联调`。优先级映射为 P1 → High、P2 → Medium、P3 → Low。
| 缺陷 | Linear Issue | Linear 优先级 |
|---|---|---|
| KF-BUG-001 | [WTA-1914](https://linear.app/dify/issue/WTA-1914) | High |
| KF-BUG-002 | [WTA-1915](https://linear.app/dify/issue/WTA-1915) | High |
| KF-BUG-003 | [WTA-1916](https://linear.app/dify/issue/WTA-1916) | High |
| KF-BUG-004 | [WTA-1917](https://linear.app/dify/issue/WTA-1917) | High |
| KF-BUG-005 | [WTA-1918](https://linear.app/dify/issue/WTA-1918) | High |
| KF-BUG-006 | [WTA-1919](https://linear.app/dify/issue/WTA-1919) | Medium |
| KF-BUG-007 | [WTA-1920](https://linear.app/dify/issue/WTA-1920) | Medium |
| KF-BUG-008 | [WTA-1921](https://linear.app/dify/issue/WTA-1921) | Medium |
| KF-BUG-009 | [WTA-1922](https://linear.app/dify/issue/WTA-1922) | Medium |
| KF-BUG-010 | [WTA-1923](https://linear.app/dify/issue/WTA-1923) | Low |
| KF-BUG-011 | [WTA-1924](https://linear.app/dify/issue/WTA-1924) | Low |
| KF-BUG-012 | [WTA-1925](https://linear.app/dify/issue/WTA-1925) | Low |
| KF-BUG-013 | [WTA-1926](https://linear.app/dify/issue/WTA-1926) | Medium |
| KF-BUG-014 | [WTA-1928](https://linear.app/dify/issue/WTA-1928) | High |
| KF-BUG-015 | [WTA-1929](https://linear.app/dify/issue/WTA-1929) | High |
| KF-BUG-016 | [WTA-1930](https://linear.app/dify/issue/WTA-1930) | Medium |
| KF-BUG-017 | [WTA-1931](https://linear.app/dify/issue/WTA-1931) | High |
| KF-BUG-018 | [WTA-1932](https://linear.app/dify/issue/WTA-1932) | High |
| KF-BUG-019 | [WTA-1933](https://linear.app/dify/issue/WTA-1933) | High |
| 缺陷 | Linear Issue | Linear 优先级 | 状态 |
| ---------- | -------------------------------------------------- | ------------- | ---------------- |
| KF-BUG-001 | [WTA-1914](https://linear.app/dify/issue/WTA-1914) | High | Done |
| KF-BUG-002 | [WTA-1915](https://linear.app/dify/issue/WTA-1915) | High | Done |
| KF-BUG-003 | [WTA-1916](https://linear.app/dify/issue/WTA-1916) | High | Done |
| KF-BUG-004 | [WTA-1917](https://linear.app/dify/issue/WTA-1917) | High | Done |
| KF-BUG-005 | [WTA-1918](https://linear.app/dify/issue/WTA-1918) | High | Done |
| KF-BUG-006 | [WTA-1919](https://linear.app/dify/issue/WTA-1919) | Medium | Done |
| KF-BUG-007 | [WTA-1920](https://linear.app/dify/issue/WTA-1920) | Medium | Done |
| KF-BUG-008 | [WTA-1921](https://linear.app/dify/issue/WTA-1921) | Medium | Done |
| KF-BUG-009 | [WTA-1922](https://linear.app/dify/issue/WTA-1922) | Medium | Done |
| KF-BUG-010 | [WTA-1923](https://linear.app/dify/issue/WTA-1923) | Low | Done |
| KF-BUG-011 | [WTA-1924](https://linear.app/dify/issue/WTA-1924) | Low | Done |
| KF-BUG-012 | [WTA-1925](https://linear.app/dify/issue/WTA-1925) | Low | Done |
| KF-BUG-013 | [WTA-1926](https://linear.app/dify/issue/WTA-1926) | Medium | Done |
| KF-BUG-014 | [WTA-1928](https://linear.app/dify/issue/WTA-1928) | High | 未关闭 |
| KF-BUG-015 | [WTA-1929](https://linear.app/dify/issue/WTA-1929) | High | Done |
| KF-BUG-016 | [WTA-1930](https://linear.app/dify/issue/WTA-1930) | Medium | Done |
| KF-BUG-017 | [WTA-1931](https://linear.app/dify/issue/WTA-1931) | High | Done |
| KF-BUG-018 | [WTA-1932](https://linear.app/dify/issue/WTA-1932) | High | Done |
| KF-BUG-019 | [WTA-1933](https://linear.app/dify/issue/WTA-1933) | High | Done |
| KF-BUG-020 | [WTA-1954](https://linear.app/dify/issue/WTA-1954) | High | Done待部署实测 |
| KF-BUG-021 | [WTA-1953](https://linear.app/dify/issue/WTA-1953) | High | Done待部署实测 |
| KF-BUG-022 | [WTA-1956](https://linear.app/dify/issue/WTA-1956) | High | Backlog |
| KF-BUG-023 | [WTA-1955](https://linear.app/dify/issue/WTA-1955) | Medium | Backlog |
| KF-BUG-024 | [WTA-1957](https://linear.app/dify/issue/WTA-1957) | Medium | Backlog |
### KF-BUG-001Fast/Deep 单次操作重复提交
@ -233,37 +253,38 @@ QA 空间的 Fast 和 Deep 各执行过一次 0 文档检索并正常返回 0
## 5. 环境问题、受限项与待复测风险
| 编号 | 现象 | 当前判定 | 下一步 |
|---|---|---|---|
| ENV-001 | 页面显示模型消息额度为 0既有 `ceshi` 的 Fast/Deep 均 `Query generation failed` | 更像模型/额度环境阻塞QA 空库 Fast/Deep 的 0 结果链路可用 | 补充可用模型额度后复测真实答案和引用 |
| ENV-002 | 既有库 Research 流式步骤可见,最终“检索失败/未召回分段” | 链路启动正常,语料/模型不可用QA 空库另有静默失败缺陷 | 文件上传并建立索引后复测 |
| ENV-003 | Firecrawl 对 `https://example.com` 36+ 秒仍 0 页 | 未能区分 provider/网络/产品超时 | 有 provider 观测日志时复测;本轮 Stop 状态流转正常 |
| ENV-004 | Jina Reader 显示“集成未安装” | 环境能力缺失,非功能缺陷 | 安装并配置凭据后测试 |
| ENV-005 | Chrome 扩展最初拒绝文件选择 | **已解决**:用户开启 file URL 访问后多文件、Unicode 和 15 MiB 文件均可交给页面 | 无;后续失败已确认发生在应用 staging 层 |
| RISK-001 | 列表搜索实现可能只过滤已加载页 | 代码侧候选风险,当前只有 6 个空间无法实证 | 准备超过一页的数据后搜索末页项 |
| RISK-002 | 旧版 segment 无 `attachment_ids` 可能接口 500 但数据部分落库 | 后端静态审查候选 | 在可清理的 legacy 测试库通过 UI/API 复测 |
| RISK-003 | 旧版 metadata rename/delete 可能吞异常后表面成功 | 后端静态审查候选 | 每次操作后刷新并核对真实 metadata |
| RISK-004 | 删除仍被 App 使用的 legacy dataset 可能未调用 use-check | 后端静态审查候选 | 使用专用 App+dataset 验证防误删 |
| 编号 | 现象 | 当前判定 | 下一步 |
| -------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------- |
| ENV-001 | 页面显示模型消息额度为 0既有 `ceshi` 的 Fast/Deep 均 `Query generation failed` | 更像模型/额度环境阻塞QA 空库 Fast/Deep 的 0 结果链路可用 | 补充可用模型额度后复测真实答案和引用 |
| ENV-002 | 既有库 Research 流式步骤可见,最终“检索失败/未召回分段” | 链路启动正常,语料/模型不可用QA 空库另有静默失败缺陷 | 文件上传并建立索引后复测 |
| ENV-003 | Firecrawl 对 `https://example.com` 36+ 秒仍 0 页 | 未能区分 provider/网络/产品超时 | 有 provider 观测日志时复测;本轮 Stop 状态流转正常 |
| ENV-004 | Jina Reader 显示“集成未安装” | 环境能力缺失,非功能缺陷 | 安装并配置凭据后测试 |
| ENV-005 | Chrome 扩展最初拒绝文件选择 | **已解决**:用户开启 file URL 访问后多文件、Unicode 和 15 MiB 文件均可交给页面 | 无;后续失败已确认发生在应用 staging 层 |
| RISK-001 | 列表搜索实现可能只过滤已加载页 | 代码侧候选风险,当前只有 6 个空间无法实证 | 准备超过一页的数据后搜索末页项 |
| RISK-002 | 旧版 segment 无 `attachment_ids` 可能接口 500 但数据部分落库 | 后端静态审查候选 | 在可清理的 legacy 测试库通过 UI/API 复测 |
| RISK-003 | 旧版 metadata rename/delete 可能吞异常后表面成功 | 后端静态审查候选 | 每次操作后刷新并核对真实 metadata |
| RISK-004 | 删除仍被 App 使用的 legacy dataset 可能未调用 use-check | 后端静态审查候选 | 使用专用 App+dataset 验证防误删 |
## 6. 已执行功能覆盖
下表记录初始真实环境测试结果,用于保留原始证据;修复后的最新状态以第 4 节为准。
| 功能域 | 已实测内容 | 结果 |
|---|---|---|
| 入口/路由 | `/datasets?view=new`、Legacy/New 切换、刷新、列表回显、不存在 ID 深链 | 主流程通过404 toast 有泄露问题 |
| 列表 | 大小写不敏感搜索、无结果、创建者筛选/搜索/重置、新库排序 | 通过;无结果缺少空状态 |
| 创建 | 空库、名称空白/41/精确40字、描述、only_me、异步加载后进入 Sources | 合法创建通过;超长校验失败 |
| 概览 | 无数据 onboarding、24h/30d 指标、需关注分页、最近活动抽屉与运营者筛选、资产图谱 | 通过 |
| 数据源目录 | Website/Online Documents/DriveFirecrawl/Jina/WaterCrawl/Notion/Google Docs/Confluence/Drive/OneDrive/S3 入口 | 目录可用;部分集成未安装 |
| Website | URL 格式、抓取选项、最大页数边界、实际 Firecrawl preview、Stop、Retry 入口、草稿离开确认 | Stop 通过页数校验失败preview 环境阻塞 |
| 文档列表/上传 | Ready/Failed 筛选、搜索、无结果、任务抽屉、选择/批量操作、行菜单、重命名;真实 TXT/MD/Unicode/0 B/15 MiB/15 MiB+1/`.exe` | 列表主流程通过;合法 staging 失败、空文件校验和大文件恢复异常 |
| 文档详情 | 内容加载、metadata 区、编辑入口 | 内容加载成功,同时有重复 404metadata 编辑异常 |
| Retrieval | 空白输入、2000 字 UI 上限属性、Fast/Deep/ResearchStart、Retry、记录、空库 0 结果、Research 流式阶段 | QA Fast/Deep 空结果通过;既有库重复/额度失败QA Research 静默 |
| Quality | 空状态、参考问题/问题案例 tab、新建必填校验、创建草稿、编辑、选择、2 行 CSV 预览与提交 | 创建/编辑与 CSV 解析通过CSV 提交未知错误、校验清除异常 |
| Settings | 名称 40/41、描述 2000/2001、可见权限、partial 零成员、API Access off/on/off 持久化、Fast/Deep、Top K 0/1/10/11、Rerank/threshold 依赖 | API Access 已恢复 off描述超长错误处理失败 |
| API 入口 | External Knowledge APIDataset Service API key 创建/正负鉴权KFS admission Web/API 域名;空间 API Access | Dataset key 200/错误 key 401KFS admission 对旧 key 返回结构化 401空间 API 面板不可用;最后使用不更新 |
| 响应式 | 390×844 下上传页、顶部功能导航 | 内容可用;导航超出视口待改进 |
| 功能域 | 已实测内容 | 结果 |
| ------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 入口/路由 | `/datasets?view=new`、Legacy/New 切换、刷新、列表回显、不存在 ID 深链 | 主流程通过404 toast 有泄露问题 |
| 列表 | 大小写不敏感搜索、无结果、创建者筛选/搜索/重置、新库排序 | 通过;无结果缺少空状态 |
| 创建 | 空库、名称空白/41/精确40字、描述、only_me、异步加载后进入 Sources | 合法创建通过;超长校验失败 |
| 概览 | 无数据 onboarding、24h/30d 指标、需关注分页、最近活动抽屉与运营者筛选、资产图谱 | 通过 |
| 数据源目录 | Website/Online Documents/DriveFirecrawl/Jina/WaterCrawl/Notion/Google Docs/Confluence/Drive/OneDrive/S3 入口 | 目录可用;部分集成未安装 |
| Website | URL 格式、抓取选项、最大页数边界、实际 Firecrawl preview、Stop、Retry 入口、草稿离开确认 | Stop 通过页数校验失败preview 环境阻塞 |
| 文档列表/上传 | Ready/Failed 筛选、搜索、无结果、任务抽屉、选择/批量操作、行菜单、重命名;真实 TXT/MD/Unicode/0 B/15 MiB/15 MiB+1/`.exe` | 列表主流程通过;合法 staging 失败、空文件校验和大文件恢复异常 |
| 文档详情 | 内容加载、metadata 区、编辑入口 | 内容加载成功,同时有重复 404metadata 编辑异常 |
| Retrieval | 空白输入、2000 字 UI 上限属性、Fast/Deep/ResearchStart、Retry、记录、空库 0 结果、Research 流式阶段 | QA Fast/Deep 空结果通过;既有库重复/额度失败QA Research 静默 |
| Quality | 空状态、参考问题/问题案例 tab、新建必填校验、创建草稿、编辑、选择、2 行 CSV 预览与提交 | 创建/编辑与 CSV 解析通过CSV 提交未知错误、校验清除异常 |
| Settings | 名称 40/41、描述 2000/2001、可见权限、partial 零成员、API Access off/on/off 持久化、Fast/Deep、Top K 0/1/10/11、Rerank/threshold 依赖 | API Access 已恢复 off描述超长错误处理失败 |
| API 入口 | External Knowledge APIDataset Service API key 创建/正负鉴权KFS admission Web/API 域名;空间 API Access | Dataset key 200/错误 key 401KFS admission 对旧 key 返回结构化 401空间 API 面板不可用;最后使用不更新 |
| Workflow Knowledge Retrieval v2 | 节点可见、DSL 导入/导出、空间搜索与 1/6 选择、四种 mode 表面、Top N、filters、输出变量、16000/16001 查询、发布/版本/binding、完整/单步/Web/Service blocking/streaming、日志、key 撤销 | 初测配置和控制面大部通过并确认 KF-BUG-020024020/021 已完成代码修复和专项回归022024 Backlog真实召回仍待部署及 channel/permissions-ready 环境复测 |
| 响应式 | 390×844 下上传页、顶部功能导航 | 内容可用;导航超出视口待改进 |
## 7. 暂未执行的破坏性/需授权用例
@ -274,6 +295,7 @@ QA 空间的 Fast 和 Deep 各执行过一次 0 文档检索并正常返回 0
3. 基础 Quality CSV 初测可预览但无法导入KF-BUG-017 的“匹配能力不可用时保存草稿”已完成代码修复和 API 回归。500/501 行、1 MiB 边界、中文表头和部分错误恢复仍需部署后实链路复测。
4. QA API Access on/off 与恢复已完成。KF-BUG-018 已补齐 KnowledgeFS 专属 credential 的创建、列表、撤销及 admission endpoint 说明;部署后仍需在真实环境执行两步 admission+SSE现有 Dataset Service API Key 按安全边界继续应被 401 拒绝。
5. 永久清理仍需操作前确认:删除 1 条参考问题、1 个已停止 Firecrawl 草稿和整个 QA 空间;撤销临时 Dataset Service API Key。
6. Workflow v2 的 KF-BUG-020/021 修复需先部署,再在 Settings 启用 `workflow_enabled=true`,并提供 permissions ready、Capability v2 可达且含已索引唯一 marker 的空间,才能执行 WF2-LIVE-001015WF2-LIVE-016018 需先定义/实现取消、error strategy 和 retry 支持。当前不能把专项单元/组件测试记作这些真实运行断言的端到端通过。
## 8. 自动化覆盖现状
@ -281,12 +303,16 @@ QA 空间的 Fast 和 Deep 各执行过一次 0 文档检索并正常返回 0
- Dify 后端 KnowledgeFS 相关约 511 个 Python test function`api/tests/integration_tests` 没有真实 KnowledgeFS 集成链路覆盖。
- 独立 `knowledge-fs/` 约 4131 个 TypeScript test declaration大部分 E2E 仍使用 in-memory/fake/stub。
- 现有 Cucumber 只覆盖旧 Dataset API 和少量 Knowledge Retrieval 节点,没有 `/datasets?view=new` 的真实 Chrome E2E。
- 本轮已执行 6 个 Workflow v2 Web 关联 spec文件整体 22/22其中 16 项为 v2 直接断言)和 13 个 Dify API 关联测试文件(文件整体 340/340部分非 v2 专属);仍未发现真实 Workflow → App admission/capability → KnowledgeFS `/retrieval-tests` 的跨服务 E2E。
- 结论:当前最大缺口是登录态真实 Chrome + Dify BFF + KnowledgeFS + 对象存储 + 解析/索引 + 模型 + provider 的跨服务链路。
## 9. 发布建议
1. 发布门禁继续阻断唯一未完成的 KF-BUG-014部署当前 API 后必须通过 TXT/Markdown `staging → claim 202 → ready`。KF-BUG-001013、015019 已完成代码修复与所属层回归,仍应随同部署进行关键真实链路复测
1. KF-BUG-014 仍是全量发布门禁,需通过 TXT/Markdown `staging → claim 202 → ready`。Workflow v2 的 KF-BUG-020/021 已完成代码修复,但发布前仍必须部署后用真实 Chrome 验证新增节点持续可见,并在启用的 Workflow channel 上由 Web/Service 返回唯一 marker 与 citationKF-BUG-022 的时间过滤静默丢失也应在发布前修复
2. 为所有 KnowledgeFS API 建立统一的错误码→本地化字段错误映射,不直接显示后端原始 message。
3. 为 query admission/stream 和 UI Start/Retry 增加端到端幂等性用例,以记录 ID、trace ID 和计费事件三重断言“一次操作只有一次执行”。
4. 为新版列表、创建、文件上传、真实索引、Fast/Deep/Research 引用、Quality replay 增加 Playwright/Cucumber 浏览器回归。
5. 在测试环境配置一个有额度的固定模型和一个稳定的合成 provider避免功能回归长期被“额度为 0”阻塞。
6. 为 Workflow v2 建立登录态 E2E创建节点并等待超过 history 保存窗口 → 确认编辑器未卸载 → 选择空间 → 启用 Workflow Access → 发布 → Web/Service 执行 → 断言每空间恰好一次 JSON `/retrieval-tests` → 核对 marker/citation → 撤权后旧 capability 立即失败;并覆盖四类 admission marker 的本地化展示。
7. 明确 Workflow v2 是否支持 stop/cancel、fail-branch/default-value 和 retry若支持先补 cancellation signal 与节点 allowlist再执行 WF2-LIVE-016018若不支持应在产品文档和 UI 中明确说明。
8. 修复并回归 `KNOWLEDGE_FS_BASE_URL` 未配置时的节点错误边界composition root 会 fail closed但当前 `_service()`/draft runtime 解析可能绕过 v2 的受控错误映射。

View File

@ -0,0 +1,223 @@
# Workflow Knowledge Retrieval v2 / KnowledgeFS 功能补测报告
## 1. 结论
本轮已把原报告中 `TC-RE-022`、`TC-AU-015`、`TC-AU-016` 对应的 Workflow `knowledge-retrieval-v2` 未测试范围扩展为独立矩阵,并完成真实 Chrome、已发布 Web App、Workflow Service API blocking/streaming、DSL、发布绑定和自动化合同测试。
已验证可用的部分:节点可见性、有效 DSL 导入/导出、刷新恢复、查询变量绑定、空间搜索与多选、Fast/Deep/Research/跟随空间的配置保存、Top N、绝大多数 metadata filter 的配置持久化、输出变量、空白与 16000/16001 查询边界、未解析空间发布拦截、Workflow 发布版本、绑定精确同步、运行日志,以及 Service API 失败响应合同。真实 mode 与 filter 召回效果未通过,仍属于后文 `ENV-BLOCKED`
初测环境仍不能判定 Workflow KnowledgeFS retrieval 可用。有效 Workflow 发布成功后KnowledgeFS Overview 的“关联应用”为 `1`,证明绑定记录已经创建;但当时草稿完整运行、单节点运行、已发布 Web App、Service API blocking 和 Service API streaming 全部稳定失败为:
```text
KnowledgeFS Space <control-space-id> is not bound to this workflow
```
QA 空间的 API Access 临时开启/恢复也已测试;按合同该开关只控制 Service API 与 Agent、会保留原 `workflow_enabled`,因此它不应解除 Workflow 阻塞,也不作为 runtime 缺陷证据。初测部署的 Settings UI 没有可发现的 Workflow channel 开关Overview 同时显示 `Knowledge-space permissions are not ready`。因此真实 Fast/Deep/Research 召回、引用、真实 filters、多空间合并和 capability 撤权继续标记为 `ENV-BLOCKED`,不能用 mock 单测冒充通过。
本轮新增 5 个已确认缺陷:`KF-BUG-020``KF-BUG-024`,均已创建到 Linear 项目 `Make RAG Great Again`、Milestone `测试联调`。KF-BUG-020/021 已完成代码修复、专项自动化回归和 Linear 关闭KF-BUG-022024 保持 Backlog。020 修复了通用 Workflow history 初始化器卸载子树的问题021 增加独立 Workflow Access 控件、细分 admission 原因,并将稳定错误 marker 映射为 24 个 locale 的本地化消息。两项修复尚未部署到测试环境,所以下文保留原始浏览器 FAIL且仍需真实 Chrome/Web/Service 正向复测。
## 2. 环境与测试对象
- Console`https://new-rag.dify.dev`
- Web App`https://new-rag-app.dify.dev`
- Service API`https://new-rag-api.dify.dev/v1`
- 浏览器:用户已登录的 Google Chrome
- 角色Workspace Owner
- 有效测试 Workflow`KF-WF-V2-LIVE-CESHI-20260811`
- App ID`98bcd2c4-e371-405f-a972-d21bb41b5fa2`
- 未解析空间 Workflow`KF-WF-V2-UNRESOLVED-20260811`
- App ID`5c6687c6-4b30-4abf-81e2-efc4d9fa1514`
- UI 新增节点复现 Workflow`KF-WF-V2-QA-20260811`
- App ID`fbed98e7-5370-4eca-a2a9-f128ce69a50e`
- 既有空间 `ceshi``019fac9f-bfb0-75ee-9af5-252ebafbac1c`
- QA 空间:`019fef0d-732b-73d4-95e6-e943be794403`
- 当前 workspace 仅有 6 个可选空间;线上 10/11 空间边界由组件和后端合同测试补齐。
- 有效 DSL fixture[kf-wf-v2-live-ceshi.yml](./test-data/kf-wf-v2-live-ceshi.yml)
- 未解析空间 fixture[kf-wf-v2-unresolved-space.yml](./test-data/kf-wf-v2-unresolved-space.yml)
## 3. 已执行矩阵
| ID | P | 场景 | 期望 | 结果 |
| ------- | --- | ----------------------------------------------------------- | ------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- |
| WF2-001 | P0 | feature 开启时打开添加节点面板 | 显示“KnowledgeFS 检索” | PASS |
| WF2-002 | P0 | Start 后从节点选择器点击“KnowledgeFS 检索” | 创建节点并打开配置面板 | **初测 FAIL**;主编辑区变为空白,未处理 `AbortError`,见 KF-BUG-020代码已修复并通过专项回归待部署后真实 Chrome 复测 |
| WF2-003 | P0 | 打开通过 DSL 已存在的 v2 节点 | 配置面板正常加载 | PASS6 个空间、当前选择和 settings 摘要正常 |
| WF2-004 | P0 | 导入 Start→v2→End 合法 DSL | 创建 Workflow保留 v2 节点 | PASS |
| WF2-005 | P0 | 导入后刷新 | 图、空间、模式、Top N 和 End 映射恢复 | PASS |
| WF2-006 | P0 | 导出已保存 DSL | 保留 `control_space_ids`、filters、mode、top_n、result 输出 | PASS |
| WF2-007 | P0 | 导入引用不存在空间的 DSL | 草稿可导入,但明确保留 unresolved warning | **FAIL-PARTIAL**;导入成功,面板和检查清单无持久警告,见 KF-BUG-024 |
| WF2-008 | P0 | 发布未解析空间 Workflow | 发布失败且不创建 published snapshot | PASS保持“未发布”明确列出缺失 ID |
| WF2-009 | P0 | 运行未解析空间草稿 | fail closed不触碰 KFS | PASS`draft binding could not be enabled` |
| WF2-010 | P0 | 绑定 `Start.query` | 面板显示 string selector刷新不丢失 | PASS |
| WF2-011 | P1 | 搜索空间并清除搜索 | 过滤正确,键盘可清除并恢复列表 | PASS |
| WF2-012 | P0 | 取消全部空间 | `0/10` 且检查清单阻止发布 | PASS“KnowledgeFS 空间不能为空” |
| WF2-013 | P0 | 选择 1 个和全部 6 个可见空间 | 计数、checked 状态和节点摘要一致 | PASS`1/10`、`6/10` |
| WF2-014 | P0 | 空间上限 10/11、去重、顺序 | 10 允许11 拒绝,重复 ID 去重 | PASS-AUTO当前线上只有 6 个,未伪造 live 10/11 |
| WF2-015 | P0 | Fast、Deep、Research、跟随空间配置 | 均可保存;跟随配置不写字面 `auto` | PASS刷新验证 Deep其他模式即时保存验证 |
| WF2-016 | P0 | DSL 使用字面 `mode: auto` | 合同拒绝 | PASS-AUTOAuto 语义是省略 mode/`space-default` |
| WF2-017 | P0 | Top N = 0/1/100/101 | 仅 1100 生效 | PASS0/101 保留原值 51/100 精确显示 |
| WF2-018 | P1 | document type/entity/freshness/language/source/tags filters | 逗号值解析、保存、刷新和 DSL 导出一致 | PASS |
| WF2-019 | P0 | created after/before 输入合法 datetime | 保存、刷新和 DSL 导出保留 | **FAIL**刷新后为空DSL 无字段,见 KF-BUG-022 |
| WF2-020 | P1 | 同时选择 section/table node kinds | 多选和 DSL 导出一致 | PASS |
| WF2-021 | P1 | 逐个取消 node kinds最后取消剩余项 | 最后一项也可清除 | **FAIL**;最后一项永久 checked见 KF-BUG-023 |
| WF2-022 | P0 | 展开输出变量 | 显示 result 与 metrics 完整合同 | PASSresult/content/title/metadata、metrics/mode/total_ms/degradation_flags |
| WF2-023 | P0 | query 仅空格 | trim 后拒绝且 0 token | PASS`must not be empty` |
| WF2-024 | P0 | query 精确 16000 字符 | 通过长度校验 | PASS进入下一步绑定校验 |
| WF2-025 | P0 | query 16001 字符 | 在上游调用前拒绝 | PASS`at most 16000 characters` |
| WF2-026 | P0 | 未发布草稿完整运行 | debugger/account 自动 upsert 所选 binding 后执行 retrieval | **初测 FAIL**admission 统一返回未绑定,无法从 UI 区分 join、channel 或 permissions 状态,归入 KF-BUG-021代码已细分错误并本地化待部署实测 |
| WF2-027 | P0 | 发布合法 Workflow | 创建 published snapshot 并同步 binding | PASSUI 操作成功Overview 关联应用 0→1 |
| WF2-028 | P0 | 从 `ceshi` 切到 QA 后发布 | 新 binding active旧 binding revoke | PASS`ceshi` 关联应用 1→0 |
| WF2-029 | P0 | 切回 `ceshi` 再发布 | QA 解绑、`ceshi` 恢复且不重复 | PASS`ceshi` 关联应用恢复为 1 |
| WF2-030 | P1 | 查看版本历史 | 每次发布产生完整快照 | PASS10:10、10:25、10:27 三个版本可见 |
| WF2-031 | P0 | QA API Access off→on→运行→off | 保存即时,测试后恢复 | PASS最终 `未启用` |
| WF2-032 | P0 | 发布后完整草稿运行 | 已绑定 Workflow 可检索或准确说明 channel/permission 问题 | **初测 FAIL**;误报未绑定,见 KF-BUG-021错误分类代码已修复真实正向召回待部署复测 |
| WF2-033 | P0 | “运行此步骤” | 与完整运行同一绑定/错误合同 | **初测 FAIL-BLOCKED**;稳定误报未绑定,无法到达 KFS代码已修复环境阻塞仍未解除 |
| WF2-034 | P0 | 已发布 Web App 运行 | 返回 evidence 或真实 no-result | **初测 FAIL-BLOCKED**;稳定误报未绑定;代码已修复,待部署后真实 Web App 复测 |
| WF2-035 | P0 | Service API blocking | HTTP 200`data.status/error/outputs` 合同完整 | PASS-NEGATIVE`failed`、同一绑定错误、`outputs={}`、2 steps、0 tokens |
| WF2-036 | P0 | Service API streaming | workflow/node terminal SSE 顺序和错误一致 | PASS-NEGATIVEstart succeededv2 node failedworkflow failed |
| WF2-037 | P0 | 撤销临时 App API key 后重试 | 立即 401 | PASS完整 secret 未写入报告 |
| WF2-038 | P1 | 日志列表和详情 | Web/API 运行可查,错误与运行一致 | PASS5 条失败记录,详情显示绑定错误 |
| WF2-039 | P0 | 自动化合同回归 | UI、节点、绑定、capability、remote HTTP 和 operation 测试全绿 | PASSWeb 6 个关联 spec 整体 22/22API 13 个关联文件整体 340/340 |
## 4. 当前无法完成但未遗漏的真实运行矩阵
下列项目均已准备步骤和断言。WF2-LIVE-001015 需要先部署 KF-BUG-021 修复,通过新控件设置 `workflow_enabled=true`,并提供 permissions ready、Capability v2 可达、含唯一 marker 且已索引的空间;在此之前仍标记为 15 个 `ENV-BLOCKED`。WF2-LIVE-016 缺少节点到同步 remote 的 cancellation signalWF2-LIVE-017018 则因为产品未给 v2 节点开放 error strategy/retry 配置而无法执行3 个规格/实现阻塞状态不变,不能误归因为环境问题。
| ID | 场景与验收标准 | 状态 |
| ------------ | ------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- |
| WF2-LIVE-001 | Fast 返回唯一 marker、最终 score 和正确 citation | ENV-BLOCKED |
| WF2-LIVE-002 | Deep 返回同一 marker 的深度召回证据 | ENV-BLOCKED |
| WF2-LIVE-003 | Research 仍走同步 JSON evidence retrieval不创建 Console Research task/SSE | ENV-BLOCKED |
| WF2-LIVE-004 | 省略 mode 使用每个 space Settings多空间可汇总为 mixed | ENV-BLOCKED |
| WF2-LIVE-005 | 合法无结果查询成功返回 `result=[]`,不是 failed | ENV-BLOCKED |
| WF2-LIVE-006 | 多空间按最终 score 全局排序、全局 top_n、同分稳定 | ENV-BLOCKED |
| WF2-LIVE-007 | tags/document/source/language/freshness/node kind/date filters 真正缩小结果 | ENV-BLOCKED |
| WF2-LIVE-008 | citation 保留 document/version/hash/section/page/offset | ENV-BLOCKED |
| WF2-LIVE-009 | metrics 汇总每空间 mode、候选数、耗时和 degradation | ENV-BLOCKED |
| WF2-LIVE-010 | 每个空间恰好一次 JSON `POST /knowledge-spaces/{id}/retrieval-tests` | ENV-BLOCKED |
| WF2-LIVE-011 | 不调用 KFS `/queries`、SSE 或 Research task | ENV-BLOCKED静态合同/单测已通过 |
| WF2-LIVE-012 | draft、published Web、Service API、Trigger 对同 snapshot 返回等价 evidence | ENV-BLOCKED |
| WF2-LIVE-013 | binding/channel/revision 撤权在下一次 admission 立即 fail closed | ENV-BLOCKED |
| WF2-LIVE-014 | 已签发旧 capability 在 epoch 变化后被真实 KFS 拒绝 | ENV-BLOCKED |
| WF2-LIVE-015 | 4/10 空间真实并发、超时、无重复 capability/HTTP | ENV-BLOCKED线上仅 6 个空间 |
| WF2-LIVE-016 | Workflow stop/cancel 对在途 retrieval HTTP 的终止语义 | SPEC/IMPLEMENTATION-BLOCKED当前节点用同步 ThreadPool/remote未传 cancellation signal需先定义并实现语义 |
| WF2-LIVE-017 | v2 节点配置 fail-branch/default-value 后,上游失败按策略继续且暴露受控 `error_type/error_message` | NOT-SUPPORTED/SPEC-BLOCKED当前 UI 的 error-handle node allowlist 不包含 Knowledge Retrieval v2 |
| WF2-LIVE-018 | v2 节点开启 retry 后,暂态失败严格按次数重试且不会重复 capability/计费 | NOT-SUPPORTED/SPEC-BLOCKED当前 UI 的 retry node allowlist 不包含 Knowledge Retrieval v2 |
### 4.1 已补齐的本地边界与故障合同
以下项目通过实际运行的 13 个 Dify API 关联测试文件验证,文件整体 340/340 通过;其中 controller/DTO/remote 文件同时包含非 v2 的 KnowledgeFS 用例。它们属于分层自动化结果,不能提升为真实 KFS E2E但可排除未执行的输入、绑定和 HTTP 错误合同遗漏。
| ID | 场景 | 结果 |
| ---------------- | -------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------- |
| WF2-AUTO-001 | space ID trim/去重、110 上限、0/11 拒绝query selector 与 Top N 合同 | PASS-AUTO |
| WF2-AUTO-002 | mode 仅 Fast/Deep/Research/省略;字面 `auto` 拒绝filters 每类上限和去重 | PASS-AUTO |
| WF2-AUTO-003 | 未绑定、已撤销、错误 app、跨租户、Agent/Workflow channel 关闭时,在 capability/remote I/O 前 fail closed | PASS-AUTO |
| WF2-AUTO-004 | publish binding 创建/重放/重新激活、精确同步、移除空间撤权、目标授权失败整批不变更 | PASS-AUTO |
| WF2-AUTO-005 | debugger/account 自动 upsert 所选 bindingpublished Web/Service 永不自动补 binding | PASS-AUTO |
| WF2-AUTO-006 | `retrieveEvidence` 精确签发 read capability并只调用 JSON `POST /knowledge-spaces/{id}/retrieval-tests` | PASS-AUTO |
| WF2-AUTO-007 | HTTP 400/409/413/422 映射 request rejected404、500、连接失败映射受控错误 | PASS-AUTO |
| WF2-AUTO-008 | 错误 media type、无效 JSON、请求/响应超限、manifest/path/header 不匹配均在边界拒绝并关闭响应 | PASS-AUTO |
| WF2-AUTO-009 | 2xx 响应缺失/畸形 evidence、citation 或 metrics 时 Pydantic 合同拒绝 | PASS-AUTO |
| WF2-AUTO-010 | 多空间全局按 score 合并、同分稳定、全局 Top N、mixed metrics、空结果成功 | PASS-AUTO |
| WF2-AUTO-011 | 多空间并发有界;任一空间 unavailable 时整个节点失败且 `outputs={}`,不泄漏部分结果 | PASS-AUTO |
| WF2-AUTO-012 | Capability v2/cutover 未就绪时在签发前 fail closed | PASS-AUTO |
| WF2-CONTRACT-001 | `KNOWLEDGE_FS_BASE_URL` 未配置时Workflow v2 对外稳定映射为 RetrievalUnavailable | CONTRACT-GAPruntime factory 会在 I/O 前失败,但 `_service()`/draft runtime 解析发生在节点内部错误映射之外,不能由现有单测证明公开错误稳定 |
## 5. 新确认缺陷
以下五项均归属 Linear 项目 `Make RAG Great Again`、Milestone `测试联调`。020/021 已完成并指派给 `jyong`022024 保持 Backlog。
### KF-BUG-020从节点选择器新增 KnowledgeFS 检索导致 Workflow 主编辑区空白
- 严重度P1 / Major
- Linear[WTA-1954](https://linear.app/dify/issue/WTA-1954)HighDone
- 复现率2/2
- 步骤:空白 Workflow → 选择“用户输入”Start → 添加节点 → 点击“KnowledgeFS 检索”。
- 实际:`<main>` 变为空白侧栏仍在没有局部错误、Retry 或恢复入口。Console 记录未处理 `AbortError: signal is aborted without reason`。刷新后新增节点未保存。
- 对照:通过 DSL 已存在的 v2 节点可以打开配置面板,说明故障集中在新增节点生命周期。
- 根因:并非 KnowledgeFS 节点、collaboration 或查询本身。通用 `WorkflowHistoryStoreInitializer` 订阅 history并以对象引用变化作为“初始化异常”条件新增节点触发的 history 保存约 500 ms 后写入新对象initializer 随即返回空内容并卸载整棵 Workflow 子树。TanStack Query 的 `AbortError` 来自观察者随组件卸载取消,是故障后果。
- 修复验证initializer 只在首次 history 注入完成前阻止渲染,后续 history 引用变化不再卸载子树;更宽的 Workflow 组合回归 9 个 spec、27 个测试通过。当前尚未部署,因此未把本地自动化记为真实 Chrome 复测通过。
### KF-BUG-021Settings UI 缺少 Workflow channel 开关channel/permissions 失败被统一误报为未绑定
- 严重度P1 / Blocker
- Linear[WTA-1953](https://linear.app/dify/issue/WTA-1953)HighDoneassignee `jyong`
- 证据:发布后 `ceshi` Overview 的关联应用为 1换空间发布后精确变 0再切回恢复 1证明 binding sync 生效。
- 实际:未发布 debugger/account 草稿会经过自动 upsert 路径,发布图也已有真实 binding但完整草稿、单步、Web App、Service blocking、Service streaming 都只返回相同“not bound”无法区分 channel disabled、permissions not ready 与 join 缺失。
- 影响:初测部署的产品 UI 没有可发现的方式把 Workflow channel 从默认关闭改为开启Workflow v2 因而无法完成真实召回统一“not bound”还会把 channel/permission 未就绪误导为 binding sync 失败。QA API Access 仅控制 Service/Agent按合同不应承担开启 Workflow 的作用。
- 修复Settings 增加独立 Workflow Access 开关并保存 `workflow_enabled`,同时保持 API/Agent/MCP 值;失败时回滚完整 access draftRetry 仍提交原意图。后端 admission 将 binding 未启用、Workflow channel 关闭、space 不可用、authorization 未就绪分为四类,并在节点错误中携带稳定 marker前端在 Workflow 运行、聊天、Web App/text-generation 等表面映射为 24 个 locale 的本地化消息,未知错误保持原样。
- 修复验证020/021 最终 Web 组合 7 个 spec、70 个测试通过Dify API admission/node 18 个测试通过;全量 Web TypeScript 检查及目标 locale ESLint 通过。真实 Workflow 正向召回仍待部署后验证。
### KF-BUG-022created after/before 过滤器保存后静默丢失
- 严重度P1 / Major
- Linear[WTA-1956](https://linear.app/dify/issue/WTA-1956)HighBacklog
- 步骤:输入 `2026-01-01T00:00``2026-12-31T23:59`,等待自动保存并刷新。
- 实际:输入立即可见;刷新后两个字段为空,导出 DSL 也没有 `created_after/created_before`。其他 filter 同批正常保存。
- 影响:用户以为时间范围生效,实际检索未应用,可能返回超出预期的数据。
### KF-BUG-023最后一个 node kind filter 无法取消选择
- 严重度P2 / Normal
- Linear[WTA-1955](https://linear.app/dify/issue/WTA-1955)MediumBacklog
- 步骤:选择 `section``table`,再逐个取消。
- 实际:可以从两项减少为一项,但最后一项重复鼠标点击、键盘 Space、刷新后再点击都保持 checked。
- 影响:用户无法恢复为“不限制节点类型”,只能重建/修改 DSL。
### KF-BUG-024未解析 KnowledgeFS 空间在草稿中无持久警告,发布才暴露原始英文错误
- 严重度P2 / Normal
- Linear[WTA-1957](https://linear.app/dify/issue/WTA-1957)MediumBacklog
- 实际DSL 导入成功,空间显示为原始 UUID 和 `— · Top K — · 重排 —`,检查清单仍为 0直到发布才显示英文 `KnowledgeFS Spaces are missing or inactive...`
- 影响:导入/迁移后的不可用引用难以及早发现,发布反馈未本地化且直接暴露内部 control-space ID。
## 6. 自动化回归
### Web
```text
Test Files 6 passed (6)
Tests 22 passed (22)
```
其中 16 项为 v2 直接断言v2 目录 5 个 spec 共 15 项,加节点元数据 hook 中 1 项 feature-gate 断言;同一 hook spec 的其余 6 项是通用节点元数据用例。覆盖节点注册/feature gate、默认值、card、panel、config helpers、use-config均使用 mocked query/provider 和 happy-dom不证明真实新增节点生命周期、发布 binding 或 KFS upstream。
### Dify API
```text
265 passed, 3 warnings in 25.87s
75 passed in 18.88s
```
前一组覆盖 v2 node、publish binding event、admission、app binding management、app execution/capability、broker、DTO、product operations、runtime 与 controller后一组覆盖 product remote HTTP 的网络、状态码、media type、JSON、大小和资源关闭合同。它们验证 10/11 空间、`auto` 拒绝、多空间排序/并发、空结果、绑定原子同步、JSON `/retrieval-tests` transportcapability/remote 仍为 fake、mock HTTP 或进程内边界。
### KF-BUG-020/021 修复专项
```text
KF-BUG-020 broader Web 9 spec / 27 tests passed
020/021 final Web 7 spec / 70 tests passed
020/021 final API 18 tests passed
Web type-check passed
Target locale lint passed
```
020 的回归覆盖首次 history 初始化与后续 history 新引用证明子树不再因正常保存而卸载。021 的回归覆盖独立开关保存、失败回滚/重试、四类 admission 错误、稳定 marker 和所有用户运行表面的本地化映射。它们是代码层修复证据,不改变 WF2-002、026、032034 的原始浏览器结果,也不解除 15 个 `ENV-BLOCKED` 和 3 个规格/实现阻塞。
## 7. 清理与环境恢复
- QA 空间 API Access 已恢复为 `未启用`
- 临时 Workflow App API key 已删除;删除后同 key 请求返回 HTTP 401。
- `ceshi` 最终关联应用恢复为 1测试 Workflow 最终重新发布为只引用 `ceshi`
- 未删除任何既有知识库、文档、数据源或检索记录。
- 保留 3 个名称明确的合成 Workflow便于研发直接复现未解析空间 Workflow 保持未发布。
- 工作区模型消息额度仍显示 0但本轮 Workflow 的 `not bound` 发生在 Dify 侧 app admission 阶段、早于 KFS remote/retrieval/model 执行,因此模型额度不是这些失败的成因。
## 8. 发布门禁建议
1. KF-BUG-020/021 已完成代码修复;发布前先部署,再用真实 Chrome 验证新增任意节点后等待超过 history 保存窗口仍不白屏,并用新的 Workflow Access 开关完成草稿、单步、Web App、Service blocking/streaming 正向召回。
2. KF-BUG-022 仍是发布风险;修复后必须用刷新、导出 DSL 和真实 filtered retrieval 三重验证,而不是只断言输入框。
3. 在部署后分别制造 missing binding、channel disabled、permissions not ready、space inactive确认所有运行表面都展示对应的本地化错误且不泄露内部信息。
4. 建立登录态 Playwright/Cucumber E2E创建 Workflow → 添加 v2 → 选择空间 → 发布 → Web/Service 运行 → 断言 marker/citation → 撤权后立即失败。
5. KFS upstream 断言必须明确为 JSON `retrieveEvidence`Dify Service API 可以使用 SSE 包装 Workflow 事件,但这不是 KFS `/queries` SSE。
6. 补齐 `KNOWLEDGE_FS_BASE_URL` 缺失时的节点级错误映射回归,确保所有运行表面得到受控 unavailable而不是未捕获异常或 generic 500。

View File

@ -0,0 +1,75 @@
app:
description: Knowledge Retrieval v2 live QA workflow using the existing ceshi KnowledgeFS space.
icon: 📗
icon_background: '#E4E7FF'
mode: workflow
name: KF-WF-V2-LIVE-CESHI-20260811
use_icon_as_answer_icon: false
dependencies: []
kind: app
version: 0.3.1
workflow:
conversation_variables: []
environment_variables: []
features: {}
graph:
edges:
- data:
sourceType: start
targetType: knowledge-retrieval-v2
id: start-source-retrieval-target
source: start
sourceHandle: source
target: retrieval-v2
targetHandle: target
type: custom
- data:
sourceType: knowledge-retrieval-v2
targetType: end
id: retrieval-source-end-target
source: retrieval-v2
sourceHandle: source
target: end
targetHandle: target
type: custom
nodes:
- data:
desc: Synthetic query used only for Knowledge Retrieval v2 functional testing.
title: Start
type: start
variables:
- label: query
required: true
type: text-input
variable: query
id: start
type: custom
- data:
control_space_ids:
- 019fac9f-bfb0-75ee-9af5-252ebafbac1c
desc: Existing ceshi KnowledgeFS space; no destructive changes.
mode: fast
query_variable_selector:
- start
- query
title: KnowledgeFS Retrieval v2
top_n: 5
type: knowledge-retrieval-v2
id: retrieval-v2
type: custom
- data:
desc: ''
outputs:
- value_selector:
- retrieval-v2
- result
value_type: array[object]
variable: evidence
title: End
type: end
id: end
type: custom
viewport:
x: 0
y: 0
zoom: 1

View File

@ -0,0 +1,74 @@
app:
description: Knowledge Retrieval v2 publish validation with an unresolved synthetic space.
icon: 📗
icon_background: '#E4E7FF'
mode: workflow
name: KF-WF-V2-UNRESOLVED-20260811
use_icon_as_answer_icon: false
dependencies: []
kind: app
version: 0.3.1
workflow:
conversation_variables: []
environment_variables: []
features: {}
graph:
edges:
- data:
sourceType: start
targetType: knowledge-retrieval-v2
id: start-source-retrieval-target
source: start
sourceHandle: source
target: retrieval-v2
targetHandle: target
type: custom
- data:
sourceType: knowledge-retrieval-v2
targetType: end
id: retrieval-source-end-target
source: retrieval-v2
sourceHandle: source
target: end
targetHandle: target
type: custom
nodes:
- data:
desc: ''
title: Start
type: start
variables:
- label: query
required: true
type: text-input
variable: query
id: start
type: custom
- data:
control_space_ids:
- 00000000-0000-0000-0000-000000000000
desc: Synthetic unresolved KnowledgeFS control space; no real data is touched.
query_variable_selector:
- start
- query
title: KnowledgeFS Retrieval v2
top_n: 5
type: knowledge-retrieval-v2
id: retrieval-v2
type: custom
- data:
desc: ''
outputs:
- value_selector:
- retrieval-v2
- result
value_type: array[object]
variable: evidence
title: End
type: end
id: end
type: custom
viewport:
x: 0
y: 0
zoom: 1