Skip to content

工程宪法


0. 适用前提

0.1 前提集合

本宪法建立在以下前提同时成立的条件下:

  • 管理员 / USER 具备足够高的系统判断质量
  • 骨架级分析报告具备足够高的事实质量、推理质量与利弊分析质量
  • 骨架级决策以成熟分析为前提,而不以情绪、惯性或短期便利为依据

0.2 适用目标

本宪法的目标不是弥补低质量判断,而是在高质量判断成立的前提下,约束工程实现对该判断的忠实执行,从而避免以下结果:

  • 系统背离本体
  • 骨架被局部功能污染
  • 结构性失稳在实现阶段累积
  • 既有高质量判断在工程演化中被逐步削弱

1. 总体约束

1.1 总纲

系统设计满足以下总约束:

  1. 必须先定义总骨架与边界,再定义模块,再定义实现。
  2. 任何局部功能只能填入既定骨架,不得反向塑造骨架。
  3. 系统优先保持整体结构长期稳定,而不优先追求局部极致最优。
  4. 系统允许模块替换与实现迭代,但不允许日常功能迭代以侵蚀方式改写主骨架。

1.2 固定顺序

任一设计任务必须严格按以下顺序执行:

  1. 定义总骨架与边界
  2. 列出模块清单
  3. 细化实现逻辑

禁止跳过前项直接进入后项。

1.3 骨架约束

系统演进时必须满足:

  • 骨架不因日常功能迭代而重构
  • 模块可替换
  • 实现可迭代
  • 接口尽量稳定
  • 状态模型尽量稳定
  • 数据模型慎改
  • 配置模型早定

1.4 优先级排序

当多个目标发生冲突时,系统必须按如下严格优先级排序作取舍:

正确性 / 功能实现

可用性 / 使用体验
根基兼容性
可维护性 / 可诊断性
性能
内存占用
外存占用
其它次级因素(如组件复用、工程复杂度控制等)

低优先级目标不得破坏高优先级目标。

1.5 根基兼容性在优先级中的定义

“根基兼容性”仅指对系统底层、长期稳定且被广泛接受的外部根基生态的兼容能力,以及对若干可能在一至两年内变化的根基外部参数的适应能力,例如:

  • CA 证书体系
  • 系统网络协议
  • 时区配置
  • Git 生态
  • 编程语言生态及其长期约定

1.6 示例:RSS 阅读器

对一个纯人类阅读向 RSS 阅读器,即使首版只实现“添加订阅源并阅读文章”,在进入页面与功能实现前,仍必须先确定:

  • 订阅源模型
  • 文章模型
  • 阅读状态模型
  • 呈现层与抓取 / 存储的解耦关系
  • 同步与导入导出的骨架挂接方式

否则后续“分类、收藏、OPML、全文缓存、云同步”等能力将倾向于以局部补丁方式侵入系统。


2. 元约束

2.1 完美主义约束

系统设计必须以完美主义作为持续自我审查标准,但不得以追求绝对完美为理由:

  • 破坏骨架稳定
  • 延迟必要落地
  • 引入无上限复杂化

2.2 完美主义的作用

完美主义在本宪法中的作用不是驱动系统无限膨胀,而是持续检验以下条件是否仍成立:

  • 边界是否干净
  • 抽象是否稳定
  • 实现是否统一
  • 替换点是否明确
  • 失败路径是否完整
  • 当前方案是否忠于系统本体

2.3 结论

完美主义在工程中的合法形式是:

  • 严格约束
  • 持续审查
  • 持续收敛

而不是:

  • 失控扩张
  • 过度设计
  • 无限推迟实现

3. 骨架构造约束

3.1 根基兼容性原则

对于已经形成长期稳定生态、并在系统底层被反复验证数十年的标准、协议、接口习惯、工程范式与工具生态,系统应优先兼容与接入,而不是重复造轮子。

3.2 根基对象的判定条件

一个外部生态仅当同时满足以下多数条件时,才应被视为“根基对象”:

  • 长期存在
  • 底层基础
  • 大规模接受
  • 稳定运转
  • 工程上具有历史沉淀

