Skip to content

fix(security): 存量 Dependabot 告警清零——setuptools 升级修复 + 3 条经实测定性的 dismiss - #1129

Merged
ThreeFish-AI merged 13 commits into
feature/1.x.xfrom
ThreeFish-AI/fix-dependabot-alerts
Sep 6, 2026
Merged

fix(security): 存量 Dependabot 告警清零——setuptools 升级修复 + 3 条经实测定性的 dismiss#1129
ThreeFish-AI merged 13 commits into
feature/1.x.xfrom
ThreeFish-AI/fix-dependabot-alerts

Conversation

@ThreeFish-AI

Copy link
Copy Markdown
Owner

背景

上游 PR #1126 把 104 条 Dependabot 告警消到 4 条 open,但当时记录的「dismiss 清单」只写进了文档、从未在 GitHub 上执行,4 条仍挂在 open。

本 PR 对这 4 条逐条重新定性——不照单 dismiss,先问「能不能修」。结论:1 条可修(本 PR 落地),3 条经实测确认不可修(已在 GitHub 侧 dismiss)。

# 严重度 处置 依据
555 setuptools medium 升级修复 抬至 83.0.0(实解 84.0.0),删除对应 ignore
507 torch low dismiss 尝试升级,实测回归,已回退
678 transformers high dismiss pillow 冲突经实测证实
499 transformers high dismiss 同上

GitHub 侧现状:open 1 / dismissed 5 / fixed 669。剩余的 #555 正是本 PR 修复的那条,待合入后由 Dependabot 自动关闭。

变更内容

1. setuptools 由 ignore 改为升级(关闭 #555

setuptools>=82.0.1>=83.0.0,并删除 CI 中 PYSEC-2026-3447 的 ignore 及其 7 行注释(ignore 条目 28→27)。

三条依据:

  1. 上一轮隔离验证已证 82↔83 对本项目零功能差异pkg_resources 在两个版本中皆已移除)
  2. negentropy / cognizes 两个 app 早已跑 84.0.0,perceives 停在 82 属于不对称
  3. pip-audit 实跑对照——保留与剔除该 ignore 两种配置,匹配数同为 8、均 exit 0,证明它在 84.0.0 下已是死配置

这同时修正了 #1126 中「不为不可达低危变更 build 后端版本」的判断:存在零成本修复路径时,消因优于记账

2. torch 阻断根因订正(仅注释,不改依赖)

原记「受 marker-pdf / surya / docling-ibm-models / torchvision 四方联动约束」——经实测不成立:以 constraint-dependencies 解析 torch>=2.13.0 时,前三者版本纹丝不动。

实测得出的真实阻断torch>=2.13 强制 torchvision 0.25.0→0.29.0(其 0.25.0 硬钉 torch==2.10.0),而 transformers 受 pillow 冲突钉死在 4.57.6,二者在 docling engine worker 的导入链上不兼容。

同一条 parse-pdf 命令:

  • torch 2.10.0 → Status: Success(757B,表格正常)
  • torch 2.14.0 → Status: Failedcannot import name 'AutoProcessor' from 'transformers'

连续两次确定性复现。据此回退升级、维持 2.10.0,注释改写为已验证的因果链。

3. ISSUE-092 增补第二轮取证

记录上述结论,以及两个值得记住的坑(见下)。

两处方法论沉淀

override-dependencies 会静默压过上游声明,不能用它验证约束可行性。 本轮一度用它试 transformers>=5.10.0,得到「能解析」的假象;换成 constraint-dependencies(冲突即报错)后立刻 exit 1。

验证必须走项目的真实调用路径。 DocumentConverter().convert() 直调在 torch 2.14 下是成功的(600B 正确 markdown),只有经 perceives engine worker 才失败——只测上游库会得出完全相反的结论。

验证

结果
uv lock --check 三个 app 全部通过
关键包落点 setuptools 84.0.0;torch 2.10.0 / marker-pdf 1.10.2 / transformers 4.57.6 零位移
真实 PDF 端到端 走 docling 全链路 Success,与升级前输出逐字节一致(仅 conversion_time 抖动)
pip-audit exit 0(No known vulnerabilities found, 8 ignored
ignore 计数一致性 CI 实际 27 条,与 issue.md 记载一致
pytest -m "not slow" 2130 passed, 3 failed — 3 个失败均在 test_config.pyconcurrent_requests 期望 16 实得 32),已用基线复跑确认同样失败,属既存的本机配置覆盖问题,与本变更无关

