mcpField
S
speckit-constitution

speckit-constitution

github.com/dceoy开发1562.4k 次安装2 天前更新
代码仓库

关于 speckit-constitution

speckit-constitution 是用于创建或更新项目章程的 Spec Kit 技能,并保留仍适用的现有规范。它将修改限制在章程文件,并列出延后的非治理请求。

主要功能

  1. 01解析当前生效的章程模板
  2. 02保留仍适用的现有原则
  3. 03更新治理与版本信息
  4. 04验证日期、占位符和结构
  5. 05延后无关的实现请求

适用场景

  1. 01为项目创建章程
  2. 02修订项目原则或治理规则
  3. 03将章程变更与功能请求分开处理

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/dceoy/speckit-agent-skills --skill speckit-constitution

安装后在 Claude Code 中输入/speckit-constitution确认已加载。

详细介绍

用户输入

$ARGUMENTS

如果用户输入不为空,必须先考虑用户输入,再继续操作。

范围限制

此命令的工作仅限于更新项目章程本身。依赖的模板和命令会在运行时读取章程,不在此处修改。

  • 将用户输入的每一部分归类为章程内容或独立的非治理意图。
  • 如果输入包含功能实现、代码生成、重构、构建或部署请求,不得执行这些请求。应将其提取为待处理意图。
  • 不得创建、修改或删除应用源文件、功能路由、组件、测试、部署文件或其他与章程工作流无关的产物。
  • 如果无法确定某条指令是否属于章程内容,请在进行更改前请求澄清。
  • 完成章程更新后,为每项待处理意图添加一个 Next Actions 部分。列出原始意图,并建议适当的后续 Spec Kit 命令,例如 /speckit-specify,但不要调用该命令。
  • 如果没有非治理意图,则省略 Next Actions 部分。

执行前检查

检查扩展钩子(更新章程前):

  • 检查项目根目录中是否存在 .specify/extensions.yml。
  • 如果存在,请读取该文件并查找 hooks.before_constitution 键下的条目。
  • 如果 YAML 无法解析或无效,不得默默跳过:告知用户无法读取 .specify/extensions.yml(包括解析器错误),并说明未检查任何钩子,包括其中注册的必需钩子(optional: false),然后继续正常流程。
  • 过滤掉 enabled 明确为 false 的钩子。没有 enabled 字段的钩子默认视为已启用。
  • 对于其余钩子,不要尝试解读或评估钩子的 condition 表达式:
    • 如果钩子没有 condition 字段,或该字段为空或为 null,则视为可执行钩子。
    • 如果钩子定义了非空的 condition,则跳过该钩子,并将条件评估留给 HookExecutor 实现。
  • 根据钩子命令名称构建命令调用时,将句点(.)替换为连字符(-)。例如,speckit.git.commit → /speckit-git-commit。
  • 对每个可执行钩子,根据其 optional 标记输出以下内容:
    • 可选钩子(optional: true):

      ## Extension Hooks
      
      **Optional Pre-Hook**: {extension}
      Command: `/{command}`
      Description: {description}
      
      Prompt: {prompt}
      To execute: `/{command}`
      
    • 必需钩子(optional: false):

      ## Extension Hooks
      
      **Automatic Pre-Hook**: {extension}
      Executing: `/{command}`
      EXECUTE_COMMAND: {command}
      
      Wait for the result of the hook command before proceeding to the Outline.
      

      输出上述内容后,必须实际调用钩子,并等待其完成后才能继续。调用方式应与在当前 Agent/会话中自行运行命令的方式相同(实际调用可能与上方显示的 {command} 标识不同,例如,技能模式 Agent 会运行 /skill:speckit-... 或 $speckit-...)。仅输出上述内容并不代表运行了钩子。

  • 如果没有注册钩子,或 .specify/extensions.yml 不存在,则静默跳过。

大纲

你正在更新项目章程 .specify/memory/constitution.md。当前章程脚手架会在命令运行时,通过 Spec Kit 预设/模板解析栈从 constitution-template 解析得出。

