docs(bioflow): 阶段0-PM 文档——PRD 新增 FR-BIO-032、UI_SPEC 生信组件规格、TEST_PLAN 生信分层与600门禁、团队上下文与六份任务书

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-09-05 16:09:48 +08:00
co-authored by Claude Fable 5
parent 4749f77544
commit 64bc30365c
10 changed files with 416 additions and 1 deletions
+73 -1
View File
@@ -14,7 +14,7 @@
**使用场景**:桌面深度研究为主,**手机端随时查询为重要补充**(实验室、会议、田间)。
**不做什么**:默认支持同会话上下文记忆(可在设置中关闭)(上游 `max_rounds:1`,每次提问独立检索);不做文献全文阅读器;不做基因家族分析流程执行(那是 PlantAI-dev 的职责)。
**不做什么**:默认支持同会话上下文记忆(可在设置中关闭)(上游 `max_rounds:1`,每次提问独立检索);不做文献全文阅读器;(2026-09-05 起:生信流程执行经对话式编排进入,见 FR-BIO)。
---
@@ -323,3 +323,75 @@ UI 只展示后端真实返回的数据。**禁止**:占位假数据流入生
SHELL: 001–007(7)|THEME: 001–006(6)|SESSION: 001–009(9)|CHAT: 001–015(15)|RETRIEVAL: 001–006(6)|SOURCE: 001–006(6)|EXTRACT: 001–006(6)|KG: 001–008(8)|RESP: 001–013(13)|HEALTH: 001–005(5)
**合计 81 个功能点。** 测试用例追溯矩阵必须覆盖全部 81 项(FR-RESP-013 标注为可选,仍需有用例但允许标记为 N/A)。
---
## 16. FR-BIO 生信流程编排(对话式)
模块范围:在对话界面用自然语言驱动 73 个生信分析阶段(基因家族 21 / RNA-seq 14 / WGS 14 / 群体 5 / GWAS 9+报告)的路径规划、数据文件引导、参数确认、执行过程展示、报告生成调整、任务存档与存档复用;新增「生信任务」「生信档案」两个工作台面板;流程文档知识库问答并入生信对话;三形态部署(只 rag / 只生信 / 同部署)。
**FR-BIO-001 意图分流**:用户消息含生信分析意图(分析类动词 + 基因家族名/分析对象,如「帮我跑水稻 SPL 家族鉴定」;或存档复用句式「用 XXX 存档任务的方法帮我跑 xxxx」)→ 走生信流。(验收:命中句进入生信流;不命中句照旧走 qa,漏判安全)
**FR-BIO-002 分析路径引导**:系统先回复可用分析步骤路径候选(2-3 条,依据阶段目录+流程知识库生成),渲染为可点选路径卡;用户可点选或自然语言描述修改。(验收:SPL 询问 → 回复含 2-3 条候选路径卡,每条含阶段序列与用途)
**FR-BIO-003 路径校验与前置补全**:LLM 候选路径经阶段目录硬校验,未知阶段直接拒绝;缺失的前置阶段自动补全并在回复中明示。(验收:伪造阶段名被拒;跳过中间阶段时前置被补全且可见)
**FR-BIO-004 路径确认卡**:最终阶段链以确认卡展示(逐阶段名称/用途/预计耗时),用户确认后创建任务。(验收:确认卡逐阶段可读;确认后生信任务面板出现新任务)
**FR-BIO-005 数据文件引导**:阶段执行前检查输入文件;缺失时自然语言告知「请将 xxx 数据文件拖入窗口上传至服务器,或在聊天窗口中指定数据文件的具体路径」,附文件引导卡。(验收:起始阶段缺 fasta → 出现该提示与文件引导卡)
**FR-BIO-006 拖拽上传**:文件引导卡支持拖拽/点击上传;XHR 上传实时进度(百分比);支持大文件(≥456M 基因组)。(验收:拖入文件 → 进度条推进至 100%;大文件不断流)
**FR-BIO-007 服务器路径登记**:用户可直接在聊天里输入服务器文件路径字符串登记为阶段输入。(验收:输入合法路径 → 输入检查通过;非法路径 → 明确报错)
**FR-BIO-008 参数确认表单**:阶段执行前对话告知「XXXX 步骤,可调整参数如下,可按需调整,调整完毕后继续」,并显示可编辑参数表单卡(默认值带来源标注)。(验收:每个阶段执行前出表单卡;默认值=契约文档/参数预填值且来源可见)
**FR-BIO-009 继续执行**:用户编辑参数后点「继续」按钮,该阶段按表单值执行。(验收:改一个参数 → 执行命令使用新值)
**FR-BIO-010 自动连续执行开关**:开启后按推荐参数自动连续跑完全程;可随时暂停切回手动。(验收:开启后阶段间不等待表单确认自动推进;暂停后停在下一阶段前)
**FR-BIO-011 阶段进度卡**:阶段链确定后生成进度卡(与现有流水线卡同款视觉);随执行逐阶段流转(等待/运行/完成/失败/跳过);运行中阶段显示实时日志尾部。(验收:执行中进度卡逐阶段点亮、日志尾滚动更新)
**FR-BIO-012 失败三选一**:失败阶段标红,卡片内提供「重跑/跳过/改参数重跑」三按钮。(验收:注入失败阶段 → 标红 + 三按钮出现;三种处置各自生效)
**FR-BIO-013 长链折叠**:阶段超过 10 个自动折叠为分组视图,可展开。(验收:>10 阶段链显示分组折叠;展开可见全部)
**FR-BIO-014 断线回放**:SSE 断线重连后按任务快照整体回放进度卡状态。(验收:断网 30s 重连 → 卡片恢复当前状态,无进度丢失)
**FR-BIO-015 报告生成**:任务最后阶段运行报告链,生成图文并茂单文件 HTML(图 base64 内嵌 + 各阶段 manifest 事实数据)。(验收:报告含图与阶段结果汇总,浏览器可打开)
**FR-BIO-016 报告预览**:报告登记进文档工作台,DocPane 预览(白底)。(验收:任务完成后文档 TAB 出现报告,预览白底图文正常)
**FR-BIO-017 报告编辑**:可像公文一样就地编辑文字、用 prompt 调整排版(走现有编辑链路)。(验收:改文字落盘;prompt 排版指令生效)
**FR-BIO-018 报告导出**:导出 PDF/DOCX。(验收:两种格式下载成功且文件可打开)
**FR-BIO-019 图表调整**:图表类 prompt(如「xxx 图表颜色换成红色」)解析为绘图参数 → 重跑产生该图的阶段 → 新图回填报告并刷新预览;纯文字排版指令走 docgen 编辑。(验收:换色指令后报告图更新为新颜色)
**FR-BIO-020 任务存档提示**:任务完成后对话提示「本次生信任务已完成,是否存档?可按你的要求命名并描述」;用户可放弃。(验收:完成即出存档提示;放弃不存档无副作用)
**FR-BIO-021 存档执行与状态回复**:按用户要求存档(过程记录、中间文件、结果文件、报告),完成后回复存档状态(名称/位置/大小)。(验收:存档后回复含上述三要素;磁盘档案目录存在)
**FR-BIO-022 档案回看**:「生信档案」面板可找出历次任务回看(详情/产物/报告)。(验收:存档任务出现在档案列表,详情可看)
**FR-BIO-023 存档方法复用**:按名称匹配存档(精确优先,模糊给候选)→ 装载阶段链与参数 → 表单预填存档值 → 按确认参数发起新任务。(验收:「用 XXX 存档任务的方法帮我跑 yyy」→ 表单预填 XXX 参数 → 新任务按此执行)
**FR-BIO-024 生信任务面板**:「生信任务」面板:任务列表/阶段 DAG/进度/manifest 与日志浏览/重跑。(验收:多任务浏览流畅;manifest 与日志可读;重跑成功)
**FR-BIO-025 探活显隐**:启动时探测 /api/bioflow/health;不可达则隐藏生信 TAB 与块分支(只部署 rag 的前端自动退化为无生信界面)。(验收:停 8098 刷新 → 生信入口消失;恢复后出现)
**FR-BIO-026 流程知识库问答**:生信对话内流程咨询(如「identify 需要什么输入」),答案含引用原文,UI 可跳转原文。(验收:咨询回复含引用块且可跳转;评估集通过率 ≥90%)
**FR-BIO-027 三形态部署**:只部署 rag(BIOFLOW_ENABLED 默认关 → 反代不注册、前端无生信痕迹);只部署生信(8098 直连不依赖 BFF,报告降级为下载 HTML);同部署(反代启用+前端显形)。(验收:三形态各自冒烟通过)
**FR-BIO-028 独立服务与数据**:生信服务独立进程 8098 + 独立 SQLite bioflow.db;BFF 仅流式反代 /api/bioflow/*(BIOFLOW_ENABLED 开关)+ 报告登记端点。(验收:停 BFF 生信服务仍可直连工作;BFF 重启不影响生信任务)
**FR-BIO-029 Docker 执行**:每阶段以 docker run --rm 拉起对应镜像执行,--cpus/--memory 资源限制,--user 宿主机 uid,BIOFLOW_DATA 只读挂载。(验收:执行日志含资源参数;容器退出即清理)
**FR-BIO-030 内核等价性**:金标 SPL identify 输出 24 成员 ID 与 dev 预期输出集合全等。(验收:diff 命令输出为空)
**FR-BIO-031 并发与恢复**:全局并发信号量上限 3(可配);生信服务重启后从 DB 恢复 in-flight 任务并续跑。(验收:第 4 个并发任务排队;重启服务后任务续跑不重跑已完成阶段)
**FR-BIO-032 发布与编译**:生信服务 .so 编译流水线(compile_bioflow.sh)+ 内核 4 镜像构建(build_all.sh)+ rag 侧 BIOFLOW_ENABLED 装配开关。(验收:两条流水线各自产出;SHA256SUMS 与泄露门禁通过)
BIO: 001–032(32)|上述 81 + BIO 32 = **合计 113 个功能点**。生信用例追溯必须覆盖全部 32 项 FR-BIO(规模与门禁见 TEST_PLAN §10)。
+38
View File
@@ -93,3 +93,41 @@ python sdk/mock/mock_server.py # 127.0.0.1:8099
3. 缺陷清单表:编号 | 级别 | TC | 归属 agent | 现象 | 预期 | 证据路径
4. 上轮缺陷修复确认表:BUG 编号 | 是否修复 | 本轮对应 TC 结果
5. 遗留问题与风险
---
## 9. 生信编排测试分层(FR-BIO 专属,在 §1 基础上扩展)
| 层 | 工具 | 归属 | 覆盖对象 | 运行方式 |
|---|---|---|---|---|
| L1 生信服务单元 | pytest | 开发 agent 自测 | runner 状态机全路径、manifest 解析、db 三表迁移、错误信封(mock docker 执行) | `pytest tests -m bioflow_unit` |
| L2 生信服务接口 | pytest + respx | T 主写 | 20 个端点正常/参数校验/错误/降级/边界;SSE 事件序;断线回放快照(mock LLM/vstore/docker) | `pytest tests -m bioflow_api` |
| L2s 生信冒烟 | 脚本 | T | 金标 docker 等价性(24 ID diff)、镜像构建、18 入口 --help(手动触发,不在每轮) | `bash bioflow_kernel/tests/smoke_golden.sh` |
| L3 前端单元 | Vitest | 开发自测 + T | bioflow store、意图分流用例表(前后端同表双跑) | `cd ui && npx vitest run` |
| L4 前端组件 | Vitest + @vue/test-utils | 开发自测 + T 补写 | 五卡片+两面板全状态 + UI 动作矩阵 | 同上 |
| L5 端到端 | Playwright | T | §11 九条主线 × 三档视口 | `npx playwright test` |
| L6 验收 | TL 亲自 | TL | 金标+七项引导端到端+三形态+全量回归 | 终验 |
## 10. 生信用例规模与覆盖门禁(用户要求,阶段 0 复查放行)
1. **规模门禁**:TEST_CASES.md 生信部分用例总数 **≥600 条**(P6 评估集 30-50 条另计)。分组建制:后端 L1/L2 ~230、前端 L3/L4 ~220、E2E L5 ~105、三形态+回归+P0/P6 冒烟 ~60。
2. **追溯门禁(主门禁)**:每个 FR-BIO 至少 1 条 TC、无孤儿 TC(双向完整)。
3. **UI 动作矩阵**:每个可交互元素(按钮/开关/输入框/拖放区/可选卡片)按动作逐一覆盖:点击/双击/悬停/键盘 Enter 与 Esc/拖入/悬停拖放/离开/聚焦/失焦/禁用态/加载中态——每条 TC 一个元素×一个动作。
4. **七项引导**:每条引导都有 UI 显示断言 + 操作断言;上下游动作(BFF 反代、报告登记、fig:// 渲染、docker 执行、manifest 判成败、SSE 事件序、断线回放、vstore 检索)都有接口级用例。
5. 阶段 0:T1 编制 → TL 逐条复查,不达标返工,达标才放行开发 agent。
## 11. 生信 E2E 必测主线(三档视口各独立编号,视口后缀 M/T/D)
1. **BIO-E2E-01 主流程**:「帮我跑水稻 SPL 家族鉴定」→ 2-3 条候选路径卡 → 点选 → 路径确认卡 → 确认 → 文件引导卡 → 拖拽上传金标数据(进度条)→ 参数表单(改一个参数)→ 点继续 → 进度卡逐阶段流转(含日志尾)→ 报告预览 → 导出 PDF → 存档提示 → 存档 → 状态回复
2. **BIO-E2E-02 自动连续**:开启自动连续开关 → 全程不等待表单自动推进 → 中途暂停 → 停在下一阶段前
3. **BIO-E2E-03 失败注入**:mock 使某阶段失败 → 进度卡标红 + 三选一 → 重跑成功 / 跳过生效 / 改参数重跑生效
4. **BIO-E2E-04 断线回放**:执行中切断 SSE(mock 或代理)→ 重连 → 进度卡恢复当前状态
5. **BIO-E2E-05 存档复用**:「用 XXX 存档任务的方法帮我跑 yyy」→ 名称匹配 → 表单预填 → 新任务执行
6. **BIO-E2E-06 探活显隐**:停 8098 → 刷新 → 生信 TAB/块隐藏;恢复 → 出现
7. **BIO-E2E-07 图表调整**:「xxx 图表颜色换成红色」→ 重跑绘图阶段 → 新图回填 → 预览刷新
8. **BIO-E2E-08 知识库问答**:「identify 阶段需要什么输入」→ 答案含引用块 → 跳转原文
9. **BIO-E2E-09 三档视口**:三档布局断言(卡片/面板/进度卡不溢出、触控目标 ≥44px 移动端)
## 12. 生信轮次报告追加项(在 §8 模板上扩展)
首页统计加:BIO FR 总数/已覆盖/未覆盖清单、生信用例总数(≥600 门禁核对)、UI 动作矩阵执行数;缺陷清单归属填 agent 代号(A1-A4)。
+72
View File
@@ -244,3 +244,75 @@ if (t === 'light' || t === 'dark') document.documentElement.dataset.theme = t;
## 7. 组件类名复用约定
B2/B3 组件必须复用 B1 在 `styles/base.css` 与原型中定义的类名,**不得另起炉灶**:`app-shell`、`top-bar`、`logo`、`badge`、`session-panel`、`session-item`、`status-dot`、`chat-panel`、`msg`、`bubble`、`msg-head`、`agent-avatar`、`md-table`、`code-block`、`pipeline-card`、`p-step`、`tool-card`、`stream-wrap`、`stream-text`、`stream-cursor`、`shimmer-line`、`composer`、`mode-pill`、`send-btn`、`bench-panel`、`bench-tabs`、`bench-tab`、`chip`、`ft-item`、`prog-item`、`prog-track`、`prog-fill`、`preview-block`、`status-bar`、`agent-dot-item`、`drawer`、`drawer-scrim`。
---
## 8. 生信流程编排组件规格(FR-BIO,BioFlow)
通用纪律:全部使用现有 `--pa-*` 令牌;新类名集中声明(§8.7);前端逐字复刻本节 CSS 关键值,不得自行美化;深浅主题由令牌自动适配。
### 8.1 路径选择卡(`flow-path-card`)
| 元素 | 规格 |
|---|---|
| 卡体 | surface-1 + hairline,r-lg,padding 14px 16px,margin 14px 0 |
| 标题 | 「🧬 分析路径选择」12.5px/600/ls .3px |
| 候选路径行 | 每行 padding 8px 10px,r-md,hover surface-3;行内阶段序列 12px ink-muted,首阶段加粗 ink |
| 选中态 | 行 border 1.5px `--pa-g-from` + 背景 `color-mix(in srgb, var(--pa-g-from) 8%, transparent)` |
| 确认按钮 | 「确认此路径」`--pa-gradient` 底白字 12.5px/600,r-md padding 7px 14px;无选中时禁用(opacity .45) |
### 8.2 参数表单卡(`flow-form-card`)
| 元素 | 规格 |
|---|---|
| 卡体 | 同 8.1 |
| 标题 | 「⚙ XXXX 步骤 · 可调整参数」12.5px/600/ls .3px |
| 字段行 | label 12px ink-muted 宽 96px 固定;input surface-1 + hairline,r-sm,padding 6px 10px,focus border `--pa-g-from` |
| 来源标注 | 每字段下方 11px ink-subtle(如「默认值来源:阶段契约文档」) |
| 继续按钮 | 「继续」`--pa-gradient` 白字 12.5px/600,r-md padding 7px 16px |
| 自动连续开关 | 「自动连续执行」12px ink-muted + 现有 switch 样式(`mode-pill` 同款开关) |
### 8.3 文件引导卡(`flow-file-card`)
| 元素 | 规格 |
|---|---|
| 卡体 | 同 8.1 |
| 拖放区 | border 2px dashed `--pa-hairline-strong`,r-lg,padding 24px,居中提示 12px ink-subtle |
| 拖入态 | border-color `color-mix(in srgb, var(--pa-g-from) 45%, transparent)` + 背景 `color-mix(in srgb, var(--pa-g-from) 8%, transparent)` |
| 进度条 | 复用 `prog-track`/`prog-fill`(track surface-2 r-pill 高 4px;fill `--pa-gradient`),旁注百分比 11px mono |
| 路径输入行 | input 同 8.2 + 「登记路径」pane-btn 同款 12px |
### 8.4 阶段进度卡(`bioflow-progress-card`)
结构/状态点/连接线/相位色**复用 §4.4 pipeline-card 全部令牌**(done=`--pa-t-done` 底白 ✓、running=相位色底 ● + pulse、waiting=surface-3 底 ◌);新增两态与附加区:
| 元素 | 规格 |
|---|---|
| failed 态 | `--pa-error` 底 ✕,状态文字 error 色 12px/600 |
| skipped 态 | `--pa-ink-subtle` 底 ◌,状态文字 ink-subtle |
| 日志尾区 | 仅 running/failed 阶段展开:`--pa-code-bg` 底,mono 11px,padding 8px 10px,max-height 96px 滚动,随 SSE 追加 |
| 三选一按钮 | 仅 failed:重跑/跳过/改参数重跑,pane-btn 同款 12px,gap 8px |
| 折叠 | 阶段 >10 自动分组折叠(组头 12px/600 + 展开箭头),默认展开运行中所在组 |
### 8.5 存档提示卡(`flow-archive-card`)
| 元素 | 规格 |
|---|---|
| 卡体 | 同 8.1 |
| 文案 | 「本次生信任务已完成,是否存档?可按你的要求命名并描述」12.5px |
| 输入 | 名称输入行同 8.2 input |
| 按钮 | 「存档」`--pa-gradient` 12.5px/600;「放弃」pane-btn 同款 12px |
### 8.6 面板(`biojobs-pane` / `bioarchive-pane`)
| 元素 | 规格 |
|---|---|
| 面板容器 | 复用 bench 面板容器(§4.7),TAB 走现有 `bench-tab` |
| 列表项 | 复用 `session-item` 形态:标题 13px + 状态徽章(同 §4.2) |
| 阶段 DAG | 纵向 2px hairline 连接线(同 §4.4 连接线令牌),节点 8px 圆点按阶段状态取色 |
| manifest/日志 | 复用 `code-block`(mono 12px,code-bg,滚动) |
| 操作按钮 | pane-btn 同款(重跑/删除/复用发起) |
### 8.7 生信类名复用约定(在 §7 清单上追加)
`flow-path-card`、`flow-form-card`、`flow-file-card`、`bioflow-progress-card`、`flow-archive-card`、`biojobs-pane`、`bioarchive-pane`。其余(按钮/输入/进度条/徽章/面板容器)一律复用 §7 既有类名,不得另起炉灶。
+38
View File
@@ -0,0 +1,38 @@
# 服务器关键环境事实(生信编排实施团队共享上下文,2026-09-05 实测)
【分支与身份】
- 工作分支: feature/bioflow-conversation-orchestration(基于 main 4749f77,含 docgen 两批修复)
- git 身份: admin <jerryhaozhang@gmail.com>(仓库级已配置);不 commit/push(由 TL 统一决定)
- 仓库: /home/xzq/5090/teamWorkspace/zh/PlantAI-rag-new
【路径】
- 部署根: /home/xzq/5090/teamWorkspace/zh/plantai-rag-new-deploy-unified/(sdk/ + ui/)
- venv: /home/xzq/5090/teamWorkspace/zh/plantai-rag-new-venv/bin/python(py3.12.13)
- 移植源(只读,零改动): /home/xzq/5090/teamWorkspace/zh/PlantAI-dev/(apps/cli 92 文件含 84 个 run_*;gfa_core 依赖闭包)
- dev 数据: /home/xzq/5090/PlantAI-dev4090-7/data/hmm/(Pfam-A.hmm 1.8G + 索引);金标在 PlantAI-dev/assets/examples/test_input/(519M + 24 成员 ID 预期)
- 生信数据根(TL 建): /home/xzq/5090/teamWorkspace/zh/bioflow-data/(hmm/ 软链 + rag_db/pfam_mapping.json)
【端口】8090 BFF / 8091 QA(金标,零改动)/ 8092-8093 legacy RAG / 8094 vstore / 8095 crm / 8098 生信服务(新建)/ 8099 mock / 5180 vite dev
【conda 环境(镜像构建的包清单来源,容器运行时不用 conda)】test4py311(py3.11.14,基因家族) / rnaseq(py3.11.15) / rnaR(py3.14.3) / ASAW(py3.8.18,WGS-GWAS-群体) / interproscanpy311
【4 镜像】bioflow-gf / bioflow-rnaseq / bioflow-wgs / bioflow-interproscan
【LLM】沿用 docgen 直连模式(DOCGEN_LLM_* 键);vstore 用 ollama bge-m3:567m
【docker】已有运维先例(plantai-protected 4 容器);生信容器 --user xzq uid、--rm 一次性、BIOFLOW_DATA 只读挂载
【团队纪律(所有 agent 必须遵守)】
1. 所有改码只在服务器仓库(经 ssh xzq@8.163.92.8 -p 26518 执行),且只在 feature/bioflow-conversation-orchestration 分支
2. 开发 agent 只动自己任务书列出的文件;不越界;发现需改其他文件 → 记入报告交 TL 裁决
3. 零改动:QA 树(8091)、PlantAI-dev 仓库(只读复制源)、ui/src/stores/modes.js、ui/src/i18n/labels.js、ui/src/stores/bench.js(store)、ui/src/api/qa.js、ui/src/sse/parser.js、services/docgen 既有代码(report 模板由 A3 经 TL 协调增量新增)、tooling/compile/compile_sdk.sh(内核/生信服务各自复制副本改白名单,不改原脚本)
4. 不 commit、不 push、不部署、不重启生产进程(编译/部署/镜像构建发布由 TL 执行)
5. 不连生产端口探测(8090/8091 运行中服务)
6. 单元测试只跑不依赖生产服务/网络的(mock/fixture/tmpdir);全量 pytest/vitest 由 TL 统一执行
7. 每个 agent 有独立工作目录(见各任务书),互不写入
8. 服务层代码只用 dataclass/dict(Cython 编译纪律,勿用 pydantic 模型);新增 pydantic 模型只放明文白名单 schemas.py
9. 明文安全:凭据绝不写入报告/日志/仓库
10. 产出报告写在本任务书指定的报告文件
【需要改代码前必读的仓库文件】
- tooling/compile/compile_sdk.sh(编译机制,复制改白名单的基准)
- sdk/app/main.py、sdk/app/config.py(BFF 反代注册点与配置键,A2)
- ui/src/components/chat/PipelineCard.vue、AssistantMessage.vue、Composer.vue、ui/src/stores/chat.js、ui/src/components/bench/BenchPanel.vue、ui/src/components/layout/AppShell.vue(A3)
- docs/PRD.md §16(FR-BIO-001~032)、docs/UI_SPEC.md §8、docs/TEST_PLAN.md §9-12(需求与门禁唯一来源)
- docs/TEST_CASES.md 生信部分(T1 产出,用例唯一来源)
+39
View File
@@ -0,0 +1,39 @@
# 任务书:开发 agent A1 —— P0 内核移植与金标等价性验证
## 前置必读
1. docs/bioflow_team_context.md(环境事实 + 团队纪律,全部遵守)
2. 本任务书 + 模块职责边界
3. docs/PRD.md §16(FR-BIO-029 内核等价性 / FR-BIO-030 Docker 执行 / FR-BIO-032 发布编译)
## 职责范围(只动 rag-new 仓库内 bioflow_kernel/ 目录;PlantAI-dev 只读复制源,零改动)
A. 复制内核树(源 /home/xzq/5090/teamWorkspace/zh/PlantAI-dev/,目标 /home/xzq/5090/teamWorkspace/zh/PlantAI-rag-new/bioflow_kernel/,与 dev 顶层同构以保 parents[2] 机制):
- apps/cli/ → bioflow_kernel/cli/(92 文件全量,含 legacy/变体如 run_pep_legacy_*.py,保证引用完整;阶段目录以 gfa_core/mas/stage_catalog.py 的 73 阶段为准,入口多于阶段数属正常)
- apps/gfa_core/ → bioflow_kernel/gfa_core/(30 模块依赖闭包 + templates/ + schemas/)
- apps/scripts/ → bioflow_kernel/scripts/(tree_domain.R 等 R 脚本,入口用 __file__ 相对定位,必须随树走)
- apps/assets/hmm/ → bioflow_kernel/assets/hmm/(测试用 SBP.hmm)
B. 源码适配(全部改动,逐条记录到报告):
1. CONDA_PREFIX 硬编码 test4py311 绝对路径 → sys.executable 推导 + 环境变量覆盖(如 BBA_CONDA_PREFIX 优先;容器内 sys.executable 即镜像内解释器,同款逻辑成立)
2. run_identify.py 的 pfam_mapping.json 候选链 → 增加 BBA_RAG_MAPPING_FILE 环境变量优先
3. 交叉引用 from apps.cli.xxx import → from cli.xxx(约 21 处,目录名机械替换;逐一验证可 import)
C. build.sh:复制 tooling/compile/compile_sdk.sh,唯一改动白名单数组(需支持 glob 或预生成路径清单):cli/** 全部明文、gfa_core/mas/config.py 明文、gfa_core/mas/llm/** 明文、__init__.py 恒明文(脚本既有规则)。编译解释器 = 镜像内解释器(构建时传入)
D. docker/:4 个 Dockerfile(bioflow-gf 源 test4py311 / bioflow-rnaseq 源 rnaseq+rnaR / bioflow-wgs 源 ASAW / bioflow-interproscan 源 interproscanpy311)+ build_all.sh(可选 --smoke 跑金标冒烟)
- 包清单:conda list --export 自各现有环境导出(这些环境金标验证过,从零装会版本漂移)
- 多阶段:基础镜像装工具 → COPY 内核源码 → 镜像内解释器跑 build.sh 编译 .so → 最终镜像只留 .so + 明文入口 + 模板/R 脚本资源
- 容器运行时无 conda;数据不进镜像(BIOFLOW_DATA 挂载)
E. 金标等价性验证(P0 验收核心):用 dev 的 assets/examples/test_input(Ft 物种 SPL:pep/cds/genome/gff3 + SBP.hmm)在 bioflow-gf 镜像内跑 identify,与预期输出 Ft.SPL.combined.ids(24 成员 ID)集合 diff 全等:
docker run --rm --user $(id -u xzq) -v <任务目录>/input:/job/input -v <任务目录>/workspace:/job/workspace -v /home/xzq/5090/teamWorkspace/zh/bioflow-data:/bioflow-data -e BBA_PFAM_DIR=/bioflow-data/hmm -e BBA_DISABLE_RAG_PFAM_LOOKUP=1 --cpus 16 --memory 64g bioflow-gf python -B -m cli.run_identify --input-dir /job/input --workspace /job/workspace --prefix Ft.SPL --cpu 16 --force
F. 18 个基因家族链入口 --help 冒烟(python -B -m cli.run_xxx --help 均正常退出)
G. 阶段 → 镜像映射表(基因家族链约 18 阶段 → bioflow-gf 等),产出 bioflow_kernel/stage_image_map.json(供 A2 的 kernel.py 查表;阶段参数加 image 字段可扩展)
## 【纪律再强调】
- 不碰生产容器/服务;镜像构建如需 TL 协助的权限/磁盘问题 → 记入报告等 TL
- 只动 bioflow_kernel/;dev 仓库只读;不 commit/push
- 适配改动保持最小:除 A/B 清单外一律照抄 dev,发现第 3 处以上需适配的硬编码 → 记入报告交 TL 裁决
## 【自测要求】
- 金标 diff 命令输出为空(24 ID 全等);manifest 产出合规;镜像内 python -c "import gfa_core.xxx" 加载 .so 成功
- 冒烟脚本沉淀为 bioflow_kernel/tests/smoke_golden.sh
- 自测结果写入 docs/team/report_bioflow_dev1.md(完成清单、适配改动清单(逐条)、金标结果、冒烟结果、已知限制)
## 【完成标准】
报告写入 docs/team/report_bioflow_dev1.md 后,在最终回复中明确写「BIOFLOW DEV1 P0 完成」+ 报告路径 + 金标 diff 结果 + 自测通过数
+46
View File
@@ -0,0 +1,46 @@
# 任务书:开发 agent A2 —— P1 生信服务地基(bioflow-service 8098 + BFF 最小反代)
## 前置必读
1. docs/bioflow_team_context.md(环境事实 + 团队纪律,全部遵守)
2. 本任务书 + 模块职责边界
3. docs/PRD.md §16(FR-BIO-028 独立服务 / FR-BIO-031 并发与恢复)、实施计划 §六(端点与三表清单)
## 职责范围(新增 bioflow_service/ 独立部署树;BFF 仅两处最小改动)
A. bioflow_service/ 部署树(仓库 /home/xzq/5090/teamWorkspace/zh/PlantAI-rag-new/bioflow_service/):
- app/config.py —— 配置键:BIOFLOW_IMAGE_MAP(镜像名映射,含 stage_image_map.json 路径)、BIOFLOW_DATA_ROOT、BIOFLOW_CONCURRENCY=3、BIOFLOW_JOBS_DIR、BIOFLOW_DB_PATH、DOCGEN_LLM_*(沿用 docgen 直连模式)、BIOFLOW_SERVICE_URL
- app/schemas.py —— pydantic 请求/响应模型(明文白名单文件,同 rag-new 规则)
- app/db.py —— 独立 SQLite bioflow.db 三张表 + 幂等迁移(沿用 docgen 同款模式):bio_jobs(id/会话/标题/状态/阶段链 JSON/参数 JSON/档案 id/时间戳)、bio_stages(任务/阶段/状态/参数 JSON/manifest 路径/日志尾/起止)、bio_archives(id/任务 id/名称/需求摘要/阶段链+参数 JSON/报告制品 id/磁盘路径/大小/时间)
- app/services/bioflow/(全部 dataclass/dict/stdlib,禁 pydantic——Cython 编译纪律):
* kernel.py —— Docker 执行器:按阶段→镜像映射表拼装 docker run --rm --user xzq uid -v 任务目录 -v BIOFLOW_DATA(只读)-e BBA_* --cpus/--memory,容器内 python -B -m cli.run_{stage};超时/日志截取;命令拼装可 mock 断言
* catalog.py —— 阶段目录(从 gfa_core/mas/stage_catalog.py 移植定义 + 基因家族链约 18 阶段手写参数 schema YAML;参数 help 文案从入口 argparse 提取);不用运行时反射
* manifests.py —— manifest 解析与校验(schema 随内核树);跨阶段输入定位(上游 manifest 的 artifacts 路径)
* runner.py —— 任务状态机(逐阶段:检查输入→等待确认→docker run→读 manifest 判成败→推进/暂停);事件总线(进程内 pub/sub 供 SSE);并发信号量(BIOFLOW_CONCURRENCY 默认 3);服务重启恢复(扫 DB 恢复 in-flight 续跑,不重跑已完成阶段)
* planner.py —— 路径规划(知识库检索 + LLM 生成候选路径→catalog 硬校验,未知阶段拒绝,前置补全明示)
* reports.py —— 报告登记(内核报告产物→docgen 报告登记端点协调,接口先以内部 HTTP 调 BFF 反代端点预留)
* archive.py —— 存档/复用(过程记录/中间文件/结果文件/报告打包落盘;名称匹配复用)
* llm.py —— LLM 调用(沿用 docgen deepseek 直连模式)
* params.py —— 参数预填(BBA_* 历史/契约文档→表单默认值)
- app/routers/bioflow.py、biojobs.py、bioarchives.py —— 端点按实施计划 §六清单实现(chat/stream SSE 入口、catalog、jobs 全套、files 上传(multipart 流式,大文件超时单独调大)、stages confirm/rerun/skip、pause/resume、manifest+日志尾 80 行、events SSE(事件类型全清单)、report revise、archives 全套)
- app/main.py —— FastAPI 组装;health 端点(/api/bioflow/health,前端探活用)
- build.sh —— 复制 tooling/compile/compile_sdk.sh 改白名单(明文:main.py/config.py/schemas.py/db.py + __init__.py 规则);restart.sh
- tests/ —— pytest(-m bioflow_unit):runner 状态机全路径(成功/失败/重跑/跳过/暂停/恢复/重启续跑/超时/日志截断/并发上限,mock docker 执行)、manifest 解析、三表迁移幂等、错误信封;端点用例(-m bioflow_api,respx/mock LLM+vstore+docker)
B. BFF 两处最小改动:
1. 新增 sdk/app/routers/bioflow_proxy.py —— 流式反代 /api/bioflow/* → BIOFLOW_SERVICE_URL(SSE 不缓冲透传);报告登记端点(生信报告→doc_artifacts,字段与 docgen 现有表对齐,协调 A3 的 report 模板);BIOFLOW_ENABLED 为假时路由不注册
2. sdk/app/main.py —— 注册该路由 2 行(按 BIOFLOW_ENABLED 开关)
3. sdk/app/config.py —— 加 BIOFLOW_ENABLED(默认 false)、BIOFLOW_SERVICE_URL 两键
## 【跨模块契约】
- 阶段→镜像映射表由 A1 产出(bioflow_kernel/stage_image_map.json),kernel.py 读取之,A1 未交付前可用占位表跑通单测
- 报告登记与 A3 的 report 模板/fi图渲染协作:登记接口字段约定(job_id/标题/md/图清单),写入报告交 TL 转达 A3
- 事件类型清单照实施计划 §六(job_created/plan_ready/stage_started/stage_log/stage_done/stage_failed/stage_skipped/stage_await_confirm/stage_await_files/job_done/job_paused/job_archived)
## 【纪律再强调】
- 不碰生产服务;服务层禁 pydantic;不 commit/push;发现需改任务书外文件 → 报告交 TL
- 端点/字段名与本任务书不一致时以实施计划 §六为准;不确定处记入报告
## 【自测要求】
- cd bioflow_service && /home/xzq/5090/teamWorkspace/zh/plantai-rag-new-venv/bin/python -m pytest tests/ -q(mock docker/LLM/vstore,不依赖生产服务)
- 自测结果写入 docs/team/report_bioflow_dev2.md(模块清单、用例数与通过数、已知限制)
## 【完成标准】
报告写入后,最终回复明确写「BIOFLOW DEV2 P1 完成」+ 报告路径 + 自测通过数
+40
View File
@@ -0,0 +1,40 @@
# 任务书:开发 agent A3 —— P2-P5 前端编排闭环/报告/存档/面板
## 前置必读
1. docs/bioflow_team_context.md(环境事实 + 团队纪律,全部遵守)
2. 本任务书 + 模块职责边界
3. docs/PRD.md §16(FR-BIO-001~027)、docs/UI_SPEC.md §8(组件规格,逐字复刻 CSS 关键值,不得自行美化)
4. 服务器 ui/ 树为唯一权威(本地副本滞后)
## 职责范围(分四个小期,每期完成自测后交 T2 轮次测试,缺陷修复循环至清零再进下一小期)
A. P2 对话式编排闭环:
- utils/intent.js —— 生信意图分流(关键词:分析类动词+基因家族名/分析对象;存档复用句式「用 XXX 存档任务的方法帮我跑 xxxx」;漏判安全——不命中一律走原 qa 流)。词典以 docs/team/cases_bioflow_intent.md(T1 冻结,唯一事实源)为准,不得自造
- stores/chat.js —— sendBioflow() 动作(仿 sendDocgen 模式)+ bioflow 消息更新器(SSE 事件→patch 消息 blocks;断线重连回放快照整体刷新)
- components/chat/FlowPathCard.vue、FlowFormCard.vue(继续按钮+自动连续开关)、FlowFileCard.vue(拖拽+XHR 进度+服务器路径输入)、FlowProgressCard.vue(块类型 bioflow_progress;视觉沿用 PipelineCard 令牌,新增 failed/skipped 态、日志尾区、失败三选一、>10 阶段折叠)、FlowArchiveCard.vue
- AssistantMessage.vue —— 增加五类块分支(PipelineCard 本身零改动)
- Composer.vue —— 拖拽上传 + XHR 进度分支(生信文件经 BFF 反代直达 8098)
- i18n/bioflow.js —— 全部用户可见文案(不用 labels.js,红线)
B. P3 报告闭环:
- report 模板(docgen templates 体系增量新增,协调 TL)+ fig:// 图引用渲染(docgen 模板渲染器解析 fig://图id → base64)
- DocPane 复用(零改造目标);图表调整 revise 触发与预览刷新
C. P4 存档与复用:
- 存档提示卡交互(命名/描述/放弃)、存档状态回复消息更新、复用发起(预填表单展示)
D. P5 生信任务面板:
- components/bench/BioJobsPane.vue(任务列表/阶段 DAG/进度/manifest+日志浏览/重跑)、BioArchivePane.vue(档案列表/详情回看/删除/复用发起)
- BenchPanel.vue + AppShell.vue 移动端 tab 条两处接入(TAB 数断言测试随改)
- 探活显隐:启动探测 /api/bioflow/health,不可达隐藏生信 TAB 与块分支
## 【红线零改动(动了即缺陷)】
ui/src/stores/modes.js、ui/src/i18n/labels.js、ui/src/stores/bench.js(store)、ui/src/api/qa.js、ui/src/sse/parser.js、PipelineCard.vue、services/docgen 既有代码(report 模板为增量新增,经 TL 协调)
## 【纪律再强调】
- 文案全部进 i18n/bioflow.js;类名遵循 UI_SPEC §8.7 复用约定;不 commit/push;不部署(dist 构建由 TL 执行)
- UI 规格冲突时以 UI_SPEC.md §8 为准
## 【自测要求】
- 每个组件写 Vitest 用例(L3/L4):五卡片+两面板全状态 + UI 动作矩阵(点击/双击/悬停/键盘 Enter 与 Esc/拖入/悬停拖放/离开/聚焦/失焦/禁用/加载中);意图分流与后端同用例表(cases_bioflow_intent.md)
- cd ui && npx vitest run(不依赖生产服务;SSE 用 mock)
- 自测结果写入 docs/team/report_bioflow_dev3.md(每小期一节:完成清单/用例数/通过数/已知限制)
## 【完成标准】
每个小期完成:报告更新 + 最终回复明确写「BIOFLOW DEV3 P{n} 完成」+ 自测通过数
+24
View File
@@ -0,0 +1,24 @@
# 任务书:开发 agent A4 —— P6 流程知识库问答(与 P0 并行)
## 前置必读
1. docs/bioflow_team_context.md(环境事实 + 团队纪律,全部遵守)
2. 本任务书 + 模块职责边界
3. docs/PRD.md §16(FR-BIO-026 流程知识库问答)
## 职责范围(只动 vstore 侧新增集合与入库脚本;QA 树(8091)零改动;前端引用块渲染与 A3 协作)
A. 语料切块入库(vstore 新增独立集合 flow_docs,不混入既有公文/资料集合):
- 语料源(按优先级):1) Obsidian《PlantAI_现有分析全流程_基因家族_RNAseq_WGS_GWAS》(79 章,TL 提供导出副本)2) dev 的 gfa_core/schemas/stages/*_contract_v1.md(59 份阶段契约)3) 技能说明(dev docs 内分析方法说明)
- 切块策略:按章/节切块,块含标题路径 + 原文 + 源文件标记;入库脚本 vstore/scripts/ingest_flow_docs.py(幂等可重跑)
B. 生信对话内流程咨询:检索 flow_docs 集合 → 答案含引用原文(引用块带源文件与章节定位,UI 可跳转——跳转渲染与 A3 协作,接口约定写入报告)
C. 评估集:30-50 条(覆盖各链典型咨询:阶段输入输出/参数/前置条件/软件对照),评测脚本(检索命中 + 答案含引用断言)
## 【纪律再强调】
- 不动 QA 树任何文件/进程;不 commit/push;凭据不入库
- 集合名 flow_docs 与字段约定写入报告供 A2(planner.py 知识库检索)对齐
## 【自测要求】
- 入库脚本在测试目录跑通(tmpdir);评估集首轮自测通过率记录
- 结果写入 docs/team/report_bioflow_dev4.md(语料清单与块数、集合字段约定、评估集数量与通过率、已知限制)
## 【完成标准】
报告写入后,最终回复明确写「BIOFLOW DEV4 P6 完成」+ 报告路径 + 评估集首测通过率
+25
View File
@@ -0,0 +1,25 @@
# 任务书:测试 agent T1 —— 生信编排测试用例编制(阶段 0)
## 前置必读
1. docs/bioflow_team_context.md(环境事实 + 团队纪律,全部遵守)
2. docs/PRD.md §16(FR-BIO-001~032)、docs/UI_SPEC.md §8(组件规格)、docs/TEST_PLAN.md §9-12(分层与门禁)、实施计划 §六(端点清单)
## 职责(只写测试文档,不修改任何产品代码)
A. docs/TEST_CASES.md 生信部分(追加章节):
1. 用例清单:编号 TC-BIO-<模块>-<序号>;测试层 L1/L2/L2s/L3/L4/L5;优先级 P0/P1/P2;预期列全部为可观察断言(元素存在/请求体字段/HTTP 状态/存储值/事件序列),无「检查是否正确」类断言
2. FR↔TC 双向追溯矩阵:32 个 FR-BIO 每个至少 1 条 TC、无孤儿 TC
3. UI 动作矩阵:每个可交互元素(路径卡行/表单输入/继续按钮/自动连续开关/拖放区/进度条/路径输入/三选一按钮/折叠组头/面板按钮/存档输入与按钮)按动作逐一覆盖:点击/双击/悬停/键盘 Enter 与 Esc/拖入/悬停拖放/离开/聚焦/失焦/禁用态/加载中态——每条 TC 一个元素×一个动作
4. 七项引导:每条引导都有 UI 显示断言 + 操作断言
5. 上下游动作接口级用例:BFF 反代(开关两态)、报告登记进 doc_artifacts、fig:// 渲染、docker run 命令拼装(mock)、manifest 判成败、SSE 事件序、断线回放快照、vstore flow_docs 检索、存档复用
6. 三形态部署断言:只 rag(反代不注册+前端无生信痕迹)/只生信(8098 直连+报告降级下载 HTML)/同部署(反代启用+前端显形)
7. E2E 主线:TEST_PLAN §11 九条 BIO-E2E × 三档视口(视口后缀 M/T/D)
8. 规模门禁:生信用例总数 ≥600 条(分组建制:后端 L1/L2 ~230、前端 L3/L4 ~220、E2E L5 ~105、三形态+回归+P0/P6 冒烟 ~60;P6 评估集 30-50 条由 A4 另计不混入)
B. docs/team/cases_bioflow_intent.md —— 意图分流词典与用例表(冻结为唯一事实源,前后端同表双跑;含生信命中句/边界句/漏判安全句)
## 【纪律再强调】
- 只写 docs/ 下测试文档;不跑产品代码;用例来源唯一(PRD/UI_SPEC/TEST_PLAN),不自造需求
- 用例执行分层与命令以 TEST_PLAN §7/§9 为准
## 【完成标准】
- 用例写入 docs/TEST_CASES.md 生信部分 + 覆盖自核清单(每个 FR-BIO → 对应 TC 列表 + 用例总数 + 各分组计数)写入 docs/team/report_bioflow_test1.md
- 最终回复明确写「BIOFLOW TEST1 用例编制完成」+ 报告路径 + 用例总数(≥600)+ 追溯自核结论(32/32 或缺口清单)
+21
View File
@@ -0,0 +1,21 @@
# 任务书:测试 agent T2 —— 生信编排轮次测试执行
## 前置必读
1. docs/bioflow_team_context.md(环境事实 + 团队纪律,全部遵守)
2. docs/TEST_PLAN.md §5(轮次纪律铁律)、§8(报告模板)、§12(生信追加项)、docs/TEST_CASES.md 生信部分(用例唯一来源)
## 职责(只跑测试与写报告,不修改任何产品代码——动了即违约)
A. 每期(P1-P7 各期开发 agent 自测完成后)执行轮次:
1. 完整跑完一整轮全部用例(L1+L2+L3+L4+L5 全量,不做增量;L2s 冒烟仅 TL 部署后手动触发)
2. 产出 docs/TEST_REPORT_R{n}.md:轮次信息、首页统计(TC 总数/pass/fail/skip + BIO FR 覆盖 + 生信用例总数 ≥600 门禁核对 + UI 动作矩阵执行数 + 行覆盖率)、缺陷清单(BUG-R{n}-{序号} | 级别 | TC | 归属 agent | 现象 | 预期 | 证据路径)、上轮缺陷修复确认表、遗留问题
3. 缺陷分级按 TEST_PLAN §4:阻断/严重/一般/轻微
B. 循环:TL 派发缺陷 → 开发 agent 修复自测 → T2 复测(再次全量)→ 直至该期全部 TC pass + 主门禁 100%
C. 终验前:全量回归轮次(QA 对话/检索/docgen 无串扰断言 + 红线文件零改动核验)
## 【运行命令】(以 TEST_PLAN §7/§9 为准)
- 后端: cd sdk && pytest tests -m unit -q / -m api -q(生信: -m bioflow_unit / -m bioflow_api)
- 前端: cd ui && npx vitest run;npx playwright test(三档视口)
- 环境与 mock 见 bioflow_team_context.md;不连生产端口探测
## 【完成标准】
每轮报告写入 docs/TEST_REPORT_R{n}.md 后,最终回复明确写「BIOFLOW TEST2 R{n} 完成」+ 报告路径 + 首页统计摘要(TC 总数/pass/fail/FR 覆盖)