覆盖边界:本地验证仅覆盖 macOS arm64。本 PR 未触碰 torch,CUDA 栈无变化,Linux x86_64 路径以 Perceives CI 转绿为准。

冲突处理

#1126 以 squash 方式合入 base,本分支保留原始提交历史,故在同一批文件上的后续修订与 squash 产物互斥。已合并 base 并解决 3 处冲突,均取 HEAD(本分支的更新版本):pyproject.toml(setuptools 83.0.0)、CI workflow(torch 根因订正 + 保持 ignore 已删除)、issue.md(base 侧为空,取新增的 11 行)。合并后已重新完成上述全部验证。

后续建议

本仓至今没有 .github/dependabot.yml——告警只报不修,104 条正是这么攒起来的。补一个只开 security-updates 的配置成本很低,建议单独开 PR 处理。

🤖 Generated with Claude Code

…项 alert;

- next / eslint-config-next 16.2.6 → 16.2.12,核销 Dependabot #574-582:
  SSRF(GHSA-89xv-2m56-2m9x / GHSA-p9j2-gv94-2wf4)、中间件绕过(GHSA-6gpp-xcg3-4w24)、
  Server Actions DoS(GHSA-m99w-x7hq-7vfj)等 9 条;修复门槛为 16.2.11,取 16.2 线
  最新补丁 16.2.12 以多带一版累积修复,不跨 minor 避免无关框架行为变更
- 补齐 `packages: []` 的 pnpm-workspace.yaml——本工程已从根 workspace 解耦但缺失隔离
  声明,是 ISSUE-175 所列同款入口中全仓最后一个敞口。本次恰好改动其 manifest,正是
  事故链第一环(改嵌套 manifest → 顺手 install → 根 lockfile 静默被覆写),故一并钉死
- 本工程无 lockfile、不被任何 workflow 构建,改 manifest 即生效:本批未执行任何
  pnpm install/add/update,根 pnpm-lock.yaml sha1 校验前后一致(06e898b1,13098 行)

🤖 Generated with [Claude Code](https://github.com/claude), [CodeX](https://openai.com), [Gemini](https://github.com/apps/gemini-code-assist)
Co-Authored-By: Aurelius Huang<threefish.ai@gmail.com>
…项 alert;

- next / eslint-config-next 16.2.6 → 16.2.12(negentropy-ui / negentropy-wiki /
  cognizes-ui):核销 #583-591 / #592-600 / #565-573 共 27 条,覆盖 SSRF、中间件绕过、
  Server Actions DoS、缓存混淆、Image Optimization DoS 等;修复门槛 16.2.11,取 16.2 线
  最新补丁多带一版累积修复
- @faker-js/faker ^9.0.0 → ^10.5.0(实解 10.6.0),核销 #687GHSA-qxc2-j82w-r537,
  helpers.fake 可被利用为任意代码执行,<=10.4.0 全线受影响故 9.9.0 亦在范围内)。
  跨大版本但唯一调用点 tests/ui/helpers/factory.ts 仅用 string.uuid / person.fullName /
  helpers.arrayElement / date.* / number.int / lorem.*,与 v10 移除清单零交集
- lockfile 完整性核对(ISSUE-175 教训):overrides 块 17 条全在、importers 5 个不变、
  next 两条 @babel/core peer 变体链(7.29.7 / 8.0.1)均保留、`@babel/core` override
  上界 `>=7.29.6 <8.0.0` 未放宽;净减 70 行系 @babel/core 获得 (supports-color) peer
  后缀导致的键合并,非依赖丢失;`pnpm install --frozen-lockfile` 通过

验证:cognizes-ui lint 0 error + tsc --noEmit 通过 + test:coverage 28 passed(含
faker 三个消费测试)+ build 通过;negentropy-ui lint(--max-warnings=0)+ typecheck +
build 通过;negentropy-wiki lint 0 error + build(含 pagefind 索引)通过。

