plan-governance-cli 0.3.0 → 0.3.1
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.
- package/README.md +29 -3
- package/bin/plan-governance-cli.mjs +7 -0
- package/package.json +1 -1
- package/resources/skill/SKILL.md +25 -4
- package/resources/skill/agents/openai.yaml +1 -1
- package/resources/skill/assets/PLAN_MAP.template.md +2 -0
- package/resources/skill/assets/plan.template.md +33 -0
- package/scripts/check_plan_governance.py +1402 -18
- package/scripts/plan_governance_hook.py +30 -1
package/README.md
CHANGED
|
@@ -164,7 +164,7 @@ plan-governance-cli check . --pre-commit
|
|
|
164
164
|
plan-governance-cli check . --stale-days 10
|
|
165
165
|
```
|
|
166
166
|
|
|
167
|
-
`--drift` 会检查工作区变更是否被活跃计划的 `影响模块或文件` 覆盖;`--pre-commit` 会检查 staged 变更,便于用户手动接入 Git hook。两者只输出 `WARNING
|
|
167
|
+
`--drift` 会检查工作区变更是否被活跃计划的 `影响模块或文件` 覆盖;`--pre-commit` 会检查 staged 变更,便于用户手动接入 Git hook。两者只输出 `WARNING`,不改变退出码。活跃计划自身文件、`PLAN_MAP.md` 中可唯一归属的变更行和当前阶段 `### 阶段证据` 中声明的合法相对路径会自动覆盖;关闭窗口内,已完成计划自身也在本次变更中时,仅额外覆盖该计划自身和显式阶段证据。跨计划、非法路径或无法归属的变更继续告警。
|
|
168
168
|
|
|
169
169
|
全局 CLI 是推荐入口:
|
|
170
170
|
|
|
@@ -188,10 +188,36 @@ plan-governance-cli graph code impact --repo modelpad --file Sources/ModelPadCor
|
|
|
188
188
|
|
|
189
189
|
`plan impact` 是计划治理的前置只读查询:输入文件声明 `graph_scope`、`change_kind`,默认只查询功能层;API 契约、数据、安全、外部边界或明确代码定位才升级到架构层或代码候选。输出查询层级、升级原因、行动分级、测试映射和未查询层级;失败不伪装成“无影响”,也不会触发 `gitnexus analyze`。
|
|
190
190
|
|
|
191
|
+
## 自主连续执行(可选)
|
|
192
|
+
|
|
193
|
+
适合目标明确、步骤边界清楚、希望执行者连续推进的计划。用户可以直接说“推进到完成计划”,执行者不必每一步请求继续,但必须逐项执行、记录证据、运行验证,并在失败、阶段门、独立复核或其他治理边界处暂停。
|
|
194
|
+
|
|
195
|
+
自主模式默认关闭。`plan-governance-cli init` 生成的计划仍按普通计划运行;只有在计划当前阶段明确启用以下结构后,才会进入步骤校验和下一步骤查询:
|
|
196
|
+
|
|
197
|
+
```markdown
|
|
198
|
+
execution_mode: autonomous-continuous
|
|
199
|
+
execution_policy: serial
|
|
200
|
+
|
|
201
|
+
### 执行清单
|
|
202
|
+
|
|
203
|
+
| 步骤 ID | 前置步骤 | 动作 | 证据 | 完成条件 | 状态 | 分支记录 |
|
|
204
|
+
|---|---|---|---|---|---|---|
|
|
205
|
+
| `S1` | `-` | 建立基线 | `tests/baseline.log` | 基线命令通过 | `未开始` | `-` |
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
启用后建议先运行:
|
|
209
|
+
|
|
210
|
+
```bash
|
|
211
|
+
plan-governance-cli plan steps validate <plan> --json
|
|
212
|
+
plan-governance-cli plan next <plan> --json
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
`plan next` 只读返回 `ready`、`blocked`、`phase_gate`、`not_enabled` 或 `complete`。它不会执行 shell、修改计划或状态、自动批准独立复核,也不会把 `complete` 当作验收通过;`blocked`、`phase_gate`、`complete` 和 `not_enabled` 都是停止或等待信号。
|
|
216
|
+
|
|
191
217
|
也可以不全局安装,直接使用锁定版本:
|
|
192
218
|
|
|
193
219
|
```bash
|
|
194
|
-
npx --yes --package plan-governance-cli@0.3.
|
|
220
|
+
npx --yes --package plan-governance-cli@0.3.1 plan-governance-cli check . --strict-readiness
|
|
195
221
|
```
|
|
196
222
|
|
|
197
223
|
npm 包内部仍使用版本化的 Python 检查器,但用户不需要直接调用或复制该脚本。旧项目已有本地脚本时仍可保留作为兼容或回滚路径。
|
|
@@ -278,7 +304,7 @@ plan-governance-cli check . --attest agent-runtime-integration
|
|
|
278
304
|
plan-governance-cli check . --check-attestations
|
|
279
305
|
```
|
|
280
306
|
|
|
281
|
-
`--attest <plan-name>` 只接受已登记到 `docs/PLAN_MAP.md` 的计划。`--check-attestations`
|
|
307
|
+
`--attest <plan-name>` 只接受已登记到 `docs/PLAN_MAP.md` 的计划。`--attest-purpose <purpose>` 可与它一起创建带 `purpose`、`snapshot_id`、`supersedes` 和 `review_status` 的关系快照,支持 `phase_completion`、`release_gate`、`compliance`;不传时保持旧 `docs/attestations/<plan-name>.json` 格式。`--supersedes <path>` 和 `--review-status <status>` 可声明替代目标和初始复核状态。`--check-attestations` 会检查 hash 漂移并派生 `current`、`superseded` 或 `needs_review`;旧 JSON 缺少 `purpose` 时按 `phase_completion` 兼容读取。漂移、缺失或 JSON 损坏默认输出 `WARNING`,严格模式才将新增结构错误提升为 `ERROR`。人工确认文档修正合理后,可以重新创建旧快照或用 `--attest-purpose` 创建带替代关系的新快照。
|
|
282
308
|
|
|
283
309
|
## 测试覆盖率
|
|
284
310
|
|
|
@@ -185,9 +185,16 @@ function main() {
|
|
|
185
185
|
const args = process.argv.slice(2);
|
|
186
186
|
const command = args[0];
|
|
187
187
|
if (command === "setup") return setup(args.slice(1));
|
|
188
|
+
if (command === "workset") return runPython(checker, ["--workset", ...args.slice(1)]);
|
|
188
189
|
if (command === "init") return runPython(initializer, args.slice(1));
|
|
189
190
|
if (command === "hook") return runPython(hookRuntime, args.slice(1));
|
|
190
191
|
if (command === "graph") return runNode(graphRuntime, args.slice(1));
|
|
192
|
+
if (command === "plan" && args[1] === "steps" && args[2] === "validate") {
|
|
193
|
+
return runPython(checker, ["--validate-steps", ...args.slice(3)]);
|
|
194
|
+
}
|
|
195
|
+
if (command === "plan" && args[1] === "next") {
|
|
196
|
+
return runPython(checker, ["--next-plan", args[2], ...args.slice(3)]);
|
|
197
|
+
}
|
|
191
198
|
if (command === "plan") return runNode(graphRuntime, args);
|
|
192
199
|
if (command === "check") return runPython(checker, args.slice(1));
|
|
193
200
|
return runPython(checker, args);
|
package/package.json
CHANGED
package/resources/skill/SKILL.md
CHANGED
|
@@ -127,6 +127,24 @@ docs/
|
|
|
127
127
|
|
|
128
128
|
阶段准入检查命令为 `--strict-readiness`。默认治理检查保持兼容,面向历史文档的准入缺陷先以 `WARNING` 提示;严格模式才将机械准入缺陷提升为 `ERROR`。该检查只判断结构化准入条件,不替代业务验收。
|
|
129
129
|
|
|
130
|
+
## 自主连续执行
|
|
131
|
+
|
|
132
|
+
当用户明确说“按计划自主推进至完成”“推进到完成计划”或“自主执行且不跳步”时,将其视为当前计划的持续执行指令:无需逐步请求用户继续,但必须从当前阶段的第一项开始,按计划顺序实际执行并记录每一项的证据。
|
|
133
|
+
|
|
134
|
+
- 不得跳过、合并或仅凭结果声明 Step 0、实施步骤、样本验证、独立复核、状态同步、完成证据或反向引用检查已经完成。
|
|
135
|
+
- 阶段 N 完成仍不自动准入阶段 N+1。只有阶段 N+1 已完成自己的准入条件,且最新独立准入复核明确通过,才可继续执行该阶段。
|
|
136
|
+
- 计划明确定义“不适用”或失败分支时,必须执行该分支并记录原因和证据;不得静默跳过。
|
|
137
|
+
- 目标、范围、公共契约、兼容策略、失败/回滚边界或计划顺序发生实质变化时,先更新治理文档;需要新的用户取舍、外部授权或超出既定范围的操作时暂停并请求方向。
|
|
138
|
+
- 验证失败时应在既定范围内诊断和修复;无法按计划解决、当前阶段被阻塞或后续阶段尚未准入时暂停,并一次性报告已执行步骤、证据、阻塞原因和推荐下一步。
|
|
139
|
+
- 计划完成后统一报告变更摘要、逐项验证结果、计划地图同步情况、独立验收结论和剩余风险;不需要为了例行步骤逐条汇报。
|
|
140
|
+
|
|
141
|
+
### 模板与只读查询协同
|
|
142
|
+
|
|
143
|
+
- 自主模式是计划级可选项。只有计划正文明确写出 `execution_mode: autonomous-continuous`,并提供七列表 `执行清单`,才使用步骤级解析;普通计划保持兼容,不要求迁移。
|
|
144
|
+
- 对已启用计划,开始当前步骤前先运行 `plan-governance-cli plan steps validate <plan> --json` 和 `plan-governance-cli plan next <plan> --json`;只有 `ready_steps` 中的步骤才可推进。
|
|
145
|
+
- 对 `blocked`、`phase_gate`、`complete` 或 `not_enabled`,按输出原因停止当前连续推进;这些状态都不代表自动执行、自动验收或下一阶段已获准入。
|
|
146
|
+
- 模板中的自主示例默认位于代码围栏内,不会自动启用;复制并去掉围栏后,必须补齐真实动作、证据、完成条件、状态和分支记录。
|
|
147
|
+
|
|
130
148
|
## 工作流
|
|
131
149
|
|
|
132
150
|
1. 检查仓库是否已有 `docs/PLAN_MAP.md` 和相关计划。
|
|
@@ -195,7 +213,7 @@ docs/
|
|
|
195
213
|
- `assets/adr.template.md`:可选 ADR 模板。
|
|
196
214
|
- `assets/migration.template.md`:可选迁移模板。
|
|
197
215
|
- `scripts/init_plan_governance.py`:初始化 Git 仓库、`docs/PLAN_MAP.md` 和首个 `docs/plans/<plan>.md`;也可升级已有项目的代理规则和检查脚本。
|
|
198
|
-
- `scripts/check_plan_governance.py`:检查状态、最后更新、计划链接、依赖、阻塞项、完成证据、测试覆盖率证据,并提供可选漂移、pre-commit
|
|
216
|
+
- `scripts/check_plan_governance.py`:检查状态、最后更新、计划链接、依赖、阻塞项、完成证据、测试覆盖率证据,并提供可选漂移、pre-commit、停滞和 attestation 生命周期检查。
|
|
199
217
|
- `scripts/plan_governance_hook.py`:只读 hook runtime,可由项目级 Agent hooks 手动调用;只输出短提示和检查结果,不修改治理文档、不更新状态、不安装 hooks。
|
|
200
218
|
|
|
201
219
|
初始化一个项目:
|
|
@@ -254,12 +272,15 @@ plan-governance-cli check . --stale-days
|
|
|
254
272
|
plan-governance-cli check . --stale-days 10
|
|
255
273
|
```
|
|
256
274
|
|
|
257
|
-
- `--drift`:检查工作区变更是否被活跃计划的 `影响模块或文件`
|
|
275
|
+
- `--drift`:检查工作区变更是否被活跃计划的 `影响模块或文件` 覆盖;关闭窗口内,若已完成计划自身也在本次变更中,则额外覆盖该计划自身和 `阶段证据` 中的显式路径。
|
|
258
276
|
- `--pre-commit`:检查 staged 变更是否被活跃计划的 `影响模块或文件` 覆盖,可由用户手动接入 Git hook。
|
|
277
|
+
- drift 会自动覆盖活跃计划自身文件、`PLAN_MAP.md` 中可唯一归属的变更行和当前阶段 `### 阶段证据` 中声明的合法相对路径;关闭窗口内,已完成计划自身也在本次变更中时,仅额外覆盖该计划自身和显式阶段证据。跨计划、非法路径或无法归属的变更继续输出 `WARNING`。
|
|
259
278
|
- `--stale-days`:检查活跃计划是否超过阈值未更新;默认 10 天。
|
|
260
279
|
- 这些可选检查输出 `WARNING`,不改变退出码。
|
|
261
280
|
- `--attest <plan-name>`:为已登记计划创建或覆盖 `docs/attestations/<plan-name>.json` 完成快照。
|
|
262
|
-
- `--
|
|
281
|
+
- `--attest-purpose <purpose>`:与 `--attest` 一起创建带 `purpose`、`snapshot_id`、`supersedes` 和 `review_status` 的关系快照;支持 `phase_completion`、`release_gate`、`compliance`。不传时保持旧 JSON 路径和格式。
|
|
282
|
+
- `--supersedes <path>`、`--review-status <status>`:创建关系快照时声明替代目标和初始复核状态。
|
|
283
|
+
- `--check-attestations`:检查完成快照中的计划文件和 `PLAN_MAP.md` hash 是否漂移,并派生 `current`、`superseded` 或 `needs_review`;旧 JSON 缺少 `purpose` 时按 `phase_completion` 兼容读取。漂移、缺失或 JSON 损坏默认只输出 `WARNING`,严格模式才将新增结构错误提升为 `ERROR`。
|
|
263
284
|
|
|
264
285
|
## 图谱与计划前置影响分析
|
|
265
286
|
|
|
@@ -291,7 +312,7 @@ GitNexus 只在需要代码定位时使用。CLI 不自动执行 `gitnexus analy
|
|
|
291
312
|
|
|
292
313
|
`影响模块或文件` 的作用域匹配规则:
|
|
293
314
|
|
|
294
|
-
- `--drift`、`--pre-commit` 和 `plan_governance_hook.py --event pre-write`
|
|
315
|
+
- `--drift`、`--pre-commit` 和 `plan_governance_hook.py --event pre-write` 使用同一语义;已完成计划的关闭窗口只适用于 drift/pre-commit,不扩大 pre-write 的活跃计划门禁。
|
|
295
316
|
- 优先提取列表项中的第一个反引号路径,例如 ``- `./scripts/`: 检查脚本``。
|
|
296
317
|
- 没有反引号时提取第一个纯文本 token,例如 `- README.md`。
|
|
297
318
|
- 匹配前归一化前导 `./`、尾随 `/` 和重复斜杠。
|
|
@@ -9,6 +9,8 @@
|
|
|
9
9
|
- `PLAN_MAP.md` 的 `状态` 是计划级生命周期,`当前阶段` 是阶段身份指针。
|
|
10
10
|
- 阶段 N 完成后,阶段 N+1 默认保持 `设计中`;专项计划自己的准入复核通过后才能进入 `待实施`。
|
|
11
11
|
- 阶段准入摘要、样本矩阵和独立复核记录只写入专项计划,不复制到本索引。
|
|
12
|
+
- 专项计划可在当前阶段声明阶段证据和追加式实施/验证记录;完成快照默认保持旧 JSON 兼容格式,发布/合规场景再显式使用 purpose 关系。
|
|
13
|
+
- `--drift`/`--pre-commit` 的关闭窗口只在已完成计划自身也发生变更时覆盖该计划自身和显式阶段证据,不复用已完成计划的完整影响范围。
|
|
12
14
|
|
|
13
15
|
## 计划索引
|
|
14
16
|
|
|
@@ -12,6 +12,23 @@
|
|
|
12
12
|
|
|
13
13
|
- 待补充。
|
|
14
14
|
|
|
15
|
+
## 自主连续执行(可选)
|
|
16
|
+
|
|
17
|
+
默认不启用自主连续执行。只有当计划明确选择“推进到完成计划”并且每一步都需要真实执行时,才复制下面的示例到当前阶段,去掉代码围栏并替换所有占位内容。未启用时,旧计划和普通计划继续使用原有流程,不需要补填步骤表。
|
|
18
|
+
|
|
19
|
+
只读查询入口为 `plan-governance-cli plan steps validate <plan> --json` 和 `plan-governance-cli plan next <plan> --json`;查询不会执行动作、写回状态或替代独立验收。
|
|
20
|
+
|
|
21
|
+
```markdown
|
|
22
|
+
execution_mode: autonomous-continuous
|
|
23
|
+
execution_policy: serial
|
|
24
|
+
|
|
25
|
+
### 执行清单
|
|
26
|
+
|
|
27
|
+
| 步骤 ID | 前置步骤 | 动作 | 证据 | 完成条件 | 状态 | 分支记录 |
|
|
28
|
+
|---|---|---|---|---|---|---|
|
|
29
|
+
| `S1` | `-` | `<动作>` | `<可复现证据定位>` | `<可验证完成条件>` | `未开始` | `-` |
|
|
30
|
+
```
|
|
31
|
+
|
|
15
32
|
<!-- 仅在触发 grilling 且用户确认结构化结论后保留本节;否则删除本节和本注释。 -->
|
|
16
33
|
## 需求探索
|
|
17
34
|
|
|
@@ -77,6 +94,22 @@
|
|
|
77
94
|
|
|
78
95
|
待补充。实施前需要记录失败测试、最小复现、现状快照、兼容样本、fixture 或关键假设验证。
|
|
79
96
|
|
|
97
|
+
### 阶段证据
|
|
98
|
+
|
|
99
|
+
- 待补充。
|
|
100
|
+
|
|
101
|
+
### 最近实施/验证记录
|
|
102
|
+
|
|
103
|
+
| 日期 | 类型 | 动作/结果 | 证据 | 状态 | 记录者 |
|
|
104
|
+
|---|---|---|---|---|---|
|
|
105
|
+
| - | - | - | - | - | - |
|
|
106
|
+
|
|
107
|
+
阶段证据只声明仓库内相对路径;最近实施/验证记录采用追加式记录,不能替代独立准入复核。
|
|
108
|
+
|
|
109
|
+
### Attestation 说明
|
|
110
|
+
|
|
111
|
+
默认完成快照保持 `docs/attestations/<plan>.json` 兼容格式。发布门禁或合规场景可显式使用 `purpose`、`snapshot_id`、`supersedes` 和 `review_status`;普通 hash 漂移仍需人工复核。
|
|
112
|
+
|
|
80
113
|
### 验证方式
|
|
81
114
|
|
|
82
115
|
待补充。
|