3.3 兼容与内生化规则

  • 对根基对象:优先兼容,不轻易重造
  • 对尚未形成长期生态、实现简单、替代成本低的能力:优先内嵌、重构或借鉴后纳入自身系统,不依赖外部兼容

3.4 值得兼容对象的判定条件

下列特征越多,越应兼容:

  • 长期稳定
  • 基础性强
  • 行业共识强
  • 自建收益低
  • 自建维护成本高
  • 脱离它会损失通用性与生存能力

3.5 不值得兼容对象的判定条件

下列特征越多,越不应兼容:

  • 仍在快速变化
  • 实现简单
  • 没有形成深度行业共识
  • 未来失效概率高
  • 接入收益小于绑定风险

3.6 工程实现约束

所有外部环境依赖必须通过兼容层或适配层进入系统。
核心逻辑不得直接绑定环境细节。


3.7 简洁、有力、整洁、统一原则

系统骨架只围绕其本体所必需的核心对象、核心关系与高概率能力轴建立。
首版可以只实现其中一部分,但骨架不得被首版功能误导,也不得为异质能力提前膨胀。

3.8 本体优先规则

系统定义应围绕本体对象、核心关系和能力轴,而不是围绕首个实现版本的功能清单。
首版功能仅决定实现顺序,不定义系统本体。

3.9 抽象规则

抽象只能建立在长期稳定的本体对象、关系与能力边界上,不得建立在以下对象上:

  • 首版实现
  • 具体格式
  • 局部技术细节

3.10 平级实现规则

属于同一变化族的具体实现,必须位于同一抽象之下,并以平级模块形式存在。
新增支持应优先表现为新增模块,而不是侵入既有主流程。

3.11 替代规则

系统优先支持模块替代,而不是流程改写。
实现应当可换,主干不应持续长出局部特判。

3.12 插件规则

插件机制不是架构起点,而是平级实现数量与替换需求增长后的自然承载形式。

3.13 能力纳入主骨架的三层判定

某能力进入主骨架,当且仅当其同时满足以下判定逻辑:

  1. 本体必要性判定:该能力直接服务于系统核心存在目的,或与之高度相关
  2. 同域延伸性判定:该能力属于同一问题域内自然延伸
  3. 异质侵入性判定:该能力不会引入一整套新的系统本体、依赖模型与复杂性,从而改变系统性质

若第三项不成立,则该能力不得进入主骨架。

3.14 统一性规则

系统允许复杂,但复杂必须以统一形式出现。
统一性至少体现在:

  • 相同职责使用相同层级表达
  • 相同错误使用相同错误模型表达
  • 相同输入输出使用相同数据模型表达
  • 相同配置项使用相同命名规范表达
  • 相同模块使用相同目录结构表达
  • 相同异步任务使用相同调度接口表达

3.15 示例:RSS 阅读器

对纯人类阅读向 RSS 阅读器,其本体对象不是“RSS 拉取页面”或“首版文章展示功能”,而是:

  • 订阅源
  • 文章
  • 阅读过程
  • 阅读状态
  • 内容来源
  • 内容解析
  • 内容呈现
  • 内容组织

因此,“多订阅分组、分类、书签、检索、全文缓存、云同步”属于同域延伸;“AI 分析、AI 问答、TTS、社交分享”若改变系统性质,则不应纳入主骨架。


4. 工程蓝图约束

4.1 蓝图要求

任何架构输出都必须向下细化到实现逻辑,不允许停留在概念层。

4.2 最低完备项

一个可施工的工程蓝图至少必须明确以下内容:

  • 模块职责
  • 调用关系
  • 输入输出
  • 状态变化
  • 错误处理
  • 配置入口
  • 生命周期
  • 扩展点
  • 替换点
  • 性能关键路径

4.3 判定规则

若一个方案只能说明系统大致分层、模块大致存在、目标大致正确,而不能继续下钻到具体调用逻辑与运行过程,则该方案只构成概念草图,不构成工程蓝图。

4.4 一致性要求

高层骨架、模块边界与实现逻辑之间必须连续。
不允许出现:

  • 上层抽象与下层实现脱节
  • 实现阶段临时发明破坏骨架的新结构

4.5 示例:RSS 阅读器

