admin
60375b04d7
chore: .gitignore 忽略含凭据的部署方案文档 DEPLOY_PAPER_176.md
2026-10-10 18:53:25 +08:00
admin
1bd4aea5fd
fix(build): render_active_library_env 输出 GENE_FAMILY_ROOT 而非未定义的 QA_ROOT
...
active_library.env 里 $QA_ROOT 从未定义,QA start.sh 在 set -u 下 source 时报
unbound variable 导致 8091 起不来。改用 prod.env 中已定义的 GENE_FAMILY_ROOT。
2026-10-10 18:52:15 +08:00
admin
51532a30bc
fix(ui): 工作台「提取任务」tab 与离线提示改为「上传文献」
2026-10-10 18:27:06 +08:00
admin
d37e0d9c3a
fix(paper): 确认大纲后即时 seed 进度卡并逐节刷新
...
- 后端写稿循环不再落空 paper_progress 块(重载后出现空卡),改落开始撰写文本
- 前端 confirmPaper 时用大纲节标题本地 seed 进度卡,2s 轮询 patch 逐节状态
- 当前节按 current_section_id 标 writing(…动画)
2026-10-08 17:10:50 +08:00
admin
c923419d2d
fix(paper): 大纲阶段修改意见路由回 sendPaper + 用原始 brief 重新生成大纲
2026-10-08 16:23:28 +08:00
admin
43a7c6c132
feat(paper): UI 优化(卡片文字颜色/去模式按钮) + 模板下拉加论文选项并接线渲染
2026-10-08 15:17:44 +08:00
admin
8b228923bd
fix(paper): 取消路径(cancel_paper) + 引用元数据清洗(丢弃杜撰 DOI/PMID)
2026-10-08 14:59:16 +08:00
admin
2e5372cf90
fix(paper): 论文产物渲染为 HTML + 文末追加参考文献列表/disclaimer
2026-10-08 14:54:00 +08:00
admin
91f6a1c242
feat: 新增论文撰写功能 paper-writer(独立 MCP 服务 + BFF 大脑 + 前端三卡)
...
- paper_writer_service(8097):FastAPI + MCP streamable-http 单端点,9 工具
(propose_paper_outline/write_paper_section/get_paper_progress/search_refs/
revise_paper_section/revise_paper/get_paper/complete_paper/cancel_paper),
SQLite 三表(papers/paper_sections/citations,WAL),GB/T 7714 引用协议
- BFF:services/paper/{mcp_client,agent}.py(裸 JSON-RPC 客户端 + 规则状态机)、
routers/paper.py、schemas.py 4 个 Paper*Block + ArtifactBlock 加 paper_id/citation_count、
config.py 开关、main.py 条件注册、docgen.py 抽 insert_artifact 公共 helper
- 前端:intent.js paperIntent 纯函数、Composer docgen 分支 sub-route、sendPaper/轮询、
PaperBriefCard/PaperOutlineCard/PaperProgressCard、DocPane cite-chip
- deploy/paper_restart.sh + toggle_paper.sh;compile_sdk.sh 白名单追加 paper 文件
- tests/paper 26 条(工具逻辑 + MCP 协议 + BFF 状态机 + 块 schema + 前端 intent 单测)
2026-09-30 22:29:22 +08:00
admin
0282cfeeeb
feat(bioflow): 阶段进度条+滚动日志+点击定位全链;图片注入三修;QA启动就绪等待
...
- 生信进度:后端新增 stage_progress 事件帧+进度解析白名单(rnaseq_qc/sample_qc),
kernel 日志流式落盘(20行/1s flush+fsync),logs 分页端点(offset/limit/eof),
事件 seq 跨重启扫描续增(2026-09-17 断流修复);前端 FlowProgressCard 确定性/
不确定两态进度条+点击定位到生信任务 TAB,BioJobsPane DAG 行展开滚动日志区
(3s 轮询),log_tail 4000 截断,重跑 stage_started 清零进度
- 图片注入:figures 三源重构(标准DOI图库主路径/遗留体系兜底/PMC兜底),
[[FIG:]] 宽松归一化识别 PMC/PMID/DOI 三种形态,引文兜底扩展至
[PMCID:]/[DOI:] 且标记未满配额继续注入,注入预算 90s/10篇(175 实测校准),
PMC graphic 无 content-type 宽松正则,空结果不缓存(176 冷连接三连败修复)
- QA 启动自愈:start.sh 启动前等 Qdrant readyz(30min)+Neo4j TCP(10min);
backend_guard 标签校验改子集判定
- 样本配对:同 inode 去重优先真实文件,R1/R2 归一配对一对一认领
- gitignore 新增 *.bak-*/*.before-*/bioflow_service/bioflow.db
测试:bioflow_service pytest 358/358,前端 bioflow vitest 205/205
2026-09-24 16:48:52 +08:00
admin and Claude Fable 5
0f6e16ce79
fix(sdk): run.sh 读取 PORT/PYTHON/BIND 移到 source .env 之后
...
- 此前 BIND 在 source 前读取,.env 的 BFF_BIND_HOST 覆盖失效,
175 开发形态绑到 127.0.0.1 导致内网 IP 无法访问
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-09-17 14:47:38 +08:00
admin and Claude Fable 5
964346dc77
fix(sdk): run.sh source .env + BIND host env 化(BFF_BIND_HOST)
...
- source .env 进 os.environ:neo4j.py 的 BFF_NEO4J_* 键与上游 URL 依赖
进程 env,仅靠 pydantic env_file 不够(175 重启卡点实测)
- BIND host env 化:默认 127.0.0.1(176 生产,nginx 80 唯一入口);
175 开发在 sdk/.env 设 BFF_BIND_HOST=0.0.0.0
- 一份脚本两机通用,下次打包部署 176 不会把 BFF 暴露到 0.0.0.0
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-09-17 14:45:01 +08:00
admin and Claude Fable 5
f10b86c088
feat(deploy): start_all 生信段尊重 BIOFLOW_ENABLED(默认 false=无生信版)
...
- 176 默认(含开机自启 plantai-apps.service)即为无生信启动版:
BIOFLOW_ENABLED=false 时 start_all 不拉起 8098,生信 TAB/入口不可见
- 开关来自 sdk/.env,切回生信版=bash toggle_bioflow_176.sh on
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-09-17 07:56:49 +08:00
admin and Claude Fable 5
d0e6c76ec1
feat(ui): 无生信启动时隐藏扩展按钮
...
- 扩展按钮与生信跳转按钮互补显隐:生信可用时显示扩展、
不可用时隐藏扩展并显示生信跳转(PlantAI-dev 9017 入口)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-09-17 07:37:32 +08:00
admin and Claude Fable 5
16bde32020
feat(ui): 右上角生信跳转按钮+四按钮文字标签
...
- TopBar 新增「生信」按钮(仅生信模块不可用时显示):点击开新窗访问
PlantAI-dev(当前主机名:9017,公网/内网自适应)
- 扩展/生信/设置/主题四按钮配文字标签(图标+文字并排,宽度自适应)
- 新增 deploy/toggle_bioflow_176.sh <off|on>:一键开关 176 生信模块
(改 BIOFLOW_ENABLED + 重启 BFF;off 时 /api/bioflow/health 404,
前端生信 TAB 自动隐藏)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-09-16 20:44:23 +08:00
admin and Claude Fable 5
ba43ba90bf
feat(bioflow): 样本配置 LLM 兜底——规则无法归纳时 DeepSeek 生成描述
...
- inspect_unknown_files:文件特征清单(路径/大小/magic/file 类型/压缩包
内嵌名),无扩展名随机名也能拿到结构化特征
- llm_sample_fallback:描述文件+实况分析均无结果时,把特征清单交给
complete_json(复用 DOCGEN_LLM_* 键)生成样本描述;r1/r2 回验存在性
(清单路径或解压后),幻觉路径丢弃;LLM 失败/未配置静默跳过
- prompt 独立文件(bioflow_service/app/prompts/llm_sample_analysis.txt)
- 5 个新单测(特征×2+回验/幻觉拒绝/不可用×3)+ 340 用例全绿;已部署 176
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-09-16 20:13:32 +08:00
admin and Claude Fable 5
36d3d8d62a
fix(bioflow): 描述文件候选择优+去除登记文件数上限
...
- 登记目录不再截断 200 文件上限(用户原始数据目录可能很大)
- 描述文件发现改为候选全收→逐份解析→按样本条目数择优(修复
此前选到无样本语义 tsv 导致语义丢失);tsv/csv 平手优先
- samples.yaml 保留描述文件语义(样本名+分组字段),路径经实况校正
- 176 rice 目录终验:登记 244 文件,样本名 HH11_Control_0h_rep1 等
分组语义保留,r1/r2 指向真实 fastq;任务 running
- 340 用例 + 4 场景全绿
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-09-16 20:03:49 +08:00
admin and Claude Fable 5
f2c101ec65
feat(bioflow): 样本配置智能分析——描述文件优先+实况分析+解压
...
- ensure_samples_yaml 重写(用户要求,不做变体匹配):
1. 描述文件发现(源目录树限深度 4):tsv/csv > xlsx > yaml/yml
2. 实况分析:分类原始序列与压缩包(tar/zip 解压到 input/archives/,
幂等),R1/R2 语义配对(不假设命名规律)
3. 描述文件路径校正:失效路径按 run 标识在实况中定位(唯一命中替换,
按 R1/R2 分边;零命中保留由 CLI 报错)
4. 生成 samples.yaml 引用真实路径,返回 fastq 父目录并入执行容器挂载
- 176 实测:rice 目录 24 样本全部通过输入校验,fastp 真实执行
- 340 用例 + 4 场景(tsv 校正/xlsx/实况配对/压缩包)全绿
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-09-16 19:54:21 +08:00
admin and Claude Fable 5
750e218541
fix(bioflow): 卡片防误操作+暂停立即生效+确认幂等
...
- 可调整参数卡「继续」成功后按钮隐藏,显示「参数已确认」
- 确认分析路径卡「确认创建任务」成功后按钮隐藏,显示「任务已创建」
- 后端 confirm_stage 幂等:已确认且 running/queued 的重复确认放行(不再 409)
- 暂停立即生效:docker run 加 --name,docker kill 终止执行容器,
running 阶段置 paused、任务即时暂停(kill 的 exit 137 不误判 failed)
- 340 后端用例 + 121 r3debug + 373 主套件全绿;已部署 176
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-09-16 18:01:24 +08:00
admin and Claude Fable 5
becf76ecd9
feat(bioflow): 分析路径规划中提示——planning 帧+前端思考中状态
...
- 后端 chat 流在规划开始前发 planning 帧(seq=-2,与 plan_ready 同机制)
- 前端收到 planning 帧立即创建 bioflow_path 块(status=running,
脉动圆点+「正在分析需求并规划分析路径…」),plan_ready 填入候选并关闭
- bioflow store 增加 planning/planningText 状态
- 339 后端用例 + 121 r3debug + 373 主套件全绿;已部署 176
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-09-16 16:15:17 +08:00
admin and Claude Fable 5
dcb810a758
feat(bioflow): wgs/pop/gwas 26 阶段参数契约(与 rnaseq 同款机制)
...
- stage_image_map 加 26 个 wgs/pop/gwas 阶段 cli_contract:
--workspace/--job-id/--prefix 公共三元组 + 上游 manifest 注入
(prev_manifest:<stage> 解析为 workspace/final/{prefix}.{stage}.manifest.json)
+ param:<name> 用户参数 + tool:<name> 镜像内工具
- kernel _contract_args 扩展 prev_manifest/tool 两种 source
- catalog 补 wgs/pop/gwas 参数 schema(确认表单收集参考基因组/样本清单/
表型文件/主成分等)
- 339 用例全绿;已部署 176
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-09-16 15:33:43 +08:00
admin and Claude Fable 5
3b512fffd0
fix(bioflow): rnaseq/wgs 阶段参数契约——CLI 参数注入+样本配置自动生成+产物路径对齐
...
- stage_image_map 加 cli_contract(13 个 rnaseq 阶段):-i/-o/-c 等
标志按契约注入;无契约阶段保持 --input-dir 默认形态
- rnaseq 系 -o 语义=产物目录,契约注入 workspace/final(CLI 内部以
output.parent 为 workspace 并建 output.parent/final——此前注入
workspace 导致 /job/final 权限错误)
- 登记目录自动生成 samples.yaml(按 f1/r1+f2/r2 配对,不覆盖手工配置;
此前 CLI -c 必填无来源,rnaseq 全链从未真实跑通)
- catalog 补 hisat2_index/gtf/prefix 参数 schema(确认表单收集)
- 338 用例全绿;176 真实任务验证:fastp 在真实 fastq 上产出 clean
产物+报告(首个真实跑通的 rnaseq 阶段)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-09-16 15:23:50 +08:00
admin and Claude Fable 5
04fb306624
fix(bioflow): 内核树运行时挂载——非 gf 阶段镜像缺 cli 模块
...
- 8 个阶段镜像中仅 bioflow-gf 内置 /bioflow-kernel,其余 7 个
(rnaseq/wgs/gfpy/rnar/rde/pan/interproscan) 执行时 No module named cli
- 服务端统一 -v kernel_dir:/bioflow-kernel:ro + -w /bioflow-kernel,
全部镜像可用,免重建 7 个镜像
- config 新增 kernel_dir/container_kernel_dir(env 可覆盖)
- 337 用例全绿
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-09-15 23:22:06 +08:00
admin and Claude Fable 5
2ee9af4bd0
fix(bioflow): 路径登记目录展开+黑名单+自动挂载
...
- 登记目录自动展开多文件(扩展名白名单过滤,上限 200)
- 移除白名单根校验(用户数据可在任意位置),改敏感路径黑名单
(/etc /root /proc /var/lib/docker 等前缀 + .env/*.key/id_ed25519 等文件名)
- 登记文件 symlink 进任务 input + server_registered.json 持久化
- 执行容器自动挂载登记路径(-v src:src:ro),跨重启恢复
- 前端 chat.js 兼容 items[] 响应(单文件亦在 items[0])
- 336 用例全绿
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-09-15 23:11:27 +08:00
admin and Claude Fable 5
957f3cb062
feat(ui): 导航按钮迁移右上角+删除会话栏底部工具栏
...
- 会话/扩展/知识图谱/设置 4 按钮自侧栏迁移至 TopBar 右侧(与主题按钮并列)
- 按需求收敛为扩展/设置两按钮,与主题按钮右上角同行水平对齐
(.theme-toggle-anim 改 inline-flex + svg 脱离基线,消除图标下沉)
- SessionRail 全档位删除(桌面底部工具栏/折叠态图标轨/窄屏抽屉)
- 清理死接线:openKg 函数与 toggle-side/goto-kg 事件
- 同步删除 r3debug 的 SessionRail 测试用例
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-09-15 22:49:41 +08:00
admin
e3870d19de
fix(extension): run 方法守卫与 trial 统一——适配器 _real 非 None 即执行
2026-09-15 12:35:48 +08:00
admin and Claude Fable 5
a008fbba2a
fix(extension): 产物收割排除代码副本+删 work 目录——输出契约校验语义不变
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-09-15 11:59:42 +08:00
admin and Claude Fable 5
3989dd3c3a
fix(extension): 容器入口可写工作目录——代码复制进 run_dir 执行+产物收割输出
...
18 用例脚本在 cwd 写 outputs/ 相对目录,代码挂载只读致 trial 失败。
等价做法:代码复制进 output/work 执行,{code_dir} 指向可写副本,
成功后 work 产物合并进 output_dir,输出契约校验不变。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-09-15 11:58:17 +08:00
admin
8a58703d61
fix(extension): converted_code 镜像保留嵌套结构(与 raw_code 落盘一致)
2026-09-15 11:51:27 +08:00
admin
4266a89872
fix(extension): 容器入口默认 cwd 改为代码目录(run.sh 相对脚本路径语义)
2026-09-15 11:43:16 +08:00
admin
1bce4bf587
fix(extension): context 接线改用 _default_exec_config(entry_script_dir 空串致 trial 入口缺失)
2026-09-15 11:37:39 +08:00
admin and Claude Fable 5
9bbe2c83f6
fix(extension): 入口脚本目录解析——176 部署树路径深度不同致 trial 报入口缺失
...
_resolve_extension_entry_dir 按 parents[4] 推导,175 仓库布局成立,
176 部署树(bioflow_service 独立树)深度不同 → 找不到 run_extension.py
→ 试运行报「入口脚本缺失」。修复:env BIOFLOW_EXT_ENTRY_DIR 优先 +
从 __file__ 向上逐级搜索 */bioflow_kernel/cli/run_extension.py + 兜底。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-09-15 11:24:05 +08:00
admin and Claude Fable 5
82b954b957
docs(deploy): BFF 手动重启 venv 绝对路径陷阱(2026-09-15 实测)
...
根因:venv 在部署根 install/venv,BFF 必须 cd sdk 起 app.main:app——
cd sdk 后相对路径 venv/bin/python 解析成不存在的
install/sdk/venv/bin/python(setsid failed to execute,端口静默 DOWN)。
修正 5f 示例命令(cd 前解析绝对路径)并补老进程 socket 失效场景。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-09-15 10:54:10 +08:00
admin and Claude Fable 5
d12071a4d7
feat(extension): 上传支持 zip/tar/目录三形态+结构自适应分类
...
- 前端零打包:归档文件(zip/tar/tar.gz/tgz)原样上传服务端解压;
目录拖入/选择器走 webkitRelativePath 多文件直传(filename=相对路径),
隐藏文件/__pycache__ 过滤 + 公共根剥离(参考 PlantAI-dev 主路径)
- 后端 _read_archive 魔数分派(zip/tar.gz/tar)+保留嵌套路径;
code_files 多文件字段;结构自适应分类(目录前缀→命令解析→扩展名,
未知归代码,纯数据 422 可读,纯脚本合法);store 嵌套落盘
- 存量 bug 修复:FormData 字段名 file→code_zip;golden File→JSON+test_file;
http size hint 兼容 code_zip 与多文件求和
- 测试:后端 334/334(新增 10 个变体用例),前端 122/373 全绿
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-09-15 10:34:52 +08:00
admin and Claude Fable 5
76529f78ab
docs(deploy): 环境镜像全量同步原则固化
...
2026-09-14 起为部署原则:175 全部 26 个环境类镜像
(8 bioflow-* + 16 plantai-env-* + allenv + protected)必须部署
到 176——扩展分析 runtime_image 可选范围 = 176 本地镜像全集。
含新增/修复镜像的同步流程、旧 tag 回退纪律、activate.d
宿主路径断链陷阱(panfamily 案例)。同步 175 docs/DEPLOY_SKILL.md
与本地 skill 的 §7.4。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-09-14 22:15:47 +08:00
admin
835d55cb5b
docs(images): bioflow-pan 镜像 panfamily 模块修复记录\n\n- 根因: conda activate.d 注入的 PYTHONPATH 指向宿主路径,容器内断链,\n 所有 from panfamily.io import 失败\n- 修复: panfamily 模块(68K)COPY 进 site-packages + 删断链脚本;\n 新镜像已 load 176,panfamily.io read_fasta 端到端通过(49432 序列)\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-09-14 22:05:45 +08:00
admin and Claude Fable 5
653d2211cf
fix(extension): inject_executor 废弃——曾把生信 stage runner 函数塞进扩展 store
...
根因:get_store() 惰性创建时调用旧 inject_executor,把 context.executor
(生信阶段 runner 执行函数)赋给扩展 store.executor 字段;启动注入真实
执行器时 .inject_real 撞函数对象('function' object has no attribute)。
修复:get_store 不再调;inject_real_executor 一律新建适配器实例注入;
inject_executor 保留空壳兼容。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-09-14 17:30:09 +08:00
admin and Claude Fable 5
4128fbf3bf
fix(extension): 执行器守卫与注入修复——active_store 不存在+占位误判已注入适配器
...
验收实测:176 启动日志『has no attribute active_store』(注入
跳过),且占位守卫按 type is ExtensionExecutor 判断——TL 接线的
适配器正是该类,已注入也会被误判 503。修复:注入走 get_store();
守卫改判 _real is None(真正未注入)。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-09-14 17:27:49 +08:00
admin and Claude Fable 5
68b45c60a0
fix(extension): 扩展意图检测提前到 route_intent 之前
...
验收实测:『创建一个扩展用于统计 fastq 质量』被 route_intent 判
qa(生信词库不识别扩展创建语义),扩展意图判定在 bioflow 分支内
永远到不了。修复:扩展两层判定移到 gen() 开头,命中发
extension_* 帧后返回;不命中走原逻辑(漏判安全)。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-09-14 17:24:27 +08:00
admin and Claude Fable 5
c0b3026209
fix(extension): docker 镜像引用双后缀拼接——已含 tag 的自动镜像再补 suffix
...
build_command 无脑拼 {image}:{suffix};自动生成镜像名已含 tag
(bioflow-ext-<fp>:<suffix>)→ 拼成 a:b:b 非法引用,175 真实执行
exit 125 invalid reference format。修复:含冒号视为已带 tag,
不补后缀;用例 04 真实容器执行(自动镜像+解析脚本+过滤断言)通过。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-09-14 16:01:28 +08:00
admin and Claude Fable 5
bb560d7bea
fix(extension): 自动镜像生成两缺陷——Dockerfile FROM 顺序+timeout 参数名
...
真实 docker build 冒烟暴露:
- render_dockerfile 把 LABEL 放在 FROM 之前,buildkit 报 no build stage
- _inspect_image/_cleanup_failed_build/collect_garbage 传 timeout=
而 _run_docker 形参是 timeout_sec,调用即 TypeError
验证:175 真实 docker build 补装 pandas 3.0.5 成功、指纹去重
REUSE_OK、容器内 import 通过;全量 324/15/122/373 转绿。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-09-14 15:59:33 +08:00
admin and Claude Fable 5
2a6315e615
docs(extension): 测试报告——TL 接管测试循环,B1-B4 缺陷修复,全量测试绿
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-09-14 15:10:10 +08:00
admin and Claude Fable 5
812decf310
fix(extension): 测试隔离+注入惰性适配+chat_stream 意图接线
...
TL 测试循环修复:
- conftest 两处 Settings 补 extensions_dir=tmp 隔离(此前测试扩展
落仓库默认目录,跨测试污染致列表排序断言失败)
- inject_real_executor 惰性创建适配器(store.executor 默认 None)
- chat_stream 接扩展意图两层判定:create→extension_upload 帧、
run→extension_candidates 帧、create_ambiguous→引导帧;
扩展链路异常不回退生信主链
- .gitignore 排除 tests/extension_cases_18/(2.6G 测试数据不入库)
验证:bioflow_service 324/324、内核 15/15、ui 122/122+373/373、
真实 docker 冒烟 SMOKE_OK。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-09-14 15:09:15 +08:00
admin and Claude Fable 5
3b16397baf
feat(extension): TL 接线——executor 适配/validate 帧/form_defaults/context 注入
...
- extensions.py: ExtensionExecutor 占位改为适配 Dev-B extension_exec
(ExtensionRunSpec→ExtensionRunRequest 翻译;inject_real_executor 注入)
- validate 两落点补 extension_validate 帧(ready_to_publish+form_defaults,
Dev-C 发布卡依赖);新增 _confirm_form_defaults
- context.py: init_context 尾部注入真实执行器,失败静默降级 503
全量测试:bioflow_service 324/324、内核 15/15、ui 122/122+373/373、build 通过。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-09-14 13:53:44 +08:00
admin
4fa758d602
Merge branch 'dev/extension-backend' into feature/bioflow-conversation-orchestration
2026-09-14 13:49:25 +08:00
admin
d95c2b5761
Merge branch 'dev/extension-frontend' into feature/bioflow-conversation-orchestration
2026-09-14 13:49:18 +08:00
admin and Claude Fable 5
4866b0408a
feat(bioflow): extension lifecycle backend (P0) - spec whitelist, state machine, AI build, intent layers
...
服务端生命周期部分(契约 §1/§2/§4/§5/§6;Dev-A):
- extension_spec.py: spec_v2 白名单 12 占位符 + {output_dir} 必含 + 白名单外拒绝
- extensions.py: 生命周期状态机(契约 §2 枚举) + {extensions}/{ext_id} 文件存储
+ ExtensionExecutor 接口占位(Dev-B 实现 extension_exec.py, inject_executor 注入)
+ extension_* 事件帧经 EventBus 发布(events.py 注册, 不改 job_* 语义)
- extension_llm.py: build/repair AI 转换(DOCGEN_LLM_* 优先, BIOFLOW_EXTENSION_* 别名)
LLM 不可用/坏输出一律回退规则版(_detect_requirements/_command_to_template 移植), 绝不 500
- routers/extension.py: 契约 §6 端点全集; trial/run 执行器未接入返回 503
- intent.py: 契约 §5 两层判定纯函数(A 创建词库 × B 已发布扩展打分 + 歧义消解 + 漏判安全)
chat/stream 接线留给 Dev-C 主分支整合
- config/schemas/main: upload_ext_allow 加 .zip/.py/.r/.sh; extensions_dir +
extension_max_repair_rounds(20) + LLM 键注释; 模型; router 注册
- tests: 5 个测试文件 71 用例; 全仓 286 用例通过
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-09-14 13:48:37 +08:00
admin and Claude Fable 5
03e6ff508a
feat(extension-frontend): 扩展分析前端引导卡 + 事件分派(Dev-C)
...
按 EXTENSION_CONTRACT.md §4 事件帧契约实现用户自定义扩展分析前端:
- chat.js: applyExtensionFrame extension_* 全事件集分派 + patchExtension*
块更新器(与 patchBioflow* 同幂等模式)+ sendExtension 引导流
+ uploadExtensionFile/trialRunExtension/confirmExtensionRun 动作
+ retry 扩展消息路由;现有 bioflow 路径零改动
- api/bioflow.js: 契约 §6 扩展端点封装(CRUD/build/trial-run/repair/
publish/run/runs/events SSE)
- 8 个扩展卡组件(Upload/Build/Trial/Validate/Publish/Candidates/
Confirm/Run)+ AssistantMessage 渲染挂接 + extension_published 确认块
- extensions store(侧栏数据面)+ ExtensionsPane + SessionRail 扩展入口
- intent.js A 层创建意图词典(§5 与后端同表双跑)+ Composer 分流
- i18n/bioflow.js 扩展卡文案 + 8 base 镜像表
- 单测 33 例:事件→块映射幂等/sendExtension 流/store 动作/8 卡 mount 冒烟/
创建意图词典;vitest 全绿 122/122 + build 通过
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-09-14 13:43:20 +08:00
admin and Claude Fable 5
79b4c7c52c
feat(extension): docker 执行内核入口 + 176 本地自动镜像生成(并行链路)
...
- cli/run_extension.py:容器通用入口(宿主挂载 /opt/bioflow-entry,镜像零改动);
extension.json → 模板渲染(白名单 12 占位符 + param_*,{output_dir} 必含)→
subprocess 执行(无 shell,进程组 SIGTERM→3s→SIGKILL)→ 输出契约校验(空目录退出码 3);
零第三方依赖(镜像内标准库)
- extension_exec.py:服务端 docker 执行器(list-form;三数据卷+入口卷;
--cpus/--memory 白名单独立复制不 import kernel.py;terminate→kill 同约定;
返回 {exit_code,timed_out,log_tail,cmd};run_stream 逐行增量)
- extension_image.py:指纹 sha256(base+tag+排序依赖) 前 12 位 →
bioflow-ext-<fp>:dev;inspect 命中复用;Dockerfile FROM base + apt + /opt/conda/bin/pip;
失败分类(pip/apt/network/timeout/docker_missing)+ LABEL 定位中间层清理;
registry 台账 + 引用计数 + collect_garbage
- extension_streams.py:契约 §4 事件流(trial/run async 生成器,增量日志节流,
EventBus 双发,防御性失败帧,aclose 回收)
- 单测 53 用例(15 unittest + 38 pytest)全绿;现有 bioflow 226 用例回归通过
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-09-14 13:36:18 +08:00
admin and Claude Fable 5
f0a1711ebc
fix(aqua): batch_runner path sanitize, loader batch embed, alias expansion
...
- batch_runner: sanitize paper_id to disk dir name (was skipping all
papers whose paper_id contains :/()); keeps explicit result path
compat; verified 5/5 no-skip on paren-DOI papers
- qdrant_loader: batch embed via Ollama array input (32/batch, 14x:
2.7 -> 36.9 texts/s, 24.5k points ~10min vs 2.5h); per-batch fail
falls back to single; checkpoint format unchanged
- entity_alias_aqua: +Streptococcus agalactiae (GBS), RAS
(forbidden_expansions), Danio rerio; merged vernacular/Chinese
aliases for O. niloticus / O. mykiss / S. salar / L. vannamei;
g02 gap entities now normalize correctly
- note for P3: ingest manifest MUST carry paper sidecar (pilot
manifest_pilot.json does not - would emit paper_id="result" dirt)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-09-13 01:06:38 +08:00
admin and Claude Fable 5
688edba169
docs(aqua): backfill measured budget numbers from 530-paper pilot
...
- measured: MD 1.6 calls/paper, PDF 28.2 calls/paper (assumed 8)
- full-scale LLM cost: ¥3110 (was ¥454 assumption-based)
- wall-clock: MD ~1.8d @4w; PDF ~4.5d @8w LLM-bound
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-09-12 22:20:06 +08:00
admin and Claude Fable 5
730692a1f6
feat(aqua): KB build tooling, aqua configs, QA artifacts (P1)
...
- phase2b_converter: result.json -> neo4j.cypher + qdrant_points.jsonl
(payload keys replicate direct_flow_retriever contract; kb_version=
aqua_srt_v1_20260930_normalized, source_system=Aqua_canonical)
- qdrant_loader: bge-m3 embed + batched upsert + checkpoint resume
- registry_builder: paper blocks -> registry jsonl (plant format)
- batch_runner: manifest -> convert -> neo4j -> qdrant, all checkpointed
- start_aqua_kb.sh: user-space trial instances (Neo4j 19889 / Qdrant 27435)
- smoke 11/11 green incl. resume drills
- aqua configs: entity_alias_aqua.yaml (22 entries), relation_taxonomy_aqua.yaml
(45 groups); manifest points to aqua configs
- QA artifacts: golden_aqua.jsonl (41 Qs zh/en), qc_standards.md,
budget_template.md + cost_model.py (measured pilot tokens)
- pilot: 500 MD + 30 PDF extracted, 0 failures; QC stats computed
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-09-12 22:19:40 +08:00
admin and Claude Fable 5
a9a0ece4b4
feat(aqua): aqua extraction chain v16_aqua_1_0 (copy of v16_1_2, aquatized)
...
- entity validator: 66 aquatic entity types / 45 aquatic relation categories
(fish/mollusk/crustacean/algae/water_quality/feed_ingredient/...)
- V16_SYSTEM_PROMPT rewritten for aquaculture; snake_case predicate rules
- rule seed vocab aquatized (60+ species incl. Litopenaeus vannamei,
Oreochromis niloticus, Oncorhynchus mykiss, Salmo salar)
- cost hook on all 4 chat.completions.create (no-op by default)
- run_v16_aqua_one_paper.py: --md entry (skip MinerU) + --pdf (MinerU)
- run_v16_aqua_batch.py: workers + batch_progress.json resume
- pilot: 500 MD + 30 PDF extracted, 0 failures
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-09-12 22:19:32 +08:00
admin and Claude Fable 5
00c77aa323
feat(aqua): figure chain dual-key generalization (PMCID/DOI)
...
- answer_composer: prefer [[FIG:PMCID]], fallback [[FIG:DOI:fullDOI]]
- sse_relay: marker regex accepts DOI form; DOI key passed through to figures
- figures: local index dual-key (pmcid + doi via registry paper_id/doi);
resolve_figures recognizes DOI form -> local first, EPMC search
(DOI->PMCID) fallback; silent degrade semantics unchanged
- normalize/humanizer: block protection covers [[FIG:DOI:...]] form
- plant KB unaffected: PMCID path byte-for-byte behavior kept; retrieval
chain untouched; 52 sdk tests pass
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-09-12 22:19:25 +08:00
admin and Claude Fable 5
6bcb88cf76
docs(deploy): 部署方法 Skill 化——含换机/无生信/自定义库路径变体与提示词示例
...
与本地 Claude Code skill(plantai-deploy)同源,面向 agent 自动执行;
新增 §7 部署变体(7.1 换机=密钥+路径+基础设施一次准备;7.2 无生信=
不部署 bioflow 树+env 关 BIOFLOW_ENABLED,start_all 自动跳过;7.3 自定义
库路径=QA_DB_ROOT/VSTORE_ROOT env 纯配置)与 §9 提示词示例(全量/新机
裁剪/纯前端/换库四种)。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-09-12 20:05:57 +08:00
admin and Claude Fable 5
037790c609
fix(aqua): DOI pairing decoder and MD extraction regexes
...
- MD: allow parens in DOI (old-style 10.1016/0006-3207(93)90088-i was
truncated at ")"); prioritize DOI-line doi.org URL; strip trailing
paren only when unbalanced
- PDF: require 10. at segment start (fixes year artifacts like
2010.0170 masquerading as DOI); keep full candidate on no-hit instead
of shortest prefix (10.1002/pd.71 was truncated to 10.1002); absorb
paren segments (10.1061/(asce)wr.1943-...); stop at DOI未知 marker
keeping registrant prefix; accept 10_ segment start variant
- undecodable PDFs: 71 -> 54; manifest DOI values now complete
- pairing count unchanged (3404) = true DOI overlap of the two corpora
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-09-12 19:46:13 +08:00
admin
afa7cce938
feat(aqua): unlock normalized KB identity via env with plant fallback
...
- normalized_release EXPECTED_RELEASE defaults to NORMALIZED_RELEASE_ID (plant value)
- from_env falls back to constant on empty env; backend_guard uses env-or-constant
- start.sh sources env/active_library.env after prod.env (qa + legacy-rag)
- build_all.sh --library <name|dir> renders library identity (no name whitelist)
- add kb-libraries skeleton (plant/aqua identity cards) and tooling/aqua_kb
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-09-12 19:10:08 +08:00
admin and Claude Fable 5
7444edf525
docs(acceptance): r4 六项缺陷验收用例与 TL 实测记录
...
测试 agent 编制的 S1/S2 验收用例 + TL §10 实测记录,
此前一直以未跟踪状态存在,本轮随 r4 修复链一并入库。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-09-12 18:40:08 +08:00
admin and Claude Fable 5
8d115f8f1c
fix(ui): SourceRow 徽标宽度级联修正(特异性提升)
...
上一提交的 .ft-ico width:auto 与 base.css 的 .ft-item .ft-ico
width:16px 特异性同为(0,2,0),bundle 中后者后发胜出,徽标仍被
裁成 16px。改 .source-row .ft-ico 提升特异性,生产实测徽标宽度
16px→86px,完整显示 paper_id 截断文本,与标题 8px gap 零重叠。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-09-12 18:38:07 +08:00
admin and Claude Fable 5
18e69046f1
fix(ui): 文献来源 SourceRow 徽标与标题重叠
...
r4 #27 把徽标从序号换成 paper_id(12 字符+…),但 ft-ico 仍是
文件树时代的固定 16px——13 个 mono 字符溢出与 ft-name 重叠。
改自适应宽度(width:auto 覆盖 base.css 全局规则,min 16px/
max 96px + ellipsis 截断),badgeTitle 属性保留完整值。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-09-12 18:32:51 +08:00
admin and Claude Fable 5
4b5b501463
fix(statusbar): loadSession 恢复时重建生信派生 pipeline 块
...
刷新/切会话后消息块来自持久化——派生块是瞬态镜像不落库,
恢复的消息没有它,阶段推进期间 4 点不亮。loadSession 的生信
任务事件订阅循环里补 syncBioflowDotBlock(m) 从持久化进度块
stages 重建,后续阶段事件经 patchBioflowEvent 链持续刷新。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-09-12 18:25:44 +08:00
admin and Claude Fable 5
7037a1d5d8
fix(deploy): restart 脚本 lsof 只取 LISTEN 态进程
...
2026-09-12 部署实测:lsof -ti tcp:PORT 返回该端口上所有 socket 的
进程——包括 BFF 到 8098/8094 的已建立连接,不只监听者。kill 多行
PID 时旧进程存活、新进程绑定失败静默退出(vstore 报 address already
in use;生信 restart 后仍是旧进程)。改 -sTCP:LISTEN 只取监听者,
kill 不再加引号(多 PID 需分词)。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-09-12 18:22:11 +08:00
admin and Claude Fable 5
36fc2a7250
fix(statusbar): 生信任务活跃期回退消息列表点亮 4 点
...
生产实测暴露缺口:生信对话的 chat/stream 在 plan_ready 后即关闭
(_finishCtx 清 streamCtx→currentMessage 为 null),而任务阶段恰在
流关闭后才真正运行——StatusBar 只读 currentMessage,阶段运行期
间 4 点仍不亮。这正是用户报的 bug 主场景。
- chat.js 新增 agentDotMessage getter:优先流式中 currentMessage;
流已收口时回退到消息列表里持有活跃生信任务(progress.jobId 且
jobStatus ∈ created/running/paused)的最后一条助手消息——其派生
pipeline 块正被任务事件订阅(connectJobEvents onEvent →
patchBioflowEvent → syncBioflowDotBlock)持续刷新。
- StatusBar.vue 数据源换 agentDotMessage;TopBar.vue runningPhaseOf
同换 + aggregate 在生信任务活跃期(busy=false 但有 running 相位)
点亮聚合点。
- 单测补生产实测场景:流已收口任务活跃→回退点亮;阶段推进随动;
任务终态正确收口空态。
验证:r3debug 89/89(新增回退用例)、主套件 373/373、dist 重建。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-09-12 18:22:03 +08:00
admin and Claude Fable 5
9d7ed1bdd3
feat(deploy): start_all.sh 编排生信服务(存在则启动/重启)
...
2026-09-12 陷阱 6:176 整机重启后 start_all 只拉五服务,独立树
bioflow_service(8098)掉进程无告警——生信 TAB 静默消失
(TAB 显隐由 /api/bioflow/health 轮询驱动)。
- start_all 模板新增生信编排段:探测 install 同级
bioflow/bioflow_service/restart.sh,存在则启动/重启并
8098 探活(restart.sh 自带旧进程 kill+重启语义),不存在
跳过;失败不阻断主服务。
- DEPLOY_FLOW §5.1 同步:生信首次部署与新机自动拉起区分。
验证:build_all.sh bash -n OK;生成的 start_all.sh 从 heredoc
提取后 bash -n OK。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-09-12 16:55:47 +08:00
admin and Claude Fable 5
f74b27daa1
fix(statusbar): 生信对话 4 个 agent 点不随相位点亮
...
根因:StatusBar/TopBar 只读 chat.currentMessage 的 pipeline 块 steps,生信对话
(sendBioflow)从不创建 pipeline 块——相位推进只写在 bioflow_progress.stages,
4 个点永远空态。
修复:
- chat.js 生信消息派生 pipeline 块(derived:true):bioflowDotStepsFromStages
按「每 4 阶段一轮」把 stages 镜像为 4 相位 steps(running→running、
failed→error 单调保持、done/skipped→done);newBioflowSkeletonMessage 自带
派生块,patchBioflowEvent/patchBioflowSnapshot 每次推进后同步,error 分支
收口当前 running 相位;AssistantMessage 与 _persistableBlocks 跳过派生块
(不渲染、不落库,后端 Block union 不受影响)。
- 连带修复:web_search_started 相位 retrieval→evidence(sse_relay.py 语义
属证据补全环节,原映射会在联网检索时造成「证据→检索」倒流跳变);
labels.js 兜底表补两条与 BFF 对齐。
验证:r3debug 88/88(新增 bioflowDots 14 + statusBarDots 6,含真实时序
mount→流到达→相位推进→终态)、主套件 373/373、sse_relay 29/29、dist 构建。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-09-12 16:32:21 +08:00
admin
00fe6a379e
docs(debug): r4 缺陷记录(六项缺陷+过程问题 P1-P7+环境部署问题 E1-E10,含根因/修复/验证/终态)
2026-09-12 09:32:59 +08:00
admin
faa8686461
fix(figures): PMC 解析冷连接重试——176 实测首次 TLS 握手 10s+ 超时,重连秒回;失败重试一次走热路径
2026-09-12 01:55:42 +08:00
admin
8e4fce062a
fix(figures): PMC 外网超时 5s→15s——176 实测 EBI 2-8s 波动,5s 超时致已解析图片被整体吞掉
2026-09-12 01:41:37 +08:00
admin
04bf099faf
docs(deploy): DEPLOY_FLOW 增补 §5e figures 本地图片源/§5f BFF 重启陷阱/§5g r4 部署清单
2026-09-12 00:10:45 +08:00
admin and Claude Fable 5
d54419f040
fix(r4-28v4): chat 候选腐烂根治——Qdrant 条目 paper_id 派生 DOI/PMCID 回填引用
...
根因(TL 实测 + 只读探针确认):
175 归一化库 Neo4j ASSERTS 关系 13040841 条全无 evidence 属性
(_ONE_HOP Cypher 也不返回 evidence);而 175 无 paper metadata registry,
Qdrant payload 无 pmid/pmcid/doi 键 -> chat 模式 public_citation 过滤
把有正文的 qdrant 条目(120 条)全滤掉,只留无 evidence 的 neo4j 图断言
(136 条)-> BGE 复刻 _document 模板输入 evidence 空 -> logit=-3.07,
sigmoid=0.044 与审计 bge 0.020-0.047 完全吻合 -> 0.25 final 门全拒
sources=[]。176 正常是因为配了 registry 回填 pmid。
数字链:dedup 244 -> public_citation kept 136(全图断言)-> pre_rerank 160
-> cluster 136 代表 -> rerank 全垃圾分。
修复:item_from_payload 引用字段回填优先级 payload 显式 > registry >
paper_id 派生(doi_from_paper_id/pmcid_from_paper_id + doi: 前缀形态)。
r4 v1/v2/v3 的阈值语义不变;search 免 rerank 路径不受影响。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-09-11 17:17:25 +08:00
admin and Claude Fable 5
0252d52425
fix(r4-28v3): 检索模式关闭图证据检索(use_neo4j),arginine 150s->亚秒
...
r3(2026-09-10 #28 )检索模式语义只关了 native_chain,漏关 use_neo4j
(graph 证据种子检索,graph_top_k=80):arginine 向量候选过 0.45 后照常
启动 13M 断言库图查询 150s+(TL 实测:关 neo4j 后 0.787s)。
强制块置于所有 ablation 解析之后,用户 ablation 不得重开图检索
(性能红线);use_graph_expansion 依赖 use_neo4j 一并显式关。
chat 模式不受影响。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-09-11 16:47:00 +08:00
admin
2895cd8497
Merge branch 'debug/backend1' into feature/bioflow-conversation-orchestration
2026-09-11 16:35:13 +08:00
admin and Claude Fable 5
aec01ca0df
fix(r4-28v2-amend): 补 direct_flow_retriever 阈值参数链路+单测
...
上一提交中 direct_flow_retriever 的 qdrant_score_threshold 参数
(retrieve 签名/audit/调用点)未落盘,真实 search 路径会 TypeError。
本次补上三处 + 新增 qdrant_search 透传单测(不触发 IO 的对象伪造)。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-09-11 16:34:37 +08:00
admin and Claude Fable 5
1fe80b293e
fix(r4-28v2): 双域阈值+检索模式免 LLM 免 rerank
...
TL 复测校准(TL 实测 175:垃圾 vector 0.32-0.34/正常 0.63+;垃圾 final 0.19-0.20):
1. score_gate 双域双常量:MIN_VECTOR_SCORE=0.45(QA_MIN_VECTOR_SCORE,向量域,
Qdrant score_threshold 与 search 预筛);MIN_SOURCE_SCORE=0.25 保持(chat
模式 final_score 后置过滤)。
2. pipeline answer():retrieval_only 无条件关 use_draft/use_planner(不看
llm.available,search 模式绝不产生答案);use_bge_rerank 强制关(免 CPU
rerank,性能根治);候选按 vector_score 排序直接输出且 final_score=
vector_score(与 Qdrant 阈值同域)。
3. Qdrant score_threshold 仅在 retrieval_only 路径传入(direct_flow
retriever 参数化,0.45);chat 不传保召回;v16_retriever 还原(r4-28 的
0.25 全域阈值回退)。
4. 单测更新:search 无 LLM/无 rerank/0.45 滤 0.32 保 0.63/score 取 vector
域/chat 不传阈值;chat final 域 0.25 语义不变。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-09-11 16:33:15 +08:00
admin
8d04eb6845
chore(r4): 恢复 methodology_routes.py 执行位 755(backend2 合并引入的 mode 变更)
2026-09-11 14:23:29 +08:00
admin
c620461794
Merge branch 'debug/backend2' into feature/bioflow-conversation-orchestration
2026-09-11 14:21:23 +08:00
admin
025e2d516c
Merge branch 'debug/backend1' into feature/bioflow-conversation-orchestration
2026-09-11 14:21:22 +08:00
admin and Claude Fable 5
f18286f022
fix(r4-47a/52): DOCX 红头标题样式同源解析 + 意图词典补总结/概括/归纳
...
#47a: 红头/标题字号颜色从 render_html 产物解析(新增 docgen/html_css.py:
内嵌 style 块 + 调用方传入的模板 css,组合选择器展开、px->pt),解析失败
回退历史常量(FF0000/22pt、h1/h2/h3 22/16/14pt,行为不变)。converter 与
导出路由把 css 传入 DOCX 转换,与 PDF/预览同源;非红头模板(如 report 灰
#333 )不误渲染红头。r3 的 doc-body 包裹/表格/图片结构不回归。
#52 : intent.py WRITE_VERB 补总结/概括/归纳,新增动词自指保护(唯一命中的
DOC_TYPE 等于命中动词本身时不算写文档意图,如「总结一下植物光合作用的过程」
仍 qa);cases_intent.md 同步规则与用例 31-34(共 34 条)。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-09-11 14:19:04 +08:00
admin and Claude Fable 5
28bee31d00
fix(r4-28): 检索相关性下限,无关问题空 sources
...
_select_graph_balanced 引入相关性下限 0.25(score_gate.py 具名常量,
env QA_MIN_SOURCE_SCORE 可覆盖):低于下限的候选不入选,全部低于下限
返回空;graph 配额语义不变,audit 增 min_source_score/below_min_source_score。
Qdrant 查询(direct_flow_retriever/v16_retriever 两处)加同源 score_threshold
双保险(collection distance=Cosine,0.25 与垃圾实测带 0.19-0.20 留余量、
远低于正常命中 >0.7)。pc_retriever 为禁用后端,零改动。
新增 test_score_gate.py:30 低->0、5 高+25 低->5、graph 配额、env 覆盖。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-09-11 14:18:56 +08:00
admin and Claude Fable 5
00eb0bc1d0
fix(r4-27): normalize_source title 空值回填(实体名/元数据标题字段,正文片段绝不参与)
...
消息级 sources items 的 title 为空导致前端文献列表渲染出正文片段。
回填优先级:顶层标题类字段(publication_title/article_title/journal_title/name)
→ metadata 标题类字段(paper_title/source_entity/name/source)
→ 顶层 source(断言主体实体名);全部缺失保持 null(前端有 fallback)。
paper_id/score/snippet 等既有字段不受影响。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-09-11 14:18:43 +08:00
admin and Claude Fable 5
b5dc12e8a5
fix(r4-52c): _pick_items 先按 doc_id 聚合再取块,重复文档不再占满名额
...
缺陷 #52c(验收 §6 第 3 条):_pick_items 原实现按 score 序逐条取 top_k 再
每 doc ≤3 去重,4 份重复上传的作者页块(得分几乎相同)占满 top-8,正文块
从未进入上下文,模型只能答「资料不足」。
修复(sdk/app/services/privateqa.py):
- _pick_items 改为先按 doc_id 聚合:doc 级得分 = 组内 max score;
按 doc 级得分降序取 top 文档(与 top_k 对齐);每选中文档取组内得分
最高的 ≤ PRIVATE_QA_PER_DOC_MAX(3) 块;块内按得分排序
- 组内近重复块(归一化 snippet 前 48 字符指纹相同——重复上传残留的
同一页面切块结果逐字相同)只取 1 条,防 200 条同内容作者页块把该 doc
的 3 个名额占满、正文块仍进不了上下文;正常相邻块(重叠 1 段)不受影响
- ask_private 候选池从 top_k 放宽到 min(top_k×4, 20):只取 8 条时重复
文档块把池占满、聚合阶段无块可选;最终 _pick_items 仍收敛到 top_k 条
- _is_self_deprecating/_build_context(12k 预算、[资料n] 引用编号)不动
测试:sdk/app/services/test_privateqa_pick.py(8 用例):4 doc × 200 作者页块
+ 正文块 → 多 doc 覆盖且含正文块;正常场景 top_k/每 doc 上限语义不变;
单 doc 上限;同分并列稳定;ask_private 候选池 top_k×4(≤20)与 e2e 全链。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-09-11 14:13:08 +08:00
admin and Claude Fable 5
60f7360cec
fix(r4-52b): vault.add 按内容 SHA256 去重,重复上传覆盖旧 doc_id
...
缺陷 #52b(验收 §6 第 2 条 + 回归 G3):同一 PDF 重复上传 4 次 → 4 个 doc_id
× 200 chunk = 800 条,FAISS 检索 top_k 被同内容不同 doc_id 的块占满。
修复(vstore/vault.py):
- add() 先算内容哈希 SHA256(原始文件字节),查 index.json 的 content_sha
字段判重;同内容 → 移除旧 doc 的检索行/密文/chunk 行,再落一条新 doc
(新 doc_id,meta 以本次上传为准,created_at 刷新)
- 去重后该内容在库中恒仅 1 个 doc_id、chunk 总数不翻倍;同名不同内容
按内容哈希不误判(G3-2);不同内容互不覆盖(G3-1)
- content_sha 落 index.json(doc_meta 新字段);rebuild_index 对历史密文
缺 content_sha 时以密文内容补算(重建后去重依据不丢)
- 与现有删除机制一致:index.remove_item 过滤重建 faiss、chunks.remove_document
过滤重建 chunk faiss(IndexFlatIP 不支持逐行删,现有机制即重建)
测试:vstore/tests/test_vault_dedup.py(5 用例):同内容两次 → 1 个 doc_id/
chunk 不翻倍/旧密文清理;meta 以本次为准;不同内容 → 2 个 doc_id;
同名不同内容不误判;重启(新实例 load)后仍去重。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-09-11 14:12:57 +08:00
admin and Claude Fable 5
3889a2a29b
fix(r4-38): mineru 启动期失败自动重试+中文可读错误+PYTHONUNBUFFERED
...
缺陷 #38(验收 §4):任务在最早阶段(pipeline 日志出现前)抛出无消息异常,
mineru API 侧 task.error 空串 → CLI 拼出空 message;API 异常日志打向 stdout
被块缓冲,CLI 失败后立即杀 API 进程,真因永久丢失。
修复(agent/methodology 与 agent/legacy-rag 两处同改):
- build_mineru_runtime 的 env 注入 PYTHONUNBUFFERED=1(子进程异常日志即写即落)
- returncode≠0 且 job.log 无 doc_analyze_streaming 行 = 启动期失败 → 自动重试
1 次(stdout 追加同一 job.log,日志留 [retry] 标记,重试块含重复启动命令行)
- 重试仍失败且仍无 pipeline 行 → status failed + 中文可读错误
「提取启动阶段失败(重试后),可能受主机 GPU/显示重配置干扰,请重试」,
附 job.log 原始错误尾部
- 已有 pipeline 行的中途失败不得触发重试,走原错误路径(含 CUDA OOM 中文错误)
测试:agent/{methodology,legacy-rag}/api/test_mineru_retry.py(两树 8 用例):
env 含 PYTHONUNBUFFERED;首败无 pipeline 行 → 重试;重试仍败 → 中文可读错误;
有 pipeline 行失败 → 不重试;json 直投跳过 mineru 段不重试;G6-2 边界。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-09-11 14:12:46 +08:00
admin
75877ecab7
fix(r4-27/32/47b/52a): 前端四项缺陷修复
...
#27 消息级来源 title 空值串行:SourceRow 标题链空值 fallback(非空 title
>paper_id>id>「(无标题)」,绝不渲染空文本或正文片段);bench store 新增
sourcesStale 失效标记,chat.js QA 流 onComplete 与检索模式完成终态置标记,
SourcesPane 监听自动 force 重拉(终态一次,跨会话后台完成不打扰当前视图)。
后端 normalize title 回填由 Dev-B1 负责。
#32 KG 搜索「水稻」无结果无反馈:KgPane 成功空结果新增 kgNoResult
「未找到相关实体」提示(与 kgDown 服务离线、kgEmpty 初始空态三态文案区分、
触发条件互斥),搜索按钮空结果后保持可用,arginine 命中路径不回归。
#47b 关闭文档→返回→再关闭看不到文档:docgen store 状态机加固——open/
adoptArtifact 自含复位 viewMode='doc';close() 作废在途 content/html 拉取序号
(迟到响应不再复活已清空的 html/css/templateKey/letterhead);fetchHtml 追加
contentSeq 归属守卫。反复关闭/资料库往返/会话切换无残留。
#52a「总结论文」路由 QA:WRITE_VERB 补「总结/概括/归纳」;「总结」自身在
DOC_TYPE 中会误拉无附件普通总结句,规则 3 细化——纯总结类动词句须命中
其他文档类型词(如「论文」)才进 docgen,带附件走规则 4 兜底。后端
intent.py 词典同步由 Dev-B1 负责,请 TL 校验双端一致。
单测:tests/r3debug/r4fixes.test.js 新增 31 例(含 SourceRow fallback、
sourcesStale 链路、KgPane 三态、docgen 状态机迟到响应作废、意图路由),
r3debug 全套 68/68 通过。
2026-09-11 13:57:00 +08:00
admin
7840527f82
fix(bioflow): 路径卡确认创建后事件断链——任务 201 创建但 UI 无反馈
...
根因:FlowPathCard.confirmCreate 创建成功后 emit(updated) 全链无人监听
(与 r3-07-01 跳过按钮同模式的事件断链,基线即存在)。后果:无进度卡、
无任务事件订阅、不落库(刷新即丢 jobId)。
修复:chat store 新增 confirmBioflowPath 一站式 action(创建→挂 job_created
进度块→connectJobEvents 带 onEvent 桥接推进消息块→落库);FlowPathCard
改调 action 并防重复创建;hydrateDetail 恢复未终态任务的订阅(刷新后续流转);
connectJobEvents 加 onEvent 回调。单测 5 项新增,全套 373 全绿。
2026-09-10 21:14:24 +08:00
admin
206f92e275
docs(debug): r3 缺陷记录文档(13 项+复测 4 项+部署 6 缺口,含根因/修复/时间/验证)
2026-09-10 20:38:11 +08:00
admin
39120b985f
docs(deploy): §5c 补 r3 实测关键 env(设备模式开关/LLM 阶段四键/8093 主上游提醒)
2026-09-10 20:10:22 +08:00
admin
f7188bed05
fix(deploy): 索引校验按标签+属性过滤(neo4j 自动命名,按名匹配永远为空)
2026-09-10 20:09:49 +08:00
admin
2fbbd3ee1f
fix(deploy): 补入 run_methodology_batch.py(LLM 方法学提取阶段,176 部署暴露的缺失)
2026-09-10 19:38:36 +08:00
admin
6cddda7afd
Merge branch 'debug/backend' into feature/bioflow-conversation-orchestration
2026-09-10 18:23:06 +08:00
admin
2150b28bf6
Merge branch 'debug/frontend' into feature/bioflow-conversation-orchestration
2026-09-10 18:23:06 +08:00
admin and Claude Fable 5
b497aec007
test: r3 定点复测结论附录(4 项缺陷复测通过)
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-09-10 18:13:49 +08:00
admin and Claude Fable 5
53069d4940
fix(ui): 复测缺陷 r3-07-01/r3-52-02 + b3 测试债
...
- r3-07-01 「跳过」无效:补齐事件转发链 MessageList(新增
skip-reveal emit)→ ChatPanel(@skip-reveal 监听)→ store.skipReveal();
新增 skipReveal.test.js 三层断言(点击定格终态/组件转发/ChatPanel 监听)
- r3-52-02 终态文案残留:docgen 轮询 tick 的 done 分支把 generation 步
desc 还原 DOCGEN_STEPS 默认文案「按大纲逐节生成正文」;docgenPoll
done 用例改两阶段 mock(running 进度文案 → done 还原)复现原缺陷
- 测试债:b3 bench.store.test.js 删除已下线 sessionSourceItems 引用,
按 #27 修复后语义改断言(后端去重结果原样透出)
自测:r3debug 32 项 + 全套 373 项 + private_docs 23 项全绿;
playwright 实测(mock SSE/docgen 202):跳过按钮点击后全文定格、
skip-btn/cursor 消失;docgen done 后第 4 步 desc 还原默认文案;无 JS 错误。
未 push。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-09-10 18:01:01 +08:00
admin and Claude Fable 5
671783eb1e
fix(ui): r3 前端 10 项缺陷修复(#7/#27/#28/#31/#39/#40/#42/#47b/#52/#55)
...
- #7a reveal 超时:长文按总时长 ≤8s 反推 interval(下限 12ms),短路径
30ms/字符不变(step=1);跳过按钮与 reduced-motion 行为不变
- #7b 标题编号:heading_open 注入 h1「一、」/h2「1.1」/h3「1.2.3」,
层级变化归零、自带编号跳过、md-hN class 恒挂、计数器逐次渲染重置;
DocPane md 回退预览与私有参考块用 renderMarkdownPlain 关闭注入
(防止编号被序列化写回正本)
- #27 会话聚合:删除前端二次聚合,会话域直接以后端 sources 为准;
SourcesPane/SourceRow 以 paper_id/id 为 key 与高亮依据,徽标显示
真实 paper_id(截断+悬浮),无 paper_id 退 index+1;
setHighlightSource 参数 index→key,chip 编号契约保持
- #31 节点详情:KgEntityDetail fetchExtra 序号守卫;KgPane :key 强制
重建;KgGraphView pointer 事件重构(pointerdown 不捕获、位移>4px
才捕获+标记 dragging、pointerup release、onClickNode dragging 拦截)
- #39 日志刷新:打开总是重拉+「刷新日志」按钮+有 running 时 5s 独立
轮询(onBeforeUnmount 清理)
- #40 轮询暂停:任何离开 extract 的切换 pausePolling;详情/日志展开态
提升到 store(detailOpenId/logOpen/runLog/logError),切 TAB 保留
- #42 模板选择:Composer docgen 模式模板下拉(自动推荐+内置+as_template
懒加载,失败降级),template_id 经 sendDocgen 传入
- #47b 会话切换 resetSession(selectSession 动态 import,只清不丢)
- #55 文档 TAB:docgen store viewMode + DocPane「资料库」/「关闭文档」/
「返回文档」按钮
- #28 检索文案:searchNoAnswer/searchTimeoutEmpty;200 降级体按
payload.degraded 分流,不再走 _errorMarker TIMEOUT 报错
- #52 异步轮询:api getTask/listTasks;sendDocgen 兼容 200/202,
202 后释放 busy 锁(生成期间可继续对话)、消息块记录 task_id、
2s 轮询 getTask、progress 驱动「生成中 x/y 节」、done 复用现有
artifact 挂块+落库+adoptArtifact+切 TAB、error 可重试;
会话恢复时 running 块含 task_id 续轮询(不误标「已中断」)
自测:29 个新增 r3debug 单测 + 23 个既有 private_docs 测试全绿;
npm run build 通过;playwright 冒烟(dev server 5199)无 JS 错误,
模板下拉/提取面板/日志刷新按钮渲染正常。
未 push;Debug-2 9090 未就绪,#52/#28 联调留待 9090 就绪后执行。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-09-10 16:17:11 +08:00
admin and Claude Fable 5
21063af703
docs(deploy): §5c MinerU CPU 裸部署 + §5d embedding 裸部署固化(176 实测)
...
- MinerU: 175 minerupy312 conda env 整体 tar 搬运到 176 /srv/plantai/mineru-cpu(8.1G),
模型缓存 /srv/plantai/mineru-models(3.6G);四个陷阱: tar --numeric-owner(非 --numeric-ids)、
shebang 重写、modelscope 绝对路径软链断链、stdin-EOF 关闭监视器(< /dev/null)
- 冒烟: 22 页英文 PDF 67s 出 74KB markdown, 与 175 GPU 基线 md5 逐字节一致
- prod.env 五项 env 已加(176, 待 methodology 代码修复后随 install 包重发布生效)
- embedding: Ollama 裸服务离线布局/bge-m3 位置/vstore env/CPU 性能实测(短句 4.1s, 780 字 1.0s)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-09-10 15:35:30 +08:00
admin and Claude Fable 5
c53fe9e09d
test: 176 手工测试 13 项缺陷验收用例(r3)
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-09-10 14:44:44 +08:00
admin and Claude Fable 5
f46319497d
docs(deploy): §6.7 功能自测五项(部署完成必须实跑,176 实测沉淀)
...
- 6.7.1 QA 完整 LLM 答案(complete 事件全量答案,非仅 progress 帧)
- 6.7.2 新文档入库闭环(上传→嵌入→检索→清理)
- 6.7.3 legacy-rag 真实图谱查询(冷缓存 >60s 需 120s 超时)
- 6.7.4 methodology 真实任务流(status 路径布局断言)
- 6.7.5 生信镜像冒烟+金标 E2E(smoke_golden 4 步全绿+24 ID diff 空)
- 自测结论记录要求:5/5 通过+两机一致性对比
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-09-09 09:52:11 +08:00
admin and Claude Fable 5
a57c1994e8
feat(deploy): 176 部署完成与启动脚本可移植化
...
- start.sh×3: venv 解析改为安装包内 ../venv 优先(175 旧路径回退), 176 等目标机免改
- build_all.sh: start_all 模板补 vstore 拉起 + BFF 前 source sdk/.env + PYBIN 可移植解析 + env 目录 mkdir
- DEPLOY_FLOW.md: §5.1 重写(176 实战模板: venv/torch 安装顺序/.env 键/ollama 离线携带/下载源可达性/内网直连), §0 增 176 已部署行
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-09-09 01:01:30 +08:00
admin and Claude Fable 5
e151f675f1
feat(qa-db): QA数据库裸进程标准(deploy/qa-db五脚本+守卫去版本锁定+打包/文档/Excel同步)
...
- deploy/qa-db/: qdrant/neo4j systemd 裸进程安装脚本+unit模板+整库替换(replace_db.sh)
* 数据双制品模型: <部署根>/qa-db 与 install 分开传输, 支持频繁整库替换
* 免编译(官方静态二进制/tarball)+本地 bin/ 离线分发+国内镜像回退
* 端口 27433/27434+19888/19885(127.0.0.1), 175 docker 容器(27333/19788)为其他项目共享不动
- backend_guard.py: 移除精确计数相等校验(数据库会整库替换/持续更新, 不得锁死版本)
保留身份校验(release/collection/kb_version/标签/关系类型), 计数仅随 health 返回
- qa/scripts/start.sh: reranker 模型路径回退(install/models/bge-reranker-base)
- build_all.sh: qa-db 脚本+reranker 模型入包; .gitignore: qa-db/bin 离线载体
- DEPLOY_FLOW.md: §0/§5.0/§5.0b/§6.0b/§7 QA 数据库裸进程标准
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-09-08 17:59:53 +08:00
admin and Claude Fable 5
acf5b734fa
feat(deploy): nginx 80 端口代理章节+模板+BFF 改绑 127.0.0.1(仅新增修改,未真实部署)
...
- deploy/nginx/plantai.conf(新): 80 反代 127.0.0.1:8090 模板,SSE 长连接
(buffering off/read_timeout 3600s>看门狗 1200s)+大文件上传
(client_max_body_size 0/request_buffering off/send_timeout 600s)适配
- 绑定脚本: bff_restart.sh/sdk/run.sh/start-dev.sh 默认 0.0.0.0→127.0.0.1
(nginx 80 为唯一客户入口);build_all.sh start_all heredoc 同改+nginx
模板入包 install/nginx/
- DEPLOY_FLOW.md: §0 绑定策略更新+nginx 模板位置;新增 §5b 从零安装
nginx(apt/yum 探测→放模板→nginx -t→启用→防火墙→先 nginx 后改绑的
切换顺序→内网验证);§6 质检增 nginx 专项(进程/80 监听/经 80 首页+SSE
冒烟+上传冒烟);§7 注明现网仍是 0.0.0.0:8090 直连形态待按 §5b 迁移
纪律: 仅新增与修改,未在目标机/现网执行任何 nginx 安装或改绑操作。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-09-08 15:15:21 +08:00