主题: speckit-constitution 命令详解
创建日期: 2026-05-05
最后更新日期: 2026-05-05
关联 spec-kit 版本: 0.8.5.dev0
SKILL 路径:.trae/skills/speckit-constitution/SKILL.md
关联文件:.specify/memory/constitution.md、.specify/templates/constitution-template.md
学习目标
完成本篇笔记后,你将能够:
- 准确描述
/speckit.constitution命令的核心职责和产出 - 列举至少两种典型使用场景
- 按正确顺序描述命令的完整执行流程(至少 5 个关键步骤)
- 判断不同宪法变更场景对应的版本号递增类型(MAJOR/MINOR/PATCH)
- 在自己项目中独立执行命令并验证产出
命令概述
是什么
/speckit.constitution 是 GitHub spec-kit 工作流中的核心命令之一,负责创建或更新项目的"宪法"文件(位于 .specify/memory/constitution.md)。
做什么
- 从宪法模板(
.specify/templates/constitution-template.md)初始化项目宪法 - 根据用户描述自动填充占位符为具体内容
- 管理宪法版本号的语义化递增
- 校验并同步依赖模板文件的一致性
- 生成变更报告(Sync Impact Report)
产出什么
| 产出物 | 路径 | 说明 |
|---|---|---|
| 宪法文件 | .specify/memory/constitution.md |
项目的核心治理文档 |
| Sync Impact Report | 宪法文件顶部 HTML 注释 | 版本变更、增删章节、模板状态 |
触发方式
基本命令格式
/speckit.constitution [用户描述]
参数说明
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| 用户描述 | string | 否 | 对宪法内容、原则或变更的自然语言描述 |
示例
# 首次初始化(无描述,使用默认模板)
/speckit.constitution
# 带描述初始化
/speckit.constitution 本项目是一个学习 jquery 的项目,产出是 jquery demo 代码
# 修改某原则
/speckit.constitution 将原则II改为代码优先
# 新增原则
/speckit.constitution 新增一条关于代码审查的原则
# 更新治理规则
/speckit.constitution 修改版本策略为双周发布
使用场景
| 场景 | 说明 | 示例命令 |
|---|---|---|
| 项目初始化 | 为新项目建立核心原则和规范约束 | /speckit.constitution |
| 新增原则 | 引入新的开发范式或质量要求 | /speckit.constitution 新增一条关于xxx的原则 |
| 修改原则 | 重构或调整已有原则的描述和范围 | /speckit.constitution 将原则I改为xxx |
| 更新治理规则 | 修改版本策略、审批流程等治理内容 | /speckit.constitution 修改宪法版本策略 |
执行流程详解
命令从触发到完成共经历以下 8 个步骤:
步骤 1:加载现有宪法
读取 .specify/memory/constitution.md。如果文件不存在,则从 .specify/templates/constitution-template.md 复制模板。
步骤 2:识别占位符
扫描宪法文件中的所有 [ALL_CAPS_IDENTIFIER] 格式占位符,例如:
[PROJECT_NAME]-
[PRINCIPLE_1_NAME]/[PRINCIPLE_1_DESCRIPTION] [CONSTITUTION_VERSION][RATIFICATION_DATE][LAST_AMENDED_DATE]
步骤 3:收集/推导占位符值
- 如果用户对话中提供了值 → 直接使用
- 否则从项目上下文推断(README、已有文档等)
- 对于无法推断的值 → 使用
TODO(FIELD_NAME): explanation标记 - 批准日期(RATIFICATION_DATE):首次创建时为今天,未知时标记 TODO
步骤 4:决定版本号递增类型
根据变更内容判断版本递增规则(详见下方「版本递增规则」章节):
| 变更类型 | 触发条件 | 递增规则 |
|---|---|---|
| MAJOR | 向后不兼容的原则删除或重新定义 |
X 递增,Y.Z 归零 |
| MINOR | 新增原则/章节或实质性扩展 |
Y 递增,Z 归零 |
| PATCH | 文字修订、措辞优化、非语义修正 |
Z 递增 |
步骤 5:生成宪法内容
- 替换所有占位符为具体值
- 保留标题层级结构
- 移除模板注释(除非仍有指导意义)
- 确保每个原则包含:简洁名称、具体规则描述、非模糊措辞(使用 MUST/SHOULD)
步骤 6:一致性传播检查
校验以下模板是否与更新后的宪法保持一致:
-
.specify/templates/plan-template.md— "Constitution Check" 部分 -
.specify/templates/spec-template.md— 范围/需求对齐 -
.specify/templates/tasks-template.md— 任务分类是否反映新原则 -
.specify/templates/commands/*.md— 命令引用是否过时
步骤 7:写入宪法文件
将完整的宪法内容写回 .specify/memory/constitution.md(覆盖写入),并在文件顶部注入 Sync Impact Report(HTML 注释格式)。
步骤 8:输出摘要
向用户报告:
- 新版本号及递增原因
- 需要手动跟进的文件
- 建议的 commit message
核心概念解析
宪法模板 (Constitution Template)
位于 .specify/templates/constitution-template.md,是宪法文件的初始骨架。包含以下占位区域:
# [PROJECT_NAME] Constitution
## Core Principles
### [PRINCIPLE_1_NAME]
[PRINCIPLE_1_DESCRIPTION]
### [PRINCIPLE_2_NAME]
[PRINCIPLE_2_DESCRIPTION]
...
## Governance
[GOVERNANCE_RULES]
**Version**: [CONSTITUTION_VERSION] | **Ratified**: [RATIFICATION_DATE] | **Last Amended**: [LAST_AMENDED_DATE]
占位符推断规则
AI 在填充占位符时遵循以下策略:
- 用户优先:用户在命令描述中明确提供的值优先使用
- 上下文推断:从 README、已有文件、项目结构中推断
-
合理默认:对日期使用当天,对版本号首次使用
1.0.0 -
降级处理:无法推断时使用
TODO(FIELD_NAME): explanation并在变更报告中记录
TODO 降级策略
当某些占位符确实无法推断时:
- 保留
TODO(FIELD_NAME): 原因说明格式 - 在 Sync Impact Report 的"Deferred Items"中列出
- 用户后续可再次运行命令补充
宪法文件结构
一份完整的宪法文件包含以下部分:
# [项目名称] 宪法
## 核心原则
### I. [原则1名称]
[原则1描述 — 明确、可测试的规则]
### II. [原则2名称]
[原则2描述]
### III. [原则3名称]
[原则3描述]
### ...(更多原则)
## [附加约束章节]
[如:文档组织约束、安全要求、性能标准等]
## [开发流程/质量门槛章节]
[如:审查流程、测试门槛、发布审批等]
## 治理
[治理规则、版本策略、修订流程]
**Version**: X.Y.Z | **Ratified**: YYYY-MM-DD | **Last Amended**: YYYY-MM-DD
标题层级规范
| 层级 | Markdown 语法 | 用途 |
|---|---|---|
| H1 | # |
宪法标题 |
| H2 | ## |
主要章节(核心原则、约束、治理) |
| H3 | ### |
单条原则或子章节 |
版本递增规则
宪法版本号采用语义化版本格式 MAJOR.MINOR.PATCH。
| 版本段 | 触发条件 | 示例场景 |
|---|---|---|
| MAJOR (X.0.0) | 向后不兼容的原则删除或根本性重新定义 | 删除"测试驱动"原则、将"代码优先"改为"文档优先" |
| MINOR (0.X.0) | 新增原则/章节或实质性扩展已有内容 | 新增"安全优先"原则、新增"部署约束"章节 |
| PATCH (0.0.X) | 文字修订、措辞优化、非语义修正 | 修正错别字、将"应该"改为"必须"以增强明确性 |
版本递增示例
| 场景 | 旧版本 | 新版本 | 递增类型 |
|---|---|---|---|
| 首次创建 | — | 1.0.0 | — |
| 新增第6条原则 | 1.0.0 | 1.1.0 | MINOR |
| 修改原则描述措辞 | 1.1.0 | 1.1.1 | PATCH |
| 删除核心原则 | 1.1.1 | 2.0.0 | MAJOR |
| 新增"部署约束"章节 | 2.0.0 | 2.1.0 | MINOR |
Sync Impact Report
每次宪法更新时,命令会在文件顶部自动生成一份变更报告(HTML 注释格式)。
格式
<!--
Sync Impact Report
==================
Version change: 1.0.0 → 1.1.0
Modified principles:
- [PRINCIPLE_2_NAME]: "II. Code-First" → "II. Documentation-First"
Added sections:
- "VI. Security Requirements"
Removed sections:
- (none)
Templates requiring updates:
- plan-template.md: ✅ updated
- spec-template.md: ✅ updated
- tasks-template.md: ⚠ pending
Follow-up TODOs:
- TODO(RATIFICATION_DATE): 首次批准日期待确认
-->
内容组成
| 字段 | 说明 |
|---|---|
| Version change | 旧版本号 → 新版本号 |
| Modified principles | 被修改的原则(旧标题 → 新标题) |
| Added sections | 新增章节列表 |
| Removed sections | 删除章节列表 |
| Templates requiring updates | 模板更新状态(✅ 已更新 / ⚠ 待处理) |
| Follow-up TODOs | 故意延迟处理的占位符 |
实际操作示例
场景:首次为本项目初始化宪法
步骤 1:在 Trae IDE 聊天框中执行命令
/speckit.constitution 本项目是一个学习 github spec-kit 的"项目"。项目的产出并非代码,而是学习笔记(markdown)文档
步骤 2:命令自动完成以下操作
- 检查
.specify/memory/constitution.md是否存在 - 如不存在,从
.specify/templates/constitution-template.md复制模板 - 识别所有占位符:
[PROJECT_NAME]、[PRINCIPLE_1_NAME]等 - 根据用户描述推导值:
- PROJECT_NAME → "Spec-Kit 学习笔记项目"
- 5 条核心原则(根据"学习笔记"上下文生成)
- 版本号 → 1.0.0(首次)
- 日期 → 当天(2026-05-05)
- 生成宪法内容
- 校验模板一致性
- 写回
.specify/memory/constitution.md - 输出版本摘要
步骤 3:查看产出
打开 .specify/memory/constitution.md,你将看到:
- 宪法名称:"Spec-Kit 学习笔记项目宪法"
- 5 条核心原则(结构化学习路径、Markdown 优先、实践驱动等)
- 文档组织约束
- 质量要求
- 治理规则
- 版本行:
**Version**: 1.0.0 | **Ratified**: 2026-05-05 | **Last Amended**: 2026-05-05
场景:更新宪法(新增原则)
步骤 1:执行命令
/speckit.constitution 新增一条关于代码审查的原则:所有学习笔记在归档前需经过同行审查
步骤 2:命令自动完成
- 读取现有宪法(版本 1.0.0)
- 识别变更类型为 MINOR(新增原则)
- 在核心原则末尾添加新原则
- 版本号递增为 1.1.0
- 更新 Last Amended 日期
- 生成 Sync Impact Report
- 写回文件
边界情况与注意事项
宪法模板不存在
行为:命令会尝试从 .specify/templates/constitution-template.md 复制模板。如果模板也不存在,命令将报错并提示用户先运行项目初始化。
解决:确保 .specify/ 目录已正确初始化,模板文件存在。
宪法文件已存在且仅提供部分更新
行为:命令仅更新用户描述中涉及的部分,其余内容保持不变。版本号根据实际变更类型递增。
注意:部分更新仍需执行完整的校验流程。
占位符无法推断
行为:使用 TODO(FIELD_NAME): 原因说明 格式保留占位符,并在 Sync Impact Report 中记录为待办事项。
解决:用户可再次运行命令,提供缺失信息。
模板依赖文件损坏或缺失
行为:一致性传播检查会跳过无法读取的文件,并在 Sync Impact Report 中标记为 ⚠ pending。
解决:手动检查并修复缺失的模板文件。
其他注意事项
- 宪法文件的标题层级不可随意修改,必须保持 H1 → H2 → H3 的层级
- 原则描述应避免模糊措辞("应该" → 替换为"必须 MUST"或"建议 SHOULD"并附理由)
- 日期必须使用 ISO 8601 格式(YYYY-MM-DD)
- 版本号行格式固定,不可更改
关键要点总结
-
/speckit.constitution负责创建和更新项目宪法文件 - 宪法是 spec-kit 工作流的"最高准则",定义核心原则、约束和治理规则
- 命令执行流程:加载模板 → 识别占位符 → 推导值 → 决定版本递增 → 生成内容 → 一致性检查 → 写回文件 → 输出摘要
- 版本号采用语义化格式:MAJOR(不兼容变更)、MINOR(新增内容)、PATCH(文字修订)
- 每次更新自动生成 Sync Impact Report(HTML 注释格式)
- 无法推断的占位符使用
TODO(FIELD_NAME): 原因降级处理 - 宪法文件位于
.specify/memory/constitution.md,模板位于.specify/templates/constitution-template.md
参考链接
| 文件 | 路径 |
|---|---|
| 宪法模板 | .specify/templates/constitution-template.md |
| SKILL 定义 | .trae/skills/speckit-constitution/SKILL.md |
| 当前宪法 | .specify/memory/constitution.md |
| 初始化选项 | .specify/init-options.json |
| spec-kit 版本 | 0.8.5.dev0 |