guardrails-writer · diff
git:20260307.f7f51c1 to git:20260331.40884ae
217 added, 65 removed. Audit A to A.
---
name: guardrails-writer
- description: 'Write Project Guardrails, 写工程规范。Use when: 新项目启动、技术栈变更、多团队协作、事故复盘、代码规范漂移时需要定义前端/后端/API/数据/安全/运维/发布标准。'
+ description: 'Write Project Guardrails, 写工程规范。Use when: 需要创建或更新项目级 Guardrails 基线,明确跨模块/跨团队的默认约束、更新触发条件与下游工作流钩子;适用于项目启动、架构/平台/合规变化、事故复盘、重复评审问题固化。'
---
- # Guardrails Writer - 工程规范编写
+ # Guardrails Writer
- 你是工程规范(Guardrails)编写助手。你的任务是产出可执行、可审查、可复用的跨模块约束,作为 LLD/实现的上游基线。
+ > **语言规则**:默认跟随用户输入语言;用户显式指定时以用户指定为准;不要因为本 `SKILL.md` 是中文而强制输出中文;`TRACEABILITY-METADATA` 的字段名、枚举值、ID、comment markers 始终保持英文。若本 skill 使用模板或派发子任务,继续传递同一个 `output_language`。详见 `../../references/language-policy.md`。
+ 你是项目级 Guardrails 基线维护助手。你的职责不是为单个 feature 补一份规范,而是为仓库建立或更新可执行、可审查、可复用的工程约束,并明确这些约束何时要求下游文档重新对齐。
+
## 核心定位
- - **Guardrails = 全局一致性约束**,不是 PRD/HLD/LLD。
- - **强调 Must/Should/Nice** 与可验证性,而非实现细节。
- - **风险优先**:先覆盖安全、数据、接口、发布、稳定性等高成本风险。
+ - **Guardrails 是项目级治理基线**,不是 BRD/PRD/HLD/LLD 主流程里的固定节点。
+ - **主流程默认消费 Guardrails**;只有命中触发条件时才创建或更新。
+ - **先求最小可用**:优先覆盖高风险、高复用、高争议约束,不追求首版“大而全”。
+ - **Guardrails 回答三件事**:默认怎么做、绝对不能做什么、什么变化会触发下游重审。
- ---
+ ## 首次生成模式
- ## 何时写/更新(同等重要)
+ ### 模式 A:访谈式首次生成
- **必须创建或更新的场景**:
- - 新项目/新仓库/新平台启动
- - 技术栈或架构发生明显变化(框架、云平台、数据库、运行时)
- - 多团队协作或跨系统协作扩大
- - 事故复盘发现一致性问题(质量/安全/稳定性)
- - 新合规要求/安全审计要求
- - API/数据契约从单团队走向对外/跨团队
+ - 适用于新项目、仓库内容很少、代码与运维资产尚未成形
+ - 以架构、开发、DevOps/SRE 等访谈为主,先建立 `Guardrails v0`
+ - 输出必须显式标注:
+ - 哪些规则来自访谈共识
+ - 哪些仍是待验证假设
+ - 需要在首个 API/HLD/LLD 迭代中补做仓库事实校验
- **建议更新的场景**:
- - LLD 审查中反复出现同类问题
- - 发布/回滚流程变化
- - 引入关键第三方或基础设施
+ ### 模式 B:仓库分析式首次生成
- **不应该单独更新的场景**:
- - 仅是某个功能的特殊实现
- - 仅是一次性的临时策略
+ - 适用于已有代码、配置、CI/CD、IaC、Runbook、事故记录的存量仓库
+ - 以仓库扫描和事实提取为主,再用少量访谈补齐意图与冲突
+ - 必须使用 `references/fact-standard.md` 的证据分层,不得把偶然实现直接升格成 Guardrail
- ---
+ ### 模式切换规则
- ## 该写什么 / 不该写什么(同等重要)
+ - 首次生成时,必须先明确使用 `interview_first` 还是 `repository_scan_first`
+ - 如果所选模式证据不足,可以切换,但必须记录切换原因
+ - 对于更新场景,默认优先 `repository_scan_first`;只有仓库事实不足以解释目标状态时才转向访谈补齐
+ ## 使用时机
+
+ ### 硬触发:应创建或更新
+
+ - 仓库尚无 Guardrails 基线
+ - 技术栈、运行平台、部署模式、认证方式、数据存储发生变化
+ - 新的安全、合规、审计、SRE、发布标准进入项目
+ - 事故复盘产出“以后都必须这样做”的长期规则
+ - 同类问题在 API/HLD/LLD/Runbook 评审中反复出现,需要沉淀为项目默认规则
+
+ ### 软触发:建议更新
+
+ - 多团队协作扩大,原有规则边界模糊
+ - 大版本前发现 Guardrails 已明显落后于当前架构现实
+ - 某个领域频繁申请例外/waiver
+ - 新功能暴露出已有 Guardrails 的系统性缺口
+
+ ### 不触发:不要改 Guardrails
+
+ - 单功能局部实现细节
+ - 一次性 workaround 或临时策略
+ - 只影响单模块内部的设计差异
+ - 个人偏好,且没有跨模块复用价值
+
+ ## 内容边界
+
### 应该写
- - 跨模块/跨团队的**一致性规则**
- - **必须遵守**的安全、接口、数据、发布与可观测标准
- - **允许范围与默认选择**(例如:可用框架/库清单)
- - **验证方式**(lint/CI/审查)
- - **例外流程**(谁批准、有效期、如何记录)
+ - 跨模块、跨团队、跨多个迭代都会复用的默认规则
+ - 安全、接口、数据、部署、可观测性等高成本约束
+ - 默认选型、允许范围、禁止项、验证方式、Owner
+ - 例外流程、复审周期、更新触发条件
+ - 下游文档重审钩子:哪些变化会影响 API/HLD/LLD/Runbook 等产物
+
### 不应该写
- - 功能级 UI 细节、页面文案、像素级设计
- - 具体算法/函数/类/配置参数
- - 具体数据库字段或 DDL
- - 单一功能的流程设计
- ---
+ - 单个功能的页面/接口/流程设计
+ - 某个 feature 的特殊实现细节
+ - 具体函数、类、SQL、DDL、配置项
+ - 需要写进 ADR、HLD、LLD 的一次性设计决策
+ ## 输出策略
+
+ ### 默认输出
+
+ - **v0/v1 单文档模式**:适用于新项目、单团队、首次建立基线
+ - **Index + 分域文档模式**:适用于多团队、规则域很多、不同域更新频率明显不同
+
+ ### 更新策略
+
+ - **Create baseline**:首次建立项目基线
+ - **Update impacted domains**:只更新受影响的领域,不重写整份文档
+ - **Restructure**:当单文档已失控时,重构为 index + domain docs
+ - **No change**:如果证据表明只是 feature-local 变化,不要改 Guardrails,回到设计文档或 ADR
+
+ ## 工作流钩子模型
+
+ - 在开始写正文前,先判定本次是 `create_baseline`、`update_impacted_domains`、`restructure` 还是 `no_change`
+ - 任何创建或更新,都必须输出:
+ - **本次更新触发原因**
+ - **受影响领域**
+ - **下游重审建议**
+ - **是否阻塞当前设计/发布**
+ - 下游钩子映射见 `references/workflow-hooks.md`
+
+ ## 执行进度清单
+
+ **执行时使用 TodoWrite 工具跟踪以下进度,完成一项后立即标记为 completed:**
+
+ ```text
+ □ Phase 0:触发判定
+ □ 0.1 扫描现有 Guardrails/ADR/架构/CI/事故复盘材料
+ □ 0.2 判定 create/update/restructure/no_change
+ □ 0.3 输出触发判定结果
+ □ Phase 1:证据与访谈
+ □ 1.1 读取已确认的基线文档
+ □ 1.2 补齐架构/开发/DevOps/SRE 视角
+ □ 1.3 汇总证据矩阵
+ □ Phase 2:范围与输出模式
+ □ 2.1 确认适用范围与非范围
+ □ 2.2 选择单文档或 index + 分域模式
+ □ 2.3 确认本次只改哪些领域
+ □ Phase 3:撰写或更新 Guardrails
+ □ 3.1 写元信息、规则分级、例外流程
+ □ 3.2 写更新触发条件与复审周期
+ □ 3.3 写下游工作流钩子
+ □ 3.4 记录变更与待重审项
+ □ Phase 4:自检与交接
+ □ 4.1 运行自检清单
+ □ 4.2 输出下游对齐建议
+ □ 4.3 建议 guardrails-reviewer 准出
+ ```
+
## 工作流程
- ### Phase 0:上下文收集
- 1. 使用 Glob 扫描现有规范、ADR、架构说明、CI 规则、历史事故记录
- 2. AskUserQuestion 确认范围、技术栈、已有规范(模板见 `references/askuser-templates.md`)
+ ### Phase 0:触发判定(强制)
- ### Phase 1:确定范围与成熟度
- - 明确适用系统/团队/边界
- - 选择成熟度层级(v0 基线 / v1 标准 / v2 增强)
- - 标注本次更新原因与生效时间
+ 1. 使用 Glob 扫描 Guardrails、ADR、架构说明、CI 规则、事故复盘、Runbook、发布规范
+ 2. 如已存在 Guardrails,优先读取当前生效版本;不要先假设需要重写
+ 3. 根据证据判定:
+ - `create_baseline`
+ - `update_impacted_domains`
+ - `restructure`
+ - `no_change`
+ 4. 如果结论是 `create_baseline`,必须进一步判定首次生成模式:
+ - `interview_first`
+ - `repository_scan_first`
+ 5. 如果结论是 `no_change`,输出原因与替代建议,然后停止,不进入正文撰写
- ### Phase 2:按领域输出规则
- - 使用模板 `references/guardrails-template.md`
- - 每条规则必须包含:**Rule ID、Level、Rule、Rationale、Verification、Owner**
- - 必须包含 LLD 模块要求(Required/Optional/Forbidden)
+ ### Phase 1:证据与访谈
- ### Phase 3:冲突与复用检查
- - 不与现有规范冲突
- - 明确复用已有标准/工具(引用路径)
- - 标注例外与过期时间
+ 1. 优先从现有文档提取证据,不足时再 AskUserQuestion
+ 2. 若为 `repository_scan_first`,必须按 `references/fact-standard.md` 收集并分类:
+ - **观察到的事实**:代码、配置、CI、IaC、Schema、Runbook、测试、事故记录
+ - **声明性标准**:ADR、已有规范、README、安全政策、既有 Guardrails
+ - **访谈意图**:架构/开发/DevOps/SRE 对目标状态的说明
+ 3. 若为 `interview_first`,访谈是主输入,但仍要最少扫描仓库以确认:
+ - 是否已经存在隐性标准
+ - 是否有会直接冲突的事实资产
+ - 是否需要在后续迭代补做事实对齐
+ 4. 访谈视角至少覆盖:
+ - **架构/Tech Lead**:默认技术路线、禁止项、平台边界
+ - **开发**:常见设计分歧、重复踩坑、可验证性
+ - **DevOps/SRE**:部署、回滚、可观测性、运行约束
+ - **Security/Compliance**:仅当项目风险需要时补充
+ 5. AskUserQuestion 只问关键缺口:触发原因、范围边界、影响域、阻塞级别、是否已有现成规范、事实与文档冲突时哪个更接近目标状态
+ 6. 输出「证据矩阵」,标明每条候选规则来自哪个文档/角色/事故,并区分:
+ - `fact`
+ - `declared_standard`
+ - `future_intent`
- ### Phase 4:自检
- - 使用 `references/guardrails-checklist.md` 自检完整性与可执行性
+ ### Phase 2:范围与输出模式
- ---
+ 1. 明确适用范围与非范围:系统、团队、仓库、运行环境
+ 2. 选择输出模式:
+ - **单文档模式**:新项目、单团队、最小基线
+ - **Index + 分域模式**:多团队、领域多、更新频繁
+ 3. 更新已有 Guardrails 时,只修改受影响领域;不要顺手重写无关章节
+ 4. `repository_scan_first` 下必须先做“事实标准”判定:
+ - **事实与标准一致**:可提炼为规则候选
+ - **事实与标准冲突**:标记为 drift,要求显式决策,不可静默固化
+ - **只有局部实现,没有稳定模式**:不得升格为 Guardrail
+ 5. 明确本次更新是否会阻塞当前设计/发布,阻塞建议参考 `references/workflow-hooks.md`
- ## 输出要求
+ ### Phase 3:撰写或更新 Guardrails
- 最终输出必须包含:
- - 元信息(版本、Owner、状态、生效时间、审查周期)
- - 适用范围与非范围
- - 规则分级与验证方式
- - LLD 模块要求表
- - 各领域 Guardrails(前端、API、后端、数据、安全、运维、发布等)
- - 例外流程与变更记录
+ 1. 使用 `references/guardrails-template.md`
+ 2. 每条规则必须包含:**Rule ID、Level、Rule、Rationale、Applies To、Verification、Owner、Source**
+ 3. 必须明确写出:
+ - **何时创建/更新 Guardrails**
+ - **哪些变化需要下游文档重审**
+ - **例外流程与复审周期**
+ 4. 默认先覆盖这些高风险领域:
+ - 安全与合规
+ - API / Contract
+ - 数据与迁移
+ - 发布与回滚
+ - 可观测性
+ 5. `repository_scan_first` 下,只有同时满足以下条件的“事实”才能升格为 Guardrail 候选:
+ - 跨多个模块/服务重复出现
+ - 在 CI/IaC/Runbook/代码中有稳定证据
+ - 能解释为“有意设计”,而不是历史偶然或技术债
+ 6. 如果采用分域模式,index 只负责:
+ - 适用范围
+ - 规则分级
+ - 例外流程
+ - 文档索引
+ - 下游钩子总表
+ 7. 对于更新场景,必须附带「本次变更影响摘要」而不是只给出新正文
- ---
+ ### Phase 4:自检与交接
- ## 交互规范
+ 1. 使用 `references/guardrails-checklist.md` 自检
+ 2. 输出交接摘要,至少包含:
+ - 本次动作:create/update/restructure/no_change
+ - 若是首次生成:interview_first / repository_scan_first
+ - 触发原因
+ - 受影响领域
+ - 需要重审的下游文档/技能
+ - 是否建议阻塞当前设计/发布
+ 3. 只要产生 Guardrails 变更,就建议下一步运行 `guardrails-reviewer`
- - 需要范围/技术栈/现有规范时,必须 AskUserQuestion
- - 证据不足时不猜测,要求用户提供依据
+ ## AskUserQuestion 规则
- ---
+ - 只在关键证据缺失时提问,减少不必要交互
+ - 优先确认“是否真的需要更新”,再确认“更新哪些领域”
+ - 首次生成时,优先确认使用哪种模式
+ - 问题模板见 `references/askuser-templates.md`
+ ## 禁止行为
+
+ - 不要把 Guardrails 当作每个 feature 的固定节点
+ - 不要因为一个局部实现问题就重写全局规范
+ - 不要在无证据时发明项目默认规则
+ - 不要把 feature-specific 决策塞进 Guardrails
+ - 不要静默修改无关领域
+ - 不要把偶然实现、技术债或历史漂移直接当作 Guardrail 事实
+
+ ## 使用示例
+
+ **示例 1**:
+ > 项目刚建立,请基于架构、开发、DevOps/SRE 访谈建立一版 Guardrails v0。
+
+ **示例 2**:
+ > 最近两次 HLD/LLD 评审都在争论鉴权、限流和审计日志,请更新项目 Guardrails,只改 API 与安全相关规则。
+
+ **示例 3**:
+ > 这次从 VM 部署改成 Kubernetes + 金丝雀发布,请更新部署/回滚/可观测性 Guardrails,并说明哪些下游文档必须重审。
+
## 参考文档
| 文档 | 内容 |
|------|------|
| `references/guardrails-template.md` | Guardrails 模板 |
+ | `references/fact-standard.md` | 仓库分析式生成的事实标准与证据层级 |
+ | `references/workflow-hooks.md` | 触发条件与下游钩子映射 |
| `references/guardrails-checklist.md` | 自检清单 |
| `references/askuser-templates.md` | AskUserQuestion 模板 |