context-infra 检查与复盘infra.guiming.net · 全内容自包含呈现 · 生成于 2026-07-21 16:28 UTC

workflow_modular_design_entropy_control

Z3 全文↑ Z2 条目

道-方法 · 道层 skill 全文

← 返回道层 skill 索引 · 返回方法论区

本页是 <code>rules/skills/drafts/workflow_modular_design_entropy_control.md</code> 的逐字投影(仅隐私清洗,零改写)。

时点提示:本页是仓内文件 rules/skills/drafts/workflow_modular_design_entropy_control.md 的逐字投影(仅做隐私清洗:仓库根绝对路径→相对路径、家目录→~/;除此零改写)。若源文件后续有修订,以仓内真源为准。

报告元数据(frontmatter)
name: workflow_modular_design_entropy_control
description: 代码级模块化设计与熵从源头控制的道层判断(含补丁 vs 重构的"度")。用于写新功能、重构、审查代码、判断"该补丁还是该重构还是别动"、保证一个功能只有唯一实现、把复杂度挡在写代码的当下;也用于设计阶段/给需求时前置考虑模块边界与适配归属。区别于 workflow_complexity_drift_detection(运行期任务漂移)——本 skill 是写/改代码时的复杂度源头控制。
type: Workflow(道层 / 设计与维护判断)
status: draft (Beta) — 晋级前需在 ≥1 次真实写码/重构/审查任务里按"度"门做过判断并留证据,且配套检测器 modular_drift_gate 落地、证据到 bounded 以上
created: 2026-06-19
version: 0.1.0 (draft)

代码级模块化设计与熵从源头控制(含"度")

一句话

复杂度不是写完代码后冒出来的,是一次次"就加这一处特判/再留一个 fallback"在写代码的当下累积进来的。这个 skill 给的不是编码规范清单(那是术,已在别处),是写/改代码时的一个判断系统:怎么让一个功能只有唯一实现、怎么从源头把熵挡住、以及面对一段出问题的代码时怎么判"补丁 / 局部重构 / 大刀阔斧重构 / 暂不动"。

何时用(两期都触发)

非 trivial 的写码/重构/设计任务先按 _DAO_ROUTING 路由到这里再动手;一行琐碎改动不必。

不做什么(边界,本 skill 不重复造)

代码级判断之外的术层已有唯一真源,本 skill 只指针引用,绝不复制(否则自己就破坏了 SSOT):

本 skill 也不替你执行删除/重构——它产判断和理由,动手由你按判断做。

一、唯一真源与模块化(设计期那半)

模块化的目的不是"文件多",是找一个功能的实现时它唯一。判断一个边界切得对不对,用三个问题(来自 APOSD combine-or-separate-decision-rule,按名引用):信息是否隐藏在知识边界内、依赖是否被这个边界挡住、接口是否比实现浅。

落到"唯一真源"上,三条硬判断:

  1. 一个能力一个权威实现(DRY / PP,D3)。要写的逻辑别处已有 → 复用或下沉成共享资源,不复制粘贴改几行。用户原话:「更好的一种实现方式应该是添加一些可复用的资源,不要去做那种非常特异化的补充……从可复用性和实现的有效性上来考虑整体的实现方案」。
  2. 按知识边界切,不按执行顺序切(APOSD AX_19)。# Step 1 / # Step 2 式把一长串步骤塞进一个函数再用注释假分离,不是模块化(见陷阱 AP-1)。
  3. 复杂度向下沉,不向上漏(APOSD AX_51 pull-complexity-downward / D5)。模块要"接口窄、实现厚":把不可避免的复杂度在模块内部吸收,给调用方一个简单接口。浅模块(接口和实现一样复杂)等于没封装。

熵的层级(用户原话,常驻 USER.md):「好的设计就是在合适的层级约束熵。子节点的零熵(确定性需求)限制整体复杂性,每个模块只针对一个具体说法来降低困惑度」。设计期就是在决定"哪个说法归哪个模块"——切对了,每个模块只回答一个问题,整体困惑度才被钳住。

二、补丁 vs 重构的「度」门(维护期那半,本 skill 最承重)

先破除朴素二分:不是"补丁=坏、重构=好"。寄望"一次性大重构"逃出复杂度,大重构本身缺设计纪律时会复现同样的螺旋(APOSD AX_25 实证)。所以"度"是在四个动作里按问题性质选,不是一律重构。

动手加代码修一个问题前,按顺序问(这是判定门,顺序影响结论;一个没上下文的 agent 据此能对一个具体场景判出动作 + 理由):

  1. 这是 throwaway / prototype / 即将被替换的 legacy 吗? 是 → 补丁随意,跳过后面(债会随它退场消失)。
  1. 这点新复杂度是 essential 还是 accidental?(Out of the Tar Pit / D7,最干净的判据)。essential = 问题/外部现实本身就有这个情况;accidental = 为补我自己早先的实现选择而引入的。accidental 复杂度不是"补还是重构"的问题,是"消除"的问题——它本不该存在。
  1. 修复落在模块边界,还是模块核心逻辑里?(用户原话:"适配在模块、模块出问题直接重构架构")按 essential/accidental × 边界/核心 四象限定动作,四格都给:
  1. 若该重构,重构的"度"(防过度工程):目标不是把一切重写完美,是在你触碰的尺度上"让最终结构逼近——如果一开始就这样设计会怎么写"(APOSD modify-as-if-designed-from-scratch / D2),让系统至少不更差。爆炸半径分两层(JESA):
  1. 若 2–4 判定该重构、但确有 deadline 压力:允许一次性 tactical 补丁,但必须显性记债——在 commit / 代码注释写明"绕过了什么、欠了什么、什么时机该还"。一个可见可追踪的补丁 ≠ 螺旋;隐形累积才是螺旋(APOSD AX_24/25 实践建议)。

三、熵从源头控制(贯穿一、二的原理)

已知陷阱(真实案例,非编造;来自 tarot_agent 反例 + 本仓自审)

外部反例 tarot_agent(主 agent 亲验 file:line):

本仓自审 implementation_atlas_v2(主 agent live 验证;说明再讲究的系统也会积累冗余,所以要有源头纪律)——四个可命名的冗余模式:

四个模式的共同根因 = 缺一个"完成 = 接线 + 被消费 + 删旧"的验收门,"建了/写了"的完成感掩盖了"没接线/没删旧"的真实未完成。这正是源头纪律要顶住的地方。

验收标准(一次写码/重构判断是否过关)

可用资源

诚实 claim ceiling / 缺口


← 返回道层 skill 索引 · 返回方法论区