self-evolve · diff
git:20260622.4046094 to git:20260622.a88b504
67 added, 52 removed. Audit C to C.
# self-evolve (SKILL)
指向任意 skill / 仓库 / 项目,在 git worktree 沙箱内多轮自动改进它,用不可 game 的
- 提交门保证"被采纳 = 真改进"。三档评测(A 可验证 / B 外部锚 / C 主观异质 judge)+
- 自举隔离,全程反自欺。
+ 提交门保证「**被采纳 = 真改进**」。
- ## 铁律(不可违背)
+ **方法论恒定,信号来源自适应。** reflect → propose → evaluate → judge → accept,全程
+ 反自欺;唯一随目标变的是「评测信号从哪来」。
- 1. **LLM 只提议,代码裁决**:采纳 / 拒绝 / 回滚 / 分档由 harness 确定性代码决定;
- 搜索 / 反思 / 评审才用 LLM,绝不让 LLM 评判自己产出。
- 2. **原始证据只读**:trace / 反思 append-only,永不被 LLM 改写(events.jsonl 是唯一真相源,
- 计数器只能经事件 delta 写入,崩溃可 replay 重建)。
- 3. **数据隔离(铁律5)**:frozen 锚真值 / holdout 测试真值对 REFLECT / PROPOSE / PATCH 不可读
- (holdout 物理隔离到 `_holdout/`,target.json 只存引用 + 计数)。
- 4. **tier 首次冻结**:A/B/C 档在首次 PROFILE 冻结,resume 不重跑。
- 5. **沙箱内全自动,落地走人审**:沙箱内 canonical 写 = auto;出沙箱写删 / push / 合主分支 /
- 对外发送 = GATED,只在人审独立子流程发生,永不在自动循环内。
+ > **能跑就跑,能核就核,都不能就生成场景让异质判官评——所以没有不能进化的目标。**
- ## 门控序列(10 态,A/B/C/self 全实现)
+ ## 统一评测框架(评测策略,不是目标等级)
+ 只要目标意图可抽取、可操作化,信号就能造出来,故不存在不可评的目标。下面三者是同一
+ `evaluate` 契约的三个 **provider**,可叠加(`A+B`、`C+B`…),按可核验强度排序,往上尽量
+ 取、取不到向下兜底——底永远存在:
+
+ | 评测策略 | 取信号的方式 | 何时用 | 强度 |
+ |---|---|---|---|
+ | **A 程序裁决** | 跑目标自带 / 可生成的测试,pass/fail | 有可执行判据(含可为其生成测试) | 最高(确定、可重放) |
+ | **B 锚核验** | 改进主张拆成可独立核验的事实锚(URL/文献/SEC/可复现命令),逐锚 verify | 「对」系于外部事实 | 高(独立源、可抽 holdout) |
+ | **C 生成评测** | harness 生成场景 + rubric,交异质判官(Claude×Codex,prompt 无真值)盲评 | 前两者都取不到 | 较低(异质 + 防合谋闸补强) |
+
+ **C 不是「兜底差等舱」,是第三种合法信号通道**:对任何目标都能生成使用场景、从意图写出
+ 可打分 rubric、让两个异质模型盲评取一致性。「取不到任何信号」在工程上不存在。纯 C 默认
+ 走人审落地,是信号最弱时把终判交回人的审慎,**不是「目标不可用」**。
+ (**落地状态**:C 的「真 coverage(场景对意图的覆盖率)」与对 A/B 的 accept 端平权由
+ scenario-eval 模块承载;当前代码对纯主观 C 仍取保守处理——`coverage=0`、权重偏低、默认
+ 人审——平权是 scenario-eval 的设计 / 落地方向。)详见
+ [`docs/philosophy.md`](docs/philosophy.md)、[`reference/signal-providers.md`](reference/signal-providers.md)。
+
+ ## Pipeline
+
```
- INIT → PROFILE(A/B/C 可叠加,变异测试二次校验) → SELECT_PARENT →
- REFLECT(N=3 并行 MARS) → CHECK_REFLECTION(BenchTrace 门) → PROPOSE →
- PATCH(import 白名单 + AST 危险门 + IMMUTABLE 硬拒 + 沙箱边界) →
- EVALUATE(A:pytest / B:锚 coverage+holdout 抽检 / C:异质 judge) →
- ACCEPT(PACE e-process + 各档门 + 自欺多闸 + 强制人审) →
- ARCHIVE(Pareto 硬维门 + lineage + rollback + Library Drift) → LOOP / STOP
- ↘ 9.5 PAUSE_FOR_HUMAN
+ ┌──────────────────── 一次迭代 ────────────────────┐
+ PROFILE ──► REFLECT ──► PROPOSE ──► PATCH ──► EVALUATE ──► JUDGE ──┐
+ (定信号源) (读历史) (出方案) (落沙箱) (取信号) (码裁决) │
+ │ accept/reject/rollback
+ └────────────────────◄── LOOP ◄────────────────────────────────┘
+ │ 命中自欺/熔断 → PAUSE(人审) → STOP
```
- - **PROFILE**:A(有测 + 基线全绿 + 变异被杀)/ B(≥24 真锚字段)/ C(主观)**可叠加**
- (如 "A+B");tier 首次冻结。
- - **REFLECT**:N=3 独立 MARS 反思并行 fanout(只读历史 trace),meta 汇总去重。
- - **CHECK_REFLECTION**:BenchTrace 门——每条 finding 须引用真实历史 trace 证据,杜绝臆造。
- - **PATCH**:import 白名单 + AST 危险调用门 + **IMMUTABLE 路径硬拒**(自举时)+ 沙箱
- realpath 边界(越界 → REJECT)。
- - **EVALUATE**:A 档 pytest(禁网 / 凭证隔离 / HOME 监狱);B 档逐锚 verify + marginal_gain
- 配对 + coverage 门 + 每 K 轮 holdout 抽检;C 档异质 judge(Claude + Codex,prompt 无真值)
- + pairwise_agreement + judge↔锚校准。
- - **ACCEPT**:**PACE e-process acceptor**(confseq,缺则 ONS 回退,type-I ≤ α 已验证);
- no-regression 硬门;B 档 n_min + 独立性下限 + evalue_max_step 三门;C 档双向 α + 纯 C
- 强制人审 + Codex 不可用禁单 Claude 自动 ACCEPT;自欺多闸(低锚增益 / holdout 背离 /
- judge-anchor 背离 / 累计漂移);命中 → 态 9.5 强制人审。
- - **ARCHIVE**:Pareto 多维硬维门(软涨硬平不可选 parent,只冷藏)+ lineage append-only +
- 版本快照 + rollback + Library Drift retire_stale。
- - **熔断**(经事件持久的三正交计数器 + drift):no_progress / static_reject /
- forced_review / drift_count 各达阈停机;no_progress 释放阀仅升人审频率、绝不自动降阈采纳。
+ | 步 | 做什么 | 关键约束 |
+ |---|---|---|
+ | **PROFILE** | 给目标定用什么信号评(一次冻结) | 分「信号怎么来」,不分「能不能做」 |
+ | **REFLECT** | 只读历史 trace,提炼改什么 | 每条结论须引真实 trace 证据,不许臆造 |
+ | **PROPOSE** | LLM 出候选改动 | LLM 只提议,永不读真值 |
+ | **PATCH** | 写进 git worktree 沙箱 | 越界 / 危险调用 / 改 IMMUTABLE → 拒 |
+ | **EVALUATE** | 跑出评测信号(A/B/C provider) | 真值对前面各步不可读 |
+ | **JUDGE** | 确定性代码裁决采纳与否 | 代码裁决,绝不让 LLM 评自己 |
- ## 自举隔离(`--self`,铁律3 决策码不可改)
+ 底层是 10 态门控状态机(实现真相),收敛成上面 6 个直觉动词的映射 + 熔断语义见
+ [`docs/pipeline.md`](docs/pipeline.md);各模块方法见 [`docs/modules/`](docs/modules/)。
- candidate 改自己代码时,决策码(14 个 IMMUTABLE 文件含 acceptor / judges / verifiable /
- patch / proxy / events …)从 frozen base ref 物化、记 sha256:启动哈希 fail-closed 校验、
- patch 写 IMMUTABLE 路径硬拒、**supervisor 双进程**用 frozen 代码裁决(candidate worktree
- 永不进 sys.path)、自举评测用 frozen grader(candidate 不能自评 / 自打分)。
+ ## 铁律(不可违背)
+ 1. **LLM 提议,代码裁决**——采纳 / 拒绝 / 回滚 / 定信号源全由 harness 确定性代码决定;LLM 绝不评判自己产出。
+ 2. **原始证据只读**——trace / 反思 append-only,`events.jsonl` 唯一真相源,崩溃可 replay 重建。
+ 3. **真值隔离**——测试 / 锚 / 场景的真值对 reflect/propose/patch 物理不可读(holdout 隔离到 `_holdout/`)。
+ 4. **信号源一次冻结**——PROFILE 定的策略首轮冻结,resume 不重评。
+ 5. **沙箱内全自动,出沙箱走人审**——push / 合主分支 / 对外发送只在独立人审子流程发生。
+
+ ## 自举隔离(`--self`)
+
+ candidate 改自己代码时,14 个 IMMUTABLE 决策码(acceptor / judges / verifiable / patch /
+ events …)从 frozen base ref 物化 + sha256 启动 fail-closed 校验、patch 写 IMMUTABLE 硬拒、
+ **supervisor 双进程**用 frozen 代码裁决(candidate worktree 永不进 sys.path / 不能自评)。
+ 细节见 [`docs/modules/self-boot.md`](docs/modules/self-boot.md)。
+
## 成熟度
- 裁决 / 门控 / 反自欺 / 自举隔离 / crash-replay 全部真实可用(521 测试)。
- **生成式 LLM 接缝已接通真 agent 并 live 验证**:proposer / reflector / 两个 judge
- 走本机 `cc`(split-billing 网关, fallback `claude`)+ `codex exec` CLI(统一经
- `workflows/_claude_launch.js`,cc 优先、prompt 走 stdin 防注入、UTF-8 解码)。
- - 默认 `--proposer builtin --reflect-mode serial`(确定性, 测试用, 不调外部 CLI);
- - `--live`(= `--proposer llm --reflect-mode parallel`)开真 agent 闭环。
- - 纯 A 档自动 ACCEPT 需改进空间(绿基线无, 按设计); 开放域改进信号在 B / C 质量档。
+ 裁决 / 门控 / 反自欺 / 自举隔离 / crash-replay 全部真实可用并经测试覆盖。`--live` 开真
+ agent 闭环(proposer / reflector / 双 judge 走 `cc` + `codex exec`);默认 builtin 确定性
+ 模式(不调外部 CLI)。CLI flag 细节见 [`README.md`](README.md)。
## 用法
```
/self-evolve <target> # 对目标启动一次自迭代 run(需先部署到 ~/.claude/skills/)
/self-evolve-status <run_id> # 查看 run 状态
/self-evolve-resume <run_id> # 从已有 run 续跑
```
底层 CLI:
```
python -m tools.sie.cli init --target <target>
python -m tools.sie.cli run --target <target> --run-id <run_id> --base-ref HEAD \
- [--max-rounds 3] [--mode auto|gated] [--self --enforce-immutable]
+ [--max-rounds 3] [--mode auto|gated] [--proposer builtin|llm] \
+ [--reflect-mode serial|parallel] [--live] [--self --enforce-immutable]
python -m tools.sie.cli status --target <target> --run-id <run_id>
python -m tools.sie.cli replay --target <target> --run-id <run_id>
python -m tools.sie.cli rollback --target <target> --run-id <run_id> --vid <vid>
```
- 档位 / 锚契约、acceptor 数学见 [`reference/`](reference/);设计规格与 52 任务计划见
- [`docs/superpowers/`](docs/superpowers/)。
+ ## 文档
+
+ [`docs/philosophy.md`](docs/philosophy.md)(普适哲学)·
+ [`docs/pipeline.md`](docs/pipeline.md)(10 态门控全景)·
+ [`docs/modules/`](docs/modules/)(各模块方法,含 [`scenario-eval`](docs/modules/scenario-eval.md))·
+ [`reference/`](reference/)(acceptor 数学 / 锚契约 / 信号 provider)·
+ [`docs/superpowers/`](docs/superpowers/)(设计规格与 52 任务计划)。