工程章程 是做什么的?
概述
一份可移植的工程实践章程,分解为聚焦的子技能。此技能是索引:它阐述了不可违背的原则,并为你路由到适合具体任务的子技能。完整的推理过程位于 references/engineering-constitution.md 中,该文件与本 SKILL.md 捆绑在一起,因此无论技能安装在哪里,它都会随之传输。
核心理念: 软件工程是随时间整合的编程。 为长期存在的系统进行优化——操作它、安全地更改它、在它崩溃时恢复它——而不是首次部署。
八项不可违背的原则
- 先理解再构建。 没有经过批准的设计,就不写代码。
- 记录每个决策及其理由——以及你拒绝的方案。
- 测试是一种控制,而不是形式——行为变更应测试优先。 失败的测试是信息,绝不能编辑掉。结构变更则需通过未编辑的现有测试套件全部通过来把关。
- 严格遵守YAGNI原则。
- 自动化重复性工作。
- 软件工程是随时间整合的编程。
- 不执行的规则就是建议。 将规则绑定到工具,或将其标记为需要审阅者判断。
- 用户的明确指令优先于本文档。 优先级:用户 → 章程 → 工具默认值。
我需要哪个技能?
第一层——通用(适用于每个项目):
| 你的任务 | 技能 |
|---|---|
| 开始一个特性,将想法转化为规范/计划 | designing-before-building |
| 已做出决定,记录下来(ADR、索引、延迟的想法) | recording-decisions |
| 提交、编写提交信息、自动化发布 | conventional-commits-and-releases |
| 编写/更改测试;权限/角色规则;重构中测试失败 | tests-as-a-control |
| 编写或重构代码;结构化变更;DRY决策 | change-hygiene-and-code-craft |
| 构建UI、组件、样式、无障碍 | interface-craft-and-accessibility |
| CI、推送前钩子、任务运行器、合并门禁 | merge-gates-and-automation |
| 日志、指标、链路追踪、健康检查、SLO、告警 | observability-and-slos |
| 不可信输入、密钥、认证、依赖、威胁建模 | defense-in-depth-security |
| 热点路径、分页、N+1、列表端点、公共接口 | performance-and-scale |
| 规划部署、回滚或事件/事后分析 | resilience-and-deploy-safety |
第二层——特定技术栈(仅在相关工具/主题存在时加载):
| 你的任务 | 技能 |
|---|---|
| PostgreSQL、PostGraphile、RLS、SQL文件、应用→GraphQL→DB路径 | postgres-postgraphile-rls-and-sql |
| 在UI和测试之间共享的GraphQL查询;路由/模式契约测试 | graphql-contract-testing |
| 架构变更且数据必须保留——迁移、回填 | zero-downtime-migrations |
| 部署到Kubernetes/AKS、云密钥、渐进式发布、每个PR的环境 | cloud-delivery-aks |
这些技能如何应用于新项目
- 第一层不变迁移。 上述每个技能适用于任何项目——Web应用、管道、CLI、库。
- 第二层可替换。 当技术栈不同时,第二层技能不会触发(其描述针对特定技术栈),你可以替换为等效技能。它们所实现的原则(单一数据路径、最终强制执行点低、契约边界、可逆部署)仍然成立。
- 按生命周期缩放。 预发布或仅本地项目将零停机迁移、金丝雀发布和正式事件处理过程作为立即编写规则,触发时激活。在项目的第一个决策记录中声明其模式。
红旗
如果你即将编写代码、提交、部署或修改测试,而尚未查阅上述相关技能——请先停下来加载它。章程覆盖默认习惯(原则7);习惯正是它要纠正的。