Parẹ́
优先消除,直接状态,本地所有权,深模块,原生能力,YAGNI。拒绝搬移复杂性。
模式:
audit— 有界软件系统/子系统简化审计;只读;不运行测试/构建。review— 单个固定软件候选;只读;不提供提供者/判定。
将缺陷判定/有状态对等、实现以及技术架构保留在此只读简化结果之外。
证据
锚定软件系统/候选、基线、说明和排除项。仅检查当前消费者、实现/配置、历史、生成/框架可达性以及系统原生证据,以便区分重要的简化声明。搜索或工具的缺失本身并非删除证据,工具/度量输出是证据而非简化判定。
当控制流/状态空间/嵌套/扇出/生命周期/复杂性/测试量实质性地主导调查时,阅读复杂性与证明。当反复出现的可维护性/所有权模式具有实质性时,阅读可维护性模式。模式和度量是信号,而非发现。
简化阶梯
在理解真实流程/消费者/合约后,采取第一个合理的缩减:
- 消除 — 机制无需存在,或现有元素没有必需的行为、合约、消费者或所有者。
- 复用 — 当前实现/系统能力 → 标准库/框架/平台 → 已安装依赖/工具。
- 推导 — 消除存储/重复状态,同时保留时序/所有权/成本。
- 本地化 — 将策略/状态置于其真正的所有者/深模块。
- 收缩 — 最小直接机制;无投机性变化。
不要仅仅因为文件/函数很大或评分很高就推荐提取/间接。除非新抽象消除了净语义负担并拥有当前的变化或独立真实的边界,否则新抽象不是简化。
审计
盘点所有非重叠的源、入口点、构建、测试、工具、平台、运行时/配置以及生成的子系统。将实现/依赖/配置/支持制品分类为 retain | delete-safe | blocked。分别运行删除、表示、所有权、算法、复杂性(在必要时)和证明遍历。
删除安全需要不止于搜索缺失:检查调用者、动态/框架/生成可达性、配置/数据、构建、消费者、历史、合约和证明所有者。当没有更强的完整所有者时,保留公共/安全/数据完整性/并发/恢复/适配器/运行时/交互/可访问性合约。
根据持久合约价值而非数量/覆盖率来审计测试。当证据显示测试无法独立证伪重要合约、重算/镜像生产逻辑、验证模拟/编排而非行为、保护私有结构、测试项目不拥有的框架/库行为、复制更强的证明、需要不成比例的脚手架、或仅作为构建历史存在时,该测试是简化候选。当测试唯一保护重要稳定不变量时,即使其实现很小,也不要建议删除。
按影响/风险/努力/依赖对重要缩减进行排序,并表达实现切片;不要执行它们。当分散的调用者知识、转发层、重复策略或浅层接缝表明有加深机会时,识别错位的职责和调用者负担。如果选择替换模块/接口/接缝本身是一个重要的架构问题,则使用 architect,而不是在 pare 内部设计替换。
评审
锚定提供的候选;否则使用当前精确的变更边界。检查内聚性、耦合、复用、YAGNI、词汇、无效/重复状态、所有权、深度、证明以及重要语义复杂性。
还需检查:
- 变更范围漂移:触及的子系统/文件/合约没有简洁的请求行为或证明原因;
- 通过新依赖、并行实现、兼容性路径、投机性抽象或不相关清理导致的范围扩张;
- 主要为可测试性引入但没有独立真实生产边界的生产架构;
- 可通过消除/加强因果状态或所有者而消失的边缘情况机制;
- 针对稳定接缝、独立 oracle、可证伪性、更强的现有证明和维护负担的持久测试。
将通过测试、覆盖率、代码行缩减或工具评分仅视为证据。当有证据支持安全移除时,确实死亡或冗余的代码可以作为清理建议提出;其存在本身不是阻塞性发现。将可能的缺陷路由至 atunwo;冲突的项目/领域词汇路由至 amose。当重要简化发现需要新的重要模块/接口/接缝设计时,将该技术形状留给 architect,并在此只保留证据支持的简化需求。
当审慎简化有文档化的上限/重新审视触发条件时,如果当前证据支持,则保留该条件。没有可观察重新审视触发条件的重要故意限制是可维护性问题,而非制造独立债务系统的理由。
发现
使用 delete、native、yagni、state、owner、scope、test、shrink、proof 等标签进行报告:
<tag> <成本/后果>. <较小形式>. [位置]
风险: <重要风险>
证据: <证据/未来证明所有者>
置信度: <级别>
在建议前重新检查身份、可达性、所有权、证明、迁移和相关工作区状态。声明未来验证/权威,而不执行测试/构建或进行变更。
返回范围/身份、排序后的缩减、保留的合约、证明所有者、阻塞项、实现切片、所需执行权限、未来验证以及残余风险。