🤖 Generated with [Claude Code](https://github.com/claude), [CodeX](https://openai.com), [Gemini](https://github.com/apps/gemini-code-assist)
Co-Authored-By: Aurelius Huang<threefish.ai@gmail.com>
- 直接依赖抬地板:pypdf 6.13.3→6.17.0(10 条 DoS/无限循环/内存耗尽)、
  pillow 12.2.0→12.3.0(13 条堆越界写/解压炸弹/命令注入)
- gpu 组抬地板:transformers 5.8.1→5.16.1(CVE-2026-9856 save_pretrained 路径穿越)、
  torch 2.12.0→2.14.0(CVE-2025-3000 torch.jit.script 内存破坏)。无上界阻断:
  sentence-transformers 5.5.0 仅要求 transformers<6.0.0 且不约束 torch
- constraint 抬升 cryptography 49.0.0→50.0.1(GHSA-g6cj-pr64-35w5 Bleichenbacher oracle)
- constraint 新增四条传递依赖地板:gitpython 3.1.50→3.1.61(18 条 git option/配置注入
  RCE 与任意文件读写;travel-agent-demo → streamlit 传递,本仓零 `import git`)、
  pyasn1 0.6.3→0.6.4(3 条 BER/CER/DER 解码器 DoS)、httplib2 0.31.2→0.32.0
  (解压炸弹 DoS)、setuptools 81.0.0→84.0.0(CVE-2026-59890 MANIFEST.in 绕过)
- 定向升级(--upgrade-package ×9)而非全量 --upgrade:lock 仅动 435 行且 docs 组
  零位移(mkdocs/pymdown 变更 0 行),保持可 review 与可归因

验证:ruff check/format 通过(207 文件);pytest tests/unittests/ 225 passed 2 skipped、
覆盖率 30.98% 过 20% 门;uv build + import cognizes 通过;六包运行时版本实测达标。
integration 套件 13 failed/110 passed —— 已用 git stash 在同一环境对拍确认与本次改动
无关(干净树同为 13 failed/110 passed,根因是 TracingManager.span 属性缺失与
tests/integration/mind 下 test_e2e.py 同名 basename 收集冲突,均为既存问题)。

已知验证边界:transformers/torch 的一手调用在 engine/perception/reranker.py,该模块
无单测。已尽力覆盖到 API 契约层——模块本身导入通过,且逐项验证 rerank() 实际调用的
AutoTokenizer/AutoModelForSequenceClassification.from_pretrained、tokenizer 四个 kwargs
(padding/truncation/max_length/return_tensors)、SequenceClassifierOutput.logits 路径与
torch.no_grad/sigmoid 在 5.16.1 下均存在;未验证真实模型推理(需下载 bge-reranker-base)。

🤖 Generated with [Claude Code](https://github.com/claude), [CodeX](https://openai.com), [Gemini](https://github.com/apps/gemini-code-assist)
Co-Authored-By: Aurelius Huang<threefish.ai@gmail.com>
- 移除 [dependency-groups] docs(mkdocs / mkdocs-material / mkdocstrings),核销
  #692(mkdocs-material DOM XSS)与 #618/#663(pymdown-extensions 路径穿越 + ReDoS)
- 判定为死配置的三项证据:① 全仓零 mkdocs.yml;② CI 从不安装该组
  (setup-python-uv 仅 `uv sync --group dev`),亦无任何 workflow/脚本引用;
  ③ src/ + tests/ + scripts/ 零 mkdocs 引用。项目文档站实为 negentropy-wiki(Docusaurus)
- 相较升版本,删组从根消除这两个包及其 12 个传递依赖,同类告警不再复发
- lock 为纯删除(-215 行、0 插入),移除项全部属 mkdocs 依赖闭包,无其它包位移

验证:uv sync --frozen --group dev 通过;import cognizes 通过;
pytest tests/unittests/ 225 passed 2 skipped——与删组前逐项一致,佐证该组无运行时作用。

🤖 Generated with [Claude Code](https://github.com/claude), [CodeX](https://openai.com), [Gemini](https://github.com/apps/gemini-code-assist)
Co-Authored-By: Aurelius Huang<threefish.ai@gmail.com>
- override 抬升 aiohttp 3.14.1→3.14.3:新增修复 GHSA-cq5v-8q36-5273(C 响应解析器
  堆越界读)与 GHSA-mfx4-hv73-q22v / GHSA-mq44-7p77-q5h7(WebSocket 请求走私/未协商
  压缩帧),核销 #641/#643/#645。override 机制不变:microsandbox==0.1.8 锁死 <3.11.0
  仍需强制覆盖,只抬地板版本
- constraint 抬升 cryptography 49.0.0→50.0.1:GHSA-g6cj-pr64-35w5(PKCS#7
  EnvelopedData 解密暴露 Bleichenbacher oracle,high),核销 #648。全仓零一手 import
  (authlib/google-auth/joserfc/presidio/pyjwt/pyopenssl 传递),且 perceives 已在
  50.0.1 上验证过同构依赖者集合
- constraint 抬升 pyasn1 0.6.3→0.6.4:BER/CER/DER 解码器 3 条 DoS
  (GHSA-m4p7-r5rc-7g4j / GHSA-hm4w-wwcw-mr6r / GHSA-8ppf-4f7h-5ppj),核销 #559/#560/#626
- constraint 新增 setuptools>=83.0.0(82.0.1→84.0.0):CVE-2026-59890(MANIFEST.in
  排除规则被 Unicode 归一化绕过),核销 #558。此前无任何声明,经 spacy/thinc 传递
- 定向升级:lock 仅动 6 行;pyopenssl 26.3.0→26.4.0 随 cryptography 联动

验证:alembic 单 head(0099);pytest tests/unit_tests/ 2941 passed、覆盖率 57.04%
过 50% 门;四包 import smoke 版本达标。integration 套件本地 116 failed/115 passed/
90 errors——已对拍干净树基线逐项一致(共享 negentropy_test 累积脏数据所致的既存
环境问题,见记忆 test-db-accumulates;CI 每次起新容器不受影响),与本次改动无关。

🤖 Generated with [Claude Code](https://github.com/claude), [CodeX](https://openai.com), [Gemini](https://github.com/apps/gemini-code-assist)
Co-Authored-By: Aurelius Huang<threefish.ai@gmail.com>
- mcp 地板 >=1.6.0 → >=1.28.1,<2.0.0:核销 #501/#503/#505CVE-2026-52869/52870/
  59950,MCP SDK http-transport 攻击面)。上界 <2.0.0:2.x 拆出 mcp-types/truststore
  属未验证 major 迁移(uv 默认解 2.1.1,已退回 1.x 线);alert 门槛 1.28.1,perceives
  实跑 1.28.1,本批实解 1.29.1(1.x 线最新)。idna 3.16→3.19 随 mcp 子树联动
- 一手调用面 3 处(interface/mcp_client.py 三种传输、knowledge/mcp_server.py 的
  FastMCP/StreamableHTTPSessionManager/TransportSecuritySettings、engine/sandbox/mcp.py),
  依赖要求逐条核对全部满足,与 aiohttp 完全解耦(mcp 走 httpx)

三层验证(对齐 ISSUE-092 的 CVE-2026-4372 验收范式):
① 符号 + 真实构造——stdio 私有 API 7 符号(mcp_client.py 8 处引用)全在;
FastMCP 四 kwargs(stateless_http/json_response/streamable_http_path/transport_security)
真实构造出 Starlette app;get_kb_mcp() 与 sandbox 构造路径不 mock 直接过
② 定向单测 22 用例(test_mcp_client 5 + test_mcp_client_resources 4 +
test_kb_mcp_server 13)全过;全量单测 2941 passed、覆盖率 57.04% 过门(与升级前逐项一致)
③ 真实 MCP 往返(合入前置)——httpx.ASGITransport 直打 create_kb_mcp_asgi_app():
tools/list 返回 200 且含 kb_search 工具清单;错误 bearer 401 拒绝。覆盖单测完全
mock 掉的 StreamableHTTPSessionManager.run() + stateless 路径(1.28+ 改动最多处)

🤖 Generated with [Claude Code](https://github.com/claude), [CodeX](https://openai.com), [Gemini](https://github.com/apps/gemini-code-assist)
Co-Authored-By: Aurelius Huang<threefish.ai@gmail.com>
… 并升级 datasets;

- transformers 锁定根因纠偏(pyproject [tool.uv] 注释):旧述「marker-pdf 1.10.2 /
  surya-ocr 0.17.1 在 5.x 崩(transformers.onnx)」已不成立——marker-pdf 2.0.0 /
  surya-ocr 0.22.1 均已适配 transformers>=5.12.1。真实阻断是二者同时要求 pillow<11,
  与本项目 pillow>=12.3.0(修 8 条图像解析 CVE)直接冲突;perceives 直接解析不可信
  PDF/图片故 Pillow 攻击面可达,而 transformers 零直接 import、仅加载第一方 artifact
  故不可达——升级属负收益交换。mineru 3.0.9 的 transformers<5.0.0 仅 vlm/pipeline
  extra 生效,不构成约束
- 解锁条件迁移:从「等 marker/surya 适配 transformers 5.x」改为「等二者放开
  pillow<11 上界」——跟踪对象不同,否则后来者会困惑「已适配为何仍锁」
- torch CVE-2025-3000 纠偏:upstream fix 2.13.0 已发布(原注释「暂无 fix」过时),
  改述为「有 fix 但受 marker/surya/docling-ibm-models/torchvision 四方联动约束」
- setuptools pin 注释纠偏:原述「undetected-chromedriver 依赖 pkg_resources」已证伪
  ——实测 82.0.1 与 83.0.0 皆无 pkg_resources(上游早于 82 移除,复核 ISSUE-092
  隔离结论)。维持 82.0.1:不为不可达 build-time 低危变更 build 后端版本
- 裁剪 6 条失效 ignore:fastmcp(CVE-2025-64340/CVE-2026-27124)与 litellm
  (CVE-2026-35029/35030、GHSA-69x8-hrgq-fjj8CVE-2026-42271)注释停留在 3.1.1/1.80.0,
  实锁已 3.2.4/1.85.0。实跑 pip-audit 确认两包零命中后删除,非凭版本号推断
- datasets 4.8.5→5.0.1:本次裁剪后暴露的新 advisory CVE-2026-66007(PYSEC-2026-3716,
  folder-based dataset builder 路径穿越任意文件读)。mlx-vlm 仅要求 >=2.19.1 无上界,
  故直接升级而非新增 ignore 债

验证:ignore 数组经 bash -n 语法校验(56 条);以 CI 原样命令复跑 pip-audit
退出 0——「No known vulnerabilities found, 10 ignored」;CI 参数复跑测试
(-n auto -m "not slow")2130 passed,docling/mineru/marker 三引擎 worker 均真实
启动;mlx-vlm 在 datasets 5.0.1 下 import 通过。3 个 test_config 失败已对拍干净树
基线一致(本地 .env 使 concurrent_requests=32≠默认 16,CI 无该文件),与本次无关。

🤖 Generated with [Claude Code](https://github.com/claude), [CodeX](https://openai.com), [Gemini](https://github.com/apps/gemini-code-assist)
Co-Authored-By: Aurelius Huang<threefish.ai@gmail.com>
- 记录 104 条 alert 人工核销的收口:100 条经升级消除,perceives 4 条走 dismiss
- transformers 锁定根因纠偏:marker-pdf 2.0.0 / surya-ocr 0.22.1 已适配
  transformers>=5.12.1(旧「transformers.onnx 崩溃」不再成立),真实阻断是二者
  要求 pillow<11 与本项目 pillow>=12.3.0 冲突;附攻击面可达性对比论证
  (Pillow 可达 vs transformers 不可达)说明升级为负收益交换
- 解锁条件从「等适配 transformers 5.x」迁移为「等放开 pillow<11 上界」,
  避免后来者按旧条件追踪而困惑
- torch CVE-2025-3000 状态迁移留档:upstream fix 2.13.0 已发布,原「暂无 fix」
  记录作废;此例印证本 Issue 既有防范条款「四元注释便于季度 review 识别可移除项」
- 记录本次 ignore 清单 review 结果(62→56 条)与 datasets 升级替代新增 ignore 的处理
- 沉淀三条方法论:「上游已适配≠可升级」须核对全部约束维度、安全债决策应比较
  攻击面可达性而非 CVSS 分数、ignore 注释的「阻断原因」腐化快于 CVE 本身

🤖 Generated with [Claude Code](https://github.com/claude), [CodeX](https://openai.com), [Gemini](https://github.com/apps/gemini-code-assist)
Co-Authored-By: Aurelius Huang<threefish.ai@gmail.com>
上一提交把本工程钉成独立 pnpm workspace 根以阻断根 lockfile 覆写,但漏声明
allowBuilds——原生构建许可原本继承自根 workspace,隔离后不再传递。

实测(pnpm 12.2.1,本目录完整 pnpm install):Error: ERR_PNPM_IGNORED_BUILDS,
被拦 @scarf/scarf / esbuild / sharp / unrs-resolver,退出码 1,且 pnpm 会往
pnpm-workspace.yaml 回写 "set this to true or false" 占位;根 pnpm-workspace.yaml
所载的 `cd … && pnpm install && pnpm dev` 因此卡在第一步。

注:作者侧大概率以 --lockfile-only 验证,该模式不执行构建脚本故退出 0,恰好掩盖此失败。

- 补齐四条许可,取值与根 workspace 一致(@scarf/scarf 保持 false,同为隐私考虑)
- 未纳入根侧 msw:本工程不依赖,遵循最小声明
- 注释指向修正:原「运行方式见同目录 README.md」——该 README 为 create-next-app
  原始样板,无 install 步骤亦未提隔离 workspace,改为就地写明安装运行命令

验证:修复后 pnpm install 退出 0、IGNORED_BUILDS 零命中;根 pnpm-lock.yaml 逐字节未变,
隔离目标保持有效;YAML 解析通过。

🤖 Generated with [Claude Code](https://github.com/claude), [CodeX](https://openai.com), [Gemini](https://github.com/apps/gemini-code-assist)
Co-Authored-By: Aurelius Huang<threefish.ai@gmail.com>
本分支已论证 transformers 锁定 <5.0.0 的真实阻断是 marker-pdf 2.0.0 / surya 0.22.1
要求 pillow<11,而非旧记的「marker-pdf / docling 兼容交集」;setuptools 保持 82.0.1
的理由亦已由「undetected-chromedriver 依赖 pkg_resources」改写为「已证伪」。但 CI
ignore 清单中的四处注释仍停留在旧口径,与 pyproject、issue.md 相互矛盾。

CVE-2026-9856 条已承载完整根因,其余三处改为指针式引用,避免同一结论多处维护:

- PYSEC-2025-211..218 / CVE-2026-4372 / PYSEC-2026-2290:删除「docling 兼容交集」
  归因,统一指向 CVE-2026-9856 条;CVE-2026-4372 的「待交集支持 5.3.0+ 后升级」
  同步改为「待 marker-pdf / surya 放开 pillow<11 上界」
- PYSEC-2026-3447:交叉引用由「见 pyproject,undetected-chromedriver 相关」改为
  「见 pyproject setuptools 注释与 ISSUE-092 2026-09-06 增补」——照旧文跳转只会
  读到相反结论
- ISSUE-092:「ignore 条目 62→56」订正为 34→28。negentropy-perceives-ci.yml 是
  全仓唯一 --ignore-vuln 来源,实测本分支前 34 条、后 28 条(差值 6 正确,绝对值错位)

纯注释与文档变更,ignore 条目与 pip-audit 行为零改动。验证:YAML 解析通过;
--ignore-vuln 实测 28 条,与订正后的 issue.md 记载一致;注释行宽与既有块保持齐平。

🤖 Generated with [Claude Code](https://github.com/claude), [CodeX](https://openai.com), [Gemini](https://github.com/apps/gemini-code-assist)
Co-Authored-By: Aurelius Huang<threefish.ai@gmail.com>
…正 torch 阻断根因;

存量 4 条 Dependabot alert 逐条重新定性,不照单 dismiss——先问「能不能修」。
结论:setuptools 可修(本提交),torch/transformers 三条经实测确认不可修,已在
GitHub 侧 dismiss 为 tolerable_risk。

setuptools #555:由 ignore 改为升级
- 抬 setuptools>=82.0.1 → >=83.0.0(实解 84.0.0),删除 CI 中 PYSEC-2026-3447
  的 ignore 及其 7 行注释(ignore 28→27)
- 依据:① 上一轮隔离验证已证 82↔83 对本项目零功能差异;② negentropy / cognizes
  两 app 早已跑 84.0.0,perceives 停在 82 属不对称;③ pip-audit 实跑对照——保留与
  剔除该 ignore 两种配置匹配数同为 8、均 exit 0,证明它在 84.0.0 下已是死配置
- 修正上一提交「不为不可达低危变更 build 后端版本」的判断:存在零成本修复路径时,
  消因优于记账

torch CVE-2025-3000:注释根因订正(不改依赖)
- 原记「受 marker-pdf/surya/docling-ibm-models/torchvision 四方联动约束」经实测
  不成立——以 constraint-dependencies 解析 torch>=2.13.0 时前三者版本纹丝不动
- 实测真实阻断:torch>=2.13 强制 torchvision 0.25.0→0.29.0(其 0.25.0 硬钉
  torch==2.10.0),而 transformers 受 pillow 冲突钉死 4.57.6,二者在 docling
  engine worker 导入链上不兼容。同一条 parse-pdf:torch 2.10 → Success(757B),
  torch 2.14 → Failed(cannot import name AutoProcessor),连续两次确定性复现
- 据此回退 torch 升级、维持 2.10.0,注释改写为已验证的因果链

验证:uv lock --check 三 app 通过;真实 PDF 走 docling 全链路抽取 Success,与升级前
输出逐字节一致(仅 conversion_time 抖动);pip-audit exit 0(8 ignored);
pytest -m "not slow" 2130 passed,3 个 test_config 失败经基线复跑确认为既存的本机
配置覆盖问题,与本变更无关。

🤖 Generated with [Claude Code](https://github.com/claude), [CodeX](https://openai.com), [Gemini](https://github.com/apps/gemini-code-assist)
Co-Authored-By: Aurelius Huang<threefish.ai@gmail.com>
沉淀存量 alert 清零过程中的四项实测结论,其中两项推翻既有记载:

- setuptools #555 由 dismiss 改判为升级:记录 pip-audit 双配置对照(保留/剔除
  ignore 匹配数同为 8)作为「该 ignore 已死」的判据,以及「有零成本修复路径时
  消因优于记账」这一对上一轮最小干预判断的修正
- torch #507:旧记「四方联动约束」证伪(constraint 解析下三个 PDF 引擎零位移),
  真实阻断是 torchvision 0.29 与 transformers 4.57.6 在 docling worker 的不兼容
- transformers #678/#499:pillow<11 冲突经 uv lock exit 1 与上游 METADATA 双重证实
- 附带订正:marker-pdf 1.10.2(当前锁定版)本身也声明 Pillow<11,现状已由 override
  压过;准确表述应为「已验证组合换未验证组合」,而非「升 marker 会把 pillow 降级」

两条方法论增补(本轮踩坑所得):
- override-dependencies 会静默压过上游声明,故不能用它验证「某约束是否可行」,
  必须用 constraint-dependencies(冲突即报错)——本轮曾因此得到 transformers 5.x
  「能解析」的假象
- 验证必须走本项目真实调用路径:DocumentConverter 直调在 torch 2.14 下成功,
  只有经 perceives engine worker 才失败,只测上游库会得出完全相反的结论

另记 GitHub 侧收口:dismiss #678/#499/#507,并刷新 #492/#343 两条历史 dismiss 的
陈旧 comment(原载已证伪的 transformers.onnx 口径)。

🤖 Generated with [Claude Code](https://github.com/claude), [CodeX](https://openai.com), [Gemini](https://github.com/apps/gemini-code-assist)
Co-Authored-By: Aurelius Huang<threefish.ai@gmail.com>
同步 base 最新提交(#1126 安全告警核销的 squash 结果、#1127 influence EP1 交付),
解决 3 处冲突。

冲突成因:#1126 以 squash 方式合入 base,本分支保留原始提交历史,故本轮在同一批
文件上的后续修订与 squash 产物互斥。三处均取 HEAD(本分支的更新版本):

- apps/negentropy-perceives/pyproject.toml:setuptools>=83.0.0(base 侧为升级前的
  82.0.1,其「不变更 build 后端版本」的理由已被本轮 pip-audit 双配置对照推翻)
- .github/workflows/negentropy-perceives-ci.yml:保留 torch 根因订正(torchvision
  0.29 与 transformers 4.57.6 在 docling worker 不兼容,实测 parse-pdf Success→Failed)
  并保持已删除的 PYSEC-2026-3447 ignore 不被 base 侧恢复
- docs/.agents/issue.md:base 侧为空,取 HEAD 的第二轮取证增补 11 行

验证:CI YAML 与 pyproject TOML 解析通过;uv lock --check 一致;关键包落点不变
(setuptools 84.0.0 / torch 2.10.0 / marker-pdf 1.10.2 零位移);CI ignore 27 条
与 issue.md 记载一致;pip-audit exit 0(8 ignored)。

🤖 Generated with [Claude Code](https://github.com/claude), [CodeX](https://openai.com), [Gemini](https://github.com/apps/gemini-code-assist)
Co-Authored-By: Aurelius Huang<threefish.ai@gmail.com>
@ThreeFish-AI
ThreeFish-AI merged commit 03e1a45 into feature/1.x.x Sep 6, 2026
11 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant