Skip to content

refactor(chain): P2 结构治理 — 拆分 message.py 上帝文件,MediaInteractionChain 独立成模块(审计 #61) - #95

Merged
Aqr-K merged 1 commit into
fix/p0-securityfrom
refactor/p2-structure-governance
Jun 29, 2026
Merged

refactor(chain): P2 结构治理 — 拆分 message.py 上帝文件,MediaInteractionChain 独立成模块(审计 #61)#95
Aqr-K merged 1 commit into
fix/p0-securityfrom
refactor/p2-structure-governance

Conversation

@Aqr-K

@Aqr-K Aqr-K commented Jun 29, 2026

Copy link
Copy Markdown
Owner

背景

延续 P0(安全加固,PR #93)、P1(架构债)之后,处理 docs/architecture-audit-v3python.md §6 路线图的 P2 结构治理

本轮先用多 agent workflow(5 个 ecc:code-architect 并行精读,约 33 万 token)对 5 个 P2 项逐项评估「当前状态 / 是否已完成 / 能否行为保持 / 风险」,再据证据确定唯一可安全落地的子集,避免审计自身反复警示的「最该警惕的是优化本身」。

本 PR 范围:审计 #61 —— 拆分 message.py 上帝文件

app/chain/message.py 原 3369 行,含两个独立的 ChainBase 子类。将其中 MediaInteractionChain(1461 行)抽出为新模块 app/chain/media_interaction.py

  • 类体逐字节不变(纯移动,已用 diff 对原 message.py:1909-3369 验证一致)。
  • message.py 3369 → 1900 行(降至 <2000 行上帝文件阈值),ruff F401 核验删除随类移出后不再使用的 17 个 import。
  • 经再导出保持 from app.chain.message import MediaInteractionChain对外导入路径不变,且供 MessageChain 内部实例化。
  • tests/test_media_interaction.py:7 处 mock patch 目标从 app.chain.message.{DirectoryHelper,DownloadChain} 重定向至 app.chain.media_interaction.*——协作者随类迁移,mock 必须打在名字被查找的模块。

行为保持证明

证据 结果
全量测试 1970 passed / 19 skipped(与基线逐数一致)
MediaInteractionChain 类体 与原文件逐字节一致(1461 行)
MessageChain 类体 不变
ruff check --select F401 全通过
对抗式审查(3 维度 + 复核) 无新问题

P2 其余项的 scope 决策(证据见 workflow 分析)

# 审计项 结论 依据
#61 拆 >2000 行上帝文件 ✅ 本 PR 完成(message.py) transfer/subscribe/plugin/provider/search 因 _Class__xxx 跨类显式 demangle 耦合或单一内聚类,不可安全拆分,逐一 skip
#60 sync/async 双轨收敛 已完成 2cc5ccf6(分发内核统一)落地,无残留
#16 拆 ChainBase 上帝基类 留作独立 PR 可行为保持(按域拆 5 Mixin、内核留本类),但需重排 ~1300 行核心基类(28 子类依赖),diff 大、风险 medium,分析建议单独成 PR
#9 拆 Scheduler/Monitor 上帝类 暂不做 声明式作业表无法表达 spider 多触发等特例,且 Monitor 含 name-mangling 私有,不可行为保持
#38 扇出硬编码→扩展点登记表 暂不做 通知域注册顺序、批量注销等特例使统一登记表存在静默行为回退风险

测试计划

  • 全量 pytest:1970 passed / 19 skipped
  • ruff 静态检查通过
  • 类体逐字节一致性校验
  • 对抗式多 agent 审查(丢符号 / 循环导入 / 静默 mock 失效)

…立成模块(审计 #61)

将 MediaInteractionChain(1461 行)从 app/chain/message.py 抽出为新模块
app/chain/media_interaction.py,类体逐字节不变(纯移动)。message.py 由 3369
行降至 1900 行(<2000 行上帝文件阈值),ruff F401 核验删除随类移出后不再使用的
17 个 import;经再导出保持 from app.chain.message import MediaInteractionChain
对外导入路径不变,并供 MessageChain 内部实例化。

tests/test_media_interaction.py:7 处 mock patch 目标从 app.chain.message 重定向
至 app.chain.media_interaction(DirectoryHelper/DownloadChain 协作者随类迁移,
mock 须打在名字被查找的模块)。

验证:全量 1970 passed/19 skipped(与基线一致);MediaInteractionChain 类体与
MessageChain 体均逐字节不变;ruff 净;3 维度对抗审查 0 新回归 —— 行为保持。

P2 其余项:#60 双轨已于 2cc5ccf6 完成;#16 拆 ChainBase(可行为保持但需重排
~1300 行核心基类、28 子类依赖,diff 大)按分析建议留独立 PR;#9 拆 Scheduler/
Monitor 与 #38 扩展点登记表存在无法行为保持的特例,本轮不做。
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