speckit.constitution.md
4.93 KB
description: 通过交互式或提供的原则输入创建/更新项目宪法,并确保所有依赖模板保持同步。
handoffs:
- label: 生成规格说明
agent: speckit.specify
prompt: 基于更新后的宪法生成功能规格说明。我想要构建……
用户输入
$ARGUMENTS
在继续之前,你必须先考虑用户输入(如果不为空)。
概述
你正在更新 .specify/memory/constitution.md 中的项目宪法。该文件是一个模板(Template),包含方括号占位符(例如 [PROJECT_NAME]、[PRINCIPLE_1_NAME])。你的工作是:(a)收集/推导具体值,(b)精准填充模板,(c)将所有修订同步传播到依赖产物中。
按以下流程执行:
-
加载
.specify/memory/constitution.md中现有的宪法模板。- 识别所有形如
[ALL_CAPS_IDENTIFIER]的占位符 token。 重要:用户需要的原则数量可能少于或多于模板默认数量。如果用户指定了数量,必须尊重该数量,并在通用模板结构下调整文档内容。
- 识别所有形如
-
收集/推导占位符的具体值:
- 若用户输入(对话中)已提供取值,直接使用。
- 否则从仓库上下文推断(README、文档、若存在则参考仓库内嵌的旧宪法内容)。
- 治理日期规则:
RATIFICATION_DATE为原始生效日期(未知则询问或标记 TODO);LAST_AMENDED_DATE若本次有修改则为今天,否则保留原值。 -
CONSTITUTION_VERSION必须按语义化版本规则递增:- MAJOR:不向后兼容的治理/原则移除或重定义。
- MINOR:新增原则/章节,或对既有指导做实质性扩展。
- PATCH:澄清、措辞、错别字修正、非语义性的精炼。
- 若版本升级类型不明确,在最终落盘前先给出判断理由。
-
起草更新后的宪法内容:
- 用具体文本替换每个占位符(不应残留方括号 token;除非项目明确决定暂不定义,并对每个保留项给出理由)。
- 保持标题层级不变;占位符被替换后,注释可移除,除非该注释仍对理解有帮助。
- 确保每条原则包含:简短名称行、概括不可协商规则的段落(或要点列表),若理由不明显则补充明确的理由说明。
- 确保治理(Governance)章节包含:修订流程、版本策略、合规审查期望。
-
一致性传播清单(把旧清单转为可执行校验项):
- 阅读
.specify/templates/plan-template.md,确保其中的“宪法检查”或规则与更新后的原则一致。 - 阅读
.specify/templates/spec-template.md,校验范围/需求对齐;若宪法新增/移除必填章节或约束,则同步更新模板。 - 阅读
.specify/templates/tasks-template.md,确保任务分类能体现新增/移除的原则驱动任务类型(例如可观测性、版本策略、测试纪律)。 - 阅读
.specify/templates/commands/*.md下的每个命令文件(包含本文件),确保通用指导中不残留过时的 agent 特定引用(例如仅写 CLAUDE)。 - 阅读运行/使用指导文档(例如
README.md、docs/quickstart.md,或存在的 agent 专属指导文件),同步更新与宪法变更相关的引用。
- 阅读
-
生成“同步影响报告”(更新后,作为 HTML 注释插入到宪法文件顶部):
- 版本变更:旧版本 → 新版本
- 修改过的原则列表(若重命名则写 旧标题 → 新标题)
- 新增章节
- 移除章节
- 需要更新的模板列表(✅ 已更新 / ⚠ 待处理),并附文件路径
- 若有占位符被刻意延期,列出后续 TODO
-
最终输出前校验:
- 不残留任何无法解释的方括号占位符 token。
- 版本行与同步影响报告一致。
- 日期使用 ISO 格式 YYYY-MM-DD。
- 原则陈述应可验证、可测试,避免含糊措辞(必要时将“should”替换为 MUST/SHOULD,并给出理由)。
将完成的宪法内容写回
.specify/memory/constitution.md(覆盖写入)。-
输出给用户的最终总结应包含:
- 新版本号与升级理由。
- 需要人工跟进的文件(如有)。
- 建议的提交信息(例如
docs: amend constitution to vX.Y.Z (principle additions + governance update))。
格式与样式要求:
- 标题层级必须与模板完全一致(不要升/降级标题)。
- 适度换行以保持可读性(理想情况下 <100 字符),但不要为了硬性限制造成生硬断行。
- 章节之间保持一个空行。
- 避免行尾空格。
如果用户只提供部分更新(例如只修改一条原则),也要照样执行校验与版本决策步骤。
如果缺少关键信息(例如确实不知道 ratification date),插入 TODO(<FIELD_NAME>): explanation,并在同步影响报告的延期项(deferred)中列出。
不要创建新的模板;始终在现有的 .specify/memory/constitution.md 文件上操作。