对“刷新订阅源”这一流程,工程蓝图必须能回答:

  • 输入是什么
  • 输出是什么
  • 订阅源状态如何变化
  • 新增文章数如何计算
  • 网络失败、源格式异常、存储失败如何传播
  • 抓取间隔、重试次数、超时时间如何进入配置
  • 解析器、网络层、存储层分别从哪里替换
  • 性能关键路径位于何处

5. 默认分层模型

5.1 四层架构 + 对象层

系统推荐采用“四层架构 + 对象层”的组织方式,并坚持壳核分离。

5.2 第一层:交互壳层

职责集合:

  • CLI / GUI / Web 界面
  • 动画、样式、按钮、输入控件
  • 平台适配
  • 用户动作捕获
  • 标准指令转译

唯一职责:

转译 + 呈现

5.3 第二层:指令接口层

职责集合:

  • 接收标准化指令
  • 校验合法性
  • 识别状态变化
  • 决定需要调用的能力
  • 组织返回给交互层的结果结构

其映射关系定义为:

  • action → intent
  • intent → state delta
  • state delta → capability requests

5.4 第三层:流程协调层

职责集合:

  • 任务拆分
  • 调用顺序规划
  • 前后依赖协调
  • 状态推进
  • 错误回滚或异常中止
  • 后方任务分发

第三层不直接接触第五层对象。

5.5 第四层:能力执行层

职责集合:

  • 数据计算
  • 存储
  • 读取
  • 网络通信
  • 文件系统操作
  • 外部系统调用
  • 后台处理
  • 具体算法执行

5.6 第五层:对象层

对象层不属于骨架分层本身,但必须明确。
其作用是定义系统中实际操作的最小数据元对象。

典型对象形式包括:

  • .md
  • .pdf
  • .jpg
  • text::line
  • text::byte
  • sql::article
  • sql::feed
  • data::html
  • data::xml
  • data::opml

5.7 表现变化与业务变化分离规则

界面变化不天然等于业务状态变化。
只有在进入内部指令系统后,系统才判断哪些变化属于业务变化,哪些仅属于表现层变化。

5.8 示例:RSS 阅读器

当用户点击“打开某篇文章”时:

  • 第一层只表达“打开文章”
  • 第二层判断这是否涉及文章切换、已读状态更新、正文请求等状态变化
  • 第三层组织具体流程
  • 第四层执行读取、解析、状态写入
  • 第五层明确所处理的对象是 sql::articlesql::reading_statedata::html

6. 一致性约束

6.1 边界封闭原则

一旦骨架划分完成,各层与各模块必须严格遵守职责边界。
任何新增功能都只能通过既定边界接入,不允许跨层直连、跨模块写入或绕过统一入口。

6.2 单一真相源原则

对任何核心对象、核心状态与核心配置,系统必须明确唯一可信来源。
同一事实不得在多个模块、多个缓存层、多个界面状态中并列作为最终依据。

6.3 示例:RSS 阅读器

文章“已读 / 未读”状态只能由统一的阅读状态模型作为真相源。
界面组件可以缓存显示结果,但不得与数据库状态并列为最终依据。


7. 运行可靠性约束

7.1 失败—观测—验证机制

7.1.1 失败优先定义原则

系统设计时,不能只定义成功路径,还必须优先定义失败路径。
任何核心流程在进入实现前,都必须明确:

  • 失败条件
  • 失败传播方式
  • 回退策略
  • 重试边界
  • 用户可见结果

7.1.2 可观测性内建原则

日志、错误码、状态追踪、关键事件记录与性能指标采集,必须作为架构内建能力进入骨架。
不能依赖事后补日志。

7.1.3 验证先行原则

任何核心骨架、核心流程、核心边界在进入大规模实现前,都必须有对应验证方式。
若一个原则无法被验证,则该原则在实现中极易失效。

7.2 版本与迁移原则

任何核心接口、核心数据模型、核心配置模型一旦变化,都必须回答:

  • 旧版本如何兼容
  • 现有数据如何迁移
  • 失败后如何回退

凡沉淀到磁盘、数据库、缓存、同步链路或导入导出格式中的结构,都负有版本责任。

7.3 幂等与重复执行原则

