pi-claude-supervisor 0.5.2 → 0.5.3
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/CHANGELOG.md +12 -1
- package/README.cn.md +45 -36
- package/README.md +70 -41
- package/docs/architecture.md +65 -38
- package/docs/automation-hardening-plan.md +23 -22
- package/docs/autonomy-target.md +127 -0
- package/docs/engineering-plan.md +136 -138
- package/docs/implementation-review.md +29 -14
- package/docs/independent-review.md +23 -18
- package/docs/releasing.md +7 -2
- package/docs/testing.md +36 -22
- package/package.json +1 -1
- package/src/acceptance.ts +16 -0
- package/src/config.ts +31 -0
- package/src/decision-session-store.ts +19 -1
- package/src/decision-worker.ts +46 -18
- package/src/index.ts +37 -48
- package/src/notifications.ts +29 -11
- package/src/policy.ts +196 -21
- package/src/reviewer.ts +26 -1
- package/src/state.ts +7 -6
- package/src/supervisor.ts +329 -119
- package/src/types.ts +23 -0
- package/src/verifier.ts +88 -6
- package/src/worker/environment.ts +169 -0
- package/src/worker/process-adapter.ts +15 -0
package/docs/engineering-plan.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Pi Claude Supervisor 完整方案
|
|
2
2
|
|
|
3
|
-
> 文档状态:`v0.5.
|
|
3
|
+
> 文档状态:`v0.5.2` 已发布;Phase A–D 加固、真实 repair/reacceptance、exact-head 独立只读 Review 和受保护发布已完成。当前确认的产品目标是本地开发完全无人值守;代码进入远程仓库或 main/integration 分支必须经过独立边界。详见 [autonomy-target.md](autonomy-target.md)。
|
|
4
4
|
> 目标项目目录:`pi-claude-supervisor`
|
|
5
5
|
> 适用对象:W、项目负责人、实现人员、评审人员
|
|
6
6
|
|
|
@@ -23,9 +23,9 @@ Claude Code Worker
|
|
|
23
23
|
|
|
24
24
|
核心角色定义:
|
|
25
25
|
|
|
26
|
-
- **Pi Supervisor
|
|
27
|
-
- **Claude Code Worker
|
|
28
|
-
- **Human
|
|
26
|
+
- **Pi Supervisor**:负责任务约束、生命周期控制、自动决策、证据收集和最终验收。
|
|
27
|
+
- **Claude Code Worker**:负责根据任务执行代码修改、运行测试、修复问题和本地提交。
|
|
28
|
+
- **Human / independent boundary**:不作为本地开发循环的同步依赖;负责或授权远程 push、main/integration merge,以及事后审查、关闭或拒绝候选。
|
|
29
29
|
- **Independent Verifier**:在 Worker 声称完成后,以只读方式重新检查代码和验证结果。
|
|
30
30
|
|
|
31
31
|
最终目标是让 Claude Code 能够在较长任务中持续工作,同时避免以下问题:
|
|
@@ -36,7 +36,7 @@ Claude Code Worker
|
|
|
36
36
|
4. Supervisor 因误判导致无限循环、危险操作或不可审计的修改。
|
|
37
37
|
5. 人工无法随时接管或恢复任务。
|
|
38
38
|
|
|
39
|
-
**当前状态:`v0.5.
|
|
39
|
+
**当前状态:`v0.5.2` 已正式发布,已完成固定 Claude Code `2.1.270` 稳定性验证、单 Worker recovery、真实只读 Review drill、隔离临时 worktree 的允许编辑 repair/reacceptance drill、exact-head 独立 Review 和受保护发布。当前工作树已落实 repairable/persistent 能力拆分、verifying stop、paused watchdog、baseline-relative repository evidence、可取消验收/Reviewer、启动 preflight、无人值守权限决策、local-commit enforcement、候选挂起和阶段进度通知。自动模式现在要求 direct Claude JSONL、完整 Git baseline、非保护分支,并请求不可用即失败的 Claude Code sandbox 和无出站域名;任意自定义可执行文件不会进入自动模式。Legacy human/takeover APIs 仅保留显式兼容控制;普通不确定性不再阻塞本地循环。协同多 Worker、手动/自定义集成的 host-level 低权限和网络隔离仍是独立后续里程碑。**
|
|
40
40
|
|
|
41
41
|
---
|
|
42
42
|
|
|
@@ -60,7 +60,7 @@ Claude Code 适合作为实际开发 Worker,但在长时间任务中可能出
|
|
|
60
60
|
|
|
61
61
|
本项目需要解决的是一个**工程控制问题**:
|
|
62
62
|
|
|
63
|
-
>
|
|
63
|
+
> 在保留最终远程 push/main merge 独立边界的前提下,让外部 Supervisor 无人值守地运行本地 Claude Code 开发循环,并使用可靠证据判断任务是否真的完成。
|
|
64
64
|
|
|
65
65
|
### 2.3 需求边界
|
|
66
66
|
|
|
@@ -69,9 +69,9 @@ Claude Code 适合作为实际开发 Worker,但在长时间任务中可能出
|
|
|
69
69
|
- 单仓库;
|
|
70
70
|
- 每个任务一个 Claude Worker;
|
|
71
71
|
- 每个并行任务使用独立 worktree/工作目录;
|
|
72
|
-
- Pi
|
|
73
|
-
-
|
|
74
|
-
-
|
|
72
|
+
- Pi 负责监督、自动决策和验收;
|
|
73
|
+
- 本地开发循环不依赖人工实时接管;
|
|
74
|
+
- Worker 不拥有远程 push 或 main/integration merge 权限,进入远程和主分支必须经过独立边界。
|
|
75
75
|
|
|
76
76
|
当前扩展已支持多个独立任务会话并行推进,但不允许活动会话共享同一
|
|
77
77
|
工作目录。事件日志由跨进程锁协调,状态和 watchdog 按会话隔离。这里要区分两种
|
|
@@ -82,10 +82,10 @@ Worker**属于后续开发任务,不能通过简单地放宽 cwd 限制来实
|
|
|
82
82
|
|
|
83
83
|
- 多 Worker 在同一 worktree 的无协调协作;
|
|
84
84
|
- 自动生产发布;
|
|
85
|
-
-
|
|
86
|
-
-
|
|
87
|
-
|
|
88
|
-
|
|
85
|
+
- 用 Worker 自己的报告代替独立验收;
|
|
86
|
+
- 把远程 push 或 main/integration merge 授权给 Worker。
|
|
87
|
+
|
|
88
|
+
本地开发中的决策、命令、修复和提交由任务授权策略控制,不额外添加同步人工审批门。无法形成可交付候选时自动重试、失败或挂起并保留证据,不能因此进入远程或主分支。
|
|
89
89
|
|
|
90
90
|
---
|
|
91
91
|
|
|
@@ -97,18 +97,17 @@ Claude 负责执行,Pi 负责控制和判断。不能让 Worker 自己同时
|
|
|
97
97
|
|
|
98
98
|
### 3.2 确定性策略优先于 LLM 判断
|
|
99
99
|
|
|
100
|
-
LLM
|
|
100
|
+
LLM 可以帮助理解上下文,但不能绕过远程/main 权限边界和证据要求。确定性策略负责能力边界、任务授权和进程安全;它不应把普通本地开发动作自动升级为同步人工审批。
|
|
101
101
|
|
|
102
102
|
```text
|
|
103
103
|
事件
|
|
104
104
|
│
|
|
105
105
|
▼
|
|
106
|
-
|
|
106
|
+
任务授权 / 确定性能力边界
|
|
107
107
|
│
|
|
108
|
-
├──
|
|
109
|
-
├──
|
|
110
|
-
|
|
111
|
-
└── 需要语义理解:交给 Supervisor LLM
|
|
108
|
+
├── 远程 push / main merge:无 Worker 权限,交给独立边界
|
|
109
|
+
├── 本地开发动作:按任务授权自动允许、重试或记录
|
|
110
|
+
└── 无法形成候选:自动失败/挂起,保留证据,不要求人工在线
|
|
112
111
|
```
|
|
113
112
|
|
|
114
113
|
### 3.3 证据优先于声明
|
|
@@ -122,22 +121,23 @@ Worker 说“完成了”不是完成证据。最终状态必须由以下信息
|
|
|
122
121
|
- 约束检查结果;
|
|
123
122
|
- 独立 Reviewer 报告。
|
|
124
123
|
|
|
125
|
-
### 3.4
|
|
124
|
+
### 3.4 本地开发无人值守,远程边界独立
|
|
125
|
+
|
|
126
|
+
本地开发循环不是人工实时审批流程。Worker 可以在任务授权范围内修改、测试、修复和本地提交;Decision Worker 负责普通决策并记录假设、证据和结果。
|
|
126
127
|
|
|
127
|
-
|
|
128
|
+
人工或独立边界保留以下权力:
|
|
128
129
|
|
|
129
|
-
-
|
|
130
|
-
-
|
|
131
|
-
-
|
|
132
|
-
-
|
|
133
|
-
-
|
|
134
|
-
- 否决 Supervisor 的继续决定。
|
|
130
|
+
- 关闭或停止任务;
|
|
131
|
+
- 审查候选和证据;
|
|
132
|
+
- 授权或执行远程 push;
|
|
133
|
+
- 授权或执行 main/integration merge;
|
|
134
|
+
- 拒绝或丢弃候选。
|
|
135
135
|
|
|
136
|
-
|
|
136
|
+
这些权力不能被本地 Worker 或模型响应绕过,但不要求人工持续在线观察开发过程。
|
|
137
137
|
|
|
138
|
-
### 3.5
|
|
138
|
+
### 3.5 以证据约束自动化,而不是以人工门限制自动化
|
|
139
139
|
|
|
140
|
-
|
|
140
|
+
自动化应覆盖本地编辑、命令、测试、修复、验收、Review 和本地提交。时间、轮数、输出、清理和证据完整性是可靠性约束;它们不自动变成同步人工审批。无法完成的任务自动失败或挂起,只有通过独立验收的候选才可进入远程/main 边界。
|
|
141
141
|
|
|
142
142
|
### 3.6 所有重要动作可追溯
|
|
143
143
|
|
|
@@ -251,15 +251,15 @@ RUNNING
|
|
|
251
251
|
WAITING ────────────────┐
|
|
252
252
|
│ │
|
|
253
253
|
├── CONTINUE ─────────┘
|
|
254
|
-
├── ANSWER
|
|
254
|
+
├── ANSWER / ASSUME ───> RUNNING
|
|
255
255
|
├── REDIRECT ──────────> RUNNING
|
|
256
|
-
└──
|
|
256
|
+
└── PARK ───────────────> BLOCKED / REVIEW_PENDING
|
|
257
257
|
|
|
258
258
|
RUNNING ── Worker 报告完成 ──> VERIFYING
|
|
259
|
-
VERIFYING ── 通过 ──> COMPLETE
|
|
260
|
-
VERIFYING ── 失败 ──> REJECTED
|
|
259
|
+
VERIFYING ── 通过 ──> COMPLETE (local candidate)
|
|
260
|
+
VERIFYING ── 失败 ──> REJECTED / CANDIDATE_FAILED
|
|
261
261
|
REJECTED ── 修复 ──> RUNNING
|
|
262
|
-
|
|
262
|
+
BLOCKED / REVIEW_PENDING ── 恢复条件满足 ──> RUNNING
|
|
263
263
|
```
|
|
264
264
|
|
|
265
265
|
### 5.2 状态说明
|
|
@@ -270,12 +270,12 @@ HUMAN_REQUIRED ── 人工决定 ──> RUNNING / STOPPED
|
|
|
270
270
|
| `STARTING` | 正在启动 Worker | 等待启动事件 |
|
|
271
271
|
| `RUNNING` | Worker 正在工作 | 采集输出和指标 |
|
|
272
272
|
| `WAITING` | Worker 正常等待输入 | 判断是否可自动处理 |
|
|
273
|
-
| `BLOCKED` | Worker 被异常、环境或依赖阻塞 |
|
|
274
|
-
| `DECISION_REQUIRED` |
|
|
275
|
-
| `HUMAN_REQUIRED` |
|
|
273
|
+
| `BLOCKED` | Worker 被异常、环境或依赖阻塞 | 记录原因并自动挂起,不要求人工在线 |
|
|
274
|
+
| `DECISION_REQUIRED` | 需要基于任务证据作本地决策 | Decision Worker 自动选择并记录假设;无法选择则挂起 |
|
|
275
|
+
| `HUMAN_REQUIRED` | 兼容旧协议或显式 takeover 控制态 | 不自动放行;不是普通本地开发的同步依赖 |
|
|
276
276
|
| `VERIFYING` | 执行独立验收 | 只执行验证流程 |
|
|
277
|
-
| `REJECTED` | 验收失败,需要修复 |
|
|
278
|
-
| `COMPLETE` | 所有目标和验收证据满足 |
|
|
277
|
+
| `REJECTED` | 验收失败,需要修复 | 生成有限修复任务或候选失败 |
|
|
278
|
+
| `COMPLETE` | 所有目标和验收证据满足 | 生成本地候选,不能自行 push/merge |
|
|
279
279
|
| `FAILED` | 系统或 Worker 不可恢复失败 | 保留现场并报告 |
|
|
280
280
|
| `STOPPED` | 用户或策略主动停止 | 不再自动恢复 |
|
|
281
281
|
|
|
@@ -288,7 +288,7 @@ HUMAN_REQUIRED ── 人工决定 ──> RUNNING / STOPPED
|
|
|
288
288
|
"event": "STATE_CHANGED",
|
|
289
289
|
"from": "WAITING",
|
|
290
290
|
"to": "DECISION_REQUIRED",
|
|
291
|
-
"reason": "Worker
|
|
291
|
+
"reason": "Worker 提出架构选择;Decision Worker 将按任务证据选择或挂起",
|
|
292
292
|
"actor": "supervisor",
|
|
293
293
|
"timestamp": "2026-01-01T00:00:00Z",
|
|
294
294
|
"evidenceRefs": ["event-123", "diff-456"]
|
|
@@ -341,25 +341,18 @@ STOP
|
|
|
341
341
|
|
|
342
342
|
### 6.3 自动继续规则
|
|
343
343
|
|
|
344
|
-
|
|
344
|
+
自动决策应覆盖任务授权范围内的本地开发动作,包括继续、回答、重定向、测试、修复和本地提交。Decision Worker 必须结合任务规格、仓库证据、当前 diff 和预算做决定,并记录选择和假设。
|
|
345
345
|
|
|
346
|
-
|
|
347
|
-
- 当前动作属于任务清单中的低风险动作;
|
|
348
|
-
- 没有新的架构或产品选择;
|
|
349
|
-
- 没有删除、发布、外网、权限和密钥操作;
|
|
350
|
-
- 没有超过预算和最大轮数;
|
|
351
|
-
- 最近没有重复的相同停顿。
|
|
346
|
+
以下情况不应要求人工实时在线,而应进入自动处理路径:
|
|
352
347
|
|
|
353
|
-
|
|
348
|
+
- 架构方案二选一:按任务约束选择并记录假设;
|
|
349
|
+
- 需求存在歧义:采用可回溯假设,或将候选挂起;
|
|
350
|
+
- 测试失败:在 repair budget 内继续修复;
|
|
351
|
+
- 外部服务、权限或凭据:按任务授权策略处理,无法处理则自动失败/挂起;
|
|
352
|
+
- Supervisor 置信度不足:有限重试后形成 `blocked`/`review_pending` 候选,不得 push/merge;
|
|
353
|
+
- Worker 连续失败或重复提问:停止该自动循环并保留证据,不要求人工立即接管。
|
|
354
354
|
|
|
355
|
-
|
|
356
|
-
- 需求存在歧义;
|
|
357
|
-
- 删除数据、删除文件或大范围重构;
|
|
358
|
-
- 修改权限、CI/CD、部署和生产配置;
|
|
359
|
-
- 访问外部服务或使用敏感凭据;
|
|
360
|
-
- 测试与需求冲突;
|
|
361
|
-
- Supervisor 置信度不足;
|
|
362
|
-
- Worker 连续多次失败或重复提问。
|
|
355
|
+
唯一不可由本地 Worker 决定的权限边界是远程 push 和 main/integration merge。其他限制必须来自明确的任务授权或运行时能力配置,而不是默认增加同步人工审批。
|
|
363
356
|
|
|
364
357
|
### 6.4 LLM 判断的安全边界
|
|
365
358
|
|
|
@@ -424,9 +417,9 @@ Worker 的自然语言总结只能作为辅助信息,不能单独作为证据
|
|
|
424
417
|
2. 禁止事项没有被违反;
|
|
425
418
|
3. 验收命令全部通过;
|
|
426
419
|
4. 当前 diff 在预期范围内;
|
|
427
|
-
5.
|
|
428
|
-
6. 独立 Reviewer
|
|
429
|
-
7.
|
|
420
|
+
5. 没有未解决的阻塞性证据或任务授权冲突;本地决策和假设已经记录;
|
|
421
|
+
6. 独立 Reviewer 没有未解决的阻塞项;
|
|
422
|
+
7. 未超出时间、轮数和费用预算;候选尚未越过远程 push/main merge 独立边界。
|
|
430
423
|
|
|
431
424
|
---
|
|
432
425
|
|
|
@@ -500,7 +493,7 @@ Worker 声称完成
|
|
|
500
493
|
- 读取实时输出;
|
|
501
494
|
- 发送输入;
|
|
502
495
|
- 检测退出和异常;
|
|
503
|
-
-
|
|
496
|
+
- 实现可选人工接管和明确的远程/main 独立边界;
|
|
504
497
|
- 验证 session resume;
|
|
505
498
|
- 保存最小事件日志。
|
|
506
499
|
|
|
@@ -520,18 +513,18 @@ Worker 声称完成
|
|
|
520
513
|
- 单 Worker;
|
|
521
514
|
- 单 worktree;
|
|
522
515
|
- 单任务;
|
|
523
|
-
-
|
|
524
|
-
-
|
|
516
|
+
- 本地开发动作按任务授权自动 continue、修复或挂起;
|
|
517
|
+
- 远程 push/main merge 不授予 Worker,交给独立边界;
|
|
525
518
|
- 最大执行时间和最大轮数;
|
|
526
519
|
- 基础 Goal / Evidence / Sign-off;
|
|
527
520
|
- 基础验证命令。
|
|
528
521
|
|
|
529
522
|
暂不做:
|
|
530
523
|
|
|
531
|
-
-
|
|
532
|
-
-
|
|
524
|
+
- 无任务证据约束的自由 LLM 决策;
|
|
525
|
+
- 无预算的自动修复;
|
|
533
526
|
- 多 Worker;
|
|
534
|
-
-
|
|
527
|
+
- Worker 远程 push 或 main/integration merge;这些动作必须经过独立边界。
|
|
535
528
|
|
|
536
529
|
### Phase 2:Supervisor 决策层
|
|
537
530
|
|
|
@@ -567,11 +560,11 @@ Worker 声称完成
|
|
|
567
560
|
- 监控和告警;
|
|
568
561
|
- 费用控制;
|
|
569
562
|
- 灰度运行;
|
|
570
|
-
-
|
|
563
|
+
- 故障恢复、候选挂起和可选通知。
|
|
571
564
|
|
|
572
565
|
本阶段不阻塞当前 Supervisor 功能、Worker 生命周期、进程组清理、resume
|
|
573
|
-
和独立验收工作。Worker
|
|
574
|
-
|
|
566
|
+
和独立验收工作。Worker 可在任务授权及宿主机策略允许的权限范围内运行,
|
|
567
|
+
并可本地修改、测试、修复和提交;但不拥有远程 push 或 main/integration merge 权限。
|
|
575
568
|
|
|
576
569
|
---
|
|
577
570
|
|
|
@@ -581,13 +574,13 @@ Worker 声称完成
|
|
|
581
574
|
|---|---|---|
|
|
582
575
|
| 正常完成 | Worker 完成任务并退出 | Supervisor 收集 diff 和测试证据 |
|
|
583
576
|
| 普通确认 | Worker 询问是否继续已批准步骤 | 自动发送一次 continue |
|
|
584
|
-
| 架构决策 | Worker 提出两种实现方案 |
|
|
577
|
+
| 架构决策 | Worker 提出两种实现方案 | 按任务约束选择并记录假设;无法选择则挂起候选 |
|
|
585
578
|
| 长时间无输出 | Worker 无输出但进程仍在 | 触发 watchdog,先检查再决定 |
|
|
586
579
|
| Worker 崩溃 | 进程异常退出 | 记录退出原因,可恢复或升级 |
|
|
587
580
|
| 测试失败 | Worker 声称完成但测试失败 | 进入 REJECTED 或修复轮次 |
|
|
588
|
-
| 重复提问 | Worker 多轮重复等待 |
|
|
581
|
+
| 重复提问 | Worker 多轮重复等待 | 有限重试后挂起候选,禁止无限 continue |
|
|
589
582
|
| 危险命令 | 删除、发布、使用密钥等 | 被 Policy Gate 拦截 |
|
|
590
|
-
| 人工接管 |
|
|
583
|
+
| 人工接管 | 用户显式接管终端 | Supervisor 停止自动发送指令;这是控制路径而非日常依赖 |
|
|
591
584
|
| session 恢复 | Supervisor 重启 | 根据持久化状态恢复或安全暂停 |
|
|
592
585
|
|
|
593
586
|
---
|
|
@@ -600,10 +593,10 @@ Worker 声称完成
|
|
|
600
593
|
|
|
601
594
|
- Claude Code 自身负责工具级权限请求和用户交互;
|
|
602
595
|
- Supervisor 对 Worker 启动命令做确定性分类;
|
|
603
|
-
-
|
|
604
|
-
- `review`
|
|
605
|
-
- 普通联网命令默认不因“联网”本身拒绝,下载后直接交给 shell
|
|
606
|
-
- 无交互 UI
|
|
596
|
+
- 明确超出任务授权或绕过权限的参数按策略拒绝或挂起;
|
|
597
|
+
- `review` 命令按任务授权策略自动处理并写入事件日志,不能绕过远程/main 独立边界;
|
|
598
|
+
- 普通联网命令默认不因“联网”本身拒绝,下载后直接交给 shell 的模式按配置处理,无法安全处理则挂起候选;
|
|
599
|
+
- 无交互 UI 时不能伪造批准,也不能把缺少批准转换为远程/main 权限。
|
|
607
600
|
|
|
608
601
|
### 11.1.1 多会话与活跃请求
|
|
609
602
|
|
|
@@ -621,21 +614,24 @@ MVP 默认:
|
|
|
621
614
|
- 使用独立 worktree,活动会话之间不得共享或重叠工作目录;
|
|
622
615
|
- 权限和网络不作一律封禁,由调用者显式配置并承担宿主机权限责任;
|
|
623
616
|
- 凭据仍按最小必要继承,避免无意泄露;
|
|
624
|
-
-
|
|
625
|
-
-
|
|
617
|
+
- 明确超出任务授权的命令、权限绕过参数和生产发布动作仍由 Policy Gate/独立流程控制;
|
|
618
|
+
- Worker 不得远程 push 或 merge 到 main/integration 分支。
|
|
619
|
+
|
|
620
|
+
### 11.2 本地能力与远程边界
|
|
621
|
+
|
|
622
|
+
本地开发动作按任务规格和运行时授权策略自动处理,不把下列动作默认改成同步人工确认:
|
|
626
623
|
|
|
627
|
-
|
|
624
|
+
- 文件修改、删除、重构、数据库迁移和测试;
|
|
625
|
+
- 本地分支操作、提交、回滚和修复;
|
|
626
|
+
- 任务授权范围内的外部请求、凭据使用和 CI/配置修改。
|
|
628
627
|
|
|
629
|
-
|
|
628
|
+
Worker 的硬权限边界是:
|
|
630
629
|
|
|
631
|
-
- `
|
|
632
|
-
- `
|
|
633
|
-
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
- 发布 npm/package/release;
|
|
637
|
-
- 自动 merge;
|
|
638
|
-
- 启动高权限命令。
|
|
630
|
+
- 不得远程 `push`,尤其不得强制 push;
|
|
631
|
+
- 不得 merge 到 `main` 或其他 integration 分支;
|
|
632
|
+
- 不得绕过独立 Review、CI 或其他配置的独立边界。
|
|
633
|
+
|
|
634
|
+
本地策略仍可按任务需要配置更窄的权限;这属于任务授权,不是本项目额外规定的同步人工门。发布和生产流程继续由其已有的独立受保护工作流处理。
|
|
639
635
|
|
|
640
636
|
### 11.3 Prompt Injection 防护
|
|
641
637
|
|
|
@@ -675,10 +671,10 @@ limits:
|
|
|
675
671
|
控制规则:
|
|
676
672
|
|
|
677
673
|
- 相同输出和相同停顿不得无限触发 continue;
|
|
678
|
-
-
|
|
679
|
-
- Supervisor
|
|
674
|
+
- 超过最大轮数自动生成 `blocked`/`candidate_failed` 候选并保留证据,不得 push/merge;
|
|
675
|
+
- Supervisor 自身异常时自动暂停或挂起 Worker,而不是继续放行;
|
|
680
676
|
- Worker 重启必须保存原始现场;
|
|
681
|
-
-
|
|
677
|
+
- 任务恢复时先进入可验证的恢复/Review 状态,不能盲目继续,也不要求人工在线;
|
|
682
678
|
- 时间、自动轮数和重试次数必须记录;模型供应商自身的上下文/token 限制不由本项目重复管理。
|
|
683
679
|
|
|
684
680
|
---
|
|
@@ -743,14 +739,14 @@ TASK_STOPPED
|
|
|
743
739
|
|---|---:|---|
|
|
744
740
|
| package API 与文档不一致 | P1 | 固定版本,先做 Spike,不直接承诺兼容 |
|
|
745
741
|
| PTY 输出解析不稳定 | P1 | Worker Adapter + 事件归一化 + 回放测试 |
|
|
746
|
-
| LLM 错误判断 | P1 |
|
|
742
|
+
| LLM 错误判断 | P1 | 任务授权、证据门、有限重试、候选挂起和独立 Review |
|
|
747
743
|
| 无限 continue 循环 | P1 | 最大轮数、重复检测、冷却时间 |
|
|
748
744
|
| Worker 输出 prompt injection | P1 | 输出不可信化、工具调用前策略拦截 |
|
|
749
745
|
| Reviewer 不够独立 | P1 | 独立上下文、只读验收、证据重新采集 |
|
|
750
|
-
| 误操作生产环境 | P0 |
|
|
746
|
+
| 误操作生产环境 | P0 | 任务授权、独立验收、远程/main 独立边界;sandbox/白名单作为后续独立加固 |
|
|
751
747
|
| Worker 崩溃后状态丢失 | P2 | Decision Worker session/task mapping 持久化,异常重启后显式 recovery;Claude Worker 本身不静默 resume |
|
|
752
748
|
| 多会话互相覆盖 | P1 | 独立 cwd/worktree 检测、共享事件锁、会话级 watchdog |
|
|
753
|
-
| Decision Worker/API 不可用 | P1 |
|
|
749
|
+
| Decision Worker/API 不可用 | P1 | 记录事件,按有限重试和候选挂起策略处理;通知是可选投递,不是同步控制依赖 |
|
|
754
750
|
| 审计无法复现 | P2 | 保存事件、输入、输出摘要、diff 和验证结果 |
|
|
755
751
|
|
|
756
752
|
---
|
|
@@ -774,11 +770,11 @@ MVP 必须满足:
|
|
|
774
770
|
|
|
775
771
|
### 安全验收
|
|
776
772
|
|
|
777
|
-
- [ ]
|
|
773
|
+
- [ ] 超出任务授权的命令会被拦截或挂起,不要求人工在线。
|
|
778
774
|
- [ ] 人工接管后不再自动发送指令。
|
|
779
775
|
- [ ] 有最大时间、轮数和重试限制。
|
|
780
776
|
- [ ] 日志不会泄露密钥和 token。
|
|
781
|
-
- [ ] Decision Worker API
|
|
777
|
+
- [ ] Decision Worker API 失败会按有限重试/候选挂起处理;通知是可选的。
|
|
782
778
|
- [ ] Worker 输出不能覆盖 Supervisor 的安全策略。
|
|
783
779
|
- [ ] Supervisor 故障时默认采取 fail-closed 行为。
|
|
784
780
|
|
|
@@ -821,30 +817,30 @@ MVP 必须满足:
|
|
|
821
817
|
|
|
822
818
|
---
|
|
823
819
|
|
|
824
|
-
## 17.
|
|
820
|
+
## 17. 已确认的产品边界与待实现项
|
|
821
|
+
|
|
822
|
+
以下边界已经确认,不再作为本地开发是否允许无人值守的待决问题:
|
|
825
823
|
|
|
826
|
-
|
|
824
|
+
1. 本地编辑、命令、测试、修复和本地提交可以完全无人值守;
|
|
825
|
+
2. Decision Worker 可以在任务授权和仓库证据范围内选择实现方案,并记录假设和理由;
|
|
826
|
+
3. 无法形成可靠候选时自动重试、失败或挂起,不能要求人工必须在线;
|
|
827
|
+
4. Worker 不拥有远程 push 或 main/integration merge 权限;代码进入远程和主分支必须经过独立边界;
|
|
828
|
+
5. 验收、独立 Reviewer、有限修复和证据完整性仍是候选完成条件;
|
|
829
|
+
6. stop、cleanup、kill、恢复和审计是系统控制能力,不等同于逐动作人工审批。
|
|
827
830
|
|
|
828
|
-
|
|
829
|
-
|
|
830
|
-
|
|
831
|
-
4. 哪些命令被视为高风险?
|
|
832
|
-
5. Reviewer 是否必须使用不同模型或不同上下文?
|
|
833
|
-
6. 是否允许 Reviewer 生成修复建议但不直接改代码?
|
|
834
|
-
7. 任务最大运行时间和费用预算是多少?
|
|
835
|
-
8. 验收命令由谁提供?项目是否已有统一测试脚本?
|
|
836
|
-
9. 第一版是否需要 session resume?
|
|
837
|
-
10. 是否要求产出完整的审计日志和任务报告?
|
|
831
|
+
仍可由任务或集成方配置的工程参数包括 transport、CLI 版本、任务预算、验收命令、
|
|
832
|
+
运行时能力和是否发送通知;这些参数不能削弱远程/main 独立边界,也不能把旧的
|
|
833
|
+
同步 human gate 重新作为默认本地开发控制流。
|
|
838
834
|
|
|
839
835
|
---
|
|
840
836
|
|
|
841
837
|
## 18. 给 W 的最终结论
|
|
842
838
|
|
|
843
|
-
>
|
|
839
|
+
> 这个方向已经完成生命周期、恢复、验收、独立 Review 和本地无人值守闭环。实现路径是“自动决策—本地编辑/测试/修复/提交—证据验收—候选挂起或交付”;远程 push 和 main/integration merge 仍由独立边界控制。
|
|
844
840
|
>
|
|
845
|
-
>
|
|
841
|
+
> 采用“确定性能力边界 + LLM 辅助判断 + 可复现验收 + 独立远程/main 边界”,而不是让 LLM 获得远程写权限。`pi-goals` 的 Goal / Evidence / Sign-off 思想继续适用,PTY、watchdog 和 delegate 能力必须通过统一 Worker Adapter 组合。
|
|
846
842
|
>
|
|
847
|
-
>
|
|
843
|
+
> 最终判断:**本地开发完全自动化;远程仓库和 main/integration 分支保持独立边界。**
|
|
848
844
|
|
|
849
845
|
---
|
|
850
846
|
|
|
@@ -869,7 +865,7 @@ MVP 中必须保证:
|
|
|
869
865
|
|
|
870
866
|
- `WorkerAdapter` 唯一负责 spawn、stop、kill process group 和 transport 细节;
|
|
871
867
|
- Supervisor 唯一负责 watchdog、状态机、Policy Gate 和自动指令;
|
|
872
|
-
- Human
|
|
868
|
+
- Human/独立边界控制远程 push、main/integration merge 和显式停止;本地 Worker 不拥有这些权限;
|
|
873
869
|
- Independent Verifier 唯一负责最终验收证据;
|
|
874
870
|
- 任何扩展不能暗中重复执行 resume、retry 或 stop。
|
|
875
871
|
|
|
@@ -894,8 +890,8 @@ PTY 和 headless JSONL 只能选择一个作为 MVP 的主 transport,禁止两
|
|
|
894
890
|
|
|
895
891
|
1. 立即停止自动发送;
|
|
896
892
|
2. 保留 worktree、日志和原始输出;
|
|
897
|
-
3. 进入 `
|
|
898
|
-
4.
|
|
893
|
+
3. 进入 `BLOCKED`/`CANDIDATE_FAILED` 并保留现场;
|
|
894
|
+
4. 可选人工接管或使用基础 Claude CLI Adapter;
|
|
899
895
|
5. 完成根因分析前关闭自动化开关。
|
|
900
896
|
|
|
901
897
|
详细独立评审记录见:`docs/independent-review.md`。
|
|
@@ -906,11 +902,11 @@ PTY 和 headless JSONL 只能选择一个作为 MVP 的主 transport,禁止两
|
|
|
906
902
|
|---|---|
|
|
907
903
|
| Pi 是否作为外部 Supervisor | 是 |
|
|
908
904
|
| Claude Code 是否继续作为 Worker | 是 |
|
|
909
|
-
| 是否默认自动选择架构方案 |
|
|
905
|
+
| 是否默认自动选择架构方案 | 是,在任务授权和证据范围内选择并记录假设;无法选择则挂起 |
|
|
910
906
|
| 是否只相信 Worker 的完成声明 | 否 |
|
|
911
907
|
| 是否必须独立验收 | 是 |
|
|
912
908
|
| Reviewer 是否默认直接改代码 | 否 |
|
|
913
|
-
|
|
|
909
|
+
| Worker 是否拥有远程 push/main merge | 否,必须经过独立边界 |
|
|
914
910
|
| 是否需要统一 Adapter | 是 |
|
|
915
911
|
| 是否允许人工接管 | 必须支持 |
|
|
916
912
|
| 是否先做 Spike | 必须 |
|
|
@@ -921,7 +917,7 @@ PTY 和 headless JSONL 只能选择一个作为 MVP 的主 transport,禁止两
|
|
|
921
917
|
|
|
922
918
|
## 20. 近期落地与剩余门禁:稳定的自动验收闭环
|
|
923
919
|
|
|
924
|
-
本轮已落地 TaskSpec
|
|
920
|
+
本轮已落地 TaskSpec 多命令验收和 autonomy 字段、独立只读 Reviewer、结构化 repair round、重复 finding/P0/P1 候选挂起、JSONL 去重、baseline-relative commit evidence 和确定性 replay fixture。剩余门禁是固定 CLI 的重复运行统计,而不是继续扩大本地同步安全边界。当前只验证固定的 Claude Code `2.1.270`,不把多版本兼容作为本阶段任务。自动 Claude 路径已请求 fail-closed sandbox 和无出站域名;OS 级低权限、host-level sandbox、手动/自定义集成的 network allowlist、SBOM 和更深的供应链加固后置,不作为本阶段门禁;远程 push/main merge、保护 CI 和发布仍保持独立边界。
|
|
925
921
|
|
|
926
922
|
### 20.1 Goal / Evidence / Sign-off 模型
|
|
927
923
|
|
|
@@ -957,12 +953,12 @@ PTY 和 headless JSONL 只能选择一个作为 MVP 的主 transport,禁止两
|
|
|
957
953
|
Worker result
|
|
958
954
|
→ 多命令 acceptance checks
|
|
959
955
|
→ 独立只读 Reviewer
|
|
960
|
-
├── pass →
|
|
956
|
+
├── pass → local candidate
|
|
961
957
|
├── revise → 结构化修复指令 → Worker → 重新验收
|
|
962
|
-
└── human
|
|
958
|
+
└── human/invalid → parked candidate
|
|
963
959
|
```
|
|
964
960
|
|
|
965
|
-
Reviewer 必须使用独立 Pi session,只允许 `read`、`grep`、`find`、`ls`,输出结构化 verdict 和 findings;不能修改工作树或直接批准权限。默认最多三轮修复;相同 finding 重复出现或出现 P0/P1
|
|
961
|
+
Reviewer 必须使用独立 Pi session,只允许 `read`、`grep`、`find`、`ls`,输出结构化 verdict 和 findings;不能修改工作树或直接批准权限。默认最多三轮修复;相同 finding 重复出现或出现 P0/P1 问题时挂起不可发布候选,不要求人工在线。
|
|
966
962
|
|
|
967
963
|
### 20.2 JSONL 稳定性证据
|
|
968
964
|
|
|
@@ -973,18 +969,20 @@ Reviewer 必须使用独立 Pi session,只允许 `read`、`grep`、`find`、`l
|
|
|
973
969
|
- active request 期间的 SIGTERM、SIGINT、stop 和 Pi shutdown;
|
|
974
970
|
- 普通完成、低风险 Bash allow、`AskUserQuestion` deny-to-text、多轮、验收失败修复和恢复回放。
|
|
975
971
|
|
|
976
|
-
真实 Claude Spike 不进入普通 CI;确定性 fake Worker/replay fixture 进入 CI
|
|
972
|
+
真实 Claude Spike 不进入普通 CI;确定性 fake Worker/replay fixture 进入 CI。当前自动模式仍需显式启用是实现状态,不是本地开发目标的额外人工门;后续应补齐任务级自治配置和正常完成、修复、歧义、候选挂起的回放/真实 Claude 演练。门禁仍要求无重复动作、无错误 complete、无未清理 Worker,且关键事件可以完整回放。
|
|
977
973
|
|
|
978
974
|
### 20.3 明确不属于本阶段
|
|
979
975
|
|
|
980
976
|
- Claude CLI 多版本兼容;
|
|
981
977
|
- OS sandbox、低权限执行和网络隔离;
|
|
982
|
-
-
|
|
978
|
+
- Worker 获得远程 push 或 main/integration merge 权限;
|
|
983
979
|
- 多 Worker 在同一工作树协作。
|
|
984
980
|
|
|
981
|
+
本地开发自动化不属于可选的后续限制,而是已确认的目标;本节列出的技术项目不能被用来要求人工在线。
|
|
982
|
+
|
|
985
983
|
## 21. 后续开发路线图
|
|
986
984
|
|
|
987
|
-
`v0.5.
|
|
985
|
+
`v0.5.2` 的发布不代表所有自动化目标都已完成。后续任务按“自治决策与候选挂起 → 稳定性/恢复 → 协同
|
|
988
986
|
调度 → 安全加固”推进;多 Worker 可以纳入开发任务,但应作为独立阶段,不能与当前
|
|
989
987
|
单 Worker 稳定性门禁混在一起。
|
|
990
988
|
|
|
@@ -993,7 +991,7 @@ Reviewer 必须使用独立 Pi session,只允许 `read`、`grep`、`find`、`l
|
|
|
993
991
|
- 完成真实 Claude Code `2.1.270` 重复 Spike:普通任务连续 10 次,权限和问题回退各至少 5 次;
|
|
994
992
|
- 补齐 replay:多轮修复、验收失败修复、repair budget 耗尽、takeover、recover 和 Pi shutdown;
|
|
995
993
|
- 补齐边界测试:Reviewer 流式输出上限、`DecisionSessionStore.list()` 任务 ID 校验、跨进程恢复和超时/输出截断;
|
|
996
|
-
- 继续观察 npm `0.5.
|
|
994
|
+
- 继续观察 npm `0.5.2`、GitHub Release 资产、provenance 和回滚路径;
|
|
997
995
|
- 验收标准:无重复动作、错误 complete、未清理 Worker 或未审计的自动放行。
|
|
998
996
|
|
|
999
997
|
### 21.2 中期:恢复能力
|
|
@@ -1001,7 +999,7 @@ Reviewer 必须使用独立 Pi session,只允许 `read`、`grep`、`find`、`l
|
|
|
1001
999
|
- 设计安全的 Claude session resume;明确 `--resume` 与实时 PTY attach 的边界;
|
|
1002
1000
|
- 完善 takeover、recover、Pi shutdown、Worker 崩溃和部分完成的状态语义;
|
|
1003
1001
|
- 增加跨进程恢复端到端测试,包括 cwd lease、Decision Worker session、Worker 身份和事件日志一致性;
|
|
1004
|
-
- 恢复失败必须进入 `
|
|
1002
|
+
- 恢复失败必须进入 `BLOCKED`/`CANDIDATE_FAILED`,不能静默重放原始任务或重复发送输入;后续人工接管是可选恢复路径。
|
|
1005
1003
|
|
|
1006
1004
|
### 21.3 后续:多 Worker 协作与调度
|
|
1007
1005
|
|
|
@@ -1015,11 +1013,11 @@ Reviewer 必须使用独立 Pi session,只允许 `read`、`grep`、`find`、`l
|
|
|
1015
1013
|
3. **结构化交接**:Worker 之间只通过受限 artifact、事件引用和验收报告交接,不直接共享
|
|
1016
1014
|
控制通道;交接内容必须经过 schema 校验和大小限制。
|
|
1017
1015
|
4. **汇总验收**:每个 child 先独立验收,root task 再汇总目标、diff、测试和 Reviewer 结果;
|
|
1018
|
-
冲突、缺失证据或任一 P0/P1
|
|
1016
|
+
冲突、缺失证据或任一 P0/P1 自动阻止候选并挂起,不要求人工在线。
|
|
1019
1017
|
5. **恢复与关闭**:支持单个 child、整棵任务图和 Pi shutdown 的一致性恢复;父任务不能在
|
|
1020
1018
|
子任务状态未知时报告 `completed`。
|
|
1021
|
-
6.
|
|
1022
|
-
merge
|
|
1019
|
+
6. **冲突检测和独立整合**:只允许在独立 integration worktree 中进行整合;Worker 不
|
|
1020
|
+
得 push 或 merge,冲突和整合动作必须经过独立远程/main 边界。
|
|
1023
1021
|
|
|
1024
1022
|
多 Worker 阶段的最小验收矩阵:两个独立 Worker 并行、依赖顺序、一个 Worker 失败、取消
|
|
1025
1023
|
传播、重复交接、工作树冲突、单 child 恢复、整棵任务图恢复和 shutdown 中断。通过这些
|
|
@@ -1031,24 +1029,24 @@ Reviewer 必须使用独立 Pi session,只允许 `read`、`grep`、`find`、`l
|
|
|
1031
1029
|
- OS sandbox、低权限执行、网络隔离/allowlist;
|
|
1032
1030
|
- 更深的供应链、SBOM、密钥隔离和生产监控。
|
|
1033
1031
|
|
|
1034
|
-
## 22. v0.5.
|
|
1032
|
+
## 22. v0.5.2 发布后的自动化自治计划
|
|
1035
1033
|
|
|
1036
1034
|
`v0.5.1` 发布后的真实 Claude Code `2.1.270` 演练完成了
|
|
1037
|
-
Worker → 验收 → 独立 Reviewer → fail-closed
|
|
1035
|
+
Worker → 验收 → 独立 Reviewer → fail-closed 候选挂起链路。验收六项全部通过,
|
|
1038
1036
|
但发现两个 P1 和两个 P2 生命周期/证据问题。正式记录、复现结果、实施阶段和门禁
|
|
1039
1037
|
见 [`docs/automation-hardening-plan.md`](automation-hardening-plan.md)。
|
|
1040
1038
|
|
|
1041
|
-
|
|
1039
|
+
已完成的加固和下一轮自治实现顺序为:
|
|
1042
1040
|
|
|
1043
1041
|
1. **生命周期与能力模型**:拆分 `persistentSession` 与 `repairableSession`,修复非持久
|
|
1044
1042
|
JSONL repair 的非法终态转换,并支持 `verifying` 状态的 stop/shutdown;
|
|
1045
|
-
2. **watchdog 与证据完整性**:暂停 no-output
|
|
1046
|
-
diff 和安全的 untracked evidence;
|
|
1043
|
+
2. **watchdog 与证据完整性**:暂停 no-output 时钟,记录 task baseline,补齐
|
|
1044
|
+
baseline-relative committed/staged/unstaged diff、commit summaries 和安全的 untracked evidence;
|
|
1047
1045
|
3. **自动化协议**:按 assistant message 边界解析 Reviewer/Decision Worker 输出,增加
|
|
1048
1046
|
启动 preflight、可观测 heartbeat、permission gate 一致性和 signal 生命周期;
|
|
1049
|
-
4. **验证门禁**:已补齐真实 capability
|
|
1050
|
-
repair/reacceptance
|
|
1047
|
+
4. **验证门禁**:已补齐真实 capability 矩阵、隔离 worktree 的真实
|
|
1048
|
+
repair/reacceptance 演练、exact-head 独立 Reviewer 和受保护发布;本地候选仍不得绕过远程/main 独立边界。
|
|
1051
1049
|
|
|
1052
|
-
|
|
1053
|
-
`--resume
|
|
1054
|
-
证据继续 fail-closed
|
|
1050
|
+
本轮不放宽以下边界,同时不增加本地同步人工门:Reviewer 仍只读,验收仍使用 argv/`execFile`,不伪造 Claude
|
|
1051
|
+
`--resume`,Worker 不得远程 push 或 main/integration merge,P0/P1、重复 finding、超时、API 错误和不完整
|
|
1052
|
+
证据继续 fail-closed 并生成不可发布候选。多 Worker 协作继续后置。
|