请按以下执行流程操作:

  1. 从仓库根目录运行 .specify/scripts/bash/resolve-template.sh constitution-template --json,并将 TEMPLATE_CONTENT 解析为当前生效的模板。

    • 共享解析器会先应用项目覆盖项、组合预设层和扩展层,然后才回退到核心模板。继续操作前,此命令 MUST 成功。
    • 如果失败,停止并报告解析错误;不要只使用一个贡献模板层继续操作。
    • 如果 .specify/memory/constitution.md 存在,将其作为当前项目特定值和修订内容的来源加载。应用新解析出的框架时,保留仍然适用的信息。
    • 如果该文件不存在,则将解析出的模板用作初始文档。
    • 不要写回任何受版本控制的模板层。
    • 找出所有形如 [ALL_CAPS_IDENTIFIER] 的占位符。 重要:用户要求的原则数量可能多于或少于模板中的数量。如果用户指定了数量,请遵照要求——以通用模板为准,并据此更新文档。
  2. 收集或推导占位符的值:

    • 如果用户输入(对话)中提供了某个值,请使用该值。
    • 否则,根据现有仓库上下文(README、文档、内嵌的既往章程版本)推断。
    • 对于治理日期:RATIFICATION_DATE 是最初通过日期(如果未知,请询问或标记为 TODO);如果有变更,LAST_AMENDED_DATE 使用今天的日期,否则保留之前的日期。
    • CONSTITUTION_VERSION 必须按照语义化版本规则递增:
      • MAJOR:不兼容的治理或原则删除、重新定义。
      • MINOR:新增原则或章节,或实质性扩展指导内容。
      • PATCH:澄清、措辞调整、错别字修正及非语义性完善。
    • 如果无法确定版本递增类型,请在最终确定前说明理由。
  3. 使用解析出的模板作为必要结构,起草更新后的章程内容:

    • 将所有占位符替换为具体内容(不得留下方括号标记,除非项目选择暂不定义某些模板占位符;如有此类占位符,必须明确说明理由)。
    • 保留标题层级。替换占位符后可删除注释,但如果注释仍有说明作用,则保留。
    • 每个原则章节都必须包含简洁的名称行和一段文字(或项目符号列表),概述不可协商的规则;如理由不明显,还须明确说明理由。
    • 治理章节必须列出修订流程、版本规则和合规审查预期。
  4. 更新章程文件后,在文件顶部添加一份 HTML 注释形式的同步影响报告。 此报告是供人工审阅修订内容的临时草稿,不属于治理内容;预计在提交修订后的章程文件前将其删除。

    • 版本变更:旧版本 → 新版本
    • 修改的原则列表(如有重命名,列出旧标题 → 新标题)
    • 新增章节
    • 删除章节
    • 后续 TODO(如有刻意暂缓处理的占位符)
  5. 最终输出前进行验证:

    • 不得有尚未解释的方括号标记。
    • 版本行必须与报告一致。
    • 日期必须采用 ISO 格式 YYYY-MM-DD。
    • 原则必须是明确、可测试的陈述,避免含糊措辞(将“should”替换为适当的 MUST/SHOULD,并在必要时说明理由)。
  6. 将完成后的章程写回 .specify/memory/constitution.md(覆盖原文件)。

  7. 向用户输出最终摘要,包含:

    • 新版本及递增理由。
    • 任何待处理的 TODO 占位符或需要人工跟进的事项。
    • 建议的提交信息(例如:docs: amend constitution to vX.Y.Z (principle additions + governance update))。
    • 针对任何暂缓的非治理意图,添加一个 Next Actions 章节。

格式与风格要求:

  • 严格按照模板使用 Markdown 标题(不要降低或提高标题级别)。
  • 较长的理由应换行,以提高可读性(理想情况下少于 100 个字符),但不要为了强行换行而造成不自然的断行。
  • 各章节之间保留一个空行。
  • 避免行尾空格。

如果用户只提供了部分更新(例如,只修订了一条原则),仍需执行验证和版本决策步骤。

如果缺少关键信息(例如,确实未知的批准日期),请插入 TODO(<FIELD_NAME>): explanation,并在同步影响报告的待处理事项中注明。

仅写入 .specify/memory/constitution.md;不要创建或修改模板源文件。

执行后检查

检查扩展钩子(更新章程后): 检查项目根目录中是否存在 .specify/extensions.yml。

  • 如果存在,请读取该文件,并查找 hooks.after_constitution 下的条目
  • 如果 YAML 无法解析或无效,不要默默跳过:告知用户 .specify/extensions.yml 无法读取(包含解析器错误),并说明未检查任何钩子,包括其中注册的任何必需钩子(optional: false),然后继续正常操作
  • 过滤掉 enabled 明确为 false 的钩子。未设置 enabled 字段的钩子默认视为已启用。
  • 对于其余钩子,不要尝试解读或计算钩子 condition 表达式:
    • 如果钩子没有 condition 字段,或该字段为 null/空值,则视为可执行
    • 如果钩子定义了非空的 condition,则跳过该钩子,并将条件评估留给 HookExecutor 实现
  • 根据钩子命令名称构造命令调用时,将句点(.)替换为连字符(-)。例如,speckit.git.commit → /speckit-git-commit。
  • 对于每个可执行钩子,根据其 optional 标志输出以下内容:
    • 可选钩子(optional: true):

      ## 扩展钩子
      
      **可选钩子**:{extension}
      命令:`/{command}`
      描述:{description}
      
      提示:{prompt}
      执行方式:`/{command}`
      
    • 必需钩子(optional: false):

      ## 扩展钩子
      
      **自动钩子**:{extension}
      正在执行:`/{command}`
      EXECUTE_COMMAND: {command}
      

      输出上述内容后,必须实际调用该钩子,并等待其完成后再继续。像在当前 Agent/会话中自行运行命令一样运行它(实际调用方式可能与显示的 {command} 标识不同,例如,技能模式下的 Agent 会运行 /skill:speckit-... 或 $speckit-...)。仅输出该代码块并不算运行了钩子。

  • 如果没有注册任何钩子,或 .specify/extensions.yml 不存在,则静默跳过

评论

支持 Markdown