plan-governance-cli 0.2.3 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -63,6 +63,13 @@ def agent_rules_body():
63
63
  - 相关 `docs/adr/*.md`
64
64
  - 相关 `docs/migrations/*.md`
65
65
 
66
+ 需求探索与 grilling:
67
+
68
+ - 对可能进入治理的任务,若 `grill-me` 可用,遇到高影响事项且目标/边界/验收/取舍未明确,或同时存在至少两项需求不确定性信号时,先执行 grilling。
69
+ - grilling 每次只问一个问题;可由仓库、环境或工具确认的事实先自行查证,产品取舍和不可逆选择由用户确认。
70
+ - 在用户确认结构化总结前不得实施或把暂定内容写成规范事实。确认后,只把已确认事实、暂定假设、范围/非目标、候选方案、未决问题和探索结论写入专项计划的 `需求探索` 章节。
71
+ - grilling 不替代 Step 0、样本矩阵、验证、失败/回滚边界或独立准入复核;`grill-me` 不可用时说明依赖不可用并保持在澄清/设计边界,不得伪造已完成 grilling。
72
+
66
73
  事实源规则:
67
74
 
68
75
  - 专项计划是实施细节事实源,记录字段方案、Schema、枚举、Step 0 证据、验证方式和完成条件。
@@ -85,6 +92,7 @@ def agent_rules_body():
85
92
  - 验证方式、完成条件、失败策略和回滚或安全边界明确。
86
93
  - 没有未解决的当前阶段阻塞项,且 `PLAN_MAP.md` 已同步。
87
94
  - 最新独立准入复核明确为“通过”。
95
+ - 机器识别的结构化章节标题固定为 `阶段路线图`、`当前阶段`、`阶段准入摘要`、`最新独立准入复核`、`独立复核记录`;不要写成 `阶段 1 准入摘要` 等带编号变体,阶段编号以 `PLAN_MAP.md` 的当前阶段为准。
88
96
 
89
97
  专项计划应保留追加式独立复核记录,并显式维护最新结论的日期、阶段、结论、证据和复核者。历史记录不得覆盖;`PLAN_MAP.md` 只链接最新有效结论。
90
98
 
@@ -239,116 +247,19 @@ def plan_map_content(plan_slug, title, status, phase):
239
247
  """
240
248
 
241
249
 
242
- def plan_content(plan_slug, title, status, phase, goal):
243
- goal_text = goal or "待补充。"
244
- return f"""# 计划:{title}
245
-
246
- ## 背景
247
-
248
- 待补充。
249
-
250
- ## 目标
251
-
252
- {goal_text}
253
-
254
- ## 非目标
255
-
256
- - 待补充。
257
-
258
- ## 不变量
259
-
260
- - 当前阶段写细,后续阶段写粗。
261
- - 完成时必须记录可验证证据。
262
-
263
- ## 影响模块或文件
264
-
265
- - 待补充。
266
-
267
- ## 公共契约变化
268
-
269
- 待确认。若涉及 API、Schema、兼容性或迁移行为,需要在这里明确。
270
-
271
- ## 阶段路线图
272
-
273
- | 阶段 | 目标 | 进入条件 | 验证方向 | 状态 |
274
- |---|---|---|---|---|
275
- | {phase} | 建立当前阶段基线 | 治理文档已初始化 | Step 0 证据存在 | {status} |
276
-
277
- ## 当前阶段
278
-
279
- ### 范围
280
-
281
- 待补充。
282
-
283
- ### 阶段准入摘要
284
-
285
- | 字段 | 内容 |
286
- |---|---|
287
- | 准入状态 | {status} |
288
- | Step 0 | 当前阶段 Step 0 证据的链接或锚点 |
289
- | 样本矩阵 | 样本/fixture 或替代基线的链接或锚点 |
290
- | 验证方式 | 可执行命令和输出位置的链接或锚点 |
291
- | 失败/回滚边界 | 失败判定和安全边界的链接或锚点 |
292
- | 当前阻塞项 | 无,或指向未决问题表中的具体行 |
293
- | 最新独立准入复核 | 尚未进行 |
294
-
295
- ### 实施步骤
250
+ def plan_template_path():
251
+ return Path(__file__).resolve().parents[1] / "resources" / "skill" / "assets" / "plan.template.md"
296
252
 
297
- 1. 补充 Step 0 证据。
298
- 2. 明确当前阶段完成条件。
299
- 3. 实施当前阶段。
300
- 4. 运行验证并记录证据。
301
253
 
302
- ### Step 0 证据
303
-
304
- 待补充。实施前需要记录失败测试、最小复现、现状快照、兼容样本、fixture 或关键假设验证。
305
-
306
- ### 验证方式
307
-
308
- 待补充。
309
-
310
- ### 测试覆盖率
311
-
312
- 待补充。完成后需要记录测试覆盖率报告,例如 pytest-cov 输出、覆盖率百分比、关键模块覆盖情况等。
313
-
314
- ### 完成条件
315
-
316
- - Step 0 证据已记录。
317
- - 当前阶段验证通过。
318
- - `docs/PLAN_MAP.md` 状态和证据已同步。
319
-
320
- ## 独立复核记录
321
-
322
- ### 最新独立准入复核
323
-
324
- | 字段 | 内容 |
325
- |---|---|
326
- | 日期 | 待补充 |
327
- | 阶段 | 由 `PLAN_MAP.md` 当前阶段确定 |
328
- | 结论 | 通过 / 未通过 |
329
- | 证据 | 命令、样本或 CI 链接 |
330
- | 复核者 | 姓名或 Agent |
331
-
332
- ### 历史记录
333
-
334
- | 日期 | 类型 | 阶段 | 结论 | 证据 | 复核者 |
335
- |---|---|---|---|---|---|
336
- | - | - | - | - | - | - |
337
-
338
- ## 未决问题
339
-
340
- | 问题 | 推荐方案 | 是否阻塞当前阶段 | 状态 |
341
- |---|---|---|---|
342
- | 当前阶段 Step 0 证据是什么? | 在实施前补充最小可观察基线。 | 是 | 待确认 |
343
-
344
- ## 风险和回滚
345
-
346
- 待补充。
347
-
348
- ## 关联 ADR、迁移、spec 或 issue
349
-
350
- -
351
- """
254
+ def plan_content(plan_slug, title, status, phase, goal):
255
+ goal_text = goal or "待补充。"
256
+ template = plan_template_path().read_text(encoding="utf-8")
257
+ return (
258
+ template.replace("{{title}}", title)
259
+ .replace("{{goal}}", goal_text)
260
+ .replace("{{status}}", status)
261
+ .replace("{{phase}}", phase)
262
+ )
352
263
 
353
264
 
354
265
  def copy_checker(root, force):