任何可能被重复触发、重复调用、重复投递、重复恢复执行的核心流程,都必须具备幂等性或显式去重机制。

7.4 并发与时序一致性原则

任何核心状态在被多个流程同时读取、修改、同步或回写时,都必须明确:

  • 谁先
  • 谁后
  • 谁覆盖谁
  • 冲突如何解决

7.5 示例:RSS 阅读器

对“刷新订阅源”流程,系统必须同时定义:

  • 抓取成功路径
  • 网络失败、解析失败、部分写入失败路径
  • 关键状态是否可追踪
  • 同一文章是否会重复入库
  • 已读状态是否会被刷新或同步错误覆盖
  • 批量刷新时的性能瓶颈位置

8. 运行裁量约束

8.1 默认保守原则

在信息不足或不确定性较高时,系统默认选择更保守、更稳定、更容易回退的方案,而不是更激进、更复杂、耦合更深的方案。

8.2 退出与删除原则

系统不仅要定义对象如何产生和增长,也必须定义对象如何停用、删除、迁移、失效和清理。
任何可被创建的核心对象,都必须有清晰退出路径。


9. 启动约束

9.1 实现最低原则

系统不得在草案尚未达到最低成熟度之前进入正式动工阶段。
任何实现都必须建立在最低限度分析与骨架确认已经完成的前提下。

9.2 最低成熟条件

进入实现阶段的最低条件是:

  • 系统本体已得到基本澄清
  • 主骨架与主边界已得到初步确认
  • 明显错误方向与异质能力已完成初步排除
  • 首版目标与主闭环已明确
  • 当前实现不会直接污染未来主干

9.3 探索性实现的限制

探索性验证可以存在,但不得:

  • 伪装为正式骨架实现
  • 未经收敛直接沉淀为长期主干

10. 纠偏与治理约束

10.1 证伪—纠偏—审批机制

10.1.1 证伪即退出原则

任何方向、能力轴、抽象、边界划分或骨架判断,一旦经分析被认定为错误、失效或已被证伪,就必须立即退出。
不得因沉没成本、既有投入、历史惯性或实现便利而继续占据主骨架。

10.1.2 骨架即时纠偏原则

系统在任何阶段都不承认“骨架一旦形成便不得修正”。
只要管理员 / USER 经分析认定某一方向错误、某一骨架判断被证伪,或某一骨架存在明显不完善漏洞,就必须立即进入骨架纠偏流程。

这里的“立即”定义为:立即启动分析、审查与决策流程,而不是绕过审查直接改动主骨架。

10.1.3 骨架变更审批原则

任何骨架级变更都必须先提交具体分析报告,并由管理员 / USER 阅读后明确批准,方可执行。
未经审批,不得擅自修改:

  • 主骨架
  • 核心边界
  • 核心对象关系
  • 主能力轴
  • 关键接口结构

骨架变更分析报告至少必须包含:

  • 变更原因
  • 当前骨架存在的问题或已被证伪之处
  • 变更后可获得的收益
  • 变更后新增的风险与代价
  • 对既有模块、状态模型、数据模型、配置模型的影响
  • 是否涉及迁移、兼容、回退与验证
  • 若不变更,会持续产生什么后果

10.2 决策复核与反证原则

任何管理员 / USER 的骨架级判断、方向性判断或变更性判断,都不因其审批地位而自动免于复核。
只要存在充分理由认为该判断可能失误、偏颇、证据不足或忽略了关键代价,就必须提交高质量、客观、完整的复核分析报告,对该判断进行反证性审查。

复核分析报告至少必须包含:

  • 当前判断成立的依据
  • 当前判断可能忽略的问题
  • 若维持原判断,可获得的收益
  • 若维持原判断,可能承受的风险与代价
  • 若修正原判断,可获得的收益
  • 若修正原判断,可能引入的新问题
  • 当前争议究竟属于实现问题、模块问题、边界问题还是骨架问题

复核的目的不是削弱管理员 / USER 的决策权,而是保证骨架级决策始终接受高质量反证与双面分析,从而持续逼近更高质量的系统判断。


11. 附录约定

11.1 实例附录

正文中仅保留最小必要实例。
更详细的 RSS 阅读器映射说明应移入附录单独维护。