# Pi Adaptive Delivery 实施计划

## 1. 文档状态

- 状态：仓库 manifest 版本为 `0.1.16`；第 13.153 节已完成两个对外入口及普通对话恢复，第 13.154 节补齐 README 完整使用路径，第 13.155 节完成本机压缩插件修复，第 13.157 节正在完成“继续”自动恢复与轻量状态面板优化。用户已授权的完整提交与 `origin/main` 推送已完成，结果见第 13.156 节；尚未发布到 npm，线上 `0.1.16` 仍为此前入口版本。此前完整验证、Git 推送与 npm 发布证据统一见第 13.148—13.152 节。
- 唯一进度台账：本文件
- 当前技术方案：`docs/技术方案.md`，本会话用户已正式确认
- 当前阶段：对外入口收敛为 `/delivery-shape` 和 `/delivery-status`；普通对话承担规划、继续和恢复意图，状态面板只展示阶段、下一步和运行中摘要，技术诊断通过 `Ctrl+O` 查看，只有满足条件时提供结束交付。第 13.157 节的“继续”自动恢复与轻量状态面板优化已完成实现和验证。一次方案确认已实现，确认按钮为“确认方案并开始实施”；AI 内部维护计划，每次委派提供当前 `paths` 与 `inputs`。当前实现只面向标准 Pi 原生工具环境，父 Pi 与子 CLI 按新版规则核对工具定义和基础环境；不探测、不加载、不传递任何旧适配器元数据。隔离测试强制使用仓库本地 Pi `1.1.0` CLI；标准 Pi 生产父进程优先复用自身 CLI 入口，嵌入 SDK 才回退到 PATH 查找工作区外标准 CLI。历史适配器验证记录保留在后续章节，不代表当前支持能力。
- 当前试用反馈：历史章节仍保留两阶段流程和旧适配器的原始试用证据；当前实现已删除固定实施确认；本轮完成真实 Pi SDK/标准 CLI 与 fake provider 自动化，未重跑原生 Pi 真机终端流程。只在 shape 后启用交付流程；进入后普通工具同样沿用 Pi。
- 当前权限边界：开发、审查及分析子 Agent 均继承父 Pi 已启用的全部普通工具和原有权限检查，审查角色也不禁用写入或编辑工具。开发负责实现与修复，审查负责独立检查和报告，父 Pi 决定修复安排；这些职责仅由提示词说明。交付入口核实本轮方案确认、writer 交接、候选和持久记录，普通工具不受交付 writer 强制控制。
- 目标仓库：`small-xiexu/pi-adaptive-delivery`
- 旧实现依赖基线：Pi `0.84.4`、bundled `pi-subagents` `0.64.0`、Node.js `>=22.19.0`；不代表新设计已验证兼容
- 当前本机验证环境：Node.js `25.2.1`、npm `11.6.2`

此前用户针对“确认这份实施计划，并授权从 P1 开始重构”的明确请求回复“继续”，取得新设计的实施批准。操作范围为第 13.3 节列出的本仓库文件与隔离临时测试目录，依照计划验证并记账；默认测试不读取真实凭证或调用真实模型。后续独立模型复审、四项修复、代理真实 TUI 和本地基线提交均分别按明确授权执行，原始范围与证据见 P6。本次用户另行接受隔离 JSONL CLI 的真实模型完整流程试用，授权与证据见第 13.4 节；认证由 Pi 自身处理，不输出或复制凭据。不修改用户真实 Pi 配置/安装目录、不恢复旧 canary，也不原样合入临时原型。新的 commit、push、PR、npm 发布和部署继续需要具体授权。

**历史记录边界：第 2—12 节保留旧版交付范围、M0—M11 / R1—R29 进度和验收证据，仅供查证，不是新设计的实施计划、当前设计约束或可继续执行的授权。与已确认新方案冲突的 bundled `pi-subagents`、Tiny、合并批准、create-only、模型费用确认等旧约定不再作为新设计目标。当前摘要统一见本文件第 1 节；第 13 节按时间保存实施证据，P1—P6 见第 13.3 节。**

## 2. 交付范围

### 2.1 本期必须交付

- 一个可通过本地路径和 Git 安装的 Pi Package。
- `/delivery-shape`、`/delivery-plan`、`/delivery-run` 三个 Prompt Template。
- 一个父会话使用的 `adaptive-delivery` Skill。
- 一个窄职责 `delivery-gate` Extension。
- 技术方案确认的状态机、中文显示、批准记录、只读委派、权限策略、writer lease、candidate digest、progress-sync 和断线恢复能力。
- 单一 bundled `pi-subagents` API/runtime owner、重复 owner 检测与真实 run ID 终态摘要重绑定。
- 单元、集成和隔离 E2E 测试。
- README、安装说明、模型配置示例、安全边界和故障恢复说明。

### 2.2 本期明确不做

- 自动训练、微调或自主修改 Package。
- 自动 commit、push、创建 PR、npm 发布或部署。
- 非交互 RPC/JSON/print 模式的审批授权。
- 非 Git 项目、多仓库原子交付和生产操作编排。
- 通用项目计划格式、TODO 系统或 Issue 状态机。
- 自研子 Agent runtime、CI 平台或操作系统沙箱。
- 默认真实模型调用、真实 Provider 出网或费用测试。

## 3. 实施原则

1. 每个 cwd/worktree 同时只有一个 writer。
2. 父会话是唯一编排者；子 Agent 不作产品、授权和发布决定。
3. 每个里程碑先完成最小测试，再扩大到受影响集成验证。
4. 只有已验证的独立事项才能标记为完成。
5. 每完成一个独立事项，立即更新本文件的状态和验证证据。
6. 未完成事项必须标记为`进行中`、`待验证`或`阻塞`，并记录断点和下一步。
7. 运行时权限、路径和来源判断全部失败关闭。
8. Package 只使用 `pi-subagents` 公开 API，不导入其内部实现路径。
9. 测试默认禁网、使用临时 Git 仓库和隔离 `PI_CODING_AGENT_DIR`，不读取用户凭证。
10. 不为未来扩展增加未被当前验收使用的配置面或抽象层。

## 4. 技术栈与包边界

### 4.1 运行时

- TypeScript ESM，由 Pi/Jiti 直接加载，不要求用户构建产物。
- Node.js 最低版本跟随当前 Pi：`>=22.19.0`。
- `@earendil-works/pi-coding-agent`、`@earendil-works/pi-ai`、`@earendil-works/pi-tui` 和 `typebox` 按 Pi Package 规则声明为 peer dependency。
- `pi-subagents` 固定兼容版本放入 `dependencies` 与 `bundledDependencies`，只导入公开 API；manifest 加载它的 Extension 作为唯一 owner，并暴露同版本 Prompt/Skill。
- `beautiful-mermaid` 与 `@resvg/resvg-js` 固定版本作为普通运行依赖，提供无浏览器 SVG、PNG 和字符图；不放入 `bundledDependencies`。
- `pi` manifest 暴露 bundled `pi-subagents` Extension/Skill/Prompt 与本 Package 自身资源。

### 4.2 开发与测试

- TypeScript `tsc --noEmit` 做静态检查。
- Node 原生 `node:test` 承担单元和集成测试。
- 测试仍使用 Node 原生 `node:test`，通过 dev-only `tsx` loader 处理本仓库以及 `node_modules/pi-subagents` 暴露的 TypeScript public API；Node 原生 strip-types 会拒绝处理 node_modules 下的 TypeScript，因此不作为最终测试入口。
- 测试使用临时目录、临时 Git 仓库、受控环境变量和 fake Pi event bus。
- 真实 Pi 进程 E2E 只使用本地 fake provider/runner；真实模型 canary 必须显式 opt-in，且不进入默认验收。

## 5. 目标目录

```text
pi-adaptive-delivery/
├── AGENTS.md
├── README.md
├── package.json
├── tsconfig.json
├── docs/
│   ├── 技术方案.md
│   └── 实施计划.md
├── prompts/
│   ├── delivery-shape.md
│   ├── delivery-plan.md
│   └── delivery-run.md
├── skills/
│   └── adaptive-delivery/
│       └── SKILL.md
├── extensions/
│   └── delivery-gate/
│       ├── index.ts
│       └── src/
│           ├── domain.ts
│           ├── approvals.ts
│           ├── diagrams.ts
│           ├── diagram-view.ts
│           ├── policy.ts
│           ├── subagents.ts
│           ├── workspace.ts
│           ├── progress-sync.ts
│           ├── runtime-state.ts
│           └── validation.ts
└── test/
    ├── support/
    ├── unit/
    ├── integration/
    └── e2e/
```

文件边界可在实现中按测试需要小幅调整，但不得增加第二套状态机、计划系统或子 Agent runtime。

## 6. 里程碑总览

| ID | 里程碑 | 状态 | 完成证据 |
|---|---|---|---|
| M0 | 仓库与 Package 基线 | 已完成 | `npm run typecheck`、`npm test`、`npm pack --dry-run` 通过；npm audit 0 vulnerabilities |
| M1 | 纯状态机、中文显示与策略模型 | 已完成 | `npm run typecheck`、11 项 unit tests 通过 |
| M2 | Extension 生命周期与 Session 状态恢复 | 已完成 | `typecheck`、19 unit、6 integration tests 通过 |
| M3 | 批准记录、TUI 主体门禁与降权 | 已完成 | `typecheck`、24 unit、12 integration tests 通过 |
| M4 | 固定只读委派与 `pi-subagents` 兼容边界 | 已完成 | `typecheck`、32 unit、13 integration tests 通过 |
| M5 | Canonical writer lease | 已完成 | `typecheck`、39 unit、15 integration tests 通过 |
| M6 | Candidate digest 与 evidence 失效 | 已完成 | `typecheck`、candidate unit 与 M7 evidence integration 通过 |
| M7 | 固定验证入口与自适应编排策略 | 已完成 | `typecheck`、49 unit、17 integration tests 通过 |
| M8 | Writer-free progress-sync | 已完成 | `typecheck`、55 unit、20 integration tests 通过 |
| M9 | Prompt、Skill 与中文用户体验 | 已完成 | 58 unit、21 integration、2 real Pi RPC E2E 通过 |
| M10 | 隔离集成/E2E 与恢复矩阵 | 已完成 | `typecheck` + 58 unit + 23 integration + 2 real Pi RPC E2E 通过 |
| M11 | 安装、文档、打包和最终验收 | 暂停（旧版验收未完成） | R29 Package 修复与限定复审完成，修复后第七轮 canary 续跑及人工项未完成；当前转入新方案对齐，不自动恢复现场 |

## 7. 详细实施项

### M0 仓库与 Package 基线

目标：建立可安装、可 typecheck、可测试但尚无业务行为的最小 Pi Package。

- [x] 新建 `AGENTS.md`，固化中文沟通、单写入者、计划台账、验证和 Git/发布授权边界。
- [x] 新建 `package.json`，声明 ESM、Node engine、Pi manifest、scripts、peer dependencies 与 bundled `pi-subagents`。
- [x] 新建 `tsconfig.json`，启用 strict、noEmit、Node ESM 和 `.ts` import 支持。
- [x] 建立最小 Extension 与 test 基线，不提前实现后续里程碑逻辑；Prompt/Skill 文件按 M9 创建，避免发布占位资源。
- [x] 增加 Package manifest 测试，确认当时只暴露自身资源，不自动加载 bundled `pi-subagents` 资源；这是 M0 历史基线，当前设计已由 R16 的单一 bundled owner 取代。

最小验证：

```bash
npm install
npm run typecheck
npm test
npm pack --dry-run
```

完成条件：空行为 Extension 能被测试宿主加载；Package 资源清单和 npm tarball 内容符合边界。

验证证据：

- `npm install`：成功，新增 234 packages，0 vulnerabilities。
- `npm run typecheck`：通过。
- `npm test`：1/1 通过。
- `npm pack --dry-run`：通过；当时 Pi manifest 仅指向本 Package 的 Extension、Prompt 和 Skill 路径，bundled `pi-subagents` 未作为 Pi 资源暴露。当前 manifest 行为见 R16。

### M1 纯状态机、中文显示与策略模型

目标：先用纯函数实现交付状态、状态转换、权限矩阵和中文显示，不接触 Pi 生命周期。

- [x] 定义稳定英文状态枚举和中文展示映射。
- [x] 实现标准路径、小型合并批准路径、`BLOCKED -> resumeState` 和终态转换。
- [x] 实现纯 `resolvePolicy(state, context)`，输出允许工具、子 Agent ceiling 和宿主入口。
- [x] 定义 `progress-sync` 为不改变基础交付状态的临时 operation，而不是新交付状态。
- [x] 对非法转换、缺失批准、未知状态和部分策略失败采用只读默认值。

强制测试：

- [x] 每个状态的中文/英文映射稳定。
- [x] 只有 `IMPLEMENTING`、授权 `REWORKING` 可以返回源文件写权限。
- [x] `VALIDATING`、`BLOCKED`、`DELIVERED`、`CANCELLED` 默认只读。
- [x] `BLOCKED` 保存并只返回通过校验的 `resumeState`。
- [x] `progress-sync` 不能开放原始 Bash、原始 `subagent` 或非目标路径。

完成条件：纯单元测试覆盖所有状态、转换和权限组合，不依赖 Pi 进程。

验证证据：

- `npm run typecheck`：通过。
- `npm test`：11/11 通过。
- TypeScript 检查发现并修复了 `resumeState` 可能包含 IDLE/终态的边界，补充了 IDLE、DELIVERED、CANCELLED 拒绝 BLOCK 测试。

### M2 Extension 生命周期与 Session 状态恢复

目标：将纯状态模型接入 Pi Extension 生命周期，并实现失败关闭的恢复。

- [x] 注册 Extension、状态 widget 和 `/delivery-status`。
- [x] 使用 `pi.appendEntry()` 保存版本化 custom state。
- [x] 在 `session_start`、`session_before_tree`、`session_tree`、reload、fork/switch 和 shutdown 边界应用 `applyPolicy()`。
- [x] `session_before_tree` 先收紧只读，`session_tree` 再按活动分支恢复。
- [x] 状态缺失、版本未知、条目损坏或恢复异常时保持只读并显示中文阻塞原因。
- [x] 保持 custom entry 不进入模型上下文，只注入必要的有界阶段提示。

强制测试：

- [x] Session resume、tree 分支、fork 和 reload 恢复正确分支状态。
- [x] `/tree` 不触发 `session_start` 时仍能正确恢复权限。
- [x] `applyPolicy()` 任一子步骤失败都回到只读，不残留部分开放工具。
- [x] 恶意或损坏 custom state 不能放宽权限。

完成条件：使用 fake ExtensionContext 和临时 Session 的集成测试证明状态可持久恢复。

验证证据：

- `npm run typecheck`：通过。
- `npm test`：19/19 unit tests 通过。
- `npm run test:integration`：6/6 通过。
- 纯本仓库测试曾验证 Node strip-types 兼容；M4 接入 `pi-subagents` TypeScript public exports 后改用 dev-only `tsx` loader，生产运行仍由 Pi/Jiti 加载。

### M3 批准记录、TUI 主体门禁与降权

目标：实现不可变批准记录，并确保所有权限放宽动作只来自实际 TUI 用户确认。

- [x] 实现方案、计划和合并批准记录：Session ID、entry ID、SHA-256、branch anchor、canonical cwd/Git root、时间。
- [x] 实现 `/delivery-approve-solution`、`/delivery-approve-plan`、`/delivery-resume` 和 `/delivery-force-release-lease` 的主体门禁；实际 lease 释放接入 M5。
- [x] 每个权限放宽命令检查 `ctx.mode === "tui"`，并要求不可自动确认的用户对话。
- [x] 实现 `/delivery-revise`、`/delivery-cancel` 和模型可调用的 `delivery_invalidate`；它们只能维持或降低权限。
- [x] 恢复和每次放宽前重新校验批准 entry 位于活动分支、摘要一致且 cwd 未变化。

强制来源矩阵：

| 来源 | approve | resume | force-release | invalidate |
|---|---:|---:|---:|---:|
| TUI 用户确认 | 允许 | 允许 | 允许 | 允许 |
| TUI 用户取消对话 | 拒绝 | 拒绝 | 拒绝 | 允许降权 |
| print | 拒绝 | 拒绝 | 拒绝 | 允许降权 |
| JSON | 拒绝 | 拒绝 | 拒绝 | 允许降权 |
| RPC | 拒绝 | 拒绝 | 拒绝 | 允许降权 |
| Extension 注入消息 | 拒绝 | 拒绝 | 拒绝 | 允许降权 |
| child/subagent | 拒绝 | 拒绝 | 拒绝 | 允许降权 |

完成条件：来源矩阵全部自动化验证，任何无实际 TUI 确认的路径都不能进入写状态。

验证证据：

- `npm run typecheck`：通过。
- `npm test`：24/24 unit tests 通过。
- `npm run test:integration`：12/12 通过。
- 当前 Pi `ExtensionCommandContext` 不暴露命令触发来源；实现以不可自动确认的 TUI 对话作为最终用户手势。print/JSON/RPC 不弹对话，Extension 注入或 child 请求本身不能放权。
- M5 lease 未接入前，计划批准会持久化批准记录但保持 `BLOCKED` 和只读，不伪造写权限。

### M4 固定只读委派与 `pi-subagents` 兼容边界

目标：审批前禁止原始 `subagent`，只提供可证明只读的 native delegation。

- [x] bundled import 仅使用 `pi-subagents` 公开 exports。
- [x] 通过 RPC ping 检查 v1 owner 存活和已广告 capabilities，不把协议版本当 npm 版本。
- [x] 注册 session-scoped capability ceiling，并覆盖所有非 writer 状态。
- [x] 实现 `delivery_delegate_readonly`，公开参数不包含 gate、acceptance、output、worktree、resume 或管理动作。
- [x] 使用 preflight 校验 canonical Agent、native runner、effective tools、Extensions、cwd、output path 和 contract digest。
- [x] 使用 structured delegation API 启动 foreground child，并处理 started/update/terminal/cancel。
- [x] 缺少 owner、API、兼容契约或 output 边界证明时失败关闭。

强制测试：

- [x] 项目/用户同名 Agent shadow 后契约不符合即拒绝。
- [x] external CLI/job runner 拒绝。
- [x] child 工具被 ceiling 限制为明确只读集合。
- [x] caller 无法注入 output/outputMode/path、gate、acceptance 或 management 字段。
- [x] 内置默认 output 只有位于 Git root 外的 Session/temp 托管目录才允许。
- [x] 项目内、符号链接逃逸、任意绝对路径和无法 canonicalize 的 output 全部拒绝。
- [x] delegation 重复 node、取消、timeout、invalid response 均保持只读策略。

完成条件：真实 public API 契约的集成测试通过，未加载兼容 owner 时 Package 明确不可运行严格流程。

验证证据：

- `npm run typecheck`：通过。
- `npm test`：32/32 unit tests 通过。
- `npm run test:integration`：13/13 通过，包含隔离 agent dir + 临时 Git 仓库的真实 builtin scout preflight。
- Node 原生 strip-types 无法加载 node_modules 内 TypeScript public exports；测试入口改为 dev-only `tsx + node:test`，生产仍由 Pi/Jiti 加载。

### M5 Canonical Writer Lease

目标：在 Package 保证范围内防止父会话和多个 child 同时写同一 workspace。

- [x] 定义 canonical workspace key：realpath cwd/worktree + Git root。
- [x] 在 Pi 用户状态目录实现跨进程原子 lease 文件和版本化 owner record。
- [x] 提供 provisional reservation 与可选 bind primitive，可记录 Session、Mission、run ID、PID 和 worktree。
- [x] 父会话直接写入和受控 child writer 共用同一 workspace lease；R12 foreground 主流程由父进程保管 lease并移除父写工具。
- [x] bound async primitive 使用 package-owned terminal result 与 process-terminal proof 控制自动释放；R12 foreground 主流程使用匹配 run ID/digest 的权威 terminal response。
- [x] 未知 process proof 保留 lease 并进入 `BLOCKED`。
- [x] 强制释放显示 owner/workspace/风险，并服从 M3 TUI 主体门禁。

强制测试：

- [x] 两个进程并发获取同一 lease，只有一个成功。
- [x] lease 阻止其他受控进程；foreground child 活跃时策略和 tool-batch barrier 阻止父会话写入。
- [x] 两个独立 managed worktree 使用不同 lease key。
- [x] cwd、Git root 和 worktree 的符号链接别名归一到同一 key。
- [x] PID 复用、死进程、缺失 proof、损坏 owner record 和崩溃恢复均失败关闭。
- [x] force-release 的 TUI/RPC/注入来源矩阵与 M3 一致。

完成条件：跨进程竞争测试和异常恢复测试证明当前流程只有一个 writer。

验证证据：

- `npm run typecheck`：通过。
- `npm test`：39/39 unit tests 通过。
- `npm run test:integration`：15/15 通过，包含两个独立 Node 进程同时抢占同一 workspace lease。
- macOS `/var` -> `/private/var` realpath 差异已纳入 canonical path 测试。
- child lease 只接受匹配 run ID 的 observed process-terminal proof；未知 proof 不自动释放。

### M6 Candidate Digest 与 Evidence 失效

目标：让测试、review 和最终工作区对应同一个可复算候选。

- [x] 生成稳定 canonical manifest，并计算 SHA-256 candidate digest。
- [x] 纳入 canonical cwd/worktree、HEAD/unborn、index、tracked diff、相关 untracked、submodule 和批准记录。
- [x] 明确记录 ignored、生成、大文件和二进制排除项。
- [x] 项目进度制品仅作为显式 control-plane exclusion，不授予权限。
- [x] gate/reviewer 启动前后复算 candidate，变化后使旧 evidence 失效。
- [x] 交付前现场读取项目进度制品摘要，与 candidate evidence 一起检查。

强制测试：

- [x] 相同内容与不同文件枚举顺序得到相同 digest。
- [x] HEAD、staged、tracked、相关 untracked 或批准记录任一变化都会改变 digest。
- [x] 仅项目进度制品变化不伪造代码 candidate，但最终现场检查能发现。
- [x] symlink、submodule、unborn repo、二进制、大文件和无法读取文件均有明确失败或排除证据。
- [x] review 期间外部写入会使结果失效。

完成条件：fixture Git 仓库覆盖候选构造和 evidence 失效路径。

验证证据：

- `npm run typecheck`：通过。
- `npm test`：49/49 unit tests 通过。
- `npm run test:integration`：candidate freeze、validation、review 前后复算和 stale evidence 阻断通过。

### M7 固定验证入口与自适应编排策略

目标：执行已批准验证并让父会话根据任务结构选择最小有效编排。

- [x] 提供固定验证入口，调用者不能直接构造原始 `SubagentParams`。
- [x] Extension 通过 Pi 公开 `pi.exec` 顺序执行已批准命令；R13 移除无法可靠取回 terminal ledger 的 async validation child。
- [x] 绑定 candidate digest、命令、timeout、cwd、环境摘要和结果。
- [x] 限制验证命令来自已批准 plan contract；缺失或未知命令进入 `BLOCKED`。
- [x] 实现复杂度、风险和不确定性路由纯函数，不实现封闭评分器；M9 Skill 使用该契约。
- [x] 小型低风险走单强 Agent；中大型走 worker + fresh reviewer；高风险增加 oracle 和多角度 review。
- [x] review 使用首轮集中发现、accepted P0/P1 可验证关闭义务、批量返工和一次 closure review；同一不变量再次失败时升级设计，不继续堆叠补丁。

强制测试：

- [x] caller 无法借固定入口注入 output、worktree、management 或任意 host command。
- [x] 固定入口参数为空，调用者不能注入命令；命令 ID、文本和 timeout 只来自批准 plan contract。
- [x] 非零退出、timeout、执行异常、中断、candidate 变化和 terminal checkpoint 失败都会阻止交付。
- [x] 三类自适应路径选择符合技术方案，风险优先于代码量。

完成条件：固定验证集成测试和编排决策表测试通过。

验证证据：

- `npm run typecheck`：通过。
- `npm test`：49/49 unit tests 通过。
- `npm run test:integration`：17/17 通过。
- R13 当前实现由一个前台工具调用顺序执行；每条命令显示进度并保存有界结果，Session 恢复遇到 pending checkpoint 时失败关闭，不重放未知命令。

### M8 Writer-free Progress-sync

目标：在不实现通用计划系统、不产生第二 writer 的前提下，按项目规则同步进度。

- [x] 只在无活跃 writer且 terminal/process proof 可证明时进入临时 `progress-sync` operation。
- [x] 独占获取 canonical workspace lease 后、项目写入前保存基础状态和 operation checkpoint；初始 checkpoint 失败且清理可证明时恢复调用前状态。
- [x] 从已批准 plan contract 解析 exact canonical 进度目标和固定 argv 检查，不定义 Package 计划格式。
- [x] 只通过固定 progress-sync 工具修改目标路径；原始 Bash、原始 `subagent` 和其他路径保持关闭。
- [x] 无论成功、失败或取消，先恢复基础策略，再释放 lease；恢复失败保留 lease。
- [x] Session checkpoint 与项目进度不做原子双写；冲突时进入 `BLOCKED`，不自动覆盖。

强制安全测试：

- [x] `..`、绝对路径、Git root 外路径、目录目标和不存在父目录按策略拒绝。
- [x] 目标文件、父目录或中间组件的 symlink 逃逸全部拒绝。
- [x] canonicalize 后到校验/写入之间替换 symlink 的 TOCTOU 场景失败关闭。
- [x] 非 exact approved target 被固定工具拒绝。
- [x] 任意 Bash、命令拼接、shell 重定向和非固定检查命令拒绝；检查只接受批准 argv。
- [x] 项目文件写成功但 Session checkpoint 失败时进入 `BLOCKED`，不回滚猜测。
- [x] checkpoint 成功但项目写失败时记录阻塞断点。
- [x] 策略恢复失败时保留 lease；lease 释放失败时保持阻塞并显示 owner。
- [x] abort/异常和策略恢复清理顺序已覆盖；reload/Session 切换的完整进程 E2E 归 M10。

完成条件：路径逃逸、符号链接、异常清理和双写冲突矩阵全部通过。

验证证据：

- `npm run typecheck`：通过。
- `npm test`：55/55 unit tests 通过。
- `npm run test:integration`：20/20 通过。
- path traversal、symlink parent/target、symlink swap TOCTOU、检查失败和策略恢复连续失败均有自动化证据。

### M9 Prompt、Skill 与中文用户体验

目标：提供简洁入口，把完整规则集中在一个 Skill，并保持中文可读性。

- [x] 编写 `/delivery-shape`、`/delivery-plan`、`/delivery-run` Prompt Templates。
- [x] 编写 `adaptive-delivery` Skill，包含阶段、角色契约、路由、停止条件、验证和交付格式。
- [x] Prompt 只引用 Skill 和当前目标，不复制完整状态机。
- [x] TUI、widget、通知、`/delivery-status` 使用中文主标签 + 英文状态枚举。
- [x] 角色显示使用中文名称 + 英文 Agent 标识。
- [x] 模型配置只提供用户级示例，不硬编码 Provider/模型。

强制测试：

- [x] Pi resource discovery 能发现三个 Prompt、一个 Skill 和一个 Extension。
- [x] 中文状态/角色映射完整且英文内部标识稳定。
- [x] Prompt 不包含未授权实现指令，shape/plan 阶段保持只读。
- [x] Skill 与 Extension 的状态和命令名称一致。

完成条件：离线资源发现和快照测试通过，无需真实模型。

验证证据：

- `npm run typecheck`：通过。
- `npm test`：58/58 unit tests 通过。
- `npm run test:integration`：21/21 通过。
- `npm run test:e2e`：2/2 真实 Pi RPC 测试通过；一个验证资源发现，一个使用本地 fake provider 完成 Prompt expansion -> `delivery_begin` tool -> follow-up -> agent_settled。
- E2E 设置 `PI_OFFLINE=1`、隔离 `PI_CODING_AGENT_DIR`，未读取凭证或调用真实模型。

### M10 隔离集成/E2E 与恢复矩阵

目标：在隔离环境验证完整生命周期，而不是只证明纯函数。

- [x] 使用临时 `PI_CODING_AGENT_DIR`、临时 Git 仓库和 fake provider 启动真实 Pi 进程。
- [x] 验证标准两次批准流程和小型合并批准流程；TUI 对话由来源矩阵集成测试覆盖。
- [x] 验证中大型 worker/reviewer 流程和高风险 oracle 路由决策；真实 Provider 调用保持禁用。
- [x] 验证 Session resume、`/tree`、fork、reload、async completion 丢失和 run resume 断点。
- [x] 验证 `BLOCKED -> /delivery-resume -> resumeState`。
- [x] 验证并发 writer、未知 process proof、stale evidence 和外部工作区变化。
- [x] 验证 progress-sync 后恢复基础策略、释放 lease 和现场进度摘要检查。

强制来源/异常矩阵：

- [x] TUI 实际用户确认能够放宽权限（fake TUI context）；真实 TUI 视觉/交互手感留给用户验收。
- [x] TUI 取消、print、JSON、RPC、Extension 注入和 child 请求不能在无实际用户确认时放宽权限。
- [x] tool_call、Session 写入、项目写入、检查命令、策略恢复和 lease 释放的关键异常点失败关闭。
- [x] E2E 子进程正常退出；受控测试释放活跃 lease，临时状态只位于 OS temp。

完成条件：默认 E2E 全程禁网、无真实 Provider 调用，完整恢复与权限矩阵通过。

验证证据：

- `npm run typecheck && npm run test:all`：通过。
- unit：58/58；integration：23/23；real Pi RPC E2E：2/2。
- 真实 RPC E2E 验证资源发现、无模型 command、fake provider Prompt expansion、`delivery_begin` tool 和 agent_settled。
- RPC 调用批准命令不产生 confirm 请求且不放宽状态。

### M11 安装、文档、打包和最终验收

目标：证明 Package 可安装、可审计、可恢复，并准备用户验收。

- [x] 完成 README：安装前置、本地路径/Git 安装、project trust、命令、角色、状态、模型配置和安全边界；npm 发布仍属于稳定后的独立动作。
- [x] 记录 bundled `pi-subagents` 同时作为公开 API 和唯一 runtime owner 的边界。
- [x] 提供故障恢复、lease 强制释放、blocked resume 和卸载说明。
- [x] 使用本地路径安装到隔离 Pi agent dir，验证资源加载。
- [x] 使用 `npm pack --dry-run` 检查 tarball，不包含测试临时物、Session或凭证；manifest 仅额外加载 bundled `pi-subagents` Extension。
- [x] 运行 runtime dependency audit，不自动修复或升级超出计划的依赖。
- [x] 最终 fresh review 检查正确性、权限边界、测试充分性和不必要复杂度；首轮全面 review 发现项经 R28 两次集中返工后，最终限定复审无剩余 finding，merge verdict 为 `OK`。

完整验证：

```bash
npm run typecheck
npm run test:unit
npm run test:integration
npm run test:e2e
npm pack --dry-run
npm audit --omit=dev
```

完成条件：第 9 节验收矩阵全部通过，最终报告明确 commit、push、PR、npm publish 和部署的实际状态。

当前验证证据：

- `npm run typecheck`：当前工作树通过。
- `npm run test:all`：当前工作树通过；unit 127/127、integration 90/90、real Pi RPC E2E 9/9。
- `npm pack --dry-run --json`：当前工作树通过，tarball 2,338,628 bytes，解包 10,084,203 bytes，共 1,965 个条目；Pi 宿主包与 `@types` 条目为 0。
- `npm audit --omit=dev --offline`：当前离线审计缓存中 0 vulnerabilities。
- 当前 manifest 只加载本 Package bundled `pi-subagents 0.64.0` 作为 runtime owner；R15 前独立安装 `pi-subagents@0.62.0` 的双重安装证据仅作为历史记录，不再代表当前安装方式。
- 默认测试使用 fake provider 和 `PI_OFFLINE=1`，未调用真实模型或读取凭证。
- R13 已用 Pi 公开 `pi.exec` 替换早期 `reviewer + acceptance.verify` 验证路径；`pi-subagents` 继续承担受控 worker 和只读审查。
- 自动测试平台：macOS；Linux 待 CI，Windows 未验证。
- R20、R21 的限定范围 closure review 已通过；M11 面向当前完整工作树的全面 fresh review 已由 R28 收口，最终限定复审无剩余 finding，merge verdict 为 `OK`。

### R1 Fresh Review 返工

- [x] P0：progress exclusion 只允许现存 regular file，拒绝目录和任意 symlink component，并保持 lexical exclusion。
- [x] P0：writer lease 按 canonical Git worktree root 归一；acquire/bind/release/force-release 在同一跨进程锁下按 leaseId 条件更新。
- [x] P0：增加 tool_call/执行中写工具守卫；candidate submit 与降权形成屏障，lease 释放前证明写工具终止；策略收紧失败阻止状态提交/导航。
- [x] P0：readonly/validation ceiling 设置 `denyExtensions:true`，校验 Extension/MCP audit；terminal response 必须返回且匹配 launchContractDigest。
- [x] P1：集中 authorization bundle 校验；solution+plan/combined、planContract、cwd/Git root、candidate、lease 在 approve/resume/validate 前闭环。
- [x] P1：progress-sync 打开文件后在 truncate 前比较 target inode/device，并重新证明父路径 identity，覆盖 parent symlink TOCTOU。
- [x] P1：增加返工授权、结构化 review/gate evidence、finalize 和 pending validation 恢复对账。
- [x] P2：`/delivery-status` 显示 resumeState、writer owner、candidate/evidence 有效性和 progress-sync 状态；未知明确标记不可证明。

返工强制回归：root/subdir lease、owner replacement race、parallel sibling tools、directory/symlink exclusion、ambient Extension denial、approval bundle、parent symlink swap、rework/finalize/pending recovery、status evidence。

R1 验证证据：

- `npm run typecheck && npm run test:all`：通过。
- unit：63/63；integration：30/30；real Pi RPC E2E：2/2。
- `npm pack --dry-run`：通过；`npm audit --omit=dev`：0 vulnerabilities。
- 新增定向回归覆盖首轮 findings 列出的 root/subdir lease、owner replacement、parallel sibling、directory/symlink exclusion、ambient Extension denial、missing digest、authorization bundle、parent TOCTOU、rework/finalize/pending status 和 status fields。

R1 定向复审结果：

- verdict：`BLOCK`。
- 复审确认部分原问题已经关闭，但仍发现 lexical Git pathspec、force-release operation lock、降权 sibling barrier、BLOCKED authorization、真实 status DTO 恢复和 evidence/finalize 失败关闭等缺口。
- 用户暂停继续逐项补丁，先确认采用“集中发现 -> 可验证关闭义务 -> 批量返工 -> closure review；同类问题重复时升级设计”的收敛方式。

### R2 大白话效果对齐与审查收敛

目标：让全局安装后的 Package 先帮助用户看懂最终效果并确认 AI 理解正确，同时让 review/fix 通过确定性关闭证据收敛，而不是依赖重复完整审查或简单次数上限。

- [x] 技术方案增加面向用户的第一层表达：需求复述、最终效果、关键场景、非目标、验收示例和待决事项。
- [x] 明确实施计划的每个里程碑必须映射到已批准效果或验收项；效果、范围、架构或验收变化必须 `/delivery-revise`。
- [x] Skill 改为首轮集中发现、accepted P0/P1 可验证关闭义务、批量返工和一次 closure review。
- [x] 明确同一复现或不变量再次失败时返回 `SHAPING`/`PLANNING` 重做机制，不继续局部补丁。
- [x] 更新并运行资源单测，确认 Package 资源持续包含上述规则。

当前状态：已完成并通过资源测试；不包含定向复审剩余运行时代码问题的修复。

验证证据：

- `node --import tsx --test test/unit/resources.test.ts`：3/3 通过。
- 资源断言覆盖“大白话最终效果”“可验证关闭义务”“一次 closure review”“同一最小复现仍失败时升级设计”，并拒绝旧的“默认最多三轮”规则。

### R3 收敛式机制返工

目标：按 exact path、operation serialization、explicit authorization 和 typed evidence 四个根因机制，一次性关闭 R1 定向复审中仍未收敛的 P0/P1 及直接状态证据问题。

- [x] exact path：candidate exclusion 使用 Git literal pathspec；特殊文件名只能排除自身。
- [x] operation serialization：submit、invalidate、validate、review、rework、finalize、progress-sync 与 edit/write 使用统一 tool-batch barrier。
- [x] writer lease：force-release 服从 operation lock；live、未知或 stale lock 不会被无条件破坏，无法证明时失败关闭。
- [x] explicit authorization：plan 派生操作显式要求 implementation bundle；撤销批准时清除 planContract、candidate 和 evidence。
- [x] typed evidence：R13 后 validation terminal 保存 candidate、批次 ID 和逐命令状态；pending checkpoint 恢复时失败关闭，late async completion 无权改写结果。
- [x] review/finalize：review verdict 必须唯一；状态提交失败不得返回成功；finalize 在 progress snapshot 后再次确认 candidate。
- [x] `/delivery-status`：显示 candidate、validation 和 review evidence 的 current/stale/unproven 状态。
- [x] 先运行对应最小回归，再运行 typecheck 和完整自动化测试。

该阶段记录：自动化完成，尚无单独 closure review 完成证据；统一纳入 M11 面向当前完整 HEAD 的全面 fresh review。

验证证据：

- `npm run typecheck`：通过。
- `npm run test:all`：通过；unit 66/66、integration 35/35、real Pi RPC E2E 2/2。
- `npm pack --dry-run`：通过，tarball 约 2.2 MB。
- 新增回归覆盖 Git pathspec magic、live operation lock、invalidate/edit 双顺序、无批准 BLOCKED progress、validation 恢复失败关闭、cancel 后 late completion、重复 review verdict、finalize checkpoint 失败和 status stale evidence。
- 本轮未修改依赖；沿用 R1 `npm audit --omit=dev` 的 0 vulnerabilities 证据，未重复联网 audit。

### R4 需求级规划文档同步

目标：让技术方案和实施计划在源码实现前落为目标项目中的需求级 Markdown，同时保留 Session entry 作为不可变批准主体，并服从用户、项目、全局和 Package 默认规则的优先级。

- [x] plan contract 增加需求短名称、solution/plan 路径和选择来源；实施计划路径必须同时是 progress target。
- [x] solution 使用独立 documents v1 契约冻结路径；plan v2 必须逐字段匹配，路径不能在计划阶段静默改变。
- [x] Prompt/Skill 使用明确内容标记，标准和小型合并路径都能提取两份独立 Markdown。
- [x] 新增 create-only planning document writer，拒绝覆盖、绝对路径、遍历、symlink、非 Markdown、同路径和目标竞态。
- [x] `/delivery-approve-plan` 在 TUI 中展示需求名与路径，先获取 lease 并同步两份文档，成功后才进入 `IMPLEMENTING`。
- [x] runtime state 保存规划文档提案、路径、初始摘要与同步时间；恢复和所有 implementation capability 重新证明批准内容及 regular-file 路径。
- [x] candidate 纳入技术方案文档，并把实施计划作为显式 progress exclusion；progress-sync 继续只更新批准的计划路径。
- [x] revise/invalidate 清理规划文档授权引用但不猜测删除项目文件；失败时保留现场并进入 `BLOCKED`。
- [x] 增加 parser、路径、create-only、标准/combined approval、非 TUI、恢复、碰撞清理、状态和资源测试。
- [x] 运行 typecheck、完整 unit/integration/E2E、pack dry-run 和依赖审计边界检查。

该阶段记录：自动化完成，尚无单独 closure review 完成证据；统一纳入 M11 面向当前完整 HEAD 的全面 fresh review。本轮不实现 existing-file merge、远程 Issue/TODO 写入、项目文档格式解析或第二套进度系统。

验证证据：

- `npm run typecheck`：通过。
- `npm run test:all`：通过；unit 71/71、integration 42/42、real Pi RPC E2E 2/2。
- `npm pack --dry-run`：通过，tarball 约 2.2 MB，包含新增 `planning-documents.ts`。
- `git diff --check`：通过。
- 标准和 combined TUI fake context 均证明两份文档先创建、再开放 edit/write；RPC/JSON/print/TUI 取消均零文档写入。
- 路径回归覆盖 existing target、第二目标碰撞、遍历、symlink parent、校验后 parent swap、缺失文档恢复和 approval/evidence 摘要错配。
- 依赖未变化；沿用最近一次 `npm audit --omit=dev` 的 0 vulnerabilities 证据，未为本轮重复联网。
- 兼容性：plan contract 从 v1 升为 v2；旧 plan 失败关闭并要求重新生成、重新批准，不提供迁移回退。

### R5 批准后的 TUI 自动续跑

目标：消除批准后只有底部状态、输入框空白且必须猜测下一条命令的停顿；所有授权仍由用户手动确认，后续不需要新决策的 plan/run 自动继续并显示在对话区。

- [x] solution approval 成功提交后显示可见状态消息并自动展开 `/delivery-plan`。
- [x] plan approval、规划文档同步和 `IMPLEMENTING` 策略提交全部成功后显示文档路径并自动展开 `/delivery-run`。
- [x] `/delivery-plan`、`/delivery-run` 保留为自动发送失败后的手工恢复入口。
- [x] 非 TUI、用户取消、文档同步失败、checkpoint 失败和策略失败均不得触发自动续跑。
- [x] 增加标准/combined、取消、失败与可见消息测试，更新 README、Skill 和资源断言。
- [x] 运行 typecheck、完整 unit/integration/E2E、pack dry-run 和 `git diff --check`。

该阶段记录：自动化完成，尚无单独 closure review 完成证据；统一纳入 M11 面向当前完整 HEAD 的全面 fresh review。不增加自动批准，不改变 BLOCKED、resume、force-release、发布或生产授权语义。

验证证据：

- `npm run typecheck && npm run test:all`：通过；unit 71/71、integration 44/44、real Pi RPC E2E 2/2。
- `npm pack --dry-run`：通过，tarball 约 2.2 MB。
- `git diff --check`：通过。
- solution approval 测试证明可见 chat message 和 `/delivery-plan` 自动展开；standard/combined plan approval 测试证明文档同步及策略提交后才自动展开 `/delivery-run`。
- TUI 取消、RPC/JSON/print、文档碰撞、IMPLEMENTING 策略提交失败均证明零自动续跑；`sendUserMessage` 注入失败保留批准状态并显示手工恢复命令。
- 依赖未变化，未重复联网 audit。

### R6 隐藏机器协议并输出干净文档

目标：用户只看到大白话方案、路径和执行进度，不需要阅读 HTML marker 或 JSON contract；内部授权、恢复和解析证据保持原样。

- [x] 新增纯显示转换，隐藏 solution/plan marker、documents v1 fence 和 plan v2 fence，并支持流式未闭合 block。
- [x] 注册 Pi display-only Markdown transformer，只处理包含 Adaptive Delivery 协议的 assistant Markdown。
- [x] planning-document extraction 在落盘前移除内部 contract，技术方案和实施计划文件保持人类可读。
- [x] approval digest、Session 原始消息、plan parser 和 authorization 继续使用未修改的原始内容。
- [x] 增加 transformer 注册、流式/最终显示、干净落盘和现有审批恢复回归。
- [x] 运行 typecheck、完整 unit/integration/E2E、pack dry-run 和 `git diff --check`。

该阶段记录：自动化完成，尚无单独 closure review 完成证据；统一纳入 M11 面向当前完整 HEAD 的全面 fresh review。不改协议字段、plan contract 版本、审批语义或项目文档路径。

验证证据：

- `npm run typecheck && npm run test:all`：通过；unit 72/72、integration 45/45、real Pi RPC E2E 2/2。
- `npm pack --dry-run`：通过，tarball 约 2.2 MB。
- `git diff --check`：通过。
- 纯函数测试覆盖完整 contract、流式未闭合 contract 和普通 Markdown 零变化；真实 Extension 注册测试证明只转换 assistant 显示。
- 标准/combined approval 和恢复矩阵继续通过，证明 display transformer 未修改原始 Session、approval digest 或 plan parser。
- planning-document 集成断言确认落盘 solution/plan 不含 marker、documents fence 或 plan fence。
- 依赖未变化，未重复联网 audit。

### R7 README 用户路径重写

目标：让第一次使用 Package 的普通 Pi 用户先看到最终效果、项目级安装和最短交互路径，再按需查看恢复、安全和维护者信息。

- [x] README 首屏用大白话说明用户需要做什么、Package 自动完成什么。
- [x] 项目级安装作为推荐入口，区分全局安装和本地 Package 开发路径。
- [x] 标准/小型任务只展示必要批准命令，不暴露内部 marker 或 JSON contract。
- [x] 增加“不应批准的情况”、BLOCKED、旧 Session、自动续跑失败和 force-release 恢复说明。
- [x] 将状态、角色和 contract 细节压缩到后半部分维护者参考。
- [x] 更新资源断言并运行 typecheck、unit resource test、pack dry-run 和 `git diff --check`。

当前状态：已完成；不改变运行时行为、协议或安装格式。

验证证据：

- README 按“最终效果 -> 安装 -> 第一次使用 -> 两次批准 -> 文档 -> 自动执行 -> 状态/恢复 -> 安全/维护者”顺序重写。
- `npm run typecheck`：通过。
- `npm run test:unit`：73/73 通过；README 用户路径资源断言通过。
- `npm pack --dry-run`：通过，tarball 约 2.2 MB。
- `git diff --check`：通过。
- 运行时代码自 R6 完整门禁后未变化；本轮未修改依赖或调用外部 Provider。

### R8 TUI 中文展示层

目标：AI/runtime 继续使用稳定英文协议和诊断，用户在 TUI 中看到中文状态、断点、下一步、证据和恢复信息；旧 Session 无需迁移即可中文显示。

- [x] 新增纯 presentation 映射，覆盖 evidence validity、validation、review verdict、writer kind、文档来源和常用 runtime/checkpoint 文案。
- [x] `/delivery-status` 的字段名、空值、同步状态、断点、下一步和阻塞原因统一中文，保留路径、digest、run ID 与英文状态枚举。
- [x] solution/plan approval 与 force-release 确认框使用中文字段和来源名称。
- [x] Package 控制的 notify/recovery 主提示使用中文；不可控底层错误只作为诊断详情保留。
- [x] 旧英文 checkpoint 显示映射、当前/过期/不可证明矩阵和完整状态输出具有单元与集成测试。
- [x] 运行 typecheck、完整 unit/integration/E2E、pack dry-run 和 `git diff --check`。

当前状态：自动化完成，等待真实 TUI 验收；不修改内部枚举、Session schema、plan contract、approval digest 或工具协议。

验证证据：

- `npm run typecheck && npm run test:all`：通过；unit 75/75、integration 46/46、real Pi RPC E2E 2/2。
- `npm pack --dry-run`：通过，tarball 约 2.2 MB，包含新增 `presentation.ts`。
- `git diff --check`：通过。
- presentation 单测覆盖 current/stale/unproven、pending/passed/failed、review verdict、writer kind、文档来源、旧 checkpoint、动态 digest 和未知诊断 fallback。
- lifecycle 集成断言覆盖全中文 `/delivery-status`、旧英文断点即时翻译、旧 `PLANNING` Session 语义修正、批准/恢复错误和 force-release 中文字段；内部状态与既有门禁矩阵继续通过。
- 依赖未变化，未重复联网 audit。

### R9 阶段工具连续性与可恢复阻塞

目标：修复真实项目首次运行中出现的停顿，确保 Pi reload 不会永久丢失源码写工具，父会话能看懂工具按阶段开放，并且临时运行时阻塞不会销毁已经批准的方案、计划和规划文档。

- [x] PolicyController 在同一 Pi 进程内保存原始 active tool 基线，reload 后恢复内置写工具，同时只合并当前版本实际注册的 Delivery 工具。
- [x] writer/validation 策略增加当前阶段必需工具后置检查；缺失或 Pi 未实际激活时恢复只读并明确阻塞。
- [x] 新增始终只读的 `delivery_runtime_status`，返回当前阶段、active tools、writer/candidate/validation/review 摘要和下一步说明。
- [x] `/delivery-run` Prompt 与 Skill 明确工具按状态开放；后续阶段工具提前不可见不是故障。
- [x] `delivery_invalidate(target=BLOCKED)` 改为保留批准、规划文档、plan contract、candidate 和 evidence，只释放可证明的父 writer lease并保存 `resumeState`。
- [x] R13 后 pending validation 在 reload 时按未知宿主命令终态失败关闭；已完成 validation evidence 在临时 `BLOCKED` 中保留。
- [x] 增加同进程 narrowed-baseline reload、阶段工具切换、当前阶段工具缺失、保留式阻塞恢复和 validation evidence 保留回归。
- [x] 运行完整 unit/integration/real Pi RPC E2E、pack dry-run 和 `git diff --check`。

该阶段记录：完整自动化验证完成，尚无单独 closure review 完成证据；统一纳入 M11 面向当前完整 HEAD 的全面 fresh review。真实 TUI 验收仍待执行；不修改 Session schema、plan contract、批准主体、candidate 算法或发布边界。

验证证据：

- `npm run typecheck`：通过。
- 定向 unit：12/12 通过，覆盖 policy baseline、必需工具失败关闭、presentation 和 Prompt/Skill 资源约束。
- `npm run test:all`：通过；unit 77/77、integration 48/48、real Pi RPC E2E 2/2。
- 新增生命周期场景把 fake Pi active-tools 行为对齐真实 Extension 注册语义，并覆盖 narrowed-baseline reload、阶段工具切换、保留式阻塞恢复和阻塞期间 validation completion。
- `npm pack --dry-run`：通过，tarball 约 2.2 MB。
- `git diff --check`：通过。
- 依赖未变化；沿用最近一次 `npm audit --omit=dev` 的 0 vulnerabilities 证据，本轮未重复联网 audit，也未调用外部 Provider。

### R10 Resume 后自动续跑

目标：消除用户已在 TUI 确认恢复、状态也已回到 `IMPLEMENTING`，但界面只显示“开发中”且输入框空白的停顿。

- [x] `/delivery-resume` 仅在授权校验、TUI 确认、必要 writer lease、checkpoint 和目标策略全部成功后触发自动续跑。
- [x] 恢复到 `PLANNING` 自动展开 `/delivery-plan`；恢复到 `IMPLEMENTING`、`REWORKING` 或 `VALIDATING` 自动展开 `/delivery-run`。
- [x] `SHAPING` 与方案/计划待批准状态不自动发送或批准，继续等待当前阶段所需用户动作。
- [x] 非 TUI、用户取消、lease/策略/checkpoint 失败时零自动续跑。
- [x] 自动发送失败时保留已经恢复的状态和 lease，显示对应手工命令，不回退批准或伪造执行。
- [x] 更新 README、Skill 和技术方案，明确底部状态不是执行活动，恢复成功后的实际 plan/run 会在对话区可见。
- [x] 运行完整 unit/integration/real Pi RPC E2E、pack dry-run 和 `git diff --check`。

该阶段记录：完整自动化验证完成，尚无单独 closure review 完成证据；统一纳入 M11 面向当前完整 HEAD 的全面 fresh review。真实 TUI 验收仍待执行；不修改 Session schema、批准主体、resume 的 TUI 确认要求或发布边界。

验证证据：

- `npm run typecheck`：通过。
- `npm run test:all`：通过；unit 77/77、integration 50/50、real Pi RPC E2E 2/2。
- 覆盖 PLANNING、IMPLEMENTING、VALIDATING 自动路由，TUI 取消、非 TUI、策略提交失败和自动发送失败。
- `npm pack --dry-run`：通过，tarball 约 2.2 MB。
- `git diff --check`：通过。
- 亚马逊真实 TUI 已人工复现原停顿，并通过手工 `/delivery-run` 验证其余实现流程可继续；修复代码尚未 reload 到该活动 writer 会话。
- 依赖未变化；沿用最近一次 `npm audit --omit=dev` 的 0 vulnerabilities 证据，本轮未重复联网 audit。

### R11 模型可用性预检与瞬时失败恢复

目标：避免单个 reviewer 模型一次瞬时 502 被默认排除 24 小时后，流程在代码实现完成才发现无法进行 fresh review。R13 后固定命令验证不再依赖 reviewer 模型。

- [x] 用户级 reviewer 配置保留 Sol 主模型并增加 Terra、Luna fallback，不修改目标项目 candidate。
- [x] 用户级 pi-subagents `modelExclusions.defaultTtlMs` 设置为 5 分钟；保留短冷却但不因一次 502 停用 24 小时。
- [x] plan/combined 批准对话前通过公开 preflight 检查 builtin reviewer、只读 capability 和至少一个 model candidate；失败时零批准、零文档、零 lease。
- [x] runtime state 增加可选 `validationFailureKind=candidate|infrastructure`；R13 进一步保存逐命令 terminal evidence。
- [x] R13 后 reviewer 模型、502 和调度失败只影响 fresh review；固定命令由 Delivery Gate 直接执行。
- [x] infrastructure/unknown failure 禁止 `delivery_begin_rework`，但允许对未变化 candidate 再次调用 `delivery_validate`。
- [x] 更新 README、Skill、技术方案和中文状态；不降低 `denyExtensions:true`，不硬编码 Package 模型。
- [x] 运行完整 unit/integration/real Pi RPC E2E、pack dry-run 和 `git diff --check`。

该阶段记录：完整自动化验证完成，尚无单独 closure review 完成证据；统一纳入 M11 面向当前完整 HEAD 的全面 fresh review。真实 TUI 验收仍待执行。

当前验证证据：

- `npm run typecheck`：通过。
- 定向 unit：18/18 通过。
- `npm run test:all`：通过；unit 78/78、integration 52/52、real Pi RPC E2E 2/2。
- `npm pack --dry-run`：通过，tarball 约 2.2 MB。
- `git diff --check`：通过。
- 真实故障证据：reviewer 映射为 `openai/gpt-5.6-sol` 且无 fallback；pi-subagents exclusion 记录一次 502 并按默认 24 小时排除，曾导致旧 validation child 在任何命令运行前 `unavailable`。R13 已删除该 validation child，fallback 继续用于 worker/reviewer。
- 依赖未变化；沿用最近一次 `npm audit --omit=dev` 的 0 vulnerabilities 证据，本轮未重复联网 audit。

### R12 自适应唯一 Worker 主流程

目标：让父 Pi 在 standard/high-risk 任务中只承担方案、计划、授权消费、编排和裁决，由一个受控 worker 修改当前工作区；只有 `single` 路径允许父 Pi 直接开发。

- [x] 使用现有 `selectDeliveryRoute` 决定 writer：`single -> parent`，`standard/high-risk -> worker`，不增加新评分器或配置项。
- [x] worker 路径从父工具策略中移除 `edit`、`write`、`delivery_submit_candidate`，只开放 `delivery_delegate_worker`。
- [x] worker 使用 builtin、fresh、foreground structured delegation；preflight 固定 tools、禁用 ambient Extensions/MCP、拒绝 shadow/external runner，并绑定 terminal `launchContractDigest`。
- [x] 父进程作为 foreground lease custodian：启动前持有 canonical workspace lease，worker 活跃时父 Pi 无下一回合和 sibling 写入；terminal proof 不完整时保留 lease 并 `BLOCKED`。
- [x] worker 成功终止后由 Extension 直接冻结 candidate、释放 lease并进入 `VALIDATING`；worker 失败且 terminal proof 完整时释放 lease并可恢复到原 writer 状态。
- [x] standard/high-risk 的批准返工继续走单 worker；`single` 路径保持父 Pi 直接返工。
- [x] 状态输出显示 parent/worker route、worker run 和 terminal 状态；Prompt/Skill 明确父 Pi 不得在 worker 路径代写。
- [x] 增加策略、preflight、并行 barrier、成功/失败/缺失 terminal proof、candidate 绑定、恢复和现有 parent 路径回归。
- [x] 运行完整 unit/integration/real Pi RPC E2E、pack dry-run 和 `git diff --check`。

该阶段记录：完整自动化验证完成，尚无单独 closure review 完成证据；统一纳入 M11 面向当前完整 HEAD 的全面 fresh review。真实 TUI 验收仍待执行。公开 API 在 child 启动前不提供真实 run ID，因此本轮采用 foreground lease custody，不实现存在 bind race 的 async current-worktree worker，也不复制 pi-subagents runtime/worktree 系统。

当前验证证据：

- `npm run typecheck`：通过。
- 相关 unit：42/42 通过。
- `npm run test:integration`：57/57 通过。
- `npm run test:all`：通过；unit 82/82、integration 57/57、real Pi RPC E2E 2/2。
- `npm pack --dry-run`：通过，tarball 约 2.2 MB。
- `git diff --check`：通过。
- 生命周期覆盖 parent/worker 路由、project worker shadow、worker 返工、sibling write barrier、terminal success/failure、缺失 digest 保留 lease、candidate 自动冻结和中文状态。
- 依赖未变化；沿用最近一次 `npm audit --omit=dev` 的 0 vulnerabilities 证据，本轮未重复联网 audit，也未调用外部 Provider。

### R13 验证职责分离与可见进度

目标：修复真实项目中只读 reviewer 在宿主验证命令执行前错误报告“命令未运行”、父 Pi 重复轮询静态状态，以及 child 文本可能覆盖真实命令结果的问题。

- [x] 删除 validation AI child；reviewer 只保留 fresh code review 职责，不接收、不运行、不判断固定命令。
- [x] Delivery Gate 只从已整体校验的批准 plan contract 读取命令，通过 Pi 公开 `pi.exec` 顺序执行；模型调用参数为空。
- [x] `delivery_validate` 在同一个前台工具调用内通过 `onUpdate` 显示当前命令 ID、已完成结果和等待时长；父模型不得定时调用 `delivery_runtime_status`。
- [x] terminal checkpoint 保存 candidate digest、随机批次 ID、全部命令 ID、状态、退出码和耗时；完整 stdout/stderr 只保留在有界工具结果中。
- [x] 非零退出/timeout 与命令无法启动/用户中断分开记录；pending checkpoint 在 reload 时按基础设施失败关闭，不重放未知命令。
- [x] 最终交付重新核对 terminal evidence 与当前 candidate、批次 ID、批准命令顺序和全部 `passed` 状态。
- [x] 命令失败不自动等同于源码缺陷；Prompt、Skill、README 和中文状态要求父会话区分代码、环境和已批准计划问题。
- [x] 增加实际启动 Pi RPC 并通过 `pi.exec` 执行无害固定命令的禁网 E2E，证明无 validation child 和无 Provider 调用。
- [x] 运行完整 unit/integration/real Pi RPC E2E、pack dry-run 和 `git diff --check`。

该阶段记录：完整自动化验证完成，尚无单独 closure review 完成证据；统一纳入 M11 面向当前完整 HEAD 的全面 fresh review。真实 TUI 验收仍待执行。保持现有交付状态机、plan contract、批准主体、candidate digest、writer lease 和发布边界不变；runtime state v1 增加可选 validation terminal evidence。

真实故障证据：

- child `8ad9c642-4101-4e2d-818d-7b141ff38bcf` 因只读工具报告四条命令均未运行，但 acceptance ledger 实际记录了四条 `verifyRuns`。
- 真实 ledger 显示 Python 3.12 检查、73 项 focused tests 和 `git diff --check` 通过；完整后端命令运行约 412 秒后因 `PROVIDER_MOCK_ENABLED=false` 与现有 Mock 测试要求冲突而失败。
- pi-subagents `0.62.0` 的公开 completion/status 投影不稳定提供完整 terminal ledger；Package 不读取内部 artifact，最终采用 Pi 公开 `pi.exec`。

当前验证证据：

- `npm run typecheck`：通过。
- unit：84/84 通过；新增固定命令顺序、timeout、中断、执行异常、输出上限、静默命令心跳、UI 隔离和 validation evidence schema 测试。
- integration：58/58 通过；覆盖一次调用终态、partial UI update、命令失败输出、pending reload 失败关闭、旧通过状态降权、evidence 保留、review 前置门禁和 finalize 复核。
- real Pi RPC E2E：3/3 通过；新增测试真实执行本地固定命令，并确认未产生 subagent completion。
- `npm run typecheck`：通过。
- `npm pack --dry-run`：通过，tarball 约 2.2 MB并包含 `validation.ts`。
- `git diff --check`：通过。
- 依赖未变化；沿用最近一次 `npm audit --omit=dev` 的 0 vulnerabilities 证据，本轮未重复联网 audit，也未调用外部 Provider。

### R14 内置方案追问模式

目标：让 Package 在技术方案阶段按需逐个关闭高影响歧义，同时让极小且明确的需求直接成案，不依赖用户全局 `grilling` Skill，也不增加新的运行时状态或配置面。

- [x] 在现有 `adaptive-delivery` Skill 中定义方案追问触发、提问、记录和停止规则，不新增第二个 Skill。
- [x] 父 Pi 必须先查项目事实；能由代码、文档、配置或测试回答的问题不得转问用户。
- [x] 每次只问一个高影响决策，提供推荐答案、理由和用户可见差异，并允许用户用“按推荐”简短回答。
- [x] 极小、局部、可逆、验收明确且不涉及共享契约/数据/权限/费用的需求默认零追问，直接生成精简方案与计划。
- [x] 全部关键歧义关闭后立即停止；实现偏好、纯代码细节、未来扩展和无证据猜测不得延长问答。
- [x] 区分方案追问与 oracle；批准后出现新决策仍走 `/delivery-revise`。
- [x] 更新 `/delivery-shape`、README、技术方案和资源测试，面向用户统一使用“方案追问”。
- [x] 运行资源单测、完整 unit/integration/real Pi RPC E2E、typecheck、pack dry-run 和 `git diff --check`。
- [x] 修复中文推荐标签的 Markdown 边界：推荐内容固定使用两行纯文本，避免 `**推荐：**正文` 在 Pi TUI 中原样显示星号。

当前状态：完整自动化验证完成，等待真实 TUI 验收。方案追问是父 Pi 的模型行为规则，自动化证明资源内容、发现和既有运行时没有回归；问题质量、停止时机和极小需求零追问仍需人工体验。

当前验证证据：

- `node --import tsx --test test/unit/resources.test.ts`：4/4 通过。
- `npm run typecheck`：通过。
- `npm run test:all`：通过；unit 84/84、integration 58/58、real Pi RPC E2E 3/3。
- `npm pack --dry-run`：通过，tarball 约 2.2 MB并包含更新后的 Prompt、Skill 和 README。
- `git diff --check`：通过。
- 依赖和运行时代码未变化；未调用外部 Provider。
- 推荐格式增量验证：`node --import tsx --test --test-name-pattern='markdown-safe recommendation format' test/unit/resources.test.ts` 1/1、`npm run typecheck` 和相关文件 `git diff --check` 通过；同步 R20 文案断言后完整 resources 测试 5/5 通过。

### R15 技术方案图表与 TUI 自动渲染

目标：让父 Pi 在有助于解释设计时生成标准 Mermaid 图，并让同一源码在 Pi TUI 中自动显示为本地渲染图片；极小需求不为形式强制画图。

- [x] 技术方案生成规则覆盖流程、调用、状态、模块、数据和信任边界；极小任务跳过，中大型按需 1 至 3 张，高风险关键路径必须有适用图。
- [x] 仅保证流程图、时序图、状态图、类图、ER 图和 XY 图；未知类型保留源码并中文降级。
- [x] 使用 `beautiful-mermaid` + `@resvg/resvg-js` 在内存中离线生成 SVG/PNG，不依赖 `mmdc`、Chromium、外部服务或 Provider。
- [x] assistant `message_end` 自动提取完整 Mermaid fence，原始消息落盘后的 `agent_end` 再追加 TUI-only entry；不要求模型重复传参或调用渲染工具。
- [x] TUI Markdown 隐藏图表源码但 raw Session 与落盘文档保持不变；diagram entry 不进入模型上下文，不参与批准或 candidate。
- [x] 支持图片协议时按当前明暗主题显示 PNG；其他终端显示 Unicode 字符图，渲染失败显示中文原因和原始源码。
- [x] 限制单图源码、单消息图数、初始化指令、控制字符和 PNG 大小；不写目标 Git 工作区。
- [x] 增加六类解析/渲染、中文文本、streaming transformer、图片/字符 fallback、entry 生命周期和资源规则测试。
- [x] 更新 README、`/delivery-shape`、Skill、技术方案和依赖说明。
- [x] 运行完整 unit/integration/real Pi RPC E2E、typecheck、pack dry-run、audit 和 `git diff --check`。
- [x] 复杂流程按阶段拆成 2 至 3 张图，避免把完整系统压入一张画布；放宽 TUI 默认图片尺寸并验证文字可读。
- [x] PNG 使用 3 倍高密度栅格、紧凑间距和高对比度配色；保留原尺寸与 2 MB 上限。早期 `240×180`/`320×240` cells 限制已由下一项全宽策略取代。
- [x] 正式 diagram entry 取消低于终端视口的固定宽度，按可用宽度和原始比例显示；长图滚动查看，并保留单图 1000 行显示安全上限。

当前状态：完整自动化验证、隔离安装和当前会话真实 TUI custom-entry 图片协议验收完成；等待目标项目与字符回退验收。Linux、Windows 的原生 PNG 包安装继续属于平台验证缺口。

当前验证证据：

- 新增依赖安装成功；`npm audit --omit=dev` 为 0 vulnerabilities。
- 六类图均生成有界 PNG；中文时序图已人工检查文字、箭头、生命线和深色背景。
- 定向 unit：17/17 通过，覆盖六类解析/PNG、像素采样、明暗主题、字符回退、streaming、输入上限、entry parser、TUI renderer 和规划文档 Mermaid 保留。
- lifecycle 定向 integration：1/1 通过；`message_end` 只暂存，`agent_end` 追加 display-only entry。
- real Pi RPC 定向 E2E：1/1 通过；raw assistant Mermaid 与 diagram custom entry 同时存在。
- `npm run typecheck` 与 `git diff --check`：通过。
- `npm run test:all`：通过；unit 92/92、integration 59/59、real Pi RPC E2E 4/4。
- `npm pack --dry-run`：通过，tarball 约 2.3 MB；未打包 `mmdc`、Chromium 或 Puppeteer。
- `npm audit --omit=dev`：0 vulnerabilities。
- 实际 tarball 隔离安装：普通安装成功生成 PNG；`--omit=optional` 安装成功导入模块并生成 Unicode 字符图。
- 全部测试禁网或仅访问 npm registry 安装依赖；未读取凭证、调用真实模型或外部 Provider。
- 真实预览缺陷：完整流程单图在 TUI 工具卡中被缩至约 600×620，节点文字不可读；不能据此完成 TUI 验收。
- 第一轮可读性修复：复杂流程改为 3 张阶段图；默认图片上限从 100×40 cells 提高到 140×70，展开时为 180×100。三张 PNG 预览后确认仍可继续提高像素清晰度。
- 高清修复证据：改为 3 倍栅格、紧凑间距和更高对比度，默认图片上限提高到 240×180 cells，展开时为 320×240。相同三张图分别由 577×827、718×520、545×1011 提升到 1620×2140、2154×1560、1600×2325，文件仅约 95 KB、110 KB、135 KB；同一界面预览未见文字越界、节点重叠或空白图片。
- 高清修复定向验证：diagram、diagram-view、planning-documents unit 13/13 通过，`npm run typecheck` 通过。
- 高清修复后 `npm run test:all` 再次通过：unit 92/92、integration 59/59、real Pi RPC E2E 4/4；typecheck、pack dry-run 和 `git diff --check` 通过。
- 全宽显示定向验证：diagram 与 diagram-view unit 8/8 通过，`npm run typecheck` 和 `git diff --check` 通过；PNG 生成参数与缓存未改变，等待目标 TUI 按实际终端宽度验收。
- 全宽显示完整回归：unit 92/92、integration 59/59、real Pi RPC E2E 4/4、pack dry-run 与 `git diff --check` 通过；未生成仓库内 tarball。
- 用户在当前真实 Pi TUI 中确认三张正式 Mermaid entry 已全宽显示且文字清晰；该结论不代替目标项目、无图片协议终端或其他平台验收。

### R16 单一 subagent runtime owner 与终态摘要重绑定

目标：消除 bundled API 与独立 runtime owner 的物理副本漂移，让依赖升级只随 Adaptive Delivery 明确发生，并在 child 启动前拒绝零 owner 或多 owner。

- [x] 复现真实 builtin scout 已完成但父端拒绝的故障；确认默认 `output: context.md` 使输出路径绑定真实 run ID，启动前占位摘要不能直接作为终态摘要。
- [x] 确认 Pi Package 使用独立 module root，否决普通 peer 共享方案；保留精确 bundled 依赖并将 `pi-subagents` 升级到 `0.64.0`。
- [x] manifest 先加载 bundled `pi-subagents` Extension 作为唯一 owner，再加载 Delivery Gate；同时暴露同版本 builtin Agents、Prompt 和 Skill，移除独立 Package 后不丢失多 Agent 能力。
- [x] 只读委派启动前继续校验 builtin Agent、fresh context、只读工具、`denyExtensions`、MCP 和 runtime-managed output；终态取得真实 run ID 后重跑同一 preflight 并严格匹配实际摘要。
- [x] RPC ping 短暂收集 owner 响应；零 owner 和多 owner 均在 preflight/delegation 前失败关闭。
- [x] 普通 SHAPING/PLANNING 由父 Pi 直接使用只读工具，不为并行提速启动 scout；高风险 oracle 和必要独立审查仍保留。
- [x] 新增 manifest 单 owner、bundled Skill/Prompt 发现、runtime 版本状态、run ID 输出路径、终态重算、重复 owner 和父 Pi 直接取证的定向测试。
- [x] 完成 `npm run test:all`、pack、audit 与隔离 tarball 安装复验。
- [x] 使用不修改全局配置的项目专用启动器完成亚马逊真实 TUI builtin worker/reviewer canary；第六轮 canary 中普通梳理未启动 scout，唯一 writer 路由、fresh reviewer 和项目完整回归均通过。全局 owner 迁移仍不在当前范围。

当前证据：

- 亚马逊真实故障中 3 个 scout 成功、1 个中断，成功运行费用至少约 `$1.18`，但父端因摘要漂移拒绝全部结果；Git 工作树保持干净。
- 定向 unit 17/17、preflight 临时 Git integration 1/1、typecheck 和 `git diff --check` 通过。
- real Pi RPC manifest owner E2E 1/1 通过；仅安装当前 Package 时只加载一个 bundled owner，来源为本 Package 内 `node_modules/pi-subagents/index.ts`。
- `npm run test:all` 通过：unit 93/93、integration 59/59、real Pi RPC E2E 5/5；typecheck、pack dry-run、`git diff --check` 通过，`npm audit --omit=dev` 为 0 vulnerabilities。
- 实际 tarball 在隔离目录以 production dependencies 安装成功；Pi RPC 只发现一个 `<package>/node_modules/pi-subagents/index.ts` owner，并发现 `delivery-status`、`parallel-review`、`review-loop`、`skill:pi-subagents`、`skill:council-mode`，未调用模型或读取用户凭证。
- 亚马逊项目同时存在全局独立 owner 与 bundled owner；Package 已在 child 前拒绝，没有继续启动模型。项目级过滤不能卸载 project-trust 阶段预加载的全局 Extension，等待用户授权全局迁移。
- 用户明确决定当前只在亚马逊项目测试，不影响全局。初版 `--no-extensions` 后显式加载组件的探针只证明运行组合，已废弃且不作为项目级 Package 验收。
- 上述启动器已改为设置独立 `PI_CODING_AGENT_DIR=~/.pi/agent-amazon-adaptive-test` 后执行普通 `pi`；亚马逊 `.pi/settings.json` 只声明本地 Adaptive Package。离线 RPC 从项目配置自动发现 Package，证明唯一 bundled owner，并发现 `delivery-status`、`delivery-shape`、`parallel-review`、`review-loop`、`skill:adaptive-delivery`、`skill:pi-subagents` 和 `skill:council-mode`。全局默认配置未修改。
- 经用户明确授权，隔离目录以 `0600` 权限复制当前 API Key 认证快照；`pi auth check --provider openai --no-refresh --json` 返回 ready，离线模型目录可解析 `openai/gpt-5.6-sol`。检查未输出凭证，也未发起模型请求。
- 首次真实请求返回 OpenAI 401，证明 `auth check --no-refresh` 只校验本地凭证存在性，不能证明远端有效；隔离目录随后按用户授权以 `0600` 复制全局 `models.json`，模型解析由默认 272K context 切换为当前配置的 1M context。未读取或记录认证/模型配置内容，等待用户重启 TUI 复验真实请求。

### R17 技术方案批准后立即落盘

目标：标准任务在 solution TUI 批准后立即把技术方案写入项目，Pi 退出或切换 Session 时仍能从项目直接找到；实施计划批准前允许基于该文件安全修订，但不提前开放源码写权限。

- [x] 新增独立 `solutionDocument` runtime evidence，绑定需求名、solution/plan 路径、来源、技术方案内容摘要和同步时间。
- [x] solution approval 使用短生命周期 workspace lease，create-only 写入技术方案并立即释放；planPath 同时要求尚不存在，实施源码工具继续关闭。
- [x] plan approval 复验 approved solution entry、路径契约、regular file/symlink 边界和内容摘要，只 create-only 创建实施计划，再形成完整 `planningDocuments`。
- [x] `/delivery-revise` 在 plan 批准前保留文档契约和 solution evidence；重新批准只更新仍与旧摘要一致的同一路径 regular file。
- [x] 人工修改、parent/target identity 漂移、symlink、摘要不符、lease 获取/释放或 Session checkpoint 失败时拒绝覆盖并保持只读。
- [x] combined approval 保持一次创建两份文档；当时实施计划已落盘后的跨阶段重规划不自动覆盖旧计划，该限制已由 R23 的 evidence-bound 同路径修订取代。
- [x] `/delivery-status` 和 runtime status 区分“技术方案已同步、实施计划待同步”与“两份已同步”。
- [x] 更新 README、Prompt、Skill 和技术方案，说明批准、落盘、修订与恢复顺序。
- [x] 运行完整 unit/integration/real Pi RPC E2E、typecheck、pack、audit 和隔离安装。
- [ ] 亚马逊 TUI `/reload` 后验证 solution approval 立即出现技术方案文件，退出/重进可恢复，再继续 plan approval。

当前证据：

- planning-document/runtime-state unit 11/11 通过，覆盖方案首次创建、plan-only 创建、原位修订、人工篡改拒绝和 parent symlink 交换不写外部文件。
- solution/plan/revision 定向 integration 3/3 通过；`npm run test:all` 通过：unit 95/95、integration 60/60、real Pi RPC E2E 5/5。
- `npm run typecheck`、`npm pack --dry-run` 与 `git diff --check` 通过；`npm audit --omit=dev` 为 0 vulnerabilities。
- 当前工作树 tarball 已在仓库外临时目录使用 `--offline --omit=dev` 安装成功，确认安装包 manifest 指向其 bundled `pi-subagents/index.ts` owner；未调用模型或读取用户凭证。

### R18 当前问题收口

目标：在目标项目 TUI canary 前修正已确认的状态展示、文档事实和 E2E 凭证环境边界，不扩大到 CI、覆盖率体系或公开发布准备。

- [x] 取证未跟踪的 `docs/Canvas写路径拆分-技术方案.md` 与当前 writer 状态；文件来源无法追溯到具体 Session，但没有打开句柄、活跃 Adaptive Delivery lease 或仓库写进程，保留文件不修改。
- [x] 修复 progress-sync 成功后 `/delivery-status` 仍显示“未运行”，并增加集成回归。
- [x] 修正 README 中 reviewer preflight 与 R17 技术方案先落盘的实际时序。
- [x] 同步本计划中的当前测试数字、R16/R17 阶段和已被后续设计取代的历史说明。
- [x] 收紧真实 Pi RPC E2E 子进程环境，避免继承 Provider 凭证变量，并增加回归。
- [x] 运行定向验证、typecheck、完整 unit/integration/E2E、pack dry-run、离线 audit 和 `git diff --check`。

当前状态：已完成。当前工作区没有可证明的活跃受控 writer；本轮由当前父会话作为唯一 writer，未修改或删除已有未跟踪文件。

当前验证证据：

- progress-sync 定向 integration：1/1 通过，成功后 `/delivery-status` 显示“项目进度已同步”。
- real Pi RPC E2E：6/6 通过，包含 ambient Provider 凭证环境变量隔离回归。
- README/Package 资源定向 unit：5/5 通过；陈旧关键字检查仅保留明确标记为历史的 M0 记录。
- `npm run typecheck`：通过。
- `npm run test:all`：通过；unit 95/95、integration 60/60、real Pi RPC E2E 6/6。
- `npm pack --dry-run`：通过，tarball 约 2.29 MB，1,962 个条目。
- `npm audit --omit=dev --offline`：0 vulnerabilities。
- `git diff --check`：通过。
- 测试使用隔离 agent dir、fake provider 和 `PI_OFFLINE=1`；真实 Pi RPC 子进程只继承基础运行环境与显式 test probe，不继承 ambient Provider 凭证。

### R19 只读请求入口与只读委派收口

目标：修复亚马逊真实 TUI 中只读梳理被错误拉入 `SHAPING`、普通方案阶段启动 scout，以及 scout 默认 output 导致终态摘要漂移的问题。

- [x] 使用 Pi 公开 `input` 事件把 `delivery_begin` 绑定到模板展开前的真实 `/delivery-shape` 输入；普通自然语言、Extension 注入或未授权直接工具调用保持 `IDLE`。
- [x] 审批前公开只读委派只保留高风险 `oracle`，普通 SHAPING/PLANNING 不再向模型暴露 scout/reviewer 角色；验证阶段 reviewer 继续使用内部固定入口。
- [x] 将终态摘要真实集成证据改为 builtin oracle/reviewer 路径，不再以具有 run-ID output path 的 scout 作为交付流程 canary。
- [x] 增加禁网真实 Pi RPC + 本地 fake server 回归，分别证明自然语言只读请求不能启动流程、oracle foreground delegation 同时具有稳定 public security projection 和实际 runtime terminal identity/digest。
- [x] 更新 Prompt、Skill、README 和技术方案中的入口、角色与失败处理说明。
- [x] 运行定向测试、typecheck、完整 unit/integration/E2E、pack dry-run、离线 audit 和 `git diff --check`。

当前状态：已完成。入口、委派、双证据和完整自动化门禁均通过；等待亚马逊 TUI `/reload` 后重新执行只读请求与 standard worker/reviewer canary。本轮不处理第三方 `pi-codex-conversion` 的 `fd` 下载 403。

当前验证证据：

- 修复前入口 integration 与自然语言 E2E 按预期失败，证明未授权 `delivery_begin` 会进入 `SHAPING`；修复后对应 1 integration + 1 real Pi RPC E2E 通过并保持 `IDLE`。
- 首次 oracle E2E 因 `denyExtensions:true` 正确拒绝 child fake-provider Extension，改用仅监听 `127.0.0.1` 的隔离 `models.json` + local fake server 后进入真实 foreground terminal，未访问外网。
- public preflight/terminal、角色 ceiling、runtime identity 和 fallback candidate 缩小定向 unit/integration：18/18 通过。
- worker 成功、失败和缺失 terminal proof 定向 integration：3/3 通过。
- 自然语言 IDLE 与 oracle 双证据 real Pi RPC E2E：2/2 通过。
- `npm run typecheck`：通过。
- `npm run test:all`：通过；unit 96/96、integration 60/60、real Pi RPC E2E 8/8。
- `npm pack --dry-run`：通过，tarball 约 2.29 MB，1,962 个条目。
- `npm audit --omit=dev --offline`：0 vulnerabilities。
- `git diff --check`：通过。

### R20 Tiny Delivery 与 reviewer candidate evidence

目标：为严格低风险、exact-scope、clean-baseline 的极小修改提供无需求级规划文档和无 reviewer 的受控路径，同时让 standard/high-risk reviewer 确定性读取与当前 candidate 绑定的实际 diff。

- [x] 新增独立 `adaptive-delivery-tiny` v1 contract，不改变 `adaptive-delivery-plan` v2 语义或状态枚举。
- [x] Tiny TUI 合并批准时由 runtime 捕获 clean workspace baseline，并固定 exact project-relative change scope。
- [x] Tiny parent writer 的 `edit`/`write` 受 path-level runtime guard 限制，candidate submit 前再次验证相对 baseline 的实际 Git delta。
- [x] Tiny 保留 lease、candidate freeze、固定 validation、evidence binding、stale detection 和 fail-closed；默认不创建 planning docs、不 preflight/call reviewer、不启用 progress-sync。
- [x] Standard/high-risk review handoff 增加有界 normalized candidate diff，并要求结构化结果回绑 candidate/diff digest。
- [x] untracked Git mode 进入 candidate v2 manifest 和 reviewer packet，symlink packet 包含 JSON 转义后的实际 target；review 期间 `chmod` 会使旧 evidence 失效。
- [x] 增加 Tiny contract、baseline、scope、approval、validation/finalize、escalation、恢复、review evidence 和现有路径回归测试。
- [x] 运行 typecheck、unit、integration、E2E、完整测试、pack dry-run、离线 audit 和 `git diff --check`。

当前状态：已完成。独立 review 首轮发现 untracked symlink target 与 executable mode 两项 P1；完成最小返工和 12/12 定向单测后，同一 reviewer 定向复核为 `OK`。保持现有 writer lease、validation runner、planning-document writer、progress-sync、diagram 和 worker delegation 架构不变；不实现 tiny auto-approve。

当前验证证据：

- candidate/review-contract 定向 unit：12/12 通过，覆盖 untracked `chmod` 改变 candidate digest、真实 `100644`/`100755`/`120000` mode 和 JSON 转义 symlink target。
- `npm run typecheck`：通过。
- `npm run test:all`：通过；unit 110/110、integration 64/64、real Pi RPC E2E 8/8。
- `npm pack --dry-run`：通过，tarball 约 2.3 MB，1,965 个条目。
- `npm audit --omit=dev --offline`：0 vulnerabilities。
- `git diff --check`：通过。
- 定向 closure review：首轮两项 P1 均已关闭，复核无剩余 finding，merge verdict 为 `OK`；reviewer 未运行命令，命令证据以上述 runtime 结果为准。
- 全部自动化测试使用临时 Git 仓库、隔离 agent dir、fake provider 或仅监听 localhost 的测试服务；未调用真实 Provider。

### R21 Candidate ignored artifact 语义重构

目标：让 candidate 只绑定 Git 可交付和 reviewer 可读取的内容，避免固定验证生成的 ignored artifact 使自身 evidence 误失效；真实 tracked、staged、非 ignored untracked、mode、HEAD 和 submodule 漂移继续失败关闭。

- [x] candidate manifest 升级到 v3，删除全量 ignored path count/digest 和对应 Git 枚举，不保留 v2 兼容或迁移逻辑。
- [x] 明确 ignored 文件不属于交付候选；需要交付时必须先使其成为 Git 可见内容。
- [x] validation 后发生真实 candidate drift 时保留命令终态作为只读诊断，但不形成 validation evidence。
- [x] stale 分支记录可执行恢复动作，不再遗留“等待当前验证工具”的过期断点。
- [x] 增加 ignored artifact 稳定性、validation 期间生成 ignored 文件和真实 Git 可见漂移回归。
- [x] 运行 typecheck、unit、integration、E2E、完整测试、pack dry-run、离线 audit、`git diff --check` 和限定范围 review。

当前状态：已完成。首轮限定 review 发现 stale 路径双重状态提交 P1 和 HEAD/Tiny ignored 边界测试缺口 P2；完成原子终态返工和补测后，closure review 无剩余 finding，merge verdict 为 `OK`。最小实现沿用现有 candidate、validation runner 和 runtime state，不增加 artifact 分类器、命令改写、验证沙箱、配置项或兼容层。

当前验证证据：

- candidate、Tiny scope 与 presentation 定向 unit 17/17 通过，覆盖 ignored artifact 新增、内容修改和删除不改变 digest、真实 HEAD 提交改变 digest、Tiny existing/missing ignored scope 在 approval/write 两处拒绝，并保留 staged、tracked、非 ignored untracked、mode、symlink、approval、progress exclusion 和 submodule 漂移检测。
- 相关 lifecycle integration 2/2 通过；验证命令生成 ignored artifact 后 evidence 有效，真实 tracked drift 仍进入 `BLOCKED`、不保存 evidence，只产生 pending+terminal 两次 checkpoint，并展示仅用于诊断的命令终态与两条可执行恢复路径；terminal checkpoint 保存失败时抛错并保持只读。
- `npm run typecheck`：通过。
- `npm run test:all`：通过；unit 113/113、integration 66/66、real Pi RPC E2E 8/8。
- `npm pack --dry-run`：通过，tarball 约 2.3 MB，1,965 个条目。
- `npm audit --omit=dev --offline`：0 vulnerabilities。
- `git diff --check`：通过。
- closure review：首轮 P1/P2 已关闭，复核无剩余 finding，merge verdict 为 `OK`；reviewer 未运行命令，命令证据以上述 runtime 结果为准。
- 全部测试使用临时 Git 仓库、隔离 agent dir、fake provider 或 localhost 测试服务；未读取凭证或调用真实 Provider。

### R22 亚马逊目标项目真实 TUI Canary

目标：在隔离 Git worktree 和项目专用 agent dir 中，用真实 Pi TUI、真实模型、bundled `pi-subagents` 和当前 Package 完成 Standard 交付闭环；不接触主工作区已有改动，不调用项目业务 Provider 或生产环境，不提交、推送、发布或部署。

- [x] 启动时加载 `delivery-gate` 与唯一 bundled `pi-subagents 0.64.0` owner；普通只读问答保持 `IDLE`。
- [x] `/delivery-shape`、solution TUI approval、技术方案立即落盘、planning、plan TUI approval、唯一 foreground worker、跨进程 lease 和 candidate v3 冻结均真实执行。
- [x] 在 plan approval 前退出 TUI，再以同一 Session 恢复；状态、已批准 solution、规划文档身份和下一断点恢复正确。
- [x] 首轮固定验证按批准合同执行并失败关闭：`compileall` 与 `git diff --check` 通过；三组 Pytest 因计划中的只读 bind mount 与 `--tmpfs /workspace/backend/storage` 冲突而以 Docker 125 退出、测试未启动；Black 报告 3 个候选文件需格式化。该组失败包含项目验证计划错误与真实候选格式问题，不作为 Package 缺陷。
- [x] 验证失败进入 `BLOCKED`，保留 candidate digest、逐命令终态和可执行恢复提示，并成功把阻塞证据同步到需求级实施计划。
- [x] 从同一 Git 基线创建第二个独立 worktree 和新 Session，修正计划为 `STORAGE_DIR=/tmp/workbench-storage` 且移除 `--tmpfs`；solution/plan 双批准、规划文档 create-only 写入、唯一 foreground worker、lease 释放和 candidate v3 冻结再次成功。
- [x] 第二轮首个 candidate 的权威验证真实启动并完成：聚焦 Pytest 通过（4.5 秒）、完整后端 Pytest 通过（366.7 秒）、`compileall` 通过（1.9 秒）、scoped `git diff --check` 通过（0.1 秒）；Black 仅报告两个新文件需格式化。由此确认首轮 Pytest 失败来自验证合同而非 Package 的 Docker 执行器。
- [x] Black 失败后 runtime 关闭写权限并进入 `BLOCKED`；TUI `/delivery-resume` 正确恢复到 `VALIDATING`，随后 `delivery_begin_rework` 建立新 lease，原 writer 完成一次限定范围返工并冻结新 candidate，未出现第二 writer 或范围外修改。
- [x] 第二轮返工后同一 Black 失败原样复现；runtime 未沿用旧 candidate 的通过证据，并因新 candidate 的聚焦 Pytest、完整回归和 `compileall` 同时超时而判定证据不足。父会话按收敛规则停止继续补丁并降权到 `PLANNING`，未启动 reviewer、未同步专项总台账、未进入 `DELIVERED`。
- [x] 修复同路径 revision 阻断：由 R23 的 evidence-bound 原子修订与 revision intent 完成，并覆盖 previous/next 中断恢复和重新批准。
- [x] 解决确定性 formatter 的 writer 能力缺口：由 R23 的 plan v2 `repairCommand`/`repairTimeoutMs` 完成；第六轮 canary 证明 repair 在 worker terminal 后、candidate freeze 前执行。
- [x] 收紧验证失败后的模型路由：R23 将 `delivery_begin` 限定为 `IDLE`，R26 增加 provider payload 与执行前过滤，R27 明确 `delivery_begin_rework({ reason })` 参数形状。
- [x] 复验长时间 TTY 捕获与命令超时关联：R23/R26 降低 Package heartbeat 并隐藏 validation spinner，第六轮两批完整回归分别在 236.7 秒和 238.8 秒结束；Package 可控进度已收敛，剩余 ANSI 全屏重绘和模型长等待没有 Package 事件证据，不继续推断根因。
- [x] 修复上述问题后从新 canary 会话重跑完整 worker、validation、fresh reviewer、必要返工、closure review、progress sync 和 `DELIVERED` 路径；第六轮 Session `01a06be0-291d-7851-bd91-14fe914f95fd` 已完成。
- [x] 评估真实 TUI 成本与方案阶段效率：R25-R27 已加入取证收敛、单次/累计 read 上限和 timeout 证据规则；第六轮仍有约 2 小时 28 分钟 SHAPING 等待，但空洞内无 Package 事件，当前不增加缓存、摘要器或新配置面。

当前状态：已由 R23-R27 后续修复和第六轮真实 TUI `DELIVERED` 证据完成历史收口。R22 两个失败现场仍作为问题复现证据保留，不作为当前 Package 状态；对应 Session、worker、candidate 和 validation 标识保持上文原记录。

### R23 Canary 四类问题修复

目标：只修复 R22 已记录的四类问题，不扩大 worker 通用权限，不推断项目 formatter，不把 TTY 与 Docker 超时的相关性写成已确认根因。

- [x] 将四类问题、事实边界、最小修复和验收标准写入 `docs/技术方案.md`；保留亚马逊两处隔离 canary worktree 作为只读证据现场。
- [x] 同路径 revision：规划文档 evidence 升级为 v2，持久化文件及各级父目录 `dev/ino`；保留完整 `planningDocuments` 作为修订前 evidence，solution/plan 只允许摘要、路径和身份仍匹配时通过同目录临时文件、`fsync` 和原子 rename 更新。rename 前持久化绑定完整旧/新身份与摘要的 revision intent v1，恢复时只采纳精确旧态或新态。覆盖外部内容、同内容文件/父目录替换、symlink 漂移、替换前故障不损坏旧文件、rename 后目录同步失败，以及 solution/plan 新旧态 Session 恢复测试。
- [x] 确定性 formatter：保持 builtin worker 的 read/edit allowlist 与 `denyExtensions:true`；plan v2 validation item增加可选 `repairCommand`/`repairTimeoutMs`，由 Delivery Gate 在可信 worker terminal 后、candidate freeze 前通过 `pi.exec` 执行。失败时释放可证明 lease、进入 `BLOCKED`，不得形成 candidate 或 validation evidence。
- [x] 工具路由：`delivery_begin` 只在 `IDLE` active tools 中出现；覆盖其他状态和只读 fallback，非法状态仍由 Extension 二次拒绝。
- [x] 长 validation TTY：TUI 命令窗口使用公开 `ctx.ui.setWorkingVisible(false)` 隐藏默认 spinner并在 `finally` 无条件尽力恢复，heartbeat 默认从 2 秒降为 30 秒；worker、repair、validation 的显示回调异常不得影响命令、状态、lease 和 evidence。
- [x] 更新 Prompt/Skill/README，说明同路径修订、可选批准修复命令、失败路由和低频验证进度，不增加 formatter 别名表、自动推断、兼容层或新用户配置。
- [x] 重新运行覆盖第三轮 revision intent 批准语义返工后最终 diff 的 typecheck、`test:all`、pack dry-run、offline audit 和 `git diff --check`。
- [x] 对 R23 actual diff 做 fresh review；只修复证实的 P0/P1，再执行一次 closure review。
- [x] 使用新 Session 重跑亚马逊完整真实 TUI canary，比较终端输出与相同验证命令耗时，并完成 fresh reviewer、必要返工、progress sync 和 `DELIVERED`。

当前状态：已完成。第三轮真实 TUI canary 使用 Session `01a06b20-184f-75c5-9762-bf9cec200225`，先后取得 worker `5c219295-71c1-43f8-bd78-d35fc457a87e` 和 plan revision 后的新 worker `b3983a2d-25fc-42f5-ad48-f5599c6dce82` terminal proof；最终 candidate 为 `0fd74b86035f667a7249641a510c78ee59fe9b0c8908f629087ae2e7df4e4ad1`。修订后的五项固定验证分别在 4.3 秒、75.0 秒、366.8 秒、1.4 秒和 3.1 秒通过；fresh reviewer 绑定 actual diff 后为 `OK_WITH_NOTES` 且无 P0/P1；项目需求计划和总台账同步完成，最终进入 `DELIVERED`。未调用业务 Provider 或生产环境，未 commit、push、创建 PR、发布或部署。canary 另暴露的 plan revision 语义和 progress sync 写前冲突进入 R24。

### R24 第三轮 Canary 收口

目标：只修复第三轮 canary 已证实的计划生成和 progress sync 协调问题，不增加模糊文本合并、状态层或配置面。

- [x] 将第三轮 canary 的交付证据、事实边界和 R24 最小修复写入 `docs/技术方案.md` 与本台账。
- [x] 在 plan Prompt/Skill 中明确 `/delivery-revise plan` 会清除 runtime candidate 与 validation/review evidence；worker 路由重新执行唯一 worker、repair、candidate freeze 和完整验证，`single`/Tiny 路由由父 Pi 重新提交并验证候选。
- [x] 要求验证命令从实际仓库根和工作目录证明测试所需 docs、fixtures、schema、template 等资源可见，避免只挂载子目录产生伪回归。
- [x] progress sync 在 `newText` 已唯一存在时幂等成功；写前 `oldText` 缺失或不唯一时恢复策略和 lease 后保持原状态并允许精确重试。
- [x] 增加 progress sync 单元与 lifecycle 集成回归，并更新 Prompt/Skill 资源断言。
- [x] 运行定向测试、typecheck、`test:all`、pack dry-run、offline audit 和 `git diff --check`；完成限定 fresh review。
- [x] 使用 R24 Package 在新亚马逊隔离 worktree 执行第四轮真实 TUI canary；该轮在 plan 文档名称空白假冲突处安全阻塞并转入 R25，最终完整闭环由 R26 第六轮 canary 完成。

当前状态：自动化与限定审查已完成，等待最终真实 TUI canary。首轮限定 review 发现重叠唯一性漏检 P1 和 `single` 路由文案矛盾 P2，最小返工后 closure review 无剩余 finding，merge verdict 为 `OK`。返工后 typecheck 通过；`npm run test:all` 为 121/121 unit、74/74 integration、8/8 real Pi RPC E2E；pack dry-run 为 1,965 个条目、约 2.3 MB；offline audit 为 0 vulnerabilities；`git diff --check` 通过。Package 修改前基线为 clean `0ade1e4`，与 `origin/main` 一致；R24 改动未提交。

### R25 第四轮 Canary 收口

目标：只修复第四轮 canary 已证实的规划文档名称假冲突和无界取证问题，不增加缓存、摘要服务、用户配置或新的运行时状态。

- [x] 在新隔离 worktree 和新 Session 执行 R24 真实 TUI canary，除 solution/plan 批准外不人工纠偏。
- [x] 记录计划批准后的确定性阻塞：正文标题 `Canvas 节点数据契约拆分实施计划` 与已批准 `requirementName=Canvas节点数据契约拆分` 仅相差展示空格，但裸 `includes` 在写入前判为不包含；实施计划未创建、源码未写、worker 未启动。
- [x] 记录体验证据：SHAPING 读取多个大文件后约 7 分钟才成案并触发一次自动上下文压缩；PLANNING 再用约 7 分钟重复扩大读取；TUI 捕获含百万级 ANSI 重绘。该事实证明 Package 的 Prompt/Skill 缺少取证收敛约束，但不能单独证明 Pi TUI 重绘根因。
- [x] 将正文身份检查改为 Unicode NFC 后忽略空白的顺序匹配，继续拒绝字序或非空白字符不同的名称；补单元和 lifecycle 回归。
- [x] 在 shape/plan Prompt 与 Skill 中要求先定位后切片读取、已有批准事实不重复全量读取、事实足够后立即成案；不设置推测性 token/文件数配置。
- [x] 运行定向测试、typecheck、`test:all`、pack dry-run、offline audit 和 `git diff --check`，并完成限定 fresh review。
- [x] 使用 R25 Package、新 Session 和新隔离 worktree执行第五轮 Amazon TUI canary；该轮在已知全量测试 timeout 处安全阻塞并转入 R26，最终完整闭环由 R26 第六轮 canary 完成。

当前状态：第四轮 Session `01a06b6e-80eb-7a39-bf8b-b706c559e66a` 在 `PLANNING` 批准后进入 `BLOCKED`，原因是正文名称空白差异被错误当作身份不一致。该轮只创建了 `docs/Canvas节点数据契约拆分-技术方案.md`；未创建实施计划，未开放源码写入，未调用 worker、业务 Provider 或生产环境，也未执行 commit、push、PR、发布或部署。TUI 已正常退出。R25 返工后定向规划/资源测试 17/17、lifecycle 73/73 和 typecheck 通过；完整门禁为 122/122 unit、75/75 integration、8/8 real Pi RPC E2E；pack dry-run 为 1,965 个条目、2,325,111 bytes；offline audit 为 0 vulnerabilities；`git diff --check` 通过。限定 fresh review 无 P0/P1，merge verdict 为 `OK with notes`；两项 P2 为补充字序变化断言和同步本段门禁事实，均已关闭。

### R26 第五轮 Canary 收口

目标：只修复第五轮 canary 已证实的父 Pi 工具绕行、阶段工具误暴露、无界只读取证和验证 timeout 规划问题；不增加第二套沙箱、命令推断、项目专用规则或新用户配置。

- [x] 使用 R25 工作区代码、新 Session 和新隔离 worktree 执行第五轮亚马逊真实 TUI canary；R25 的展示空格修复已由同名方案和计划成功批准并进入 `IMPLEMENTING` 证明。
- [x] 记录权限缺口：`PLANNING`/`IMPLEMENTING` 的真实 active tools 被动态加入 `exec_command`、`write_stdin`、`apply_patch` 和 `view_image`，且父 Pi 在 worker 路由中实际成功调用 `exec_command`；本轮未发生父 Pi 源码写入，但 `setActiveTools` 不能单独构成执行授权边界。
- [x] 记录路由缺口：`delivery_progress_sync` 在 `SHAPING`/`PLANNING`/`IMPLEMENTING` 均可见，模型在 worker 前调用后被 execute 层拒绝；`delivery_begin` 在真实 `PLANNING`/`IMPLEMENTING` 再次可见。状态校验有效，但工具可见性与下一步不一致。
- [x] 记录取证与 timeout 事实：SHAPING 仍请求大量 800-2000 行读取并重读已加载 Skill，约 6.5 分钟成案；完整后端回归实际为 `2025 passed, 279 skipped`、退出码 0、1480.73 秒，但批准 timeout 为 1200 秒，runtime 因 `killed=true` 正确记为 `timed-out`，整批 validation 未通过且未启动 reviewer。
- [x] 在 `tool_call` 执行前边界拒绝 delivery 流程中的原始 process/subagent 及 Codex adapter 写工具；即使动态注册或 active-tools 漂移，也不能绕过父 Pi 状态、writer route 和 lease。lifecycle 已覆盖 `bash`、`powershell`、`exec_command`、`write_stdin`、`apply_patch` 和 `subagent`。
- [x] 每次 agent 请求前重新应用阶段策略；`delivery_progress_sync` 只在 writer-free 的 `VALIDATING`/`BLOCKED` 可见，`delivery_begin` 只在 `IDLE` 可见，并保留 execute 层二次校验。policy 与动态工具 lifecycle 回归通过。
- [x] 对 `SHAPING`/`PLANNING` 的父 Pi `read` 设置每次 500 行、每个 agent run 5000 行的确定性上限；小请求不变，超额请求缩减或拒绝并要求先搜索、后成案，不新增持久状态或项目配置。lifecycle 已覆盖 `IDLE` 不受影响、单次缩减、累计耗尽和 `agent_start` 重置。
- [x] plan Prompt/Skill 要求验证 timeout 使用同环境最近耗时证据并留足余量；无证据的长全量/容器命令使用保守 timeout，外部子进程还须由批准命令自身提供可终止边界。保持 plan v2 现有 60 分钟上限。
- [x] 在每轮 agent/provider 请求、父 `edit/write` 与 worker 启动前重新证明 planning approval/document identity 和 canonical lease；失败时立即只读并持久化 `BLOCKED`。lifecycle 覆盖轮次间文档漂移、lease 删除、父写与 worker 启动。
- [x] 将 progress-sync 可见性收紧为“已批准 plan/progress target 且无 runtime writer lease”；补 retained-lease `BLOCKED` 与 conflict 重试恢复回归。
- [x] 在 `before_provider_request` 按当前阶段过滤 provider tool schema；真实 Pi + 后加载 extension + 本地 OpenAI 兼容服务器先正向证明四个 Codex-like 工具已被同轮后置注入，再证明它们未进入最终 HTTP payload。
- [x] 对首轮 review 的 1 个 P1、3 个 P2 完成最小返工；首次 closure review 继续发现 worker 复验抛错未闭锁的 P1 和 E2E 未正向证明注入发生的 P2，均已补代码与回归。
- [x] 运行最终返工后的 typecheck、`test:all`、pack dry-run、offline audit 和 `git diff --check`。结果为 123/123 unit、84/84 integration、9/9 real Pi E2E；pack dry-run 1,965 个条目、2,332,642 bytes，unpacked 10,065,213 bytes；offline audit 0 vulnerabilities；差异检查通过。
- [x] 对 closure review 返工后的完整 actual diff 执行最终限定复审；无剩余 finding，merge verdict 为 `OK`。
- [x] 使用新 Session 和新隔离 worktree执行第六轮完整 Amazon TUI canary；除真实 solution/plan 授权及阻塞后的 TUI `/delivery-resume` 外不人工纠偏，完成 worker、repair、两轮 validation、受控 rework、closure review、progress sync 和 `DELIVERED`。

当前状态：R26 自动化、限定复审和第六轮真实 TUI canary 均已完成。第六轮 Session `01a06be0-291d-7851-bd91-14fe914f95fd` 使用隔离 worktree `/Users/sxie/Documents/亚马逊/amazon-image-generation-workbench-adaptive-canary-6`；唯一首次 worker run `8bb87f5f-a45b-469f-bb7a-60a8fb3a3d05` 形成首个 candidate `3dbb4c9c0cfe8f71949bafbb15f37c493c1411256bb95e1424907fe486bab863`。首轮聚焦测试 `1 failed, 11 passed`、完整后端 `1 failed, 1990 passed, 279 skipped`（236.7 秒），正确阻止了新增 characterization 断言错误；恢复后同一 worker 路由的新 fresh worker run `ae2999da-19bd-480c-9eec-3a7b283299ef` 只修测试。最终 candidate `44c2dd5598faf7eb0ce7cedd1c72df2610eb3fa334ef28aea95cd81b117b0543` 通过聚焦测试（3.1 秒）、Black（2.5 秒）、`compileall`（0.9 秒）和完整后端回归（238.8 秒）；fresh closure review 绑定 diff `fc01765cc6cc16580c72df67eb4605032df30fe2665355016392761ec0a83fe8`，结论 `OK`、无 P0/P1。两个 progress target 同步成功并进入 `DELIVERED`，lease 已释放，TUI 已退出。父 Pi 未调用原始 process/subagent 或动态注入写工具；未调用业务 Provider、生产环境、浏览器，也未执行 commit、push、PR、发布或部署。

### R27 第六轮 Canary 体验收口

目标：只收口第六轮 canary 已证实且属于 Package 控制面的体验问题；不为模型/provider 长等待或 Pi TUI 重绘增加推测性 runtime、自动中断、缓存或配置面。

- [x] 将第六轮真实授权、worker、repair、首轮失败、TUI 恢复、受控返工、两轮验证、fresh closure review、双 progress sync、`DELIVERED` 和 lease 清理证据写入技术方案与本台账。
- [x] 在 run Prompt/Skill 中明确 `delivery_begin_rework` 的实际调用形状为单个必填 `reason`，补资源回归，避免模型先尝试未定义的 `acceptedFindings` schema。
- [x] 核对第六轮 SHAPING 的 25 次受限 read、两段长时间无工具等待和 validation/TUI 重绘证据；单次 read 上限与 heartbeat 均生效，长空洞内没有 Package custom event、错误或重试，因此本轮不增加推测性 runtime 改动。
- [x] 运行定向资源测试、typecheck、完整门禁和限定 review；资源测试 5/5、123/123 unit、84/84 integration、9/9 real Pi E2E 均通过，限定 review 无 P0/P1；唯一 P2 为 fresh worker run 文案歧义，已修正。

当前状态：R27 已完成。已确认单次 `read <= 500`、完整 validation timeout 和 30 秒 heartbeat 生效；返工首次调用因缺少 `reason` 被 runtime 无副作用拒绝并由模型自行纠正。`delivery_begin` 至方案输出约 2 小时 28 分钟，存在两段约 1 小时 54 分钟和 29 分钟的无工具等待；Session 空洞内没有 Package custom event、错误或重试，PTY 仍捕获大量 ANSI 全屏重绘，现有证据不足以归因给 Package。run Prompt/Skill 已增加单一 `reason` 参数形状及资源断言；资源测试 5/5、typecheck、123/123 unit、84/84 integration、9/9 real Pi E2E 均通过。pack dry-run 为 1,965 个条目、2,335,387 bytes，unpacked 10,071,400 bytes；offline audit 为 0 vulnerabilities；`git diff --check` 通过。限定 review 无 P0/P1；唯一 P2 为把返工 fresh worker run 误称为“原 worker”，现已改为同一 worker 路由的新 fresh run。`/exit` 被 Pi 当作普通模型输入、需 `Ctrl-D` 退出，记录为 Pi TUI 边界而非 Package 缺陷。R27 改动未提交。

### R28 M11 全面 Fresh Review 返工

目标：只修复 M11 全面 review 已确认的权限、恢复和契约缺口，并同步当前事实；不新增配置面、第二套状态机、打包 staging 系统或删除操作恢复协议。

- [x] 使用三个 fresh reviewer 并行检查授权与恢复、契约与文档、打包与工程质量；M11 首轮全面 review 已完成，结论为 `BLOCK`。
- [x] 将最后一次成功应用的阶段工具集作为执行前权威 allowlist，拒绝后置动态注入但不在该集合内的任意工具。
- [x] 热恢复遇到 `starting/running` worker 时保留 lease、强制只读并进入可恢复 `BLOCKED`；`/delivery-resume` 在恢复 `VALIDATING/REWORKING` 前复验 candidate 与绑定证据。
- [x] 收紧 runtime state：非 `BLOCKED` 不得携带 `resumeState`；`DELIVERED` 必须具有一致的批准、candidate、validation、review/Tiny scope 和 final evidence。
- [x] 将 `progressTargets` 限定为 canonical project-relative 非保留路径，拒绝 `.git`、`.pi`、`node_modules`、绝对路径和非规范化路径。
- [x] progress check 透传取消信号并保留 `killed` 终态；即使退出码为 0，取消或 killed 也失败关闭。
- [x] `delivery_progress_sync.newText` 改为非空；当前范围不支持删除，避免引入 post-image digest 与额外恢复协议。
- [x] 修正技术方案和当前进度中的历史状态；核对 Node 22.19 最低支持线可获得的本地验证证据。
- [x] 首次 closure review 已执行并给出 `BLOCK`：部分返工被错误地按冻结 candidate 校验；progress-sync 初始 checkpoint 失败后残留内存 lease；另有路径首尾空白和首页状态两个 P2。
- [x] `VALIDATING` 恢复继续校验现场 candidate；`REWORKING` 恢复允许部分返工，只校验旧 evidence 绑定旧 candidate，并增加完整返工中断/恢复回归。
- [x] progress-sync 初始 checkpoint 失败且 lease 释放可证明时清除内存引用、恢复调用前状态与基础策略，并增加直接重试回归。
- [x] canonical progress target 拒绝首尾空白；同步本页 R28 状态。
- [x] 重新运行完整门禁、pack/offline audit、diff check，并执行 M11 closure review 复审；无剩余 finding，merge verdict 为 `OK`。

当前状态：已完成。首次 closure review 的两个 P1 和两个 P2 已完成最小返工；typecheck 与完整 `test:all` 通过：127/127 unit、90/90 integration、9/9 real Pi RPC E2E。pack dry-run 为 1,965 个条目、2,338,628 bytes、unpacked 10,084,203 bytes，bundled 仅 `acorn/jiti/pi-subagents/yaml`；`package/node_modules/@earendil-works/pi-*` 与 `package/node_modules/@types` 均为 0 项，因此 lockfile `inBundle` 推断的打包 P1 不成立，不增加 staging/pack 系统。offline audit 为 0 vulnerabilities，`git diff --check` 通过。开发类型已对齐 `@types/node 22.19.19`；本地无网 Node `22.23.1` Linux 容器 typecheck 通过，真实 `.tgz` 与 Pi `0.84.4`、bundled `pi-subagents 0.64.0` 也已通过 `--offline` 独立安装及 `npm ls`。容器单测因直接复用 macOS `node_modules` 的 esbuild 平台二进制不匹配而未通过，不计为代码失败或 Linux 功能测试通过；Linux TUI/原生 PNG 仍待单独验收。最终限定复审无剩余 finding，merge verdict 为 `OK`；非阻塞补强空间仅为错误 evidence 注入、checkpoint release 失败和 hot reload 后部分返工恢复的额外测试。本轮未 commit、push、创建 PR、npm publish 或部署。

### R29 第七轮 Canary 运行边界与进度展示收口

目标：只修复亚马逊项目第七轮真实 TUI canary 已证实的三项 Package 问题；不引入私有 `pi-subagents` API、操作系统沙箱、项目专用路径规则或新的用户配置。

- [x] 记录 canary 断点：唯一 worker `dc964d22-7cfb-4c98-b5ce-6f909cfdbd50` 完成实现并形成 candidate `957e6154b02023071126f2e2fce0e06764898f17521ddb80b8941c53cca2b8a0`，但 worker 同时修改了批准的 progress target，Package 在 validation 前安全进入 `BLOCKED`。
- [x] 记录恢复缺陷：首次阻塞保存 `resumeState=VALIDATING`；后续 provider 请求再次证明规划文档漂移时重复阻塞，覆盖了原恢复点。
- [x] 记录体验缺口：worker 执行期间 Package 已收到 `currentTool`、`recentOutput`、`durationMs` 和 `toolCount`，但状态栏和 `/delivery-status` 没有持续展示这些信息。
- [x] worker task 无条件禁止修改 solution、plan 和全部 `progressTargets`；委派前冻结这些受保护文件，worker terminal 后、repair 前及 repair 后、candidate 前分别复验，任何漂移均释放可证明 lease、只读阻塞且不形成 candidate。
- [x] 重复 runtime proof failure 在已有 `BLOCKED` 状态下保留原 `resumeState`，并增加连续 provider 请求回归。
- [x] 保存有界的瞬时 worker 进度，在状态栏、工具更新和 `/delivery-status` 展示当前工具、最近输出、耗时及工具数；进度不进入持久状态和授权判断。
- [x] 更新 Prompt、Skill、README 与技术方案，明确 worker 不写项目进度制品、父会话在 writer-free 边界统一同步，以及公开委派 API 不构成路径级 OS 沙箱。
- [x] 首轮限定只读 review 已执行，结论 `BLOCK`：repair 后缺少二次复验、部分证明入口仍会丢失 `resumeState`；另有返工恢复、瞬时进度净化/计时和 lease 状态证据四个 P2。
- [x] 增加 repair 后二次受保护制品复验；所有证明与持久化失败入口保留既有恢复点；受保护制品漂移保留返工旧 candidate/evidence；lease 不可证明立即清除缓存有效性。
- [x] worker 进度区分当前与最近工具，工具结束时清除当前工具；净化控制及双向格式字符，限制工具/输出长度，只接受有限非负耗时和整数工具数，并以本地经过时间补足稀疏 heartbeat。
- [x] 第二轮限定只读 review 已执行，结论 `BLOCK`：repair 前 lease 归属检查的异常路径未显式失败关闭；worker terminal response 未主动清除最后一次 `currentTool`。
- [x] repair 前 lease 归属检查统一捕获返回 `false` 与直接异常，均清除缓存有效性、保存 worker terminal proof 并以原实施阶段进入 `BLOCKED`；terminal 成功或异常均清除 `currentTool` 并保留 `recentTool`。
- [x] 第三轮限定只读 review 已执行，结论 `BLOCK`：`commitSnapshot` 和 `delivery_invalidate` 的只读策略失败分支仍可能覆盖已有 `BLOCKED.resumeState`。
- [x] 两个只读策略失败分支统一使用既有 `resumeStateForBlock()`；增加恢复策略提交失败与已阻塞 invalidate 策略失败回归，均保持原恢复点。
- [x] 运行定向测试、typecheck、完整 `test:all`、pack、offline audit 和 `git diff --check`。
- [x] 对返工后的完整 R29 diff 执行限定只读 closure review；最终无剩余 finding，merge verdict 为 `OK`。
- [ ] 使用修复后的 Package 回到同一亚马逊 canary 现场；先按可证明恢复状态处理既有阻塞，再继续 validation/review/progress sync，不重复未知写入。

当前状态：Package 修复与限定复审已完成，等待恢复亚马逊 canary 现场。typecheck 与完整 `npm run test:all` 通过：127/127 unit、99/99 integration、9/9 real Pi RPC E2E。lifecycle 覆盖 worker 与 repair 修改受保护内容、同内容 inode 替换、candidate 不形成、返工 evidence 保留并恢复、所有证明及只读策略失败入口保留恢复点、lease 返回失效或复验抛错时不误报，以及 terminal 直接结束时净化后的当前/最近 worker 进度。pack dry-run 为 1,965 个条目、2,344,573 bytes、unpacked 10,105,289 bytes，bundled 为 `acorn/jiti/pi-subagents/yaml`；offline audit 为 0 vulnerabilities；`git diff --check` 通过。首轮 builtin reviewer 因本机 Pi 全局依赖缺少 `jiti/lib/jiti-cli.mjs` 未启动成功，不记为 review 通过；其后三轮可执行的限定只读 review 共给出四个 P1 和五个 P2，均已返工，最终同一 reviewer 复核无剩余 finding，merge verdict 为 `OK`。亚马逊项目工作树保留 worker 已完成的源码和文档改动，canonical writer lease 已释放；恢复时必须先用修复后的 Package 重新证明现场状态，不重复未知写入。公开 `pi-subagents` 委派 API 只支持工具名能力上限，没有 child 路径级写入过滤，因此本轮采用“明确禁止指令 + terminal 后双边界强制复验”的最小公开 API 方案，不能把它描述为操作系统级预写入沙箱。

## 8. 强制测试矩阵汇总

| 维度 | 必须覆盖 |
|---|---|
| 状态与策略 | 全状态、非法转换、只读回退、BLOCKED resume、中文映射 |
| 批准主体 | TUI 确认/取消、print、JSON、RPC、Extension 注入、child |
| 只读委派 | Agent shadow、external runner、ceiling、默认 output、路径边界、取消/timeout |
| Writer lease | 并发、父/child 竞争、worktree、PID/owner 损坏、unknown proof、force-release |
| Candidate | HEAD/index/tracked/untracked/submodule/unborn、排序稳定性、外部变化 |
| 固定验证 | 空调用参数、批准命令来源、顺序执行、candidate/evidence 绑定、失败/timeout/中断/reload |
| Progress-sync | path traversal、symlink/TOCTOU、命令逃逸、异常清理、双写冲突 |
| Session 恢复 | resume、tree、fork、reload、compaction、通知丢失、断点恢复 |
| 打包 | 资源发现、bundled dependency 不重复加载、tarball 内容、安全审计 |

## 9. 最终验收矩阵

| 技术方案确认点 | 实施证据 |
|---|---|
| 所有修改任务先方案和计划 | Prompt/Skill 测试、审批 E2E |
| 小任务可合并批准 | COMBINED 流程 E2E |
| 未批准前无原始 subagent | tool policy 与固定委派测试 |
| 非 writer 状态默认只读 | 全状态策略单测与 E2E |
| 批准绑定不可变 Session entry | approval digest/branch/cwd 测试 |
| 受控流程内单 writer | 跨进程 lease 竞争测试 |
| gate/review 绑定 candidate | digest 与 stale evidence 测试 |
| 单一 runtime owner 边界 | bundled manifest、零/多 owner、ping/public API 缺失与兼容失败测试 |
| 断线从断点恢复 | Session/Mission/run/lease 恢复 E2E |
| progress-sync 不形成第二 writer | writer-free、路径限制和清理顺序测试 |
| 权限放宽只来自 TUI 用户 | 来源矩阵集成/E2E |
| 中文状态和角色显示 | 映射与 UI 快照测试 |
| 无自动训练、提交和发布 | manifest、Prompt、最终报告审查 |

## 10. 执行顺序与并行边界

- M0 -> M1 -> M2 -> M3 必须串行，先建立状态和授权根。
- M4 依赖 M2/M3；M5 依赖 M2/M3。
- M4 与 M5 的只读分析可以并行，但同一工作区仍由一个 writer 串行落地。
- M6 依赖 M5 的 canonical workspace 定义。
- M7 依赖 M4/M6。
- M8 依赖 M2/M3/M5/M6。
- M9 可在 M1 后准备文案，但必须等 M3/M4/M7 稳定后定稿。
- M10 依赖 M1-M9。
- M11 依赖全部实现和验证里程碑。

所有代码修改由同一个当前 writer 完成。只读 reviewer 可以并行，但发现必须由父会话裁决后再交给原 writer。

## 11. 阻塞与停止条件

出现以下情况立即标记当前里程碑为`阻塞`，记录断点并停止扩大实现：

- Pi 或 `pi-subagents` 公开 API 无法提供技术方案要求的能力。
- 无法可靠区分 TUI 用户确认与非用户注入来源。
- 无法证明 output、progress target 或 worktree 路径位于允许边界。
- writer process proof、lease owner 或 candidate manifest 状态未知。
- 需要新增技术方案未批准的配置面、兼容层或权限例外。
- 测试必须调用真实 Provider、读取凭证或产生费用。
- 需要 commit、push、发布或外部系统写入但没有相应授权。

阻塞解除后，先更新本计划，再从最后一个已验证断点恢复。

## 12. 用户验收项

用户确认实施完成时，应重点验收：

- 小型、中大型、高风险任务的路由是否符合预期。
- 技术方案、实施计划和权限批准是否清楚且不过度打扰。
- `/delivery-status` 的中文状态、中文角色、断点和下一步是否可理解。
- 断开并重进 Pi 后，是否从正确位置恢复且不重复未知写入。
- `BLOCKED`、resume、cancel 和 force-release 是否有清楚的用户控制。
- 最终交付报告是否包含验证证据、残余风险和未执行发布动作。

<a id="section-13"></a>
## 13. 当前进度

### 13.1 历史阶段与方案确认（截至第 13.44 节）

以下“当前”“最新”“下一步”和授权表述均保留当时语境，不作为当前断点或新的执行授权。最新状态统一见本文件第 1 节；本节原记录不追写后续结果。

- 最新追加交付：第 13.44 节恢复父 TUI 手动 `!` / `!!` 已实现并完成限定验收，61 项策略/SDK/CLI 回归、类型检查和本轮资源核对通过，尚未提交；AI 工具、RPC 和子角色不因人工入口放行而取得宿主权限，用户桌面按键仍待试用。
- 此前追加交付：第 13.32—13.40 节的断流、逐问、方案审阅、默认文档编辑与 UI/详情等改动已完成限定验收并提交，见第 13.36、13.41 节。第 13.42 节简单任务按需规划文档已实现并完成限定验收及本地完整提交，见第 13.43 节；默认 502 个用例分组通过（集成旧断言更新后定向复验），原生容器 30/30、Structured 17/17、类型检查与资源审计通过。旧缺文档授权待办已由默认 Markdown 编辑消除，AI 源码与命令仍须方案及实施确认。真实模型的文档取舍、实际节省效果及桌面体验待试用。下列旧章节保留此前真实模型、提交与实验的历史时点。
- 当前状态：方案与实施计划均已确认；用户持续授权“除非有卡点需要我确认，否则一路稳步推进”，已明确选择外部隔离。P1—P6 已完成本轮限定验收；真实模型复审的 4 项发现已修复，正式全量与收尾审计通过。P6.3 先取得用户真实拒绝场景，再按用户“接下来的可以由你来操作进行验证吗”的明确授权，由代理通过真实 Pi TUI 伪终端按键完成其余流程；不把 SDK 模拟选择或脚本 Provider 当成真实模型/全部桌面体验验收。用户后续已单独授权并完成本地验收基线提交，未推送或发布。
- 已对齐方向：方案持续讨论，文档按持续维护需要落盘；简单明确、可一次完成并验证的任务可只在会话中说明方案与实施步骤，不强制创建技术方案或实施计划文件；方案确认与实施确认仍分开。本次优化见第 13.42 节，覆盖此前所有规模强制规划文档的要求。实验单独授权且不自动合入；模型费用无需确认；按需 Agent、范围内自主返工、已有台账按可验证节点及时回写与现场核对恢复；不兼容旧代码、契约或 Session。
- 已确认依赖与分发决策：自行实现本 Package 所需的轻量编排，不直接或间接依赖、捆绑、包装或调用 `pi-subagents`，也不读取其配置；仅参考资源重建与独立会话思路。使用标准 Pi 正式版和公开能力，只保留一条执行路径，不修改 Pi 源码、安装包或私有运行态；用户无需为本 Package 安装或卸载 `pi-subagents`。
- 已确认能力目标：按配置加载任务所需工具、插件、规则、Skills 和原有检查，子 Agent 使用独立上下文，取消与记录归属明确；不接受静默退回少量内置工具。任意插件内存态、所有临时配置和父 TUI 的自动复制不纳入当前范围；具体任务真有依赖时报告具体缺口，不预建通用兼容层。多 Agent 主要用于独立质疑和取证，不是为了提速。
- 已确认规模边界：复用 Pi 的模型、工具、扩展加载、Session、事件与中止，只补有限委派、权限/writer、结果核对、取消收尾与必要执行记录；父会话负责审查、返工和唯一台账。不另做 Agent runtime、后台调度、Fleet、插件适配平台、第二套计划系统或双执行后端。已确认采用受控 RPC 子进程，不新增另一条 SDK/runner 实现。
- 已确认重构范围：整个 `pi-adaptive-delivery` 项目，不限于依赖替换或局部补丁。实施获准后可重组、替换或删除代码、资源、依赖、测试和配套文档，不兼容旧命令、配置、契约、Session、运行制品或内部 API；不保留迁移、垫片、旧逻辑回退或双后端。旧代码只在直接适合新设计时复用；测试按新需求重建，仍需覆盖真实安全边界。范围澄清已写入技术方案第 1、7、12 节，文档一致性、改动范围及 `git diff --check` 核对通过，仍仅两份规划文档有改动；该次范围澄清未运行代码测试或新实验，未提交或发布。不将范围澄清视为技术方案全文确认或正式实施批准。
- 此前草稿整理：当时已重写 `docs/技术方案.md` 为待确认草稿，区分产品共识、技术建议、旧实现事实和待验证边界；该次只调整台账阶段、历史标识与证据，未新增详细实施项。下方初稿/Pi-only/收口提案及实验记录均保留当时状态，不覆盖本轮方案确认。
- 初稿验证：`git diff --check` 通过；人工核对草稿与当轮共识、历史记录边界及 Git 差异，修改范围仅为两份文档。`node --import tsx --test test/unit/resources.test.ts` 为 5/5 通过，仅检查既有 Package 资源，不证明新流程已实现；该测试只读取本地资源，未调用 Provider。
- Pi-only 文档同步：已完成。技术方案的组件职责、依赖、子会话、权限及验收边界已更新，人工核对当前设计中的依赖表述及历史边界，`git diff --check` 通过；改动仍仅为两份规划文档，`AGENTS.md`、依赖清单、代码与测试均未修改。已完整查阅本机 Pi `0.85.1` SDK 文档及官方显式资源、工具控制示例，确认存在创建会话、订阅、执行、中止、清理与持久化的公开入口；这不是多 Agent 运行实验通过证据。
- 方案收口提案：文档整理与核对已完成，已补充到技术方案第 8.1、8.4、11、13 节，方案仍待用户复审。批准正文使用只在确认时生成的 Pi Session 快照，当前文档可持续维护；操作权限不会随文件变化扩大，业务语义由父会话对照批准内容判断，不新增解析或分类引擎。启动进程的工具负责清理，writer 仅在执行结束、清理完成和终态记录成功后交接；普通失败可返工，用户取消保持暂停，未知终态保持只读。已核对 Pi 公开 `appendEntry`、Session 条目读取、`abort` / `dispose` 和命令执行取消接口；`git diff --check` 与文档一致性、改动范围检查通过，仅两份规划文档变化。该次文档整理未运行新实验、代码测试或真实模型；后续授权实验另记于下文，不将此前 SDK 实验当作新批准语义或完整清理逻辑的实现证据。
- 当前断点：第 13.44 节恢复父 TUI 手动 Shell 已完成实现与限定验收，基线仍为 `main / fc84c5e`，本轮 7 个既有文件的改动留在工作区。第 13.42 节简单任务按需文档已提交，见第 13.43 节；此前失败原因及修正分别保留在对应章节。开发依赖仍为 Pi 0.85.1，没有修改用户 Pi 安装/配置、重启现有会话或操作业务任务。
- 下一步：等当前任务正常结束后重新加载 Package，复验截图中的 `!pwd` 及 `!!pwd`，再继续真实小任务的按需文档试用；正常 reload 会使原 AI 授权失效。以真实简单任务观察是否减少文档操作，不把 fake provider 结果当成模型取舍质量证明。亚马逊原父会话仍应沿其专项台账核对现场、继续固定验收与独立审查；本仓库验证不代替业务测试或恢复批准。
- 未执行：本 Package 源码的第二次真实模型复审、partial-clone lazy fetch 假设复现、真实模型取消场景、各桌面终端视觉/输入法/快捷键映射体验、跨平台/其他版本及旧 canary。源码缺陷返工已有第 13.21 节隔离 CLI 证据；本轮断流恢复仅有 fake provider 故障注入，没有新的真实模型验证。未推送、创建 PR、安装、发布或部署，离线打包不等于发布。

#### 此前 SDK 最小实验记录

- 状态：已完成授权范围内的最小实验，方案阶段仍为进行中。临时目录为 `/private/var/folders/b0/vsckn5zn3w3dms0_3scbhv400000gp/T/pi-only-spike.8ydQtQ`，使用本机 Pi SDK `0.85.1`、Node `25.2.1`，不加载本仓库旧 Extension 或 `pi-subagents`。临时 `probe.mjs` 与 `sandbox.sb` 未合入仓库，`evidence.jsonl` 和 Pi Session 文件保留作证据。
- 隔离：已验证。`sandbox-exec -f <实验目录>/sandbox.sb env -i ... node <实验目录>/probe.mjs isolation` 退出码 0，SDK 公开 ESM 导入成功；真实用户目录内非敏感规则文件读取、localhost 网络连接均被系统策略拒绝。运行环境使用临时 HOME / agent dir 与清空后的环境变量，最终策略只允许实验目录及 `/dev/null` 写入；实验会话使用空凭证存储与 fake provider。证据保存在实验目录的 `evidence.jsonl`。
- 资源与工具限制：已验证。相同隔离命令运行 `probe.mjs resources` 退出码 0；真实 Pi SDK 成功执行 `read`，fake provider 强行请求的未开放 `write` 与 `subagent` 都产生错误工具结果且无目标写入。显式 ResourceLoader 未加载临时哨兵 Extension，默认 ResourceLoader 正向对照能加载该哨兵；这不是实际 `pi-subagents` 或任意第三方插件的共存认证。首次运行因沙箱禁止写 `/dev/null` 导致 `git init -q` 失败，属于实验配置错误；仅放行 `/dev/null` 后，`isolation` 与 `resources` 均复验通过，网络和真实用户目录读取仍被拒绝。
- 单 writer 交接：已验证单进程最小路径。相同隔离命令运行 `probe.mjs writer` 退出码 0；两个真实 SDK 会话由实验 guard 串行执行，第二个 writer 在首次模型调用前被拒绝，首个会话结束后才交接。受限工具拒绝 `../outside.txt`，允许的写入实际调用 Pi `createWriteTool()` 并核对文件内容；不是 SDK 自动互斥，也未验证生产跨进程 lease、完整路径竞争或 TOCTOU。
- 取消与外部进程终态：已验证。`probe.mjs cancel` 退出码 0；`session.abort()` 信号到达实验工具，SDK 会话结束并产生 `agent_end`，但工具启动的真实 Node 等待进程仍存活。实验显式终止并等待其退出，复验 PID 不存在；确认 abort 不能替代外部进程终态证明，生产 writer 交接仍须等工具清理和可证明终态。
- 中断后的持久记录与未知结果：已验证最小路径。`probe.mjs recovery` 退出码 0；在真实 SDK 工具写入 `partial.txt` 后、产生工具终态前，对实验 worker 进程发送 `SIGKILL`。Pi Session 文件保留运行 checkpoint 和工具调用、没有对应工具结果；重开真实 SDK 会话时 fake provider 调用为 0，部分文件不变，实验锁在未知状态期间拒绝替代获取。测试结束且 worker 死亡已确认后仅清理实验锁；不宣称父 TUI reload、所有持久化窗口或正式自动恢复流程已验收。
- 准备阶段问题：用 CommonJS `require.resolve()` 解析 Pi SDK 根导出失败，原因是它只提供 `import` 条件；已改用临时目录的模块符号链接和公开 ESM 导入并验证成功，未使用私有入口。这是实验加载方式问题，不是 SDK 多 Agent 能力失败。
- 最终复验：最终脚本逐次创建新的临时 Git 仓库，完整执行 `isolation`、`resources`、`writer`、`cancel`、`recovery`，5/5 退出码均为 0。取消实验与 SIGKILL 实验的外部进程都已等待退出；不等同于真实模型、正式 Package 回归、生产跨进程 lease 或父 TUI 恢复验收。`git diff --check` 通过；主工作区仍仅两份规划文档有改动，代码、依赖、测试与 `AGENTS.md` 均未修改，未 commit、push 或发布。

复验命令（`experiment_root` 为上面的临时目录；每项使用相同隔离设置）：

```sh
cd "$experiment_root" || exit 1
for item in isolation resources writer cancel recovery; do
  /usr/bin/sandbox-exec -f "$experiment_root/sandbox.sb" /usr/bin/env -i \
    HOME="$experiment_root/home" PATH=/opt/homebrew/bin:/usr/bin:/bin \
    TMPDIR="$experiment_root/" PI_CODING_AGENT_DIR="$experiment_root/agent" \
    PI_OFFLINE=1 PI_SKIP_VERSION_CHECK=1 PI_TELEMETRY=0 LANG=C \
    /opt/homebrew/bin/node "$experiment_root/probe.mjs" "$item"
  rc=$?
  if [ "$rc" -ne 0 ]; then exit "$rc"; fi
done
```

#### 能力继承对照与公开 API 复核

以下保留此前实验的真实结果；“完整运行态克隆”已由用户明确移出当前目标，不将未实现项改记为实验通过，也不再据此阻塞整个方案。

- 既有对照：已核对 `/private/var/folders/b0/vsckn5zn3w3dms0_3scbhv400000gp/T/pi-capability-inheritance.KajI1R/evidence.jsonl`、`probe.mjs` 和 `sandbox.sb`，本轮未重跑。5 类实验的 `passed` 表示现象被成功复现，不表示完整继承通过：同配置重载保留静态覆盖与钩子，但丢失运行中配置及 `late_memory_tool`；复制执行定义漏掉权限与结果钩子，并使 `ctx` 与 `pi.appendEntry()` 归属分裂；共享 Loader 使父记录写入子 Session；独立 Loader 的取消信号与 Session 归属正常，但没有验证外部进程清理。
- API 复核：已完成只读核对。本机 Pi `0.85.1` 的 `ExtensionAPI.getAllTools()` 只有元数据，未发现普通 Extension 取得父完整执行链的公开闭环；SDK 测试宿主能取得父工具定义，不代表普通 Package 也取得了这项权限。RPC 的 `prompt` 响应只表示接受，`agent_settled` 也不证明外部进程退出。RPC 原生支持确认等对话，但 `ui.custom()` 等 TUI 行为不受支持。依据为本机 `docs/sdk.md`、`docs/rpc.md`、`docs/custom-provider.md`、`docs/packages.md`、`docs/session-format.md`、公开声明和官方示例。
- 外部项目参考：已只读核对 `nicobailon/pi-subagents` / `c4a3a3c7b948a126e929d7f50540296bb1aba4d5`（源码版本 `0.65.1`）的 README、Agent 配置、公开集成 API、模型说明和子会话工厂。它证明可以不改 Pi 做委派，并提供规则、Skills 和插件加载配置；不证明原样继承父内存态。前台不自动加载环境扩展，后台重建资源，内置 worker 的严格白名单和 Skills 默认值可配置修改。后续 GitHub API 只读复核还确认其通过 Loader 私有 `loaded` 字段清缓存，不作为本项目可直接复用的公开 API。未安装、执行或恢复对该项目的依赖。

#### 此前授权隔离可行性验证

- 状态：此前已完成。它支持当前按配置重建环境的轻量编排方向；原先因完整继承产生的方案阻塞已按用户最新范围调整撤除，不将实验升级为正式产品验收。临时脚本不合入，Pi、正式源码、依赖、真实配置与旧 canary 未修改。
- 最小方案：只选择标准 Pi 受控 RPC 子进程，由普通 Extension 触发；不让测试宿主持有父 `AgentSession`，不自研模型循环。候选路径验证配置重建及执行边界，不能把它升级为任意运行态或 TUI 完整继承。临时原型限少量脚本与隔离策略，规则标记和临时 Git 制品由测试驱动创建，不增加生产配置面或插件适配平台。
- 文档同步：已完成。已核对最新对齐方向、能力要求、既有反证、标准 Pi 分发边界与本轮授权；`git diff --check` 通过，工作区仍只有两份规划文档变化。不将文档同步记为完整方案验收。
- 临时实验目录：`/private/var/folders/b0/vsckn5zn3w3dms0_3scbhv400000gp/T/pi-public-delegation.vxzzT7`，已创建隔离位置及指向本机 Pi 公共包的模块链接，未安装任何依赖。本轮 Pi `0.85.1`、Node `25.2.1`；后续命令必须在禁网、拒读真实 HOME、仅允许临时目录写入的系统策略下运行。

| 验证事项 | 状态 | 判断与证据 |
|---|---|---|
| 系统禁网、真实 HOME 拒读、临时配置与空凭证 | 已验证 | `node probe.mjs isolation` 与 `success` 在系统策略和 `env -i` 下通过，真实父、子 Pi 均拒绝网络和真实 HOME 读取，临时配置与空凭证已核对；两场景退出码均为 0。最终 4 个临时 `.mjs` 的 `node --check` 均通过 |
| 普通 Package 入口、覆盖工具、规则与 Skills、实际写入和检查 | 已验证（限定夹具） | `success` 通过：普通扩展创建标准 Pi RPC 子进程，子工具实际写文件和运行 Node 断言，读覆盖与结果钩子保留，基础指令、全局/项目规则与 Skill 描述进入独立模型上下文；父子原生记录不串线，父后续读操作正常。补强复验通过，父侧核对原始文件与检查结果 → 终态持久记录 → writer 交回 → 进度更新的顺序已核对；不是通用验收器 |
| 任意动态能力与父运行现场自动克隆 | 不纳入当前范围 | 既有反证保留，不改记为通过；某项任务确实依赖时再说明具体缺口，不作为整个编排的前置要求 |
| 缺失工具与权限失败的负向路径 | 已验证（限定夹具） | `missing`、`denied`、`guard-error` 均通过且退出码为 0：缺必需工具时子模型调用为 0、writer 未交出；权限明确拒绝或钩子抛错时目标未写入，不信任模型的完成宣称。已终止且清理完成的执行失败可交回 writer，但不记录成功进度 |
| 取消、进程清理、单 writer 与交接 | 已验证（限定夹具） | `cancel` 退出码为 0：父侧 `clear_queue` 后 `abort`，信号到达子工具，合作式临时进程 PID 实际消失，原生清理记录、子进程退出与终态持久记录之后才交回 writer；子执行期间父写入被拒绝，取消后暂停，排队任务未执行。不代表不合作/脱离进程的通用清理，也不代表正式跨进程 lease 原子性已验收 |
| 崩溃及终态记录失败 | 已验证（限定夹具） | `crash`、`persistence` 退出码均为 0：写入后子 Pi 被 SIGKILL，部分文件保留、缺少工具终态、lease 不交接，重开原生 Session 没有模型调用或重放且替代写入仍被拒绝；父 Session 文件只读导致真实持久化错误，成功制品保留但 lease 不交接、进度不报成功 |
| 交互归属与模型请求钩子 | 已验证（限定夹具） | `success` 中子请求的 payload / headers / 模拟 response 钩子各 5 次，模拟确认经父 RPC 转发后返回子 Session；`ui-denied` 退出码为 0，错误关联 ID 的允许回复不覆盖当前请求的拒绝，目标未写入。payload 回调由 fake provider 主动调用，不作为真实用户批准、真实 HTTP、任意交互或 TUI 完整继承证据 |
| 真实插件与模型体验 | 未验收 | 假插件和 fake provider 的机制验证不能替代；按实际任务需要限定验证，需另行授权，不做任意插件全兼容认证 |

本轮原始结果记录在上述临时目录的 `evidence.jsonl`，每条包含场景、状态、临时 Git 路径与脚本哈希；原生 Session 文件随后随场景记录。此处仍是唯一进度台账，临时 JSONL 仅为实验制品。首项 `isolation` 退出码为 0；临时 Package 由标准 Pi 从隔离 settings 加载，未传入父 `AgentSession`，也未导入 Pi 私有路径。

取消补充事实：标准 RPC 文档明确指出 `abort` 不清空待执行消息，队列非空时可能继续运行；模拟 Esc 的客户端须先 `clear_queue` 再 `abort`。本轮父客户端和子编排都显式清队列，未把 `abort()` 单独作为“不再续跑”的证据。

持久化补充事实：`persistence` 实际复现 `pi.appendEntry()` 写入失败后，相应条目仍可经 RPC `get_entries` 从内存读到，但原生 JSONL 中不存在。因此不能用“读回 Session 内存条目”替代落盘确认；本实验保留该差异并关闭交接，不修补 Pi，也不声称已覆盖断电持久性或所有崩溃窗口。

单元验证：已通过 7/7。临时 `probe.unit.test.mjs` 覆盖夹具权限、结果、确认、工具清理以及原生 Session 持久化边界，不修改仓库测试。首次隔离执行 `node --test --test-reporter=tap <实验目录>/probe.unit.test.mjs` 退出码 1，Node test runner 在启动时读取位于真实 HOME 下的 cwd，被策略以 `EPERM / uv_cwd` 拒绝，尚未运行断言；属于本轮测试启动目录错误，不是产品代码回归。仅改为从实验目录启动后复验退出码 0，7 通过、0 失败、0 跳过，原隔离策略未放宽；相关边界另有上表真实 Pi/临时 Git 证据，不把夹具单元测试当成正式产品全量覆盖。

最终证据复核：通过。`evidence.jsonl` 为 9 类场景、10 次集成运行、0 次失败（`success` 增加父侧取证顺序后复验一次）；另有上述单测启动目录失败及修正记录。对照原生父/子 Session、4 次正常工具调用及逐调用钩子、真实文件、临时 Git 状态与持久化失败现场，不只读 fake 模型总结。20 个集成相关 PID 复查均已消失；`isolation` 父进程和单测等待进程在各自运行中另已核对退出。当前集成脚本组合 SHA-256 为 `9839ed739e25abcaf97972d385845752b5014563d87409cf08ae152612013125`，单测文件为 `1c0467bd56ac8e3bda9dda1f33f8f766094acdee82f2b266346dccbda2dac00e`。首次 isolation 使用较早脚本哈希，其后只补强父侧成功验收顺序，隔离路径与策略未变。

补充只读源码复核记录：最初对固定提交的 `src/runs/shared/child-session.ts` 使用 `curl -q --fail --silent --show-error --connect-timeout 10 --max-time 20` 访问 `raw.githubusercontent.com` 时，curl 报 `(35) SSL_ERROR_SYSCALL`，整个过滤命令退出码 1，当时未将 Loader 私有缓存细节作为结论。后续解释 `pi-subagents` 机制时，通过 GitHub Contents API 读取同一固定提交成功，确认该细节及资源重建路径；未修改网络、安全或 Pi 配置，也未安装或运行该项目。源码参考不是本项目的执行证据。

复验命令（从实验目录启动；这是实验复现方式，不是继续执行授权）：

```sh
cd "$experiment_root" || exit 1
for item in isolation success missing denied guard-error ui-denied cancel crash persistence unit; do
  if [ "$item" = unit ]; then
    set -- --test --test-reporter=tap "$experiment_root/probe.unit.test.mjs"
  else
    set -- "$experiment_root/probe.mjs" "$item"
  fi
  /usr/bin/sandbox-exec -f "$experiment_root/sandbox.sb" /usr/bin/env -i \
    HOME="$experiment_root/home" PATH=/opt/homebrew/bin:/usr/bin:/bin \
    TMPDIR="$experiment_root/" PI_CODING_AGENT_DIR="$experiment_root/agent" \
    PI_OFFLINE=1 PI_SKIP_VERSION_CHECK=1 PI_TELEMETRY=0 LANG=C \
    GIT_CONFIG_NOSYSTEM=1 GIT_CONFIG_GLOBAL=/dev/null PROBE_ROOT="$experiment_root" \
    node "$@"
  rc=$?
  if [ "$rc" -ne 0 ]; then exit "$rc"; fi
done
```

此前实验停止点：未扩大实验、合入原型或修改正式 runtime、依赖、Pi。真实插件、真实模型、父侧交互批准、跨平台/版本、实际任务路径与 lease、外部进程清理、批准恢复与全部崩溃窗口均没有正式产品验收；任意插件运行态和父 TUI 的完整复制不再是当前目标。未 commit、push、PR、发布或部署。

#### 此前轻量自有编排文档同步

- 用户确认：类似按配置重建环境的方式已经足够编排，但不直接依赖 `pi-subagents`，由本项目自行实现简化版，不把这一套做重。
- 本轮范围：只改 `docs/技术方案.md` 与本台账；保留两次阶段确认，不修改正式源码、依赖、Pi、测试或既有临时原型，不新增实验。
- 设计规模检查：采用现有 Prompt / Skill / 窄职责 Extension 与 Pi 原生能力，不新增抽象层、配置面或文件；只保留一个受控执行路径。删除完整运行态克隆前置要求，不用另一套适配、兼容或状态同步系统保留它。
- 当时进度：已完成。已人工核对两份文档的最新授权、环境重建目标、自有实现规模、单执行路径、旧阻塞撤除与两次阶段确认；`git diff --check` 通过。Git 改动仍仅两份规划文档，`git diff --exit-code -- package.json package-lock.json extensions prompts skills test AGENTS.md` 退出码为 0，正式源码、依赖、资源和测试未变化。该轮未运行代码测试或新实验，未 commit、push、PR、发布或部署；当时父项仍为方案待确认，不标记开发完成。
- 已核对事实：主仓仍是 `main` / `e8bfb0f`；`package.json` 及 `extensions/delivery-gate/src/subagents.ts` 仍含旧 `pi-subagents` 接入，尚未实施移除。只读核对既有 `evidence.jsonl` 为 9 类场景、10 次集成运行、0 次失败，本轮未重跑，不将方向调整写成新实现完成。

### 13.2 旧实现基线与保留断点

- 当前代码基线：`main` / `e8bfb0f`（`fix: harden worker delivery boundaries`）。本次文档修改前工作区干净；本地分支相对缓存的 `origin/main` 超前 1 个提交，本轮未 fetch，不据此推断实时远端状态。
- 旧功能：R1—R29 Package 范围已有实现；旧版 M11 仍未完成，R29 修复后的亚马逊第七轮 canary 未续跑。本轮不进入或修改该现场，恢复条件保留在 R29 记录中。
- 既有自动化证据：此前只读梳理阶段复跑通过 typecheck、127/127 unit、99/99 integration、9/9 real Pi RPC E2E、离线 pack dry-run 和 `git diff --check`。offline production audit 为 0 vulnerabilities，不是最新在线漏洞扫描。
- 兼容性边界：开发依赖 Pi `0.84.4`，上述 E2E 实际启动本机 Pi `0.85.1`，不是全面版本认证。历史无网 Node `22.23.1` Linux 容器 typecheck、tarball 离线独立安装和依赖树检查通过；直接复用 macOS `node_modules` 的容器单测因 esbuild 平台二进制不匹配未通过。精确 Node `22.19.x`、Linux TUI / 原生 PNG 等仍无完整功能证据。
- 历史审查与人工验收：R28 / R29 最终限定复审已通过；亚马逊第六轮 canary 已 `DELIVERED`。真实 `/reload`、退出重进、字符终端图表及其他平台原生 PNG 等未执行项继续保留，不冒充新设计验收。
- Git 与发布：R29 代码已包含在当前 HEAD，原“R29 工作区未提交”的旧当前进度描述不再适用。本次仅有方案与台账文档改动，未 commit、push、创建 PR、npm publish 或部署。

### 13.3 已确认方案的详细实施计划

#### 确认与授权记录

- 方案确认：已完成。本会话上一条明确询问是否正式确认技术方案并授权编写详细实施计划，同时说明只更新文档、不修改代码；用户实际回复为“确认”。本记录反映当前协作授权，不冒充产品 TUI 批准功能已实现或已验收。
- 计划编制：已完成；本会话明确展示六阶段、18 个事项和计划位置后，询问是否确认计划并授权从 P1 开始重构，用户实际回复“继续”。本次回复与此前“继续完善计划”分属不同请求，当前已取得实施批准。
- 本轮授权：执行本节计划范围内的正式代码、资源、依赖、文档和隔离验证；不自动扩大到真实模型/用户配置、其他项目或发布。后续一次真实模型独立只读复审的具体授权另记 P6，默认禁网测试边界不变。各事项按下表的实际状态推进。
- 实施起始基线：`main` / `e8bfb0f`，当时工作区已有两份规划文档修改，正式实现仍依赖 `pi-subagents` `0.64.0`。此前 9 类 RPC 集成场景与 7 项夹具单测只作可行性依据，不替代正式实现的验证。

#### 执行范围与规模约束

本节是用户已确认的实施范围；范围之外的写入与外部操作不因实施批准自动开放。

- 实施获准后，范围为本仓库的 `extensions/`、`prompts/`、`skills/`、`test/`、`package.json`、`package-lock.json`、必要的 `tsconfig.json` 调整，以及 `README.md`、`AGENTS.md` 和两份规划文档；测试制品只写入隔离临时目录。不涉及其他项目、旧 canary、用户真实 Pi 配置或 Pi 安装目录。
- 默认在当前 worktree 由一个 writer 串行实现，不建立分支/worktree fleet。任何后续独立研究或 review 不获得写权限；写代码和更新台账均服从同一 writer 规则。
- 设计规模检查：优先重写现有入口和模块，窄 RPC 收发逻辑放入现有委派模块，不预先新建通用 transport、Provider、Agent 或插件适配层；父/子按同一 Package 的职责注册工具，不增加独立 Package、启动器或常驻服务。测试优先扩展现有宿主与夹具，不原样合入临时实验程序。
- 文件路径是当前代码上的工作落点，不是兼容要求。无调用者的旧文件直接删除，有效实现可以合并或直接复用；不得为了保留目录或旧测试接口增加垫片。若确实需要新增抽象层、配置面或超过约 5 个新文件，先单独说明必要性，默认继续采用最小方案。
- 模型、工具、Session、历史与压缩继续交给标准 Pi。角色和任务输入只描述本次目标、范围、必要上下文及产物，不建设 Agent 注册平台、任务树、业务规则引擎或第二套进度系统。
- 只保留标准 Pi RPC 子进程这一条执行路径。中间开发版本仅在临时实例验证，不加载进用户全局 Pi；未实现或未验证的写能力保持关闭，不为演示畅通增加假成功或备用后端。
- 旧 `pi-subagents` 接入、Tiny/combined 批准、完整计划 JSON 契约、create-only 文档、固定角色/读取/图表配额及旧 Session 恢复路径按已确认方案删除或重写；无关 IDE 元数据和用户改动不整理、不覆盖。

#### 实现顺序与记账方式

按 **P1 → P2 → P3 → P4 → P5 → P6** 推进。后续项可以复用前项已验证的代码，但不能将尚未取得的整体、交互或故障证据写成通过；真实交互待验项在最终收口前保持待验收。

每个下表事项是可独立验证的工作单元。完成后在本行更新状态及实际命令、结果、证据位置，再继续；部分完成保持进行中。遇到失败记录原因、是否由本次改动引入和处理结果，不能靠删除仍适用的断言、跳过用例或缩小权限要求换取通过。阶段编号只用于本台账，不进入产品 runtime。

##### P1 — 工程切换与受控只读执行底座

阶段状态：已完成（P1 限定范围）；不代表 P2—P6 的交付功能或完整安全边界已验收。

依赖：用户确认本实施计划并授权实施。

主要落点：`package.json`、`package-lock.json`、`extensions/delivery-gate/index.ts`、`src/subagents.ts`、必要的 `src/domain.ts` / `src/runtime-state.ts` 收敛，以及 `test/support/`、manifest / 委派 / RPC 测试。这里及下文的 `src/` 均相对于 `extensions/delivery-gate/`。

| 事项 | 状态 | 完成证据 |
|---|---|---|
| P1.1 建立正式隔离测试底座 | 已完成（限定范围） | 正式隔离入口执行 `test/integration/pi-isolation.test.ts` 为 2/2 通过（环境构造单元 + 真实 Pi 集成），typecheck 与 diff 检查通过。普通 Package、临时 Git、空凭证、实际禁网/HOME 拒读、真实 read、原生 JSONL 和退出均已核对；详见下方执行记录，不代表正式交付流程已实现 |
| P1.2 切换入口并脱离旧后端 | 已完成（限定范围） | manifest、bundle、运行代码和 lockfile 已脱离旧后端，删除失去调用者的旧契约和专用渲染；无 node_modules 的正式 Package 在隔离 Pi 加载自身资源并完成真实 read，重新激活的 write、同名 read 覆盖、RPC bash 均被拒绝。typecheck 与该项完成时全量 22/22 通过；详见下方记录，未宣称完整开发能力 |
| P1.3 实现唯一受控 RPC 路径 | 已完成（限定范围） | 普通 Extension 的受控只读委派、独立 Session、严格协议与收尾已验证；12 类真实 Pi 场景，最终全量 47/47、typecheck 与差异检查通过。子角色无父协调工具、无批准入口，不递归委派；29 个测试 Pi PID 均退出。详细证据及未覆盖边界见下方，不开放开发写入 |

最小验证：manifest、委派单元测试和真实 Pi RPC 加载/只读用例。测试失败退出、读后正常返回都应有证据；本阶段不宣称开发写入、完整批准或恢复已经实现。

P1 当前执行记录：

- P1.1 最小改动为四个测试文件：隔离执行入口、RPC 夹具、假 Provider 和隔离集成用例；尚未切换正式入口、依赖或旧测试。测试使用普通 Package 加载，不持有父 `AgentSession`，不安装依赖或调用真实模型。
- `node node_modules/typescript/bin/tsc --noEmit` 与 `git diff --check` 通过。首次 `node --import tsx test/support/run-tests.ts test/integration/pi-isolation.test.ts` 退出码 1：外层沙箱拒绝 Node 解析已授权源码路径时对 `/Users/sxie` 的 `lstat`，测试模块未加载，尚未运行断言。制品根为 `/private/var/folders/b0/vsckn5zn3w3dms0_3scbhv400000gp/T/adaptive-tests-rYO5YX`；属于本次测试宿主路径策略问题，不是运行时回归。
- 首次最小修正：允许源码祖先目录元数据读取后，测试模块可加载，环境构造用例通过；第二次同命令仍退出码 1（1 通过、1 失败），Pi 启动时报 `sandbox-exec: sandbox_apply: Operation not permitted`，macOS 不允许已沙箱化的子进程重复应用策略。制品根为 `/private/var/folders/b0/vsckn5zn3w3dms0_3scbhv400000gp/T/adaptive-tests-wGdfGD`，失败进程已关闭。
- 当前最小修正：仅在测试入口应用一次系统策略，由 Node 测试进程及 Pi 后代共同继承；仍只允许读取仓库源码/依赖及解析路径所需的祖先元数据，禁止真实 HOME 其他内容、所有网络和临时根外写入。Pi 用 HOME 目录内容读取而非 `stat` 验证拒读，避免把允许的祖先元数据误算成配置可读；等待复验，不复制依赖树或新增 staging 平台。
- 第三次同命令为 1 通过、1 失败，退出码 1：`spawn pi ENOENT`。原因是用 Node 实际安装目录构造 PATH，漏掉了 `/opt/homebrew/bin` 中的 Pi 入口；没有启动 Pi 或调用模型。改为只继承必要的 `PATH` 变量，其他环境仍显式构造，不复制凭证。该轮制品根为 `/private/var/folders/b0/vsckn5zn3w3dms0_3scbhv400000gp/T/adaptive-tests-DF8cKM`，等待复验。
- 第四次同命令仍为 1 通过、1 失败，退出码 1：Pi 已正常加载假 Provider，但命令来源路径断言失败。只读核对 Pi `0.85.1` 公开 Extension 文档及 RPC 实现，实际字段为 `sourceInfo.path`，不是 RPC 文档示例中的顶层 `path`；按当前公开来源字段修正，不加旧字段回退。该轮根为 `/private/var/folders/b0/vsckn5zn3w3dms0_3scbhv400000gp/T/adaptive-tests-gZtLCh`，仍未进入模型调用，测试收尾已等待 Pi 关闭。
- 第五次同命令通过：2/2、0 失败、0 跳过，退出码 0；复跑 typecheck 和 `git diff --check` 通过。原生 Pi `0.85.1` / Node `25.2.1` 的 PID `53438` 已退出，原生 Session 为 `/private/var/folders/b0/vsckn5zn3w3dms0_3scbhv400000gp/T/adaptive-tests-suqk7A/adaptive-pi-h3BEEJ/agent/sessions/2026-09-06T10-47-30-284Z_01a07654-96e8-70b2-9901-1b2f7ea34ae2.jsonl`。验证实际网络/HOME 目录内容读取均为 `EPERM`、临时凭证数 0、检查隔离前模型调用数 0；随后 fake provider 驱动真实 `read`，原文件不变、Unicode JSONL 未误分帧、shutdown 条目落盘，PID 探测为 `ESRCH`。该项只验证测试底座，正式入口仍待 P1.2 切换。

P1.2 执行证据：

- 重写 `extensions/delivery-gate/index.ts`、`src/policy.ts`；删除旧后端、Tiny/完整 JSON 计划、旧批准/恢复/候选链和专用渲染及对应旧测试。保留 `workspace.ts` 及其测试以供当前明确的后续需求复用，尚未将其接入新 writer。旧安全目标仍由 P2—P5 验收，不因删除旧契约测试而标记完成。
- manifest 仅加载自有入口、Prompt 和 Skill；删除生产依赖及 bundle。确认项目 `.npmrc` 不存在后，以空环境、临时 HOME/npm 配置、系统禁网执行 `npm install --package-lock-only --offline --ignore-scripts --no-audit --no-fund`，退出码 0，制品根 `/tmp/adaptive-npm.5geXqH`。未安装依赖、开启脚本、读取真实配置或修改 Pi 安装；本地 node_modules 未执行清理/重装，正式加载用例不复制它。
- 将 P1.1 新假 Provider 合并回现有 `test/support/fake-provider.ts`；三个新测试宿主文件保留。同步 README、三个 Prompt、Skill 和 AGENTS，避免资源继续引向已删除接口；标明只读中间态，不把目标流程当作实现。
- 首轮定向测试 9/9 通过；隔离 npm 配置下 `npm run test:all` 为 14 unit / 3 integration / 4 E2E，0 失败、0 跳过。随后补充权限元数据核对异常的显式拒绝分支及单测，最终 `node node_modules/typescript/bin/tsc --noEmit` 和 `node --import tsx test/support/run-tests.ts test/unit/*.test.ts test/integration/*.test.ts test/e2e/*.test.ts` 为 **22/22 通过**（15 unit / 3 integration / 4 E2E），退出码 0；最终根 `/private/var/folders/b0/vsckn5zn3w3dms0_3scbhv400000gp/T/adaptive-tests-YFte0p`。旧 workspace 工具的复验不等于新批准/父子 writer 边界验收。
- 原始证据含真实 read 正向、主动重新激活 write 后仍拒绝、运行时同名 read 覆盖未执行、RPC bash 未执行；负例均断言临时目标不存在。权限核对异常目前只有单测，真实 Pi 故障注入留后续边界矩阵。普通 Package 加载成功不等于 tarball 打包验收；本轮未 pack、未调用真实 Provider、未进行真实 TUI 或独立代码复审。
- 先前全量轮的 Pi PID `55040/55135/55155/55181/55205` 已额外用 `ps` 核实全部退出；最终轮测试均等待 Pi 关闭，隔离用例另核实 PID 消失和原生 shutdown 条目落盘。暂存区为空，未对主仓提交、推送或发布。
- 文档同步曾因整行上下文不匹配而部分补丁失败；已按工具要求重读失败文档再以唯一整行重试，不影响已通过代码测试。

P1.3 当前执行记录：

- 规模检查：在现有 `src/subagents.ts` 路径实现窄 RPC 委派，修改入口、权限和现有夹具，沿现有单元/生命周期测试路径补证；不新增后台 runner、用户配置或第二执行后端。当前只开放原生只读任务，完整必需环境重建仍由 P3.1 验收。
- 只读核对 Pi `0.85.1` 公开 `RpcClient` 及实现：它确实从包根导出，但当前会忽略非 JSON 行；`stop()` 先停止读取，再在超时发送 SIGKILL 后返回，没有公开的可靠进程关闭结果，且没有公开 UI 响应发送方法。不读取其私有字段或修改 Pi；本项使用标准 RPC 协议所需的最小自有管道处理。依据为官方 RPC/Extension/SDK/Session 文档、公开声明及子进程和 shutdown 示例，不是新实验通过证据。
- 初版 typecheck 及 `node --import tsx test/support/run-tests.ts test/unit/subagents.test.ts test/unit/policy.test.ts` 为 13/13 通过。首个真实正常委派定向用例退出码 1：子角色未正确识别，前置核对拒绝，没有调用子模型；根为 `/private/var/folders/b0/vsckn5zn3w3dms0_3scbhv400000gp/T/adaptive-tests-1QEYCq`，父/子 PID 为 `59344/59362`，已等待关闭。只读定位发现初次 factory 读取 CLI 扩展 flag 早于实参就绪，且假插件不能读取其他扩展未在自身注册的 flag。最小修正为子进程专用的内部环境标记，在加载前只降低角色权限，不新增用户配置文件或批准入口；等待原用例复验。
- 第二次正常用例仍退出码 1：子角色、独立 Session 与真实 read 已成立，但主动 SIGTERM 的 Pi 以 `143` 退出，未被报告为正常完成。根为 `/private/var/folders/b0/vsckn5zn3w3dms0_3scbhv400000gp/T/adaptive-tests-vl6BCH`，子 PID `59464` 已退出；原生日志有 read 终态与 shutdown 条目。改为通过来源已核实的内部子关闭命令调用公开 `ctx.shutdown()`，保留 clear_queue→abort 顺序；仅故障清理使用信号，不添加“143 也算成功”的兼容分支。等待同用例复验。
- 第三次正常定向用例 1/1 通过，根为 `/private/var/folders/b0/vsckn5zn3w3dms0_3scbhv400000gp/T/adaptive-tests-06c3HA`，父/子 PID `59619/59637`，子 Pi 退出码 0，有独立 Session、真实 read、关闭落盘及 PID 已退出证据。随后 11 场景矩阵为 9 通过、2 失败（根 `adaptive-tests-LPMC7W`）：缺工具场景在后加载插件变更工具前生成了过早快照，违反“模型前拒绝”；坏协议场景的 `process.stdout.write` 被 Pi 重定向，未实际损坏管道。前者先改为所有启动钩子完成后调用内部只读核对命令，所有内部命令在实际调用前核实当前实现来源；后者暂待修正故障注入。均为本次实现/夹具引入，不计通过。
- 过早快照修正后，正常与缺工具定向 2/2 通过（根 `adaptive-tests-RFh95k`）；缺工具子 PID `60444` 未调用模型且退出码 0。坏协议夹具现改用测试专用 `writeSync(1, ...)` 直接损坏管道，不修改 Pi 的输出隔离，等待原场景复验。
- 坏协议定向复验 1/1 通过（根 `adaptive-tests-QRts8N`），子 PID `60505` 关闭，任务未报成功。当前继续补齐来源核对单测、真实会话制品丢失负例和取消不续跑断言；最终正文改为关闭后仅从原生持久 Session 取得，减少一次 RPC 内存读回，不维护第二份结果台账。完整矩阵及回归尚待执行。
- 最新定向 typecheck 与 policy / 委派单测 / 生命周期集成为 **28/28 通过**，退出码 0，根为 `/private/var/folders/b0/vsckn5zn3w3dms0_3scbhv400000gp/T/adaptive-tests-YVzeIw`。12 个真实 Pi 场景已通过：正常、任务前缀防命令执行、缺工具、缺 Pi、启动失败、真实 read 失败、递归尝试、坏协议、工具终态前 SIGKILL、关闭后 Session 丢失、交互拒绝与取消；取消包含先清父队列且父模型未续跑。fake provider 只验证机制，崩溃没有完整工具终态记为 unknown；没有开发写入或外部子进程清理验收。正在补同名协调工具覆盖的真实负例及全量回归。
- 同名协调工具被替换为有写副作用的实现后，实际调用被拒绝、目标未创建；连同旧只读边界的真实 E2E 为 **5/5 通过**，根 `adaptive-tests-Z4TmR4`，退出码 0。内部命令同名异源拒绝目前是单测证据，真实覆盖注入、强制清理超时、父持久化失败、重载/恢复、真实插件与 TUI 等完整边界仍待后续阶段，不由本项包揽。
- 首轮全量为 **47/47 通过**（27 unit / 15 integration / 5 E2E），根 `adaptive-tests-MOVpIZ`，退出码 0。同时执行的 typecheck 退出码 2：新增 E2E 的 `find` 结果缺少存在性缩窄（TS18048），由本次测试修改引入；因此串联的 Git 检查没有执行。最小修正为补 `assert.ok(result)`，不改生产行为；正在复验最终候选，不把该轮 typecheck 记为通过。
- 最终候选复验：`node node_modules/typescript/bin/tsc --noEmit`、`git diff --check`、`git diff --cached --quiet` 全部退出码 0；最终全量仍为 **47/47 通过（27 unit / 15 integration / 5 E2E），0 失败、0 跳过**。全量命令为 `node --import tsx test/support/run-tests.ts test/unit/*.test.ts test/integration/*.test.ts test/e2e/*.test.ts`；执行时仅用 `awk` 过滤冗长诊断展示，启用 `pipefail`，不修改测试或退出结果。最终制品根为 `/private/var/folders/b0/vsckn5zn3w3dms0_3scbhv400000gp/T/adaptive-tests-pERQDN`；逐一读取该根假插件观察记录，29 个 Pi PID 的存在性检查全部为 ESRCH，没有存活 Pi。环境仍为 macOS、Node `25.2.1`、Pi `0.85.1`，系统禁网、临时 Git/HOME/agent dir、空凭证与 fake provider；不把工作区 lease 旧单测算作新父子 writer 接入。
- P1 父阶段及 P1.3 至此按限定范围完成，README、Skill 与技术方案已同步。内部角色标记不是批准，工具门禁不是插件代码沙箱；P2—P5 的批准、写入、完整环境、外部进程清理、父持久化与恢复继续待实施/验证。未调用真实 Provider 或独立审查 Agent，未进行真实 TUI、实际 tarball 加载或跨平台验收；本项没有依赖安装、提交、推送、打包、发布或部署。

##### P2 — 两次批准与可持续编辑的规划文档

阶段状态：P2.1—P2.3 的机制、正式文档入口及受影响回归已完成限定自动化；后续用户拒绝场景和授权代理真实 TUI 按键补证见 P6.3，P2 父项据此完成限定交互验收。下表保留本阶段取得自动化证据时的范围，不扩大为全部终端体验认证。

依赖：P1 的入口、隔离宿主及默认关闭写权限的执行边界就绪。

主要落点：`src/approvals.ts`、`src/planning-documents.ts`、`src/parent-writer.ts`、`src/policy.ts`、`src/workspace.ts` 及父入口；对应审批、规划文档、策略和生命周期测试。不恢复已删除的旧授权或 runtime 模块。

| 事项 | 状态 | 完成证据 |
|---|---|---|
| P2.1 实现分阶段授权与批准正文记录 | 已完成（限定机制） | 三项授权分离；父 TUI 请求、原生展示正文及确认引用、来源和正文完整性、失败关闭已有模拟 TUI 单测与真实 RPC/子 Pi 拒绝证据。最终全量 78/78、typecheck 与差异检查通过，36 个测试 Pi PID 已退出。写权限保持关闭，真实用户 TUI 正向交互仍留 P6，不算本项自动化通过 |
| P2.2 支持批准前后正常维护活动文档 | 已完成（限定自动化；真实交互待 P6） | 正式 SDK/模拟交互证明草稿先落盘、两次阶段确认后持续编辑、保留用户内容、无固定 Markdown 契约及持久批准快照不变；受影响回归 158/158、最终全量 231/231 通过。原生工具终态后交回 writer，普通编辑失败可在原授权内修正 |
| P2.3 在实际执行边界落实最小权限 | 已完成（限定自动化；真实交互待 P6） | 17 项正式 SDK/模拟交互集成与 6 项新增标准 CLI 拒绝证据，覆盖静态/后置同名覆盖、授权失效、越界与链接、持有 writer 时取消、reload/tree、终态篡改和真实写盘故障；阶段全量 231/231、typecheck 与 diff 检查通过。该阶段仅开放规划文档，开发另见 P3 |

最小验证：审批、授权、规划文档、policy 单元测试，以及临时 Git/真实 Pi 的允许文档编辑与禁止源码变更用例。自动化的模拟确认不作为本项目实施授权；真实 TUI 用户确认的正向采证列入 P6，在取得前保持待验收，不增加测试专用生产批准后门。

P2.1 执行记录：

- 规模检查：仅恢复 `src/approvals.ts` 作为当前批准模块，修改父入口与既有 policy；补批准单测和真实 Pi 拒绝用例，复用测试宿主。暂不恢复旧 authorization/domain/runtime-state，不实现第二批准平台、用户配置或写入授权回退。正文展示与用户确认分别为 Pi 原生条目，确认只引用展示正文，不复制第二份活动计划。
- 公开能力取证：完整阅读当前 Pi Extension、Session 格式/会话、TUI、compaction 与 keybindings 文档及相关示例；`ctx.mode === "tui"` 才接受批准，不能用 RPC 同样为真的 `hasUI` 代替。只读源码确认首次 assistant 前可能不写 Session，append 异常后内存也可能残留条目；本项读回原生文件确认持久记录，不修改 Pi 私有状态或伪造 assistant 来触发写盘。文档发现阶段曾查询不存在的 `docs/session.md` 导致 `wc` 退出码 1，后按真实路径 `session-format.md` 完整读取，不是测试失败。
- 初版只记录批准，文档/源码写入仍由只读门禁拒绝；分支导航、重载或换 Session 清除本轮可信方案引用，不从摘要、子 Agent 或旧 Session 自动恢复。完整恢复属于 P5，真实用户 TUI 正向采证属于 P6。
- 初轮 `node --import tsx test/support/run-tests.ts test/unit/approvals.test.ts test/unit/policy.test.ts` 为 **25/25 通过**，制品根 `adaptive-tests-2CFzJA`；模拟 TUI 的三个独立确认和真实临时 Session 的未写盘/只读文件故障均有断言。同期 typecheck 退出码 2：测试 helper 默认值将两个空数组推断为 `never[]`，导致合法测试参数 TS2345，属于本次测试代码；只补明确测试输入类型后复验，不修改生产逻辑以迎合测试。
- 测试类型修正后 typecheck 通过；真实 Pi 定向批准拒绝用例 **5/5 通过**，根 `adaptive-tests-aJ6sc6`。RPC 三类阶段请求和已删除的 combined 路径均无批准落盘、未发出选择/确认交互；伪造 `extension_ui_response` 不能放权。真实子 Pi 未注册批准工具，子模型请求失败且子 PID `67810` 已退出。随后补查 cwd 别名与确认期间正文完整性，尚未记录这些新增用例通过。
- 新增三个边界定向测试均失败（0/3，退出码 1，根 `adaptive-tests-YObKJJ`）：cwd 符号链接被错误地与 canonical 字符串比较；已批准正文及等待确认正文被外部替换后，未在确认点拦截。均为本次初版实现缺陷。先修正 cwd 比较为本次开始时的原始 cwd，持久归属仍使用 canonical workspace；正文问题另行最小修复，写权限未开放。
- cwd 别名定向复验 **1/1 通过**（根 `adaptive-tests-hkypxn`）。随后正文修正集中在原生记录可信读取处：要求磁盘条目与当前分支中的原条目一致；用户选择确认后再核实本次展示正文及引用方案没有在等待期间变化。不按活动 Markdown 的整文件变化撤销批准，不实现语义判断器；待原正文故障用例复验。
- 正文问题修复后 `test/unit/approvals.test.ts` **23/23 通过**（根 `adaptive-tests-2NKEc9`）；此前三个失败均已通过。继续补同名批准工具覆盖的真实调用负例；不批准时返回 Pi 的 `terminate: true`，提示父会话暂停而不自动重问。该字段是原生工具批次终止提示，只有该批次所有工具均终止时生效，不宣称它可以独自停止所有并发活动。
- 最新 typecheck 与 `test/unit/approvals.test.ts test/unit/policy.test.ts test/e2e/rpc-resource-discovery.test.ts` **35/35 通过**，根 `adaptive-tests-azSjZe`；新增真实 Pi 同名批准工具被写副作用实现覆盖仍被门禁拒绝，目标未创建。模拟 TUI 是单测函数替身，不是实际用户点击/按键；原生 SessionManager 单测使用本地开发依赖 Pi `0.84.4`，真实 CLI 用例使用标准 Pi `0.85.1`，均在 Node `25.2.1` 的隔离宿主下，不能混称真实 TUI 或跨版本完整认证。README、Skill 和技术方案已按当前能力同步，正在全量回归。
- 确认引用复查新增“等待实施确认期间先前方案批准来源被修改”用例，首次 0/1、退出码 1（根 `adaptive-tests-DeLXp4`），证明原来只复核方案正文仍不足；属本次实现遗漏。最小修正是在最终确认点同时核实引用的方案批准记录仍与原生分支记录一致，不引入新状态或恢复入口，待同用例复验。
- 该引用来源用例修复后 **1/1 通过**，根 `adaptive-tests-No7jBh`，退出码 0。现在进行最终全量，仍不提前标记 P2.1 或 P2 父项完成。
- 最终候选：`node --import tsx test/support/run-tests.ts test/unit/*.test.ts test/integration/*.test.ts test/e2e/*.test.ts` 为 **78/78 通过（52 unit / 20 integration / 6 E2E），0 失败、0 跳过**，退出码 0。根为 `/private/var/folders/b0/vsckn5zn3w3dms0_3scbhv400000gp/T/adaptive-tests-6ZDm5f`；`node node_modules/typescript/bin/tsc --noEmit`、`git diff --check`、`git diff --cached --quiet` 均退出码 0。按该根假插件观察记录核实 36 个 Pi PID 均为 ESRCH，无存活 Pi；实际网络/HOME 内容访问仍为 EPERM、凭证数 0。所有本次失败及最小修正已记录，不把失败轮次写成通过。
- 本项修改 `src/approvals.ts`、父入口、policy、批准/权限/生命周期/E2E 测试和既有 fake provider；同步 README、Skill 与两份规划文档。没有生产测试批准后门，没有恢复旧授权代码、兼容层、依赖变更或第二台账。P2.1 到此按限定机制完成，P2 父项仍进行中；下一项 P2.2/P2.3 开放活动文档时必须同时落实实际工具/路径与 canonical writer 边界。
- 未验收项：真实用户 TUI 的正文可见性、选择及取消交互；`terminate` 在真实 TUI 工具批次中的效果；完整持久化故障与恢复；开发写入、必需插件环境与外部进程清理；实际 tarball 加载、真实 Provider、独立模型复审及其他平台。JSON/print 拒绝目前为模式单测，真实 CLI 证据为 RPC，不能混称所有模式 E2E 已通过。本项未调用真实模型、控制桌面或修改真实 Pi 配置，未安装依赖、提交、推送、打包、发布或部署，暂存区为空。

P2.2 当前执行记录：

- 本轮小步范围为两个文件：`src/planning-documents.ts` 与 `test/unit/planning-documents.test.ts`。底层复用公开 `createEditTool` / `createWriteTool`，不实现替换算法、Markdown 标题契约或第二计划结构；通过自有 I/O 检查明确路径与父 lease，保留原生变更队列与取消等待行为。函数参数是内部调用条件，不是用户批准或新的配置入口。
- 只读核对当前 Pi 公开 edit/write 声明及实现：原生 write 在写文件前先创建目录，因此必须在进入原生操作前拒绝未授权目标；edit 保留原生多段匹配与 BOM/换行行为。没有导入 Pi 内部路径或改变依赖。
- 首轮定向 `node --import tsx test/support/run-tests.ts test/unit/planning-documents.test.ts` 为 **20/20 通过、0 失败/跳过**，退出码 0；根为 `/private/var/folders/b0/vsckn5zn3w3dms0_3scbhv400000gp/T/adaptive-tests-M19myP`。同期 `node node_modules/typescript/bin/tsc --noEmit` 退出码 0。覆盖创建、持续编辑、完整重写、用户随后增加的正文、BOM/CRLF、冲突匹配不部分写入、明确路径、源码/链接拒绝、父 lease 身份错误/缺失/损坏、输入数组变更、预先取消和实际文件权限错误。原生工具来自本地开发依赖 Pi `0.84.4`，不是 CLI `0.85.1` 或真实 TUI 接入证据。正在补充排队失权/取消、并发编辑及 canonical cwd 测试。
- 补测定向 `node --import tsx test/support/run-tests.ts test/unit/planning-documents.test.ts test/unit/workspace.test.ts` 为 **36/36 通过（文档 26 / 既有 lease 10）、0 失败/跳过**，退出码 0；根为 `/private/var/folders/b0/vsckn5zn3w3dms0_3scbhv400000gp/T/adaptive-tests-HRofX6`。新增明确列入范围的源码/越界路径仍拒绝、同文件并发编辑保留两次修改、初次核验后的 lease/链接/取消变化拒绝，以及 canonical cwd 别名与另一会话竞争 writer；队列使用 Pi 公开 `withFileMutationQueue`，没有测试专用生产分支。typecheck、`git diff --check`、`git diff --cached --quiet` 同期退出码 0。全量回归待结果。
- 最终全量 `node --import tsx test/support/run-tests.ts test/unit/*.test.ts test/integration/*.test.ts test/e2e/*.test.ts` 为 **104/104 通过（78 unit / 20 integration / 6 E2E）、0 失败/跳过**，退出码 0；根为 `/private/var/folders/b0/vsckn5zn3w3dms0_3scbhv400000gp/T/adaptive-tests-65FClo`。原有真实 CLI `0.85.1` 的批准拒绝、来源覆盖、只读委派和隔离场景没有回归；不把这些旧边界算作新文档写入接入证据。实际网络与真实 HOME 内容访问为 EPERM，凭证数 0；未使用真实 Provider 或 TUI。
- 收尾 PID 核验首次 `node --input-type=module -e ...` 将审计文件路径误写为 `<fixture>/fixture-events.jsonl`，退出码 1、ENOENT，尚未完成核验；用 `rg --files --hidden --no-ignore <root> -g fixture-events.jsonl` 确认实际位于 `<fixture>/agent/` 后，仅修正只读命令路径。复核退出码 0，36 个 Pi PID 均为 ESRCH，`live: []`、`unknown: []`。这是取证命令路径修正，不是测试失败或产品修复。
- 本轮仅重建 `src/planning-documents.ts`、对应单测并同步 README、技术方案与本台账，没有恢复旧文档模块、兼容层、配置面或改变依赖。未 commit、push、PR、打包、发布、部署或修改用户 Pi 配置。P2.2 仍为进行中，下一步须接入可信批准、实际工具来源、父 writer 生命周期和真实 Pi/临时 Git 新流程验证。
- 正式入口、P2.1 批准流程与现有只读门禁不变。底层不获取、释放或交接 writer，成功/失败/取消后均由调用方负责生命周期。已知边界：路径检查与 `mkdir/open` 不是一个原子操作，`O_NOFOLLOW` 只约束最终分量，不能隔离外部进程在检查间隙替换祖先目录；文件写入错误也不保证回滚已发生的部分 I/O。本轮不能作为 P2.3 已接入、真实批准后的编辑、并发目录置换强隔离或持久终态收尾验收。P2 父项继续进行中。

阶段性提交复核：

- 独立授权：用户在“仅做本地阶段性提交、不推送、不发布”的明确说明后回复“先提交”。本次基线包含 P1、P2.1 及 P2.2 内部文档底层的累计重构、对应测试、依赖/资源清理和文档，共 54 个变更文件；暂存区原为空，核对后均属已授权范围，没有夹带无关文件或本地测试制品。
- 提交前重新执行 `node node_modules/typescript/bin/tsc --noEmit`、`node --import tsx test/support/run-tests.ts test/unit/*.test.ts test/integration/*.test.ts test/e2e/*.test.ts` 与 `git diff --check`，均退出码 0；全量 **104/104 通过（78 unit / 20 integration / 6 E2E），0 失败、0 跳过**。新制品根为 `/private/var/folders/b0/vsckn5zn3w3dms0_3scbhv400000gp/T/adaptive-tests-COZkuB`，36 个测试 Pi PID 均为 ESRCH，`live: []`、`unknown: []`。仍为系统禁网、临时 Git/HOME/agent dir、空凭证与 fake provider，没有真实模型或 TUI 操作。
- 复核 manifest/lockfile：移除旧后端及不再使用的渲染依赖，没有新增包或依赖版本变动；三个未跟踪文件均为已验证的隔离测试宿主。只核查 Git hooks 路径与签名开关，未改变 Git 配置或绕过现有 hooks；当前无实际 hook，签名开关未设置。
- 本次提交是开发阶段基线，不是功能交付或发布。P2.2、P2 父项仍为进行中，P2.3 及后续实现/真实 TUI 验收待完成，正式入口保持只读；旧命令/契约/Session 不提供兼容。提交身份以 Git 原生记录为准，不推送、不创建 PR、不打包发布或部署。

P2.3 文档批准核验前置：

- 用户在下一步范围说明后要求“稳中求进，要仔细验证”。当前基线为 `414f216`，开始时工作区干净；本轮仅在 `src/approvals.ts` 返回供后续编辑入口使用的内部核验函数，补充原有批准单测并同步文档。不新增模型工具、配置文件、持久化格式或授权后门，不开放文档/源码写权限。
- 已核对当前批准模块、文档底层、原生 Session 格式与 compaction 文档；原生 `getBranch()` 与模型压缩上下文不同，摘要不构成批准来源。发现共享可变条目和确认期间 Session 文件变化尚需反证，先增加三个定向回归用例，未提前报告通过。
- 三个反例首次运行 **0/3、退出码 1**，根 `/private/var/folders/b0/vsckn5zn3w3dms0_3scbhv400000gp/T/adaptive-tests-mPVM3W`；命令为 `node --import tsx test/support/run-tests.ts --test-name-pattern='文档确认期间同时|保存文档批准时|确认期间换到同' test/unit/approvals.test.ts`。前两项为 `Missing expected rejection`：原生条目和私有待批准对象共享引用，内存/磁盘同时变化后仍可成功；第三项确认期间换到同 ID 的复制 Session 文件，虽最终报错，但旧文件已经追加一条批准，断言 `1 !== 0`。均是基线已存在、此次新反例发现的遗漏，正式写权限仍关闭。先对交给 Session 的数据做独立复制，并在确认点与原展示正文比较；文件绑定随后单独修正。
- 共享可变数据修正后，同一入口定向前两项 **2/2 通过**，根 `adaptive-tests-MOdkge`，退出码 0。现在只补确认期间的 Session 文件路径绑定，使同 ID 复制文件也在追加批准前失效，不改变原生 Session 格式；第三项待复验。
- Session 文件绑定反例 **1/1 通过**，根 `adaptive-tests-Dx1ZGc`，退出码 0。随后实现内部 `readDocumentApproval(ctx, signal)`：本轮确认对象只在内存保留，核验函数每次读取原生文件并对照本轮私有正文/来源、当前分支、Session 文件和 canonical worktree；返回独立路径数组，不写新记录、不获取 writer。文档重新请求时清除旧引用，只采用本次完整范围；拒绝、取消、异常或核验失败不回退历史范围。生命周期失效仍复用既有事件，不新增恢复状态机。正在运行新增核验用例，尚不记通过。
- 初版内部核验及原有批准测试 **57/57 通过**，命令 `node --import tsx test/support/run-tests.ts test/unit/approvals.test.ts`，根 `adaptive-tests-dDgx3R`，退出码 0；同期 typecheck 与差异检查通过。覆盖阶段隔离、范围替换、取消/写错不回退、生命周期、重新安装/摘要/伪造记录、返回对象隔离、内存与磁盘篡改、真实文件故障、分支/canonical cwd 及核验途中的会话/文件/取消变化。复核又发现批准与正文分别读盘可能混用不同时刻的内容，正在追加交错改写反例，尚不把初版当作最终候选。
- 交错改写新反例首次 **0/1、退出码 1**，根 `adaptive-tests-DinDJo`，定向模式 `--test-name-pattern='文档核验不得混用'`。第一份内容只有批准有效、第二份只有正文有效，初版仍返回成功（`Missing expected rejection`），是本轮新增核验引入的遗漏。最小修正是扩展原 `persisted()` 支持同次读取多个引用：一次读原生文件、一次取当前分支后同时核对批准与正文，不增加重试、记录或持久化格式；原批准流程适配同一私有函数，待反例和完整批准测试复验。
- 同一交错改写反例修正后 **1/1 通过**，根 `adaptive-tests-0GuGGc`，退出码 0；typecheck 同期通过。当前只做内部批准核验，不注册编辑工具或获取 writer；正在全量复验共享读取函数及原有阶段确认/RPC 拒绝边界，P2.3 和 P2 父项不标完成。
- 最终全量 `node --import tsx test/support/run-tests.ts test/unit/*.test.ts test/integration/*.test.ts test/e2e/*.test.ts` 为 **138/138 通过（112 unit / 20 integration / 6 E2E），0 失败、0 跳过**，退出码 0；批准单测 58 项，其中本轮新增 34 项，包含全部曾失败反例。根为 `/private/var/folders/b0/vsckn5zn3w3dms0_3scbhv400000gp/T/adaptive-tests-5V6Wou`；原有真实 Pi RPC 的批准拒绝、同名工具覆盖和只读委派均未回归。typecheck、`git diff --check`、`git diff --cached --quiet` 通过。按该根审计逐个核实 36 个 Pi PID 均为 ESRCH，`live: []`、`unknown: []`；实际禁网与真实 HOME 内容拒读仍为 EPERM，凭证数 0。
- 证据边界：新增文档核验正向是本地 SDK `0.84.4`、真实临时 Git/Session 文件加模拟 TUI 的单测，不是用户真实选择或正式编辑入口的真实 Pi 接入。CLI `0.85.1` 用例仅证明已有拒绝和只读行为未回归。核验函数返回该次读取的结果，不锁住文件/Session，也不授予持续写权限；父 writer 生命周期、文档实际编辑、路径置换/部分写入故障、完整恢复与真实 TUI 继续待验收。P2.2、P2.3 与 P2 父项均保持进行中。
- 改动仅在 `src/approvals.ts`、`test/unit/approvals.test.ts`、README 和两份规划文档；没有新文件、配置面、依赖变更、旧兼容逻辑或新持久化格式。未提交、推送、创建 PR、打包、发布、部署或操作用户 Pi 配置；此前 `414f216` 的提交授权不沿用到本轮。

P2.2 / P2.3 实时批准失效与 I/O 收尾前置：

- 用户继续授权开发，保留开始时五个未提交文件。本小步先接内部实时核验、批准失效信号及 I/O 清理证据，不注册正式编辑工具、不获取或释放生产 writer。核对公开 Extension 事件及标准 Pi 实现：`turn_end` 在原生工具结果追加之后触发，可作为下一步终态落盘核验的触发点；当前尚未实现该释放流程，不新增逐工具状态账本。
- 文档底层的两个新增反例先运行 **0/2、退出码 1**，制品根 `/private/var/folders/b0/vsckn5zn3w3dms0_3scbhv400000gp/T/adaptive-tests-knkE7P`；命令 `node --import tsx test/support/run-tests.ts --test-name-pattern='持有 lease 不能|排队期间批准失效' test/unit/planning-documents.test.ts`。均为 `Missing expected rejection`，证明既有未接入底层不能只凭 lease 或首次核验保证后续写入授权，不代表已开放入口出现越权。
- 五个生命周期信号反例先运行 **0/5、退出码 1**，根 `adaptive-tests-EP8Txp`，定向模式 `--test-name-pattern='生命周期信号|立即取消旧执行|损坏时取消旧信号'`；旧接口没有信号，`instanceof AbortSignal` 断言失败。`readDocumentApproval()` 现只额外返回本轮批准的取消信号：新文档请求、会话生命周期及核验失败同步失效，不恢复旧信号；仍须实时读盘核验，未取消的信号不等于当前批准有效，不新增持久格式或授权入口。
- 文档底层要求调用方提供 `authorize()` 和该取消信号，在创建目录、打开写句柄及截断前重新核验；与工具取消合并，截断之后取消不再开始内容写入。文件读写均等待句柄关闭，并暴露只会锁定为真的 `cleanupFailed` 事实，不能把 Promise 结束等同于清理成功。底层仍不管理 lease 生命周期。
- 初次修正后批准与文档单测 **91/91**、typecheck 通过，根 `adaptive-tests-FSfAwX`。继续补交错及故障测试，根 `adaptive-tests-yNoodq` 为 **6/7、退出码 1**：最终批准核验期间 lease 被释放仍继续截断（`Missing expected rejection`），是本轮新增回调顺序的遗漏；同时 typecheck 报测试边界数组推断为 `string`（TS7053/TS2769）。仅将 lease 检查放到批准核验之后，利用生命周期信号拒绝等待期间的批准失效，并为测试数组加 `as const`。
- 修正后 `node --import tsx test/support/run-tests.ts test/unit/planning-documents.test.ts test/unit/approvals.test.ts` **98/98 通过**，根 `adaptive-tests-pzghds`，typecheck 退出码 0。覆盖前述反例、打开/截断后的取消、真实文件部分写入加故障注入、读写关闭错误，以及取消时 Promise/原生队列等待在途 I/O 和关闭结束。关闭错误由测试在实际关闭后注入，不冒充真实 FD 泄漏或 OS 故障验收；部分内容保留，不回滚、不释放 lease。
- 真实批准核验与文档底层的组合单测 **5/5 通过**，根 `adaptive-tests-Iha3pP`，定向模式 `--test-name-pattern='真实批准核验与'`：复用本轮批准和真实 Session 持续编辑，拒绝源码；新批准、分支导航、磁盘损坏及工具取消均阻止排队写入。仍使用模拟 TUI，不能充当用户交互验收。标准 Pi CLI 首个底层成功场景 **1/1 通过**，根 `adaptive-tests-B9ZKul`；只通过独立测试扩展直接调用内部底层，产品批准模块和工具权限不变，无 `delivery-approval` 记录。typecheck 通过。
- CLI 创建/持续编辑、拒绝批准、拒绝源码、排队失效/取消/失去 lease 共 **6/6 通过**，根 `adaptive-tests-O0EXqt`。随后扩展关闭失败后的再次写入断言，根 `adaptive-tests-0SN5LN` **0/2、退出码 1**：新标志虽保留，但仍开始第二次写入，只在再次关闭时失败，错误为 `fixture close failure` 而非前置清理拒绝，是本轮新增收尾接口的遗漏。在原父 writer 检查中拒绝已出现清理失败的实例后，同一反例 **2/2 通过**，根 `adaptive-tests-G8r69p`。
- CLI 在途取消、部分写入和关闭失败三项扩展 **3/3 通过**，根 `adaptive-tests-qlan5h`，typecheck 通过。真实 Pi 原生队列等待在途写入和关闭，取消不提前解决 Promise；部分内容保留；清理失败后拒绝再次写入且 lease 保留。延迟、部分失败和关闭错误均由独立夹具拦截指定文件句柄注入，未改 Pi 或生产 API、未提供批准后门；不能冒充磁盘硬件故障或真实用户操作。
- 最终全量 `node --import tsx test/support/run-tests.ts test/unit/*.test.ts test/integration/*.test.ts test/e2e/*.test.ts` **166/166 通过（131 unit / 29 integration / 6 E2E），0 失败、0 跳过**，退出码 0；根 `/private/var/folders/b0/vsckn5zn3w3dms0_3scbhv400000gp/T/adaptive-tests-bcUc1L`。较本轮开始新增 19 项单测与 9 项 CLI 底层集成，包含全部失败反例；原有 RPC 批准拒绝、同名覆盖和只读委派未回归。typecheck、`git diff --check`、空暂存区核查通过。全量 45 个 Pi PID，以及本轮此前三个 CLI 定向根的 10 个 PID，合计 55 个均为 ESRCH，`live: []`、`unknown: []`。系统禁网、真实 HOME 内容拒读为 EPERM，凭证为 0。
- 证据边界：本地 SDK `0.84.4` 的组合测试仍模拟 TUI；标准 CLI `0.85.1` 只在独立夹具中直接调用内部文档工具，不通过正式模型写入口，不生成批准记录，不验证终态落盘后释放 writer。信号不监视外部磁盘变化，路径检查与系统调用不原子；已发出的 I/O 在取消后仍可能写入，部分修改保留，清理失败不自动恢复。P2.2、P2.3 与 P2 父项保持进行中，正式入口仍只读。
- 当前断点：下一步接正式文档工具来源、父 writer 获取、原生终态核实后释放及记录失败关闭；真实 TUI 留 P6。本轮只改批准/文档两个内部模块、对应单测、隔离夹具和集成测试、README 与两份规划文档；新增两个测试文件，没有生产配置面、依赖变化、新持久格式或兼容回退。未提交、推送、创建 PR、打包、发布、部署或修改用户 Pi；保留原有未提交工作。

P2.3 父文档 writer 获取与终态交回：

- 用户确认先做父 writer 获取与可靠收尾，再考虑正式写入口。本轮保留开始时十个未提交文件；新增窄 `src/parent-writer.ts`，复用文档底层、批准核验、现有 lease 与原生工具结果，不注册模型工具或新增批准入口。lease 目录从 canonical worktree 的 Git 元数据目录推导，不由各 Pi HOME/agent dir 分别决定；仍未开放正式文档/源码写权限。
- 完整复核标准 Pi Extension、Session 格式与会话文档，参考公开事件示例；只读核实原生错误结果格式。当前实现绑定本次工具调用、Session 文件、私有执行结果与 owner；同一父实例不并发取得第二 writer，`turn_end` 只作为触发点，在 lease 操作锁内核实实际结果落盘后才释放。清理失败、记录不符或获取状态不明保留 lease 并关闭新写入，不从旧 Session 或 reload 恢复权限。
- 初次 typecheck 退出码 2，TS2769：Pi 的重载 `on()` 不接受事件名称联合类型；仅改为逐项注册。首轮新测试根 `/private/var/folders/b0/vsckn5zn3w3dms0_3scbhv400000gp/T/adaptive-tests-HyDqrX`，退出码 1：测试宿主缺少闭合括号，`Unexpected end of file`，同期 typecheck TS1005，测试用例尚未执行；补齐括号并明确共享返回内容的篡改方式，不改生产逻辑迎合测试。
- `node --import tsx test/support/run-tests.ts test/unit/parent-writer.test.ts` **21/21 通过**，根 `adaptive-tests-argbDU`，typecheck 退出码 0。覆盖正常写/编辑后交回、源码拒绝的失败终态、缺失/仅内存/重复/篡改终态、原调用及 owner 变化、Session 文件与分支变化、独立返回快照、并发拒绝、别名与跨 Session 竞争、用户取消、关闭失败和 shutdown 后不恢复。仍为本地 SDK `0.84.4`、真实临时 Session 与模拟 TUI，CLI 实际工具结果及跨进程证据待补。
- 标准 Pi CLI 首个正常场景 **1/1 通过**，根 `adaptive-tests-ptuHOL`：由独立测试扩展注册模型工具并注入假批准来源，原生工具调用、文件写入、结果落盘和 writer 释放均实际执行；第二次写入重新取得 lease。正式 Package 只复制供内部模块加载，不启用正式入口，不改 `ctx.mode` 或生成批准记录，不能冒充父真实 TUI 的写权限验收。
- 首次 CLI 全组根 `adaptive-tests-aMc1zq` 已观察六项通过，但后续工具会话结束后无法取回完整终端输出（`write_stdin` 返回 unknown process id），不记录该轮全组通过。定向重跑 `persistence` 根 `adaptive-tests-QXTXJs` **0/1、退出码 1**：真实 Session 写失败时没有 `turn_end`，测试等待 `writer-turn-end` 超时；lease 实际保留。增加 `agent_settled` 调用同一核验函数，明确记录失败关闭，不用事件代替磁盘结果。该错误路径复验 **1/1 通过**，根 `adaptive-tests-8m6X60`。
- 不同 agent dir 的两个真实 Pi 争抢同一 worktree、取消后等待文件关闭才交回、真实 reload 不恢复未知 writer，定向 **2/2 通过**，根 `adaptive-tests-hgnrs8`。随后 CLI 完整九项 **9/9 通过**，根 `adaptive-tests-oyGusD`；包括正常、源码拒绝、丢失结果、结果钩子篡改、部分 I/O、关闭失败、真实 Session 写失败、跨进程竞争/取消及 reload，typecheck 通过。
- 继续补操作锁反例，根 `adaptive-tests-HWCKxW` **4/6、退出码 1**：旧 `withOperationLock()` 吞掉删除失败或 owner 不符，父侧误报 `pending=false`（两项均 `false !== true`）。这是旧 lease 清理逻辑在新交回路径中暴露的遗漏。仅使清理错误向上传递，原操作与清理同时失败时保留 `AggregateError`；未知 owner 的锁不删除。定向复验根 `adaptive-tests-lo4cUr` 五个父 writer 用例通过；该命令额外列出的 workspace 文件未匹配任何用例，不能将其文件级通过计作十项 lease 回归。
- 已明确失败边界：如果 lease 的 `unlink` 已完成而后续操作锁清理失败，不能声称 lease 文件仍存在或已回滚；保留失败状态和残留操作锁，拒绝报告交回成功。获取时写入失败可能留下损坏 lease，也不再推断成“未获取”。这些状态不自动修复或 force-release。
- 父 writer **30 项**与原 lease **10 项**定向 **40/40 通过**，根 `adaptive-tests-SuAZC6`；覆盖在途 shutdown 等待 I/O/句柄关闭、提前终态事件不能释放、取得 lease 后立即取消、两个真实错误同时保留，以及 Git 元数据目录在别名/子目录间一致、linked worktree 间独立。typecheck 通过。
- 新 CLI 操作锁故障首次 **0/1、退出码 1**，根 `adaptive-tests-Gu7lUt`，`pending` 为 false；运行时替换的 `rm` 未触发期望错误。仅调整测试夹具，在加载被测模块之前安装受控替身，并保留实际调用证据；不改产品逻辑迎合注入。复验根 `adaptive-tests-5P3Bu2` **1/1 通过**：`writer-lock-cleanup-failed` 实际出现，lease 文件已删除、操作锁仍在、父状态保持关闭。shutdown 提示同步改为“保持关闭”，不谎称未知情况下 lease 文件必定存在。
- 首次全量 **206/206（161 unit / 39 integration / 6 E2E）通过**，根 `/private/var/folders/b0/vsckn5zn3w3dms0_3scbhv400000gp/T/adaptive-tests-c9t9sQ`，无失败、取消或跳过；本轮新增 30 单测与 10 真实 CLI 集成。typecheck、`git diff --check`、空暂存检查通过。读取本轮九个 CLI 测试根的审计 JSONL，84 个有记录 PID 均 ESRCH，`live`、`unknown` 均空。竞争夹具中另有初始化完成前就 `stop()` 并等待 `close` 的预备 Pi，没有进入审计日志；已增加等待 `get_state` 后再关闭，补齐新轮次 PID 证据，不把缺日志进程计入这 84 个。
- 最终复验仍为 **206/206（161 unit / 39 integration / 6 E2E），0 失败、0 取消、0 跳过**，退出码 0；制品根 `/private/var/folders/b0/vsckn5zn3w3dms0_3scbhv400000gp/T/adaptive-tests-9z9kyz`。57 个审计 Pi PID 均 ESRCH，`live`、`unknown` 均空，包含竞争夹具的预备 Pi。最后并行 typecheck 的工具会话输出无法取回（unknown process id），不算通过；随后单独执行 `node node_modules/typescript/bin/tsc --noEmit` 退出码 0。差异检查与空暂存检查通过，必要执行已结束。
- 证据边界：单测依赖 Pi SDK `0.84.4` 与模拟 TUI；CLI 为标准 Pi `0.85.1`、macOS/Node `25.2.1`，系统禁网、临时 Git/HOME/agent dir、空凭证、fake provider 和独立测试扩展，不生成真实批准。新增内部父 writer 与现有 lease 的定向单元/真实原生工具证据，不是正式工具来源、真实 TUI、外部进程清理、跨平台或完整恢复验收。没有新增依赖、生产配置、持久记录 Schema、兼容回退或第二执行路径。
- 本小步“父 writer 获取与原生终态交回”已完成限定验证。P2.2、P2.3 与 P2 父项仍进行中；下一步接入正式文档工具及实际来源门禁，覆盖覆盖/后置注册、生命周期、持久化失败和取消的入口组合。正式文档、源码与 Shell 写权限继续关闭；不提前进入 P3。README、技术方案与唯一台账已同步，保留既有改动；本轮未提交、推送、创建 PR、打包、发布、部署或修改用户 Pi。

P2 内部批准、文档 I/O 与父 writer 累计基线提交：

- 独立授权：用户要求“先完整提交下吧”。已复核相对 `414f216` 的全部 17 个变更文件，包含批准核验与生命周期信号、文档实时核验和清理、父 writer 获取/终态交回、对应单元及隔离 CLI 测试、README 与两份规划文档；开始时暂存区为空，无无关文件或本地测试制品。
- 提交前全量复验 **206/206（161 unit / 39 integration / 6 E2E），0 失败、0 取消、0 跳过**，退出码 0；命令 `node --import tsx test/support/run-tests.ts test/unit/*.test.ts test/integration/*.test.ts test/e2e/*.test.ts`，只通过 `awk` 过滤终端的逐项成功和冗长诊断，启用 `pipefail`，不改变测试或退出结果。制品根 `/private/var/folders/b0/vsckn5zn3w3dms0_3scbhv400000gp/T/adaptive-tests-fEaHoG`，57 个审计 Pi PID 均 ESRCH，`live`、`unknown` 均空。`node node_modules/typescript/bin/tsc --noEmit` 与差异检查通过；仍为系统禁网、临时 Git/HOME/agent dir、空凭证和 fake provider，不是真实模型或 TUI 验收。
- Git hooks 目录无启用脚本，提交签名开关未设置，待提交路径无额外 Git attributes；没有修改 Git 配置或绕过 hooks。本次仅建立本地开发阶段基线，提交身份及结果以 Git 原生记录为准；不推送、不创建 PR、不打包发布或部署。
- P2.2、P2.3 与 P2 父项仍为进行中，正式编辑入口和实际工具来源边界待接，真实 TUI 留 P6；不因提交扩大写权限或宣称交付完成。本次没有额外业务代码改动，保留既有实现与兼容性边界。

P2.2 / P2.3 正式文档入口接入：

- 用户在只读梳理及下一步范围说明后回复“可以，继续推进”，本轮限定完成正式文档编辑入口及来源/生命周期组合验证，不进入 P3。起始为 `main / a1b4d9b`，工作区干净；不提交、推送、发布或操作真实用户 TUI。
- 规模检查：复用父入口、policy、批准、文档 I/O 和父 writer；不新增生产模块、配置、持久化格式或执行后端。测试使用公开 Pi SDK 的正式资源加载和模拟交互绑定，另补标准 CLI 拒绝用例；SDK 仅作为测试宿主，不是产品第二后端或真实用户 TUI 证据。
- 首轮定向测试 `node --import tsx test/support/run-tests.ts --test-name-pattern='delivery_document|正式入口在文档授权' test/unit/policy.test.ts test/integration/document-entry.test.ts` **0/5，退出码 1**，根 `adaptive-tests-v5L3Pp`：三个断言确认正式入口与 policy 尚未接通，两个用例在假 Provider 刷新前选中了其他模型，尚未进入被测路径；没有真实模型调用。同期 typecheck 退出码 2，为新夹具 UI 类型、错误字段和工具切换方法误用，正在修正。P2.2/P2.3 仍为进行中，不将失败记为通过。
- 测试宿主修正后，后置注册覆盖用例定向 **2/2 通过**，根 `adaptive-tests-ky89yT`，typecheck 通过；此时产品仍未接入口，只证明原拒绝行为与夹具可用。随后开始注册两个专用文档工具，复用原生 schema 和父 writer，按实际来源纳入父协调门禁；尚待正向和故障组合复验。
- 初次接入后定向 **10/12 通过，退出码 1**，根 `adaptive-tests-p7AZaN`，typecheck 通过。真实 SDK 已通过创建/持续编辑、批准正文保留及越权拒绝；两项覆盖测试仍使用原生 schema，是夹具 Extension 顺序造成覆盖没有实际生效，并非产品越权。用公开 `extensionsOverride` 将测试扩展置于优先位置，并增加实际来源变化断言后复验，不改变生产门禁迎合测试。
- 扩展授权、链接、普通失败、reload/tree、终态和排队取消后，定向 **22/23 通过，退出码 1**，根 `adaptive-tests-14f7En`，typecheck 通过；来源覆盖已实际生效且被拒绝。剩余失败是测试未捕获真实 Session 写盘故障的 `EACCES`：SDK 的 `prompt()` 会直接拒绝，不能按 CLI 返回方式假定正常返回。仅改为断言该错误并将故障注入限定为首次结果，随后复核落盘缺失、lease 保留和拒绝再次写入。
- 写盘失败定向 **1/1 通过**，根 `adaptive-tests-SJGpgq`。标准 CLI 正式 Package 新增拒绝用例 **6/6 通过**，根 `adaptive-tests-KcW6Um`：两个文档工具均拒绝无批准 RPC 和真实后置覆盖，子 Pi 不注册文档工具且已退出；无文档、越权哨兵或 writer 状态根写入。typecheck 通过。继续补启动时覆盖并扩大到受影响模块和全量，不提前标完成。
- 受影响回归首次 **155/158 通过，退出码 1**，根 `adaptive-tests-hBnb91`，typecheck 与 diff 检查通过。两个新静态覆盖用例未将 Pi 原生冲突诊断列为预期，一个既有渲染断言仍要求旧“仅记录批准”文案；均属测试预期未对齐。仅精确断言对应冲突诊断，继续要求覆盖来源实际生效并被拒绝；渲染断言改为源码/Shell/开发委派仍关闭，不移除权限要求。
- 一次受影响复验的工具会话输出未能取回（`write_stdin: unknown process id`），不计通过。立即同命令重跑后 **158/158 通过，0 失败/取消/跳过**，退出码 0，根 `/private/var/folders/b0/vsckn5zn3w3dms0_3scbhv400000gp/T/adaptive-tests-Qj5BzZ`。包括 17 项正式入口 SDK/模拟交互集成、68 批准、35 文档底层、30 父 writer、8 policy；未调用真实模型或控制桌面。README、Skill 和技术方案同步当前窄文档能力，源码/Shell/开发委派继续关闭，最终全量待结果。
- 首次全量 **231/231（163 unit / 56 integration / 12 E2E），0 失败/取消/跳过**，退出码 0，根 `/private/var/folders/b0/vsckn5zn3w3dms0_3scbhv400000gp/T/adaptive-tests-93EhBY`。typecheck、diff 检查通过；该根与新增 CLI 定向根共 73 个 Pi PID 均为 ESRCH，`live`、`unknown` 均为空。最终复核补强既有正向用例的“草稿先写入→两次阶段确认→继续编辑”顺序，并将批准比较改为独立快照及磁盘记录；取消用例只声明已持有 writer 时取消，不将 lease 出现单独当作已进入底层队列的证明。生产代码不变，最终复验待结果。
- 补强正向定向 **1/1 通过**，根 `adaptive-tests-zZKXWu`；最终同一全量入口仍为 **231/231（163 unit / 56 integration / 12 E2E），0 失败/取消/跳过**，退出码 0，根 `/private/var/folders/b0/vsckn5zn3w3dms0_3scbhv400000gp/T/adaptive-tests-H5LTAU`。命令 `node --import tsx test/support/run-tests.ts test/unit/*.test.ts test/integration/*.test.ts test/e2e/*.test.ts`，终端仅以 `awk` 过滤逐项成功及长诊断并启用 `pipefail`；65 个审计 Pi PID 均 ESRCH，无存活或未知进程。`node node_modules/typescript/bin/tsc --noEmit`、`git diff --check`、空暂存核查均通过。
- 已核对本轮环境：macOS、Node `25.2.1`、SDK `0.84.4`、标准 CLI `0.85.1`。系统禁网、临时 Git/HOME/agent dir、空凭证与 fake provider；正式正向使用真实 SDK 资源加载、事件与原生 Session，仅 UI 选择为替身，CLI 正式入口验证 RPC/覆盖/子角色拒绝。不是用户真实 TUI、CLI 正向交互、其他版本/平台或模型交付质量验收；既有 CLI 内部 I/O 与 writer 故障用例仍一并通过，不能冒充正式交互证据。
- 本轮 P2.2/P2.3 到此按限定自动化范围完成，P2 父项真实用户交互继续待 P6。改动为父入口、policy 与批准文案、相关测试、README/Skill 和两份文档；仅新增一个正式 SDK 入口集成测试文件，未新增生产模块、依赖、配置面、持久化格式、兼容层或第二后端。每回合一次文档变更；路径检查不提供原子文件系统隔离，部分 I/O 不自动回滚，未知终态与清理失败保持关闭。未进入 P3、调用真实 Provider、操作用户 TUI/配置、安装依赖、打包、独立模型复审、提交、推送、PR、发布或部署。

##### P3 — 开发子会话、能力重建与单 writer 交接

依赖：P1 的单执行路径、P2 的权限与批准记录结构就绪。真实批准来源的最终交互验收仍按 P6 保留。

主要落点：`src/subagents.ts`、`src/workspace.ts`、`src/policy.ts`、`src/runtime-state.ts` 和父/子入口职责；委派、workspace、跨进程 lease 和 RPC 测试。

| 事项 | 状态 | 完成证据 |
|---|---|---|
| P3.1 按配置重建任务所需环境 | 已完成（限定自动化） | 规则/Skill、原生文件工具、容器 bash 配置钩子和普通 select/confirm/input 均有限定证据；必需工具覆盖明确拒绝，不静默替换。默认全量 380/380、真实容器 14/14；问答归属、不能扩权、取消清队列和子收尾通过。真实用户 TUI 待 P6，不承诺 editor/并发 UI/任意插件或父内存克隆 |
| P3.2 实现 canonical worktree 单 writer | 已完成（文件开发限定自动化） | lease v2 在操作锁内真实更换进程 owner，父 coordinator 无写权；完整身份、就绪/终态失败、锁竞争单元和原 Node 跨进程证据通过。SDK 父/真实 CLI 子已验证实际 owner、在途竞争拒绝、父子持久终态后交回、未知故障保留 lease、规划文档和实际 Git 目录保护。命令外部执行及恢复另见 P3.3/P5，不扩大本项结论 |
| P3.3 跑通真实写入、自检和基本收尾 | 已完成（本地 Docker 限定自动化） | 明确实施批准固定镜像与挂载；标准 CLI 子真实写入/命令/读回，失败后原授权返工；无网络/宿主凭据、越权拒绝、取消/超时和后台后代清理、原生持久结果后交回均通过。默认全量 351/351、真实容器 14/14，进程与本次容器无残留；候选绑定验收及完整恢复另见 P4/P5，不支持宿主 Shell |

最小验证：委派与 workspace 单元测试、`writer-lease-process` 集成测试、真实 Pi 的正向写入及越权/竞争/缺工具反例。临时批准夹具只覆盖执行机制，不代替 P6 的真实批准来源验收；发现具体必需工具无法安全支持时先记录该缺口，不绕过权限或扩建适配平台。

P3.1 只读环境核验前置：

- 用户继续授权推进，保留上一轮 P2 正式入口的 12 个未提交文件。当前仅补已有只读路径，源码、Shell、开发委派与普通子交互继续关闭，不进入 P3.2/P3.3。
- 规模检查：复用父/子入口、`subagents.ts` 和原有 READY 握手；使用公开 `before_agent_start.systemPromptOptions` 与命令上下文 `getSystemPromptOptions()`，不重新扫描用户配置、不复制父历史、不新增生产模块、用户配置或执行后端。基线比对只覆盖 Pi 实际暴露的资源与工具定义，不声称能列举或重建任意插件运行态。
- 待验证：单元覆盖资源/工具不符与缺失，真实 Pi 夹具验证按配置加载规则、实际读取 Skill、模型上下文及工具调用/结果钩子各执行一次，缺口在任务发送前拒绝，拒绝后子进程退出且父子原生记录隔离。完整 P3.1 保持进行中。
- 首轮 `node --import tsx test/support/run-tests.ts test/unit/subagents.test.ts test/integration/child-environment.test.ts` **21/26 通过，退出码 1**，根 `adaptive-tests-lGqT7j`；21 项单测通过，5 项集成未进入正式委派。原生审计显示夹具追加的 `context` 自定义消息被 Pi 转为最后一条 user，fake provider 误选读取任务；只把夹具上下文消息移到任务前，不调整产品边界迎合测试。同期 typecheck 退出码 0，集成待复验。
- 同一定向入口复验 **26/26 通过，0 失败/取消/跳过**，根 `adaptive-tests-UDCCa1`：工具定义/来源与资源差异单元测试通过；标准 Pi 实际加载全局与项目规则、基础指令和 Skill 描述，读取 Skill 正文，`before_agent_start`、`context`、`tool_call` 与 `tool_result` 的效果和次数已核对。三类资源差异在发送任务前拒绝，普通工具钩子拒绝阻止读取，子进程退出，父子原生记录和模型上下文不串线。仅此限定事项已验证；继续补工具覆盖、钩子异常及受影响回归，不把 `context` 证据写成真实 HTTP Provider 钩子验收。
- 首次受影响回归 **64/65 通过，退出码 1**，根 `adaptive-tests-nAtCxa`，覆盖 subagents/policy 单元、child-environment/extension-lifecycle 集成及正式 RPC E2E；typecheck 通过。工具覆盖场景已证实实际 source 为测试扩展，并在发送任务前拒绝；唯一失败是新异常用例错误期待 `extension_error`，真实 Pi 将 `tool_call` 抛错转成 `isError=true` 的原生工具结果。日志确认实际读取未执行、父委派失败且子 Pi 已退出；仅修正错误形式断言，并明确核对原错误正文，不修改生产逻辑。
- 异常原例定向复验 **1/1 通过**，根 `adaptive-tests-661U8n`，确认原生错误正文、`isError=true`、无读取内容及 `failed` 终态。README 与技术方案同步限定边界；准备执行全量，不提前记录通过。
- 最终 `node --import tsx test/support/run-tests.ts test/unit/*.test.ts test/integration/*.test.ts test/e2e/*.test.ts` **248/248（173 unit / 63 integration / 12 E2E），0 失败/取消/跳过**，退出码 0，根 `/private/var/folders/b0/vsckn5zn3w3dms0_3scbhv400000gp/T/adaptive-tests-RDKjF6`。终端仅用 `awk` 过滤逐项成功与长诊断，启用 `pipefail`；包含上述 65 项受影响回归和 P2 正式文档入口全部测试。`node node_modules/typescript/bin/tsc --noEmit`、`git diff --check` 与空暂存核查通过。
- 收尾审计：最终根 79 个 Pi PID 均 ESRCH；此前四个定向/失败根分别 5、10、57、2 个审计 PID 也均 ESRCH，所有 `live`、`unknown` 均空。环境沿用 macOS/Node `25.2.1`、SDK `0.84.4`、标准 CLI `0.85.1`，系统禁网、临时 Git/HOME/agent dir、空凭证和 fake provider；没有真实模型调用或用户 UI 操作。
- 本轮变更为父/子入口与 `subagents.ts`、委派单测、原有 fake provider/Pi 夹具、新 `child-environment.test.ts`，以及 README/两份文档。保留上一轮 P2 改动，仅新增一个测试文件，无生产模块、依赖、配置面、第二执行后端或兼容层。原 READY 内部记录增加环境摘要，不支持与旧入口混用，也不迁移旧 Session。
- 当前边界：资源与工具摘要是启动核验，不是工具实现代码、Skill 正文、完整钩子链或运行中磁盘内容的完整性监控；运行时仍按原 policy 核对实际工具来源。真实 HTTP Provider 钩子、必要普通子交互、开发工具覆盖、父子 writer 交接、外部进程清理及完整恢复未验收；P3.1 继续进行中，下一步围绕开发能力与 P3.2/P3.3 交接推进，不再扩建只读核验平台。未提交、推送、PR、安装依赖、打包、独立模型复审、发布、部署或修改真实用户 Pi 配置。

P3 开发批准与父子交接推进：

- 用户授权“继续推进，除非有卡点需要我确认，否则一路稳步推进”。保留开始时 16 个未提交文件，继续按 P3 至后续阶段依赖顺序实施；真实模型、用户 TUI、提交与发布等仍不在本次授权内。
- 首步规模检查：复用现有批准模块，新增内部实施核验，方案与实施正文绑定本轮私有确认和同一次原生读盘；不增加批准类型、配置、模型工具或第二份计划。文档 writer 只依赖其实际使用的文档核验方法。下一独立步处理旧 lease `bind()` 未真正转移进程 owner 的问题，并保留未知终态关闭要求。
- 当前状态：实施批准核验开始实现，正向、篡改、重新确认、生命周期与原有文档批准回归待验证；尚未开放开发写入口。
- 首次批准/文档入口定向未通过，根 `adaptive-tests-IODLtA`：新增局部变量与原有 `confirmed` 重名，typecheck TS2451/TS2739、退出码 2；测试退出码 1，17 项入口在加载时失败，单测文件未加载（汇总 0/18，不能算已执行批准用例）。仅重命名新增局部变量，随后复验。
- 修正后批准单元与正式文档入口 **98/98 通过**，根 `adaptive-tests-62LAmv`，typecheck 通过。包含新增 13 项实施授权单元：原方案/计划正文、文档独立、重新请求与生命周期撤销、内存/磁盘同时篡改及 TUI/取消/文件缺失；只读核验内部方法尚未接开发工具，真实开发组合证据待补。
- 开始最小 lease 交接改造：在同一操作锁内更换为子进程自己的 owner，保留父 coordinator 仅用于核验终态后的释放；删除无生产调用的旧 bind、布尔终态 release 与 forceRelease，不保留兼容路径。记录升为 v2，旧 lease 解析失败保持关闭，不自动迁移或释放。对应旧夹具改用现有严格父释放方法模拟 lease 丢失；交接单元及跨进程证据待验证。
- lease、文档底层、父 writer 单元及既有 Node 竞争集成 **87/87 通过**，根 `adaptive-tests-3vS6oj`，typecheck 通过。新交接单元覆盖实际 owner 变化、父写权消失、错误子身份/执行绑定、取消、就绪/终态证明失败、协调身份变化、操作锁竞争及旧记录拒绝；既有 Node 竞争不是新的真实 Pi 交接证据，P3.2 仍进行中。
- 接入规模：复用原文件 I/O、RPC 和原生 Session 证据，只新增一个开发职责模块及必要测试，不另建执行后端或通用工具适配层。先接受原生精确编辑/写入的受控执行，在子 I/O 边界绑定完整 owner 并排除规划文档、原生记录与 Git 元数据；未经验证的覆盖和 Shell 仍关闭。开发与真实 Pi 交接组合待验证。
- 文件底层、父 writer、policy、RPC 四组原有单元 **94/94 通过**，根 `adaptive-tests-s3woMB`；同期 typecheck TS2322/退出码 2，为交接 JSON 中已验证的 owner 仍被标记可空，已收紧对应引用。随后 typecheck 通过，新增正式开发入口 SDK/CLI 首组 **5/5 通过**，根 `adaptive-tests-eQRob0`：父模拟 TUI 的三项批准→真实子 Pi 创建/精确编辑/读回→子持久收尾→父原生结果落盘→父文档写入；越界、规划文档、Git 元数据均拒绝，无批准时不启动子模型。尚未覆盖取消/收尾故障与全量，不标 P3 完成。
- 新开发模块单元与 SDK/CLI 故障组合 **27/27（12 unit / 15 integration）通过**，根 `adaptive-tests-qH8she`，typecheck 通过。实际子 owner/父 coordinator 的进程与执行 ID 已核对；配置模型上下文与同名 write/edit 工具钩子实际执行。取消等待已进入的 I/O/句柄关闭，部分写入保留后原授权内可修复；关闭异常、SIGKILL、子终态篡改、父子真实 Session 写失败均保留 lease，阻止再次开发及父文档写入。句柄故障由独立夹具注入，不是硬件故障；正向父仍是模拟 TUI。
- 复核发现子释放只比较 coordinator 的进程 token，未比较其完整 Session/PID 绑定；已收紧为与原父 coordinator 独立快照全量比较，并补两个变更反例，待复验。能力文案同步当前受控文件开发，不将其写成 Shell/命令验证或完整 P3 已开放。
- 最新受影响回归 **177/178 通过，退出码 1**，根 `adaptive-tests-EajNa7`，typecheck 通过；完整 coordinator、开发工具覆盖拒绝及原有批准/委派均通过。新增 CLI 未交接用例被夹具审计的 `readdir(leases)` ENOENT 提前阻断，尚未到达产品拒绝路径；仅让审计把不存在的 lease 记为 null，其他 I/O 错误照常抛出，随后复验。另整理新增批准核验函数缩进，不改变逻辑。
- 未交接 CLI 原例定向复验 **1/1 通过**，根 `adaptive-tests-OqlAKp`：开发角色标记没有 lease/交接时，实际子 write 返回未授权错误，未创建源码或 writer 根。README、Skill 和技术方案同步文件开发的真实能力、父子身份及记录交接、v2 破坏性兼容边界；命令与普通子交互仍关闭。最终全量及命令能力取证待结果。
- 路径复核新增 separate-git-dir 与公开 Bash 能力取证，定向 **1/2 通过、退出码 1**，根 `adaptive-tests-Abx34R`，typecheck 通过。真实 CLI 子在实施范围显式包含另名 Git 元数据目录时误写，证明固定 `.git` 保护不足；已改父/子使用实际解析出的 Git 元数据目录，父同时保护自身 Session，新增两项单元及父入口反例待复验。这是本轮路径保护遗漏，不以修改测试范围掩盖。
- 同轮公开 `createBashTool()` 取证通过：在临时 cwd 中可写到其外部的临时文件，命令正常返回且原 signal 随后 abort 后，已脱离 stdio 的后台后代仍存活。夹具显式 SIGTERM 并等待 ESRCH 完成清理；这不是产品已经完成外部进程清理或已开放 Bash。该结果与公开接口只返回结果、不提供子进程句柄的事实一致，不能凭返回值恢复 writer。
- 实际 Git 目录修复后，开发/文档底层单元与开发集成 **68/68（49 unit / 19 integration）通过**，根 `adaptive-tests-ezP13t`，typecheck、差异检查通过。真实父/子工具均拒绝另名 Git 元数据，即使明确路径授权包含该目录；原正向创建、编辑、读回、父台账回写和故障组合保持通过。开始最终全量与 PID 审计，不提前记作通过。
- 最终 `node --import tsx test/support/run-tests.ts test/unit/*.test.ts test/integration/*.test.ts test/e2e/*.test.ts` **311/311（216 unit / 82 integration / 13 E2E），0 失败/取消/跳过**，退出码 0，根 `/private/var/folders/b0/vsckn5zn3w3dms0_3scbhv400000gp/T/adaptive-tests-xHJXDq`。终端仅用 `awk` 过滤逐项成功与长诊断，启用 `pipefail`；typecheck、`git diff --check` 与空暂存核查通过。较本轮开始新增 63 项，全部旧 P1/P2/只读环境回归一并通过。
- 收尾审计：读取本轮 11 个隔离根的 `fixture-events.jsonl` 与能力取证的 `probe-child.json`。最终根记录 117 个 Pi PID 和 1 个后台探测 PID，全部 ESRCH；此前有进程记录的六个根分别 10、31、49、2、5、37 个 PID 也均退出，`live`、`unknown` 全为空；另四个批准/底层测试根没有进程审计记录，不将零记录当作额外进程证据。Bash 后代由夹具清理，不冒充产品清理。
- 证据边界：沿用 macOS、Node `25.2.1`、SDK `0.84.4` 与标准 CLI `0.85.1`，系统禁网、临时 Git/HOME/agent dir、空凭证和 fake provider。父正向为模拟 TUI，子为实际 CLI；配置钩子限定有效，不证明任意覆盖/插件运行态或真实 HTTP Provider。路径检查与系统调用不原子，取消后的在途 I/O 可能留下部分内容，不自动回滚；未知 writer 不自动恢复。
- 文件开发小步已完成限定验证，P3.2 按文件边界完成，P3 父项仍进行中。复用批准、文件 I/O、RPC 与 lease，仅新增一个生产开发模块和三个测试/夹具文件；没有新依赖、生产配置面、第二后端、旧记录兼容或迁移。README、Skill、技术方案和本台账同步；保留既有未提交改动，未 commit、push、PR、安装依赖、打包、独立模型复审、发布、部署或修改用户 Pi。
- 当前真实卡点：第 8.2/8.3 节要求实际文件边界，但通用本地 Shell 以 Pi 用户权限运行，不能只靠 cwd、工具名或命令文本把它限制在文件批准路径。公开 Bash/exec 返回结果而不提供可供交接核验的完整后代终态，本轮已实证正常返回不够。需要用户确认命令按受信任本地代码运行（明确接受文件工具范围不约束该代码），还是接入另行授权的外部强隔离环境；建议保留强边界、采用外部隔离，不在 Package 内自研沙箱或通用进程平台。两种选择都仍须实现并验证命令清理，不能把信任选择当成清理证明。确认前不开放 Bash，不进入依赖真实命令验证的 P4。

P3.3 外部隔离推进：

- 用户对本地代码信任/外部隔离选择回复“那就用外部隔离吧”。采用外部隔离，不放宽宿主文件权限；保留开始时 26 个未提交路径，不提交、发布或修改真实 Pi 配置。
- 环境只读取证：本机 `docker` 来自已有 OrbStack，经明确 `unix:///var/run/docker.sock`、空临时 Docker 配置 `/tmp/adaptive-docker-inspect.e6cbIo` 和 `env -i` 查询，服务端 `29.4.0`、API `1.54`、`linux/arm64` 可达；本地已有 `node:22-alpine` 与 `alpine:3.20`。未读取 Docker 登录配置、默认 context 或镜像环境内容，未拉取镜像、启动/修改其他容器或操作 UI。
- 规模检查：先新增一个容器命令职责模块及单元/真实容器测试，按需调整现有隔离测试入口；不新增通用 provider、沙箱策略平台、依赖、Agent 执行后端或恢复系统。生产命令工具和批准参数在底层真实验证前不接入。输入/写入挂载均明确指定，不整体复制仓库或加载用户凭据。
- 待验证：正常命令与真实产物、只读/越权路径、无网络/无 Docker socket、取消/超时及脱离 stdio 后代、容器身份/引擎错误默认关闭、只清理本次容器。测试仍使用临时目录及假数据，任何 Docker socket 测试放行都只限专用验证路径，原有默认禁网测试不改变。
- 首轮新增容器单元 **12/12 通过**，根 `adaptive-tests-9cxjWq`，typecheck 通过。真实容器正向 **0/1、退出码 1**，根 `adaptive-tests-FRDFwB`：Docker inspect 模板直接访问可缺省的 `.Config.Volumes` 报错，未进入容器创建；只改为结构化 map 的 `index` 读取，不跳过隐式 VOLUME 检查。专用 `--containers` 测试路径仅放行实际本地 Unix socket 及祖先元数据，默认网络策略不变，待复验。
- 真实容器正向原例复验 **1/1 通过**，根 `adaptive-tests-fvqmRz`：本地固定镜像 `sha256:262aa4f3ae295c90861c34b4319f74feda309a2342e0439d4017be78427b97c0` 下实际生成可写产物；只读输入、台账路径和容器根写入为 EROFS，Git/Docker socket/未挂载文件不可见；仅 loopback 接口、非 root、capabilities 为 0、NoNewPrivs 为 1。产品已核实终态并删除本次容器，未依赖夹具强制清理；命令失败、取消、后台后代等组合仍待结果。
- 真实 Docker 全组 **6/6 通过**，根 `adaptive-tests-SnTeRh`。新增特殊 CSV 路径、真实退出码 7 和部分产物、修复后重试、取消/超时/主命令正常结束后脱离 stdio 的后代停止写入；每次都由执行底层核实容器终态并删除，夹具未强制兜底。继续补客户端/引擎故障单元与真实 Pi 组合，正式入口仍未接入，不标 P3.3 完成。
- 故障单元首次 **12/23 通过、退出码 1**，根 `adaptive-tests-GvNmSm`，typecheck 通过。11 项新增夹具因 `tsx` 在最小环境下尝试写 `/tmp/tsx-502` 被系统 EPERM 拒绝，未进入模拟 Docker 行为；不是容器权限或产品失败关闭的通过证据。仅将夹具 shebang 改为当前 Node 原生 TypeScript 执行，不向生产 Docker 透传 TMPDIR/加载选项，也不放宽隔离目录。
- 故障单元复验 **20/23 通过、退出码 1**，根 `adaptive-tests-a1UlWu`：模拟镜像缺失/隐式 volume、创建响应丢失/坏 ID、身份不符、仍运行、终态读取及删除失败均关闭新执行。三个失败均为测试未考虑 macOS 自动注入的 `__CF_USER_TEXT_ENCODING`；只接受该已观察到的系统字段，生产仍只构造 PATH/HOME/DOCKER_CONFIG。同时审计发现 logs 失败后的终态检查早于 wait 客户端结束，正在补顺序断言并收紧真实收尾逻辑。
- 日志错误顺序反例 **0/1、退出码 1**，根 `adaptive-tests-EKTwkE`，明确复现先检查终态、后 wait 客户端结束。改为任一客户端错误先请求停止本次容器，等待全部客户端实际 close，再核验容器终态；输出回调异常也纳入该收尾，不让事件回调抛错逃逸。新增输出失败用例，随后复验单元和真实容器。
- 收紧客户端收尾后，单元 **24/24 通过**，根 `adaptive-tests-YnQ3W2`；真实容器 **6/6 通过**，根 `adaptive-tests-G7z4rz`；typecheck 通过。错误/输出异常等待全部客户端 close，未知容器保持关闭；此步底层已限定验证，不是正式 Pi writer 交接验收。
- 用户再次要求“继续”，开始最小正式接入：实施提案可明确提供 container 的本地镜像和额外只读输入，确认时固定镜像 ID 并展示隔离/解释器差异；原文件型提案不含该授权，不能执行容器命令。子同名 bash 工具只走已交接容器 operations，不回退宿主；复用本次原生工具调用与单次容器引用，容器未知终态并入现有子 writer 收尾关闭。新增批准/来源/CLI 容器组合验证待结果。
- 正式接入首轮受影响回归 **134/134 通过**，根 `adaptive-tests-Znsau8`；包括 7 项新增容器批准单元、未授权命令的子拒绝、来源门禁及旧文件开发组合。真实 SDK 父/CLI 子/Docker 首条正向 **1/1 通过**，根 `adaptive-tests-zHTvTd`：批准镜像/输入后实际执行命令变更 src，容器引用与原生结果落盘，父取回 writer 更新台账。同期 typecheck 退出码 2，TS2339 为新测试筛选 SessionEntry 后缺少显式类型守卫，正在补齐；不将此轮写成 typecheck 通过。
- 为复用同一父 SDK/模拟 TUI、子真实 CLI 夹具，将现有 development 测试宿主移入 `test/support/development-host.ts`，没有新增执行后端。到此本轮新增 5 个文件：一个容器生产模块、两个测试文件和两个测试宿主/替身；不再增加配置层或通用适配器。继续验证正式失败返工、配置 Bash 检查、取消/超时及未知 Docker 收尾拒绝交接。
- 正式容器全组 **14/14 通过**，根 `adaptive-tests-7wLIdZ`：包括 6 项底层和 8 项 SDK 父/真实 CLI 子/真实 Docker 组合，真实命令失败后通过授权内 src 修复并复验，未改只读验证脚本；只读路径拒绝、Bash 配置钩子拒绝/抛错、父覆盖来源拒绝、取消/超时及父台账回写均通过。真实 Pi 配合模拟 Docker 的终态读取/删除失败 **2/2 通过**，根 `adaptive-tests-jrk7q4`：保留 child lease，父子新写入都关闭；这是外部故障注入，不是停止或破坏真实 Docker 引擎。typecheck 已复验通过。
- 复核收紧 Docker 客户端来源：按 PATH 找到实际可执行文件后固定其 realpath，拒绝工作区内的同名脚本，不让已授权源码写入变成宿主执行通道。没有硬编码多运行时别名或静默选择后备客户端；镜像检查与实际命令均使用该边界。另让目录挂载检查响应取消；新增来源反例及受影响回归待结果。
- 来源与批准定向 **113/113 通过**，根 `adaptive-tests-Mqy0cP`，typecheck 通过。复核再补镜像 CLI 参数分隔、完整终态字段和固定本地日志驱动，避免镜像参数重解释、缺退出码误交接或继承远程日志配置；增加两个反例，最终全量及真实容器复验待结果。README、Skill 和技术方案同步正式容器能力与未完成边界，不把命令自检写成候选绑定验收。
- 最新真实容器复验 **0/14、退出码 1**，根 `adaptive-tests-g9AbFo`：固定客户端 realpath 后，OrbStack 的 multicall 二进制因 `unsupported argv0 "docker-tools"` 拒绝启动，全部在镜像解析失败，未创建容器。是本轮客户端固定路径改动引入的启动回归；同轮 typecheck 和 diff 检查通过，默认全量会话输出无法取回（unknown process id），不计通过。只读实证固定实际文件加 `spawn` 的 `argv0: "docker"` 可查询本地服务端 `29.4.0`；改用同一受限 spawn 收集请求/日志，保留真实 close、15 秒请求超时和 1 MiB 上限，不恢复 PATH 动态执行或增加 OrbStack 特判，随后复验。
- 客户端修改后容器单元 **28/28 通过**，根 `adaptive-tests-GMU0bv`，typecheck 通过；新增输出超限后等待客户端实际退出的证据。首次容器定向正则未匹配实际用例（根 `adaptive-tests-Osjsj2`），文件级 1 pass 不算命令验证；纠正名称后原正向 **0/1、退出码 1**，根 `adaptive-tests-BbMSfE`，镜像和 create 已正常，start 报 `compression cannot be enabled when max file count is 1`。这是本轮固定 local 日志参数遗漏，容器终态明确并由产品删除；仅显式关闭压缩，保留单文件 10 MiB 本地日志上限，随后复验。
- 关闭日志压缩后原正向 **1/1 通过**，根 `adaptive-tests-c9VMyM`。最终默认全量 `node --import tsx test/support/run-tests.ts test/unit/*.test.ts test/integration/*.test.ts test/e2e/*.test.ts` **351/351（253 unit / 85 integration / 13 E2E），0 失败/取消/跳过**，退出码 0，根 `adaptive-tests-UCE3Ng`；专用 `node --import tsx test/support/run-tests.ts --containers test/container/command.test.ts` **14/14，0 失败/取消/跳过**，退出码 0，根 `adaptive-tests-wwddE1`。仅以 `awk` 过滤终端输出并启用 `pipefail`，typecheck 退出码 0。包含正式批准、真实子 Pi/Docker、配置钩子、原授权返工、取消/超时及未知收尾关闭；没有真实模型或用户 TUI。资源收尾审计待结果，随后继续普通子交互，不把自检当作 P4 候选验收。
- 收尾审计通过：最终默认根 123 个 Pi PID、83 个假 Docker PID、1 个旧 Bash 能力探测后代，以及容器全组根 17 个 Pi PID，全部 ESRCH。另复查本轮 17 个已知定向/失败根，所有有记录进程均退出，`live`/`unknown` 全空；零日志根不虚增进程证据。仅按本次原生 Session/临时引用的唯一 label 查询 44 个真实容器，均无残留，不操作其他容器；产品泄漏时夹具会清理并使测试失败，本轮最终组未触发该兜底。diff 检查通过；未提交、推送、PR、安装、拉取镜像、打包、发布、部署或修改用户 Pi。P3.3 按本机 Docker/fake provider 范围完成，P3 父项及真实用户 TUI 仍未完成。

P3.1 普通子交互承接：

- 继续已授权实施。规模检查：复用现有 `ChildRpc` 与父上下文，在只读/开发委派共享窄交互处理；不新增生产模块、UI broker、状态账本或授权入口。只通过公开 RPC 的请求 ID 和父 `ctx.ui` 承接普通 select/confirm/input，标明子归属，回答不能生成交付批准；取消需中止父当前任务并等待子收尾。多行 editor 不支持取消信号，先明确拒绝，不伪装完整 TUI。
- 已核对公开协议/类型与标准实现：原生 TUI 的 `ctx.abort()` 清空队列并恢复到编辑器后中止；SDK 测试宿主必须显式模拟该公开绑定行为，不能将默认 SDK abort 当成真实 TUI 队列证明。子 RPC 不发送独立 dialog 取消事件，按任务终态或父取消丢弃未决回答；正式用例与迟到/错误 ID/取消/失败单元待验证，不提前开放。
- 接入后委派单元 **37/37 通过**，根 `adaptive-tests-b9a6di`，其中新增 16 项普通问答、取消/拒绝、RPC/editor 拒绝、超时、并发、子提前结束与迟到回答、UI/中止错误；原 21 项 RPC/环境回归通过。同期 typecheck 退出码 2，TS2352 为测试 UI 替身缺少无关完整 UI 方法；仅明确测试替身类型转换，继续真实 SDK 父/标准 CLI 子组合验证，不冒充真实用户 TUI。
- 正式父子交互定向 **12/13 通过、退出码 1**，根 `adaptive-tests-bijg80`，typecheck 已通过。只读/开发正向与取消、拒绝、超时、UI 抛错、父取消的十项组合均已通过，父不续跑、不消费队列，子真实退出后按原持久记录交回 writer。剩余只读扩权反例先请求不存在的 write，被 Pi 在询问前拒绝，实际 UI 次数为 0 而非 3；仅改测试脚本为先读文件并问答、再尝试 write，随后复验，不修改产品权限。
- 修正后的只读扩权反例 **1/1 通过**，根 `adaptive-tests-kjgtW3`；普通问答全部实际发生，后续 write 仍被拒绝，无源码或越权文件，也没有新的批准。README/Skill/技术方案同步窄交互能力；正向再补子原生问答记录与父批准数量核对，接下来执行完整受影响回归及全量，不提前标记 P3.1 完成。
- 普通交互接入后的最终默认全量 **380/380（269 unit / 98 integration / 13 E2E），0 失败/取消/跳过**，退出码 0，根 `adaptive-tests-1PeAYY`；同一专用真实容器入口 **14/14，0 失败/取消/跳过**，退出码 0，根 `adaptive-tests-7Prc8c`。命令沿用上方两条全量入口并用 `awk` 过滤终端；typecheck 退出码 0。新增 16 单元/13 正式 SDK 父+CLI 子交互组合，包含父队列清空、原生子问答落盘、不新增批准、普通回答后只读写入仍拒绝和 writer 交回；全部旧权限/故障/容器回归通过。仍为模拟 TUI/fake provider，不是真实用户交互或任意插件兼容，收尾审计待结果。
- 收尾审计通过：最终默认根 149 个 Pi PID、83 个假 Docker PID、1 个探测后代，以及容器根 17 个 Pi PID 均 ESRCH；两条交互定向根 27/3 个 Pi PID 也已退出。13 个本次容器引用按唯一 label 查询均无残留；无存活/未知进程或容器。P3.1 按原生工具、已批准 Docker 及普通单次问答限定范围完成，不宣称任意配置重建或真实用户 TUI 已验收。该步没有新生产文件、配置、授权格式或后端；保留已有工作，未提交或发布。

##### P4 — 真实验证、独立审查、返工与节点进度

依赖：P2 的授权与活动文档能力、P3 的开发执行和安全交接就绪。

主要落点：`src/validation.ts`、`src/candidate.ts`、`src/progress-sync.ts`、必要的审查输入/结果处理、`src/presentation.ts`、父入口和 run Prompt / Skill；对应 validation、candidate、progress 与生命周期测试。

| 事项 | 状态 | 完成证据 |
|---|---|---|
| P4.1 绑定实际候选与验证证据 | 已完成（限定自动化） | candidate/validation 单元及真实固定命令、变化/失败/超时/取消/漏跑/替换拒绝通过最终 448/25 全量；开发自检仍使用原容器能力，验收不依赖模型声明 |
| P4.2 建立范围内自主返工闭环 | 已完成（限定自动化） | 真实独立 CLI 子读取原目标、代码/diff 与原验收记录；父裁决脚本发现后原授权内修复/复验/复查及失效/失败/取消/崩溃矩阵进入最终全量；不代表真实模型代码质量复审 |
| P4.3 按可验证节点更新唯一台账 | 已完成（限定自动化） | 真实父子/容器流程中，子收尾与父原生记录核实后取得 writer，先记进行中、返工后再记限定完成；局部编辑保留用户内容，不建第二任务树、不重复批准，最终全量通过 |

最小验证：validation、candidate、progress 单元测试及真实 Pi/临时 Git 的“开发→一次失败→返工→复验→进度更新”流程。fake provider 的角色输入与独立上下文只证明机制，不证明审查质量或消除确认偏误的效果。

P4.1 候选指纹前置：

- 沿用户的持续实施授权进入 P4。规模检查：先新增一个候选职责模块与单元测试，复用容器原有明确挂载遍历，不新增权限入口、后台执行器、依赖或配置面。指纹底层本身不提供 writer；后续必须在现有单 writer 流程内取证，固定验收与 review 仍未开放。
- 候选包含本次实际输入/可写范围的完整文件树、内容摘要和影响执行的文件元数据，并绑定 worktree/cwd、固定镜像、挂载读写属性、解释器及原验收命令顺序。不按 Git ignore 或“进度/构建产物”标签任意排除挂载内容；临时输出宜写容器 `/tmp`，实际候选变化需重新形成证据。复用同一次路径遍历，在流式读取前后核对句柄身份；不声称提供对其他宿主进程的原子文件系统快照。定向单元与后续正式命令绑定待验证。
- 候选与容器底层定向 **45/45 通过（17 候选 / 28 容器）**，根 `adaptive-tests-1rA4MV`，typecheck 通过。正文/输入、新增/删除/重命名、模式/同内容重写、镜像/命令/顺序、挂载属性及 cwd 变化使指纹失效；正常重复读取稳定，台账回写不影响未挂载的候选，受保护/链接/取消仍拒绝。只是底层单元，不代替真实 Pi 验收。
- 开始正式固定验收接入：新增一个窄 validation 模块，复用同一子 Pi/ARM/容器/lease 收尾，不引入第二执行后端。`delivery_validate` 使用原批准清单；子验收模式拒绝文件编辑、命令替换、失败后继续和重放，实际执行仍是 Pi 原生 bash 工具与配置钩子。单次子收尾摘要附固定验收引用、前后候选和命令终态，不记录第二份逐工具事件；父按实际结果判断，不采用模型“通过”声明。当前阶段共新增两个生产模块及候选单元文件，后续补一个验收单元文件，不新增用户配置或批准种类；正式入口待验证。
- 固定验收、候选、容器、开发和 policy 定向单元 **82/82 通过**，根 `adaptive-tests-0EoRHU`，typecheck 通过。包含新 11 项验收单元：命令清单独立快照、真实终态分类、未运行/替换/跳序/重放/失败后续跑拒绝、后次启动前失败不能复用上一容器终态、退出 0 但候选变化/缺失，以及空清单不算通过。仅单元机制证据；正在补完整真实命令清单、失败返工、候选变化及配置钩子掩盖错误的正式 Pi/Docker 组合。
- 正式固定验收首条正向 **1/1 通过**，根 `adaptive-tests-LTMqvF`，typecheck 通过：SDK 父模拟确认后，真实 CLI 子依次运行两条批准命令，各有独立真实 Docker 执行/终态和原生工具关联；候选前后一致，子清理与父原生结果后交回 writer，再回写既有台账，无重复批准。不是模型/用户 TUI 或独立审查验收；完整正反矩阵与全量待复验。
- 固定验收接入后的默认全量 **409/409（297 unit / 99 integration / 13 E2E），0 失败/取消/跳过**，退出码 0，根 `adaptive-tests-gbU2Vc`；真实容器全组 **23/23，0 失败/取消/跳过**，退出码 0，根 `adaptive-tests-jjoj3m`。两条命令沿用既有全量与显式 `--containers` 入口，终端仅 `awk` 过滤。新增正式两条命令验收、失败后原授权开发/复验、候选变化、替换/文件编辑/漏跑拒绝、超时及钩子掩盖真实退出 7，均不产生假通过；typecheck 通过。P4.1 的命令绑定已有此限定证据，当前候选重核与独立 review 仍待接，不标 P4 整体完成。

P4.2 独立审查与旧证据失效推进：

- 用户再次要求“继续”。复用原有只读子路径与单 writer：审查前重新核对本轮可信验收记录、批准和实际候选，审查期间持有父 lease，防止本 Package 并发修改；审查后再次核对候选。只返回独立审查事实与原生记录，发现由父会话裁决，不实现发现评分器或自动“审查通过”判定。
- 规模检查：P4 已新增 candidate/validation 两个窄模块和两个单元文件，本步只再增加一个 review 制品模块，测试扩展现有文件，共五个新文件；没有新依赖、后端或用户配置。实际差异使用固定系统 Git 的原始 blob 与隔离临时副本做 `--no-index` 比较，不在项目工作树运行 clean/textconv/external diff。绑定明确基线与路径，不读取真实用户 Git 配置；本机 `/usr/bin/git` 为 `2.50.1 (Apple Git-155)`。缺少系统 Git、特殊基线类型或超出单文件/差异 16 MiB 时报告具体缺口，不提供多后端回退。该模块尚待定向验证，不把制品准备当作独立模型审查。
- 验收与审查制品单元 **16/16 通过**，根 `adaptive-tests-K7ugBt`，typecheck 通过；新五项覆盖真实临时 Git 基线的创建/删除/执行位、被忽略源码、无 HEAD、原始二进制及特殊基线/临时路径拒绝。临时 Git 夹具建立自己的基线提交，不提交主仓；配置有副作用的 clean/textconv/external diff/fsmonitor 脚本均未执行，当前候选未被制品准备改动。正式独立子审查及证据失效仍待组合验证。
- 正式独立审查正向组合 **1/1 通过**，根 `adaptive-tests-G8bnU3`，typecheck 通过。SDK 模拟 TUI 父会话、真实 CLI 子会话与本地禁网容器证明：固定验收后，独立只读子会话收到原方案/实施正文，实际读取源码、差异和原始验收 Session，不继承父历史；父测试驱动裁决脚本发现后，在原授权内开发返工、重新验收/审查并回写既有台账，子 PID 实际退出、lease 交回。fake provider 只验证编排机制，不代表真实审查质量；旧证据失效与审查失败/取消仍待反例验证。
- 审查能力缺失反例首次 **0/1，退出码 1**，根 `adaptive-tests-DFxtZ2`，typecheck 通过。真实审查子 `read` 被配置覆盖，READY 检查拒绝发送任务，原生父引用证明子退出 0/null，审计无子模型调用；Pi 尚未创建模型 Session 文件。P4 新收尾误要求该文件而锁住父 lease，属于本次实现问题。最小修正：沿既有 started 回调记住是否进入任务发送阶段；未发任务且明确正常退出时使用本次关闭引用，已发任务/未知/非正常退出继续严格核实持久关闭，不放宽权限。待原反例及失败矩阵复验。
- 原能力缺失反例修复后 **1/1 通过**，根 `adaptive-tests-dHkO7M`，typecheck 通过；无模型或越权写入，子实际退出后父 lease 交回，能够记录审查失败。接下来验证完整证据失效/取消/崩溃及回归矩阵。
- 审查反例与正式工具来源矩阵 **16/16 通过**，根 `adaptive-tests-88zRSb`；候选/验收/策略单元 **47/47 通过**，根 `adaptive-tests-XwyJmz`。真实 SDK/CLI、模拟 Docker 分别覆盖无本轮验收、源码/输入/批准变化后重验、最新失败不回退旧成功、父内存与磁盘同时篡改/子日志篡改、必需工具覆盖、配置拒绝/异常、只读扩权拒绝、父 lease 竞争、取消清空队列且子实际退出、审查期间候选改变及子崩溃保留未知 lease；新增 validate/review 同名覆盖门禁的单元与正式入口证据。未使用真实 Provider；P4 继续补节点局部回写与固定验收取消，然后全量复验。
- 固定验收取消及审查返工后的局部节点回写 **2/2 通过**，根 `adaptive-tests-HTQAZ2`，typecheck 通过。真实容器命令取消后终态为 cancelled，不消费父队列、不形成可审查证据；审查发现后先记进行中，再开发/复验/复查，父取回 writer 后精确编辑原台账，保留用户无关内容，不重复批准、不新建任务树。P4 独立事项已有定向限定证据，全量收口仍待执行。

##### P5 — 取消、持久化故障与中断恢复

依赖：P2—P4 的记录、执行、交接和候选绑定就绪；补齐故障矩阵，不另建恢复平台。

主要落点：`src/subagents.ts`、`src/runtime-state.ts`、`src/workspace.ts`、`src/authorization.ts`、`src/validation.ts` 与现有生命周期/RPC 测试。

| 事项 | 状态 | 完成证据 |
|---|---|---|
| P5.1 取消传播与实际执行清理 | 已完成（限定自动化） | 原文件/容器后代清理、新固定验收/审查取消、开发 I/O 在途 reload 与父文档落盘前 reload 进入最终全量，等待实际停止及原生交接；未知清理仍保留 lease，最终 PID/容器审计通过 |
| P5.2 持久化失败不产生假完成 | 已完成（限定自动化） | 新验收/审查父终态篡改及 EACCES、审查子 EACCES 保留 writer；批准、子文件/容器引用、文档/开发终态和 lease 既有失败矩阵通过全量。不增加影子账本或补记录 |
| P5.3 基于文档和现场恢复新流程 | 已完成（限定自动化） | 正常 reload/tree 后不自动调用模型或复用旧授权，压缩仍核实原始记录；子写入后 SIGKILL、真实 CLI 重开及 fork 保留部分文件/未知 lease，status 展示磁盘归属。无自动解锁、迁移或重放；不是所有崩溃窗口验收 |

P5 推进：

- 沿持续授权补真实故障与恢复矩阵。规模检查：扩现有开发集成/隔离夹具与状态命令，不新增文件、配置、恢复入口或持久格式。P2—P4 已覆盖取消传播、文件/容器实际清理与多数记录失败，本步补验收/审查原生结果写盘失败、正式 reload/分支/压缩及崩溃重开。状态命令读取同一个真实 lease，显示执行归属与记录位置，不把“本进程没有 active 对象”说成现场无 writer，也不通过 PID 探测自动解锁。恢复继续是文档与现场核对，旧权限/验收不从日志摘要自动重建。
- 首轮 P5 定向 **7/8，退出码 1**，根 `adaptive-tests-5xf9X7`，typecheck 通过。验收/审查父终态篡改与真实 EACCES、审查子 EACCES 均保留 lease 且不写成功进度；正常 reload 不自动调用模型，原授权/验收不可复用，重新确认/验收后可继续；源码写入后子 SIGKILL、真实 CLI 重开原 Session 不重放、实际 status 显示原 lease。唯一失败是 tree 夹具传入当前 leaf，Pi 直接 no-op，没有触发导航；属于新测试错误，不是权限失效漏洞。修正为实际导航到旧节点后复验，不改变产品权限策略。
- 实际 tree 导航修正后 **1/1 通过**，根 `adaptive-tests-RICWp5`；确实导航后旧权限和验收不可复用，新确认/验收后可继续，保留实际源码。继续补公开压缩钩子与在途真实 reload，不把压缩文本视作新批准。
- 压缩/在途 reload 定向首次 **1/4，退出码 1**，根 `adaptive-tests-ORBpfV`；typecheck 退出码 2。压缩单元通过，两条正式压缩夹具误用不存在的 `setCompactionSettings`（TS2551），改为公开 `applyOverrides`。在途 reload 暴露真实产品缺口：子 I/O 清理与 CHILD_EXIT 完整，但 SDK `reload()` 先发 shutdown 再卸载旧处理器，原父 toolResult/交接晚于 shutdown，原 lifetime 过早撤销导致残留 lease，父回合也未被中止。最小修复沿原事件收尾：shutdown 中止父回合并等待原生 `agent_settled`，保留旧处理器完成既有结果核实/lease 释放，再撤销残余 lifetime；未知收尾仍锁定。待原反例复验，不新增恢复状态格式。
- 压缩/在途 reload 修复后 **4/4 通过**，根 `adaptive-tests-aOUwiZ`，typecheck 通过。公开 `session.compact()` 使用固定的测试摘要而非总结模型：本轮原始批准/验收仍逐一核实；仅有摘要不能授予文档或源码权限。真实开发 I/O 在途 reload 等待句柄、子进程与父原生终态，lease 正常交回，不续跑父模型，重载后原授权失效。正补同模式的父文档 writer 在途重载反例。
- 父文档在途重载首个夹具 **0/1**（`adaptive-tests-M5y131`）：只观察到 lease 后即重载，尚未证明进入 I/O 等待，故不能将此失败作为句柄等待证据。改用公开 `tool_result` 钩子确定写入已完成、原生结果尚未落盘的真实窗口，仍 **0/1**（`adaptive-tests-Xd5qWJ`）：reload 提前完成，复现同类父文档收尾缺口。父文档 writer 按相同顺序中止父回合、等待 `agent_settled` 核实与交接后撤销 lifetime；已发生的写入保留，不伪造回滚，待复验。
- 父文档落盘前 reload 修复后 **1/1 通过**，根 `adaptive-tests-r14zLK`；父 writer 单元全组 **32/32 通过**，根 `adaptive-tests-idOyW0`，typecheck 通过。新增两项单元验证在途 shutdown 必须等待父原生停止；原结果落盘才交回，缺记录仍保留 lease。旧关闭失败、未知终态与锁清理矩阵继续通过。

最小验证：runtime、authorization、workspace、validation 单元测试和真实 Pi/临时 Git 的取消、SIGKILL、写盘失败、重开/reload 及竞争用例。故障后复查受控进程和部分文件；不能确认清理时必须记录断点，不能仅依靠测试 teardown 掩盖产品清理缺失。

##### P6 — 使用体验、全量验收与交付收口

阶段状态：已完成本轮限定验收。真实 TUI 证据由用户拒绝场景及后续明确授权的代理按键操作组成；桌面视觉、输入法、其他平台和真实模型完整交付质量不在完成范围内。

依赖：前项实现及自动化证据就绪；本项负责补齐最终证据，不代替前项逐步自检。

主要落点：三个现有 `prompts/delivery-*.md`、`skills/adaptive-delivery/SKILL.md`、`README.md`、`AGENTS.md`、manifest/lockfile、相关展示与资源模块、正式测试及本台账。

| 事项 | 状态 | 完成证据 |
|---|---|---|
| P6.1 收敛交互资源与旧机制残留 | 已完成（限定自动化） | README/Skill/run Prompt、批准显示与技术方案同步候选验收/审查/现场恢复及限制，最终全量和离线制品加载通过；保留旧台账历史，不恢复旧契约或夸大真实用户/模型验收 |
| P6.2 完成正式自动化与独立代码复审 | 已完成（限定复审与返工范围） | 独立真实模型复审完成，四项发现均已修复并有正式单元及真实 Pi/临时 Git 回归。最新 467/467 默认、25/25 真实容器、typecheck/diff 与本轮收尾审计通过；没有再次调用真实模型或宣称覆盖全部风险 |
| P6.3 完成限定交互验收与最终报告 | 已完成（用户拒绝场景＋授权代理真实 TUI 按键） | 用户截图与原生记录证明拒绝场景；后续明确授权代理操作，真实 Pi TUI 伪终端按键 9/9 通过，覆盖正向独立确认、开发/容器验收/审查/返工、普通子询问、Escape/队列恢复、reload/重进与状态展示。6 个原生批准、48 个原生工具结果、12 个退出 PID、2 个已清理容器和最终文件核对通过；最终报告与未覆盖范围见下文，没有发布动作 |

P6 自动化收口推进：

- 复用现有 E2E 文件增加离线 tarball 加载验证：只把 manifest 声明的交付资源放入空临时目录，用 `npm pack --offline --ignore-scripts --json` 生成制品，解包后以该制品加载真实 Pi，不带 node_modules、仓库/用户配置或测试插件。没有 install/publish/全局配置写入，fake provider 仍是单独测试夹具。首轮 **0/1**，根 `adaptive-tests-A00kZu`：npm 11 拒绝 user/global 两种配置重复加载 `/dev/null`，尚未生成制品；属于测试环境设置错误。仅该夹具改为临时目录的两个独立空配置路径，继续禁网、禁脚本，不读取真实配置，待复验。
- 离线打包配置修正后 **1/1 通过**，根 `adaptive-tests-ZuVFs4`。实际生成 npm tarball，断言包含 candidate/validation/review 等新资源、无 node_modules/测试或隐藏配置；解包制品的副本加载真实标准 CLI，资源发现与只读任务通过。不是安装、发布或真实模型交付验收；README、Skill、run Prompt、批准显示及技术方案已同步当前能力，接下来全量复验。
- 最终默认全量 **448/448（307 unit / 127 integration / 14 E2E），0 失败/取消/跳过**，退出码 0，根 `adaptive-tests-Wr3UDp`；真实容器全组 **25/25，0 失败/取消/跳过**，退出码 0，根 `adaptive-tests-kss1aY`。命令分别为 `node --import tsx test/support/run-tests.ts test/unit/*.test.ts test/integration/*.test.ts test/e2e/*.test.ts` 与 `node --import tsx test/support/run-tests.ts --containers test/container/command.test.ts`，终端仅 `awk` 过滤；`node node_modules/typescript/bin/tsc --noEmit` 与 `git diff --check` 均退出码 0。包括真实 CLI fork、所有新增 P4/P5 正反矩阵与离线 tarball 加载；模拟 TUI/fake provider 只证明机制。
- 最终收尾审计通过：默认根 **225 个 Pi PID、298 个模拟 Docker PID、1 个能力探测后代**，真实容器根 **45 个 Pi PID** 均 ESRCH；连同本阶段 22 条先前定向/基线根，24 个指定根的已记录进程均无存活/未知状态。本阶段五个真实容器根合计 **57 个单次引用**，按各自唯一 label 只读查询全部无残留，没有查询或清理用户其他容器。测试中故意保留的未知 lease 属于临时现场证据，不通过删除它们掩盖产品失败。
- P4、P5 和 P6.1 按当前平台/公开原生工具/已批准 Docker 的限定自动化收口；不将该结果扩大到真实用户 TUI、真实模型质量、任意插件、跨平台或所有崩溃窗口。当时 P6.2 因独立复审待授权保持阻塞，后续授权、复审和发现另记下文；P6.3 待用户人工交互，不把该轮写成整个重构已交付。P4 新增三个职责模块和两个单元文件，P5/P6 只扩现有文件，没有新增依赖、生产配置、第二 runtime/计划系统或恢复格式；未提交、推送、创建 PR、安装、发布、部署或修改用户 Pi 配置。

P6 真实模型独立复审（以下保留复审时证据，后续修复见下节）：

- 用户对“使用当前 Pi 配置模型，仅检查本仓源码、差异和测试证据的独立只读复审，不修改文件”的请求明确回复“可以的，用真实模型验证”。本次仅解除该具体真实 Provider 调用限制，不包含产品修改、自动 UI 操作、安装、生产或 Git/发布动作。公开 `SettingsManager` 返回当前 `openai/gpt-6-astra`、`xhigh`；不输出或复制凭据，认证由 Pi 自身处理。
- 单次临时审查材料与驱动放在 `/private/tmp/adaptive-real-review.ZgWnV7`，不新增产品配置或运行时。源码副本为 53 个文件、903,955 bytes，包含 5 个未跟踪生产模块；摘要为 `fbec7c3d600e4e72e73ed264194bbf95f55f642325b6e239957698ea67191e47`。保存明确范围的真实 Git diff 和既有真实 Pi/Docker 场景的 6 份原始 Session 副本；脚本 fake 记录只作机制证据。使用本机标准 Pi `0.85.1` 公开 SDK、新持久 Session、原生 read/grep/ls 与被审查的正式只读门禁；临时路径限制阻止模型工具访问认证，系统沙箱禁止写源码副本、证据、主仓和真实配置。沙箱允许出站网络、禁止入站，不宣称网络层限定 Provider 域名；应用只选择已授权模型并禁启动更新/遥测/目录刷新，没有 shell、网络或开发/批准工具。本次不是产品 `delivery_review` 完整闭环或真实 TUI 验收。
- 启动问题与处理：首次准备退出码 1，因全局 SDK 仅导出 ESM，改为公共包的 ESM 解析后准备成功；未修改产品。首次运行退出码 1，Pi 读取认证所需的 `auth.json.lock` 目录被系统拒绝，尚未发起模型请求；仅放行该锁路径的临时创建、元数据和删除，继续禁止写真实 `auth.json`、`models.json` 或其他配置，随后重试正常完成。没有复制或输出凭据，没有用其他模型或 fake provider 回退。
- 真实调用结果：`review.mjs` 退出码 0，11 个模型回合、66 次原生只读工具调用，最终 `stopReason=stop`，无扩展错误。原生 Session 为 `sessions/2026-09-07T09-55-17-862Z_01a07b4b-26e5-75c7-b831-b3056154ac64.jsonl`，原文 `review.md`、计量和终态 `review-result.json`、源码清单 `manifest.json` 均在上述根。会话记录的 Provider/model 为 `openai/gpt-6-astra`，计量合计 input 184,596、output 13,460、cacheRead 990,848，SDK 估算 cost 约 USD 3.51，不作为实际账单证明。复审结束时副本及对应主仓 53 个文件摘要均未变化。
- 父侧复现命令：`node --import tsx test/support/run-tests.ts /tmp/adaptive-real-review.ZgWnV7/findings.test.mts`，退出码 0，**4/4 缺陷复现断言成立，0 失败/取消/跳过**。这不是修复后通过或新增正式测试通过。制品根 `/private/var/folders/b0/vsckn5zn3w3dms0_3scbhv400000gp/T/adaptive-tests-lPcfe3`；沿用现有系统禁网、临时 Git/HOME/agent dir、空认证、fake provider/fake Docker，父交互为模拟、子为真实标准 Pi CLI，没有再次调用真实模型或创建真实容器。临时复现文件未合入仓库。
- **发现 1，P1，已确认未修复**：`src/workspace.ts:61,75` 的 `execFile("git")` 与 `src/subagents.ts:293` 的 `spawn("pi")` 信任 PATH。工作区 `bin` 排在 PATH 前面即可在身份/READY 核验之前运行宿主项目脚本，无须实施批准。复现中两个 Git 查询均触发标记、只读 Pi 启动也触发标记，后者实际退出 0。对应 `path-finding-ICLFaD`。最小修复方向是固定已核实的工作区外可执行入口，不为此开放宿主 Shell 或新增通用执行层。
- **发现 2，P2，已确认未修复**：`src/development.ts:94,121,297,303` 在 writer 交给子后才于 ARM 中捕获候选；已批准但尚未创建的 `src` 使准备失败。子尚无模型消息及已落盘 Session，收尾读取失败，父保留 child lease，后续开发和文档写入均被阻止。真实 Pi 复现确认 child model 调用为 0、进程已退出、lease 仍为 child；对应 `adaptive-pi-bH3OZM`。最小修复方向是前置可预见准备失败，并补 ARM 未完成/未发任务的可证明收尾，不放宽未知 lease 保留规则。
- **发现 3，P2，已确认未修复**：`src/development.ts:261,276,280,364` 只在审查前核验原 validation，结束与 writer 交回只检查当前 review；等待普通询问期间将原 validation Session 工具结果改为合法 JSONL，review 仍返回 `isError=false` 并释放 lease。对应 `adaptive-pi-wvM5Bo`，原记录中保留 `EVIDENCE_CHANGED_DURING_REVIEW` 标记。最小修复方向是私有绑定该次审查依赖的验收引用，在结束和终态交接处复核，变化则拒绝有效审查并撤销旧验收；不是原子文件快照要求。
- **发现 4，P2，已确认未修复**：`src/review.ts:25,49,73` 未禁用 Git replace；HEAD 原 blob A 被现有 `refs/replace/A` 指向当前 blob B 后，审查的 before 读取 B，真实改动被输出成 0-byte diff。对应 `replace-finding-sX0h6V` 与 `adaptive-review-jD5k64/diff.patch`；独立 `git --no-replace-objects cat-file` 仍读到不同的原文。最小修复方向是审查 Git 统一禁用 replace objects，补真实临时 Git 回归。
- 待验证假设：partial clone 的缺失 promisor blob 是否会让 `cat-file` lazy fetch 访问远端/启动 remote helper。模型没有动态证据，父侧本轮未复现，不将其列为第 5 个已确认问题，也不据此扩建规则或兼容层。
- 收尾核实：真实复审两次启动 PID、临时测试父进程、PATH 探针和测试审计中的 Pi/fake Docker 合计 18 个 PID 全部 ESRCH，无存活/未知进程；缺陷 2 的故意保留 lease 不删除。主仓本轮仅更新本台账，没有产品或正式测试修改，没有新增兼容、依赖或配置面；未提交、推送、PR、安装、发布、部署或写真实用户配置。P6.2 保持阻塞，下一步先修复上述 4 项并补正式回归，P6.3 继续待用户真实交互。
- 最终检查：`git diff --check` 退出码 0，暂存区为空；源码副本无变化，对照清单的主仓变化只有本台账。原生 Session 完整记录 66 个工具结果，工具名只有 ls/read/grep，工具错误为 0。本次未重跑历史 448/25 全组或 typecheck，不将既有证据写成新一次执行结果。

P6 复审发现修复：

- 授权与规模：用户了解四项局部修复方案后确认“可以的，那这四点是不是也得解决了”，随后要求“继续”。本轮按该方案修改现有启动、交接和审查模块及对应测试、文档；不新增依赖、生产配置、通用沙箱、强制解锁或兼容层。保留开始时 `main` 上全部既有改动及无关后续改进文档；不再次调用真实模型、不操作真实 TUI、不提交或发布。
- 当前进度：发现 1、2、3、4 均已完成修复及正式回归；最新默认全量、真实容器组、typecheck/diff 与本轮进程/容器收尾审计通过。以下按实际顺序保留红测、修复、失败处理及复验证据。
- 发现 1 修复前定向命令 `node --import tsx test/support/run-tests.ts --test-name-pattern='PATH|子 Pi 启动前拒绝' test/unit/workspace.test.ts test/unit/subagents.test.ts test/integration/development.test.ts` **0/6，退出码 1**，根 `adaptive-tests-m1w5nB`。Git 项目脚本确实执行、Pi 项目入口及 Node shebang 解释器被替换，另含工作区外软链接指回项目入口；均为已知缺陷，不是测试环境故障。现改为固定系统 Git、启动前核实工作区外 Pi realpath，并以当前工作区外 Node 解释器调用标准 CLI；不经 Shell 包裹或备用入口，待复验。
- 发现 1 同命令复验 **6/6 通过，退出码 0**，根 `adaptive-tests-fwJLBi`，typecheck 退出码 0。包含未批准的正式 status/readonly、项目 Node 替换、项目 Pi 与工作区外链接指回项目、子目录 cwd；项目探针全部未执行，合法标准 CLI 正常退出。该项定向修复已验证，最终全量待执行。发现 2 进入修复，先补目录缺失后原授权返工/复验的真实 Pi 回归。
- 发现 2 修复前 `--test-name-pattern='验收候选准备失败' test/integration/development.test.ts` **0/1，退出码 1**，根 `adaptive-tests-K4Q7KK`，确认目录缺失变成子收尾错误。修复将唯一初始候选读取移至父持 lease、尚未启动子 Pi 时，传递独立副本并核对最终 receipt 的原候选；不额外做双份候选探测。子未执行且无消息时可正常关闭尚未创建的 Session；父只有未发送任务、RPC 无故障/在途工具、正常退出时可使用未执行收尾，已发送任务或丢记录仍严格拒绝。
- 发现 2 受影响三文件回归 **103/103，退出码 0**，根 `adaptive-tests-0mwSmV`。命令 `node --import tsx test/support/run-tests.ts test/unit/development.test.ts test/unit/validation.test.ts --test-name-pattern='验收候选准备失败|任务发送前记录失败' test/integration/development.test.ts` 的筛选参数误放文件后，实际执行三组全量，不将其误写成仅两项定向。覆盖准备缺失后无子进程/无残留 lease、原授权开发与复验、交接后任务发送前错误、既有消息/执行后丢 Session 拒绝，以及原有取消/记录/崩溃矩阵。同期 typecheck 退出码 2，仅测试未缩窄两种收尾结果的联合类型；已改为先断言存在 historyDigest，再检查摘要，复验待执行。发现 3 进入修复，已补审查在途及最终交接两种记录变化窗口。
- 上述测试类型断言修正后 typecheck 退出码 0。发现 3 修复前 `--test-name-pattern='原验收记录变化' test/integration/development.test.ts` **0/2，退出码 1**，根 `adaptive-tests-sSulf1`：在途记录被改仍返回成功，最终交接窗口被改仍释放 lease，均确认缺口。现为有效审查保留原验收的私有引用，审查结束重核，交回 writer 时沿原终态核验复核该引用；在途失效正常报错并清除旧验收，交接末端核验失败保留 lease，不把已返回正文当最终交付。补磁盘单独变化、内存/磁盘同时变化的单元用例，待复验。
- 发现 3 定向 `--test-name-pattern='原验收记录变化|审查终态依赖' test/unit/development.test.ts test/integration/development.test.ts` **4/4 通过，退出码 0**，根 `adaptive-tests-40SYhc`，包含失效后重新验收/审查正向恢复。同期 typecheck 退出码 2，为测试闭包中 AssistantMessage 属性的类型缩窄丢失，已先绑定已缩窄的局部消息后再构造夹具调用，待复验；生产类型没有错误。发现 4 已补 blob/commit 替代及真实 Pi 收到原始差异的回归。
- 上述类型缩窄修正后 typecheck 退出码 0。发现 4 修复前 `--test-name-pattern='Git replace' test/unit/validation.test.ts test/integration/development.test.ts` **0/3，退出码 1**，根 `adaptive-tests-dZRaMR`；blob/commit 替代均令修改从差异中消失，正式审查也只收到无关新增输入。现仅为审查 Git 调用增加 `--no-replace-objects`，不改仓库替代引用、文件或历史，待同命令复验。
- 发现 4 同命令 **3/3 通过，退出码 0**，根 `adaptive-tests-NJsQJm`：blob/commit 替代存在时仍输出真实修改，标准 Pi reviewer 确实读到原始差异，替代引用和当前文件未被改写。四项均完成定向验证，README 与技术方案已同步入口限定、单次候选准备、未执行收尾、原验收结束/交接核验和仅审查禁用 replace；下一步默认全量、真实容器组及收尾审计，P6.2 尚不标记完成。
- 修复后真实容器全组 `node --import tsx test/support/run-tests.ts --containers test/container/command.test.ts` **25/25 通过，0 失败/取消/跳过，退出码 0**，根 `adaptive-tests-SVZtqb`。终端仅 `awk` 过滤并启用 pipefail；typecheck 与 `git diff --check` 均退出码 0。默认全量尚在运行，进程/容器最终收尾待核实，不提前收口 P6.2。
- 修复后首轮默认全量 **466/467，退出码 1**，根 `adaptive-tests-NgW5rl`。唯一失败为原 `extension-lifecycle.test.ts` 的 missing-pi 场景仍要求 spawn 后 ENOENT 的委派终态；新入口在启动前明确拒绝，实际父工具已持久记录错误且无子进程。只调整该旧断言：要求明确 CLI 缺失错误、原生父 toolResult、没有子启动或伪造委派记录，不新增旧行为回退。其余 466 项通过，待定向与默认全量重跑。
- missing-pi 同入口定向 **1/1 通过，退出码 0**，根 `adaptive-tests-RVlPRt`；typecheck 再次退出码 0。默认全量重跑中，期间不再改产品代码；本轮审计仅查上述指定测试根的记录 PID 与真实容器唯一 label，不检查或清理用户其他进程/容器。
- 默认全量第二轮结果通道返回 `write_stdin: unknown process id pi-659`，无法取回退出码，根 `adaptive-tests-bqqXu3` **不计通过**；已核对其记录进程全部退出，继续原命令重跑。临时审计首次因错误假定 `/opt/homebrew/bin/docker` 而退出码 1，未执行查询；通过 `command -v docker` 核实为 `/usr/local/bin/docker` 后只改临时审计脚本，复验退出码 0，已完成的 12 个指定根记录进程无存活/未知，真实容器根 26 个唯一引用无残留。最终全量及包含该轮的审计仍待结果。
- 最终默认全量 `node --import tsx test/support/run-tests.ts test/unit/*.test.ts test/integration/*.test.ts test/e2e/*.test.ts` **467/467 通过，0 失败/取消/跳过，退出码 0**，根 `/private/var/folders/b0/vsckn5zn3w3dms0_3scbhv400000gp/T/adaptive-tests-7aGqen`；终端仅 `awk` 过滤并启用 pipefail，已完整取回真实终态。相较修复前新增 19 项正式回归；真实容器组 `adaptive-tests-SVZtqb` 的 25/25 与最终源码一致，之后仅调整旧测试断言及台账，没有产品改动。typecheck 与最终 `git diff --check` 均退出码 0；暂存区为空，HEAD 仍为 `a1b4d9b`。
- 最终收尾审计退出码 0：本轮 13 个指定根的全部已记录 Pi、fake Docker 和能力探针 PID 均 ESRCH，无存活或未知；最终默认根 591 个记录 PID，真实容器根 45 个记录 PID。真实容器根 26 个唯一引用按各自 label 查询均无残留，没有操作其他容器或删除故意保留的未知 lease。临时审计脚本和原始结果为 `/private/tmp/adaptive-real-review.ZgWnV7/audit-fixes.mjs`、`fixes-audit.json`，未合入产品。
- 修改范围核实：对照原真实复审文件清单，仅本次明确的 14 个仓库文件变化：生产 `src/workspace.ts`、`src/subagents.ts`、`src/development.ts`、`src/validation.ts`、`src/review.ts`；单元 `workspace/subagents/development/validation.test.ts`；集成 `development/extension-lifecycle.test.ts`；README 和两份规划文档。没有新增仓库文件、依赖、配置面或通用抽象层，其他既有修改及无关后续改进文档保持原样。Pi 固定工作区外标准 Node CLI；内部 ARM/验收入参直接更新，不支持旧运行制品、Shell 包裹入口或迁移回退。
- 四项发现按本轮复审与返工范围关闭，P6.2 完成限定验收，P6 父项仍因 P6.3 真实 TUI 未验收而未完成。真实模型只读复审发生于修复前，本次没有再次调用模型，不能宣称“修复后独立模型再审通过”；partial-clone 假设仍未验证，其他平台/版本和任意插件不在此次证据范围。未读取真实凭据、写用户配置、安装、提交、推送、创建 PR、发布或部署。

P6.3 隔离交互材料与预检：

- 用户在了解隔离实例用途后授权“可以，那你推进下”。本轮只准备临时项目、独立配置、固定脚本 Provider、启动命令和人工操作说明，并做非 UI 预检；不操纵真实终端界面，不代替用户确认，不续调真实模型。设计规模为 5 个手写临时文件（准备、Provider、预检、启动、说明）及其生成制品，主仓仅更新本台账，不新增产品代码、依赖、配置面或第二计划系统。
- 制品根 `/private/tmp/adaptive-tui-acceptance.wgsLQY`。`interactive` 留给用户真实操作，`preflight` 独立用于模拟预检；两者各有临时 Git、HOME、agent dir、空认证和 Session 目录。当前产品 17 个交付资源文件复制到 `product-package`，清单在 `manifest.json`；不携带主仓 Git、node_modules、用户配置或凭据。系统沙箱禁止网络、真实 HOME 文件内容读取和制品根外写入，仅放行现有本地 Docker socket；socket 是授予正式容器实现的能力，不扩大为任意恶意插件的隔离保证。
- 准备命令 `node /tmp/adaptive-tui-acceptance.wgsLQY/setup.mjs`、启动脚本语法检查 `/bin/zsh -n /tmp/adaptive-tui-acceptance.wgsLQY/start.sh` 均退出码 0。预检 `node /tmp/adaptive-tui-acceptance.wgsLQY/check.mjs` 退出码 0，9 项检查通过：真实 HOME 列举、TCP 和根外写入均 EPERM，临时认证为空；已有镜像可用且未拉取；标准 CLI RPC 正确加载脚本 Provider、拒绝非 TUI 批准；SDK 模拟拒绝及三项独立授权后，真实子 Pi 完成写入/编辑/读回，真实 Docker 固定验收，脚本审查发现目标差异，范围内返工使旧验收失效，重新验收/审查及父局部回写通过；普通子确认/选择/输入和拒绝暂停通过；SDK abort 后子进程退出、writer 交回且源码不变；SDK reload 后旧文档和实施授权被拒绝。
- 原始结果 `preflight-result.json`、`preflight/rpc-check.json`、`preflight/sdk-check.json` 及父/子原生 Session 均保留。检查使用标准 Pi `0.85.1`、脚本 Provider `adaptive-tui-fixture/fake`，本地镜像 ID `sha256:262aa4f3ae295c90861c34b4319f74feda309a2342e0439d4017be78427b97c0`。10 个真实子 Pi PID 均 ESRCH，2 个本次容器按唯一 label 查询无残留，无残留 writer；人工项目源码目录和父 Session 目录仍为空。最终核对含 SDK/RPC 父进程共 12 个 PID 均 ESRCH，17 个产品文件的副本和对应主仓摘要仍与准备清单一致，Provider 源文件与加载副本一致；`git diff --check` 通过，暂存区为空，HEAD 仍 `a1b4d9b`。未把 SDK 模拟选择、abort/reload 写成用户确认或 Escape/重进证据。
- 下一步由用户在真实终端运行 `/bin/zsh /private/tmp/adaptive-tui-acceptance.wgsLQY/start.sh`，按临时 `README.md` 操作文档授权、方案确认、实施确认、开发/验收/审查/返工、普通子询问、Escape、reload 和 `--continue` 重进。正文可读性、焦点、队列恢复和快捷键需用户观察；之后再由父侧核对原始记录、进程、容器及文件，回写人工结果。P6.3 与 P6 父项尚未完成；本轮未运行新的默认全量/typecheck（产品及正式测试无变化），未安装、提交、推送、创建 PR、发布、部署或修改真实用户配置。

P6.3 真实用户 TUI 验收（逐项记录，未覆盖部分保持待验收）：

- 用户在真实终端启动 `start.sh`，截图确认当前目录为 `interactive/repo`、模型为 `fake`。随后实际输入“开发”“文档授权”，拒绝授权后输入“编写计划”。用户提供的两张结果截图分别为 `pi-clipboard-abe3046c-97d8-4f11-9f13-6a1fcd4a3b87.png` 和 `pi-clipboard-e15d9582-53ec-4f1b-9380-baa48eaa793e.png`：未授权开发被拦截，文档授权返回“本次未批准”，其后的文档写入仍被拦截；不是 SDK 或 RPC 模拟选择。
- 父侧只读核对 `interactive/parent-sessions/2026-09-07T15-07-33-768Z_01a07c69-0a04-752b-a8c8-f39d05023927.jsonl`：3 个原生工具结果依次为 `delivery_develop isError=true`、`delivery_approval approved=false`、`delivery_document_write isError=true`，批准条目数为 0。实际 `src` 为空、`plan.md` 不存在、磁盘无 writer lease，断言检查退出码 0。这组拒绝场景完成限定真实交互验证；没有操作用户正在运行的 TUI 或修改临时项目。
- 正向文档授权、方案/实施两次独立确认、正文与焦点在确认期间的体验、开发/验收/审查/返工、普通子询问、Escape/队列恢复、reload 和退出重进仍待用户继续操作，不凭已完成的预检或当前截图提前标记。主仓仅回写本台账，产品兼容边界不变，未提交或发布。

P6.3 用户授权代理操作真实 TUI：

- 用户明确提出“接下来的可以由你来操作进行验证吗”，授权本次隔离交互的代理操作，覆盖后续具体测试正文中的确认与按键；不扩大到真实 Provider、用户配置、安装或发布。先按记录 PID/TTY 尝试连接用户正在运行的 Terminal，只读 AppleEvent 请求退出码 1、`AppleEvent 已超时 (-1712)`，没有发出后续键入。另一次可用性探测因系统没有 `tmux` 而返回 1，未安装工具；这些是访问/环境探测问题，不是产品测试失败。
- 采用同一临时根下的独立 `automated-tui`，保留用户原 `interactive` 会话。仅新增临时 `tui-check.py`，使用当前 PATH 的 Python `3.14` 标准库 PTY，启动工作区外标准 Pi `0.85.1` CLI 的实际 TUI；继承原系统沙箱、空配置、同一产品/脚本 Provider 副本和真实 Docker 路线。120 列 × 44 行、`xterm-256color`；输入来自真实 PTY 字节，未绑定 SDK 假 `uiContext`，未改 `ctx.mode`、批准函数、原生 Session 或产品工具。清理和候选验证仍由正式产品代码执行。
- `python3 /private/tmp/adaptive-tui-acceptance.wgsLQY/tui-check.py prepare` 退出码 0。`probe` 退出码 0：真实 TUI 展示完整文档授权正文，默认焦点为“暂不批准”，实际 Escape 得到 `approved=false`，实际 `/quit` 退出 0。`run` 退出码 0，**9/9 检查通过**：正向三项独立授权、默认拒绝/方向键焦点及父计划写入；开发/状态/真实 Docker 固定验收/脚本审查发现；原范围返工/旧验收失效/重验审查/父回写；普通子确认/选择/输入；Escape 拒绝子询问；Alt+Enter 排队/Escape 中止实际子 Pi/原文字恢复编辑器；`/reload` 后旧授权拒绝；重新确认后 `/quit` 正常退出；`--continue` 回到同一历史而不恢复旧权限、文件保留并正常退出。
- 队列恢复使用实际按键交叉核对：先看到 follow-up 队列展示，Escape 后原备注没有自动形成 user 消息，再只按 Enter（没有重新输入文字）才能产生该原备注的 user 消息。该证据来自真实编辑器和原生日志，不将 SDK 的 `clearQueue()`/`abort()` 替身当成 Escape。三种普通子询问也由实际父 TUI 对话接收 Enter/输入或 Escape；回答没有生成额外阶段批准。
- 主验收及重进共用原生父 Session `automated-tui/parent-sessions/2026-09-07T15-23-22-853Z_01a07c77-8563-7292-b0e5-cf4d02f676f0.jsonl`。`automated-tui/result.json` 保存 9 项结果；`evidence/*.ansi` 保存原始终端输出，`*-keys.jsonl` 保存输入时序，文本截取只辅助查看、不冒充桌面截图；`audit-result.json` 保存收尾核对。去重后 6 个真实 TUI/select 批准、48 个原生工具结果，12 个已记录 Pi PID（含探测父、验收/重进父和 9 个子 Pi）全部 ESRCH；2 个实际容器均 exitCode=0、clean=true，按各自唯一 label 查询无残留，磁盘无 lease。最终源码为 `export const value = 3;`，示例计划已局部回写且在取消、reload、重进后保留。
- 最终审计退出码 0：17 个产品资源的主仓文件和加载副本摘要仍与准备清单一致，Provider 源码与副本一致，临时认证为空；用户原会话仍只有先前 3 个工具结果、0 个批准，源码为空，未被代理驱动改变。未清理或关闭用户保留的原 TUI。当前工作新增内容只在临时制品中；主仓收口更新 README 与本台账，未改变产品代码、依赖或正式测试，无兼容性新增。本次没有重跑默认全量、25 项容器全组或 typecheck；此前通过证据不改写为本轮新执行。

P6 本轮交付报告：

- 已完成范围：标准 Pi 公开 API 下的单一 RPC 委派、父分阶段批准与 Markdown 工具、共享单 writer、受控子文件开发/明确授权的本地 Docker、候选绑定验收/原始差异独立审查、取消收尾及失效后现场核对。配套资源、文档和正式测试已同步；四项真实复审发现的修复均有回归。没有新增第二 runtime、计划系统、迁移层或通用插件适配平台。
- 验证：此前最终正式默认 **467/467**、真实容器 **25/25**、typecheck、离线制品加载与收尾审计通过；本次用户真实拒绝场景、代理真实 TUI **9/9**、独立原始记录与进程/容器收尾核对通过。复审发生于四项修复前，修复后由正式回归验证，没有二次真实模型再审。该结果足以关闭 P1—P6 本轮限定实施与交互验收，不宣称无剩余风险。
- 兼容性：直接替换旧契约、Session、运行制品和内部 ARM 入参，writer lease v2；不迁移旧记录、不恢复旧权限、不强制解锁、不提供旧逻辑回退。子启动限定工作区外标准 Node/Pi CLI，宿主 Shell 关闭；只读/开发环境不能核实或清理未知时保持关闭。只支持已验证的本机版本/平台组合，不承诺任意插件或原子文件系统快照。
- 残余风险与未执行项：fake provider 的固定开发/审查脚本只证明编排，不证明真实模型质量；PTY 字节、正文和焦点证据不覆盖各桌面终端的视觉、输入法或系统快捷键映射。partial-clone lazy fetch 假设、修复后二次模型复审、其他平台/版本、所有崩溃窗口及真实项目完整交付未执行。Terminal 窗口接管因 AppleEvent 超时未完成，采用经说明的独立 PTY 完成限定按键验收，不把它报告为用户原窗口的自动操作。
- Git 与发布：交互验收轮保留全部既有未提交改动及无关文件，未 commit、push、创建 PR、全局安装、修改真实 Pi 配置、npm publish 或部署。后续用户单独授权的本地基线提交见下一节；发布仍需具体动作的单独授权。

本轮本地基线提交：

- 用户对先保存已验收基线的建议明确回复“可以，先完整提交下”，本次授权本地 Git 提交，不包含 push、PR、安装、发布、真实模型新调用或后续功能开发。
- 提交前范围核对：从 `a1b4d9b` 起的 40 个本轮文件，含 24 个已跟踪修改和 16 个新增源码/测试文件；完整纳入文档、资源、正式实现及回归，不纳入临时 TUI/模型审查制品。已有 `docs/后续改进-断流自动重试.md` 是明确延期的独立需求备忘，原样留在工作区，不混入本轮实现提交。
- 已逐项核对提交文件类型与范围，17 个产品资源的摘要仍与已完成真实 TUI 验收的副本一致；既有正式 467/467、25/25 及 TUI 9/9 的证据保持原始执行时间和范围。本轮仅同步技术方案中残留的旧阶段描述和验收引用、回写本提交记录，不改变技术约束或产品/测试代码，不重复运行已通过且实现未变的全量。提交前工作区和暂存区 `git diff --check` 均通过，暂存清单与 40 个范围文件一致，没有遗漏新增模块或回归。
- 提交结果：`git commit` 退出码 0，本地基线提交已完成，提交说明为 `feat: 完成交付编排与隔离验收闭环`。本条及当前阶段状态在成功后补记并一并纳入该本地提交，最终 hash 以 Git 原生记录为准，不将尚未执行的动作记完成。本次只提交当前验收范围；后续重试备忘原样保留未跟踪，未推送、创建 PR、安装或发布。

真实插件、真实模型交付效果、其他平台/版本及生产环境不在默认自动化授权内，需要时另行限定范围并取得授权；不为等待任意插件全兼容而扩大本期。真实 TUI 操作可以由用户完成，或在用户明确授权后由代理在隔离实例中执行并如实记录操作来源；SDK 模拟交互仍不能冒充真实 TUI。不恢复旧 canary。

#### 验证方式与待执行命令

下列仅列当前存在的验证入口，实际结果见对应 P 项。P1.2 已删除旧契约测试，后续事项在实现时补齐对应边界用例；不创建空测试保留旧文件名，也不把缺失用例当成通过。

| 覆盖范围 | 定向验证入口 |
|---|---|
| P1 依赖、隔离、只读入口与 RPC 委派 | `node --import tsx test/support/run-tests.ts test/unit/package-manifest.test.ts test/unit/policy.test.ts test/unit/subagents.test.ts test/integration/pi-isolation.test.ts test/integration/extension-lifecycle.test.ts test/e2e/rpc-resource-discovery.test.ts` |
| 可复用 workspace 工具 | `node --import tsx test/support/run-tests.ts test/unit/workspace.test.ts test/integration/writer-lease-process.test.ts`；不替代 P2/P3 新 writer 验收 |
| P2.1 批准记录与拒绝伪造 | `node --import tsx test/support/run-tests.ts test/unit/approvals.test.ts test/unit/policy.test.ts test/integration/extension-lifecycle.test.ts test/e2e/rpc-resource-discovery.test.ts`；真实 TUI 交互另见 P6.3 |
| P2.2 内部文档变更底层 | `node --import tsx test/support/run-tests.ts test/unit/planning-documents.test.ts test/unit/workspace.test.ts`；内部条件参数不是批准，不能替代正式入口与真实 Pi 新流程验收 |
| P2.3 内部文档批准核验前置 | `node --import tsx test/support/run-tests.ts test/unit/approvals.test.ts test/integration/extension-lifecycle.test.ts test/e2e/rpc-resource-discovery.test.ts`；正向为模拟 TUI 单测，真实 Pi 只覆盖原有拒绝回归，写入接入仍待后续验证 |
| P2.2/P2.3 正式文档入口 | `node --import tsx test/support/run-tests.ts test/unit/policy.test.ts test/unit/parent-writer.test.ts test/integration/document-entry.test.ts test/e2e/rpc-resource-discovery.test.ts`；SDK 正向为模拟交互，标准 CLI 验证 RPC/覆盖/子角色拒绝，不是用户真实 TUI |
| P3.1 只读环境前置 | `node --import tsx test/support/run-tests.ts test/unit/subagents.test.ts test/integration/child-environment.test.ts test/integration/extension-lifecycle.test.ts`；工具来源、资源差异与配置钩子限定验证，不代替开发写入/交接和任意插件兼容证据 |
| P3 文件开发与交接 | `node --import tsx test/support/run-tests.ts test/unit/development.test.ts test/unit/workspace.test.ts test/integration/development.test.ts test/e2e/rpc-resource-discovery.test.ts`；SDK 父模拟交互、标准 CLI 子，包含公开 Bash 能力缺口取证，不是正式命令自检或强隔离验收 |
| P3 容器自检 | `node --import tsx test/support/run-tests.ts test/unit/container.test.ts test/unit/approvals.test.ts test/integration/development.test.ts`；真实 Docker 另显式执行 `node --import tsx test/support/run-tests.ts --containers test/container/command.test.ts`，仅放行本地 socket，固定本地镜像和临时无凭据输入，不拉取镜像 |
| P4/P5 新流程边界 | 开发验证/回写、外部进程清理及完整恢复按对应阶段补齐；不使用已删除的旧测试入口 |

最终稳定候选执行：

```sh
npm run typecheck
npm run test:all
npm pack --dry-run --json --offline --ignore-scripts
git diff --check
```

环境与证据要求：

1. **隔离**：沿用 P1 正式宿主，测试默认禁网；Pi 进程使用临时 HOME/agent dir、空凭证和假插件，系统策略拒绝真实用户配置读取及测试边界外写入。`PI_OFFLINE=1` 或清空环境变量不单独作为禁网证明。夹具不加载本机真实用户插件，也不使用真实模型、生产配置或旧 canary。
2. **依赖调整**：实施时使用隔离 npm 配置，禁止读取真实 `.npmrc`；离线、禁安装脚本地更新和检查 lockfile。可用命令为 `npm install --package-lock-only --offline --ignore-scripts`，必要时用 `npm ci --offline --ignore-scripts` 对齐项目依赖。缓存不足或需要安装脚本时记录具体缺失与最小补充需求，不自行联网、放开脚本或从 Pi 私有安装路径复制实现。
3. **打包制品**：除 dry-run 清单外，用 `npm pack --offline --ignore-scripts --pack-destination "$artifact_dir"` 生成实际制品，其中 `artifact_dir` 是测试宿主已创建的隔离临时制品目录。解包后让隔离 Pi 从该 Package 目录加载资源并执行最小任务，必要依赖只在临时目录离线准备；不借主仓 `node_modules/pi-subagents` 兜底。核对 manifest、lockfile/依赖树、制品及实际加载行为；文档中解释旧依赖的文字不算运行依赖。
4. **版本**：以已有 Pi `0.85.1`、Node `25.2.1`、macOS 环境建立首条正式证据，记录每次实际版本；最终支持范围按真实验证结果写入文档和必要元数据。不直接继承旧版跨平台/最低版本承诺，也不新增版本适配框架。其他环境未验证时明确列出。
5. **正反同时成立**：既证明授权内实际写入、自检和交付，也证明未批准、越权、缺工具、取消与未知终态不会继续写。模型声称完成不算证据，全部拒绝也不算可用；正常失败后的自主返工不能被安全负例测试遗漏。
6. **证据有效性**：记录命令、cwd、候选、退出/超时/取消状态和必要原始日志位置；相关实现或验证条件变化后复验受影响范围。除本台账外不维护另一份开发进度；Pi 原生 Session、测试输出和临时 Git 差异是制品，不是第二个计划系统。
7. **交互与审查**：模拟批准只验证机制，不是当前开发的真实授权；真实 TUI 验收按 P6.3 由用户或其在当前任务中明确授权的代理操作隔离实例，记录真实操作来源与原始证据。按风险安排代码复核，需要另一个 Agent 的 fresh review 或真实模型时先明确该具体调用范围并取得授权；这是本仓库开发验收的外部调用边界，不给产品新增模型费用审批。未运行不报告为独立审查通过，不用 fake provider 的脚本回复评价代码质量。
8. **完成状态**：每个独立事项证据齐备后才完成；交互、审查或某个安全边界仍待验证时，保留相应事项及父项的待验收状态，不把“代码已写完”报告为整个重构完成。

#### 失败、停止与恢复边界

- 已授权范围内的实现缺陷或测试失败：先取证、最小修复、复验，并回写对应 P 项；不自动要求用户重新批准整份计划。
- 用户取消、批准来源/路径/writer 不明、执行终态或持久记录不明：停止新增写入，保留现场和执行引用，不强行释放 lease、不启动替代 writer、不盲目重放。
- 当前任务必需能力没有公开、安全的执行路径：指出具体工具/调用和已尝试证据，暂停受影响事项；不恢复完整运行态克隆研究，不引入私有 API、旧后端或通用适配平台。
- 需要改变目标、关键设计、验收标准或扩大文件/外部操作权限：回到对应确认点。遇到无关用户改动保持原样，不以重构名义整理。
- 不能保持测试隔离，缺少离线依赖，或验证需要真实凭证/Provider：明确记录断点及需要的单独授权，不降低隔离或把未执行写成通过。
- commit、push、PR、npm publish、部署、生产操作、修改 Pi 安装包、用户配置或旧 canary 均不包含在本计划的默认执行范围；不得因用户确认实施而自动执行这些动作。

#### 交付判定与当前断点

重构交付需要 P1—P6 对应证据齐备：标准 Pi 上可独立加载自身 Package，无 `pi-subagents` 运行依赖；正常开发和范围内返工成立，批准/单 writer/取消/持久化/恢复边界不失效，唯一台账与真实候选一致，资源和使用说明不再描述旧流程。任何未完成项必须逐项说明，不用旧 R29 或临时原型的通过计数替代。

P1—P6 已完成本轮限定验收：独立真实模型复审的 4 项发现已修复，正式默认 467/467、真实容器 25/25、typecheck/diff、收尾审计及离线打包加载通过；后续用户拒绝场景与用户明确授权代理执行的真实 TUI 按键 9/9 补齐限定交互证据，P6 父项收口。P6 下的本轮交付报告列明实际改动、兼容性、证据和风险。修复后针对本 Package 的二次真实模型复审、partial-clone 假设、其他平台和各桌面终端视觉/输入法未执行；真实模型完整正向流程由后续单独授权的第 13.4 节补充限定证据，不宣称无剩余风险。宿主 Shell 关闭，不提供强制解锁或旧契约兼容；本地基线已按后续单独授权提交，该轮未推送、安装到真实项目、修改用户 Pi 配置或发布。后续发布及扩大验收范围按具体操作单独授权。

此前计划编制验证：已核对六个阶段、18 个事项对已确认方案的覆盖、操作范围与停止条件。首次路径清点发现草稿误引用不存在的 `test/unit/authorization.test.ts`，已改用现有审批/运行状态测试入口，不为凑路径新建文件；修正后表内 13 个测试文件路径及两个 npm script 入口存在性检查通过，这不是代码测试运行或通过。此前 RPC 证据仅只读核对为 9 类、10 次运行、0 次失败，未重跑。该轮 `git diff --check` 和非文档差异检查通过，仅两份规划文档变化；未运行代码测试、打包或新实验，未提交或发布，不作为当前 P1 的实现证据。

### 13.4 真实模型完整流程试用

- 状态：已完成限定正向试用。用户接受隔离 JSONL 日志统计 CLI 试用，授权使用真实模型推进方案、计划、开发、自编测试、独立审查和必要返工；沿用此前明确授权的代理真实 TUI 按键操作。任务仅处理合成日志，不涉及真实业务项目、生产数据、安装或发布；本轮不包含新的 Git 提交。以下保留实际推进顺序，收尾结果见末尾。
- 基线与范围：`8050f8fe1c4e80d96bc53dec3727da8cd7824f9e`，试用根 `/private/tmp/adaptive-real-delivery.9k6L4g`。复制当前 18 个交付资源并记录摘要，独立临时 Git 项目无 HEAD；源码及模型自编测试限 `app`、合成输入 `fixtures` 只读，文档为 `docs/方案.md`、该试用项目自己的唯一 `docs/实施计划.md` 和 `README.md`。主仓只回写本台账，原有未跟踪的断流重试备忘保留。
- 验收约定：Node.js 22、零依赖，接口 `node app/cli.mjs <日志文件> [--keyword <文本>]`，按原始 level 统计、message 字面关键词过滤、JSON 输出、空文件与坏行处理。所有非空行先校验后过滤，错误不得输出部分汇总；预先编写独立外部黑盒验收 14 项，覆盖特殊分组键、Unicode、换行/物理行号、参数和读取错误。模型自行实现与编写自己的测试，外部验收尚未执行。
- 隔离与准备：公开 `SettingsManager` 确认当前 `openai/gpt-6-astra`、`xhigh`。标准 Pi 原生读取既有认证的文件引用，未复制或输出凭据；临时读取边界阻止模型工具读取认证和 agent 配置。系统沙箱拒绝真实用户目录列举及临时根外写入，允许所选真实模型所需出站网络，不宣称按域名限制；容器仍禁网，仅本地固定镜像。原生认证锁路径按需放行，真实认证/模型配置内容禁止写入。
- 预检：`setup.mjs` 退出码 0；读取边界同一回调的 2 项允许/3 项拒绝检查通过，宿主目录列举及根外写入实际返回 EPERM。本地 Docker image inspect 确认 `sha256:262aa4f3ae295c90861c34b4319f74feda309a2342e0439d4017be78427b97c0`，未拉取镜像。以上准备未发模型请求，不冒充真实模型工具调用或容器任务验收。
- 已启动真实标准 Pi TUI：临时 Python 标准库 PTY driver PID `38650`、Pi PID `38651`，父原生 Session `parent-sessions/2026-09-07T15-56-09-912Z_01a07c95-8935-71b6-8f6b-b3869bb5bd5c.jsonl`。模型实际读取需求和规则后申请三份 Markdown 文档权限；代理读完整 proposal 后用方向键与 Enter 确认，原生工具结果已记录批准。没有 SDK 假 UI、脚本 Provider、伪造批准或代写实现；当前正在生成待确认方案，源码未授权。
- 方案阶段已验证：模型实际创建、读回 `docs/方案.md`，随后停在待讨论状态。代理读完方案后发出自然语言阶段反馈，再核对独立 design proposal 全文并以真实 TUI 确认；原生 `delivery_approval` 返回“方案确认已记录”，源码和命令仍未授权。方案覆盖完整需求，采用逐行读取、先校验后过滤和 Map 分组；当前模型正在编制实施计划，尚未开发或运行测试。
- 实施确认已验证：模型自行创建并完整读回五步实施计划，单独提出 implementation proposal；代理核对方案、计划及正文后以真实 TUI 确认。可写路径仅 `app`，只读输入 `fixtures`，镜像与预检的固定 ID 一致，验收命令为 `node --test app/cli.test.mjs`。原生记录已确认三项独立批准，模型自行把授权状态回写原台账。随后代理发出自然语言“现在开始实施并持续推进到交付”，尚未代写代码或向模型规定具体工具调用顺序。
- 开发已返回并核实：真实开发子 Pi PID `39360`，原生 Session `agent/sessions/--private-tmp-adaptive-real-delivery.9k6L4g-repo--/2026-09-07T16-10-40-540Z_01a07ca2-d21b-71ea-b024-beda5b5c9a84.jsonl`。先用真实容器核实 Node `v22.23.1`、cwd `/workspace`、空 app 和两份合成输入，再自行新增 `app/cli.mjs`、`app/cli.test.mjs`；源码及测试已读回，未由代理代写。开发自检两次均 **69/69，退出码 0，无失败/取消/跳过/todo**，第二次由模型自行补显式退出码与文件摘要；这属于重复自检，不算正式固定验收。父原生 `delivery_develop isError=false` 已落盘，子 PID 已 ESRCH；正式验收和审查尚待执行。
- 正式固定验收已验证：父模型核对代码与原开发记录后自行调用 `delivery_validate`，真实子 Pi PID `39833`，Session `agent/sessions/--private-tmp-adaptive-real-delivery.9k6L4g-repo--/2026-09-07T16-17-50-487Z_01a07ca9-6196-7453-8759-f559f3e0618c.jsonl`。实际唯一命令 `node --test app/cli.test.mjs` **69/69，退出码 0，无失败/取消/跳过/todo**，TAP 约 1.59 秒；原生关闭记录 `clean=true`，验收前后候选摘要同为 `bb2fbdd9efb865848c427d4d5f2a1f633fe3d969356142d7df4fd24bd048cb47`，覆盖两个 app 文件和两个 fixtures。父工具返回本次候选验收通过，尚不作为独立审查通过。
- 真实独立审查已返回：父模型自行调用产品 `delivery_review`，真实子 Pi PID `39928`，Session `agent/sessions/--private-tmp-adaptive-real-delivery.9k6L4g-repo--/2026-09-07T16-19-21-621Z_01a07caa-c592-7485-9682-434b9fac3bd9.jsonl`。实际读取批准目标、方案/计划、源码/测试、`runtime/adaptive-review-JnVywN/diff.patch`、正式验收和开发原始 Session，原生只读调用成功，最终 `stopReason=stop`，父 `delivery_review isError=false`。审查结论为未发现需要返工的确定代码缺陷，特别核实空基线导致 fixtures 显示新增不等于开发改写输入；不人为注入问题演示返工。指出读取中途底层 I/O 故障注入、其他平台和极端资源压力未覆盖，并建议 README 说明参数顺序和以短横线开头文件名的路径写法。父侧已读完整审查正文，模型正在进行最终裁决与文档交付，外部黑盒验收仍待执行。
- 模型交付及外部验收已验证：父模型自行核对并接受审查结论，创建/读回 README、同步方案历史时点和唯一台账，最终 `stopReason=stop`、无在途工具。代理已完整读回源码、自编测试、README 和项目台账；未向模型发送开发后的补救指令。随后 `verify.mjs blackbox` 退出码 0：新临时 Git 副本 `blackbox-SO06Vn/repo` 的 app 与外部 `acceptance.cjs` 均只读挂载到同一固定镜像，真实运行 `node --test acceptance.cjs` **14/14，退出码 0，无失败/取消/跳过/todo**，TAP 约 0.61 秒。覆盖独立输入、特殊分组键、Unicode、空输入/关键词、LF/CRLF/末行及物理行号、坏记录不可被筛选绕过、参数和读取错误；原 app 与挂载副本摘要均未变。完整命令、源码摘要、TAP 和 `clean=true/status=passed` 容器终态保留在 `blackbox-SO06Vn/result.json`。已通过真实 TUI 输入 `/quit` 请求正常关闭，最终审计待取回。
- 最终审计：`verify.mjs audit` 退出码 0，实际 TUI `/quit` 退出码 0、无强杀；父/三个子 Pi 及 driver 共 **5 个 PID 全部 ESRCH**。开发现场检查、两次开发自检、正式验收及外部验收共 **5 个真实容器** 均 `clean=true`，按各自唯一 label 只读查询全部无残留；磁盘无 writer lease。18 个交付资源的主仓文件与加载副本摘要均保持基线一致，临时读取扩展副本一致，认证/模型配置仍为文件引用。最终 app 摘要与外部验收副本相同；原始审计为 `audit-result.json`，未操作用户其他进程、容器或原 TUI。
- 原生记录核对：**3 个真实 TUI/select 独立批准、4 个真实模型会话、61 个模型回合、90 个工具结果**，各会话最终均 `stopReason=stop`。父有 11 次只读失败：9 次读取尚不存在的目标文件、2 次把目录作为文件读取，模型依据错误自行继续，没有越权尝试或隐藏错误；开发、固定验收和审查均无工具失败。读取边界的准备探针未混入此计数。
- 使用成本与推进体验：从首条真实需求到模型最终交付约 **30.6 分钟**，含代理阶段核对等待，不含前期准备和外部验收。父 Session 有 3 条自然语言输入：初始需求、请求方案确认/计划、开始实施；代理另外读正文后操作 3 次阶段确认。开始实施后没有人工补救指令、重复授权或代写代码，模型自行完成开发→固定验收→审查→台账/README，代码返工 0 次。原生计量合计 input `343434`、output `40528`、cacheRead `3489536`，SDK 估算约 **USD 8.95**；仅这四个试用模型会话，不是实际账单或外层协作助手总费用。
- 结论与限制：当前流程已能交付这一个真实模型驱动的小 CLI，69 项模型自编测试与 14 项预先独立编写的黑盒测试均通过，未发现需要本次产品修复的确定缺陷。小任务仍有明显流程成本：父侧占 44/61 模型回合，3 次文档创建、8 次文档编辑，开发为补退出码/摘要重复自检；这些是本次观察，不将耗时全部归因于产品，未做配置对照。后续可评估精简重复文案和核对步骤，不因此删减独立阶段批准、扩大权限或新增运行平台。本轮没有真实失败，因此未验证真实模型自主返工/取消质量；CLI 中途 I/O 故障注入、其他平台/版本和极端压力仍未覆盖。
- 主仓交付：仅更新本台账并修正顶部及第 13 节残留的旧阶段表述；产品、依赖、正式测试、兼容边界不变，无关断流重试备忘原样保留。未重跑此前默认 467/467、容器 25/25 或 typecheck，未把既有证据记为本轮执行。`git diff --check` 与工作区范围核对通过，暂存区为空，HEAD 仍为 `8050f8fe1c4e80d96bc53dec3727da8cd7824f9e`。未 commit、push、创建 PR、安装、发布、部署或修改真实用户配置。

### 13.5 小任务提示与文档开销调整

- 状态：已完成提示调整及限定机制验证。沿用户“继续”及已有持续推进授权，落实第 13.4 节的最小体验调整；保留工作区已有台账改动和无关断流重试备忘。本次不包含安装、发布或新的真实 Provider 试验，未把静态提示改动当作实际降本证据。
- 已确认原因：实施确认入口已自动展示原方案，开发/审查入口已自动附带原方案和实施正文，但模型输入说明未明确避免再次抄写；文档授权却要求笼统的“本任务完整正文”，造成阶段信息重复。Skill 和注入提示仍有“正在重构”“真实 TUI 待验收”的过时描述。原试用中的 44 个父模型回合、11 次文档变更和重复自检是真实观察，提示文案对耗时的具体贡献仍未做对照，不据此宣称已定位全部成本来源。
- 规模检查：只改现有 Skill、必要 Prompt、三个入口文件中的文字及 README/两份规划文档；不新增文件、依赖、配置、抽象层、状态或验证器。不改批准来源/冻结正文、两次独立阶段确认、writer、容器、候选和恢复逻辑，不缩减必须读取的真实证据。

| 事项 | 状态 | 验证依据 |
| --- | --- | --- |
| 核实重复来源与最小方向 | 已完成 | 已对照真实试用记录、设计第 3/4/6/8 节与批准/委派实现；已完整读取 Pi skills 与 prompt-templates 官方文档，沿现有 Markdown 资源和工具说明调整 |
| 调整阶段正文、推进、取证与文档提示 | 已完成（内容核对） | Skill、plan/run Prompt 与批准/委派文字已同步；清除过时的能力状态，正常确认后衔接推进。README/技术方案区分一个任务的真实试用与未覆盖范围；三个 TS 文件除字符串内容外 token 结构与基线一致，未改控制逻辑 |
| 验证与收口 | 已完成（限定机制） | 批准、策略和 manifest 单元 104/104、真实 Pi/临时 Git 定向 7/7、typecheck 和进程审计通过。实际离线 tarball 加载新资源成功；fake provider 不证明真实模型耗时/费用改善 |

- 首轮验证：`node --import tsx test/support/run-tests.ts test/unit/approvals.test.ts test/unit/policy.test.ts test/unit/package-manifest.test.ts` **104/104，退出码 0，无失败/取消/跳过/todo**，根 `adaptive-tests-YeinPa`；默认系统禁网、临时 Git/配置与 fake Docker，未使用真实 Provider。`node node_modules/typescript/bin/tsc --noEmit`、`git diff --check` 均退出码 0。现有断言覆盖三项分开确认、实施时重新展示原方案、正文冻结/来源/持久化失败关闭、权限不恢复，以及同名工具覆盖拒绝；没有为文案新增镜像式断言。
- 正式 Pi 定向验证：`node --import tsx test/support/run-tests.ts --test-name-pattern='正式入口在文档授权后创建|正式入口未批准及未授权路径不写入|正式开发入口：父确认后子 Pi|真实 Pi 独立审查在 Git replace|离线 npm tarball|正式只读边界拒绝 approval-replacement|标准 CLI 开发入口拒绝无批准 RPC' test/integration/document-entry.test.ts test/integration/development.test.ts test/e2e/rpc-resource-discovery.test.ts` **7/7，退出码 0，无失败/取消/跳过/todo**，根 `adaptive-tests-HLLaiT`。覆盖文档持续更新不替换批准、实际子写入和 writer 交接、原批准正文自动进入开发子、真实差异进入审查子、未授权及同名批准工具覆盖拒绝。通过真实 CLI 从无 node_modules 的离线 tarball 加载 Skill/Prompt/Extension 并执行只读任务，制品 `adaptive-pack-n4VVxR/pi-adaptive-delivery-0.1.0.tgz`，20 个发布资源；没有 install/publish。SDK 父确认仍为模拟、模型为 fake provider，审查场景为 fake Docker，不冒充新的真实 TUI/模型/容器验收。
- 收尾审计：两个指定测试根分别记录 **4、18 个 PID**，全部 ESRCH；未创建真实容器，未查询或操作用户其他容器、进程。临时审计首次退出码 1：Python `str.splitlines()` 错把合法 JSON 字符串中的 U+2028/U+2029 当作 JSONL 分隔符，属于本次审计脚本错误；按协议改为仅按 `\n` 切分后退出码 0，原始测试记录未改写。修正后的结果保留在 `adaptive-tests-HLLaiT/prompt-audit.json`。
- 最终范围与限制：本轮共修改 9 个已有文件：Skill、plan/run Prompt、批准/入口/policy 三个 TS 文件中的说明文字、README 和两份规划文档；没有新增仓库文件、测试、依赖、配置或状态格式。技术方案中轻量任务的角色说明同步现有父协调/子开发门禁，未改变执行路径。保持两次独立阶段确认、原方案展示与正文冻结、逐次权限/记录核验、单 writer、固定候选验收和失败关闭；不做兼容迁移。没有新增真实模型对照，不承诺耗时、回合或费用已经下降，也未重跑无关全量、真实容器全组或 TUI 按键验收。Git HEAD 仍为 `8050f8fe1c4e80d96bc53dec3727da8cd7824f9e`，本轮未 commit、push、创建 PR、安装、发布、部署或修改真实用户配置。

### 13.6 提示调整后的真实模型对照

- 状态：已完成本次真实对照、交付质量及收尾核对，未观察到整体提速或文档操作减少。用户明确同意再验证一次，并表示费用无需担心；本次授权相同临时 JSONL CLI 的真实模型调用、代理真实 TUI 阶段核对与按键、容器验收及必要返工，不包含其他项目、真实业务数据、安装或发布。本轮冻结当前产品资源，只回写主仓台账，不边跑边修改提示或实现。
- 对照条件：新根 `/private/tmp/adaptive-real-repeat.1DmVqA`，旧根 `adaptive-real-delivery.9k6L4g` 保留。相同 `openai/gpt-6-astra`、`xhigh`、Pi `0.85.1`、宿主 Node `v25.2.1`、本地固定 Node 22 镜像；同一需求/项目规则、合成 fixtures、首条指令及原 14 项外部验收逐字摘要一致，后两条阶段指令从旧原生 Session 提取并保持原文。新 repo 从无 HEAD、空 app/docs 开始，不提供旧实现、测试或交付文档。18 个加载资源中仅第 13.5 节涉及的 7 个资源发生文字变化，其他文件摘要一致。
- 隔离与规模：复用上轮五个临时准备/PTY/读取边界/验收文件，后续只补一份结果对照脚本，不新增产品文件或配置面。认证仍由 Pi 原生解析文件引用，不复制或输出凭据；模型工具不能读 agent 配置和认证，容器禁网、宿主允许真实 Provider 出站网络，不宣称域名白名单。临时 driver 按 JSONL 的 `\n` 读取，运行总时限改为 90 分钟以留出自然返工空间，未改变模型请求或批准路径，不影响已完成旧试用的记录。
- 预检：准备退出码 0，确认模型/版本、7 份相同输入与载入资源差异；同一读取边界回调 2 项允许、4 项拒绝通过。本地镜像仍为 `sha256:262aa4f3ae295c90861c34b4319f74feda309a2342e0439d4017be78427b97c0`，未拉取。首次宿主沙箱探针退出码 1，因临时调用继承了被沙箱拒绝的主仓 cwd，Node 在执行探针前报 `uv_cwd EPERM`，未调用模型；只将该调用 cwd 改为新临时根后复验退出码 0，真实用户目录列举与根外写入实际被拒绝。证据 `evidence/preflight.json`，模型请求仍为 0。
- 比较口径：报告首条需求至最终交付的总时长，并另列扣除确认等待/阶段输入等待后的用时；同时比较原生模型计量、模型回合、文档变更、确认正文与重复自检。质量仍由正式固定验收、真实独立审查、同一外部 14 项黑盒与最终进程/容器/lease/文件核对证明，不以更快或更便宜替代质量。单次对照有模型与服务波动，尚不预设结果方向。
- 已启动：driver PID `50680`、真实 Pi PID `50681`，父原生 Session `parent-sessions/2026-09-08T02-28-24-085Z_01a07ed8-5d93-76c7-97fe-f0d62b3e8d0c.jsonl`。首条需求已通过真实 PTY 发送；模型实际读取需求/规则后申请三个 Markdown 文档权限，代理读完整 proposal 并以方向键/Enter 确认。该次正文仅说明文档用途与编辑边界，未重述整套技术方案；尚未确认方案或实施。没有模拟 Provider、替换工具结果或代写项目产物。
- 方案阶段：模型自行创建并读回方案，停在讨论状态；代理核对目标、输出/错误约定、特殊 level 与参数解释均覆盖相同需求后，发送旧试用的原第二条指令。模型给出独立 design proposal，代理读正文并真实按键确认，模型随后局部更新方案确认状态并编制计划。没有改变需求、提前写源码或为缩短时间跳过阶段。
- 真实中断与恢复：父原生记录在 `2026-09-08T02:35:38.803Z` 以 `stopReason=error`、`stream_read_error` 结束，implementation 工具参数未生成完整，未产生该阶段 proposal、批准或源码修改。代理已完整读取实际计划，未对旧 design proposal 重复按键；沿已有继续授权补发一次明确的断点恢复输入，仅要求重新申请尚未执行的实施确认。本次因此多于旧试用的三条用户输入，不再宣称交互输入完全相同。对照脚本单列模型错误及错误后恢复等待，保留原始总用时和失败请求；SDK 若未返回失败请求用量，费用可能不完整，不把它当实际账单。本轮不实现自动重试功能。
- 实施阶段已启动：恢复后生成完整 proposal `7033ef81-de87-44b5-b29e-76681362e359`，代理核对正文及真实选择框后 Down/Enter 确认；可写目录、只读输入、固定镜像和命令均与旧试用一致。模型只更新台账并按明确指令停在确认后，原生终态为 stop；随后已发送旧试用原第三条启动指令，授权内持续完成开发、自检、固定验收、真实独立审查与必要返工。未把确认工具返回当作执行结果。
- 首次开发自检已验证：真实子 Pi PID `51480`、原生 Session `agent/sessions/--private-tmp-adaptive-real-repeat.1DmVqA-repo--/2026-09-08T02-44-00-820Z_01a07ee6-a8a2-76c7-aae5-1930eec2b62b.jsonl`，模型自行创建 `app/cli.mjs` 与 `app/cli.test.mjs`，没有外层代写。原批准命令实际容器自检 83/83（含子测试）、失败/跳过/取消均为 0，`exitCode=0`、`status=passed`、`clean=true`，容器名 `pi-adaptive-f74ca81f-b1b2-407d-8b9b-71599bfe1791`。源码读取核对为 Node 内置流式处理及 Map 分组，测试真实启动 CLI；本次尚不能替代正式固定验收或外部黑盒结论。
- 开发交接失败与人工补证：本次 `delivery_develop` 返回 `isError=true`、“开发子任务存在工具失败，请核对原生记录后返工”，未附 Session 路径。实际原因是子会话初始两次 read 命中尚未创建的目标，`rpc.toolError` 会累计任意工具失败（`development.ts` 第 344 行）；后续测试成功不能覆盖此工具终态。父模型只读核对源码后正确暂停，未把失败写成功。外层核实子原生 stop、`delivery-child-exit.development.clean=true`、PID ESRCH、容器 label 无残留；真实父 TUI `/delivery-status` 显示文档/开发/验收/审查均无当前执行、现场无 lease。已将真实父子 Session 路径与状态原文通过第二条恢复输入提供给模型，要求自行读原文并在现有门禁内继续。未修改产品错误策略、试用 guard、候选或测试，也未手动解锁。此处暴露的是失败结果缺少可定位原始记录的恢复体验问题；本轮冻结资源，后续改进只记录，不改写本次失败事实。
- 正式固定验收已验证：补证后父模型自行读取原始记录、如实更新台账，未重复自检或修改源码，直接由现有 `delivery_validate` 在重新核实批准与 lease 后执行唯一固定命令。真实验收 Pi PID `52137`，原生 Session `2026-09-08T02-55-26-565Z_01a07ef1-1f64-730f-8897-4fff76249524.jsonl`；83/83，失败/跳过/取消均为 0，容器 `pi-adaptive-2ce9b1d2-712e-4c18-b200-50ce03a9b044` 的 `exitCode=0`、`clean=true`。父原生工具结果 `isError=false`，前后候选均为 `0a288226532479e1ef2e522869ae5c96aff3227eb25faaf85fec8617c0d4fa25`，覆盖两个 app 文件及两个只读 fixtures。未削弱失败策略或以开发自检替代固定验收；独立审查与外部验收仍待验证。
- 独立审查已执行：真实 Pi PID `52214`，审查 Session `2026-09-08T02-57-21-690Z_01a07ef2-e119-7597-a332-c7474ba09e58.jsonl`、实际差异 `runtime/adaptive-review-BTgaoG/diff.patch`。`delivery_review` 原生结果 `isError=false`，候选与固定验收一致。审查读取需求、规则、方案/台账、代码/测试、只读输入、实际差异和原始验收；未发现需要返工的实际代码或测试缺陷，未执行命令或修改文件。指出子模型总结声称“退出码未显式展示”，而原生 details 已明确给出 exitCode=0，应以原生记录为准。超大规模内存峰值、读取部分有效行后发生底层 I/O 故障仍无实测证据，不以此推断缺陷或伪称覆盖。父会话最终裁决、README 与外部黑盒仍待收口。
- 交付与外部验收已完成：父模型读取实际差异与审查正文后接受无须返工的结论，自行生成并读回 README、收尾唯一台账，最终原生 stop。未修改 CLI 或重复自检/验收。随后 `verify.mjs blackbox` 退出 0，冻结的同一 14 项外部用例在真只读禁网容器中全部通过；证据 `blackbox-97Ixhy/result.json`，容器 `pi-adaptive-73f40eeb-6f78-44f4-b8ba-9484ea1a00f2` 的 `exitCode=0`、`status=passed`、`clean=true`，原 app 与挂载副本摘要均不变。外部脚本未提供给模型，没有调整验收标准。
- 最终清理已验证：通过真实 PTY `/quit` 正常退出，`verify.mjs audit` 退出 0。driver、父和三个子 Pi 共 5 个 PID 全部 ESRCH；本轮 3 个实际容器（开发自检、正式验收、外部黑盒）均无残留，lease 为空，无强制 kill。四个真实模型 Session 最后均为 stop，所有非 error/aborted 消息中的可执行工具调用均有原生结果；中断消息中未执行的半截 approval 不作为待执行操作。18 个产品资源副本及主仓对应文件均保持本轮开始摘要，guard 副本一致，认证仍是原生文件引用。证据 `driver-result.json`、`audit-result.json`。
- 对照制品：`compare.py` 语法检查、实际运行均退出 0，生成 `comparison.json`。三条核心阶段指令逐字一致（`sameCoreStageInputs=true`），本轮额外发送断流恢复及原始记录补证共两条输入，因此全部用户输入不相同（`sameUserMessages=false`）；三项批准均来自真实 TUI select，没有重复批准。未运行额外模型样本或通过重新试验筛选好看的结果。

| 比较项 | 第 13.4 节原试用 | 本次提示调整后 | 结果 |
| --- | --- | --- | --- |
| 首条需求至父最终交付 | 30.58 分钟 | 35.85 分钟 | 增加 17.2%；均不含外层准备、黑盒及收尾审计 |
| 扣除可观测确认、阶段/恢复输入等待 | 25.01 分钟 | 25.98 分钟 | 增加 3.9%；仍含服务、模型、工具、容器、编排及失败请求，非纯模型耗时 |
| 原生模型回合（父 / 开发 / 验收 / 审查） | 61（44 / 8 / 3 / 6） | 57（45 / 6 / 3 / 3） | 总数减少 6.6%，父回合增加 1；包括本轮失败模型消息 |
| 已返回工具调用 / 父 read | 90 / 45 | 82 / 43 | 分别减少 8.9% / 4.4% |
| 文档变更（创建 / 编辑调用） | 11（3 / 8） | 11（3 / 8） | 次数没有减少，单次 edit 可包含多个区块 |
| 开发自检 / 正式固定验收 | 2 / 1 次 | 1 / 1 次 | 没有再为补退出码重复自检，正式验收未省略 |
| documents / design / implementation 正文字符数 | 1041 / 2285 / 2459 | 304 / 922 / 1227 | 正文更简洁，确认仍完整且分别执行 |
| SDK input / output / cacheRead | 343434 / 40528 / 3489536 | 279916 / 38812 / 3638016 | 分别变化 -18.5% / -4.2% / +4.3% |
| SDK 计量费用（USD） | 8.950276 | 8.377776 | 表面减少 6.4%，不等于实际账单或可靠降本 |
| 固定验收 / 同一外部黑盒 | 69/69 / 14/14 | 83/83 / 14/14 | 自编测试数量由各轮模型生成，不将数量差异当质量提升；两轮均独立审查且无源码返工 |

- 时间与费用边界：原轮可观测等待共 334.382 秒，本轮 592.331 秒，其中批准等待 115.088 秒、正常阶段输入等待 61.771 秒、断流后恢复等待 319.963 秒、开发失败后补证等待 95.509 秒。总时间完整保留，不删除失败；扣除等待只用于说明观察口径，不归因为提示效果。断流消息的原生 usage/cost 全为 0，无法据此知道该请求是否实际收费；计量仅包括四个试用模型 Session，不包括外层 coding assistant，不能视为账单或完整实际成本。两个单次独立生成样本存在模型/服务及恢复输入差异，不构成统计性能结论。
- 失败与残余问题：本轮共有 11 次 read 失败（父 9、开发 2，均为尚不存在目标的 ENOENT），加 1 次由上述子工具错误触发的 `delivery_develop` 失败；验收及审查无工具失败。另有 1 次真实模型流读取错误。均保留原始记录，人工补证后交付完成，产品的失败结果缺少原始记录引用仍未修复。下一步优先使真实失败结果携带可定位的既有证据，保持失败关闭；不新增自动重试、错误白名单或另一个状态系统。
- 主仓交付核对：本轮仅更新 `docs/实施计划.md`；已有 9 个 tracked 改动集合及无关未跟踪断流重试备忘保留，未新增仓库文件。需求、项目规则、两份 fixtures、读取边界与冻结外部验收文件最终仍与旧轮逐字一致；`git diff --check` 和范围核对通过，暂存区为空，HEAD 仍为 `8050f8fe1c4e80d96bc53dec3727da8cd7824f9e`。产品代码、兼容边界与运行配置不变，未重跑此前单元 104/104、真实 Pi 定向 7/7、typecheck、默认全量或容器/TUI 全组，不将历史结果写为本轮执行。未 commit、push、创建 PR、安装、发布、部署或修改真实用户配置。

### 13.7 提示调整与验证记录本地提交

- 状态：本地提交已成功。用户明确要求“先提交下所有代码吧”，授权将当前全部仓库改动提交；不包含推送、PR、安装或发布。
- 提交范围：9 个已有改动文件，以及原样纳入的 `docs/后续改进-断流自动重试.md`，共 10 个文件。包含 Skill、plan/run Prompt、三个 TS 文件中的工具说明、README、技术方案、唯一实施台账及后续需求备忘；临时 CLI、模型 Session、凭据和测试运行制品不在仓库提交内。备忘仍标明暂不实施，不把候选重试方案写为已实现。
- 提交前核对：完整读取暂存范围的差异和新增备忘；18 个产品资源与第 13.6 节真实验证版本摘要一致。既有审计记录确认四个模型 Session 正常终态、进程/容器无残留及 lease 为空；工作区和暂存差异检查通过，暂存文件集合与上述 10 个文件完全一致，无其他未暂存改动。
- 验证与限制：沿用第 13.5 节单元 104/104、真实 Pi 定向 7/7、typecheck，以及第 13.6 节固定验收 83/83、独立审查、外部黑盒 14/14 和收尾审计。本次只核对版本与记录，未重跑测试或调用模型；权限/执行逻辑、兼容边界与此前已记录的残余问题不变。
- 提交结果：`git commit` 退出码 0，提交说明为 `refactor: 精简交付提示并补充真实模型验证记录`。本条及顶部状态在成功后补记并纳入同一本地提交，最终 hash 以 Git 原生记录为准。未 push、创建 PR、安装、发布或部署。

### 13.8 开发失败返回原始证据

- 状态：已完成限定修复与验证。用户明确要求“好，修复下”，授权修复第 13.6 节观察到的开发失败结果缺少原始子 Session 路径的问题，并执行必要单元及真实 Pi 集成验证。当前基线 `8b37ef0`、工作区初始干净；不包含新的提交、推送、安装、发布或真实模型试用。
- 已确认原因：`development.ts` 的共享失败分支只保存原错误正文并抛出，丢失已取得的子记录位置。Pi 公开 Extension 文档规定 execute 必须抛错才保留 `isError=true`，返回带同名布尔字段的普通结果不能代替；父 writer 交接还会逐字段核实持久结果与私有快照。已完整核对官方 extensions/session-format 文档及相关例子。
- 规模与边界：只在现有失败分支补充已知父子 Session/工具调用引用及现有子收尾核验事实，继续抛错；不增加工具结果钩子、状态格式、错误分类、自动重试或提前交接。复用既有单元、真实 Pi 和本地容器夹具，测试使用 fake provider、临时 Git/配置与禁网环境，不读取凭据；不新增生产模块或配置面。

| 事项 | 状态 | 验证依据 |
| --- | --- | --- |
| 核对原因与最小方案 | 已完成 | 对照真实失败记录、共享 catch、原生错误语义和 writer 持久结果核验 |
| 修复失败正文并同步设计 | 已完成 | 既有 catch 增补错误正文并继续 throw；原始症状从 RED 转 GREEN，技术方案已同步 |
| 验证普通失败、未知收尾与持久结果边界 | 已完成 | 最小 3/3、类型检查、默认全量 469/469、完整真实容器 26/26 和测试现场核对通过 |

- 原始症状已复现：`node --import tsx test/support/run-tests.ts --containers --test-name-pattern='开发初始读取失败后写入与真实自检成功' test/container/command.test.ts` 退出 1，根 `adaptive-tests-tJGpG9`。真实标准 Pi 子按 fake provider 序列执行 read（ENOENT）→write→edit→真实容器自检→read，后续工具成功、容器退出 0 且正常清理，父调用仍正确保留失败；新增回归在“失败正文必须提供模型可直接读取的子记录路径”处失败，准确命中修复前缺陷。未改测试标准、伪造工具结果或调用真实模型。
- 最小修复验证：`node --import tsx test/support/run-tests.ts --containers --test-name-pattern='开发初始读取失败后写入与真实自检成功|失败结果的证据或错误标记' test/unit/development.test.ts test/container/command.test.ts` 退出 0，3/3 通过，根 `adaptive-tests-kfjgxT`。真实 Pi 父从失败正文取出路径并读取子原生记录，既有门禁允许独立固定验收和父台账回写；保留 `isError=true`，没有额外批准或重复开发。两条单元回归证明同时改写内存/磁盘中的失败证据路径或错误标记仍不能通过私有快照核对；子 PID 全部退出，容器夹具收尾检查通过。此处使用 SDK 模拟批准与 fake provider，不证明真实模型自主恢复能力。
- 扩大回归：`node node_modules/typescript/bin/tsc --noEmit` 退出 0；`npm run test:all` 退出 0，unit 320/320、integration 135/135、E2E 14/14，共 469/469，无失败、取消或跳过。开发任务发送前失败、未知收尾、普通失败返工、固定验收及独立审查的既有边界全部通过；默认组仍禁网且拒读真实 HOME，集成根 `adaptive-tests-KpJSMF`、E2E 根 `adaptive-tests-RbHYkI`。离线打包/隔离加载包含在 E2E 内，不等于安装到用户环境或发布。
- 真实容器全组：`node --import tsx test/support/run-tests.ts --containers test/container/command.test.ts` 退出 0，26/26 通过，无失败、取消或跳过，根 `adaptive-tests-6BJpOZ`。使用已有本地 `node:22-alpine` 固定镜像 `sha256:262aa4f3ae295c90861c34b4319f74feda309a2342e0439d4017be78427b97c0`，未拉取镜像。正式失败补证、取消/超时、独立验收及审查后返工路径通过，所有容器夹具收尾检查通过，没有强制清理导致的测试失败。
- 测试现场核对：只读取本轮 RED、最小 GREEN、默认 unit/integration/E2E 及真实容器六个临时根；unit 根为 `adaptive-tests-6uywYX`。从夹具事件和已知 SDK 父取得 301 个唯一 PID，逐个检查均为 `ESRCH`；从本轮真实容器引用/原生 Session 取得 31 个唯一执行标签，以空临时 Docker 配置查询，无残留容器。故障注入场景按原断言保留未知 lease，未手工删除或强行交回。
- 最终范围与交付：共改 7 个既有文件：`extensions/delivery-gate/src/development.ts`、`test/support/fake-provider.ts`、`test/unit/development.test.ts`、`test/integration/development.test.ts`、`test/container/command.test.ts` 和两份方案/实施文档；无新文件、依赖或配置，`git diff --check` 通过。失败正文发生扩充，原生 `isError=true`、批准、lease 与持久结果核验规则不变，不迁移旧 Session。新测试以 fake provider 驱动真实工具，尚不证明真实模型自主补证或断流恢复；断流自动重试未实现。本轮未修改用户 Pi 安装/配置，未 commit、push、创建 PR 或发布。

### 13.9 失败证据修复后的真实模型完整验证

- 状态：已完成本次真实模型完整正向验证与收尾核对。用户要求“是不是可以再完整验证一次”，沿此前真实模型、费用无需确认及代理真实 TUI 按键授权，执行修复后的同一 JSONL CLI 完整流程。验证包括方案、实施、真实开发与自检、固定验收、独立审查、必要返工、外部黑盒和收尾；本次未发生需要返工或自主补证的开发失败，不将未触发的分支记为已验证。以下保留实际阶段记录，最终结果见末尾。
- 基线与范围：Git HEAD `8b37ef01b3872fe5c81289e451d5a77ff882dc91` 加第 13.8 节未提交修复，保留原有 7 个文件改动。新根 `/private/tmp/adaptive-real-recovery.mev9Xi`，空 app/docs、无 HEAD 的独立临时 Git；复用第 13.6 节需求、规则、合成输入、三条阶段指令和冻结的 14 项外部验收，不向模型提供旧实现或外部验收脚本。本轮主仓仅回写本台账，加载的 18 个产品资源保持开始时摘要，不包含提交、推送、安装或发布。
- 准备记录：复用既有 setup/PTY/读取边界/外部验收文件，仅增加临时预检脚本，无新产品模块或配置。首次 `node setup.mjs` 因未开启既有脚本所需的 `import.meta.resolve` 第二参数支持而报 `ERR_MODULE_NOT_FOUND`，发生在任何认证配置解析或模型请求之前；按原脚本用 `node --experimental-import-meta-resolve setup.mjs` 退出 0，不安装依赖或改动产品。公开 SettingsManager 确认仍为 `openai/gpt-6-astra`、`xhigh`；认证由标准 Pi 自身读取既有文件引用，不输出或复制凭据。完整预检及模型启动待后续证据。
- 预检通过：`node preflight.mjs` 退出 0，9 份需求/规则/输入/阶段指令/读取边界/外部验收文件与第 13.6 节摘要一致，18 个产品资源中仅 `development.ts` 与上轮不同。Pi `0.85.1`、Node `v25.2.1`、本地固定镜像与前两轮一致；读取边界 2 允许/4 拒绝通过，真实用户目录列举和根外写入实际 EPERM，driver 语法检查通过。证据 `evidence/preflight.json`；未拉取镜像或发模型请求。宿主允许真实 Provider 出站网络，容器仍禁网，不宣称域名白名单。
- 已启动：真实 PTY driver PID `67949`、标准 Pi PID `67950`，父原生 Session `parent-sessions/2026-09-08T04-20-50-579Z_01a07f3f-4f11-75bc-9282-cff1f464eb49.jsonl`；原首条需求已通过 PTY 输入。阶段选择由代理读实际 proposal 后操作方向键/Enter，不替换模型、工具结果或批准来源；模型项目实现由真实模型自行完成。
- 方案草稿已验证：模型读取需求/规则后申请三份 Markdown 文档权限，代理核对 proposal `8ca865bc-adf1-41f4-85e3-5c548ed5feb9` 并通过真实 Down/Enter 批准，原生结果成功。模型自行创建并读回方案后正常 stop；代理完整核对方案覆盖先校验后筛选、特殊 level、物理行号、输出通道/退出码和范围边界，已发送原第二条阶段指令。此时仅方案文档已创建，源码、测试和镜像执行仍未获实施批准。
- 方案/实施确认已验证：代理分别核对 design proposal `88d87890-11c3-4912-a95c-e24e38f16aff`、模型自行编制并读回的四步实施计划，以及 implementation proposal `87a3420d-8be0-42c8-ab6b-68f7426fed04`，通过真实 TUI 分开确认。可写仅 `app`，只读 `fixtures`，固定镜像同前；本轮模型自行选择 `node --version` 和 `node --test app/cli.test.mjs` 两条固定命令，比前轮多一个版本命令，验收清单不完全相同。实施确认后模型直接回写台账并开始 `delivery_develop`，未等待第三条“开始实施”输入，因此第三条预备指令没有发送，不为保持输入数量而重复催促。
- 开发已启动：子 Pi PID `68157`，Session `agent/sessions/--private-tmp-adaptive-real-recovery.mev9Xi-repo--/2026-09-08T04-27-34-912Z_01a07f45-7a7d-7432-ab41-b9ea6c2631bc.jsonl`。真实容器查看 app/fixtures 现场，app 为空，随后只读两份合成输入；已执行工具均成功，尚未产生开发失败或自检结果。父未代写源码，当前等待真实子开发交回。
- 首次开发自检通过：真实模型自行创建并读回 `app/cli.mjs`（3904 bytes）和 `app/cli.test.mjs`（12111 bytes），代理只读核对源码/全部测试，无代写。真实容器 `node --version` 为 `v22.23.1`；`node --test app/cli.test.mjs` 为 66/66、失败/取消/跳过/todo 均 0，TAP 约 1.57 秒，原生 `exitCode=0/status=passed/clean=true`。测试实际启动 CLI，包含跨 UTF-8/流块、6000 行、特殊分组键、筛选前校验和参数边界；自检容器 `pi-adaptive-5f90cbe7-3232-4bd8-80da-849467867b8c`。此时开发工具尚未交回，不将自检替代固定验收；尚无开发工具失败或修复分支触发。
- 开发交回与固定验收已验证：开发原生 `delivery_develop isError=false`，父模型自行读取源码/测试及开发 Session，核实原生退出码，不为子总结中“可见返回未提供显式退出码”的表述重复自检。随后自行回写进度并调用 `delivery_validate`；真实验收子 PID `68421`，Session `2026-09-08T04-34-09-735Z_01a07f4b-80c6-7042-8cba-be51082084e2.jsonl`，两条命令退出码均 0，固定测试 66/66（约 1.85 秒，无失败/取消/跳过/todo）。前后候选摘要同为 `1821ada11fc1a0c361b67308cd2d1a0e67af01e42f873d491c023b4976d270cd`，覆盖两个 app 文件与两个 fixtures；容器和子原生关闭记录均 `clean=true`，父验收结果成功。开发/验收两 PID 均 ESRCH；截至此处只有两条自然语言阶段输入，没有额外恢复提示、代写或重复批准。
- 独立审查已返回：真实审查子 PID `68476`，Session `2026-09-08T04-35-45-825Z_01a07f4c-f820-77a7-b99b-b4f0c868ec91.jsonl`，实际差异 `runtime/adaptive-review-OlE8B9/diff.patch`，候选同正式验收；父 `delivery_review isError=false`，子正常 stop 且 PID 已 ESRCH。审查实际读取需求/规则、方案/台账、源码/全部测试、fixtures、差异及开发/验收原文，未执行命令或写入文件；未发现需要源码返工或阻塞验收的实质问题。指出读取中途 EIO、权限错误和极端资源压力未实测，建议 README 明确参数顺序及短横线文件名写法。代理已读完整审查正文，父会话正在核对裁决并完成 README/台账；外部黑盒及最终审计尚未执行。本轮开发/验收/审查未失败，未触发第 13.8 节新增失败正文，不将本次顺利交付当作真实模型自主补证证据。
- 模型交付已完成：父会话自行读取并裁决审查结果、创建及读回 README、局部更新唯一台账后正常 stop，无在途工具。代理已核对完整源码、自编测试、README 和最终台账；四步均有相应证据，未重复开发或自检，没有外层代写、补救提示或新增批准。最终源码与首次自检版本一致。
- 外部黑盒已通过：以临时沙箱和清理过的环境执行 `node verify.mjs blackbox`，退出 0。预先冻结的同一 `acceptance.cjs`（摘要 `e1a08db5ca63f21a16ef92e4f4cd974a4acbb7ace57d46417ca420707ace637b`）在新临时 Git 副本中只读挂载，真实容器 `node --test acceptance.cjs` 14/14（约 0.71 秒），失败/取消/跳过/todo 均为 0，`exitCode=0/status=passed/clean=true`。原 app 与挂载副本摘要均未变化；证据 `blackbox-FiPXQv/result.json`，容器 `pi-adaptive-2e7e1d4e-9a03-48ac-840b-a6c06ddea6f8`。未向模型提供外部验收脚本、代写实现或更改验收标准。
- 最终审计通过：真实 PTY 输入 `/quit`，标准 Pi 正常退出码 0，无强杀；`node verify.mjs audit` 退出 0。driver、父和三个子 Pi 共 5 个 PID 全部 ESRCH；目录现场探查、开发版本/测试、正式版本/测试及外部验收共 6 个真实容器均 clean，按本次唯一标签查询无残留；磁盘 lease 为空。18 个加载产品资源及主仓对应文件均保持开始时摘要，scope 副本一致；原生认证仍为文件引用。证据 `driver-result.json`、`audit-result.json`。
- 原生记录与过程核对：临时只读核对及 `metrics.json` 生成退出 0；4 个真实模型 Session 最终均 stop，50 个模型回合（父 33、开发 9、验收 4、审查 4），70 个工具调用全部具有唯一原生结果。仅父有 6 次读取尚不存在目标的 ENOENT，均自行继续；开发、验收、审查无工具失败，模型 error/aborted 为 0。3 次批准来源均为真实 TUI select，无重复；实际仅 2 条自然语言输入，0 条恢复输入，文档变更 9 次（3 次创建、6 次编辑）。9 份冻结输入最终摘要仍与预检一致，未将准备探针计入模型调用。
- 耗时与费用：首条需求至模型最终交付 1251.621 秒，约 20.86 分钟；扣除原生可观测的 72.409 秒批准等待和 12.367 秒阶段输入等待后约 19.45 分钟。SDK 计量 input `229700`、output `30699`、cacheRead `1855104`，估算 USD `5.687054`，仅本轮四个模型会话，不是账单或外层助手总费用。本轮固定清单多一个版本命令、实际输入少一条、没有前轮故障，不作为严格耗时费用对照或稳定效率结论。
- 限制与主仓交付：本轮验证了修复版本的完整正向交付，未触发失败返回路径，未新增真实模型自主补证、故障返工或取消证据；这些边界不得从本次通过外推。未重跑第 13.8 节的默认 469/469、真实容器 26/26 或 typecheck，也未进行针对 Package 源码的第二次真实模型复审。仅更新主仓 `docs/实施计划.md`，原有 7 文件改动集合保留，产品代码/兼容边界/依赖/配置不变，`git diff --check` 与 Git 范围核对通过，HEAD 仍为 `8b37ef01b3872fe5c81289e451d5a77ff882dc91`、暂存区为空。未 commit、push、创建 PR、安装、发布、部署或修改真实用户配置。

### 13.10 定向真实模型失败恢复验证

- 状态：已完成限定验证，真实失败返回、父自主取证、固定验收、独立审查、交付、外部验收及最终清理均有原始证据，恢复输入为 0。用户接受“首次开发子先读取不存在文件，再正常开发自检，观察父自行取证并继续验收/审查”的具体建议，并明确要求“可以，你来验证”；沿已有真实模型、费用与代理真实 TUI 操作授权执行。本轮验证不包含产品代码修改、新提交、安装或发布。以下准备与阶段记录保留各自时点，最终结论见本节末尾。
- 基线与范围：HEAD `8b37ef01b3872fe5c81289e451d5a77ff882dc91` 加第 13.8 节未提交修复；原有 7 个文件改动保留，主仓只更新本台账。新根 `/private/tmp/adaptive-real-failure.lICTNs`，继续使用同一 JSONL CLI 功能需求、合成 fixtures 和冻结外部 14 项验收，从空 app/docs、无 HEAD 的独立临时 Git 开始。复用已有 setup/driver/scope/verify/preflight 脚本，无新产品模块或配置；`node --experimental-import-meta-resolve setup.mjs` 退出 0，尚未发模型请求。
- 触发与判定：只在临时 REQUEST 与首条指令追加现场核对要求，让首次开发子在任何 app 写入前直接 `read app/cli.mjs` 一次，文件初始不存在；保留真实错误后正常创建实现/测试并自检，不伪造工具结果或向源码植入缺陷。预期父 `delivery_develop` 仍为失败且包含原始子 Session；观察父是否从该返回路径自行读取证据，在既有权限核验内继续固定验收、独立审查和交付。失败后的外层恢复输入必须为 0；若父停住则如实记录断点，不额外提供路径或交接结论来冒充通过。
- 隔离：模型仍为 `openai/gpt-6-astra`、`xhigh`，标准 Pi 自身读取既有认证文件引用，不输出或复制凭据；沿现有读取边界和宿主沙箱，容器禁网，只用本地固定镜像。完整预检、真实 TUI 阶段确认及失败分支结果待后续证据。
- 预检通过：`node preflight.mjs` 与 driver 语法检查退出 0；18 个产品资源摘要与第 13.9 节一致，7 份规则/输入/阶段指令/读取边界/外部验收文件不变，仅 REQUEST 与首条输入追加定向要求并记录新摘要。app 目录为空；同一读取边界 2 允许/4 拒绝及目标真实缺失的 ENOENT 探针通过，用户目录列举和根外写入实际 EPERM。Pi `0.85.1`、Node `v25.2.1`、固定本地镜像 `sha256:262aa4f3ae295c90861c34b4319f74feda309a2342e0439d4017be78427b97c0` 均核对通过，未拉取镜像或发模型请求。证据 `evidence/preflight.json`；缺失探针只核对真实文件状态，不代替模型子会话执行。
- 已启动与文档批准：真实 driver PID `69257`、Pi PID `69258`，父 Session `parent-sessions/2026-09-08T04-51-51-679Z_01a07f5b-b4f9-73ae-af4b-9461a9428333.jsonl`。模型实际读取需求/规则，明确会把首次缺失读取交给开发子执行；代理核对 documents proposal `a586ca0f-9e42-4281-b6d6-8d2b3cb9c539` 后真实 Down/Enter 批准三个 Markdown 路径。当前仍为方案阶段，未授权源码或命令。
- 方案/实施批准已验证：模型自行创建并读回方案和五步实施计划；代理完整核对 design proposal `85610579-7c13-4b6d-a481-b81c2370f259` 与 implementation proposal `6b2fa919-37f9-45f4-8e07-bf8f27193817` 后分别真实 Down/Enter 确认。可写仅 app，只读 fixtures，固定本地镜像同预检，唯一固定验收命令为 `node --test app/cli.test.mjs`。两份正文均明确首次开发子 read 必须先于任何 app 写入；模型确认后自行回写台账并开始开发，截至此处仅发送初始一条自然语言输入。
- 定向失败已真实触发：开发子 Pi PID `69556`，Session `agent/sessions/--private-tmp-adaptive-real-failure.lICTNs-repo--/2026-09-08T04-57-16-449Z_01a07f60-a99a-74b2-9af1-b4682336c55d.jsonl`。父实际委派正文包含所需顺序，子第一次工具调用即 `read app/cli.mjs`，原生结果 `isError=true`，内容为读取边界在真实 `realpath` 时取得的 ENOENT；产品/guard 未替换结果或伪造错误。此后子继续只读核对和真实容器现场探查，尚未交回自检或父开发结果；失败返回及父自主补证仍待验证。
- 自检及失败返回已验证：真实模型自行创建 `app/cli.mjs`（3337 bytes）与 `app/cli.test.mjs`（12078 bytes），代理已只读核对全部源码/测试。首次容器自检 70/70、失败/取消/跳过/todo 均 0（约 1.76 秒），原生 `exitCode=0/status=passed/clean=true`，容器 `pi-adaptive-58893f45-53b4-44b2-a9b1-494f6882fbef`；开发子只有首次 read 一个工具失败，正常 stop、clean 且 PID ESRCH。父 Session 第 39 行 `delivery_develop` 仍为 `isError=true`，错误正文完整包含原始子 Session、已取得但交接时仍须复核的收尾证明、父 Session、本次调用及 writer 待落盘核验说明，没有将失败改成成功。
- 父自主取证已验证：父收到失败结果后，第 40 行立即按返回的实际子 Session 路径发起 read（offset 1/limit 60），第 44 行因内容范围继续读 offset 19/limit 20，结果均成功。父自行核对代码和原始记录，确认错误来自要求的首次缺失读取、后续写入和自检成功、子已正常清理，然后在第 46 行自行调用 `delivery_validate`；未重新开发、自检或申请批准。临时只读断言核对首次子 read 结果位于子第 7 行且先于任何 write/edit，父证据读取发生在失败返回之后、固定验收调用之前，退出 0。全程仅初始 1 条自然语言输入，尚无任何恢复输入；正式验收结果及后续审查仍待验证。
- 固定验收已通过：真实验收子 PID `69779`，Session `2026-09-08T05-03-15-059Z_01a07f66-2272-7347-abfd-597d7c93d148.jsonl`。原命令 `node --test app/cli.test.mjs` 实际仅执行一次，70/70、失败/取消/跳过/todo 均 0（约 1.73 秒），容器 `pi-adaptive-00fa7364-0993-4afe-8056-f7390d0aa9e1` 的退出码为 0、clean=true。验收前后候选摘要同为 `a8bff401eef9d55bafbf00ef72fbf72e3ec9828f29dbbd5deb8620fdb1df182c`，覆盖 app/fixtures 四文件；父原生 `delivery_validate isError=false`，子正常收尾且 PID ESRCH。这是原有门禁在真实失败结果落盘后允许继续的实际证据，未手工释放 lease 或把失败结果改为成功；独立审查与最终交付尚待验证。
- 独立审查已返回：真实审查子 PID `69983`，Session `2026-09-08T05-06-38-337Z_01a07f69-3c79-73e9-b8d2-55ee0c53e6cd.jsonl`，实际差异 `runtime/adaptive-review-zjtdSH/diff.patch`。实际读取需求/规则、代码/测试、README、方案/台账、diff 和两份原始开发/验收记录；审查明确未发现需返工的实质问题，独立确认 read 失败在两次 write 前、唯一开发工具错误为该次 ENOENT，自检和固定验收均 70/70、exitCode=0 且清理明确。父 `delivery_review isError=false`，同一候选，子正常 stop、PID ESRCH；代理已读完整审查正文。剩余边界为未遍历所有流分块组合、未注入读取中途 I/O 故障及跨平台/性能测试，不将静态判断冒充实测。父已创建并读回 README，正进行最终裁决/台账收尾，外部黑盒和最终审计尚未执行。
- 最终交付与外部验收通过：父自行完成审查裁决、三份文档收尾及最终报告，原生 `stopReason=stop`，无在途工具；代理读回 README 与临时唯一台账。随后运行冻结的 `node verify.mjs blackbox`，退出 0，外部 14/14（约 0.65 秒），无失败/取消/跳过/todo；验收文件 SHA-256 仍为 `e1a08db5ca63f21a16ef92e4f4cd974a4acbb7ace57d46417ca420707ace637b`。真实容器 `pi-adaptive-5f5969a3-be54-46a2-9213-0d22ed8c95a0` 的 `exitCode=0/status=passed/clean=true`，交付源码与只读挂载副本均未变，证据 `blackbox-kMC7iW/result.json`。
- 正常退出与清理审计通过：真实 PTY 发送 `/quit`，`driver-result.json` 的 `exitCode=0`，无强杀；`node verify.mjs audit` 退出 0。4 个模型 Session 均正常 stop，driver/父/三子共 5 个 PID 全部 ESRCH；本次 4 个真实容器按 execution label 查询均无残留，lease 为空。18 份产品资源的加载副本及主仓来源摘要均与启动前一致，读取边界副本未变，认证引用仍为符号链接且未读取内容，最终 app 与外部验收候选一致。证据 `audit-result.json`；输入/批准和精确失败链的终态复核待下一条记录。
- 精确失败链终态复核通过：`python3 /private/tmp/adaptive-real-failure.lICTNs/recovery-audit.py` 退出 0，证据 `recovery-audit.json`。按原生 JSONL 的 `\n` 分隔解析，核对首次子 read 实际目标、ENOENT 在任何写入前、唯一开发工具错误、成功自检及 clean；父失败正文保留 `isError=true`，包含正确子/父 Session 和调用 ID，未提前声明 writer 已交回。父下一次调用即沿正文路径成功 read，补读尾部后自行固定验收，开发/验收/审查各 1 次且同一候选；没有重试、额外批准或手动释放 lease。
- 输入与记录完整性：实际 PTY 按键仅首条 `/delivery-shape` 输入、3 组 Down/Enter 批准及最终 `/quit`；原生用户消息恰好 1 条，并与冻结 Prompt Template 展开后的首条输入一致，未发送 phase-2/phase-3 或任何恢复文本。三份原生批准均为 `tui/select`，9 份冻结输入摘要不变。4 个模型 Session 共 45 个模型回合、67 个工具调用，逐一有唯一原生结果，无模型 error/aborted。共 8 个工具错误完整保留：开发子首次 ENOENT 及父开发失败各 1；父另有 5 次探查尚不存在规划文档的 ENOENT、1 次读取超出文件末尾，均自行继续处理，不能声称全程零工具错误。
- 审计脚本修正记录：首次临时只读断言误将 read 路径限定为相对路径，实际模型使用正确的绝对路径；第二次误将原生用户消息当作尚未展开的 slash 输入，实际 Pi 已展开冻结模板。两次命令均退出 1，未产生通过报告，未修改产品、原始输入或 Session；读回实际路径/模板后修正临时审计的比较方式，最终全部断言通过。这是外层审计假设修正，未重跑真实模型或成功验收。
- 计量：父首次用户消息至最终答复约 19.42 分钟（1164.939 秒，包含 TUI 批准等待，不含之后外部验收/审计）；4 个真实模型 Session 的原生 SDK 汇总 input 236327、output 28147、cacheRead 1611136、cacheWrite 0，费用估算 USD 5.381756。该数值不含外层助手，不是 Provider 账单；本轮改变了定向输入，不作为严格耗时或费用下降对照。
- 最终结论与边界：第 13.8 节修复已取得真实模型定向证据，补齐第 13.9 节正向试用未覆盖的分支：首次真实读取失败、后续开发自检成功且子终态已知时，父可凭失败正文自行取证，在原有核验内继续交付，无外层恢复输入。本次不外推未知终态、失效 lease、进程崩溃、模型断流或真实代码缺陷返工；CLI 的跨平台/性能及读取中途 I/O 故障仍未验证。本轮未改产品行为、接口或兼容性，未重跑第 13.8 节已通过的全量回归；未提交、推送、创建 PR、安装、发布或部署，原有 7 个文件改动保留。

### 13.11 失败证据修复及验证记录本地提交

- 状态与授权：已完成本地提交。用户明确要求“先提交下代码”，本次提交第 13.8—13.10 节的修复、回归测试与验证文档，共 7 个既有文件；授权不包含 push、PR、安装、发布或部署。
- 提交前核对：分支 `main`，基线 `8b37ef01b3872fe5c81289e451d5a77ff882dc91`；初始暂存区为空，全部工作区差异均在本次范围内。完整读取并复核代码、测试和两份文档差异，18 份当前产品资源与第 13.10 节真实验证版本摘要一致；逐文件暂存后核对文件集合及工作区/暂存区一致，`git diff --check`、`git diff --cached --check` 均通过。
- 验证依据与边界：沿用第 13.8 节类型检查、默认回归 469/469、真实容器 26/26，以及第 13.9—13.10 节两轮真实模型、外部 14 项验收与清理审计。本次提交未重跑测试或模型，不改变已验证产品代码、兼容性及已有残余边界。
- 提交结果：`git commit` 退出码 0，说明为 `fix: 补齐开发失败结果的原始证据`。本条及当前状态在成功后补记并纳入同一本地提交，最终 hash 以 Git 原生记录为准；未推送、创建 PR、安装、发布或部署。

### 13.12 文档状态同步与新项目试用评估

- 授权与范围：用户要求“先同步好状态”，并只读查看 `/Users/sxie/Documents/亚马逊/amazon-image-generation-workbench` 是否适合试用。基线 `main / 6467743`，开始时工作区干净；本轮仅修改本仓技术方案、README 和唯一台账，不包含目标项目写入、安装 Package、模型试用或 Git/发布动作。
- 文档同步已完成：去除技术结构、清理责任及正文中残留的待实施表述；明确父协调/子修改源码、已实现的本地容器路径、当前版本与旧依赖的区别、真实模型正向及已知工具失败自主取证的证据范围。保留旧实验事实、未知终态关闭和真实源码缺陷返工/跨平台等待验边界，断流自动重试继续标为延期；README 同步相同能力口径和台账定位。
- 同步验证：人工对照现有代码入口和第 13.3、13.8—13.10 节证据；`git diff --check` 与变更范围核对通过，旧“实现待验证”和父直接承担轻量源码变更的表述已清除。产品/测试代码与兼容性不变，未重跑已通过的自动化或模型验证。
- 项目只读评估已完成：已读取指定目录的根/前端 AGENTS、文档索引、主台账与相关专项入口、依赖清单及必要源码/测试。目标为 `main / bf4d79a`，Git 工作区干净；前端实际依赖 Next.js `16.2.10`、React `19.2.4`，后端要求 Python `3.12`，已有 FastAPI、Canvas、Workflow、账号/存储等代码。静态清点 backend/src 70 文件、backend/tests 77 文件、前端 app/components/lib/e2e 合计 144 文件；说明它已有较完整的应用基础，不能把个人新项目等同于空白样例。未读取真实 `.env`、凭据、业务素材或运行日志，未连接服务/数据库/生产、运行项目脚本或调用 Provider。
- 适用性与首轮建议：有明确的模块拆分需求、专项台账和可重复测试，适合试用；优先沿 P6.1 选择下一组纯数据转换或校验边界，冻结调用点及当前行为后只做一个切片。第十八切片 `canvas_node_contracts.py` 已存在，其完成证据属于目标项目历史，本次没有重跑或重新标记。现有服务仍含事务、权限与 Proposal Apply 写入权限判定，不能把相邻 helper 一概当作无副作用纯逻辑；下一切片的精确范围尚未冻结。完整业务、鉴权/额度、数据库迁移、Worker 拆分及真实生图不作为首轮建议范围。
- 接入与执行条件：目标 `.pi/settings.json` 的本地 Package 相对路径从配置目录解析后指向本仓，但静态配置不证明当前活动会话已经加载新版；目标第十八切片计划仍含旧 `/delivery-revise` 指令，历史记录不能直接成为新版授权。试用前核对实际加载和 writer，再使用当前两次阶段确认。目标有 Python `3.12` 禁网容器的历史证据及本地依赖目录，但本轮没有核实可用镜像、依赖、300 秒/512 MiB 执行预算或完整回归挂载范围。`conftest.py` 用 `setdefault` 设置测试环境，应用配置仍有 `.env` 加载，正式试用需在排除真实配置的临时环境中显式固定测试配置与 Mock，不直接复用业务 Compose/数据。
- 最终范围：主仓仅技术方案、README 与本台账变化，目标项目保持只读；未新增实现、配置、测试或兼容层，未运行新的自动化/模型试验，未提交、推送、创建 PR、安装或发布。目标项目的动态进度仍只由其既有专项台账维护，本节只记录本 Package 试用适用性的评估结论。

### 13.13 原生工具恢复与后续插件适配评估

第 13.13—13.18 节保留问题发现、复现和目标确认时的状态；其中“未实施/不兼容”描述当时基线，已由第 13.19 节的实现和限定验收推进完成，不作为当前待办。

- 用户决策：当前亚马逊项目试用继续使用原生 Pi；用户要求兼容 `pi-codex-conversion` 并先行评估，初步结论与隔离证据见第 13.17 节。用户最新确认两种环境都必须正式支持，见第 13.18 节；**当前 Structured 不兼容，适配待设计、待实施**。本节保留原始冲突证据，原生试用和 Voice only 的有限共存不替代双环境目标。
- 已确认的冲突：用户截图显示 `exec_command` 被父门禁拒绝，`delivery_readonly` 因没有已启用的原生只读工具而未启动子 Pi。本机适配插件 `3.0.29` 的 README 明确说明 Structured adapter 替换 Pi 默认文件/Shell 工具，不提供独立文本 `read/edit/write`；与当前 Package 的原生工具来源要求不兼容。
- 已确认的恢复范围：用户按项目级资源配置停用该适配扩展并重启；后续截图显示已加载扩展中保留 `delivery-gate`、不含 `pi-codex-conversion`，原生 `read` 成功读取目标根 `AGENTS.md`。这是用户操作及截图证据，只证明加载和单次读取恢复，不证明子会话、容器验收或完整项目交付通过；本助手未修改目标配置。
- 后续评估重点：以实际使用的插件版本和模式为边界，核实公开 API 能否支持工具来源确认、父子能力重建、受控文件写入与容器命令，以及取消、进程清理和原生结果持久化。优先评估最小可行组合；Structured adapter、Code Mode、Notebook Mode 的结论分别验证，不预先承诺全部支持或建设通用插件适配层，也不以直接放行宿主 `exec_command` 作为兼容方案。
- 后续验证要求：若最小方案可行并进入实施，覆盖读取、批准内写入、越界拒绝、固定验收、独立审查和取消清理；按项目规则同时保留定向单元测试与真实 Pi/临时 Git 集成证据，原生路径需通过相关回归。真实模型验证另按具体任务授权，未验证模式继续明确不支持。
- 本轮文档范围与验证：仅更新本台账的当前断点和后续事项，保留已有 README/技术方案未提交改动；`git diff --check`、文档读回及变更文件集合核对通过，暂存区为空。未新增产品代码、依赖、配置或测试，未运行新的模型或自动化测试，未提交、推送或发布。

### 13.14 子任务实时进度展示缺口

- 状态与需求：用户在原生 Pi 试用中反馈 `delivery_readonly` 运行时只显示“子任务调用 read”，无法了解中间正在做什么。只读定位已完成；用户随后确认下述展示方向，尚未实施。该事项列为 F5；插件初步评估及双环境支持目标另见第 13.17—13.18 节，展示要求也纳入双环境验收。不把方向确认记录为实现或验收完成。
- 已确认原因：`ChildRpc.receive()` 已接收并向回调传递子 Pi 事件；`delegateReadOnly()` 与开发/验收路径的回调仅将 `tool_execution_start` 的工具名传给父 `onUpdate`，未展示参数、工具完成状态、流式输出或子任务的文本进展说明。独立审查复用只读路径，也有相同缺口。连续调用同名工具会反复显示相同文字，现有卡片无法据此区分不同文件或判断无更新期间的真实状态。
- 官方能力依据：已完整读取本机 Pi `0.85.1` 的 `docs/rpc.md`，公开协议提供 `message_update`、带参数的 `tool_execution_start`、携带累计局部结果的 `tool_execution_update` 及含 `isError` 的 `tool_execution_end`。当前容器日志已通过 `onData` 接入原生 Bash 工具，缺口位于父侧进度展示；不能把界面不变直接判为子任务卡死，也不能把实时输出当作已持久化的最终结果。
- 已确认展示方向：复用现有 RPC 事件与父工具卡片，每次委派独立展示并按调用身份更新；多个子 Pi 的进度不混用。默认两行：第一行显示任务名称和真实状态，第二行显示当前操作或最近已完成的动作，也可展示子任务主动提供的进展说明。文件/命令目标来自实际工具事件，工具结束后不继续显示为正在执行；没有新的说明时保留最近已确认的动作与运行指示，不猜测模型正在做什么。默认不显示工具调用次数、耗时、距上次事件的时间或“无新进展”提示，不编造完成百分比；需要用户确认或发生错误时突出提示。原位刷新，展开查看有长度上限的近期过程、输出与耗时。详细历史继续使用原生子 Session，不引入额外模型总结、第二套日志或独立监控系统。
- 待验证：只读、开发、验收、审查的事件归属与展示；同名工具连续执行、较长命令的局部输出、大量输出的截断和刷新、错误/取消/收尾状态，以及原生 TUI 的折叠与展开效果。展示变化不得扩大操作权限、提前宣告成功或干扰批准、单 writer 和清理核验。
- 本轮范围与检查：仅本台账记录需求并同步用户确认的展示方向，文档读回、`git diff --check` 和变更范围核对通过，暂存区为空。未修改正在运行的产品资源、目标项目配置或代码，未运行新的测试或模型，未提交、推送或发布。

### 13.15 真实项目只读委派失败诊断

- 状态与范围：用户提供 `delivery_readonly` 失败截图，要求排查子任务。本轮只读核对本 Package、对应父/子原生记录与子 PID，诊断已完成，产品缺口尚未修复。目标工作区仅有用户停用插件留下的 `.pi/settings.json` 改动，本助手未修改或回退该配置。
- 原始证据：目标 Session 目录为 `/Users/sxie/.pi/agent/sessions/--Users-sxie-Documents-亚马逊-amazon-image-generation-workbench--/`；父文件 `2026-09-08T06-33-51-223Z_01a07fb9-156e-74df-92aa-119f37ed511f.jsonl`，对应子文件 `2026-09-08T06-37-22-758Z_01a07fbc-4fc1-742d-a9c7-78801a900fdc.jsonl`。父 `delivery-delegation` 记录启动至结束为 `06:37:23.052Z`—`06:52:31.313Z`，最终 `status=failed`、退出码 `0`、signal 为 null；子记录存在匹配的 `delivery-child-exit`，PID `74136` 检查为 ESRCH。
- 已确认触发原因：子任务 READY 工具清单仅有 `read`，本轮 61 个工具调用均有对应结果。期间误读不存在的 `backend/pyproject.toml`、`backend/tests/test_workbench.py`、`backend/tests/test_canvas_snapshot.py`、`backend/tests/test_workbench_api.py`，另一次读取 `backend/README.md` 的 offset 为 280，超过实际 276 行。最终模型 `stopReason=stop`，原生记录中已有一份 8913 字符的分析文本；该文本声明只读证据不足以认定完整验收条件，不代表项目方案或实现验收通过。截图上更早的 `backend/AGENTS.md` 缺失属于父工具调用，不能混为子任务错误。
- 产品缺口：`ChildRpc.toolError` 累积任何子工具错误；`delegateReadOnly()` 将它与未结束工具统一报为“子任务存在工具失败或未确认的执行终态”。随后仅在没有 problem 时读取最终正文，抛出的失败文本也未携带已知 Session 路径。父真实工具结果为 `isError=true`、details 为空，仅有上述笼统错误；后续直接读取业务源码与测试配置，未先取得该子结果。第 13.8 节补齐的是开发委派共享失败路径，普通只读委派仍存在同类原始证据缺口。
- 修复方向与执行条件：优先让只读失败正文附上已知原生记录位置与实际收尾事实，明确区分已记录工具错误和终态未核实，保留错误供父会话读原始记录后裁决，不直接将失败改判成功或新增错误白名单/自动重试。另需在目标项目显式启用 Pi 原生 `grep/find/ls`，让父子具备查找路径的能力；当前配置未改。先核对本次已存在的分析证据，避免盲目重跑整个子任务；修复、定向测试与真实 Pi 回归仍待执行。
- 本轮仅回写本台账，文档读回、`git diff --check` 与变更范围核对通过，暂存区为空，保留原有三份文档改动；未调用新的模型、运行目标测试、修改产品代码或中止用户会话，未提交、推送或发布。

### 13.16 真实试用相关集中审查与待修复清单

- 范围与状态：用户要求“看看还有什么问题，需要一并修复的”，并确认原生 Pi 与 `pi-codex-conversion` 都要适配。当前总范围为 F1—F5 已确认问题的修复及 F6 双环境支持；前五项已完成取证与必要禁网复现，产品修复均未实施。F6 初步评估已完成，整体仍为待设计、待实施；目标及验收方向见第 13.18 节。未扩大到目标业务开发、生产环境或自动重试。

| 事项 | 已确认问题或待评估目标 | 修复或评估方向 |
|---|---|---|
| F1 只读失败证据返回 | 第 13.15 节真实模型已复现：普通读取错误与未确认的执行终态共用笼统提示，已知子 Session 路径未返回，父未先复用已有分析 | 失败正文补齐既有记录引用与真实收尾事实，区分工具错误和终态未知，父按原始记录裁决；保留失败，不增加错误白名单或自动重试 |
| F2 普通只读结果完整性 | 新增隔离复现：删除 Session 最后一个换行、重复 `delivery-child-exit`，或在该关闭记录之后追加 assistant 消息，普通只读均返回 `isError=false`、`status=completed`；最后一种还返回了追加的文本 | 在现有最终记录读取处核实 JSONL 完整结尾、唯一且归属匹配的关闭记录，以及关闭后无消息；与开发/审查已有要求对齐，不新增双份日志或通用验证层 |
| F3 基础只读工具与接入说明 | Pi SDK 默认仅启用 `read/bash/edit/write`；门禁关闭父写入与 Shell 后仅剩 `read`。目标项目没有配置 `defaultTools`，READY 与真实模型调用也证实没有 `grep/find/ls`；现有正常集成用例接受这种最小工具集，因此不证明仓库搜索流程可用 | 使用 Pi 已有项目 `defaultTools` 显式启用原生查找工具，补最小接入说明及实际工具清单显示；不静默恢复用户停用的工具，不开放 Shell。README 顶部“未安装到真实项目”的旧状态亦需同步 |
| F4 Git 现状读取缺口 | 真实父公开说明只有 `.git/HEAD` 可读，工作区差异未核实；原生文件工具不能替代 `git status`。当前 `/delivery-status` 只调用工作区身份/lease 查询，模型没有固定 Git 状态入口，与项目要求先检查分支和已有改动不匹配 | 补当前 worktree 的固定只读 Git 状态入口，向父模型提供分支/HEAD 及已有改动，复用工作区外固定 Git；不增加任意命令参数，不靠读取 `.git/index` 猜状态 |
| F5 实时展示与状态查询遗漏 | 第 13.14 节已确认展示方向；新增真实 Pi/fake provider 复现：普通只读子仍在运行时，`/delivery-status` 仅显示文档与开发/验收/审查没有执行，未列该只读任务或其记录引用 | 按现有委派身份分别更新卡片，并将普通只读运行及已取得的记录位置纳入状态查询；默认两行真实状态/动作，去掉调用次数和无更新提示，详情才展示近期过程与耗时 |
| F6 原生 Pi 与 `pi-codex-conversion` 双环境支持 | 目标已确认，初步评估完成；适配方案待细化、实现与验收未开始。第 13.17 节冲突证据保留，不能将评估完成记为 F6 完成 | 按第 13.18 节共用交付与权限规则，适配两种实际工具体系；插件启用时保留 Structured 工具和所需增强，覆盖完整流程。关闭插件、Voice only 或仅加载成功均不满足交付目标 |

- F2 复现证据：临时脚本 `/private/tmp/adaptive-readonly-audit.9knxvm/readonly-records.test.ts` 使用现有 `createPiFixture`，在临时子 Pi 退出阶段对纯假数据 Session 注入三个异常，并保留正常对照。执行 `node --import tsx test/support/run-tests.ts /private/tmp/adaptive-readonly-audit.9knxvm/readonly-records.test.ts test/unit/subagents.test.ts test/integration/extension-lifecycle.test.ts`，退出码 0：既有单元 39 项、集成 17 项通过；4 个诊断场景断言的是当前实际接受行为，其中 3 个异常成功复现漏检，不能记作修复验收通过。制品根 `/private/var/folders/b0/vsckn5zn3w3dms0_3scbhv400000gp/T/adaptive-tests-TcOXbX`；正常对照为 `adaptive-pi-A4bqP4`，缺少换行为 `adaptive-pi-rhn2rd`，重复关闭为 `adaptive-pi-WdSje8`，关闭后消息为 `adaptive-pi-5zrL7G`。最后一种返回夹具标记 `AUDIT_POST_EXIT_RESULT`。这是假数据故障注入，不代表真实目标 Session 已损坏。
- F5 复现证据：`node --import tsx test/support/run-tests.ts /private/tmp/adaptive-readonly-audit.9knxvm/readonly-status.test.ts` 退出码 0。实际子 PID `77783` 等待期间调用原 `/delivery-status`，确认其输出没有该只读执行；随后 clear_queue、abort 和子进程退出核对通过。制品根 `/private/var/folders/b0/vsckn5zn3w3dms0_3scbhv400000gp/T/adaptive-tests-kgCVld/adaptive-pi-K5oAaS`。
- 未发现需要追加修改的事项：本轮既有定向用例中的取消、强制崩溃、RPC 非 TUI 批准拒绝、工具来源核验和子交互边界均按原断言通过。曾疑虑只读路径未另拦截历史树导航，但实际 Pi `navigateTree()` 会在 isStreaming 时直接拒绝，故不新增重复门禁。上述结论只覆盖本轮定向检查，不扩大成全仓或任意插件安全认证。
- 顺序与范围建议：F1/F2 先恢复结果与证据的可靠交接，F3/F4 补齐本次仓库评估所需的真实读取能力，再做 F5；F6 按双环境目标推进设计与能力验证，不能以原生修复或有限共存替代其交付，也不因适配存在不确定性而搁置确定缺陷。F1—F5 的产品修改预计集中于既有只读委派、入口、策略和工作区模块及必要展示函数；F6 的具体文件与接口待最小方案确定。共用 Pi RPC 与交付机制，不增加新的运行时、监控系统或通用插件适配平台。目标现有 venv/数据库/容器的可用性属于后续切片执行前提，不在本轮未经授权修改。
- 收尾与未执行：两次隔离执行使用临时 HOME/agent dir、空凭据、系统禁网和 fake provider，审计中的 37 个与 2 个 Pi PID 均为 ESRCH。仅本台账新增审查结论，文档读回、`git diff --check` 和变更范围核对通过，暂存区为空；临时诊断脚本留在工作区外，目标仍只有用户原 `.pi/settings.json` 改动。未修改产品代码或目标配置，未调用真实模型、运行目标业务测试或新容器组，未提交、推送或发布。

### 13.17 `pi-codex-conversion` 可行性评估

- 状态与范围：F6 初步评估已完成，适配未实施；本节保留技术证据，最新支持目标见第 13.18 节。对象是本机已安装 `@howaboua/pi-codex-conversion 3.0.29`、标准 Pi `0.85.1`、Node `25.2.1`、macOS 与当前 Package `6467743` 产品代码；优先核实 Structured。结论是当前配置不能提供完整兼容，且没有证据支持仅改工具白名单的最小修复。有限共存与完整工具语义分开判断，不把本次评估扩大为所有版本、Provider 或模式认证。
- 静态工具证据：插件 `activation.ts` 的工具合并移除原生 `read/bash/edit/write`，保留其他非自有工具；`events.ts` 不只在启动时同步，还在输入、模型切换等事件重做。Structured 使用 `exec_command/write_stdin/apply_patch`；本 Package 只接受来源已核实的原生只读工具及自身协调/受控开发工具。因此改变加载顺序不能解决持续接管，公开工具名也不能成为授予执行权限的依据。

| 组合 | 本轮实际证据 | 支持边界与建议 |
|---|---|---|
| Structured + Pi 默认四工具 | 父无原生只读工具，`delivery_readonly` 返回“没有已启用的原生只读工具，未启动子 Pi”；输入前插件重新激活自己的命令和补丁工具 | 当前不兼容，复现用户原始症状 |
| Structured + 显式启用七个原生工具 | 父保留 `grep/find/ls`，没有 `read`；子实际加载插件命令，但 CLI 工具范围内没有 adapter 工具，仅有 `find/grep/ls`。READY 接受该原生子集，夹具调用 `read` 失败；子正常退出，父返回失败 | 补查找工具只能恢复部分能力，不能证明完整读取或父子 adapter 模式一致；不能用 READY 摘要相等宣称插件模式重建成功 |
| Voice only + 显式启用七个原生工具 | 父子均有原生 `read/grep/find/ls`；`delivery_readonly` 读取假数据成功，原生结果与正常子关闭记录存在 | 仅证明插件不接管模型工具时可完成本次只读委派。未验证语音或完整交付；不等于保留 Structured 的请求/上下文增强 |
| Extra tools only | README 与 runtime plan 表明仅添加选定补丁/图片工具；请求改写仍要求 adapter runtime，补丁仍使用插件自己的执行器 | 未动态验证，不能作为“原生工具 + 全部增强”的现成配置；新增工具仍受本 Package 门禁限制 |
| Code / Notebook | 有公开的 Code Mode 工具注册与 preflight 接口，但工具通过嵌套执行；Notebook 另有持久运行时 | 未启动或验收。公开嵌套接口不能直接证明现有批准来源、唯一原生工具结果、writer 与取消清理契约适用，不纳入首轮兼容承诺 |

- 执行与交接的实际改动量：Structured `exec_command` 通过插件私有 `ExecSessionManager` 启动宿主 Shell，可以在进程仍运行时返回 `session_id`，再由 `write_stdin` 继续。所读选项没有类似 Pi `BashOperations` 的执行后端注入；现有每命令独立容器不提供 PTY 或跨调用持久 Shell。`apply_patch` 通过捆绑 Rust 二进制在宿主 cwd 执行多文件新增/编辑/移动/删除，选项没有受控 I/O 注入，且可能部分成功；它不经过本 Package 的原生 edit/write 边界。完整支持至少需要分别解决父只读能力、角色与来源、受控补丁路径、持久命令取消/后代清理和原生结果交接，不能把工具别名映射或命令文字检查当作这些机制的替代。
- 评估建议的后续纠正：评估时曾建议优先保留原生工具、另行考虑完整 Structured；用户随后明确要求两种环境都正式支持，因此该收缩建议不作为当前交付范围。第 13.18 节取代该建议；上文工具替换、执行接口和清理缺口继续作为适配待解决问题，不改记为已通过，也不预设只能停用插件或等待上游。
- 请求增强边界：插件 `provider-request.ts` 在 `voiceFeaturesOnly` 时跳过主要请求改写，其他模式也先检查 `isAdapterRuntime(plan)`。因而不能向用户保证 Voice only 或 Extras 仍保留 Structured 的请求改写收益。插件依然注册自己的 Provider，真实 OpenAI 传输、缓存、压缩与语音本轮均未调用或验证；本轮不产生模型质量、费用或速度结论。
- 隔离与制品：临时脚本位于 `/private/tmp/adaptive-codex-assessment.9Ht3XD/`，复用正式 `createPiFixture` 和 `FixtureRpc`，加载真实已安装 adapter 代码与临时复制的本 Package，使用临时 Git/HOME/agent dir、空凭据和 fake provider。系统策略禁止网络和临时根之外写入；真实用户 HOME 仅放行本仓及安装依赖代码目录读取，没有放行真实 agent 配置、认证或 Session。三个完成场景均实测 `homeAccess=EPERM`、`network=EPERM`、凭据数 0。Structured 的假数据 `exec_command` 探针均被正式门禁拒绝且无哨兵文件；Voice only 未注册该工具，返回 tool not found，不混记为门禁拦截证据。
- 命令与结果：初始 `run.ts` 因临时目录按 CJS 解析、不支持顶层 await 而退出 1，尚未启动 Pi；改为 `.mts`。`node --import tsx /private/tmp/adaptive-codex-assessment.9Ht3XD/run.mts` 首轮 3 项观察断言中 2 项通过、1 项失败：两个 Structured 场景确认当前不兼容行为；Voice only 因诊断脚本错误要求它注册 `exec_command` 而提前失败，不是产品回归。将加载证明改为实际 `/codex` 命令和插件来源工具后，仅重跑 `node --import tsx /private/tmp/adaptive-codex-assessment.9Ht3XD/run.mts --test-name-pattern=voice-native7`，1/1 通过、退出码 0。前两项属于缺陷复现，不能记作 Structured 验收通过。
- 原始证据位置：两个 Structured 报告分别在 `/private/tmp/adaptive-codex-run-cIkXSI/adaptive-pi-3E4VpI/assessment.json` 与 `adaptive-pi-IGKFN6/assessment.json`；Voice only 报告为 `/private/tmp/adaptive-codex-run-77woHk/adaptive-pi-EZID0H/assessment.json`。同目录保留完整 RPC、stderr、观察事件和父/子原生 Session；10 个被记录的 Pi PID 收尾均为 ESRCH，两个实际只读子的退出码为 0 且有匹配关闭记录。这不证明未启动的宿主持久命令或所有插件后代清理正确。
- 收尾与未执行：仅本台账同步评估结论，保留 README、技术方案原有未提交改动；临时脚本在仓库外。文档读回、`git diff --check`、三份文档变更集合与 F6 状态一致性检查通过，暂存区为空；目标 Git 只读复核仍仅有用户原 `.pi/settings.json` 改动。未修改产品代码、依赖、已安装插件或目标项目配置，未调用真实模型、执行实际补丁/持久 Shell/语音或目标业务测试，未重复产品全量回归。尚无适配实现，因此仍需在具体范围确定后补受控写入、越界拒绝、固定验收、独立审查、取消及原生路径回归的单元与真实 Pi/临时 Git 证据。未提交、推送、创建 PR、发布或部署。

### 13.18 双环境支持目标确认与 F6 后续事项

- 用户确认：用户明确要求“既能适配原生的，然后 pi-codex 这种也要能适配”，并确认同一 Package 在原生 Pi 和启用 `pi-codex-conversion` 时都应正常完成交付流程。本轮按用户要求将目标落盘，技术方案第 7.3 节记录设计方向；F6 从单次评估扩展为正式适配事项，不能因评估结束而关闭。
- 状态：目标及验收方向已确认，初步静态与隔离评估完成；适配方案待细化，产品实现与双环境验收未开始。目标项目当前停用插件仅是试用现状；关闭插件、切 Voice only、只支持原生工具或仅证明插件可加载，均不满足 F6 完成条件。
- 最小设计方向：共用现有标准 Pi RPC、交付流程、批准、writer 和原生结果规则；针对两种工具体系解决必要能力重建与执行差异。首轮围绕当前 Structured，保留其工具与所需请求/上下文增强，不提前建设通用适配框架、第二 runtime 或额外配置系统。Code/Notebook 独有能力另行界定，不由本轮目标确认自动宣称已支持。

| 后续事项 | 当前状态 | 完成所需证据 |
|---|---|---|
| 细化双环境方案与关键能力验证 | 待开展；复用第 13.17 节初评 | 明确父子加载与来源、读取、补丁写入、持久命令、增强保留及清理交接的公开实现路径；有缺口时记录具体断点和可选路径，不自行缩小目标 |
| 实现两种工具体系的适配 | 待实施，依赖上述方案 | 在同一交付与权限机制内完成必要改动，插件保持启用；按实际变更补定向单元与真实 Pi/临时 Git 证据 |
| 分别验收并更新接入说明 | 待验证，依赖适配实现 | 两种环境分别完成读取、阶段批准、开发、固定验收、独立审查、实时进度和结果交接；覆盖越界拒绝、失败、取消、未知终态及多个子任务事件归属，并证明插件所需工具和增强实际生效 |

- 执行边界：本轮只记录已确认目标与待办，不将文档同步当作新增产品实现、目标配置变更或验收通过。后续在公开能力不足时继续定位最小可行路径；确需用户决定关键取舍或扩大外部操作范围时说明具体卡点，既有持续推进授权无需重复询问。
- 本轮交付：仅修改技术方案和本台账，保留已有 README 及其他文档改动。文档读回、引用与状态一致性、`git diff --check` 和变更范围核对通过，暂存区为空。未修改代码、配置或已安装插件，未运行新模型或功能测试，未提交、推送或发布。

### 13.19 F1—F6 实施与验证

- 授权：用户明确要求“可以，按计划推进，全部做完了再停下”，授权按第 13.16—13.18 节完成代码、文档与必要隔离验证。基线 `main / 6467743`；保留已有 README、技术方案及本台账的改动。测试默认禁网、临时 Git/agent dir 与 fake provider；不修改目标业务项目、真实配置或已安装插件，不包含提交、推送或发布。
- 规模：F1—F4 优先修改现有委派、入口、策略与工作区模块；F5 只增加必要展示函数；F6 先核实当前 Structured 的公开接入与隔离执行路径，共用原 RPC、批准和 writer 机制，不预建通用适配框架。

| 事项 | 状态 | 当前证据与下一步 |
|---|---|---|
| F1 只读失败证据 | 已完成 | 失败正文返回已知子 Session、父 Session ID、本次调用、实际进程/工具/持久关闭事实；原生失败保留，真实 Pi/fake provider 父直接读回证据且只委派一次；全量通过 |
| F2 只读记录完整性 | 已完成 | 最终读取拒绝缺少换行、重复/错归属关闭与关闭后消息；普通只读与审查交接共用同一解析函数，真实故障注入与全量通过 |
| F3 原生查找与接入 | 已完成 | README 提供项目 defaultTools 说明，status 显示实际工具；真实父子按显式配置执行 ls/find/grep/read，保留用户选择与 Shell 关闭；全量通过 |
| F4 Git 现状 | 已完成 | delivery_git_status 固定查询本 worktree，拒绝参数/同名覆盖；真实 Git 覆盖 unborn、detached、重命名/特殊路径、index 不变与过滤器不执行；全量通过 |
| F5 实时进度 | 已完成 | 四类任务、窄屏两行原生卡片/有界展开、并发子归属、在途查询、真实容器输出和 Structured PTY 运行/退出通过；全量及最终展示定向通过 |
| F6 双环境支持 | 已完成（限定版本/模式） | 同一交付/批准/writer/RPC 路径；原生默认 489/489、真实容器 26/26、实际 Structured 3.0.29 完整组 14/14；增强、PTY、补丁、图片、并发、失败及未知清理证明均有证据 |

全部事项已按本轮范围验证。以下过程记录保留当时断点和失败，最终结论以本表及末尾收口记录为准。

- 首次默认全量已通过 489/489（unit 333、integration 142、E2E 14），退出 0，根分别为 `adaptive-tests-rHw879`、`adaptive-tests-law8zH`、`adaptive-tests-CDEy5K`。最后补查发现 Structured 清理失败记录必须在共享持久关闭边界拒绝，已补开发/只读证明字段检查，审查因此不能以失败子记录交回 writer。相关单元 61/61、退出 0，根 `adaptive-tests-cKQAdS`；真实 Structured 图片、RPC 批准拒绝及开发/审查清理证明故障注入 4/4、退出 0，根 `adaptive-tests-611d9k`。故障注入修改的是临时原生关闭证明，实际容器均已清理，不冒充引擎真实失联。
- 图片探针失败记录：扩展组首次加图片后为 10/12，根 `adaptive-tests-LlMGD7`，两个图片断言失败；PNG 的 IDAT CRC 实际错误，并非模型能力导致，检查有效 PNG 的各块 CRC 后替换假数据。view_image 同时改用公开 createReadToolDefinition 传入真实上下文，明确图片模型前提并保留底层图片处理错误。无额外 Provider。最新 typecheck 与 diff 检查通过；正在以最终版本重跑默认全量与 Structured 完整组。

- F5/F6 追加验收：原生容器与新增 Structured/展示单元 38/38，根 `adaptive-tests-q30jTE`；会话切换/未交回只读命令定向 2/2，根 `adaptive-tests-4rmuAq`；真实原生并发两子与追加命令边界 7/7，根 `adaptive-tests-x00VK0`，均退出 0。新单元第一次 typecheck 因联合类型未收窄失败，补真实字段存在断言后通过，未改变工具语义。
- Structured 扩展组 11/11、退出 0，根 `adaptive-tests-VEKdNS`：真实子跨原生调用输入 PTY、所有补丁操作与 Shell 引号字面保留、并发独立子及增强归属均通过；完整流程及故障矩阵重验通过，所有本场景容器使用真实身份检查无残留。修复只读容器 name 后增加显式身份断言；同实例新 Session 保留原定义并清除命令、首次并发准备关闭第二个命令入口、只读执行引用读盘后才创建；进度不再把返回 session_id 当作命令完成。原生完整真实容器组 26/26、退出 0，根 `adaptive-tests-s1neXC`，覆盖真实局部输出、失败取证、取消/超时、验收/审查/返工与清理。默认全量正在运行，已完成 unit 333/333，尚不标记 F6 整体完成。

- F6 正式接入首批：`run-tests.ts --containers --adapter <已安装 3.0.29> test/structured/flow.test.ts` 8/8、退出 0，根 `adaptive-tests-XzqIWp`。真实插件保持 Structured 启用，父/子经真实 request/context hooks 获得 verbosity 与独立 developer message；两种默认工具配置、完整分阶段批准/补丁/自检/固定验收/审查/文档交接，以及越界、取消、未交回命令和崩溃均通过。批准 UI 为 SDK 模拟，子为标准 CLI，命令为真实本地禁网容器，模型为 fake provider。此前两次完整流程夹具因缺少 UI 默认方法和主题初始化失败，已改用公开默认 UI 与 initTheme；第三次输出未取回，不计通过。一次定向名称未匹配只加载测试文件，亦不计功能通过。当前 typecheck 通过；追加审查发现只读容器记录 name 被工具名覆盖，正在修复并重验完整资源审计，尚不宣称本批所有容器核对充分。

- F1/F2 验证：`node --import tsx test/support/run-tests.ts test/unit/subagents.test.ts test/integration/extension-lifecycle.test.ts` 退出 0，61/61（40 单元、21 真实 Pi 集成），无失败/取消/跳过；根 `adaptive-tests-K4O7ly`。`node node_modules/typescript/bin/tsc --noEmit` 退出 0。普通失败的真实读取、三类原生记录异常、取消/崩溃/协议/持久化与批准拒绝均通过；测试中的子 PID 收尾检查通过。fake provider 仅证明机制，本轮尚未运行全量、真实容器或模型质量验证。
- F3/F4 验证及失败处理：首个 Git 定向测试在 `adaptive-tests-bD2eP5` 失败，证实初版固定 status 会调用仓库 clean filter；已在固定查询前读取配置键并仅为该命令禁用 clean/process/required。`node --import tsx test/support/run-tests.ts test/unit/workspace.test.ts test/unit/policy.test.ts test/integration/child-environment.test.ts` 为 48/49，Git、策略与已有环境回归通过；唯一失败是空隔离 agent dir/PATH 缺 `fd`，不是查找权限失败。将本机已安装 `fd 10.4.2` 的二进制复制到工作区外 `/private/tmp/adaptive-f-tools.hMSNAL`，以该目录加入 PATH，仅重跑项目查找场景 1/1 通过，根 `adaptive-tests-B1dAVF`，不下载或伪造 find；类型检查通过。固定状态不深入子模块内部，只报告其提交指针变化；工作树外程序并发改 Git 配置不属于原子隔离保证。后续全量复用该临时 PATH。
- F5 首批验证：沿上述 PATH，运行 `run-tests.ts test/unit/progress.test.ts test/unit/development.test.ts test/integration/extension-lifecycle.test.ts`，45/45、退出 0，无失败/取消/跳过，根 `adaptive-tests-CBYKiv`。实际 Pi `ToolExecutionComponent` 在 20/80 列折叠仅两行，展开有界，错误/恢复不残留运行状态；事件交错、文本/思考分离、大量输出、通知抛错及真实只读启动/结束/取消和在途 status 均通过。初次 typecheck 发现渲染器泛型 args 为 unknown，补显式类型后 typecheck 通过；尚未完成四类路径的追加回归，不标记整体完成。
- F5 四类路径追加：真实 Pi 开发与固定验收/审查的定向回归 2/2、退出 0，根 `adaptive-tests-9mmDvO`；实际 create/edit/read/bash 目标、完成状态、不同委派身份及父 lease 交回均通过。真实容器定向命令在 `adaptive-tests-CRKKf2` 已产生原始记录，但工具未成功取回外层会话退出结果；不据此标记通过，后续合并容器回归重新核实。
- F6 最小执行方案及能力验证：新增一个明确针对 Structured 的命令/补丁模块，复用原 Docker 生命周期，至多一个未交回命令；保留 exec_command/write_stdin 的 session_id、实际 PTY 和输出语义，补丁直接使用该版本附带的 Linux helper。只读 Shell 使用本地 `node:22-alpine`，只读挂载当前 worktree 与明确资源/证据；开发沿已批准镜像/挂载，以原绝对路径在容器内执行，不开放宿主 HOME、网络或 socket。Structured 的文件补丁要求所批镜像具备 helper 所需 glibc；本机已有 `python:3.12-slim` 可验证，无须拉取镜像。后续注册与父子核验尚未接入，不能记作插件完整兼容。
- F6 探针故障与修正：Docker CLI 在 stdin 非终端时拒绝向 TTY 容器 attach，原错误已取回；依据 Moby `v28.5.1/api/swagger.yaml` 的公开 ContainerAttach 约定，改为现有本地 Unix socket 上的固定 HTTP upgrade，输入只写本次已核实 ID，输出仍使用原日志路径。Alpine 没有 helper 的 glibc loader，改用已缓存 Python glibc 镜像验证；helper 在 JSON 前输出人类摘要，按其真实格式读取最后一行 JSON并保留错误原文。上述失败都未作为通过。最终 `node --import tsx /private/tmp/adaptive-structured-capability.aUlTEq/run.mts` 2/2、退出 0，根 `adaptive-structured-run-OXEHVs`：只读写入拒绝、真实 PTY 跨调用输入、多文件新增/删除、规划文档越界拒绝及所有本次容器无残留。无 Provider 请求，真实 HOME 仅放行安装代码；两个固定镜像分别为 `sha256:262aa4f3ae295c90861c34b4319f74feda309a2342e0439d4017be78427b97c0` 与 `sha256:afad9ec00dc415c9ed1dd4c4e298666211b2d8781db382a3a2df605617906a60`。原容器单元 28/28 及 typecheck 通过，根 `adaptive-tests-ylYrr9`；仍待正式注册、批准/验收/审查、错误取消及双环境回归。

#### 最终收口

- 最终默认回归：沿临时 fd PATH 再执行 `npm run test:all`，489/489（unit 333、integration 142、E2E 14）、退出 0，无失败/取消/跳过/todo；根分别为 `adaptive-tests-hyPlDY`、`adaptive-tests-ty75ya`、`adaptive-tests-MG5Hef`，完整输出 `/private/tmp/adaptive-structured-capability.aUlTEq/all-final.log`。包含原生批准、固定 Git、独立父子/并发、文件 writer、取消、持久化、候选、验收、审查及离线打包/隔离加载。最后只把卡片状态前置以免窄屏长标题遮挡，真实 Pi 组件定向 4/4、退出 0，根 `adaptive-tests-BI5rnw`；没有为该排版再重复无关全量。最终 typecheck 与 `git diff --check` 通过。
- 双环境真实执行：原生真实容器组 26/26、退出 0，根 `adaptive-tests-s1neXC`；最终 `run-tests.ts --containers --adapter /Users/sxie/.pi/agent/npm/node_modules/@howaboua/pi-codex-conversion test/structured/flow.test.ts` 14/14、退出 0，无失败/取消/跳过/todo，根 `adaptive-tests-iwt4ur`，完整输出 `structured-complete.log`。Structured 保留真实工具、系统提示、request/context 增强，完整开发→自检→固定验收→独立审查→父文档交接成功；同回合 Shell 只启动一个可跟踪容器，跨调用 PTY/最终退出、四种补丁操作、图片、RPC 批准拒绝、两只读子归属、会话切换、越界、取消、未交回、崩溃及开发/审查清理证明失败均通过。未知证明保留 lease，未手工解锁。实际 API 测试为 macOS arm64、Node 25.2.1、Pi 0.85.1、插件 3.0.29、OrbStack 与前述两个既有镜像；无拉取。
- 收尾审计：`node /private/tmp/adaptive-structured-capability.aUlTEq/audit.mjs` 退出 0。仅扫描本轮明确的 33 个测试/探针临时根，共 1691 份 JSONL；833 个实际 Pi/SDK 父 PID 全部 ESRCH。由这些原生记录及测试输出提取 303 个执行标签（包含 fake Docker 引用），使用空 Docker 配置逐标签只读查询，实际残留为 0；不是宣称创建了 303 个真实容器。`audit-result.json` 保留根、数量与结果，修复 name 覆盖前的真实工具结果也纳入标签查找；没有查询或操作用户其他容器、强杀进程或删除故障注入保留的未知 lease。
- 最终文件与规模：21 个已有文件修改、5 个新文件，共 26 个路径。产品修改集中于入口、只读委派、开发/容器、策略和工作区模块，新增 `src/progress.ts` 与 `src/structured.ts`；新增展示/Structured 单元和 `test/structured/flow.test.ts`，扩展既有夹具及相关回归。README、技术方案与本台账同步失败证据、查找/Git 入口、展示和 Structured 接入/边界；原有三份文档改动保留。未新增依赖、用户配置面、通用适配框架或第二运行时，制品/审计脚本在工作区外。
- 兼容性与未执行：正式支持范围为原生 Pi 与上述版本的 Structured，工具原 schema 和增强保持，命令执行改为受控本地容器；须 delivery-gate 先加载，开发补丁镜像满足 glibc/架构条件，Code/Notebook 不支持。每命令原资源上限和每回合至多一个未交回命令均明确；旧权限、Session 和命令 ID 不恢复。测试使用 fake provider，Structured 父批准 UI 为模拟，没有新的真实模型调用、费用/质量对照、TUI 按键、语音/缓存传输、目标业务验收或跨平台认证；现有宿主插件可信边界、外部并发文件/IPC 非原子限制及延期断流重试保持明确。
- Git 与发布：分支仍为 `main`，HEAD `6467743`，暂存区为空，保留全部当前任务工作区改动供审阅。未 commit、push、创建 PR、安装到用户环境、npm publish 或部署；未修改真实 Pi/插件安装、用户配置或目标业务项目。

### 13.20 F1—F6 完整本地提交

- 授权与结果：用户明确要求“先完整提交下”，授权完整提交当前实现、测试和文档。本地 `git commit` 已成功，提交说明为 `feat: 完成 Structured 适配与交付证据及进度改进`；本条与顶部状态在成功后补记，并纳入同一本地提交，最终 hash 以 Git 原生记录为准。没有推送、创建 PR、安装或发布。
- 提交范围：26 个文件，包含第 13.19 节全部产品、夹具/测试与 README/两份规划文档改动，5 个新增文件一并提交；原有文档改动保留，无临时制品或真实配置。提交前暂存集合与工作区改动完全一致，没有遗留未跟踪文件。
- 核对与验证：重新执行 typecheck、工作区及暂存差异检查均通过。当前交付资源与最终 Structured 测试副本逐文件比较，仅卡片状态前置这一行不同，其后已通过原生组件 4/4 定向验证。读回默认 489/489、原生容器 26/26、Structured 14/14 的退出码 0 记录及无残留审计；本次未重跑这些完整测试或调用模型，不把历史结果写为新的测试执行。
- 兼容与边界：本次仅完成 Git 交付和台账状态同步，产品行为、已验证版本/模式及第 13.19 节残余限制不变；真实 Pi/插件配置与目标业务项目未修改。

### 13.21 原生与 Structured 双环境真实模型验证

- 授权与范围：用户接受两种环境使用同一任务验证完整交付体验的建议，并明确要求“那你帮我验证下，用真实模型验证”。本轮验证真实模型、真实 Pi TUI 的分阶段确认、开发/验收/审查、实际产物与清理；不修改真实业务项目、用户配置或插件安装，不包含新的 Git/发布动作。主仓基线 `86fb227`，开始时干净；冻结产品资源，仅在本台账记录过程，不将模拟 UI/Provider 当作真实试用。
- 最小准备：新根 `/private/tmp/adaptive-real-dual.tyNxbw`，两个独立临时 Git：`native/repo` 与 `structured/repo`，各自独立 HOME/agent dir、Session 和 writer；最多五个临时准备/PTY/取证/外部验收脚本，不增加产品模块或配置面。共用 Python JSONL 日志统计 CLI 需求、规则、合成输入、首条提示及冻结的 15 项标准库黑盒验收；使用已有 `python:3.12-slim`，无需 Node glibc 镜像、联网安装或依赖。同需求不等于严格耗时/成本对照：工具模式与插件提示存在必要差异。
- 预检已通过：setup 退出 0，两个需求/规则/首条输入/外部验收摘要逐字一致，app 为空，20 份产品资源均复制自本次提交。公开 SettingsManager 选定 `openai/gpt-6-astra`、`xhigh`；标准 Pi 自己解析既有认证/模型配置引用，不复制或输出内容。两种父进程实际以该模型和 TUI 模式启动，原生已启用 read/grep/find/ls，Structured 已接管 exec_command/write_stdin/apply_patch/view_image。Python driver/验收语法检查通过；读取边界各 2 允许/4 拒绝，真实用户目录列举和根外写入实际 EPERM。Provider 出站网络允许，容器禁网，不宣称模型网络域名白名单。
- 固定环境：Python 镜像 `sha256:afad9ec00dc415c9ed1dd4c4e298666211b2d8781db382a3a2df605617906a60`；Structured 只读镜像 `sha256:262aa4f3ae295c90861c34b4319f74feda309a2342e0439d4017be78427b97c0`，均为既有本地镜像。Structured 实际插件 3.0.29 保持 normal 模式，请求/上下文增强在真实请求前只记录字段级证据，不记录认证头或替换模型结果。
- 启动现场：原生 driver/Pi PID `22876/22877`，父 Session `native/parent-sessions/2026-09-08T13-10-06-391Z_01a08123-dd30-73c3-8256-611cc6e1ce37.jsonl`；Structured driver/Pi PID `22878/22879`，父 Session `structured/parent-sessions/2026-09-08T13-10-06-435Z_01a08123-dd62-7796-903e-710ce27d23f5.jsonl`。预检时模型请求为 0；接下来发送相同首条需求，由模型生成方案/实施提案，代理读正文后通过各自临时 TUI 确认。
- 真实请求与方案阶段已验证：两边实际收到 HTTP 200 并自行完成现场读取、方案落盘；Structured 序列化前证据包含四个插件工具、`verbosity=low`、自身 developer message，未混入另一角色标记。逐份阅读完整提案和方案后，通过各自 PTY 的真实选择菜单确认 documents 与 design；原始按键保存在各自 `evidence/keys.jsonl`，不是直接写批准记录。实施尚未批准，源码仍待模型生成。第五个外部脚本 `verify.mjs` 已创建，语法检查通过；后续独立验收将只读挂载交付源码副本与冻结的 `acceptance.py`，当前未执行黑盒，不计为通过。
- 实施批准已验证：读回两份完整实施计划与工具实际固化的提案，均只写 `app/`、只读输入 `fixtures/`，镜像解析为预定 Python ID，固定命令逐字一致。真实 TUI 分别确认成功，两边原生 Session 均已有 3 条 `source.mode=tui / interaction=select` 批准；原生实施批准 `7ba70465-5696-493e-b6d2-a20c3d97ea35`，Structured 为 `c0f68476-101e-416f-857a-3e5b27bb61e9`。后续不补“继续”输入，观察模型是否自动完成已批准流程；开发、验收和审查进行中，尚无通过结论。
- 开发自检已取得真实通过输出：原生子 `23502`（`13-21-17-561Z_01a0812e-1aeb-76aa-bd05-6dabeff8142f.jsonl`）通过 `read/write/bash` 生成 CLI 与测试，固定命令自检 24/24、8.346 秒；Structured 子 `23535`（`13-21-23-627Z_01a0812e-32aa-72b4-bb19-1314b9e48391.jsonl`）通过 `grep/exec_command/apply_patch` 实施，命令实际返回 `session_id=119479506231480`，两次 `write_stdin` 取回运行中与最终退出 0、自检 22/22、8.566 秒。未由外层代写源码或测试。真实父 TUI 经 Ctrl+O 展开/折叠，展示对应子工具、路径、命令输出及原始 Session；终态、独立验收、审查与完整清理仍待核实，自检不替代其结果。
- 独立固定验收已通过：两边开发子均有唯一持久关闭记录，`development.clean=true`，Structured 另有 `incomplete=false / clean=true`。后续新验收子分别为原生 `24115`（`13-27-46-703Z_01a08134-0b0e-72ae-89e3-db601f111839.jsonl`）与 Structured `24149`（`13-27-57-041Z_01a08134-3370-77da-a233-204e296417cd.jsonl`）；读回真实原生命令结果分别为 24/24、8.596 秒和 22/22、8.768 秒，退出 0、容器 clean/passed。两边前后候选分别保持 `463e153f77e786091e18ff86aa8194695fd329bae5a4ec3e1ec89e79b22611ea` 与 `2e9969edbadf735cfd109702b8252917d1573ff8da81b75f36c213635ec177f1`，验收子均正常关闭。父模型自行衔接，无新增提示；独立审查和外部黑盒尚待完成。
- 首轮审查发现与真实失败：两位独立审查模型都指出 Python 默认整数转换可能拒绝额外字段中合法的 4301 位整数，原需求未限定长度；原生父已采纳并在原范围委派真实复现、修复和回归，旧候选验收不代表返工后通过。Structured 审查子 `24248`（`13-29-06-628Z_01a08135-433e-7391-8f0a-1775aa71ace6.jsonl`）也形成同一 P2 正文，但存在真实工具错误：`max_output_tokens=13000` 超过 12500 被拒绝，镜像无 `rg`（退出 127）、BusyBox `find` 不支持 `-printf`，容器不能 `cat` 审查 `after/app/cli.py`（退出 1）。该子虽改用原生 `grep/ls` 完成取证且正常关闭，正式审查工具仍按既定规则返回失败，并附原始 Session、关闭与 writer 交接事实，没有伪称审查通过。父自行读原记录、核实空 lease，并委派只读子提取被 grep 单行截断的最终正文；尚待其裁决、返工与重新审查。无外层提示或产品改动。
- 已定位的 Structured 取证边界：`development.ts` 审查只传入 `artifact.diffFile` 与验收 Session；`index.ts` 据这些显式路径构造只读命令挂载，未包含 before/after 快照目录，因此宿主原生 `grep` 可读的快照在容器 `cat` 中不可见。此轮保持产品冻结，将其列为后续需处理的路径可见性缺口；输出上限和镜像程序差异另作为工具使用/说明摩擦记录，不把首次失败抹除，也不据此声称真实完整流程已通过。
- 返工进展：原生新开发子 `24721` 先通过真实 `edit` 增加数字边界回归，定向 4 项测试实际退出 1、28 个 subTest 失败（包括 4301 位整数拒绝和字段诊断），随后使用 JSON 解码器的数字回调保留非字符串标记，原 `parse_constant` 拒绝行为保持；完整自检扩展为 28/28、19.320 秒、退出 0。这是模型任务实现的真实红/绿证据，不是本 Package 回归失败；新候选仍待重新固定验收和审查。
- Structured 恢复过程补正：此前阶段快照把只读取证完成误写为已取得原审查正文，并误判 `24849` 的角色；完整读回结果确认，只读子实际上报告“无法完整提取第 52 行审查正文”，仅核实四项工具错误。父保留该缺口，裁决由 `24849` 使用可用原生 `grep/find/ls` 重新独立审查；这次正常返回同一 P2，父读取新审查完整工具正文、相关源码和 395 行完整差异后采纳，随后才正式调用 `delivery_develop` 返工。原失败正文没有被成功读回，不能将新审查冒充原证据；无追加阶段批准或外层输入。
- 返工后验证：原生第二个固定验收子 `24975`（`13-40-04-378Z_01a0813f-4c99-7526-a323-2b06dcff71c0.jsonl`）实际 28/28、19.201 秒、退出 0、clean/passed；持久关闭的前后候选均为 `9d29f129c17f8a3d719b6fff281470ed40aae010cc9cd5a7e23702a33a5ce567`，随后复审子 `25119` 启动。Structured 实际返工子是 `25047`（`13-41-25-550Z_01a08140-89ad-71ff-a9df-208324fdd75f.jsonl`），先在会话 `171913113980550` 真实复现 4301 位整数导致 CLI 退出 1，再最小修复并增加 3 项测试；会话 `163912807344600` 自检 25/25、9.434 秒、退出 0。首次失败和成功分别保留，Structured 重新固定验收/复审尚待完成。
- 原生复审已完成：子 `25119`（`13-42-22-555Z_01a08141-6857-7757-be8d-a4d0a1cef671.jsonl`）完整核对两轮差异、代码与原验收后返回“未发现仍需返工的阻塞问题”；确认原 24 项测试和公共断言未削弱，新增 4 项数字回归，最后 stop 且唯一关闭记录存在。父正在文档收尾，整体仍待外部黑盒与资源审计；没有因开发中合法的失败复现而抹掉失败记录。
- Structured 返工后固定验收已通过：新子 `25292`（`13-44-47-940Z_01a08143-a042-7356-8cb0-8ffab00d057a.jsonl`）实际执行原固定命令，25/25、9.621 秒、退出 0、容器 clean/passed；持久关闭包含 `incomplete=false / clean=true`，前后候选均为 `71ac506da6473390b533247f93449620b4d8b78814b332421fe95d16591fe0c7`。新一轮独立复审已启动，尚未标记最终交付完成。
- 原生完整收口已验证：父在 146 条原生记录后自行交付并 settled/stop，五份源码/测试/文档齐全。外部 `verify.mjs native blackbox` 退出 0：`native/blackbox-NhSWlR/result.json` 记录冻结黑盒 15/15、1.921 秒、退出 0、clean/passed，原源码及只读副本均未变化。真实 TUI `/quit` 正常退出 0，无强杀。`verify.mjs native audit` 退出 0：7 个真实 Pi Session 与 driver 共 8 个 PID 全部 ESRCH，6 个实际执行标签逐一核对无容器残留，lease 为空，20 份产品副本/主仓资源、输入摘要与 fixtures 均未变化，工具调用/结果配对完整，三次批准为 TUI select，79 次真实请求/响应。审计保留 4 个错误结果：真实红测试及因此失败的 `delivery_develop`，另有父试图列举临时根/agent 目录时被试用 guard 拒绝两次；父已读取原始结果并通过正式新候选验收恢复，没有绕过门禁。`native/audit-result.json` 保存详细证据；不能把这些过程错误记作零。
- Structured 最终复审已完成：子 `25439`（`13-46-05-830Z_01a08144-d085-7677-a6dd-2c81a38ea2c5.jsonl`）核对当前源码、测试和 438 行完整差异，返回无新的返工问题，确认新增 3 项/18 个真实子进程场景和 25 项固定验收输出；stop、唯一关闭记录均存在。该审查明确声明 JSONL 后段元数据受 grep 截断，未冒充自行完整核实候选摘要；实际候选前后/关闭证明已由正式工具核验，并在外层上述原生记录中读回。父正在文档收尾，外部黑盒与最终审计仍待执行。
- Structured 完整收口已验证：父在 133 条记录后自行交付并 settled/stop，五份交付文件齐全。外部 `verify.mjs structured blackbox` 退出 0：`structured/blackbox-8nOC7B/result.json` 记录冻结黑盒 15/15、1.915 秒、退出 0、clean/passed，原源码及副本均未变化。真实 TUI `/quit` 正常退出 0，无强杀；`verify.mjs structured audit` 退出 0，9 个真实 Pi Session 与 driver 共 10 个 PID 全部 ESRCH，20 个实际执行标签逐一核对无容器残留，lease 为空，20 份产品副本/主仓资源和冻结输入、fixtures 不变，调用/结果完整配对，三次批准为 TUI select。93 次真实请求/响应均 HTTP 200，全部请求的四个 Structured 工具、`verbosity=low`、自身 developer message 及无父/子标记串入断言通过。审计保留 5 项错误/非零结果（首轮审查失败、参数超限、缺 rg、快照 cat 失败、修复前真实 CLI 失败）；BusyBox find 的 stderr 错误另按原记录保存，不因组合命令最终退出 0 而删除。

本轮真实验证最终结果如下；中间失败与修复记录保留，最终完成不表示每次调用均成功。

| 环境 | 实际工具与完整流程 | 最终固定验收 | 同一冻结外部黑盒 | 正常退出与清理 |
|---|---|---|---|---|
| 原生 Pi | read/bash/edit/write/grep/find/ls 均被真实模型调用；3 次 TUI 批准、开发、自检、审查发现、失败复现/返工、复验、复审及父文档交付完成 | 28/28，退出 0 | 15/15，退出 0 | 8 PID 全部退出；6 个容器无残留；lease 空 |
| Structured 3.0.29 / normal | exec_command/write_stdin/apply_patch 与 grep/find/ls 实际调用；真实插件请求/上下文增强保持；3 次 TUI 批准、失败取证/重新审查、返工、复验/复审及父文档交付完成 | 25/25，退出 0 | 15/15，退出 0 | 10 PID 全部退出；20 个容器无残留；lease 空 |

- 输入与模型证据：按键记录确认每边仅输入相同首条 `/delivery-shape` 需求和最终 `/quit`，其间只有已核对正文的批准选择及 Ctrl+O 展示操作，没有外层代写源码、修正模型结论或补“继续”。两边共 16 个真实 Pi Session、172 次请求/响应，均选用 `openai/gpt-6-astra / xhigh`；原始 Session 计价合计约 `$14.64`（原生 `$6.882780`、Structured `$7.757006`），仅为 Pi usage 中的估算，不是账单核验或性能/费用优劣对照。
- 待处理缺口：Structured 应补齐明确审查制品的容器读取路径，并改善长 JSONL 原文取证指引；当前 Skill 的原生只读表述与实际 Structured 能力不同，本轮模型实际依赖会截断长行的 grep，旧文案是否直接导致这一选择尚未单独验证。本轮未修改产品来掩盖缺口；后续应针对快照读取及失败正文完整读取补最小修复与定向真实验证，同时在工具说明中明确输出上限和镜像现有程序，不新增通用执行或配置系统。
- 兼容性与未执行：以上证据仅覆盖本机 Pi 0.85.1、插件 3.0.29 Structured/normal、选定真实模型、既有 Linux arm64 镜像及该 Python CLI 任务。未新验收图片、语音、缓存/压缩传输、Code/Notebook、跨平台或目标业务项目，不据单一任务保证所有模型质量；本轮没有另跑历史 489/489、26/26、14/14 回归。原生和 Structured 的样例 CLI 均修复了审查发现，交付产物通过冻结黑盒，但 Package 的上述取证缺口仍待处理。
- Git 与制品：两个临时项目最终均无 HEAD、索引为空（`rev-parse --verify HEAD` 的 128 是该预期事实），只有初始规则/需求/fixtures 和五份交付文件；模型未 commit。主仓仍为 `main / 86fb227`，本轮仅更新本台账，状态、差异范围和 `git diff --check` 已核对通过，暂存区为空；临时五个脚本及全部运行证据保存在 `/private/tmp/adaptive-real-dual.tyNxbw`。未修改真实配置/插件安装或业务项目，未提交、推送、创建 PR、发布或部署。

### 13.22 真实试用所见 Structured 取证问题修复

- 授权与基线：用户要求“接下来是不是可以修复下验证中出现的问题呢”，按已定位的问题实施修复；沿用本会话真实模型验证授权做定向复验。基线 `main / 86fb227`，已有未提交改动仅第 13.21 节台账，完整保留。没有提交、发布或真实配置变更授权。
- 最小方案：在现有审查委派记录中携带本次 `prepareReview` 生成的制品目录，使父与审查子只读挂载同一目录，成功和失败后均可读取 diff 与 before/after；不挂制品的父目录。更正 Skill 的双环境说明，在实际工具说明中明确输出/等待上限、只读镜像的 Node/BusyBox 环境，以及按原 Session 的 text/工具结果定向读取长 JSONL 的方法；保留原生工具、原 schema、失败状态和全部批准/writer 规则。不新增产品模块、工具、运行时或配置面。
- 验证安排：先用现有真实 Pi/容器夹具复现快照读取失败，再修复并覆盖审查子、父、失败后的原文读取及只读/外部路径边界；对应单元、Structured 与原生定向回归后做隔离真实模型复验。无需重做上一轮完整 CLI 业务任务；真实试用只验证本次改动与实际取证行为，模型及 TUI 不用模拟替代。
- 复现已验证：新增成功/失败审查两项真实 Pi、真实插件及容器回归，使用 fake provider；修复前 0/2、退出 1，均在容器读取宿主已有 `before/src/value.js` 时得到 `ENOENT`，复现原症状。根 `adaptive-tests-uG6Iym`，日志和退出记录 `/private/tmp/adaptive-evidence-fix.bUmlRq/reproduce.{log,json}`；两场景自身容器/子 PID 清理断言通过。此前一次执行工具丢失返回结果，不计入通过/失败数量，其根 `adaptive-tests-0XWGnb` 留待最终审计。新增测试后的 typecheck 退出 0。
- 挂载与原文回归已验证：`evidence-readback.{log,json}` 记录 2/2、退出 0，根 `adaptive-tests-OTqgLd`。真实审查子读到 before/after、diff 及原始验收输出；父在成功及故意参数超限失败后均读回同一快照与超过 500 字符、含 Unicode 分隔符的原始正文。快照写入被拒绝、邻接资源不可见、候选不变、lease 为空，场景资源清理断言通过。失败保持 `isError=true`，没有改变超限或交接规则。
- 单元边界已验证：`unit-paths.{log,json}` 记录 8/8、退出 0，根 `adaptive-tests-fySNmZ`；含明确制品目录只读挂载且不带祖先/邻接资源、新目录内 FIFO 创建前拒绝。使用 fake Docker；真实挂载证据见上一条。
- 中间测试修正：`fixed-paths` 首次修复后 1/2、退出 1，快照读取已成功，失败场景没有假定的最终回复；`evidence-fixed` 0/2、退出 1，正文读取断言未取得目标文本。夹具改为在报错前实际输出长正文，修正带 `development-` 前缀的场景匹配，并在父命令中显式按消息角色筛出 text、缺失时报错；最终上述 2/2 通过。这些失败完整保留，不计作通过，未据此放松产品错误判断。
- 完整回归：`default-full.{log,json}` 退出 0，335 单元 + 142 集成 + 14 E2E，共 491/491；根 `adaptive-tests-qWaIEQ`、`adaptive-tests-W7Vb0a`、`adaptive-tests-ddYnzE`。原生真实容器 `native-container.{log,json}` 26/26、退出 0，根 `adaptive-tests-gYaZEA`。均无失败/取消/跳过/todo，使用 fake provider；这些执行先于下述一行子资源调整，后续按其影响定向复验。
- 完整 Structured 暴露的追加问题：`structured-full` 14/16、退出 1，根 `adaptive-tests-VcDN4e`。两项新增场景的容器原 Session 缺少后段，宿主记录完整；不能把之前 2/2 当作稳定修复。`evidence-stream` 1/2、退出 1，根 `adaptive-tests-UlrVjY`；同一次读取中同步/流式均仅 11928 字节，宿主 19251 字节，排除只按消息筛选或读取 API 就能解决。此前中间正文缺失的归因据此补正，文件共享旧内容同样相关。
- 最小追加调整：只读子不预挂自身正在追加的 Session，仅接收父明确给定的证据；父在子正常收尾后按现有委派引用读取原文件。不新增副本、双重探测、等待重试或配置。`evidence-closed-session` 2/2、退出 0，根 `adaptive-tests-tcO7y3`；最终回归将明确断言容器首次读回字节数与已关闭原记录一致。
- 真实试用准备与断点：新临时项目 `/private/tmp/adaptive-evidence-fix.bUmlRq/real`，冻结 20 份资源、一行 Python 大写修复、3 项验收及 827 个 UTF-16 单元的 Unicode 哨兵，模型 `openai/gpt-6-astra / xhigh`，镜像沿用原固定 ID。真实父已读取需求并提出文档授权；为冻结追加调整后的版本，在未批准/未开发时通过 TUI Escape 取消并 `/quit` 正常收尾，未修改该副本。该轮不计修复验证通过；下一次新项目重做定向试用。
- 最终机制回归已验证：`structured-final.{log,json}` 16/16、退出 0，根 `adaptive-tests-pwUSiG`；新增两场景首次容器读取完整原记录的字节数断言通过，原工具/schema/增强、全部完整流程和故障边界通过。追加调整后的原生 `child-environment.test.ts` 与 `development.test.ts` 为 81/81、退出 0，根 `adaptive-tests-0jzmHl`，覆盖实际只读工具、父子环境、开发/验收/审查/失败与 writer；无失败/取消/跳过/todo。最终 typecheck 与差异检查通过；没有重新执行不受该一行资源调整影响的全部默认测试或原生容器组。
- 状态：修复和自动化回归完成，定向真实模型复验及最终资源审计进行中。新根 `/private/tmp/adaptive-evidence-fix.bUmlRq/real-final` 已冻结最终 20 份资源及同一验收输入，隔离预检通过；真实父 TUI 开始启动，尚无修复后的模型通过结论。
- 自动化资源审计已验证：`audit-regression` 退出 0，仅扫描本轮日志指向的 15 个临时测试根（含首次返回丢失的根）、1141 份 JSONL；记录/日志中的 1334 个宿主 PID 均 ESRCH。301 个执行标签包含 fake Docker 引用，逐标签查询实际残留为 0，不宣称创建了 301 个真实容器；两行故障注入的畸形 JSON 保留且单独计数，没有修改未知 lease。`regression-audit.json` 保存明细。首次真实试用的独立审计也退出 0：2 PID 已退出、2 容器无残留、无批准/lease，4 次请求均 HTTP 200，估算费用 $0.189964；只有现场读取和被取消的文档提案，不计开发验证通过。
- 最终试用真实批准已验证：driver/Pi PID `51588/51590`，父 Session `real-final/parent-sessions/2026-09-08T14-35-39-864Z_01a08172-31d7-7084-99dd-9d4167dd65b8.jsonl`。读完各次固化提案、方案及计划全文后，通过真实 PTY 选择确认，3 条原生批准均为 `tui/select`；实施批准 `551ca994-3a5e-4560-85b1-42f4f6b495b2`，仅 app 可写、fixtures 只读、原 Python 镜像 ID、固定命令 `python -B fixtures/check.py`。此次自检提案为源码读回，实际测试由固定验收执行，不将读回说成自检命令通过；父子快照与长哨兵原文核对为必须完成的取证项，尚待实际结果。
- 最终试用真实执行与失败取证：开发子 `52147` 通过真实 apply_patch 完成唯一一行修改并命令读回退出 0；此前误用开发容器读取未挂载 Skill/REQUEST（退出 1）及试图 find 试用根（guard 拒绝），正式 `delivery_develop` 保留失败。父未获新提示，自行用 Node 从原开发 Session 按角色/记录位置完整读回错误、补丁和读回正文，核实源码后继续固定验收，没有重新开发或改写失败状态。验收子原 Session `14-42-11-565Z_01a08178-2bec-754c-b230-5e55b8462f8b.jsonl` 的唯一固定命令实际 3/3、退出 0，完整长哨兵已打印；父又实际读取原工具调用及完整结果。开发误用是现有明确挂载/试用 guard 的拒绝，不扩大开发资源或将过程记作零错误。独立审查与最终父快照取证仍待完成。
- 真实审查取证已验证：子 `52387`，原 Session `14-43-37-334Z_01a08179-7af5-7336-aef3-6e408c4b144b.jsonl`；实际通过只读 Node 读取 `runtime/adaptive-review-xU2U0P` 下 before/after/diff，核实 lower → upper 和当前源码一致。原验收 Session 第 7/9 行的真实命令/输出完整读回，3 项测试、退出码及包含末尾 LF 的 1428 字节哨兵均核实；字符串/Buffer 比较均 true，SHA256 均为 `72b68dc86ea6eaae590bfbf2e67a4f8247519ee89d978c742f254a1efb98043e`。三次审查命令都退出 0，正式 `delivery_review` 成功结束。未重跑测试或重新审查；父独立读回与最终资源审计仍待完成。
- 最终父取证与交付已验证：父先实际读取同一 before/after/diff，并从原审查 Session 第 15 行工具正文完整读回原验收输出（本次输出 8672 字符，未截断）；随后独立提取哨兵，字符串/字节严格比较及原审查内输出与原验收第 9 行全文比较均通过，命令退出 0。核对当前源码、输入和 Git 后，父回写唯一台账，自行 settled/stop 交付，共 62 条原生记录。按键读回仅有初始需求、三次已读正文后的 TUI select 和最终 `/quit`；没有恢复提示、外层代写源码或伪造模型输出。
- 最终真实资源审计已验证：`audit-final-trial.{log,json}` 退出 0，`real-final/audit-result.json` 保存明细。父/开发/验收/审查四个实际 Pi PID 加 driver 共 5 PID 均 ESRCH，14 个实际容器无残留，lease 为空；唯一子关闭记录、完整调用/结果配对、3 次真实批准、30 次请求/HTTP 200 及 Structured 请求/上下文增强均核实。20 份冻结产品副本与主仓对应资源一致，固定输入及引用认证方式不变；未读取认证内容。模型费用估算本次 $1.945846，加已取消准备轮合计约 $2.14，并非账单。3 项错误/非零结果是上述开发读未挂载文件、find 被拒及正式开发失败，原记录全部保留；审查与父快照/长记录取证无错误。
- 最终范围、兼容与限制：9 个已有路径变更，产品只改入口和开发委派模块；其余为既有测试/夹具、Skill、README、技术方案与本台账。没有新增产品文件、依赖、工具、配置面、日志副本、重试或兼容层。原生工具、Structured 原 schema、既定输出/等待上限、批准与 writer/失败规则保持；只读子不预挂自身活动 Session，父按原委派引用读取。真实证据限定本机 Pi 0.85.1、插件 3.0.29 Structured/normal、所选模型与既有 arm64 镜像；未重新做原生真实模型全流程、任意文件共享实时一致性、其他模式/平台或真实业务项目验收。
- 收口：本轮授权修复、验证和审计均完成；所有中间失败及首轮取消试用保留，早期“待完成”条目是当时断点。主仓仍为 `main / 86fb227`，暂存区为空，保留此前台账和本次全部改动；未 commit、push、创建 PR、安装到用户环境、发布或部署。临时脚本与全部证据位于 `/private/tmp/adaptive-evidence-fix.bUmlRq`，没有改写上一轮双环境试用制品。

### 13.23 Structured 取证修复完整本地提交

- 授权与结果：用户明确要求“先完整提交下”，授权提交当前全部改动。本地 `git commit` 已成功，提交说明为 `fix: 修复 Structured 审查快照与原始记录取证`；本节和当前状态在成功后补记，并纳入同一本地提交，最终 hash 以 Git 原生记录为准。没有推送或发布。
- 提交范围：9 个已有文件，包含两个产品模块、三份测试/夹具、Skill、README、技术方案与唯一实施台账；第 13.21 节双环境真实验证记录及第 13.22 节全部修复/失败/验证证据一并保留。提交前暂存集合覆盖全部工作区改动，没有未跟踪或未暂存文件；临时脚本、模型 Session 和真实配置均未入库。
- 核对与验证：本次重新执行 typecheck、工作区及暂存差异检查均通过。当前 20 份产品资源与最终真实模型试用副本摘要完全一致；读回默认 491 项、原生容器 26 项、最终原生相关 81 项、Structured 16 项及资源审计的退出码 0 记录。本次没有重跑完整测试或调用模型，不把此前结果记作新的测试执行。
- 兼容与边界：本轮仅完成完整 Git 提交和台账同步，产品行为及第 13.22 节已验证范围、失败语义和残余限制保持。未修改用户 Pi/插件安装、真实配置或业务项目，未 push、创建 PR、安装、npm publish 或部署。

### 13.24 状态说明精简待办

- 状态：已完成，证据见第 13.28 节。本节保留用户最初要求“先记个待办项”时的需求与只读范围。
- 截图所见：`/delivery-status` 将通用能力介绍、当前工具、配置提示、各类任务空状态和权限诊断连续展示；`writer`、`lease` 等术语较多。原生 `read/grep/find/ls` 已显示启用，仍提示配置 `defaultTools`，增加阅读负担。
- [x] 精简状态说明：优先呈现当前工具模式、任务状态和需要用户处理的事项；合并重复空状态，工具缺失时再提示配置，技术诊断通过 `/delivery-status details` 查看。
- 验收方向：用户能快速看懂当前能做什么、是否有任务运行、是否需要自己操作；真实阻塞和待确认事项仍清楚可见，不能把“无任务”或“无 lease”表述成已获授权。
- 范围：只调整展示，不改变原生/Structured 能力、批准、writer、失败和恢复规则。本次未修改运行时代码或用户配置，未运行功能测试或真实模型，未提交或发布。

### 13.25 子任务详情入口待办

- 状态：已完成限定自动化验证，证据见第 13.28 节。本节保留“点进去看详情”的原需求；未操作用户真实桌面。
- 当前能力：`src/progress.ts` 已支持按 Pi 默认 `Ctrl+O` 展开近期过程、输出、耗时和原始子 Session 引用；仅保留 16 条近期动作及约 4000 字符的输出尾部，没有单个任务的独立详情入口。
- [x] 单个子任务详情已支持全屏卡片点击与 `/delivery-tasks` 选择，查看完整任务说明、真实状态、工具调用与结果、最终结论或错误；可滚动、运行中更新、结束后仍可查看。默认卡片保持两行，Esc 只关闭详情。
- 按键约定：用户补充详情用 `Esc` 关闭。详情打开且获得焦点时，该次 `Esc` 只关闭详情并返回主对话，不能同时触发 Pi 的任务中止；父会话和子任务继续运行。关闭后的按键恢复 Pi 原有行为，此项须在实施时验证。
- 可行方向与待验证：本机 Pi 公开 TUI 文档提供 `handleMouse`/`MouseRegion` 和 `ctx.ui.custom()` 弹层，全屏模式可接收点击，普通模式不捕获鼠标。优先核实卡片点击打开详情的实际接入，并提供键盘入口；打开详情的按键与界面待实施时确定，不把文档能力当作当前卡片已支持或所有终端已验收。
- 验收与范围：详情只读复用本次任务的既有进度和原始 Session，多个任务分别定位；打开或关闭详情不取消、重启任务，不改变批准或写权限，不另建日志或运行时。只核对源码和官方文档，未进行真实交互验证，未修改产品或用户配置，未提交或发布。

### 13.26 授权确认说明精简待办

- 状态：已完成限定自动化验证，证据见第 13.28 节。原需求为精简文档、方案及实施三类批准页面，调换确认与暂不批准的位置。
- 截图所见：五份文档的用途挤在一个长段落中，后面重复列出全部绝对路径；正文与选项标题重复显示 UUID，同时出现空验收命令和与本次文档编辑无关的实施流程术语，难以快速识别确认后会发生什么。
- [x] 文档批准按相对路径列明实际范围，正文指引逐行说明用途；确认区固定底部，重复标识及通用诊断移入详情，使用“授权文档编辑”。
- [x] 方案确认不显示空路径或空命令；完整正文按 Tab 查看，明确不授予实施权限；使用“确认方案”。
- [x] 实施确认保留计划文件与工具实际可写范围的区分，详情包含完整正文、固定镜像/输入/命令及原方案。三类确认均放在上方，默认仍选择下方“暂不批准”；正文与批准记录完整性核验保持。
- 选项顺序与布局：用户已明确文档授权和方案确认两页均将确认项放在上面，“暂不批准”放在下面。初始焦点仍保留“暂不批准”，调整排列不使单次回车直接授予权限。说明区独立滚动、选项固定在底部作为布局建议保留；具体布局和焦点控制在实施时核实 Pi 公开 API 并验证。
- 验收方向：用户在确认前能看清实际授权文件和操作范围，不需解析 JSON 路径数组或内部术语；完整批准内容仍可核对，不能用“共五份文档”替代具体文件清单，也不能将文档写入与方案、实施确认混为一项。
- 本次判断与边界：截图限定五份 Markdown 的切片方案、唯一台账、文档路由、父项与实现位置同步，明确不授权源码、命令、容器或 Git/发布，符合当前第十九切片的文档准备方向；已建议用户可选择确认。本助手未代操作目标 TUI 或生成批准记录。本次仅更新本台账，未修改产品或目标项目，未运行功能测试或真实模型，未提交或发布。

### 13.27 第十九切片 V3 执行失败原因分析待办

- 状态：分析与限定修复已完成，原命令的隔离副本验证通过，证据见第 13.28 节。下文保留授权实现前的只读初查，不覆盖后来结果。
- 截图现象：任务说明称首次 V3 因“工具时限不足”留下证据缺口；后续子任务文本报告“V3 重试未取得通过终态，容器被工具报告为 OOMKilled”，并称已按停止条件停止、未写源码。同时卡片标题仍为“工具失败，子任务仍在运行”。上述均为截图中的展示内容，尚未对照原始工具结果确认超时、内存终止或实际进程状态。
- 后续截图补充：同一任务卡片已变为红色“失败”，父会话随后对原始子 Session 发起 `grep` 查询。因此前一截图不能证明卡片持续停留在运行状态；可能是子会话收尾期间的过渡展示，仍须核对事件时间与真实终态。当前截图未展示该查询结果，不能据此认定父会话已完整读回失败证据或恢复成功。
- [x] 原始命令与超时、资源预算及退出/清理均已核对；512 MiB 复现 OOM，1 GiB 对照及正式执行器通过原 V3，证明本例内存与时限不足；未混入业务算法修复。
- [x] 重试是父模型主动重新委派，第二命令存在文本偏移，父已识别并停止；卡片变化与工具失败到子收尾的真实时间顺序一致，没有持续卡住的证据。
- 证据入口：用户截图 `/var/folders/b0/vsckn5zn3w3dms0_3scbhv400000gp/T/pi-clipboard-6d2a3d7a-008b-4ae9-a290-f445ea1353a3.png`；目标为亚马逊项目 P6.1 第十九切片。具体 Session/容器标识和实际源码状态待分析时从该项目唯一台账与原始记录核实，不使用截图中的截断引用猜测。
- 补充证据入口：后续截图 `/var/folders/b0/vsckn5zn3w3dms0_3scbhv400000gp/T/pi-clipboard-8cf60b02-084f-4e25-bb4d-4f825b743e7b.png` 可见查询引用 `~/.pi/agent/sessions/--Users-sxie-Documents-亚马逊-amazon-image-generation-workbench--/2026-09-09T00-29-52-500Z_01a08392-35f3-722d-ab0f-c3d978911d77.jsonl`。该引用仅从截图记录，尚未读盘核对内容与归属。
- [x] 原始执行与收尾初查：首子 `2026-09-09T00-25-09-840Z_01a0838d-e5c7-7573-9344-0a4331fba88b.jsonl` 的第 19/21 行证实主动传入 `timeout=60`，约 60.9 秒返回 `timeout:60`；第 15/18 行 V0/V1 均有真实退出 0。第二子上述记录第 6/8 行证实 `timeout=300`，约 87.8 秒返回 `OOMKilled`。两份 JSONL 结尾完整、各有唯一 clean 关闭记录；已记录 PID `61935/62129` 均 ESRCH，两次失败的明确容器标签查询无残留。未重新运行测试。
- 父处理与展示初查：父记录 `2026-09-08T23-14-27-108Z_01a0834d-289e-709d-b447-c35ee661f3a3.jsonl` 第 148 行明确要求同命令重试、只将工具 timeout 改为 300；这是父模型裁决后另行委派，不是执行器内部自动重试。第二子却重复加入 `PROVIDER_MOCK_ENABLED=false`，其后同名 true 仍生效，但原命令文本已偏离，父最终识别并记为不合格证据。第二次工具错误为 `00:31:33.493Z`，子关闭为 `00:32:03.331Z`，父失败结果为 `00:32:03.352Z`；`progress.ts` 在工具错误后保留子运行状态，收尾后切换失败，两张截图与该顺序一致，没有卡片持续卡住的证据。
- 已确认的执行与取证缺口：`src/container.ts` 固定每命令最多 300 秒、512 MiB 内存且不提供 swap、2 CPU、128 PID 与 64 MiB `/tmp`。Docker 当前报告约 7.82 GiB 总内存，这不是失败时的可用内存，不能单凭它排除引擎压力。容器 inspect 已取得退出码后才清理并抛出 OOM/超时错误；`src/development.ts` 仅在原生 Bash 正常返回时附加 `lastExecution`，本次两条失败 toolResult 的 details 都为空，错误正文也没有数值退出码与部分输出。清理成功不弥补命令失败取证缺口；不回填或猜测此前容器的退出码与峰值。
- 下一步最小方向：先在隔离环境用原批准 V3 命令测量内存、耗时及失败终态，确认瓶颈后只调整必要的执行预算/时限指引，并在既有失败结果中保留实际容器终态与有界输出。默认不新增通用资源配置面、自动重试、错误白名单或命令改写规则。修复须补对应单元与真实 Pi/临时 Git/容器证据，再以目标原 V3 基线验证恢复；界面精简和任务详情随后处理。此为待实施建议，不代表当前已完成复现或取得新修复授权。
- 范围与验证：本轮只读查询使用空 Docker 配置和明确本地 socket，仅核对两次失败容器标签、引擎概况和两个已知子 PID；未启动、停止或修改目标进程/容器，未读取凭据、修改业务文件、重跑测试或调用模型。主仓仅更新本台账，保留此前待办；未提交或发布。

### 13.28 执行阻塞修复与交互优化

- 状态：已完成本轮授权范围与限定验收；所有单项、最终回归和资源审计通过。新的真实模型与用户桌面体验不计入本轮完成范围。
- 授权：用户明确要求“可以，开始优化”，并补充无需兼容旧代码、可重新开发修复。本轮按第 13.24—13.27 节推进，先执行阻塞与失败取证，再状态、批准和子任务详情；直接修改现有实现，不增加旧逻辑回退或迁移层。基线 `main / d3c76cf`，完整保留已有待办文档。
- 规模：复用当前执行器、批准/原生记录、进度与公开 Pi 组件；新增文件仅限必要展示模块和对应回归。为点击能力将开发依赖对齐本机 Pi 0.85.1，不兼容旧 Pi；不构建通用资源配置、监控或第二套运行时。测试默认禁网、临时目录和 fake provider；亚马逊工作区只读，V3 使用批准范围文件的冻结副本。

| 事项 | 状态 | 证据与下一步 |
|---|---|---|
| V3 资源复现、执行修复及失败取证 | 已完成 | 512 MiB 复现 OOM；1 GiB 对照及正式执行器 V3 各 483/483、退出 0，冻结输入未变；原生容器 28/28、Structured 16/16 通过 |
| 状态说明精简 | 已完成 | 工具已齐时不再提示配置、运行/未交回记录及按需诊断，经真实 CLI/临时 Git 回归通过 |
| 三类批准界面精简与选项顺序 | 已完成（自动化限定） | 90 项批准核验及 32 项父 writer 定向全通过，17 项正式 SDK/模拟 UI 通过；摘要不隐藏目录权限，完整内容可查看，默认回车不批准 |
| 单任务详情、点击/键盘入口与 Esc 返回 | 已完成（自动化限定） | 8 项真实组件与 Session 单测通过；真实 Pi 子/容器运行中打开、Esc 返回后继续完成及结束读回通过；未操作用户桌面 |

- 验证与交付：先定向单元和真实 Pi/临时 Git/容器，再按影响执行回归；每项独立通过后立即记账。模拟 UI 与真实 Pi 组件的测试如实区分于桌面人工验收，不操作正在运行的用户 TUI。未授权新的真实模型调用、业务代码修改、提交、推送或发布。

- 资源对照已验证：临时冻结输入摘要 `a85e9ac053276c92311cff19e5ffed6edab413a287dc00e410c3755bfd7ab68c`，20 项输入及原首次 V3 命令不变。512 MiB 在约 108 秒被 OOMKilled、退出 137；仅将内存提高到 1 GiB 后 **483 passed / 395 warnings、117.63 秒、退出 0、OOMKilled=false**。两轮源文件和副本摘要均未变，探针删除自己的容器；原始结果为上述临时根的 `adaptive-v3-probe-{512m,1g}-*.{json,log,stats.jsonl}`。这证明本例 512 MiB 与 60 秒不足，不回填旧失败退出码、不宣称业务切片已实施。产品固定预算改为 1 GiB，并补原生默认 300 秒指引及失败正文取证，产品回归待执行。
- 开发依赖对齐：首次离线 npm 因 user/global 同指 `/dev/null` 拒绝，换用独立空 global 路径后因缓存缺少 `pi-telemetry@^0.85.1` 退出 1。仅公共依赖安装改为隔离空配置访问 npm registry，禁止安装脚本；默认测试仍禁网，不读取用户 npm 配置或调用模型。依赖安装与最终验证尚待结果。
- 依赖与第一轮验证：`dependencies-3` 优先缓存仍取到旧 metadata，退出 1；显式刷新公共 metadata 的 `dependencies-4` 安装完成、退出 0，四个 Pi 开发依赖统一 0.85.1。`typecheck-1/2` 均通过；`container-unit-1` 34/34 通过，覆盖原生 Bash OOM 错误正文、超时/清理及原进度渲染。`ui-unit-1` 96/97，唯一失败为测试误把鼠标 release 当成 Pi click；调整测试事件后 `ui-unit-2` 8/8 通过，包含两种真实 Pi 渲染器的 Esc 焦点分派。批准核验 89/89 通过，不冒充真实用户确认。
- 集成首轮 `sdk-ui-1` 25/26，17 个正式文档 SDK 用例通过；失败为测试 PATH 缺少 `fd`，禁网下原生 find 无法下载，原 Session 已保留 `fd is not available and could not be downloaded`。仅把已有 `~/.pi/agent/bin/fd` 普通可执行文件复制到临时工具目录并加入测试 PATH，不放宽 HOME/网络或改写模型结果。正式 V3 脚本首次通过 CommonJS resolve 查询仅支持 ESM import 的 Pi 包失败，尚未启动容器；改用公开包名 ESM import 和临时 node_modules 链接，不导入 Pi 私有路径。
- 正式 V3 已验证：`formal-v3-2` 退出 0，产品 `createContainerOperations` 加 Pi 公开 `createBashTool` 执行同一命令，使用原两目录可写、其余 18 项只读挂载；**483 passed / 395 warnings、135.09 秒**，实际退出 0、clean/passed、冻结摘要未变。原生执行结果及容器引用保存于 `formal-v3-result.json`、`formal-v3-refs.jsonl`，未修改业务工作区或替业务台账记切片完成。
- 新边界与双环境验证：`native-search-2` 1/1、`container-targeted-1` 2/2、`native-containers-1` 28/28、`structured-1` 16/16，均退出 0。真实 OOM 验证 cgroup memory.max=1073741824、137 及尾部输出和清理；真实 Pi 子命令在详情 Esc 后继续完成，最终结果仍可查看。Structured 的原 schema、请求/上下文增强、完整开发/验收/审查、取消及未知终态回归通过；UI 父为模拟宿主，真实模型调用数为 0。
- 全量首轮 `all-1` 为 **469/501、32 失败、退出 1**。32 项均在 `test/unit/parent-writer.test.ts` 的旧宿主初始化失败（`ctx.ui.custom is not a function`），尚未进入 writer 断言；本轮换用 custom UI 后漏改该夹具。仅将该夹具接到同一真实组件的模拟交互宿主，不改产品 writer 或放宽检查，待定向及最终全量复验。另补批准摘要/完整内容测试，核对目录权限不被“四个计划文件”替换。
- 漏改宿主修正后 `parent-unit-2` **122/122、退出 0**，包含新增完整批准展示测试及此前 32 项失败；`typecheck-4` 通过。最终全量 `all-2` 进行中，单项通过不代替整体收口与资源审计。
- 最终全量：`PATH="/private/tmp/adaptive-optimization.JoKPjD/bin:$PATH" node --import tsx test/support/run-tests.ts test/unit/*.test.ts test/integration/*.test.ts test/e2e/*.test.ts` 为 **502/502、0 失败/取消/跳过/todo、退出 0**。证据 `all-2.{json,log}`，测试根 `adaptive-tests-R3JFHl`；此前漏改宿主及缺 fd 已复验通过。原生容器完整组 28/28、Structured 完整组 16/16 的最后产品代码与本次一致；之后仅修改测试夹具和文档，未无故重跑这两组。离线 tarball 24 项自有资源在无 node_modules 临时目录实际加载并使用 fake provider，通过不等于发布。typecheck、最终差异及空暂存区检查通过。
- 资源审计：`audit.{json,log}` 退出 0，`audit-result.json` 记录 11 个本轮测试根、1643 份 JSONL、1531 个已记录宿主 PID，全部 ESRCH；154 个执行标签（包含 fake Docker 引用）及 2 个 V3 探针的明确查询均无实际容器残留。12 个非完整 JSON 行已逐路径核对，分别为批准损坏负例及详情末行追加测试，保留原制品；没有修改未知 lease、回填失败记录或操作其他容器。
- 最终改动：24 个路径，产品集中于入口、`src/container.ts`、`src/approvals.ts`、`src/progress.ts` 和新增 `src/ui.ts` / `src/task-details.ts`；另含 Pi 依赖/lockfile、既有测试/夹具及两个新测试文件、README、Skill 和两份规划文档。只用公开 Pi API，未新增工具执行后端、持久任务日志、资源配置、自动重试或旧代码兼容。完整正文及真实工具错误仍保存于原生 Session，展示缓存不参与批准或交接。
- 交付边界：鼠标点击详情限 Pi 全屏模式，普通模式通过 `/delivery-tasks`；Esc 焦点已由两种真实 Pi 渲染器以及 SDK 父/真实子容器组合验证，不冒充用户桌面人工体验。业务 V3 仅在冻结副本上验证，未实施第十九切片、未执行业务全量后端/生产环境门；没有新的真实模型调用或独立模型复审。开发依赖安装曾在空配置下访问公共 npm，功能测试仍系统禁网。基线仍为 `main / d3c76cf`，暂存区为空，本轮未 commit、push、创建 PR、安装到用户 Pi、发布或部署。

### 13.29 执行修复与交互优化完整本地提交

- 授权与状态：用户明确要求“先完整提交下代码吧”，随后要求“继续”。本地完整提交已成功，提交说明为 `feat: 优化交付界面与任务详情并修复容器执行取证`；本条在成功后补记并纳入同一本地提交，最终 hash 以 Git 原生记录为准。未推送、创建 PR、发布或部署。
- 提交范围：相对 `d3c76cf` 的全部 24 个路径，包含第 13.28 节的执行修复、状态/批准/任务详情、Pi 依赖及 lockfile、测试与夹具、README、Skill 和两份规划文档。已保留此前待办与失败记录，无无关改动或本地测试制品入库。
- 提交前验证：本次重新运行 `node node_modules/typescript/bin/tsc --noEmit` 与 `git diff --check`，均通过；开始时暂存区为空。21 份产品资源与最后全量测试 tarball 逐字节相同；读回默认 502/502、原生容器 28/28、Structured 16/16、原 V3 483/483 及资源审计的退出 0 记录。本次没有重跑这些测试或调用真实模型，不把历史结果记作新的执行。
- Git 与边界：当前 hooks 目录没有启用脚本，未设置自定义 hooks 路径或提交签名开关，没有更改 Git 配置或绕过 hooks。兼容性与验收限制沿用第 13.28 节；提交只固化本轮已验证候选，不修改业务项目、用户 Pi 配置或已安装插件。

### 13.30 子任务详情视觉与信息层次优化

- 状态：已完成限定实现及自动化验收，证据与人工体验未执行项见第 13.33 节。下文保留最初待办背景：用户反馈详情 UI 难看，随后明确“先记个待办，任务还在执行呢”，当时刚开始的 UI 代码及夹具改动已撤回，仅保留记录。基线 `main / 0f159e6`。
- 问题：截图首屏堆叠完整任务、绝对路径、调用 ID、JSON 和上万行记录；缺少边框、留白与清楚的视觉层次，难以快速查看进展。
- 建议方向：增加边框、留白和统一背景，按“概览 / 工具过程 / 结果”组织；默认展示短任务与最近进展，完整指令、单次调用参数和输出按需展开。复用原始 Session，不新增持久任务表、依赖或兼容层。
- 验收要求：完整内容仍可读，宽窄屏与导航清楚，刷新保留阅读位置；Esc 只关闭详情，不影响任务继续执行。最初仅记待办时未运行测试、调用真实模型、提交或发布；后续已按新授权实施，见第 13.33 节。

### 13.31 审批移至底部输入区与卡片展示精简

- 状态：已完成限定实现及自动化验收，证据与人工体验未执行项见第 13.33 节。原需求为审批大弹窗影响观感，希望放在底部输入位置，并要求展示继续稍作优化；当时按“任务还在执行，先记待办”的安排，仅补充需求，没有修改运行代码。
- 审批位置：文档授权、方案确认和实施确认统一在底部输入区展示，等待确认时临时替换输入框，完成后恢复；主对话保持可见，取消覆盖大部分屏幕的弹窗。明确标识当前审批阶段，精简重复标题、工作目录及通用说明；范围与影响决定的条件保持可核对，长正文按需展开。
- 操作：保留确认在上、暂不批准在下及默认不批准；只调整展示位置与布局，不改变三类授权边界、明确选择和原始批准记录。实施前核对 Pi 公开 API，并验证底部区域的高度、滚动、焦点及关闭后的输入恢复。
- 卡片：默认只显示真实状态、简短任务目标和当前动作；避免长路径、调用 ID、JSON 和输出尾部挤进“子任务说明”。长输出提示改为易懂的“预览已省略，详情查看完整内容”，不把“前文已截断”作为当前动作展示；完整任务和工具输出仍由原始 Session 提供。
- 文案与验收：精简“执行结束，结果待核实”等状态表述，同时保留执行结束、待核对、失败与验收通过的区别；不凭展示推断核对已开始或测试已通过。与第 13.30 节一并处理，验证窄屏、长内容、活动刷新及 Pi 焦点行为；最初仅记待办时只核对文档差异，后续实现与验证见第 13.33 节。

### 13.32 模型断流原生自动重试

- 状态：已完成本轮限定实现与验收。用户提供 `Error: stream_read_error` 截图并明确要求优先修复，随后指定既有《后续改进-断流自动重试》备忘；该授权覆盖此前延期事项的实现与隔离验证。本轮当时暂缓第 13.30—13.31 节 UI 待办，后续处理见第 13.33 节。基线 `main / 0f159e6`，保留已有两条待办文档改动。
- 已复核：当前依赖 Pi 0.85.1 的公开 `isRetryableAssistantError()` 对 `stream_read_error` 返回 false，对 `fetch failed`、`terminated`、HTTP 500 返回 true；附加原生识别的重试说明可进入同一判定。公开 `message_end` 返回替换消息发生在持久化和原生重试判断之前。截图不能定位服务端或网络链路根因，本次修复目标是漏重试。
- 最小方案：在父子公共入口安装一个消息钩子，仅处理错误 assistant 的确切 `stream_read_error`，保留错误与正文并补充重试说明；沿用 Pi 的开关、次数、退避、提示和取消。无第二调度器、Provider 包装、用户配置面、旧记录迁移或权限变更，不主动重放工具或整项委派。
- 待验证：单元边界；真实 SDK 父与 CLI 子首次断流后恢复、次数耗尽、禁用、取消/退出/reload；完成工具不重复、半截工具不执行、非目标错误及持久化故障不自动续跑；批准、writer 和子稳定收尾保持原有核验。
- 执行边界：测试使用临时 Git、空认证和 fake provider，系统禁网；不修改用户 Pi 安装、配置或业务项目，不操作在途业务任务、不调用真实模型，未提交、推送或发布。设计事实源同步技术方案，验证进度仅更新本节。
- 原始症状已复现：`stream-retry-red-1` 使用真实 SDK 父、模拟批准、实际文档写入和 fake provider 注入断流，断言期望 1 次原生重试、实际 0 次，1/1 失败、退出 1；失败发生于修复接入前。证据保存 `/private/tmp/adaptive-optimization.JoKPjD/stream-retry-red-1.{json,log}`，原始 Session 留在测试根 `adaptive-tests-djWEN6`。已接入最小消息钩子，后续恢复和边界待验证。
- 第一轮接入验证：`stream-retry-green-1` 10/11 通过，父恢复/上限/禁用/非目标错误/取消/reload、开发 CLI 子恢复与耗尽均通过。唯一失败为写盘故障测试未先生成 Session 文件，故 chmod 未注入预期的 EACCES；夹具补充一次正常原生落盘后再注入。`stream-retry-typecheck-1` 退出 2，测试误引用未公开导出的 `MessageEndEventResult`，改用公开事件的结构类型，不导入内部路径。两项修正后待复验，未改变产品重试边界。
- 定向复验通过：`stream-retry-green-2` **13/13、退出 0**，新增只读 CLI 子恢复、开发子退避中取消及 writer 收尾通过；此前写盘故障已真实注入 EACCES 并验证不重试。`stream-retry-typecheck-2` 通过。继续补真实父 CLI 退出和实际容器命令不重放证据，随后运行影响范围回归；父 UI 批准是模拟交互，Provider 均为 fake。
- 容器与退出首验：`stream-retry-container-1` **1/1、退出 0**，真实容器已完成的命令在断流恢复后没有重复，计数文件仅一行、原生 bash 结果退出 0/clean、单个委派正常交回 writer。`stream-retry-exit-1` 退出 1：测试错误预期 SIGTERM 后退出 0，实际 Pi handler 清理后固定返回 143；已对照实现，将断言改为 143/无外部终止信号，并核验持久 shutdown 条目及进程确实退出，待复验。
- Structured 回归：`stream-retry-structured-1` **16/16、退出 0**，覆盖原插件父子只读、请求/上下文增强、补丁开发、自检、固定验收、审查、取消和未知收尾；使用本地已安装 adapter 代码和禁网容器，没有真实模型调用。该组为既有流程回归，不冒充 Structured 特有断流故障注入。`stream-retry-typecheck-3` 通过；默认 unit/integration/E2E 全量仍在执行。
- 最终全量：`PATH="/private/tmp/adaptive-optimization.JoKPjD/bin:$PATH" node --import tsx test/support/run-tests.ts test/unit/*.test.ts test/integration/*.test.ts test/e2e/*.test.ts` **517/517、退出 0**，无失败、取消、跳过或 todo，证据 `stream-retry-all-1.{json,log}`。新增 15 项单元/集成全部通过，包含子禁用及父 CLI 的 SIGTERM 143/持久 shutdown/进程退出核验；前三项夹具失败均已修正复验。离线 tarball 的 25 项自有资源在无 node_modules 临时目录加载通过。最后产品代码与上述容器定向及 Structured 回归一致，之后只同步文档，没有重复运行已通过测试。
- 收尾审计：`stream-retry-audit-1` 退出 0，扫描本轮明确的 7 个测试根、12292 条完整 JSONL 记录，357 个记录中的宿主 PID 均 ESRCH；87 个执行标签（含 fake 引用）逐项查询无实际容器残留。3 个非完整 JSON 行分别来自两份批准损坏负例和任务详情末行追加测试，保留原制品，不修改未知 lease 或执行强制清理。完整范围及结果保存 `stream-retry-audit-result.json`。
- 最终范围与边界：产品仅新增 `src/stream-retry.ts` 并在 `index.ts` 公共入口接入；另含两个新测试文件、既有容器测试/夹具及 README、备忘和两份规划文档，共 11 个路径。没有新依赖、旧版本兼容、用户配置、Provider 包装或第二重试循环；原始失败、工具错误、批准及 writer 规则保持。仅补当前版本漏识别，不承诺消除底层断流；升级 Pi 后需复验原生文本分类行为。未运行新的真实模型/用户桌面体验、业务测试或完整原生容器组，未提交、推送、安装或发布。

### 13.33 完成 UI 待办后回看业务断点

- 状态：已完成限定实现、隔离验收、收尾审计及业务只读断点核对。用户要求“先修复待办问题，然后再继续看亚马逊的”，据此完成第 13.30—13.31 节；此前暂缓记录保留为历史，完成状态以本节为准。保留第 13.32 节全部未提交断流修复，基线仍为 `main / 0f159e6`。
- 最小范围：复用现有 UI、批准、进度与详情模块。审批用 Pi 公开 `ui.custom` 默认模式替换底部输入框并限制高度，完整正文滚动可读；任务详情按概览、工具过程、结果组织，参数和长输出按需展开，新增边框与留白；卡片保留简短目标、真实状态和当前动作。不新增依赖、配置、权限或持久任务表，不兼容旧界面。
- 验证：三类审批默认不批准、真实选择及底部输入恢复；两种 Pi 渲染器的详情 Esc 焦点；长会话、窄屏、滚动及实时刷新保留阅读位置；真实子命令在详情关闭后继续完成。优先定向验证，再做必要回归并保留断流验证。
- 顺序与边界：本仓修复验证完成后，只读核对亚马逊项目唯一台账、Git 差异及当前任务断点，不重启业务会话、不读取凭据、不代为批准、调用真实模型或修改业务代码。未授权提交、推送或发布。
- 定向验证：`ui-followup-unit-1` **104/104、退出 0**，覆盖批准持久核验、底部组件高度、真实选择、两种 Pi 渲染器的详情 Esc、万行原始输出按需展开、刷新/切换保留位置、鼠标和缺失记录提示。`ui-followup-typecheck-1` 通过。正文默认视口随后由 6 行调为 8 行，让常见四路径范围更易核对；后续回归覆盖该最终布局。
- 真实组合验证：`ui-followup-sdk-1` **30/30、退出 0**，真实 SDK 文档批准/写入、取消、重载、持久故障与断流恢复边界通过；批准使用实际组件的模拟 UI 宿主，并核对未启用 overlay。`ui-followup-container-1` **2/2、退出 0**，真实 CLI 子命令运行中打开详情，Esc 返回后命令继续完成，结束后可分别查看 bash 完整输出与父结果；已有断流后容器命令不重复执行也通过。
- 最终回归：`PATH="/private/tmp/adaptive-optimization.JoKPjD/bin:$PATH" node --import tsx test/support/run-tests.ts test/unit/*.test.ts test/integration/*.test.ts test/e2e/*.test.ts` **519/519、退出 0**，无失败、取消、跳过或 todo，证据 `ui-followup-all-1.{json,log}`；`ui-followup-typecheck-2` 通过。全量启动后只将审批标题横线末尾的省略号去掉，随后最终 UI 定向复验 `ui-followup-unit-2` **10/10、退出 0**，最终类型检查 `ui-followup-typecheck-final` 也通过，不将该显示微调冒充为全量运行前的版本。本轮没有测试失败，未重复运行此前通过的 Structured 全组。最终文档读回、差异范围及 `git diff --check` 通过，暂存区为空。
- 收尾审计：`ui-followup-audit-1` 退出 0，扫描本轮明确的 5 个临时测试根、11058 条完整 JSONL，303 个记录中的宿主 PID 均 ESRCH，37 个执行标签（含 fake 引用）无实际容器残留。7 个非完整 JSON 行均来自批准损坏负例或详情末行追加夹具，保留原制品。各命令记录及 `ui-followup-audit-result.json` 均在 `/private/tmp/adaptive-optimization.JoKPjD/`。
- 业务只读结论：亚马逊仓库为 `main / bf4d79a`，开始与结束的 Git 改动路径集合一致。专项台账 `docs/P6.1后端服务拆分-实施计划.md` 记录第十九切片基线完成、M2—M6 未完成，但四个目标源码/测试文件已经改动，顶部“尚未修改源码或测试”已落后。静态核对确认两个纯函数除入口改名外 AST 与 HEAD 原定义一致、五处生产调用已迁移、三个旧定义已删除；新增测试包含同组同名图片顺序及损坏名称在存储访问前拒绝。下一步由原父会话核对已有开发结果及执行收尾，再更新其唯一台账并继续固定验收和独立审查。本次没有运行业务测试、读取真实 Session 或 lease，不能据此判定其测试通过、任务空闲或批准仍有效；没有修改业务文件、读取 `.pi/settings.json` 内容或建立第二份业务台账。
- 最终范围与限制：UI 产品改动集中在既有 `approvals.ts`、`ui.ts`、`progress.ts`、`task-details.ts`，同步相关单元/集成夹具、README 与两份规划文档；没有新依赖、兼容层或用户配置。保留原批准、任务状态与 writer 规则。验证使用 fake provider、真实 Pi SDK/CLI、虚拟终端渲染器及禁网容器；未操作用户桌面或在途会话，底部审批在用户实际终端的视觉和输入法体验仍需试用。没有新的真实模型验证、完整原生容器组、安装或发布，未提交、推送或创建 PR。

### 13.34 亚马逊试用只读观察与问题待办

- 状态：本轮观察已结束于 `05:52:25` 的固定验收交回节点；观察结束时两项待办均未实施。详情实时输出的后续实现见第 13.35 节，缺文档授权的恢复报错已由第 13.39 节默认文档编辑消除。后续独立审查和业务收口未在本轮观察中完成。用户授权旁观亚马逊终端对应的执行记录、发现问题并记录待办，审批由用户自行操作。本轮观察仅维护本节及当前断点索引，不修改产品或业务代码，不代发消息、审批、重载、执行测试或释放 writer；保留此前全部未提交改动。
- 观察入口：`/Users/sxie/.pi/agent/sessions/--Users-sxie-Documents-亚马逊-amazon-image-generation-workbench--/2026-09-09T03-10-04-438Z_01a08424-e090-73ec-87db-9e9824440c71.jsonl`，简称父记录；子记录仅跟随该父会话的原始委派引用。使用现有 JSONL 做只读观察，只提取公开正文、工具记录及必要状态，不提取或输出 thinking，不读取凭据或真实配置。不创建常驻服务、第二份业务台账或自动故障裁决器。以下时间均为 UTC。
- 起始核对：父记录第 100 行 `03:56:08` 为重载前的 `stream_read_error`；第 101 行 `05:27:49` 已收到用户恢复请求。文档批准第 114 行 `05:29:50`、方案批准第 118 行 `05:30:46` 均已有对应工具成功结果。历史报错与等待用户确认不自动计为新故障；父模型对业务测试通过的陈述仍需原结果支持。
- 观察边界：日志可以证明工具调用、持久结果、模型错误及审批记录，不能证明实际终端的布局、输入法或按键观感，也不能单凭静默时长判断任务卡死。视觉问题结合用户截图记录；新发现先保留现象、影响、原记录位置及待核实事项，不在在途任务上直接修复。

| 待办 | 状态 | 现象与证据 | 后续分析与验收方向 |
|---|---|---|---|
| 重载恢复时提前说明缺失授权，减少试写报错 | 已解决（默认文档编辑，见第 13.39 节） | 父记录第 102 行表示先核验权限，第 110—111 行 `05:29:14` 实际调用 `delivery_document_edit` 后返回“本轮没有可核实的规划文档授权”；第 112—119 行随后重新申请并完成文档及方案确认。写入被正确拒绝，已有成果未被此调用修改，但恢复流程多一次失败及说明。 | 用户新要求文档默认可编辑，故删除独立 documents 批准；重载/重开后可直接修订任务 Markdown，无须通过失败试写发现缺文档授权。真实 SDK/临时 Git 已验证无批准编辑、暂停与恢复；源码/命令仍须本轮方案及实施确认，未知 writer 仍拒绝写入。没有修改或重载原业务会话，现场体验待试用。 |
| 子任务详情支持连续实时输出与跟随阅读 | 已完成（限定自动化，见第 13.35 节） | 用户截图 `pi-clipboard-1b7581f6-b032-46ee-99f0-a28ba4a7787e.png` 红框中的“最近输出 · 预览”被分片数字挤满，窗口仍有较大留白，难以连续查看子任务输出。记录时已核对 `task-details.ts`：概览取 `progress.output` 最后 600 字符、折行后只取前 3 行；每秒刷新但没有追随末尾阅读；单次工具详情主要读取已落盘 `toolResult`，在途工具输出没有按调用关联接入该正文。`progress.ts` 已接收工具更新及子模型正文增量，基础事件通路存在。截图本身不能证明上游当时持续产生了新输出。 | 第 13.35 节已实现概览连续输出、默认跟随最新、上翻暂停并保留阅读内容、End 或回到底部恢复、执行中的工具详情及最终原始结果衔接；长行、持续输出、工具切换、无新输出、窄屏、刷新/滚动/关闭均有隔离验证。Esc 仍只关闭详情。复用现有进度和原 Session，不增加第二日志或模型总结；不保证程序尚未输出的内容能提前展示。未重载业务会话，用户桌面体验仍待后续试用。 |

- 观察推进：父记录第 121 行 `05:31:33` 文档编辑已成功，原父自行补齐专项台账；第 124—125 行 `05:37:44` 实施确认及成功结果已落盘，第 126—127 行启动固定验收。引用验收子记录 `2026-09-09T05-38-00-592Z_01a084ac-510f-768a-9745-933324fe55c9.jsonl`：21 条实际命令与本轮批准正文逐条顺序一致，21 个原始结果均为 `exitCode=0/status=passed/clean=true`；纯模块 86 项通过，全量 16 片为 2147 passed / 279 skipped。已只读复核各片收集总数为 2426、收集摘要一致、实际索引并集 0–2425 且无重复遗漏；环境跳过不等于对应 PostgreSQL/S3 验收通过。第 65/68 行编译及四文件 Black 成功，第 70 行子关闭记录、父第 128 行 `05:51:35` 固定验收成功结果均已落盘。截止父第 130 行，父正在核对原始终态并准备独立审查；不标记整个业务切片完成。观察期间未见新的断流、超时或 OOM，不能据此宣称真实断流恢复被触发验证。该记录仅定位观察断点，业务进度仍由原父维护专项台账。
- 观察工具限制：首个临时只读轮询脚本在子 Session 路径已登记而文件尚未生成时因 `FileNotFoundError` 退出；这是旁观脚本时序错误，未操作业务进程或文件，不计为产品故障。改用短时轮询、允许引用文件稍后出现后恢复观察；没有修改原始记录或启动替代业务任务。
- 本轮交付：截图与对应显示代码已核对，待办均记录现象、证据和验收方向。短时观察命令已退出，没有后台自动分析或写台账的服务；后续观察可从上述行号继续读取，审批仍由用户处理。文档读回及 `git diff --check` 通过，本轮未运行产品测试、修改业务文档、提交、推送或发布。

### 13.35 子任务详情连续实时输出

- 状态：已完成（限定实现及隔离验收）。用户接受“下一步优先做详情实时输出”的建议并要求“可以，优化下”，本轮完成第 13.34 节的实时输出待办；重载授权提示仍待分析。保留此前全部未提交修复及待办，基线 `main / 0f159e6`；未操作亚马逊会话、审批或业务文件。
- 最小方案：只扩展既有进度及详情模块，以原调用 ID 和消息时间关联在途输出，完成内容继续读取原 Session；概览保留简短任务和当前动作，其余空间展示连续输出。默认跟随最新行，上翻暂停跟随并保留正在阅读的内容，End 或回到底部恢复；单次工具详情在执行中也可查看输出，Esc 仍只关闭详情。不新增产品文件、配置、持久日志、兼容层或授权入口。
- 验收：先验证在途工具/模型正文、交错调用归属、原始结果优先、长输出最新行、暂停阅读与恢复、窄屏和取消/结束，再通过真实 Pi 子及禁网容器连续输出验证详情与任务生命周期；最后运行受影响回归与类型检查。测试使用临时 Git 和 fake provider，不读取真实凭据或调用真实模型；未授权提交、推送或发布。
- 原始症状复现：`live-details-red-1` 退出 1、0/1 通过；真实组件收到 100 行输出后，首屏仍显示较早的三行，未显示已收到的末行 `FIRST_LATEST`。证据位于 `/private/tmp/adaptive-optimization.JoKPjD/live-details-red-1.{json,log}`，测试根 `adaptive-tests-bhoWa0`；发生于产品修改前，不是新增夹具启动错误。
- 首轮接入：`live-details-unit-1` **15/15、退出 0**，原始症状、上翻保留内容、End 恢复、在途工具详情及原始结果优先均通过。`live-details-typecheck-1` 退出 2：新快照自动推断 `pending` 必填，与既有进度回调的可选字段不一致；已显式采用原 `TaskProgress` 返回类型，不改权限或回调契约。补充模型正文、并行工具、窄屏及真实容器连续输出后复验。
- 扩展定向验证：`live-details-unit-2` **17/17、退出 0**，新增模型正文、已落盘文本去重、并行输出归属、有限缓存、取消清除、终态优先及 10—60 行终端均通过；`live-details-typecheck-2` 通过。`live-details-container-1` 退出 1，持续输出和暂停/恢复/在途工具详情的断言均通过，最终返回被正确标为失败；原记录确认 `timeout:10`、退出 0/清理完成，原因是本轮测试将输出延长至 10 秒而 fake provider 仍给该场景 10 秒时限。仅将详情测试场景命令预算改为 20 秒，产品 300 秒上限和其他故障场景不变，待复验。
- 容器复验发现：`live-details-container-2` 退出 1；在途输出、暂停/恢复、工具详情、Esc 后继续完成、成功返回和 writer 交回均已通过，但完成详情按 End 未显示最后输出。读回本轮临时原 Session 及组件实际渲染，最终输出确实存在，末页被尾部容器元数据和长记录路径占满。现将完整参数、原记录引用和元数据放到输出前，保留全文核对并使输出处于末尾；单元补充长元数据的回归，待重新验收。没有修改工具结果、任务终态或收尾规则。
- 定向复验已通过：`live-details-unit-3` **17/17**、`live-details-typecheck-3` 与 `live-details-container-3` **1/1** 均退出 0。真实 Pi 子在禁网容器内分阶段持续输出，运行时详情跟随最新行，上翻后经新输出和定时刷新仍保留阅读内容，End 恢复、当前工具详情、Esc 后继续执行、完成后末行与父结果可见、writer 正常交回均通过。测试使用真实组件和 SDK 模拟 UI，未操作用户桌面或调用真实模型。默认全量和 Structured 回归进行中，尚不标记整体完成。
- Structured 回归已通过：`live-details-structured-1` **16/16、退出 0**，本机 Pi 0.85.1、真实插件 3.0.29 与已有禁网容器覆盖完整交付、请求/上下文增强、工具与进度归属、PTY、补丁、取消及未知收尾。该组为原模式回归，不冒充 Structured 专属实时详情或用户桌面验收；默认全量及最终资源审计仍待完成。
- 默认全量已通过：`PATH="/private/tmp/adaptive-optimization.JoKPjD/bin:$PATH" node --import tsx test/support/run-tests.ts test/unit/*.test.ts test/integration/*.test.ts test/e2e/*.test.ts` 为 **522/522、退出 0**，无失败、取消、跳过或 todo，证据 `live-details-all-1.{json,log}`，根 `adaptive-tests-kLyA6b`。包含此前断流与 UI 修复、当前新增 3 项单元及离线 tarball 的 25 项自有资源加载；额外 PATH 仅使用此前临时准备的 `fd`，没有修改用户配置或联网安装。测试后产品代码未再变化；最终资源审计及交付核对进行中。
- 资源收尾已核对：`live-details-audit-1` 退出 0，明细 `live-details-audit-result.json`。只扫描本轮 9 个明确临时测试根，11799 条记录中取得的 332 个 PID 均已退出，89 个执行标签查询无容器残留。6 条不可解析记录逐条对应故意损坏批准的两条 `broken`，以及三轮定向与一次全量的四条详情末半行夹具；不是产品新增记录损坏。没有强制解锁或清理用户任务。
- 最终范围与交付：产品仅扩展既有 `progress.ts` 和 `task-details.ts`；同步既有单元/容器测试、fake provider 的详情场景预算、README、技术方案和本台账，没有新增本轮产品文件、依赖、配置或兼容层。原生与 Structured 沿用现有事件/结果，批准、writer、失败与恢复规则不变。最终文档读回、差异范围和 `git diff --check` 已核对；暂存区为空。测试均使用 fake provider 和临时 Git/配置，UI 为真实组件及 SDK 模拟宿主；没有新增真实模型、用户桌面或业务验收，没有重载运行会话、安装、提交、推送、PR、发布或部署。新界面在用户当前任务结束后重载 Package 才生效，重载恢复授权提示仍保留待办。

### 13.36 断流重试与交互优化完整本地提交

- 授权与结果：用户明确要求“先完整提交下代码”。本地完整提交已成功，提交说明为 `feat: 完成断流重试与审批及子任务实时详情优化`；本条在成功后补记并纳入同一本地提交，最终 hash 以 Git 原生记录为准。没有推送、创建 PR、发布或部署。
- 提交范围：相对 `main / 0f159e6` 的全部 18 个变更文件，包含父子模型断流原生重试、底部审批、卡片和详情布局、连续实时输出及跟随阅读、对应测试与夹具、README、断流备忘、技术方案与唯一台账。保留亚马逊只读观察和未完成的恢复授权提示待办，没有业务文件、用户配置或临时测试制品入库。
- 提交前核对：本次重新运行 `node node_modules/typescript/bin/tsc --noEmit`（`complete-commit-typecheck-1`）及工作区/暂存区差异检查，均通过；开始时暂存区为空。21 份产品资源与第 13.35 节默认全量的 tarball 逐字节相同，读回默认 522/522、Structured 16/16、容器专项 1/1 及资源审计的退出 0 记录。本次没有重跑完整测试或调用真实模型，不把历史结果记作新的执行。
- 边界：当前 hooks 目录没有启用脚本，未设置自定义 hooks 路径或提交签名开关，没有更改 Git 配置或绕过 hooks。原生与 Structured 的兼容和验收限制沿用第 13.32—13.35 节；提交只固化已验证成果，未重载业务会话、安装到用户 Pi 或处理剩余待办。

### 13.37 逐个追问与适时收口

- 状态：提示实现、内容核对和资源验证已完成，真实多轮对话效果待验证。用户明确对齐“一次只问一个问题、根据回答调整、附带推荐、避免问得过深，关键条件清楚后收口”，随后授权“这块先优化下吧”。开始时 `main / d9fc668`、工作区干净；本轮不含重载授权提示、业务会话操作或新的提交/发布。
- 已核实：技术方案第 4.1 节已有逐步对齐目标，现有 Skill/shape Prompt 的引导较简略；Pi 官方文档说明完整 Skill 按需读取，模型并非总会主动加载。当前 Extension 主要处理权限与执行，不检查讨论质量；不能将此前 522 项自动化或旧 R14 的资源测试解释为当前真实追问效果已通过。
- 最小实现：修改现有 `skills/adaptive-delivery/SKILL.md`、`prompts/delivery-shape.md`、README、技术方案和本台账共五个 Markdown 文件。Skill 描述明确适用场景，正文规定单个决策、推荐及等待回答、按回答重选下一问和停止条件；shape 入口明确读取 Skill。没有新增 Skill、文件、依赖、运行时状态、固定问卷、兼容层或批准环节；沿用 Pi Package 分发，不另建 `.skill` 安装包。
- 验证安排：先核对明确需求零追问、模糊需求单问、回答改变方向、低影响细节收口与关键业务选择不可默认等场景的文字覆盖；再用 Pi 公开加载 API 和现有隔离资源/打包测试验证新资源可读取、入口可发现与原流程不回归。测试使用临时 Git/配置及 fake provider，不新增镜像式文案测试、不调用真实模型；真实多轮提问质量与停止时机仍待后续试用，不冒充已验证。
- 首轮资源检查：`shaping-resources-1` **0/1、退出 1**，尚未执行加载检查。工作区外临时脚本用 CommonJS `require.resolve` 定位仅提供 ESM export 的 Pi，触发 `ERR_PACKAGE_PATH_NOT_EXPORTED`；这是验证脚本的导入方式错误，不是 Skill 或 Prompt 加载失败。改用标准 ESM 包名导入及临时目录中的代码依赖链接，不导入 Pi 内部路径，待复验。证据统一保存在 `/private/tmp/adaptive-optimization.JoKPjD/shaping-*`。
- 资源复验：`shaping-resources-2` **1/1、退出 0**，复用临时目录已有的代码依赖链接，Pi 0.85.1 公开 `loadSkillsFromDir` 取得唯一交付 Skill、零诊断，更新后的描述进入公开 Skill 提示；shape 的 frontmatter、正文及需求参数入口读取正常。没有读取用户 Skill/配置、安装依赖或修改运行时代码。现有隔离打包/资源回归待执行。
- 正式资源回归：`shaping-entry-1` **3/3、退出 0**，命令为 `node --import tsx test/support/run-tests.ts '--test-name-pattern=manifest|离线 npm tarball|无 node_modules 的正式 Package' test/unit/package-manifest.test.ts test/e2e/rpc-resource-discovery.test.ts`。真实 Pi 在临时 Git、空配置、禁网和 fake provider 下发现 Skill/shape 入口，离线 tarball 的 25 项自有资源及无 node_modules 正式加载通过。未运行无关全量、Structured 或容器组；本轮没有 TypeScript、运行时权限或工具实现改动。
- 场景内容核对已完成，以下为文案评审而非模型实测：明确的文字修改可零追问成案；含多个未知决策的新功能仅先问一个关键点并等待；用户改变目标后重选下一问并跳过已覆盖内容；仅剩实现细节或未来扩展时收口；尚未确定的关键业务选择不得默认代选。“按推荐”仅接受当前问题，不获得阶段批准；用户继续讨论时可继续，不强制轮数。真实多轮效果仍待后续对话验证。
- 收尾与交付：`shaping-audit-1` 退出 0，仅扫描本轮 3 个临时测试根、22 条完整记录，两个 Pi PID 均已退出，无容器引用或损坏记录。最终只有上述五个 Markdown 文件变化，`git diff --check` 通过、暂存区为空；未提交、推送、发布、安装或重载用户会话。原生和 Structured 共用同一 Skill/Prompt，工具、权限与既有阶段确认未变；没有新增真实模型、用户桌面或业务验收。后续实际需求对话继续观察单问、按回答调整与停止时机，不能仅凭本轮资源检查宣布行为稳定。

### 13.38 方案审阅意见循环与暂停恢复

- 状态：已完成限定实现、自动化验收与资源收尾；真实模型对意见的理解及用户桌面输入法体验待试用。用户对齐方案落盘后输入修改意见、反复修订至明确批准，以及“稍后再看”和 `/delivery-resume` 恢复入口，随后授权“可以，这块可以优化下”。基线 `main / d9fc668`，保留第 13.37 节五个未提交 Markdown 改动。
- 最小范围：在既有 `ui.ts` / `approvals.ts` 加入方案专用多行编辑组件及父命令，复用 Pi 公开 Editor、原生提案/工具结果和已有批准核验；同步现有测试夹具、Skill、README 和设计文档。不新增产品文件、工具参数、用户配置、持久流程表或旧逻辑兼容层。
- 交互：默认输入意见，空回车不批准；明确选择“确认方案”才生成批准。“发送修改意见”返回意见并继续当前模型回合，父读最新文档、在现有文档授权内修订、说明变化后重新展示新提案。“稍后再看”或 Esc 关闭并暂停，方案和已发送讨论保留；命令只恢复当前分支最近未确认的方案审阅，先读取最新文件，不能直接批准旧提案或恢复写入权限。
- 验收：多行/长粘贴、空提交、键鼠焦点、窄屏和长正文；意见/暂停/批准三分支、持久记录/生命周期取消及不扩权；真实 Pi SDK 与临时 Git 的多轮修订、新提案批准、暂停后自然语言/命令恢复、重载及分支边界。先定向、类型检查，再默认全量和受影响 Structured 回归，最后核对资源收尾。测试禁网、fake provider、模拟 UI，不读取凭据或操作业务会话；真实模型质量和桌面输入法体验不计为自动化通过。未授权提交、推送、安装或发布。
- 首轮定向通过：`review-loop-unit-1` **152/152、退出 0**，包含 18 项新增意见/恢复/编辑与焦点边界，以及原批准和父 writer 回归；`review-loop-typecheck-1` 通过。两种真实 Pi 渲染器在虚拟终端验证底部输入、Esc 回到主输入，未操作用户桌面。证据统一位于 `/private/tmp/adaptive-optimization.JoKPjD/review-loop-*`；真实 SDK 多轮、重载与恢复组合仍待验证。
- 真实 SDK 组合通过：`review-loop-sdk-1` **22/22、退出 0**，新增 5 项覆盖同一模型回合两轮意见 → 读取/修订同一文件 → 最新提案明确批准，以及暂停后自然语言、命令、reload、重开原 Session 恢复。实际文件保留用户段落，三份不同提案中只批准最后一份；暂停后无自动续转，恢复读到用户后改文件，重载/重开仍拒绝旧文档权限。原有文档持久化、取消、冲突及 writer 回归通过；`review-loop-typecheck-2` 通过。模型为脚本式 fake provider，批准为实际组件的模拟输入，不代表真实模型已理解意见或用户桌面验收。默认全量与 Structured 回归待执行。
- Structured 回归通过：`review-loop-structured-1` **16/16、退出 0**，正式插件 3.0.29、Pi 0.85.1 与已有禁网容器覆盖父子只读、独立批准、补丁开发、自检、验收、审查、文档交接、PTY、取消及未知终态。方案批准实际使用新组件的模拟输入；该组是原模式回归，不冒充 Structured 专属多轮意见或真实模型验证。默认全量与资源审计仍在收尾。
- 默认全量通过：`PATH="/private/tmp/adaptive-optimization.JoKPjD/bin:$PATH" node --import tsx test/support/run-tests.ts test/unit/*.test.ts test/integration/*.test.ts test/e2e/*.test.ts` 为 **545/545、退出 0**，无失败、取消、跳过或 todo，证据 `review-loop-all-1.{json,log}`。包含新增 23 项、原生交付/断流/详情回归及离线 tarball 的 25 项自有资源加载；新 `/delivery-resume` 在无 node_modules 的正式 Package 中可发现。没有新增依赖、联网下载或读取用户配置。测试后产品代码未变，资源审计及最终交付核对待完成。
- 收尾通过：`review-loop-audit-1` 退出 0，4 个明确临时测试根的 12780 条完整记录、323 个已记录 PID 均已退出，86 个执行标签无容器残留。8 条非完整 JSON 逐项核对为两次测试中的六条故意 `broken` 批准负例和两条详情末半行夹具；没有修复原制品、强制解锁或操作用户任务。明细为 `review-loop-audit-result.json`。本轮测试与类型检查均首次通过，无失败待处理。
- 最终范围：连同上一轮提示共 13 个变更路径，产品仅修改现有 `src/approvals.ts` 与 `src/ui.ts`；同步 6 个既有测试/夹具、README、Skill、shape Prompt、技术方案和本台账。仅使用公开 Pi API，没有新文件、依赖、配置、工具参数、持久流程表或兼容层。三类授权仍独立，反馈和恢复不生成权限；其他重载场景提前提示缺失授权仍保留第 13.34 节待办。
- 交付边界：最终差异范围及 `git diff --check` 通过，暂存区为空；功能验证均为禁网 fake provider、真实 Pi SDK/CLI、虚拟终端/模拟 UI，Structured 使用已有本地容器。未执行新的真实模型、用户桌面、业务项目验收或完整原生容器组，未干预运行会话、提交、推送、创建 PR、安装、发布或部署。用户当前任务结束后重载本地 Package 即可试用；重载后旧授权仍失效。

### 13.39 子任务模型选择与默认文档编辑

- 状态：已完成限定实现、自动化验收和资源收尾；真实模型选择质量及桌面体验待试用。用户接受按 14 个工作场景、具体复杂度和风险选择模型/推理级别，明确不需要费用统计；另要求文档编辑默认允许，不再因方案/计划落盘弹出单独授权。已查看截图，确认为原 `documents` 授权页。基线 `main / d9fc668`，保留第 13.37—13.38 节全部未提交改动，不操作亚马逊运行会话。
- 最小设计：删除 `documents` 审批阶段，父专用 Markdown 工具按本次明确目标路径直接编辑 worktree 内文档，保留文件类型、保护路径、单 writer 和原生终态核验；方案与实施确认仍独立。方案提案 `paths` 改为当前方案/唯一台账等由父维护的规划文档路径，随方案确认冻结，供子开发及容器保护使用，不是新的文档写入批准。
- 子任务配置：在既有四类委派工具加入可选模型/推理级别及简短选择理由；未指定则继承父。通过 Pi 公开模型目录查询候选与支持级别，不读取或展示凭据，不自动挑选未知 Provider。14 个场景及调整原则写入 Skill，由父判断，不新增评分器、固定角色或自动降级/重试。卡片与详情显示实际选择，无费用、token 汇总或评测系统。
- 验收安排：先默认文档写入/拒绝源码与越界、两次独立批准、规划文档保护、重载与 writer 终态；再模型选择、级别支持、原生参数核验和展示；关键边界补单元及真实 Pi SDK/CLI、临时 Git 证据。最后按影响运行默认全量、原生容器与 Structured 回归、类型检查和资源审计。仅使用 fake provider、临时配置、禁网与已有本地镜像；不调用真实模型、提交、推送、安装或发布。
- 首轮检查：直接 `node node_modules/typescript/bin/tsc --noEmit` 退出 2，原因是删除文档批准接口后测试仍引用旧参数；更新夹具后 `agent-defaults-typecheck-1` 通过。`agent-defaults-docs-sdk-1` **20/20、退出 0**，真实 SDK 默认文档创建/编辑、两轮方案修订、暂停恢复、reload/重开原 Session、源码/越界/Git/链接拒绝及终态故障通过，无文档审批。
- 文档边界首验：`agent-defaults-docs-unit-1` **148/149、退出 1**。唯一失败是删除旧文档批准信号后，shutdown 未立即取消在途文档 I/O，本次产品改动引入；原单元准确复现。已为本次文档执行增加独立 I/O 取消信号，关闭时先取消操作，仍允许等待原生终态后交回 writer，再结束会话生命周期；没有恢复旧批准或增加新权限。证据仍统一保存于 `/private/tmp/adaptive-optimization.JoKPjD/agent-defaults-*`。
- 定向复验：`agent-defaults-focused-2` **84/84、退出 0**，根 `adaptive-tests-J61NTG`，包含模型选择 3 项、默认父 writer 32 项、两阶段批准 49 项；shutdown 立即取消及原生收尾交回均通过。`agent-defaults-typecheck-2` 退出 0。已删除仅验证旧文档批准机制的用例，仍适用的来源、路径、原生记录、两次确认及 writer 边界保留，不以旧数量代替覆盖。
- 实际子模型：`agent-defaults-model-sdk-1` **3/3、退出 0**，根 `adaptive-tests-6xnjCy`。真实 SDK 父/标准 CLI 子、临时 Git/fake provider 证明局部开发 `medium`、只读取证与固定验收 `low`、代码审查 `high`；Provider 实际收到对应模型与级别，父模型未改变，结果记录含实际选择。未知模型/不支持级别在子启动前拒绝，无文档审批；验收/审查使用 fake Docker，此组不是实际容器或真实模型证据。
- 展示与启动反例：`agent-defaults-display-sdk-1` **3/3、退出 0**，根 `adaptive-tests-vS1MMQ`。真实 CLI 子的配置钩子将 `high` 改为 `low` 时，只读/开发均未发送模型任务、无文件写入，子正常退出且未残留 writer；两行卡片显示已核实模型，原生 Session 重开保留完整选择理由、旧进度不能覆盖结果。`agent-defaults-typecheck-3` 通过。README、技术方案和 Skill 已同步默认 Markdown、两次批准及 14 场景指引；完整回归进行中。
- 原生容器：`agent-defaults-containers-1` **29/29、退出 0，无失败/跳过/取消**，根 `adaptive-tests-YT45IN`。真实 Pi CLI 与已有禁网 Docker 覆盖完整开发/验收/审查/返工/父台账回写、规划文件保护、实时详情与 Esc、断流恢复不重跑命令、OOM/超时/取消及持久收尾；仍使用 fake provider 和模拟父 TUI。
- 默认全量首验：`agent-defaults-all-1` **490/495、退出 1**，根 `adaptive-tests-X1umh0`。五项失败均为本次契约调整后遗漏更新的测试：RPC 文档两项仍期待“没有文档批准”，压缩后一项仍期待 Markdown 被拒绝，RPC 批准两项分别使用已删除的 documents 或空 design 路径。实际 RPC 文档被 TUI 边界拒绝，摘要没有授予源码/审查权限；没有新的越权故障。现按新契约更新夹具与明确断言，保留旧 stage 被 schema 拒绝的反例，不放宽产品检查，待复验。
- Structured：`agent-defaults-structured-1` **16/16、退出 0，无失败/跳过/取消**，根 `adaptive-tests-31GYGl`。实际加载 `pi-codex-conversion 3.0.29`，真实 CLI/禁网 Docker 完成两次确认、补丁开发、固定验收、审查与默认父文档交接；开发/验收/审查实际使用 `medium/low/high`。原请求/context hooks、并发归属、PTY、越界、崩溃、取消和持久故障通过；无真实 Provider 或用户桌面操作。
- 契约复验：`agent-defaults-contract-recheck-1` **12/12、退出 0**，根 `adaptive-tests-TXlIoB`。覆盖全量五项旧预期及相邻 RPC/工具来源/子权限/压缩正反例；默认 Markdown 可写且没有产生批准记录，源码/命令/候选审查仍不能从摘要取得权限。未再修改产品实现，正在运行最终默认全量。
- 最终默认全量：`agent-defaults-all-2` **495/495、退出 0，无失败/取消/跳过/todo**，根 `adaptive-tests-XT7pJu`。覆盖本次选择/默认文档及此前逐问资源、审阅循环、暂停恢复、断流、原生交付与未知 writer 边界；离线 tarball 26 份资源在无 node_modules 环境正式加载通过。`agent-defaults-typecheck-final` 与 `agent-defaults-diff-check-1` 均退出 0。产品和测试不再改动，资源收尾审计待核对。
- 资源收尾：`agent-defaults-audit-1` **退出 0**，仅核对本轮 10 个测试根的 23376 条完整记录、702 个已记录 PID 和 156 个执行标签，无活跃测试进程或残留容器。11 条非完整 JSON 逐项读回，均为 8 条故意 `broken` 批准反例和 3 条详情末半行夹具，未修补制品或解锁未知 lease。明细为 `agent-defaults-audit-result.json`；没有查询或操作业务任务。
- 最终范围与边界：累计保留第 13.37—13.38 节后共 33 个变更路径，新增仅 `src/agent-selection.ts` 及其单元测试；主要修改父入口、两阶段批准、父 writer、四类委派和已有进度/详情，同步 Skill、README、技术方案及相应夹具/回归。使用公开 Pi 模型目录与支持级别 API，无新依赖、费用统计、固定 14 角色、自动评分/降级/重试或兼容层。删除 documents stage，design 路径须为非空规划 Markdown；旧 Session 不迁移。默认文档编辑解除第 13.34 节的对应恢复报错，源码/命令两次确认、规划路径保护及单 writer 仍保留。
- 交付状态：Git 仍为 `main / d9fc668`，暂存区为空，已有改动保留；未提交、推送、创建 PR、安装、发布或部署。全部新验证为禁网 fake provider、真实 Pi SDK/CLI、模拟父 TUI，两个容器组使用已有本地镜像；未进行新的真实模型、桌面输入法、业务项目或跨平台验收，不宣称已节省 token。当前任务正常结束后重载本地 Package 可试用，源码开发前仍须本轮方案与实施确认。

### 13.40 区分过程工具错误与任务失败，精简实时详情

- 状态：已完成限定实现、自动化验收和资源收尾，真实模型与桌面体验待试用。用户确认优化“编辑中途失败、修正后仍整项标红”，并要求删除截图中的“工具过程”“结果”页签，以实时输出为主。保留第 13.37—13.39 节共 33 个未提交路径，基线 `main / d9fc668`；未重载或干预亚马逊会话。
- 原因已核实：亚马逊子记录 `2026-09-09T08-44-05-808Z_01a08556-af2f-7023-9923-59d4fe6074a8.jsonl` 第 13 行 edit 因 oldText 两处匹配失败，第 17 行补充上下文后六处替换成功，第 24 行正常关闭；父第 133 行因 `rpc.toolError` 曾置位返回失败。错误确实发生过，不能仅凭子总结断言已修复或完成验收。
- 最小设计：普通只读/开发/审查在模型、工具及持久收尾正常时返回可核对结果；有过程工具错误则明确显示“已结束，有工具错误待核对”，保留原始错误和父裁决要求。固定验收仍按真实固定命令、候选及终态判断，失败/取消/协议/记录/清理异常不变。不实现错误白名单、自动恢复判定、自动重试或新的状态账本。
- 详情只留连续输出，删除页签、工具列表及专属结果页；继续一秒刷新、上翻暂停、End 跟随、Esc 关闭。Enter 查看完整任务及模型理由仍保留；最终失败原因和原记录缺失提示直接显示在连续输出中，不要求切页。只展示公开正文，复用原 Session 与已有在途缓存。
- 验证安排：先状态与详情单元、真实 Pi/临时 Git 复现唯一匹配错误后修正、只读/审查含工具错误及固定验收失败边界；再默认全量、受影响原生容器和 Structured 回归、类型检查、差异检查与资源收尾。禁网 fake provider、模拟 TUI、已有本地镜像，不新增依赖、兼容、用户配置、费用统计或真实模型调用；不提交、发布或操作业务文件。
- 首次定向：`outcome-ui-focused-1` **13/15、退出 1**，根 `adaptive-tests-R3yJ5A`；`outcome-ui-typecheck-1` 退出 0。真实 edit 错误后修正、文件内容与提示已通过断言，测试错误地假定关闭记录为最后条目，已改为按原类型定位。另一项复现本次 UI 删页后快速切回实时视图并滚动时误用完整任务缓存，现切换时清除渲染缓存、保留各自阅读位置，待复验。证据统一为 `/private/tmp/adaptive-optimization.JoKPjD/outcome-ui-*`。
- 真实 SDK/CLI 定向：`outcome-ui-sdk-2` **36/36、退出 0**，根 `adaptive-tests-U1j4cN`。截图同类 edit 先两处匹配失败、读回再正确编辑成功，原错误保留，父收到过程错误提示、writer 正常交回；未固定验收仍不能审查。只读/审查/部分写入/权限拒绝均保留原工具错误，不冒充目标达成；启动环境、取消、协议、崩溃和持久关闭故障仍失败，不取得越界权限。
- 详情复验：`outcome-ui-unit-2` **59/60、退出 1**。原误用任务正文缓存已修复，但快速切回后立即 Home 的首次渲染未冻结输出；追加输出虽未移动当前行，仍改变总行数，截断时有失去阅读位置的风险。已在暂停跟随的首次内容渲染中保存当前正文，待复验；无新增持久日志或视图层。
- 详情定向收口：`outcome-ui-unit-3` **60/60、退出 0**，根 `adaptive-tests-XiR8f5`。连续输出、快速切换后冻结阅读、万行滚动、End 跟随、Esc、双终端渲染分派及原生记录重开通过；工具错误提示保留，缺记录/最终失败直接可见。README、技术方案与 Skill 已同步本轮结果语义和单视图详情；默认全量及两种容器回归待验证。
- 原生容器回归：`outcome-ui-containers-1` **29/29、退出 0，无失败/取消/跳过**，根 `adaptive-tests-VLTdRA`。真实 CLI/禁网 Docker 验证连续详情在运行中追加、暂停阅读、End 恢复、Esc 后继续完成及结束后重开；初始读取失败后实际开发/自检成功，父取得过程错误提示并继续固定验收。普通命令失败/超时保留原错误与清理证据，用户取消仍失败；固定验收的非零退出、变更、错命令、写入、漏跑、超时、掩盖错误与钩子拒绝均不能形成通过。`outcome-ui-typecheck-2` 退出 0。
- Structured 回归：`outcome-ui-structured-1` **16/16、退出 0，无失败/取消/跳过**，根 `adaptive-tests-KxAERe`。真实插件/CLI/禁网 Docker 完整流程、审查工具参数错误提示、原始长记录取证、越界拒绝、PTY/并发归属及持久收尾通过；未交回命令、取消、崩溃和清理证明缺失仍失败，未知 writer 不交回。
- 默认全量首验：`outcome-ui-all-1` **495/496、退出 1**，根 `adaptive-tests-Rx6JCh`。唯一失败是本次结果语义调整后遗漏的旧测试：子请求不存在的批准工具，仍期待委派状态不能是 completed。已核对 `adaptive-pi-TLhQoj` 原始记录：子工具实际返回 `isError=true / Tool delivery_approval not found`，无批准记录，父返回过程错误提示，子正常退出。现更新委派结束预期并补原工具拒绝/无提案断言，不放宽产品权限；待定向及最终全量复验。
- 定向契约复验：首次 `outcome-ui-contract-recheck-1` 与 `outcome-ui-typecheck-final` 因执行工具中断未取得完整结果，不记通过；对应启动器及已记录测试 PID 已退出。重跑 `outcome-ui-contract-recheck-2` **5/5、退出 0**，根 `adaptive-tests-Py9ZDC`，父 RPC 各阶段伪造批准均拒绝，子无批准工具、原始调用仍报错、无批准提案，正常收尾只返回待核对提醒。`outcome-ui-typecheck-final-2` 与 `outcome-ui-diff-check-1` 均退出 0；产品未再改动，最终默认全量待复验。
- 最终默认全量：`outcome-ui-all-2` **496/496、退出 0，无失败/取消/跳过/todo**，根 `adaptive-tests-10o2RB`。包含本轮过程错误与单视图详情、此前模型/级别选择、默认 Markdown、逐问资源、方案审阅循环/暂停恢复，以及取消、记录故障、writer 交接和离线打包。产品/测试不再改动，资源收尾审计待核对；不将 fake provider 与模拟父 TUI 作为真实模型或桌面体验验收。
- 资源收尾：`outcome-ui-audit-1` **退出 0**，核对本轮 10 个测试根的 23874 条完整记录、766 个已记录 PID 和 159 个执行标签，无活跃测试进程或残留容器。9 条非完整 JSON 逐项读回，均为 4 条故意 `broken` 批准反例和 5 条详情末半行夹具；没有修补原记录或解锁未知 lease。明细为 `/private/tmp/adaptive-optimization.JoKPjD/outcome-ui-audit-result.json`，不涉及业务会话。
- 最终范围：本轮在既有 `subagents.ts`、`development.ts`、`progress.ts`、`task-details.ts` 调整结果与展示，同步相关单元/集成/原生容器/Structured 测试和 README、技术方案、Skill；未新增文件、依赖、配置面、错误分类器或兼容层。累计保留此前改动后共 34 个路径，其中仅第 13.39 节模型选择源码及单测为新文件。原工具错误、固定验收、取消与未知收尾边界保留，不自动声称恢复或验收通过。
- 交付状态：Git 仍为 `main / d9fc668`，暂存区为空，未提交、推送、创建 PR、安装、发布或部署；全部新验证使用禁网 fake provider、真实 Pi SDK/CLI、模拟父 TUI，容器使用已有本地镜像。未做新的真实模型、用户桌面、业务项目或跨平台验收，旧 Session 不迁移。已复核实际差异与文档一致性；用户当前任务正常结束后重新加载 Package 可试用。

### 13.41 方案审阅、模型选择与交付交互完整本地提交

- 授权与结果：用户明确要求“先完整提交下代码”。本地完整提交已成功，提交说明为 `feat: 优化方案审阅、子任务模型选择与交付交互`；本条于成功后补记并纳入同一本地提交，最终 hash 以 Git 原生记录为准。没有推送、创建 PR、发布或部署。
- 提交范围：相对 `main / d9fc668` 的全部 34 个变更路径，覆盖第 13.37—13.40 节实现、对应测试与夹具、README、Skill、Prompt、技术方案与唯一台账；新增文件仅模型选择源码及其单元测试。没有业务文件、用户配置、凭据或临时测试制品入库。
- 提交前核对：重新核对分支、全部变更范围、新文件、工作区与暂存区差异，`git diff --check` 和 `git diff --cached --check` 通过；23 份产品资源（含 manifest、Extension、Prompt 和 Skill）与 `outcome-ui-all-2` 生成的 tarball 逐字节一致。读回默认 496/496、原生容器 29/29、Structured 16/16、最终类型检查和资源审计的退出 0 记录；本次没有重跑完整测试或调用真实模型，不把上轮通过结果写成新执行。
- 边界：没有启用的 Git hooks，未设置自定义 hooks 路径或提交签名开关，未更改 Git 配置或绕过 hooks。删除 documents 阶段、非空规划 Markdown 路径及旧 Session 不迁移的边界沿用第 13.39 节；工具错误不等于验收通过，真实模型和桌面体验仍待试用。未安装、重载或干预亚马逊会话。

### 13.42 简单任务按需规划文档

- 状态：已完成实现与限定隔离验收，真实模型效果待试用。用户确认简单需求不强制落技术方案和实施计划文档，并要求优化以减少负担；两次阶段确认、实施范围、固定验收和必要审查保持。基线 `main / 6c8883d`，开始时工作区干净。
- 最小设计：沿用原批准正文和 Pi Session，允许 `design.paths=[]` 表示本任务没有父维护的规划文档；实施 `paths` 仍非空。已有规划路径继续冻结保护，Git、父子 Session 和 writer 边界保留；批准反馈、暂停恢复、Skill 与三个 Prompt 支持直接修订会话正文。没有任务评分器、配置开关、新模式、额外状态账本或新产品文件。
- 文档原则：简单明确、可一次完成并验证的任务使用简短会话说明；存在持续维护的设计决策、多个依赖步骤或分阶段交付需要时落文档。已有方案/台账按项目规则沿用，不额外创建两份文件，不按代码行数机械判断；本仓继续维护现有设计事实源和唯一实施台账。
- 验证安排：批准单元覆盖无文档两次确认、正文持久化、反馈与恢复、空实施范围拒绝；真实 Pi SDK 父/CLI 子及临时 Git 覆盖无规划文件开发、固定验收与独立审查，核对收到的原批准正文、writer 收尾及原路径保护。先定向，再类型检查、默认全量和受影响的原生/Structured 容器流程。测试禁网、fake provider、模拟父 TUI、临时数据；不调用真实模型或操作业务会话。
- 原约束已复现：`node --import tsx test/support/run-tests.ts --test-name-pattern='无规划文档' test/unit/approvals.test.ts` **0/4、退出 1**，根 `adaptive-tests-LxdTpq`。四项新增场景均在旧“方案须列明规划文档”检查处失败，尚未修改产品；这证明旧接口会阻止简单任务直接确认，不是新改动引入的回归。
- 批准单元复验通过：`node --import tsx test/support/run-tests.ts test/unit/approvals.test.ts` **53/53、退出 0**，根 `adaptive-tests-GZjmVh`。无规划文件两次确认、原生正文保存、空实施范围拒绝、反馈/暂停恢复及 reload/正文篡改失效均通过，已有规划路径冻结与来源/持久化边界保持。没有修改开发、容器或 writer 算法；父交接始终附带原 Session 保护路径，无规划文档也不会产生空保护范围。
- 提示与说明已同步：现有 Skill、shape/plan/run 三个 Prompt、README 和技术方案均改为按需文档；反馈、暂停恢复、实施衔接与交付收尾不要求无文档任务补建文件。父系统提示同步该规则，已有规划文件仍按项目要求沿用并列为保护路径。类型检查 `node node_modules/typescript/bin/tsc --noEmit` 退出 0。
- 首次 SDK/CLI 定向调用只取得启动输出，执行工具随后返回 `unknown process id pi-16`，没有完整测试终态，**不计通过**。根 `adaptive-tests-F3xIIH` 的 5 个已记录 PID 均已退出；后续结果保存到 `/private/tmp/adaptive-simple-docs.uHiWrp/` 后复验，保留原现场。
- SDK/CLI 定向复验 **2/2、退出 0**：`node --import tsx test/support/run-tests.ts --test-name-pattern='无规划文档' test/integration/development.test.ts test/integration/document-entry.test.ts`，根 `adaptive-tests-CPg0tR`，证据 `integration-1.{log,rc}`。无规划文件时正式 schema/两次确认、未实施拒绝开发、空实施范围拒绝、子文件变更、固定验收及独立审查交接通过，三类子均收到原批准正文、进程退出且 lease 为空；本组命令使用 fake Docker。真实 SDK 的意见→修订正文→暂停→reload→新提案确认也通过，全程未调用文档读写工具、未创建规划文件。
- 原生真实容器定向 **1/1、退出 0**：`PATH="/private/tmp/adaptive-optimization.JoKPjD/bin:$PATH" node --import tsx test/support/run-tests.ts --containers --test-name-pattern='无规划文档' test/container/command.test.ts`，根 `adaptive-tests-JCa0s4`，证据 `native-1.{log,rc}`。真实 Pi 子开发、实际禁网容器自检/固定验收、独立审查完成；前后候选一致、真实退出 0，仅新增源码目录，恰有两次模拟 TUI 确认，PID/lease/容器均正常收尾。PATH 仅复用既有临时 `fd`，未安装或修改用户配置。
- Structured 完整回归 **17/17、退出 0**：`PATH="/private/tmp/adaptive-optimization.JoKPjD/bin:$PATH" node --import tsx test/support/run-tests.ts --containers --adapter /Users/sxie/.pi/agent/npm/node_modules/@howaboua/pi-codex-conversion test/structured/flow.test.ts`，根 `adaptive-tests-0m4WZt`，证据 `structured-1.{log,rc}`，无失败、取消、跳过或 todo。原插件 3.0.29 与真实禁网容器覆盖新增无规划文件开发/验收/审查，以及已有工具增强、补丁、取消和收尾边界；各用例已核对自己的进程与容器退出。最终 `npm run typecheck` 退出 0，证据 `typecheck-final.{log,rc}`。
- 默认全量首轮 `PATH="/private/tmp/adaptive-optimization.JoKPjD/bin:$PATH" npm run test:all` 退出 1：单元 **323/323**，集成 **164/165**；根分别为 `adaptive-tests-f7V4xt`、`adaptive-tests-wEi7sD`，证据 `all-1.{log,rc}`。唯一失败是旧开发入口测试仍断言空方案路径必须拒绝，本轮新行为下实际成功；E2E 因串行脚本前组失败未启动。不回退按需文档实现，仅将该测试更新为核对空实施范围及无实施确认仍不能启动子模型，保留子引用、审计和 lease 断言；待定向及剩余回归复验。
- 旧断言修正后定向 **1/1、退出 0**：`PATH="/private/tmp/adaptive-optimization.JoKPjD/bin:$PATH" node --import tsx test/support/run-tests.ts --test-name-pattern='正式开发入口缺少实施确认' test/integration/development.test.ts`，根 `adaptive-tests-tctTsL`，证据 `integration-fix-1.{log,rc}`。产品代码未再修改，原集成其余 164 项已通过，合计 165 个集成用例均取得通过证据；未将拆分复验写作 `npm run test:all` 整体退出 0。测试改动后 `npm run typecheck` 再次通过，证据 `typecheck-2.{log,rc}`。
- 原生完整容器组 **30/30、退出 0**：`PATH="/private/tmp/adaptive-optimization.JoKPjD/bin:$PATH" node --import tsx test/support/run-tests.ts --containers test/container/command.test.ts`，根 `adaptive-tests-nUw1B1`，证据 `native-all-1.{log,rc}`，无失败、取消、跳过或 todo。新增无规划文件完整交付、已有规划文件保护、实际命令/候选检查、超时、取消与失败收尾通过；用例按明确标签核对各自容器。
- E2E **14/14、退出 0**：`PATH="/private/tmp/adaptive-optimization.JoKPjD/bin:$PATH" npm run test:e2e`，根 `adaptive-tests-jiDncV`，证据 `e2e-1.{log,rc}`，无失败、取消、跳过或 todo。离线 tarball 的 26 个条目在无 node_modules 隔离目录加载，真实 CLI 的资源、只读/文档来源与角色边界通过。默认组共 502 个用例已分组取得通过证据（323 单元、165 集成含上述定向复验、14 E2E），另有原生容器 30 项和 Structured 17 项；未无故重复已通过组，不把打包测试写作安装或发布。
- 资源收尾：`audit-2.{log,rc}` 退出 0，只扫描本轮 11 个明确临时根的 844 份 JSONL、14296 条完整记录；416 个已记录宿主 PID 均 ESRCH，127 个执行标签（含 fake 引用）无实际容器残留。5 条不完整内容分别是四条批准损坏负例 `broken` 与一条详情末行追加夹具，已对照测试核实，保留原制品。首次审计用 Python `splitlines()` 错把 JSON 字符串内 Unicode 行分隔符当成记录边界，已按 JSONL 的 `\n` 分割重新核对；该审计解析问题不是产品记录损坏，没有改写测试原始记录或清理未知资源。
- 最终范围与边界：14 个已有文件，产品仅改 `src/approvals.ts` 与父入口提示，另含 Skill、三个 Prompt、README、两份规划文档及五个既有测试文件。没有新依赖、配置面、任务模式、兼容层或持久账本；两次确认、非空实施范围、固定候选验收、已有规划路径及父子 Session/Git/writer 保护保持。差异和 `git diff --check` 已核对，暂存区为空。全部新证据使用 fake provider、临时 Git 和模拟父 TUI，不代表真实模型判断简单任务的质量、实际节省效果或用户桌面体验；未调用真实模型、修改业务文件、安装、重载、提交、推送、PR、发布或部署。

### 13.43 简单任务按需规划文档完整本地提交

- 授权与结果：用户明确要求“先完整提交下代码”。本地完整提交成功，提交说明为 `feat: 简单任务按需维护规划文档`；本条在成功后补记并纳入同一本地提交，最终 hash 以 Git 原生记录为准。未推送、创建 PR、发布或部署。
- 提交范围：相对 `main / 6c8883d` 的全部 14 个变更文件，包含按需规划文档的批准入口、父提示、Skill、三个 Prompt、相关测试、README、技术方案和唯一实施台账。没有无关用户改动或临时测试制品入库。
- 提交前核对：工作区与暂存区差异检查通过；除持续追加进度的本台账外，25 个打包文件与第 13.42 节 E2E tarball 逐字节一致。已读回默认 502 个用例分组通过、原生容器 30/30、Structured 17/17、类型检查和资源审计记录；保留首轮旧断言失败及定向复验事实。本次仅复核既有验证证据，没有重跑测试或调用真实模型。
- 边界：未设置自定义 hooks 路径或提交签名开关，没有启用的 Git hooks，未修改 Git 配置或绕过 hooks。保持第 13.42 节批准、范围、恢复及验证限制；未安装或重载 Package、操作业务会话。真实模型的文档取舍质量与实际节省效果仍待试用。

### 13.44 恢复父 TUI 手动 Shell

- 状态：已完成实现与限定验收，用户桌面试用待复验。用户截图显示 reload 后两次手动 `pwd` 都被 `delivery-gate` 返回 `exit 1`，定位为 `policy.ts` 无条件替换 `user_bash` 结果，命令未运行。用户随后明确要求“不能影响原先的功能呀”，本轮按此修复手动 `!` / `!!` 入口；不扩大为任意插件、模型工具或所有 Pi 功能的兼容工程。
- 最小设计：仅父角色且公开上下文 `ctx.mode === "tui"` 时不拦截 `user_bash`，由 Pi 和用户已有 Shell 扩展继续处理原命令、输出、退出码、取消及 `!!` 上下文排除；不新增命令白名单、配置开关或 Shell 执行器。RPC/JSON/print、未知模式及子角色继续拒绝该入口，AI 工具调用继续走现有来源、批准、writer 和容器边界。
- 边界：人工命令属于用户直接操作，不取得 AI 批准、不成为固定验收证据，也不受扩展 writer lease 调度；用户手动改变候选后仍须按实际代码重新核验。既有关于“宿主 Shell 关闭”的约束明确限定 AI 与非 TUI 入口，不据此再次拦截人工命令。本轮不安装、重载、修改业务文件或操作用户终端。
- 验证安排：先补单元和真实 Pi SDK/临时 Git 复现，核对手动 `pwd`、Shell 语法/退出码、输出与取消、`!!` 的原生上下文语义、reload 及已有扩展接管；同时验证父模型 `bash`、RPC 和子角色没有获得宿主执行权限。先定向，再受影响回归与类型检查；禁网、临时配置和 fake provider，不调用真实模型。已读 Pi 公开 Extension/SDK 文档、完整 RPC 文档和 Shell 示例；集成复用公开事件与 Session API，不导入内部路径。
- 原症状已复现：`node --import tsx test/support/run-tests.ts --test-name-pattern='父 TUI 手动 Shell' test/unit/policy.test.ts test/integration/document-entry.test.ts` 为 **1/5、退出 1**；根 `adaptive-tests-ZjTqn3`，证据 `/private/tmp/adaptive-manual-shell.xFPhWn/red-1.{log,rc}`。真实 SDK 的 `pwd` 被返回固定退出 1，取消命令未启动，两种 `!`/`!!` 事件均被拦截；已有 Shell 扩展先返回结果的用例通过。这些发生于产品修改前，不是新实现回归。现仅调整父 TUI 放行和说明，待复验。
- 定向复验通过：`node --import tsx test/support/run-tests.ts test/unit/policy.test.ts` **23/23、退出 0**，`unit-1.{log,rc}`；真实 SDK 定向 `node --import tsx test/support/run-tests.ts --test-name-pattern='父 TUI 手动 Shell' test/integration/document-entry.test.ts` **3/3、退出 0**，根 `adaptive-tests-Jq0gOJ`、`sdk-1.{log,rc}`。实际 `pwd`、管道/重定向、输出分片、退出 7、取消后 Shell PID 退出、reload、`!!` 保存原生记录但排除模型上下文及已有扩展结果均通过；父模型 `bash` 仍被拒绝、手动操作不产生批准或 lease。`npm run typecheck` 退出 0，证据 `typecheck-1.{log,rc}`。这些使用真实 SDK/原生 Shell、模拟父 TUI 和 fake provider，不冒充用户实际按键或真实模型试用；文档交互及 RPC/角色边界回归待执行。
- 受影响回归通过：`PATH="/private/tmp/adaptive-optimization.JoKPjD/bin:$PATH" node --import tsx test/support/run-tests.ts test/integration/document-entry.test.ts test/e2e/rpc-resource-discovery.test.ts` **38/38、退出 0**，根 `adaptive-tests-1YrlLk`，证据 `regression-1.{log,rc}`，无失败、取消、跳过或 todo。正式打包/CLI 加载、RPC bash 实际拒绝且目标文件未创建、模型工具来源与开发角色边界，以及原文档批准、默认编辑、反馈/暂停/reload、取消和持久终态回归通过。本轮 23 个策略单元与 38 个集成/E2E 用例共 61 项通过；不把定向复验重复计数，不宣称默认全量或容器专项已重跑。
- 收尾与交付：`audit-1.{log,rc}` 退出 0，只扫描本轮 4 个明确临时根，17 个记录中的 PID 均已退出，没有容器记录或不完整 JSONL；没有查询或清理用户任务。最终改动为 7 个已有文件：`policy.ts`、两个既有测试文件、README、Skill、技术方案及本台账；没有新产品文件、依赖、配置、Shell 包装器或用户命令白名单。差异与 `git diff --check` 已核对，暂存区为空。验证使用 fake provider、真实 Pi SDK/CLI 和原生 Shell，TUI 上下文由夹具绑定；未操作用户实际终端、调用真实模型、重跑默认全量/原生容器/Structured 专项、安装、重载、提交、推送、PR、发布或部署。

### 13.45 仅显式进入交付时启用约束

- 状态：已完成限定实现、隔离验收与资源收尾；真实用户体验待试用。用户进一步明确“安装后无感”“调用 /delivery-shape 才启用”，覆盖第 13.44 节仅恢复手动 Shell 的范围假设。基线 `main / fc84c5e`，保留七个已有未提交文件；不修改用户正在运行的 Package 或业务项目。
- 最小设计：父入口默认仅注册交付命令，普通会话不安装门禁、重试提示、协调工具或 Structured 执行覆盖；显式 `/delivery-shape` 动态安装原交付运行逻辑。沿用原生 Session 记录启用意图及原工具名，reload/重开已启用会话保持约束但不恢复批准。子角色从启动即受控，不提供启用/退出入口。
- 退出：增加 `/delivery-exit`，仅在当前执行、排队消息、writer 和容器收尾可核实时，通过 Pi 公开 reload 恢复原工具实现及启用集合。未知 lease 不自动解锁；退出不是验收通过，也不删除原记录。不引入任务模式、配置面、第二份进度记录、自动完成检测或兼容层。
- 验证安排：先单元及真实 Pi SDK/CLI、临时 Git 验证未启用普通工具/插件、显式进入与退出、原阶段批准、reload/重开和未知收尾；再默认回归及受影响 Structured/原生容器测试。使用禁网 fake provider、临时配置和已有镜像，不调用真实模型、不操作用户桌面、不提交或发布。
- 首轮定向 `focused-1` **7/8、退出 1**，证据统一为 `/private/tmp/adaptive-activation.QONIyg/`。普通写入及启用后拒绝通过；退出未完成重载，定位为 SDK 测试宿主未绑定 `commandContextActions.reload`，已连接真实 `session.reload()`。随后 `regression-1` **68/69、退出 1**，唯一失败为旧测试要求无任何通知，与新增显式启用提示冲突；更新断言后 `regression-2` **75/75、退出 0**，覆盖普通/受控工具、真实 RPC 退出、两阶段与父文档回归、writer 操作锁。没有放宽产品批准或工具来源检查。
- Structured 定向 `structured-focused-1` **1/2、退出 1**：真实插件原工具→显式接管→退出恢复原实现及集合通过。另一项在新建 Session 后仍假定自动受控，违反新入口契约；其前半父子只读及原增强通过，现新 Session 显式调用 shape 后再验证原覆盖拒绝边界，待复验。不是原插件正常模式越权，未修改插件或回退受控检查。
- 完整 Structured `structured-all-1` **18/18、退出 0**，根 `adaptive-tests-OYIFJN`，真实插件 3.0.29、标准 Pi/禁网容器验证原批准、补丁开发、固定验收、独立审查、文档交接及异常收尾，原生与默认回归仍在运行。随后增加“进入前手动停用 view_image”断言，`structured-selection-1` **0/1、退出 1**，确认本次退出恢复早于原插件启动钩子，停用选择被重新覆盖。已把恢复放到 Pi 公开 `resources_discover`（全部 session_start 之后），单元同步模拟后续钩子；待定向复验，不将先前 18 项冒充新增边界通过。
- 默认回归 `PATH="/private/tmp/adaptive-optimization.JoKPjD/bin:$PATH" npm run test:all` **524/524、退出 0**（337 单元、172 集成、15 E2E），证据 `all-1.{log,rc}`；三根分别为 `adaptive-tests-AJlBMC`、`adaptive-tests-KIv0nn`、`adaptive-tests-3dzmj3`。原生真实禁网容器全组 `native-all-1` **30/30、退出 0**，根 `adaptive-tests-Z7xrhs`。覆盖既有轻量文档、两次批准、开发/验收/审查、候选与原生记录、取消及未知 writer 边界，无失败、跳过、取消或 todo；不把 fake provider 当作真实模型质量证明。
- 退出修复后的原生定向 `activation-final-1` **49/49、退出 0**，根 `adaptive-tests-xu8jub`，包括真实 SDK 普通写入/Shell/第三方工具、显式进入/退出、父系统提示开关、reload/重开、未知记录/操作锁、真实 RPC 默认与新会话正常使用，以及打包/来源回归。补充父启用提示中的完整 Skill 路径，支持不带需求调用 shape 后继续讨论；未启用时 Skill 隐藏于系统提示。
- Structured 停用选择取证修正：`structured-final-1` **2/3、退出 1**，默认四工具父子与无规划文档完整交付通过；停用选择仍失败。读回原生启用记录发现，旧断言在普通模型调用之前取工具快照，而原插件本来就会在回合前重设工具；这不是交付扩展应覆盖的原行为。现把停用和快照移至 shape 紧前。对该正确快照，临时复现旧 session_start 恢复的 `structured-selection-red-2` **0/1、退出 1**；恢复到 resources_discover 后 `structured-selection-final` **1/1、退出 0**，根 `adaptive-tests-J9OG2Y`。确认修复确实保留进入前停用选择，普通模型回合仍沿用插件原行为；没有修改原插件或增加配置适配层。
- 最终产品与测试已停止修改，`typecheck-final` 退出 0；完整默认组后仅补父 Skill 路径与退出恢复时机，分别由上述原生 49 项和 Structured 定向完成复验，没有无故重跑其余已通过组。正在核对最终范围、差异和本轮明确临时根的资源收尾，不提交、发布或干预业务任务。
- 收尾通过：`audit-1` 退出 0，只扫描本轮日志明确指向的 14 个临时根，共 16453 条完整记录、473 个记录中的 PID、143 个执行标签；进程均 ESRCH，无残留容器。三条不完整 JSONL 已逐条读回并对照测试：两条批准损坏负例 `broken` 和一条详情末半行 `{"type":`，保留原制品；没有强制解锁、修改或清理用户任务。最终 `typecheck-delivery` 与 `git diff --check` 通过，暂存区为空。
- 最终范围：连同第 13.44 节已有改动共 20 个路径。新增仅 `src/activation.ts` 及其单元测试，删除同名 shape Prompt，保留 Extension 命令唯一入口；修改父入口、策略、批准 pending 与 writer 空闲核查、现有测试/夹具，以及 README、Skill、plan/run Prompt、技术方案和本台账。没有新依赖、配置开关、任务模式、插件执行包装器、兼容迁移或第二份进度系统。
- 交付边界：默认会话不安装交付执行覆盖与权限策略；已启用会话重载仍受控但不恢复旧批准，正常退出恢复原工具实现及进入前选择。验证为 macOS、Pi 0.85.1、Node 25.2.1 下的 fake provider、真实 SDK/CLI、模拟父 TUI、临时 Git 和既有本地禁网镜像；Structured 使用原插件 3.0.29。没有真实模型、用户桌面、完整业务交付或其他平台的新验收，不宣称任意插件行为均已验证。未提交、推送、创建 PR、安装、重载运行会话、发布或部署；用户当前任务正常收尾后重载本地 Package 可试用。

### 13.46 显式启用交付完整本地提交

- 授权与结果：用户明确要求“完整提交下代码”。本地完整提交已成功，提交说明为 `feat: 仅显式进入交付时启用约束`；本条在成功后补记并纳入同一本地提交，最终 hash 以 Git 原生记录为准。没有推送、创建 PR、发布或部署。
- 提交范围：相对 `main / fc84c5e` 的全部 20 个变更路径，覆盖第 13.44—13.45 节的父手动 Shell、默认不接管、显式启用/正常退出、原权限边界与对应回归，以及 README、Skill、Prompt、技术方案和唯一台账。新增仅启用模块及其单元测试，删除同名 shape Prompt；没有用户配置、业务文件或临时制品入库。
- 提交前核对：分支、全部变更与暂存区范围已复核，工作区和暂存区差异检查通过；除本台账外，25 个交付文件与最终原生定向的打包输入逐字节一致。已读回默认 524/524、原生容器 30/30、Structured 18/18、最终定向、类型检查及资源审计的退出 0 记录，保留原失败和修正证据。本次仅复核已有结果，没有重跑测试或调用真实模型。
- 边界：未设置自定义 hooks 路径或提交签名开关，没有启用的 Git hooks；未修改 Git 配置或绕过 hooks。沿用第 13.45 节的平台、恢复和真实体验限制；没有安装、重载或干预用户运行会话。

### 13.47 README 面向首次使用者整理

- 状态：已完成文档整理与本地检查，GitHub 页面渲染未实测；截图所示 IDE 跳转已调整链接，实际点击待复验。用户指出 GitHub 首页过于复杂，希望像会话中的流程说明一样简明，并缺少流程图和时序图。本轮按此重写 README，同步首页过期的当前摘要；基线 `main / ab2780a`，开始时工作区干净。
- 最小范围：README 先说明用途、默认不接管、完整流程和最短启动步骤，补 GitHub 原生 Mermaid 流程图与协作时序图；简单任务、两次确认、暂停/恢复与退出保留简明用法。详细机制引用既有技术方案，环境准备和开发验证的必要操作说明补入该文件，不新增文档目录、工具、依赖或运行机制。历史实施证据继续保留。
- 验证安排：对照现有入口、Skill 和技术方案核对图文语义，检查 Markdown、示例 JSON、相对链接与章节锚点、差异及变更范围；本地有可用 Mermaid 解析器时进行语法验证。仅文档改动，不为此新增测试或重跑运行时回归，不操作桌面、调用真实模型、提交、推送或发布。
- 完成内容：README 从 12486 字符缩到 3552 字符（含 Markdown 和图表源码，约减少 72%），首屏说明用途、默认不接管与按需文档，加入完整流程图、两次确认示例、三步启动、协作时序图和常用操作。图中区分固定验收通过/失败，仅通过后安排必要审查，保留原范围返工及阻塞暂停。详细机制链接既有章节，原环境要求、Structured 接入和开发测试说明整理到技术方案第 14 节。
- 本地检查通过：复用已有 `marked` 解析三个 Markdown，核对 14 处相对链接及章节锚点、一个 JSON 示例、全部代码围栏闭合和两个 Mermaid 图表围栏；按现有入口、Skill、技术方案及 manifest 人工核对流程、命令、配置和验证边界。`git diff --check` 通过。没有失败待处理；当前仓库与 Pi 安装依赖中未找到 Mermaid 解析器/渲染器，因此没有执行 Mermaid 解析或 GitHub 页面渲染，未为文档安装依赖、调用外部渲染服务或启动浏览器。
- 交付范围：仅 README、技术方案和本台账三个已有文件；没有改动产品代码、测试、配置或历史实施章节，没有新增文件、运行机制或文档验证脚本。工作区保留本轮文档改动，暂存区为空；未提交、推送、发布、运行源码回归、调用真实模型或操作用户会话。首页测试数字引用第 13.45 节既有记录，不代表本次重新执行。
- 用户反馈后调整：用户指出此前已有清晰流程图，现直接恢复会话说明中的纵向完整流程，分别展示需求讨论、方案确认、实施范围与验收说明、实施确认、开发验收、必要审查、返工和退出；协作时序图保留。README 当前为 3645 字符。已有 `marked` 核对两个图表围栏分别为 `flowchart TD` 与 `sequenceDiagram`，Markdown 结构及差异检查通过；仍未执行 Mermaid/GitHub 渲染，仅修改主图与本条记录，未提交或推送。
- 命令清单补齐：用户要求每个命令都列出，现将常用操作改为命令速查，逐项说明七个用户命令的参数、用途和使用前提，单列 `status details`，补明 `tasks` 可选任务 ID、plan/run 为可选辅助提示，以及原生 `/reload`、`!`、`!!` 和两种界面的 Esc 含义。对照实际父入口注册、批准恢复、任务详情和两个 Prompt 核实；内部子进程握手与收尾命令不作为用户操作入口。复用已有 `marked` 一次性核对七个命令全部对应表格条目、八行用法、14 处相对链接及锚点和两个图表围栏，`git diff --check` 通过。本次仅追加 README 与本条记录，保留已有文档改动；没有新增校验脚本、改动运行行为、运行源码测试或渲染 GitHub 页面，未提交、推送或发布。
- 通俗表达与图示优化：用户明确要求润色并尽量使用大白话。README 首屏改为“先和你商量清楚，再动手开发，最后拿出检查结果”，在流程图前解释验收；保留纵向完整流程，将开发自测与验收拆开，失败明确返回修改。时序图使用同一开发、验收和必要审查循环表示返工，并分别呈现通过后交付、需要暂停时说明进展和原因。命令表保留全部七个命令及八行用法，暂停、关闭详情和重载压缩为三条说明，删减重复退出解释；启动步骤补明项目目录与 `pi` 命令。全文核对默认不启用、两次确认、按需文档、只读验收审查及恢复边界，未改变产品流程。已有 `marked` 核对 Markdown、一个 JSON 示例、14 处相对链接与锚点、命令表完整性及两个图表围栏通过，差异检查通过；人工复读后仅微调三处措辞。未执行 Mermaid/GitHub 渲染、运行源码测试或新增验证脚本。本次仅修改 README 与本条记录，保留此前技术方案改动，未提交、推送或发布。
- Structured 章节跳转调整：用户截图显示点击 README 的“Structured 接入说明”后出现 `Cannot find header to navigate to`。目标文件及第 14.2 节均存在，原链接符合此前推算的 GitHub 标题锚点，但这不能证明 IDE 实际跳转成功。只读核对本机 IntelliJ Markdown 插件，确认原报错文案和 HTML `id`/`name` 锚点支持；尚未确认自动标题定位失败的具体内部原因。本次仅在该节前增加显式 `structured-setup` 锚点并更新 README 对应链接，其他章节链接保持。复用 `marked` 核对 14 处相对链接，并检查输出 HTML 中定位点唯一且紧邻正确标题；首轮因验证表达式遗漏正常的 `<p>` 包裹而退出 1，读回局部 HTML 后只修正临时验证表达式，复验退出 0。差异检查通过，没有新增验证文件或改变产品行为；未操作桌面、修改 IDE 配置、运行源码测试、提交、推送或发布。实际 IDE 点击与 GitHub 页面仍待复验，不能将本地文本检查写成原症状已验证消失。
- 跨文件章节链接统一处理：用户再次截图，报错发生在另一条“环境准备”链接。继续只读核对本机 IntelliJ Markdown 插件的预览入口，确认 `MarkdownLinkOpenerUtil` 与 `MarkdownLinkOpenerRemoteApiImpl` 的跨文件带片段跳转只查询 `HeaderAnchorIndex`；HTML 锚点的编辑器引用支持不代表该预览入口会采用，上轮据此补定位点的方案不充分。现删除临时 HTML 锚点，将 README 七处跨文件章节链接统一改为直接打开文档，并明确标注第 14.1、14.2、14、8、10、11、14.3 节；四处 README 页内导航保留。无片段的预览路径不查询标题索引，但本轮不宣称恢复自动定位到具体章节。`marked` 检查十处文件链接、四处页内导航、七个章节标注以及生成 HTML 的目标 URL 通过；首轮 HTML 断言忽略中文文件名正常的百分号编码而退出 1，只修正临时断言后退出 0，差异检查通过。没有运行或修改 IDE、索引和配置，也没有新增依赖、验证文件或产品机制；编辑器实际点击仍待复验，未运行源码测试、提交、推送或发布。

### 13.48 移除 Docker，统一使用本机开发环境

- 状态：本机改造及限定自动化验收完成；真实模型、桌面操作和完整业务交付待验证。用户在了解本机 Shell 的文件、网络和后台进程边界后明确要求“能不能去掉docker，全都转移到本机开发呢”，本轮据此实施；覆盖此前只接受容器执行的选择。保留第 13.47 节三个已有文档改动，基线 `main / ab2780a`；不操作业务工作区或用户正在运行的 Pi。
- 最小方案：原生命令复用 Pi 公开 `createLocalBashOperations`，Structured 复用已核实插件自带的本机执行与补丁能力；移除镜像、挂载、Docker socket 和容器生命周期。批准正文继续明确任务范围和固定验收命令，文件工具保留路径检查；本机 Shell 按当前用户权限执行，范围声明不构成 OS 隔离。讨论和独立审查使用读取工具，不因本机化给未批准阶段开放通用 Shell。
- 规模检查：沿现有审批、开发、候选、验收、Structured 和 writer 模块调整，仅将容器执行文件及相应测试替换为本机执行；不保留 Docker 后端、兼容迁移、运行模式开关，不自研沙箱、子 Agent runtime 或通用后台进程平台。正常会话默认不接管，显式进入/正常退出及工具恢复保持。
- 执行与证据：复用原生执行输出、真实退出码、取消与等待结果，未交回调用阻止新写入；写入交接只证明受控工具调用已结束，不承诺任意脚本脱离管理的后台后代已消失。验收仍绑定明确源码/输入范围、命令顺序和前后候选，改为记录本机环境，不能把文件指纹说成整台电脑或全部依赖的快照。
- 验证范围：①本机执行、批准与候选/验收；②Structured、本机读取和角色边界；③临时 Git/真实 Pi 的开发→失败返工→验收→审查及取消/恢复；④默认回归、Structured 专项、类型检查、文档同步与临时资源核对，均取得下列限定证据。全部测试使用系统禁网、临时 HOME/配置及 fake provider，不读取真实凭据、不运行真实模型、不安装依赖或操作 Docker。新的提交、推送和发布未授权。
- 已验证原生本机链路：移除 `container.ts`，复用公开 `createLocalBashOperations`；实施确认改为本机命令与额外验收 `inputs`，不再检查镜像。候选枚举与验收脱离挂载，保留命令顺序、真实退出码、代码前后指纹和原始 Session 绑定。原容器组中与交付有关的测试迁入默认集成组 `test/integration/local-command.test.ts`，删除只属于容器隔离、OOM 和 Docker 生命周期的测试及假 Docker。`test/unit/approvals.test.ts` + 本机集成 **75/75**，制品 `/private/var/folders/b0/vsckn5zn3w3dms0_3scbhv400000gp/T/adaptive-tests-W2T0kU`，完整输出 `/tmp/adaptive-local-verification.log`。包含真实 SDK 父、CLI 子、本机命令、详情输出、同范围返工、固定验收、审查、断流恢复、取消和超时；TUI 选择与 Provider 为测试替身。
- 本轮验证过程：首轮执行六个基础单元文件 **116/117**，唯一失败为旧批准测试仍传已删除的 `container` 参数，已改验收输入并在上述 75 项复验通过；制品 `adaptive-tests-u4g96D`。随后一次混合默认单元/集成探索使用 dot 输出，未取得汇总且未结束，已向本次测试入口发送 SIGINT，不计为通过；后续改为保留完整输出分组复验。类型检查已通过一次，最终修改后仍须重跑。Structured 普通→进入→退出定向已见通过，完整专项尚待验证，不扩大为真实桌面或真实模型证据。
- 后续失败与处理：首次 `npm run test:all` 在单元 **305/306** 停止，剩余断言仍要求已移除的只读容器关闭字段，已删除该旧契约断言；下一轮单元 306 通过、集成 **190/192**，失败分别为旧提示文案和测试 PATH 缺少 `fd`。文案按本机边界更新；`fd` 缺失属于测试环境前置条件，未安装或联网下载，而是将既有缓存 `fd 10.4.2` 复制至 `/tmp/adaptive-delivery-tools.g6KzDL` 后只加入本次测试 PATH。上述失败日志为 `/tmp/adaptive-default-verification.log` 和 `/tmp/adaptive-default-final.log`，已由最终默认回归覆盖。
- Structured 修复证据：初轮专项 **8/17**，本次改造引入的只读子握手不匹配已修复：启动时加载正式插件工具定义供来源核实，READY 与每轮请求前恢复读取工具并限制当前角色。原插件会在 input 钩子重设工具，现已覆盖实际请求的工具列表，父/只读子无 Shell，开发子仍使用本机 exec bridge、PTY 和补丁。PTY 初次失败为测试系统策略不允许 `openpty`，仅在显式 adapter 测试中开放伪终端设备，普通文件边界、禁网与临时 HOME 保持。另一个断言在故意替换 `read` 后仍要求模型可见该工具，已把正常增强检查移到替换前，并保留覆盖后的实际拒绝检查。相关过程日志 `/tmp/adaptive-structured-verification.log`、`/tmp/adaptive-structured-focused.log`、`/tmp/adaptive-structured-visible-tools.log`、`/tmp/adaptive-structured-ready.log`；全部由最终专项覆盖。
- 最终默认验证：`PATH="/tmp/adaptive-delivery-tools.g6KzDL:$PATH" npm run test:all` **513/513**，单元 **306/306**、集成 **192/192**、E2E **15/15**，零跳过。输出 `/tmp/adaptive-default-with-fd.log`；临时制品根分别为 `adaptive-tests-Krb7Yy`、`adaptive-tests-UxpIiJ`、`adaptive-tests-0Y3JGj`，均位于 `/private/var/folders/b0/vsckn5zn3w3dms0_3scbhv400000gp/T/`。原容器交付测试迁入默认组，其中详情、过程错误、断流后不重放、原授权返工、固定验收命令/候选约束、取消和未知终态均保留验证。
- 最终 Structured 验证：使用同一测试 PATH，`node --import tsx test/support/run-tests.ts --adapter /Users/sxie/.pi/agent/npm/node_modules/@howaboua/pi-codex-conversion test/structured/flow.test.ts` **17/17**，输出 `/tmp/adaptive-structured-final.log`，制品 `adaptive-tests-GLduhI`。随后补充父同回合并发 Shell 均拒绝的独立测试，按 `--test-name-pattern='父同回合并发 Shell'` 定向 **1/1**，输出 `/tmp/adaptive-structured-parent-boundary.log`，制品 `adaptive-tests-5DFlkc`；这是 17 项整组加 1 项定向，不称最终 18 项整组重跑。已覆盖普通→进入→退出、默认四工具和七工具、无文档开发/验收/审查、原始制品取证、取消/未交回/崩溃/记录篡改、PTY、多子进度归属与本机补丁新增/移动/删除。
- 交付检查：最终 `npm run typecheck`、`git diff --check` 通过；README 保留 2 个 Mermaid 图和全部 7 个交付命令，README/技术方案/Skill 相对文件链接均可解析。五个最终测试根记录的 **187 个子 Pi PID 全部已退出**；此检查不宣称任意本机脚本后台后代均已清理。README、技术方案和 Skill 已同步本机环境与真实边界，未沿用容器隔离或镜像要求。测试代码与制品中不含真实凭据，未修改用户 Pi 配置、安装目录或业务仓库。
- 兼容性与未执行项：保留显式启用、两次确认、按需文档、writer、固定验收及独立审查，删除旧 `container` 参数与容器执行记录，不提供迁移或双后端。Shell 使用当前用户权限，不能承诺路径、网络、依赖快照或任意后台后代隔离。运行验证仍限 macOS、Node `25.2.1`、Pi `0.85.1` 与 Structured 插件 `3.0.29`；真实模型本机任务、真实桌面操作、完整业务交付与其他平台/版本未执行。下一步是按用户授权在实际项目试用进入→交付→退出；本轮未 commit、push、PR、npm publish 或部署。

### 13.49 本机开发改造与 README 整理的本地提交

- 状态：本地完整提交已完成。用户在第 13.48 节交付后明确要求“先完整提交下代码”，本轮据此提交第 13.47—13.48 节的全部代码、测试及配套文档；起点为 `main / ab2780a`，不包含推送或发布。
- 范围：本机执行替换 Docker、Structured 适配与角色工具边界、审批/候选/验收调整、相关测试迁移和假 Docker 删除，以及 README、技术方案、Skill 和唯一台账。核对全部未暂存及未跟踪路径，新增本机执行模块、集成测试和单元测试一并纳入，没有依赖、用户配置、IDE 元数据或业务项目改动。
- 提交前验证：差异检查通过，已复核第 13.48 节原始日志中的默认 **306 + 192 + 15 = 513** 项、Structured **17 项整组 + 1 项定向**全部通过且无失败、取消或跳过。类型和文档检查沿用该节最终证据，本次未重复运行测试、调用真实模型或操作用户会话；真实模型、桌面与完整业务交付的验证缺口保持。
- 提交结果：`git commit` 退出码 0，提交说明为 `feat: 移除 Docker，改为本机开发并简化使用文档`，共 34 个变更文件（测试移动计为一个）。本条完成状态在成功后补记并一并纳入同一本地提交，最终 hash 以 Git 原生记录为准；未 push、创建 PR、npm publish 或部署。

### 13.50 真实模型本机小修复试用

- 状态：限定真实模型试用完成，用户桌面与业务项目仍待验证。用户接受临时小故障项目作为试用任务，并要求“或者可以你帮我验证下吗”；结合本会话已有真实模型验证授权，本次验证真实模型、真实 Pi SDK 父/CLI 子及本机工具，不操作用户桌面或业务项目。两次确认由 SDK 测试宿主承接，助手逐份阅读提案后返回选择；明确不是用户真实终端按键或新的产品批准入口。
- 最小范围：原生 Pi 单环境、一个空数组求和修复，观察普通编辑/命令→显式进入→两次确认→开发→固定验收→独立审查→退出→普通编辑/命令。三个临时准备、取证和 SDK 驱动脚本，另一个事后独立结果/资源核对脚本，不增加产品代码、依赖、测试框架或运行模式；项目已有源码、四项测试和独立备忘，不预先给模型正确补丁或要求它创建规划文档。
- 已完成准备：临时根 `/private/tmp/adaptive-small-fix.49YzTv`，产品副本冻结自 `d9d69a5` 并保存逐文件摘要，临时 Git 无 HEAD，模型开始前 `node --test` 实际退出 1，空数组触发 `Reduce of empty array with no initial value`，其余三项通过。`setup.mjs`、`runner.mjs` 语法检查及 setup 均退出 0；用户目录列举和临时根外写入由系统策略实际拒绝。初始失败保留在 `evidence/before-tests.txt`，尚未发起模型请求。
- 模型与边界：使用已有默认模型 `openai/gpt-6-astra`，父初始推理级别 medium，子可按任务选择级别。临时 `enabledModels` 仅设置该模型，但它不是对子模型调用的硬限制；实际选择与失败另记下文，不宣称全部请求均使用同一模型。独立 HOME/配置，Pi 自己读取已有认证引用，不复制或输出认证内容、不修改用户配置；试用读取工具额外限制在临时项目/资源/原始记录。Provider 出站网络允许，项目命令按任务要求不联网；这不是模型与 Shell 分离的 OS 网络隔离。没有 Docker 操作、安装、提交或发布。
- 普通前测与方案阶段已验证：真实模型通过原生 read/edit/bash 保留 `notes.txt` 原行并追加指定前测文本，`node --version` 实际返回 `v25.2.1`，未触发交付批准。随后显式进入，模型读取 Skill、源码、四项现有测试及备忘，零追问，提出只改 `src/sum.mjs`、空数组提前返回 0 的方案，主动选择 `design.paths=[]` 且不新建规划文件。原生提案 `567610d4-06ef-4daf-8176-0821a6e8c83e` 已完整读回，助手通过测试宿主确认；方案原文及模拟选择分别保存在 `evidence/confirmation-1.json` 和 `evidence/decisions.jsonl`。父 Pi PID `6351`，原生 Session ID `01a08a23-da20-778b-8cbf-1d9e6714bbe1`；实施尚待确认。
- 实施提案已核对并通过测试宿主确认：原生提案 `e582a527-347b-4299-997d-8af3dae8b97b` 只授权 `src/sum.mjs`，固定命令为 `node --test`，额外验收输入为 `test/`、`notes.txt`、`AGENTS.md`，明确本机 Shell 权限及停止条件。原文保存在 `evidence/confirmation-2.json`；方案确认后模型自行发起实施确认，无外层“继续”消息，两份正文未重复全文。开发、固定验收及审查尚在推进。
- 首次真实失败与自主恢复：父从模型目录选择 `openai/gpt-5.4-mini / medium`，接口拒绝该模型，子未执行工具或改文件，`delivery_develop` 返回失败并保留子 Session `2026-09-10T07-10-42-265Z_01a08a27-8a4d-7316-a56e-40e349a3edd8.jsonl`。父自行读取原记录，改用当前父模型在原批准范围重试，未新增确认或外层提示；第二开发子 PID `6549` 正常返回，父开始核对源码。目录可列出不等于账户接口实际支持，保留为本轮接入摩擦；未修改产品或隐藏失败。模型选择省略开发自测，约定由后续独立固定验收执行现有命令，不能把开发读回称为自测通过。
- 开发与固定验收已验证：开发子只在 `src/sum.mjs` 增加 `if (values.length === 0) return 0;`，父实际读回。独立验收子 PID `6573`、Session `2026-09-10T07-11-28-398Z_01a08a28-3e8d-76a4-87b4-8bf4eb8c2501.jsonl`，真实执行 `node --test` **4/4**、退出 0；执行引用 `85185909-4c49-4274-940b-fdd59eaffb85` 为 settled/passed，子持久关闭 clean。验收前后候选均为 `3d48759976285324f850f756c2b4c68489d99d44a8cf388daecd23d512a76da0`，包括源码、测试、备忘与项目规则。父自行继续独立审查，尚待审查与退出后普通操作。
- 独立审查与裁决已完成：审查子 PID `6599` 的原生 Session `2026-09-10T07-11-49-779Z_01a08a28-9212-76dc-b068-aa1c5453d65f.jsonl` 实际读取源码、输入、差异及验收记录，未发现功能缺陷，但明确指出临时 Git 无 HEAD、`before/` 为空，差异本身不足以证明只改一行。父随后读取实施前材料及子原始编辑记录，并核对当前测试和备忘后交付；没有把空基线说成已有提交基线，也没有为了关闭证据缺口重新改代码或验收。
- 退出及普通后测已通过：父交付后 `/delivery-exit` 正常重载，前后启用工具集合均为原生七工具；真实模型再次通过 read/edit/bash 在备忘追加指定后测文本并执行 `node --version`，没有新增交付批准。驱动正常退出 0，既有测试再次实际 **4/4**，输出 `evidence/after-tests.txt`。整个项目没有增加任何规划文件，两个方案/实施提案、两次测试宿主选择，无澄清问题、无额外“继续”或恢复指令；前后测输入及需求之外没有外层代写业务代码。
- 最终独立核对通过：`audit.mjs` 语法检查、系统策略下实际执行均退出 0，事后独立调用覆盖空数组、单项、多项、负数、小数、保留负零及不修改输入 **7/7**，源码在核对中不变；这些为事后外部核对，不冒充预先冻结的黑盒。原四项测试和 AGENTS.md 摘要不变，备忘原文及两个预期追加行精确匹配，源码仅新增一行；项目仍只有初始四个文件，27 份产品副本均与冻结摘要一致。五个 Pi PID `6351/6538/6549/6573/6599` 全部 ESRCH，四个子会话均有唯一持久关闭记录，writer 文件为空，退出检查正常通过。完整结果保存于 `evidence/audit-result.json`，不扩展为任意后台后代均已清理。
- 体验与失败事实：从普通前测到后测约 **6 分 44 秒**，其中交付阶段约 **6 分 4 秒**，两次等待助手核对选择合计约 **2 分 56 秒**；时间包含模型/工具执行和验证宿主等待，不是生产性能基准。取证钩子观察到 30 次请求与 30 个 HTTP 200，另有首次 mini 子原始错误明确为 HTTP 400：`The 'gpt-5.4-mini' model is not supported when using Codex with a ChatGPT account.`，该失败没有被同一钩子捕获，不能说总请求只有 30 次或全部成功。模型目录可见性与账户调用能力不一致是已观察到的使用卡点，尚未修改产品处理它。
- 交付范围与未执行：主仓仅更新本台账，产品仍为 `d9d69a5`；临时脚本、项目及原始证据全部保留在上述独立目录。本轮没有重复默认全量、Structured 专项或运行新的 Structured 真实模型试用，没有真实 TUI 按键/视觉、跨平台或完整业务验收，没有修改用户配置/安装、操作 Docker、安装依赖、提交、推送、创建 PR、发布或部署。新证据支持这个限定小任务的流程与无规划文件行为，不能据此证明所有小任务普遍提效。

### 13.51 子任务固定跟随父 Pi 模型

- 状态：实现及限定自动化验证完成；后续本地提交见第 13.52 节。用户明确要求“父 pi 选择了哪个模型，子 agent 也是根据那个模型来，只不过推理级别不一样”，并授权优化。
- 最小范围：四类委派共用父当前 `ctx.model`，只接受 `agent: { thinking?, reason }`，省略级别继承父；移除模型目录工具及 `agent.model`，不加兼容入口、探测、配置或新生产文件。父每轮提示提供当前模型支持级别，子启动状态核验与原授权、验收边界继续保留。切换父模型只影响后续启动任务。
- 文档：同步 README、Skill 与技术方案，保留第 13.50 节真实失败和恢复的历史证据。
- 验证范围：模型继承与切换、旧参数拒绝、推理级别支持、四类真实 Pi 委派与原生/Structured 开发验收审查，以及默认回归与类型检查。使用临时目录和禁网 fake provider，不调用真实模型或修改用户配置。
- 定向已验证：`npm run typecheck` 退出 0；`test/unit/agent-selection.test.ts` 与 `test/unit/policy.test.ts` **26/26**，原生 `test/integration/development.test.ts` 模型继承、四类参数拒绝、实际启动状态不匹配与验收/审查级别定向 **5/5**，Structured 有/无规划文档的完整开发→验收→审查 **2/2**。记录分别为 `/tmp/adaptive-parent-model-typecheck.log`、`/tmp/adaptive-parent-model-unit.log`、`/tmp/adaptive-parent-model-native.log`、`/tmp/adaptive-parent-model-structured-focused.log`。真实 Pi 请求确认同一父模型分别使用 medium/low/high，父模型及级别不被子配置改写；未指定级别与非推理模型 off 均覆盖。正在补验运行途中父切换模型，以及默认和 Structured 整组回归。
- 在途切换已验证：`test/integration/development.test.ts --test-name-pattern='真实子审查运行中切换父模型'` **1/1**，记录 `/tmp/adaptive-parent-model-inflight.log`。在真实审查子发起首个请求后，通过普通询问回调切换父模型；子后续请求保持原模型/low 并正常结束，父保持新模型/off，writer 交回且子 PID 已退出。不是只检查调用前的静态配置。默认及 Structured 整组回归进行中。
- 整组进度：默认单元 **306/306** 通过，集成/E2E 及 Structured 整组尚在运行；最终测试改动后的 `npm run typecheck` 退出 0，日志 `/tmp/adaptive-parent-model-typecheck-final.log`。父项仍为进行中，不把部分通过写成整组完成。
- Structured 整组完成：`node --import tsx test/support/run-tests.ts --adapter /Users/sxie/.pi/agent/npm/node_modules/@howaboua/pi-codex-conversion test/structured/flow.test.ts` **18/18**、退出 0，日志 `/tmp/adaptive-parent-model-structured-all.log`，临时根 `/private/var/folders/b0/vsckn5zn3w3dms0_3scbhv400000gp/T/adaptive-tests-caVk6Z`。覆盖普通→进入→退出恢复、父子工具、同模型不同级别的有/无文档交付、错误/取消/崩溃/未知终态、PTY 和原始证据。默认集成/E2E 尚待完成。
- 默认整组完成：`PATH="/tmp/adaptive-delivery-tools.g6KzDL:$PATH" npm run test:all` 单元 **306/306**、集成 **193/193**、E2E **15/15**，合计 **514/514**，三组均零失败、取消或跳过。日志 `/tmp/adaptive-parent-model-all.log`；临时根依次为 `/private/var/folders/b0/vsckn5zn3w3dms0_3scbhv400000gp/T/adaptive-tests-5hF5EA`、`adaptive-tests-SCHUC6`、`adaptive-tests-FyChuO`。既有批准、writer、固定候选验收、独立审查、普通启动及退出恢复回归通过。上述全组在最终产品与测试代码上运行，不引用旧版结果。
- 兼容与交付范围：修改 3 个生产文件、4 个测试文件及 README/Skill/技术方案/本台账；直接移除 `agent.model` 与 `delivery_models`，旧选模型调用不再接受，不加兼容垫片。未新增依赖、配置、模式或生产文件；保留本轮前已有的第 13.50 节未提交试用记录。实际环境仍为 macOS、Node `25.2.1`、Pi `0.85.1`，Structured 插件 `3.0.29`；没有新真实模型、桌面操作、跨平台或完整业务交付验收，不能据此宣称费用或取舍质量改善。未调用真实 Provider、修改用户配置、安装依赖、操作 Docker、提交、推送、创建 PR、发布或部署。

### 13.52 父子同模型优化与试用记录本地提交

- 状态：本地提交完成；用户明确要求“先完整提交下”。
- 范围：第 13.51 节父子同模型与推理级别调整、对应测试及文档，并纳入此前第 13.50 节真实模型小修复试用记录，共 11 个变更文件。
- 提交前复核：已检查全部差异与暂存状态，差异检查通过；复核第 13.51 节原始日志中的默认 **514/514**、Structured **18/18** 和类型检查通过结果。产品及测试代码没有新增变化，本次不重复运行测试或调用真实模型；真实桌面、跨平台及完整业务交付的验证缺口继续保留。
- 提交结果：`git commit` 退出码 0，提交说明为 `feat: 子 Agent 固定跟随父 Pi 模型，仅调整推理级别`。本条完成状态在成功后补记并纳入同一本地提交，最终 hash 以 Git 原生记录为准；未 push、创建 PR、npm publish 或部署。

### 13.53 父子同模型的真实小修复复验

- 状态：限定真实模型复验完成，用户桌面与业务项目仍待验证。用户接受“用刚提交的新版本，再跑一次真实模型的小修复完整流程”，明确回复“可以，验证下”。本次真实 Provider 调用及临时项目验证已获授权；两次阶段确认仍由助手阅读具体提案后通过 SDK 测试宿主模拟，不操作用户桌面，也不冒充用户真实按键。
- 最小范围：沿用第 13.50 节空数组求和故障及普通操作前后测，在新的 `/private/tmp/adaptive-parent-model-real.lGnR6K` 中运行原生 Pi。复用四个临时准备/驱动/取证/核对脚本，不增加产品代码、依赖、模式或配置面。产品从干净 `54bbf41a41fce9d0c37e9f989f316d16d0ff90f4` 复制并冻结摘要，上次项目与证据保持不变。
- 验收目标：普通编辑及命令→显式进入→分别确认方案和实施→开发→固定验收→独立审查→退出→普通编辑及命令；核对父子实际请求模型一致、子只调整推理级别、两次确认、零规划文档、测试及备忘保留、候选一致与 writer/子进程收尾。另在执行前准备七项外部行为核对，不要求模型采用特定补丁或推理级别，也不向模型提供外部检查脚本。
- 准备已验证：三个 `.mjs` 语法检查通过；初次准备脚本因 CommonJS `require.resolve` 不能解析 Pi 的 ESM-only 根导出而退出 1，尚未生成项目或发起请求。改用 Node 公开 `import.meta.resolve`，`node --experimental-import-meta-resolve .../setup.mjs` 退出 0；原始 `node --test` 按预期退出 1（空数组报错，其余三项通过），记录 `evidence/before-tests.txt`。用户目录列举与临时根外写入探测均被系统策略拒绝。
- 模型与边界：Pi 既有默认模型 `openai/gpt-6-astra`，父起始 medium；没有设置 `enabledModels` 或外层子模型限制，由产品自身继承父模型。独立 HOME/配置，真实认证由 Pi 自己读取引用，不输出或复制凭据；系统策略允许 Provider 出站访问、限制临时根外写入，项目命令按需求不联网，不宣称模型与 Shell 的网络隔离。尚未发起模型请求，主仓只更新本台账，无提交、推送或发布。
- 普通前测与方案已验证：真实父 Pi PID `24330`、Session `01a08a4e-4227-716c-9758-ec9919550742`，先通过 read/edit/bash 保留备忘并追加前测行、实际运行 `node --version`，未进入交付或产生批准；显式 shape 后模型读取规则、源码、现有测试及备忘，零追问，主动选择 `design.paths=[]`。方案只改 `src/sum.mjs`，空数组提前返回 0，非空路径保持原逻辑，保留测试与备忘；助手完整读回 `evidence/confirmation-1.json` 后，通过测试宿主确认提案 `60d80dba-a412-4af7-80ab-d76449014863`，不提前授予实施权限。实施尚待确认。
- 实施提案已核对并确认：`evidence/confirmation-2.json` 的提案 `249b638a-35ad-4ae3-b293-f4a534668553` 仅授权 `src/sum.mjs`，固定命令 `node --test`，额外输入明确为现有测试、备忘与 AGENTS.md，说明本机执行权限及停止条件。助手完整阅读后通过测试宿主选择“确认实施”；方案确认后由模型自行衔接实施提案，没有外层“继续”消息。开发、验收及审查待执行。
- 交付链与退出已运行完成：开发、验收、审查子 PID 分别为 `24538/24578/24617`，三类工具正常返回，实际选择均为 `openai/gpt-6-astra`，推理级别依次 medium/low/medium。开发仅增加三行空数组返回判断，按父安排没有执行测试自检；独立验收实际执行 `node --test` **4/4**、退出 0，执行引用 `2bcc5ac3-d795-4813-898e-abbde3b6fa4d`，验收前后及审查候选均为 `86555779d26913b43558884304278ee325504cdc8762a8c50e006dd34f30f412`。独立审查未发现功能缺陷，指出无 HEAD、空 before 基线不足以单独证明修改范围，父对照本轮前读内容核对后交付。退出重载后实际 read/edit/bash 追加后测备忘并运行 `node --version`，没有新增确认；驱动退出 0、事后现有测试 **4/4**。独立模型/文件/资源总核对尚待完成。
- 独立总核对完成：系统策略下 `audit.mjs` 实际退出 0，结果为 `evidence/audit-result.json`，输出另存 `evidence/audit-console.log`。运行前准备、事后执行的七项外部行为核对全部通过（空数组、单项、多项、负数、小数、保留负零、不修改输入），没有要求特定补丁格式；核对期间源码不变。原测试和 AGENTS.md 摘要不变，备忘原文与两个预期追加行精确匹配，项目仍只有初始四个文件，27 份产品文件均与冻结摘要一致。
- 模型与体验事实：请求取证记录 **35 次请求、35 个 HTTP 200**，均为 `openai/gpt-6-astra`；同时核对四份原生 Session 的模型变更、assistant 模型字段及委派结果，父始终 medium，子配置不改变父。未调用 `delivery_models`、未传 `agent.model`、未选择 mini，没有模型错误或失败后重试。两次确认外没有额外“继续”、澄清或恢复输入。全程约 **6 分 18 秒**，交付阶段约 **5 分 44 秒**，其中两次等待助手读回并确认合计约 **2 分 13 秒**；这些时长包括测试宿主等待，不作为用户实际耗时或性能基准，也不据此宣称费用降低。
- 收尾与交付范围：父及三个子 PID `24330/24538/24578/24617` 均为 ESRCH，每个子 Session 都有唯一持久关闭记录，writer 文件为空；进入前与退出后的原生七工具集合一致，普通操作前后均真实执行。主仓只更新本台账，产品仍为 `54bbf41`，未修改用户配置、安装依赖、操作 Docker、提交、推送、创建 PR、发布或部署。没有重跑默认/Structured 自动化，也没有新的 Structured 真实模型、桌面操作、跨平台或完整业务验收。本次结果证明这个限定小任务已满足父子同模型及完整流程要求，不扩展为所有项目或插件的体验保证。

### 13.54 真实项目交互试用反馈

- 状态：原始反馈与当时诊断已记录；后续用户已授权优化，实施和验证结果见第 13.55 节。以下保留“先记下”阶段的现场事实与未决项，该阶段未修改实现或操作正在进行的试用。
- 场景与证据：用户在 `/Users/sxie/Documents/亚马逊/amazon-image-generation-workbench` 试用日期显示小修复，提供方案审阅界面截图 `/var/folders/b0/vsckn5zn3w3dms0_3scbhv400000gp/T/pi-clipboard-4166802d-1e59-466b-8a80-1a930dafe894.png`。本轮已查看截图，不把静态截图视为完整交互复现或验收。
- 首屏信息：截图可见内容主要是权限说明和两份规划文档路径，正文区域显示 `1–5 / 15 行`，尚未直接呈现本次要怎么修；顶部突出“2 项路径”“Ctrl+O 查看完整提案”，用户在看到具体方案前就面对确认选项。
- 操作呈现：修改意见输入框、确认方案、发送修改意见、稍后再看同时出现；截图中输入光标位于意见框，操作箭头指向“稍后再看”。底部同时提示 Enter 发送、Shift+Enter 换行、Tab 选择操作、Ctrl+O 详情、PgUp/PgDn 滚动、Esc 稍后再看。需要后续核实查看方案、输入意见和确认之间的焦点与按键是否容易理解，不能仅凭截图判断实际按键结果。
- 体验判断与后续方向：方案内容应更容易先看清，当前确认的决定及下一步操作应直观，减少“父会话”“路径”等内部表达对首屏的占用；具体布局、焦点及按键方案待后续讨论，不在本次冻结实现。截图列出的技术方案和实施计划是业务项目已有文档，不能据此判定发生了强制新建文档或授权回归。
- 实施确认补充证据：用户随后提供 `/var/folders/b0/vsckn5zn3w3dms0_3scbhv400000gp/T/pi-clipboard-f932c64a-0d3d-4793-8ec9-c125286fddc6.png`，反馈“还有这块也是很奇怪”。红箭头指向“仅授权列明范围内的本地开发、自检、验证、审查与返工。提交、推送、PR、发布、部署、生产及其他外部写入不在本次授权内。”这段说明；后续还占用首屏说明 Shell 权限和隔离限制，整体表达偏向权限条款。
- 实施首屏信息：显示两份实际可写源码/测试路径，但“14 项额外验收输入、4 条固定验收命令”仅显示数量，正文区域为 `1–8 / 18 行`，具体实施步骤和命令需要继续查看。后续优化应让用户先看懂本次要改什么、如何验收，再呈现影响此次决定的权限边界；本轮不据此删除限制或改变批准语义。
- 两阶段操作一致性：方案截图提示 Tab 选择操作、Enter 发送；实施截图提示 Tab 详情、↑↓ 选择、Enter 确认，顶部仍有 Ctrl+O 查看完整提案。相邻确认环节的按键含义和详情入口不同，增加理解成本；实际焦点及按键行为待后续真实 TUI 核实。
- 子任务查看补充证据：截图 `/var/folders/b0/vsckn5zn3w3dms0_3scbhv400000gp/T/pi-clipboard-ef172885-3ca9-4abf-9c9d-2d34a3148309.png` 显示审查子任务运行中、模型 `gpt-6-astra / high`。用户进一步纠正：“子任务刚刚在执行，但是我在命令里面找不到这个。”本问题以命令列表缺少查看入口为准，不能用命令改名、卡片点击或排队消息代替解释。当前实现注册名称为 `/delivery-tasks [任务ID]`，状态提示中虽然存在此名称，不代表命令补全列表已更新。
- 排队消息区分：截图底部 `Steering` 的文字与 `delivery-plan`、`delivery-run` 两个 Prompt Template 的共同开头一致，不是任务详情面板；截图不能确定实际输入了哪个命令，不能据此判定 `/delivery-tasks` 本身失效。
- 点击路径诊断：`installTaskDetails` 只在后续 `session_start/session_tree` 保存 `current`；普通启动后由 `/delivery-shape` 动态安装时，`initialize` 不补入当前上下文，卡片回调 `open(id)` 因 `ctx` 缺失直接返回。命令处理器则显式传入调用上下文，路径不同。对当前函数运行只读、无 UI 的内存夹具探针，退出 0：安装后直接点击未调用详情；显式传上下文的 `/delivery-tasks` 调用能打开；补发 `session_start` 后点击能打开。该结果确认了初始化缺口，但不等于在用户终端重现了全部鼠标或命令行为；已有鼠标入口还受 Pi 全屏模式限制。
- 命令列表缺失诊断：当前 Package 在 `/delivery-shape` 处理器内才安装并注册 `/delivery-tasks`。已核对 Pi `0.85.1` 的源码：`registerCommand` 只更新命令注册表；交互模式建立补全时将当时命令复制到 `CombinedAutocompleteProvider`，动态注册不触发该列表刷新。因此普通启动→首次进入交付后，执行入口已注册，补全仍可能只有启动时的命令。直接调用处理器的既有测试不能覆盖这一缺口；这是首次按需启用与命令发现之间的实际遗漏。
- 补全探针：使用公开 `CombinedAutocompleteProvider`、当前 `installActivation` 和 `installTaskDetails` 的内存夹具复现，未操作用户终端或调用模型。首次断言误把补全条目的 `value` 当成带 `/` 的名称而退出 1，修正探针读取方式后退出 0：shape 前后原补全均只有 `delivery-status/delivery-shape/delivery-exit`；shape 后注册表已有 `delivery-tasks`，只有重建补全对象才出现该项。此处重建仅用于证明原因，不建议用户在任务运行中重载。
- 后续验证重点：首次普通启动→显式进入→子任务运行中查看，优先检查命令补全能发现入口，再检查任务选择器、直接 ID、支持鼠标的卡片点击及入口提示。命令可见与交付启用需分开处理，仍只通过 shape 启用交付约束；查看和关闭详情不应要求重载、取消任务或重新批准。待用户安排修复，本轮不改卡片、命令或生命周期实现。
- 本轮范围：仅更新本台账，进行了上述诊断探针，未跑完整测试；未改产品或业务代码、未操作用户终端、未调用真实模型、未提交或推送。真实项目完整交付与界面体验仍待用户继续试用。

### 13.55 确认界面与子任务入口优化

- 状态：实现与自动化验证完成，用户实际终端体验待复验。用户在上述诊断后明确要求“问题记录都优化下吧”，授权实现第 13.54 节三处问题的修复；保留原始截图和历史诊断记录。
- 最小方案：沿用现有面板、原生 Editor/SelectList 与命令注册，不新增流程模式、配置或持久状态。方案与实施先展示决策正文，实施直接列出可写范围和固定命令；规划文档、额外输入与记录引用放在详情，关键执行边界保留可见提示。方案默认阅读，选择“提出修改意见”后才打开输入框；两阶段统一 Ctrl+O 查看详情、方向键选操作、Enter 执行，默认均不批准。
- 子任务入口：启动即声明 `/delivery-tasks` 与同样受动态注册影响的 `/delivery-resume`，未启用时仅提示 shape 入口；首次启用向任务面板传入当前上下文，修复卡片点击无响应，折叠卡片保留简短查看提示。只有 shape 安装执行约束，不通过查看命令启用、重载或取得权限。
- 验证范围：面板首屏、长正文/窄终端、多行反馈、默认不批准及取消；启动时构建补全后首次启用仍能发现入口；真实 Pi/临时 Git 子任务运行中通过选择器与卡片查看、结束后按 ID 查阅，Esc 不停止任务；普通操作与退出、原生及 Structured 既有权限回归。下述自动化已完成；系统禁网、fake provider、模拟交互，用户桌面体验单独待复验。
- 第一轮定向验证：类型检查通过；`node --import tsx test/support/run-tests.ts test/unit/activation.test.ts test/unit/delivery-ui.test.ts test/unit/approvals.test.ts test/unit/progress.test.ts` **82/82** 通过，制品根 `adaptive-tests-cCq3zg`。两项真实 Pi/临时 Git 集成定向 **2/2** 通过，制品根 `adaptive-tests-X448O4`：启动时构造公开补全列表后首次 shape，补全选择 `/delivery-tasks` 打开运行中任务，实时更新与翻页保留位置，Esc 不终止子命令，卡片直接打开，结束后 ID 能读完整输出；普通编辑、Shell、第三方工具、被动查询不启用与退出恢复保持。宿主使用模拟 UI，子为真实 CLI、fake provider，没有操作用户桌面。
- 首轮验证中的测试错误：新增补全测试误把公开 `getSuggestions` 当成同步三参数接口，首次类型检查失败、定向 **81/82**；补充 AbortSignal 并等待 Promise 后上述类型检查及 **82/82** 通过。属于本次测试代码错误，未修改产品以适配错误测试；失败制品根 `adaptive-tests-1kkdCI`。
- 最终面板定向：补充 10/20/32/60 行、20/40/80/110 列的尺寸核对；空间不足时保留 Esc 退出并拒绝不可见操作，完整显示时仍保留真实批准选项。类型检查及 UI **17/17** 通过，制品根 `adaptive-tests-MymFbz`。随后默认回归中的单元测试 **310/310** 通过（`adaptive-tests-YoUIjL`）；集成、E2E 与 Structured 尚在后续验证中。
- Structured 专项：显式指定本机已安装 `pi-codex-conversion 3.0.29`，`test/structured/flow.test.ts` **18/18** 通过，退出 0；制品根 `adaptive-tests-svaQWV`，命令日志 `/tmp/adaptive-ui-regression-structured.log`。覆盖普通使用与进入退出、两种文档安排的完整本机交付、候选审查、取消与未知收尾、PTY、持久记录篡改关闭权限及工具来源；系统禁网、临时 HOME、模拟 UI、fake provider，不使用用户认证。
- 默认全组首轮结果：`npm run test:all` 的单元 **310/310**、集成 **193/193** 通过，E2E **14/15**，整体退出 1；日志 `/tmp/adaptive-ui-regression-all.log`，集成制品 `adaptive-tests-2MCUx3`，E2E 制品 `adaptive-tests-SAlVgT`。唯一失败是旧 E2E 明确要求启动时不存在 `/delivery-resume`，与本次提前声明被动入口的新行为冲突。已更新该断言，要求 tasks/resume 均可发现、未启用时调用不启动模型，并继续核对真实 RPC Shell 在进入前可用、进入后拒绝、退出后恢复；产品没有为这项失败增加改动，待整组 E2E 复验。
- 最终复验：更新上述旧断言后，`npm run typecheck` 与 `npm run test:e2e` 均退出 0，E2E **15/15**，无失败、取消或跳过；制品根 `adaptive-tests-Jnm74a`，日志 `/tmp/adaptive-ui-regression-e2e.log`。产品代码自默认全组及 Structured 执行后未再改变，未无故重跑已通过的单元和集成组。最终证据分别为单元 **310/310**、集成 **193/193**、E2E **15/15**、Structured **18/18**；不把首次 `test:all` 的失败写成通过。
- 交付与边界：修改确认面板与提案展示、activation/index/task-details 的入口及上下文、progress 的折叠提示；同步相关单元、SDK/CLI 集成、RPC/打包 E2E 及交互测试宿主，README、Skill 和技术方案按实际行为更新。没有新增文件、配置、任务模式、批准状态或持久记录；两次确认、批准来源、路径限制、writer、固定验收和审查门禁保持。交互变化为 Ctrl+O 统一查看详情、方案默认阅读并按需打开意见框；不保留旧 Tab 操作垫片。`git diff --check` 通过；未修改业务项目、未操作用户终端或真实模型，未提交、推送、发布或部署。用户待当前执行正常收尾后 `/reload` 加载新版本，再在实际终端复验；本次不强行重载或恢复旧批准。
- 操作范围：仅主仓库实现、相关测试和文档，不修改业务项目、不操作正在执行的试用、不调用真实模型；本轮未授权提交或推送。

### 13.56 确认界面与子任务入口优化的本地提交

- 授权：第 13.55 节交付后，用户明确要求“完整提交下代码”，授权把本轮全部实现、测试、文档及此前的问题记录一起提交到本地 Git；未授权推送或发布。
- 提交范围：`main` 上相对 `671c667` 的 17 份文件，包含六份扩展实现、七份测试及宿主、README、Skill、技术方案和唯一台账；无业务项目文件、用户配置或新增依赖。本节随本次提交保存，提交标识以 Git 记录为准。
- 提交前复核：分支、完整改动清单和差异检查已核对，与上一轮验证范围一致。读回原始测试日志，确认单元 **310/310**、集成 **193/193**、E2E 修正后复验 **15/15**、Structured **18/18**；沿用已通过的类型检查，不把默认全组首轮失败写成通过。产品与测试代码没有新增变更，本轮只补充提交记录，无须重复执行测试。
- 兼容性与未执行项：保留仅 shape 启用、两次确认和原交付权限边界；确认界面改用 Ctrl+O 查看详情、按需输入方案意见。实际用户终端与完整业务交付仍待复验；本轮不重载业务会话、不调用真实模型、不推送、发布或部署。

### 13.57 父子沿用原有工具与权限

- 状态：实现与自动化验证完成；真实联网、真实模型与用户终端试用待验证。用户发现联网查阅被门禁拒绝，明确要求能力和父 Pi 一样、不额外拦截，并授权优化。基线为本地提交 `e3a3549`，工作区起始干净；未修改 Pi 安装目录或业务项目。
- 最小实现：移除普通工具的默认拒绝与可见性裁剪，联网、文件、Shell、插件工具沿用原实现及 Pi/既有扩展检查；子任务按父当前已启用工具、配置、规则和模型启动，继续通过公开 API 核对实际可重建的环境。不新增工具类型分类、联网白名单、配置开关或第二套权限系统。
- 交付边界：两次确认、交付任务交接、固定候选验收与原始记录核验继续保留在本 Package 的交付入口中。普通开发不替换原文件/Shell工具；固定验收仍通过专用执行路径取得约定命令、退出码及候选证据，任意普通工具输出不能冒充固定验收。方案/只读审查的禁止修改改为任务要求；普通工具由原权限负责，不能声称 Package 强制阻止所有未批准写入、递归委派或同范围并发操作。
- 验证安排：先验证父普通工具不被隐藏或拒绝、子原生/插件工具与父一致、原插件拒绝仍有效；再覆盖真实 Pi/临时 Git 的联网工具替身调用、正常文件和命令、开发交付与固定验收、取消收尾及 Structured。按新需求更新过时的“普通工具必须被拒绝”测试，保留实际批准、候选和交付记录的负向边界。测试禁网、fake provider，不查询真实网站或读取用户认证。
- 已取得证据：首轮 policy/subagents 定向 51/51、typecheck 通过；真实 Pi 的无文档开发—固定验收—独立审查通过。新继承集成在 `adaptive-tests-BX6E9Y/adaptive-pi-CfG2N6` 通过：父/分析子/开发子调用离线 `web_search`、`fetch_content`、插件工具，原插件拒绝生效，停用工具不补回。该次定向总计 14/15，另一个新增固定验收单元因夹具传整个工作区而失败，正在修正夹具。
- 首轮默认回归：单元 299/299；集成 158/194，36 项失败，E2E 未运行。失败涉及旧工具裁剪/路径拦截预期、普通命令不再生成专用验收引用，以及旧文件包装故障注入不再命中新原生实现；正在逐项更新并复验，不能作为本次完整通过。日志 `/tmp/adaptive-inherited-all-first.log`。
- 第二轮默认回归通过：单元 288/288、集成 193/193、E2E 15/15，总计 496/496；日志 `/tmp/adaptive-inherited-all-second.log`，制品根依次 `adaptive-tests-VcRlM6`、`adaptive-tests-v5wdlv`、`adaptive-tests-mNMr7r`。数量减少源于删除普通工具路径/清理包装及对应旧契约测试；自有批准、文档工具、交付 lease、候选与原始证据的负向验证保留。随后还有提示文本与 Structured 版本适用范围调整，最终定向待复验。
- Structured 首轮 14/18：开发—验收—审查、PTY、取消、进程/记录异常等通过；4 项失败来自原插件停用 `read`、普通命令非零退出仍返回 `isError=false` 的原行为。现改为核对原始退出码和实际工具可见性，不为符合旧测试而覆盖原插件；日志 `/tmp/adaptive-inherited-structured-first.log`，根 `adaptive-tests-3FnHZi`，待复验。
- 最终原生定向通过：typecheck、policy/approvals/structured 单元、工具继承集成与 local-command 全组共 **93/93**；日志 `/tmp/adaptive-inherited-final-focused.log`，根 `adaptive-tests-s7fspW`。覆盖最后的提示修改和插件版本适用范围收窄；不支持的 Structured 版本不阻止普通能力，只拒绝固定验收。默认全组之后新增 1 项版本识别单元，不把 496/496 描述成最终代码再次全量跑出的数量。
- 最终 Structured 全组 **18/18** 通过，日志 `/tmp/adaptive-inherited-structured-final.log`，根 `adaptive-tests-VcSd9L`。前述 4 项失败已按原插件真实行为修正并复验；覆盖父子原工具、上下文增强、图片、完整开发—固定验收—审查、真实补丁/PTY、取消和持久终态异常。环境为 macOS、Node `25.2.1`、Pi `0.85.1`、插件 `3.0.29`；真实 SDK/CLI、本机 Shell/PTY，测试系统禁网，无真实模型请求。
- 文档与交付：README、技术方案、Skill 和批准/工具提示已同步权限边界；删除普通工具包装及其旧契约测试，保留固定验收专用执行器和交付记录核验。历史执行/批准不迁移、不自动恢复；当前任务正常收尾后重载才加载新版，不替用户重载在途业务会话。本轮不 commit、push、创建 PR、发布或部署。
- 未执行项：真实用户 TUI、真实联网服务与真实模型试用单独待验证；未授权提交、推送、发布、部署或重载业务会话。

### 13.58 父子工具继承优化的本地完整提交

- 授权：第 13.57 节交付后，用户明确要求“先完整提交下吧”，授权把本轮全部代码、测试和文档提交到本地 Git；未授权推送或发布。
- 提交范围：`main` 上相对 `e3a3549` 的 24 份文件，包括普通工具权限策略与子任务继承、固定验收执行器、相关测试及离线联网工具替身、README、Skill、技术方案和唯一台账；无业务项目、用户配置或新增依赖。本节随本次提交保存，提交标识以 Git 记录为准。
- 提交前复核：完整改动清单和差异检查已核对，未发现私钥或常见真实令牌格式。读回原始日志，确认默认回归 **496/496**、后续最终定向 **93/93**、Structured **18/18**；沿用上一轮已通过的 typecheck。本轮仅补充提交记录，不改变已验证的产品及测试代码，不重复运行测试。
- 兼容性与未执行项：父子普通工具沿用 Pi 和原插件检查，Package 不再强制拦截普通工具的路径或网络；交付入口保留两次确认、交接及固定验收。真实联网、真实模型和用户终端试用仍待验证；不重载业务会话、不推送、发布或部署。

### 13.59 测试入口不再禁网

- 状态：实现与验证完成。用户在完整梳理及禁网说明后明确要求“那就不要禁网啊，不要考虑费用问题”，授权移除测试入口的网络限制，不以模型费用设置确认门槛。
- 基线：`main / 50a6ec1`，工作区起始干净。本会话修改前默认回归单元 **289/289**、集成 **193/193**、E2E **15/15**，共 **497/497**，typecheck 与差异检查通过；日志 `/tmp/adaptive-overview-tests.easgQC`。这些是原禁网入口的基线结果，不能作为修改后的验证。
- 最小实现：移除测试系统策略中的 `(deny network*)`、环境中的 `PI_OFFLINE`、Pi CLI 与 npm pack 的 `--offline`。复用既有隔离测试，让真实 Pi 连接测试创建的临时 TCP 服务并断言连接成功，同时继续核对拒读真实 HOME、空凭证、会话持久化和进程退出；保留 fake provider、临时 Git、文件隔离以及版本检查/遥测关闭。同步 AGENTS、当前技术方案和测试说明，历史禁网证据不回写；不增加产品代码、依赖、配置、模式或新文件。
- 验证安排：先运行 `test/integration/pi-isolation.test.ts` 与 typecheck，再运行默认 `test:all` 和差异检查。临时服务验证实际网络连接，不给默认测试增加公共网站依赖；Structured 专项、真实 Provider 和用户终端不纳入此次回归。
- 定向已验证：`PATH="/tmp/adaptive-delivery-tools.g6KzDL:$PATH" node --import tsx test/support/run-tests.ts test/integration/pi-isolation.test.ts` **2/2**，零失败、取消或跳过；制品根 `/private/var/folders/b0/vsckn5zn3w3dms0_3scbhv400000gp/T/adaptive-tests-Clbr76`。真实 Pi PID `93486` 报告 `network=allowed`、`realHome=EPERM`、`credentials=0`，退出后 PID 不存在且原生 Session 含持久关闭记录。`npm run typecheck` 与 `git diff --check` 通过。
- 外网出站已验证：复用同一 `sandboxProfile` 与 `testEnvironment`，在临时根 `/private/var/folders/b0/vsckn5zn3w3dms0_3scbhv400000gp/T/adaptive-network-smoke-1VQBk5` 启动系统沙箱内 Node，`fetch("https://example.com")` 返回 **HTTP 200**，进程退出 0。只发送公共页面 GET，不读取用户配置或凭证；该请求为本轮一次性验证，不加入默认测试依赖，也不是一次真实模型请求。
- 默认回归完成：`PATH="/tmp/adaptive-delivery-tools.g6KzDL:$PATH" npm run test:all` 退出 0，日志 `/tmp/adaptive-network-tests.EhWMjz`；单元 **289/289**、集成 **193/193**、E2E **15/15**，共 **497/497**，三组均零失败、取消或跳过。制品根依次为 `/private/var/folders/b0/vsckn5zn3w3dms0_3scbhv400000gp/T/adaptive-tests-Zod9Hu`、`adaptive-tests-oMNmp4`、`adaptive-tests-yXeUMj`。覆盖最终测试代码，后续只补记本台账；未新增跨平台、Structured 专项、真实模型或用户终端验证。
- 交付边界：产品此前已不额外禁网，本次只调整测试及当前约定；不迁移旧数据或提供离线兼容开关。未修改用户配置、调用真实 Provider、提交、推送、创建 PR、发布或部署。

### 13.60 状态提示、文档索引与详情刷新优化及真实联网试用

- 状态：实现与限定验证完成。用户接受上一轮四项优化建议并要求“那你优化下”，授权本仓库最小实现、性能测量、自动化回归，以及临时项目中的真实模型和联网交付验证；不因模型费用暂停。
- 基线与规模：`main / 50a6ec1`，保留第 13.59 节九个未提交改动。复用现有批准、任务进度和详情模块，不增加产品文件、持久阶段表、通用缓存、配置开关或兼容层。测试与试用只使用临时目录；真实认证交给 Pi 自己处理，不输出或复制凭据。两次提案由助手读回后通过 SDK 测试宿主确认，不操作用户桌面。
- 验证结果：实现、默认及 Structured 回归、冻结产品副本的真实联网小修复、外部行为和进程收尾核对均已完成。用户实际终端体验、其他平台与完整业务项目不在本次验收范围。

| 事项 | 状态 | 证据与下一步 |
|---|---|---|
| 当前文档索引 | 已完成 | 首页作为唯一当前摘要，13.1 标注截至 13.44 的历史；README 和技术方案均已改指台账首页，旧证据保留原语境 |
| 状态与下一步提示 | 已完成 | 直接投影既有确认、在途任务和收尾；单元、真实 SDK/CLI 定向及默认/Structured 回归通过，重载不恢复批准 |
| 长会话详情刷新 | 已完成 | 41,497,780 字节、10,000 条记录：未变化重复读取中位耗时 168.36 ms → 0.68 ms；窗口内复用投影、单元、真实 CLI 连续输出及默认/Structured 回归通过 |
| 真实联网交付 | 已完成（限定试用） | 父与开发子真实搜索和抓取官方文档，单文件开发、固定验收 7/7、独立审查、外部 5/5 及资源总核对通过；假 IP 拒绝与临时环境适配保留原始证据 |

- Git 与发布：本轮未授权 commit、push、PR、发布或部署，不修改用户配置或在途业务会话。
- 第一轮证据：`test/unit/approvals.test.ts` 与 `test/unit/delivery-ui.test.ts` **73/73**、typecheck 通过，制品根 `adaptive-tests-vJHBNa`，日志 `/tmp/adaptive-polish.TR68H2/unit.log`。覆盖确认状态失效、窗口刷新、同长度覆盖、原路径替换、半行补齐、实时正文合并、删除及坏记录后恢复。性能原始记录为同目录 `benchmark-before.json`、`benchmark-after.json`：首次读取约 148/153 ms，重复读取中位数约 168.36/0.68 ms；只衡量生成记录的读取解析，不宣称真实终端帧率或整个交付速度同比提升。
- 集成定向 **3/3**：状态查询不调用模型、不落批准，重载后重新确认；真实开发→验收→审查在工具结果落盘前显示等待收尾；崩溃后重开优先提示核对原执行。原始完整汇总在 `/tmp/adaptive-polish.TR68H2/integration-focused.log`，根 `adaptive-tests-H02ikv`；工具轮询返回 unknown process id，故本次只记已保存测试汇总，不虚构该轮命令退出码，最终默认全组另验。
- Structured 全组 **18/18**、退出 0：`structured.log` 与 `structured.rc`，根 `adaptive-tests-ew2OJ9`；沿用已安装 `pi-codex-conversion 3.0.29`、fake provider、临时目录与模拟 UI。默认单元 **291/291**、集成 **194/194** 已通过，E2E 仍在运行。
- 真实试用准备：在 `/private/tmp/adaptive-polish.TR68H2` 冻结当前产品副本，加载原安装 `pi-web-access 0.28.0`，临时配置搜索 `workflow=none/autoOpenBrowser=false`，不读取 Cookie 或打开浏览器。修复目标为 URL 相对引用解析，只授权 `src/url.mjs`，保留七项测试和独立备忘。准备脚本首次退出 1，原因是预期六项失败、实际五项失败（片段拼接碰巧正确）；已纠正准备断言，原始基线 **2 通过 / 5 失败** 保留于 `evidence/before-tests.txt`。产品及业务源码未因此改变，尚未发起真实模型请求。
- 最终自动化完成：`PATH="/tmp/adaptive-delivery-tools.g6KzDL:$PATH" npm run test:all` **500/500**，单元 **291/291**、集成 **194/194**、E2E **15/15**，三组均零失败、取消或跳过，`all.rc=0`。日志 `all.log`，根依次 `adaptive-tests-J2se1N`、`adaptive-tests-N1OPKv`、`adaptive-tests-XaAQ69`；与前述 Structured **18/18** 均覆盖最终产品代码，后续仅补文档与临时试用证据。
- 真实联网现场：父 Pi `openai/gpt-6-astra` 已完成真实 `web_search`，首次三次 `fetch_content` 的正文均报告地址检查拒绝，不能因外层 `isError=false` 记为抓取成功。DNS 实测 Node.js/MDN 返回 `198.18.0.38/39`；标准 HTTPS 获取 Node.js URL 官方文档返回 **HTTP 200**、336,803 字符且含 `new URL`。按原 `pi-web-access` 文档，仅在临时配置声明 `ssrf.allowRanges=["198.18.0.0/15"]`，不改用户配置、插件源码或关闭其他检查。第一份方案 `cf8d4463-d1aa-4dc2-8029-70910301d664` 已完整读回，通过原审阅反馈要求重新抓取并纠正联网事实，尚未确认方案或实施；原失败记录保留。最终独立检查另要求抓取结果含实际 API 正文，避免误把错误文字当内容证据。
- 真实方案复验：反馈后父使用原 `fetch_content` 的 answer 模式成功取得 Node.js URL 文档的逐段引文与来源链接，已从原 toolResult 读回构造函数、相对解析、`href` 和 TypeError 的实际正文。更新方案 `76bbed7a-fd03-446e-856e-162f922391a6` 完整读回后，通过测试宿主确认；保留前三次被拒绝的事实，仅改 `src/url.mjs`、保留七项测试及备忘的范围不变。实施待确认，源码尚未修改。
- 实施提案 `9428649e-1759-416c-a564-a9f8030062b0` 已完整读回并通过测试宿主确认：只授权 `src/url.mjs`，固定命令 `node --test`，测试、备忘和 AGENTS 纳入候选输入；开发子独立调用真实搜索与抓取，不改网络配置。一次方案反馈与两次正式确认均有独立原生条目及 `evidence/decisions.jsonl`，开发、验收和审查待完成。
- 真实交付链已取得结果：开发子 PID `24781` 独立调用 `web_search`、`fetch_content` 后完成源码修改；固定验收子 `24821` 返回成功，原七项测试通过；独立审查子 `24854` 正常结束。父原生 toolResult 中验收与审查候选同为 `2b769446c00692d443b21e79fd7eaa9d5c073b627c32093963be80f1b602e541`。父正在核对原始结果；外部五项行为检查、保留文件、产品冻结及进程/lease 总核对仍待完成，不提前标记父项完成。
- 真实试用收口：`real.rc=0`，父自行核对源码和子记录后交付，`/delivery-exit` 正常恢复进入前工具集合；事后原测试 **7/7**。父与开发子分别完成一次真实搜索和一次含 API 原文的成功抓取；父另有三次地址检查拒绝，不把这些正常工具返回误报为抓取成功。范围仅为 `src/url.mjs` 的一行实现，未新增规划文件，未安装依赖。交付期间累计约 10 分 54 秒，含宿主取证及等待读回确认，不作为交付速度基准。
- 独立核对完成：开发前准备的 `audit.mjs` 首次因误读审查记录字段而退出 1；核对实际协议后改读 `reviewSessionFile`，未改产品、候选或模型结果。复验 `audit.rc=0`，详细结果 `evidence/audit-result.json`：额外端口/上级路径、网络相对 URL、编码斜杠、Unicode、无效 base **5/5**，原测试、备忘及 AGENTS 摘要保持；27 份冻结产品文件未变；三个子 Session 各有唯一关闭记录，父 PID `23523` 与子 PID `24781/24821/24854` 全部 ESRCH，磁盘 lease 为空。扩展钩子记录的父子会话模型请求 **30 次**，对应响应均 HTTP 200，均为 `openai/gpt-6-astra`；不将此计数扩展为联网插件 answer 模式的全部内部请求。
- 最终范围：产品只修改现有入口、批准状态投影和任务详情读取，用户命令及工具参数、两次确认和执行核验契约保持；内部详情读取改为每窗口创建 reader，不提供旧内部函数兼容层。同步既有单元/集成测试、README、技术方案及本台账，保留此前九个禁网调整文件，累计 17 个变更路径。最终产品代码自默认/Structured 全组及冻结副本生成后未再改动，后续仅更新说明和试用记录。没有用户桌面、跨平台或其他联网插件的新验收；未修改用户配置、业务会话、提交、推送、创建 PR、发布或部署。

### 13.61 测试联网与交付体验优化的本地完整提交

- 授权：第 13.60 节交付后，用户明确要求“先完整提交下吧”，授权把第 13.59—13.60 节全部代码、测试和文档提交到本地 Git；未授权推送或发布。
- 提交范围：`main` 上相对 `50a6ec1` 的 17 份文件，包括测试入口取消禁网、状态与下一步提示、详情窗口解析投影复用、对应测试、AGENTS、README、技术方案和唯一台账。本节随本次提交保存，提交标识以 Git 记录为准；临时试用项目、日志、凭证引用和用户配置不纳入提交。
- 提交前复核：已逐份核对完整差异；读回 `/tmp/adaptive-polish.TR68H2` 的原始日志和退出码，默认 **500/500**、Structured **18/18**、真实试用及独立核对均退出 0。沿用上一轮最终代码已通过的 typecheck，本次只补提交记录，不修改产品及测试代码，不重复运行测试或真实模型。
- 兼容性与未执行项：用户命令、工具参数和两次确认契约保持；内部详情读取使用每窗口 reader，不增加旧接口兼容层。用户实际终端、跨平台及完整业务项目仍待试用；不重载业务会话、不推送、创建 PR、发布或部署。

### 13.62 升级恢复、启动失败与已有提交授权的执行指引

- 状态：实现与限定验证完成。用户确认三项最小优化并要求“可以，优化下”，授权修改本 Package 及对应测试/文档，不修改真实业务项目、不重载用户会话，不包含本轮 Git 提交或发布。
- 已确认现场：`amazon-image-generation-workbench` 原父会话的失败记录要求旧版 `find/grep/ls/read`，新子进程返回另含 `bash/edit/write` 的工具集合，任务未发送。用户 `/reload` 后加载新版状态提示，但 Pi 保留先前启用列表，三个普通工具仍缺失；原启用记录保存完整工具集合，现场 lease 与操作锁已空。两张截图为 `/var/folders/b0/vsckn5zn3w3dms0_3scbhv400000gp/T/pi-clipboard-09320a49-d79a-4278-8f60-d01cf8f60d8f.png` 和同目录 `pi-clipboard-2302e8ce-7fd6-47b3-9eaa-09f64ca4e879.png`。
- 最小范围：复用现有握手信息列出工具差异与退出恢复步骤；复用子进程退出及既有终态证明区分未发任务失败和未知收尾；重载提示说明确认状态与工具列表，并通过 Skill/README 说明已授权提交使用普通工具。无新产品文件、状态机、版本配置、自动迁移或强制工具启用。
- 验证安排：单元覆盖差异提示、未发送任务的正常/异常退出与重载不自动改工具；真实 SDK/CLI、临时 Git 覆盖升级后重载、退出恢复工具、普通提交，以及握手失败后零子模型请求、退出与 writer 交接。先定向复现和验证，再按收尾边界运行默认及 Structured 回归；测试使用 fake provider，不额外禁网。
- 定向复现：修正前六项定向全部按预期失败，分别缺少差异/重载指引、握手失败未形成关闭证明，以及交接前未检查已启动子进程的关闭证明；`/tmp/adaptive-recovery.JxCtCi/red.log`、`red.rc=1`，根 `adaptive-tests-ypW6Mk`。原始复现保留，不把红测试计为验证通过。
- 第一轮通过：四组单元 **67/67**、真实 SDK/CLI 定向 **9/9**，typecheck 与差异检查通过；日志同目录 `unit.log`、`integration-focused.log`、`typecheck.log` 及对应 `.rc=0`，根 `adaptive-tests-t3ZQXB`、`adaptive-tests-ic8GvA`。已验证正常握手失败的零子模型调用、子 PID 退出、writer 释放及退出恢复；临时 Git 使用普通 bash 完成指定文件提交，未增加确认或开发子任务。旧版裁剪通过公开 API 重现，不声称运行了完整历史插件；确认界面仍为测试替身。正在补充握手失败后子异常退出的真实负向验证，再运行默认及 Structured 全组。
- 启动异常负向验证 **1/1**：真实子 Pi 在握手不一致后退出 13，零子模型调用，PID 已不存在，仍保留父 writer、显示收尾未知并拒绝退出交付及文档写入；`startup-failure.log`、`startup-failure.rc=0`，根 `adaptive-tests-uoQen7`。普通启动失败与不能证明正常收尾的路径已分别验证；默认及 Structured 全组待完成。
- Structured 全组 **18/18**、退出 0：原安装 `pi-codex-conversion 3.0.29`，fake provider、临时 HOME、真实 Pi/Shell/PTY，网络不额外限制；`structured.log`、`structured.rc=0`，根 `adaptive-tests-XaKkE6`。最终 typecheck 通过，日志 `typecheck-final.log`、退出 0；默认单元 **296/296** 已通过，根 `adaptive-tests-KWXI5o`，集成与 E2E 仍在运行。
- 默认全组首次结果：`PATH="/tmp/adaptive-delivery-tools.g6KzDL:$PATH" npm run test:all` 退出 1；单元 **296/296**、集成 **195/196**，E2E 因集成失败未启动。唯一失败 `extension-lifecycle.test.ts` 的 `missing-tools` 仍匹配旧文案“需要…实际 []”，实际已正确返回新版工具差异；属于本次提示变更漏同步测试。现只更新该断言，产品代码不变，正在定向复验并单独运行 E2E；原日志 `all.log`、`all.rc=1`，集成根 `adaptive-tests-krfzh3`。
- 最终复验：修正旧断言后 `missing-tools` **1/1**、退出 0（`lifecycle-recheck.log`、根 `adaptive-tests-AQAPjl`）；单独 `npm run test:e2e` **15/15**、退出 0（`e2e.log`、根 `adaptive-tests-weZ2Th`）。默认 507 个用例均取得通过证据，最后只修改一条测试文案断言，不重复运行已通过的产品回归；保留 `all.rc=1` 的原事实，不改记整条默认命令退出成功。各完成组均零取消或跳过。
- 最终交付：修改四个现有产品模块（握手、激活、开发收尾、卡片状态）、七个测试文件及 Skill/README/设计/台账，合计 15 个文件，无新文件、依赖、配置或兼容层。用户命令、工具参数和两次开发确认契约保持，普通 Git 提交的授权按会话处理；不自动启用工具、不自动解锁或重试。自动化使用 fake provider，真实 Pi/临时 Git 与组件渲染已有证据，新版用户终端和真实模型选择提交路径仍待实际使用验证。未修改业务项目或用户配置，未重载在途会话，未提交、推送、创建 PR、发布或部署。

### 13.63 升级恢复与启动失败优化的本地提交

- 授权：第 13.62 节交付后，用户明确要求“先提交下代码”，授权将本轮代码、测试及配套文档提交到本地 Git；未授权推送或发布。
- 提交范围：`main` 上相对 `b86c74d` 的 15 份文件，涵盖工具差异与重载提示、启动失败收尾证明和卡片、已有提交授权指引、回归测试及唯一台账。本节随本次提交保存，提交标识以 Git 记录为准；不包含业务项目、用户配置或临时测试制品。
- 提交前复核：差异检查通过，已读回原始验证日志和退出码；默认 507 项分组验证、Structured **18/18** 与 typecheck 证据保持第 13.62 节限定，保留首次集成旧断言失败及定向复验记录。本次仅补提交记录，未改已验证的产品或测试代码，不重复运行测试。
- 兼容性与未执行项：现有命令、工具参数和开发确认契约保持，无新依赖或兼容层；新版真实终端和模型遵循指引的效果仍待试用。不重载业务会话、不推送、创建 PR、发布或部署。

### 13.64 过程工具异常的具体摘要与中性展示

- 状态：实现与自动化验证完成，实际终端试用待验证。用户在核对截图及两次检索无匹配的原始记录后要求“那你优化下”，授权本 Package 的实现、测试和文档；不修改正在运行的业务项目或重载用户会话，不包含提交与发布。
- 已确认原因：业务开发子 Session `2026-09-10T14-29-22-445Z_01a08bb9-2789-70a7-b953-3360666728cd.jsonl` 第 13、42 行分别因查找更深 AGENTS.md、README 的“验证命令”无匹配而退出 1。原生 Bash 返回 `isError=true`，Package 累计 `rpc.toolError`，正常结束仍显示整行黄色“已结束，有工具错误待核对”。基线 124 项、自检 133 项及后续固定验收成功的事实保留，不从截图推断源码失败。
- 最小方案：从已经读取的子原生记录提取有界的工具名、调用目标、返回摘要及行号，复用现有结果正文与进度字段；正常结束改用中性标题和明确的过程记录提示。父会话根据原始证据说明原因、是否解决及交付影响；不新增命令白名单、退出码分类器、确认工具、持久状态或影子日志，不自动把退出 1 解释为无匹配或把后续成功当作全部修复。
- 验证安排：单元覆盖原始调用关联、摘要截断、控制字符、真实卡片颜色及详情重开；真实 Pi/临时 Git 覆盖检索无匹配、同为退出 1 的真实断言失败、后续正常操作以及固定验收失败仍被拒绝。沿用 fake provider 和模拟批准界面，先定向验证再运行受影响回归；本轮不额外禁网、不调用真实模型。
- 定向复现：新真实 Pi 检索/断言场景在原实现上失败，卡片动作只有“已更新任务说明”，没有原因摘要；`/tmp/adaptive-tool-notes.TCgekf/red.log`、`red.rc=1`，根 `adaptive-tests-hYlD4l`。
- 首轮验证：UI/摘要单元 **28/28** 通过（`unit.log`、退出 0，根 `adaptive-tests-rW8LH9`）。类型检查发现新增摘要调用的隐式 any，已补明确返回类型；真实定向 **2/3**，唯一失败揭示末行可能是原插件追加文字，不能只取末行作为摘要，现改保留有界首尾原文。原始日志为 `typecheck.log`、`focused.log`，均保留非零退出；两项均由本次新增实现引入，修正后复验结果如下。
- 修正后复验：`typecheck-final.log` 退出 0；`recheck.log` 实际运行 progress/delivery-ui 两个单元文件及 development/local-command 两个集成文件的整组，共 **131/131**，零失败、取消或跳过，`recheck.rc=0`，根 `adaptive-tests-oCg7je`。新场景覆盖真实 Bash 的检索无匹配与断言失败（均退出 1）、后续正常操作、三类委派原始行号摘要、writer 交回及正常固定验收；另确认固定验收的真实断言退出 1 仍返回失败并拒绝审查。
- 补充回归：其余单元 **271/271**、E2E **15/15** 通过，分别为 `unit-remaining.log`/根 `adaptive-tests-0IzOtn`、`e2e.log`/根 `adaptive-tests-HPQTwx`。其余集成 **95/95** 通过（`integration-remaining.log`，根 `adaptive-tests-W39V8l`）；Structured **18/18** 通过（`structured.log`，根 `adaptive-tests-t6xK3E`），使用本机 `@howaboua/pi-codex-conversion` 3.0.29。以上日志与对应 `.rc` 均在 `/tmp/adaptive-tool-notes.TCgekf`，退出码均 0，零失败、取消或跳过。
- 最终验证范围：默认测试按文件分组合计 **512/512**（单元 **299**、集成 **198**、E2E **15**），另有 Structured **18/18**、typecheck 及 `git diff --check` 通过；没有重新执行整条 `npm run test:all`。测试使用临时 HOME/Git、fake provider、真实 Pi SDK/CLI 及模拟批准界面，不额外禁网，未调用真实模型或操作业务项目。
- 交付边界与下一步：改动四个既有产品模块及相关测试、README、技术方案、本台账和 Skill，共 15 个文件，无新文件、依赖、配置或持久格式变更；不增加旧版兼容层。具体摘要与中性颜色已有自动化证据，实际终端展示及真实模型按新指引解释原因仍待用户后续试用；当前运行任务未重载。本节实现收口时未 commit、push、创建 PR 或发布；后续提交授权与复核见第 13.65 节。

### 13.65 过程工具异常提示优化的完整提交

- 授权：用户在第 13.64 节交付后要求“完整提交下代码”，授权将本仓库当前优化的全部代码、测试和文档提交到本地 Git。
- 提交范围：`main` 上相对 `ff40940` 的 15 份文件，涵盖工具异常摘要、中性卡片、详情重开、父会话处理指引、测试与唯一台账。本节随本次提交保存，提交标识以 Git 记录为准；不包含业务项目、用户配置或临时测试制品。
- 提交前复核：差异检查通过，读回默认 **512/512** 项分组测试、Structured **18/18** 和 typecheck 的原始日志及退出码，均为 0。首次失败和修正证据保留在第 13.64 节；本次仅补提交记录，未修改已验证的产品或测试代码，不重复运行测试。
- 兼容性与未执行项：无新依赖、配置或持久格式变化；实际终端体验及真实模型遵循新指引的效果仍待试用。不重载业务会话、不推送、创建 PR、发布或部署。

### 13.66 方案与实施确认面板层次优化

- 状态：实现与自动化验证完成，实际终端观感待用户试用。用户针对“方案审阅”及下方确认交互反馈界面层次奇怪并要求优化，授权修改本 Package 的两个确认面板、对应测试和事实文档；不修改业务项目、不重载用户会话、不包含提交或发布。
- 最小范围：只调整 `extensions/delivery-gate/src/ui.ts` 和既有 UI/批准测试。两阶段仍使用 `ctx.ui.custom()`、原生 `Editor`/`SelectList`、相同选项和默认“不批准”；不改批准载荷、权限、lease、执行和状态恢复逻辑。
- 展示变化：方案审阅和实施确认统一为“阶段标题—正文—说明—操作—快捷键”层次；正文与标题留出稳定缩进，说明和快捷键使用弱化颜色；方案意见仍按需打开，实施文档和完整记录仍通过 Ctrl+O 查看，Esc、方向键、鼠标和 Enter 语义保持。
- 首轮验证：`npm run typecheck` 通过；完整 `npm run test:all` 在最后换行修正前取得单元 **299/299**、集成 **198/198**、E2E **15/15**，合计 **512/512**。定向 UI/批准测试首轮 **73/73** 通过；发现缩进后的换行宽度可能截去末尾字符后修正实现，并增加中文与长正文末尾检查。
- 最终定向验证：修正后 `npm run typecheck` 通过，`node --import tsx test/support/run-tests.ts test/unit/delivery-ui.test.ts test/unit/approvals.test.ts` **74/74** 通过，`git diff --check` 通过。最终修正只涉及显示换行和对应覆盖，未触及批准或执行路径；完整回归的 512 项结果沿用同一面板行为，仅未因该有界显示修正重跑全部集成/E2E。
- 兼容性与未执行项：无新依赖、配置、持久格式或流程阶段；没有真实用户终端截图、真实模型或业务项目验收，不把模拟 TUI 测试扩展为视觉验收。本节未 commit、push、创建 PR、发布或部署。

### 13.67 确认面板显示文档策略与规划路径待办

- 状态：实现与自动化验证完成，实际终端观感待用户试用。两个确认面板现已从本次批准载荷读取并固定显示文档策略、技术方案路径和实施计划路径；不修改业务项目。
- 目标展示：在方案审阅和实施确认两个面板的正文摘要或独立信息区明确显示：

  ```text
  文档策略：复用现有文档
  技术方案：docs/P6.1后端服务拆分-技术方案.md
  实施计划：docs/P6.1后端服务拆分-实施计划.md
  ```

- 策略覆盖：支持“不落盘”“复用现有文档”“新建需求文档”；策略和路径以本次 `delivery_approval` 的实际载荷及方案正文为准，不能把“方案确认提案已保存”误显示成 Markdown 文件已经写入。实施阶段校验并沿用已确认方案的策略和路径。
- 实现范围：`approvals.ts` 增加 `documentStrategy`、`technicalPlanPath`、`implementationPlanPath` 的载荷校验与批准快照；`DesignReviewPanel` 和 `DeliveryPanel` 均展示文档信息，路径按窄屏可用宽度换行；Skill、计划 Prompt、执行 Prompt 和技术方案同步固定规则。
- 验证证据：`test/unit/approvals.test.ts`、`test/unit/delivery-ui.test.ts` 覆盖三种策略、路径冻结、两阶段展示和窄屏换行；单元 **299/299**、集成 **198/198**、E2E **15/15**、typecheck 及 `git diff --check` 通过。
- 边界：不新增复杂度评分器、第二套文档状态或文件；本节未 commit、push、创建 PR、发布或部署。

### 13.68 子 Agent 过程工具异常与最终状态展示待办

- 状态：实现与自动化验证完成，实际终端观感待用户试用。过程中的可恢复工具调用异常不再改变子 Agent 主状态。
- 目标行为：子 Agent 仍在运行时主状态显示“运行中”；`edit` 匹配失败、`grep` 无结果、命令重试等过程事件保留为原始证据和详情，不持续显示为主状态失败。
- 最终状态：主界面只显示“运行中 / 已完成 / 异常退出”，不显示内部职责说明；子 Agent 的执行结果交回父 Pi，由父 Pi 决定继续、返工或结束。
- 异常退出的内部细分：明确进程异常、协议断流、强制退出、超时、最终 Session 记录缺失/损坏/不完整，以及 writer 清理状态无法核实，用户界面统一显示“异常退出”；内部仍保留 `unknown`/收尾未知原因，供 Package 安全收尾、writer 保护和父 Pi 读取详情。
- 证据边界：原始 `toolResult`、工具错误、测试输出和调用详情继续保留在 Session/详情中，供父 Pi 核对；过程错误和验证结果不单独改变三种用户状态。
- 实现范围：`progress.ts` 统一导出三种主状态并将工具事件与子 Agent 收尾映射到三种状态；`subagents.ts`、`development.ts`、`task-details.ts` 保留原始错误和内部收尾原因，同时不把它们投影为主状态。
- 验证证据：单元覆盖工具异常、正常完成、异常退出、结构化命令和详情卡片；集成 **198/198** 覆盖真实 Pi、工具异常后继续、进程异常、协议断流、Session 缺失/损坏和 writer 收尾；E2E **15/15**、typecheck 通过。
- 边界：不把测试结果或业务完成判断硬编码进 Package 状态机；本节未 commit、push、创建 PR、发布或部署。

### 13.69 子 Agent 实时输出查看提示简化待办

- 状态：实现与自动化验证完成，实际终端观感待用户试用。实时输出区域保持实时展示和历史滚动能力，不再把查看模式显示成额外状态。
- 目标行为：已移除“实时输出 · 暂停跟随”等容易被误解为子 Agent 暂停执行的提示；保留实时输出内容，以及现有的方向键、`PgUp`/`PgDn` 查看历史、`End` 回到最新和 `Esc` 关闭操作。
- 交互边界：用户上下查看历史时只改变输出视口，不改变子 Agent 的运行状态；回到最新位置后继续跟随输出。主状态仍只使用 13.68 定义的“运行中 / 已完成 / 异常退出”。
- 验证证据：`test/unit/delivery-ui.test.ts` 和 `test/integration/local-command.test.ts` 覆盖连续输出、历史查看、回到底部、关闭详情和任务继续运行；集成 **198/198**、E2E **15/15** 通过。
- 边界：视口切换只改变输出位置，不暂停、重启或改变子 Agent；本节未 commit、push、创建 PR、发布或部署。

### 13.70 文档策略与子 Agent 展示优化的完整提交

- 授权与范围：用户要求“完整提交下代码”，授权将第 13.67—13.69 节的全部实现、测试、Skill、Prompt、技术方案和本台账提交到本地 Git。提交范围为 `main` 上相对 `fc332c2` 的 21 份既有文件，提交标识以 Git 记录为准；不包含业务项目、用户配置或临时测试制品。
- 验证复核：沿用本会话已执行的 `npm run test:unit` **299/299**（根 `adaptive-tests-HdIqTU`）、`npm run test:integration` **198/198**（根 `adaptive-tests-TERvrD`）及 `npm run test:e2e` **15/15**（根 `adaptive-tests-KTumew`），各命令退出码均为 0；最终 typecheck 和差异格式检查通过。集成与 E2E 在最后补齐批准快照的三个文档字段前执行，补齐后完整重跑单元及 typecheck 通过；未重新执行整条 `npm run test:all`。
- 失败与处理：实现期间的集成失败包含旧状态文案断言及详情等待旧文案超时，同步到三种主状态后完整集成通过。单元曾为 **295/299**，其中三个失败发现批准快照漏返文档策略，另一个为工具动作文案断言不符；补齐字段并修正断言后 **299/299**。本次提交前只补台账及修正两处测试缩进，不修改已验证行为，不重复运行测试。
- 兼容性与未执行项：`delivery_approval` 新增必填 `documentStrategy` 及可选规划路径字段，旧调用需更新，旧批准不迁移或自动恢复；无新依赖或配置。测试使用临时目录、fake provider 和真实 Pi SDK/CLI，批准界面为模拟；实际终端及真实模型遵循规则的效果仍待试用。本次不 push、创建 PR、发布、部署或重载业务会话。

### 13.71 README 同步文档策略与恢复说明

- 状态：实现完成，待用户阅读确认。README 已补充三种文档策略、确认面板中的技术方案/实施计划路径、子 Agent 三种主状态，以及 reload 后保留进度但必须重新取得实施授权的恢复规则。
- 范围：仅修改 `README.md` 和本台账，不修改运行代码、测试逻辑、用户项目或 Package 配置；未提交、推送、创建 PR、发布或部署。
- 验证：`git diff --check` 通过；README 命令、交付流程、确认交互和恢复说明与当前 Extension、Skill、Prompt 及技术方案保持一致。

### 13.72 npm 发布准备

- 状态：发布元数据准备完成，实际 npm 发布待登录授权。未 scope 的包名 `pi-adaptive-delivery` 查询 npm registry 返回 404，当前未被占用；已从 `package.json` 移除 `private`，补充 GitHub repository、homepage 和 issues 地址，并在 README 增加 npm 安装入口。
- 打包核对：`npm pack --dry-run --json` 通过，预览包 `pi-adaptive-delivery@0.1.0`，包含 26 个 Package 自有文件，未包含测试目录、`node_modules` 或临时制品。
- 当前阻塞：`npm whoami` 返回 `ENEEDAUTH`，本机尚未登录 npm；未执行 `npm publish`，不推送 Git、不创建 PR、不发布或部署其他内容。登录后仍需先复核 tarball，再执行 unscoped 包的 `npm publish`。
- 后续：首次发布已于第 13.83 节完成。

### 13.73 README 文档导航锚点修正

- 状态：实现完成，待用户终端复核。README “当前边界与进一步阅读”表格中的链接已补充对应章节锚点，点击后会直接定位到技术方案第 8、10、11、14.3 节及实施计划第 13 节；Structured 接入仍可从第 14 节继续查看。
- 范围：修改 README 链接目标，并在两个目标 Markdown 文档中增加稳定的显式锚点；不修改运行代码或 Package 行为；未提交、推送、创建 PR、发布或部署。
- 验证：`git diff --check` 通过；链接目标与显式锚点及对应章节标题一致。

### 13.74 固定验收失败与子 Agent 异常退出状态拆分

- 状态：实现与自动化验证完成，实际终端观感待用户试用。固定验收命令返回非零但子 Agent 进程、原生 Session 和 writer 收尾均核实时，主状态显示“已完成”；验收未通过作为工具结果和详情正文保留。
- 原因：原验收失败路径已调用 `progress.end(COMPLETED_STATUS)`，但 Pi 通过抛出异常生成最终 `toolResult` 时丢失进度快照；详情页随后只看到 `isError=true`，错误地显示“异常退出”。
- 实现：`development.ts` 继续使用 Pi 公开 API 要求的抛异常失败语义，通过 `tool_result` 事件仅对本次调用、工具名、内容、错误标记和原始空详情均匹配的错误结果补入结束进度快照；`task-details.ts` 分开保存 `resultFailed` 与生命周期状态，详情继续展示验收失败正文。writer 交接仍核验同一 Session 中的最终结果，未增加第二套任务状态或日志。
- 验证证据：`npm run typecheck` 通过；`npm run test:unit` **300/300**；`node --import tsx test/support/run-tests.ts test/integration/local-command.test.ts` **24/24**；`git diff --check` 通过。
- 边界：固定验收仍须全部通过才允许独立审查；进程异常、协议/Session/writer 收尾不可核实仍显示“异常退出”。本节未 commit、push、创建 PR、发布或部署。

### 13.75 实施重复确认、意见输入与任务历史优化

- 状态：实现与定向自动化验证完成，实际终端观感待用户试用。用户要求先把问题记录在文档，然后开发；本节为唯一进度记录，设计见技术方案第 10.3 节。第 13.82 节记录后续全量集成发现的测试宿主契约与过时范围样本问题。
- 已确认问题：父修改有语法错误的固定命令后，再次出现完整实施确认；实施面板没有意见入口；相同提案没有防重复处理；复用文档时角色路径可漏传；子任务列表累计混排导致用户误以为有大量并发 Agent。第 13.74 节已有生命周期与失败结果拆分，本次保留并回归该证据。
- 规模检查：沿现有批准、面板和任务投影修改，不新增阶段、依赖、配置、后台调度、语义分类器或第二套计划系统；修订仅扩展原批准入口，任务分组读取原生记录。用户截图中的失败不是新增自动恢复或历史数据迁移的授权。
- [x] 实施确认与命令修订支持“提出修改意见”、多行输入、Esc 返回正文；反馈不批准、不开发，父修订本阶段内容。
- [x] 完全相同的有效实施提案复用本轮批准；同范围返工和原命令复验不重问。固定命令修订展示原因与前后清单，沿用原实施正文/路径/输入，用户确认后形成新批准；完整实施变更显示变化，失效或篡改记录不能复用。
- [x] 批准入口核对文档策略与实际角色路径，实施展示沿用方案中的全部规划路径，保留单文档或合并文档安排。
- [x] 任务列表按已确认方案分组，组内显示阶段调用次数和当前运行数量；命令修订不拆散同一次交付，详情保留原始结果和调用目标。
- [x] 同步 Skill/Prompt/README：按可验证逻辑节点委派，合并相关小修改，每次重试说明新目标或失败依据；优先读已有证据，不以重复开发或完整确认代替取证。
- [x] 验证实施反馈、重复确认、命令修订与取消、旧证据失效、文档策略、任务分组及状态分离。先定向单元和真实 Pi/临时 Git 集成，再按影响运行默认回归及 typecheck、`git diff --check`；fake provider 不等于真实模型或人工终端验收。
- 首轮定向：`node --import tsx test/support/run-tests.ts test/unit/approvals.test.ts test/unit/delivery-ui.test.ts` **75/77**，退出 1，制品根 `adaptive-tests-kRHkcK`。两项由本轮引入：相同实施提案去重后旧测试仍按“重复请求必须撤销”断言；新增确认标题挤占首屏，使短提案源码路径不可见。已按设计区分“相同有效提案复用”和“有变化提案撤销旧权限”，缩减重复标题后复验。
- 最终定向：批准/UI 单元 **78/78**，制品根 `adaptive-tests-Uk7lbN`；覆盖实施意见、命令修订、相同提案去重、取消后旧权限失效、文档路径、批次/尝试展示和第 13.74 节状态分离。`npm run test:unit` **304/304**，制品根 `adaptive-tests-izyOFJ`；`node --import tsx test/support/run-tests.ts test/integration/local-command.test.ts` **26/26**，制品根 `adaptive-tests-QXob1B`，包含真实 Pi/临时 Git 的命令修订与实施意见 **2/2**。`npm run typecheck` 和 `git diff --check` 通过。
- 已完成项：实施反馈返回父会话且不授予权限；固定命令机械修订用 `validationRevisionOf` 绑定当前批准并展示前后命令；相同有效提案不重复弹窗；变化提案或批准来源失效时旧权限关闭；文档策略和规划路径显示一致；任务列表按批准批次、阶段和尝试序号投影。Skill、执行 Prompt 和 README 已同步。
- [x] 子任务列表在已有 Agent 记录时显示模型 ID 和推理级别；详情页继续保留完整 Provider、模型、推理级别和选择理由。验证：`npm run typecheck` 通过；`node --import tsx test/support/run-tests.ts test/unit/delivery-ui.test.ts` **22/22**，制品根 `adaptive-tests-UWB61p`；`git diff --check` 通过。
- [x] 增加方案确认前父模型请求中断的恢复规则：复用当前会话正文，完整时直接重新提交 `design` 提案，不把普通正文当批准，不自动开发；`/delivery-status` 显示恢复方向。Skill、执行 Prompt、技术方案已同步。
- [x] 收缩 `/delivery-status` 默认摘要：仅保留阶段、下一步和子任务；工作区、工具、运行模式与 lease 等诊断信息移至 `/delivery-status details`。相关状态测试同步更新。
- 待用户验证：Package 重载后在真实终端观察实施意见输入、命令修订摘要、批次列表和窄屏显示；真实模型是否按新 Prompt 减少无必要的完整实施确认仍未宣称完成。未运行其他集成分组、E2E、Structured 或真实业务项目验收；本节未 commit、push、创建 PR、发布或部署。

### 13.76 阶段批准后自动衔接父模型回合

- 状态：已完成。用户实际终端连续两次出现 design 批准已成功记录、但父模型在工具结果后结束回合，未弹出 implementation 确认。问题已确认是批准工具只返回 Prompt 指引，没有使用 Pi 公共 API 触发后续父回合；当前不修改业务项目，不提交、推送、创建 PR、发布或部署。
- 已确认事实：`extensions/delivery-gate/src/approvals.ts` 在当前版本及前一提交均只返回“继续准备实施步骤”的工具结果；Package 没有批准成功后的 `sendMessage`/`sendUserMessage` 衔接。Pi 公开文档提供 `agent_settled`、`deliverAs: "followUp"` 和 `triggerTurn: true`，可在当前自动回合完全结束后启动下一回合。
- 最小方案：批准成功后登记绑定当前批准 ID 的一次性内存衔接标记；`agent_settled` 且没有用户排队消息时发送隐藏 custom follow-up。design 只要求生成并调用 implementation 确认，implementation 只要求按已确认范围调用 `delivery_develop`；父已自行进入下一阶段、会话切换、用户意见/暂停/取消或批准失败时清除或不创建标记。批准记录、两次确认、权限、writer 和任务历史格式不变。
- 验收标准：覆盖 design 批准后父回合结束自动触发一次 implementation 准备；父已自行调用 implementation 时不重复触发；implementation 批准后只触发开发衔接且不跳过批准；用户排队消息、暂停、拒绝、会话切换和无持久批准均不触发；真实 Pi/临时 Git 至少验证 design → implementation 弹窗链路，typecheck、单元、受影响集成与 `git diff --check` 通过。
- 已完成：批准成功后登记绑定批准 ID 的一次性内存衔接标记，在 `agent_settled` 且无排队消息时通过 `sendMessage({ deliverAs: "followUp", triggerTurn: true })` 触发下一父回合；design 只衔接 implementation 提案，implementation 只衔接 `delivery_develop`。批准工具、下一阶段工具调用、会话切换、重载、暂停、取消和意见输入都会清除或不创建标记。
- 验证证据：批准单元测试 `58/58`（完整单元 `305/305`）；真实 Pi/临时 Git 的 `document-entry.test.ts` `30/30`；`local-command.test.ts` 与 `development.test.ts` 合计 `105/105`；`npm run typecheck`、`git diff --check` 通过。测试宿主统一使用公开 `session.waitForIdle()` 等待会话收尾，避免把底层 Agent 空闲误认为父会话已完成 follow-up。
- 待用户验证：在真实终端重载 Package，确认 `/delivery-shape` 后的 design 批准能自动进入 implementation 提案，implementation 批准能自动进入开发委派；当前不自动重载亚马逊会话，不直接修改亚马逊业务代码。

### 13.77 `/delivery-status` 默认摘要去重

- 状态：已完成。真实终端截图显示当前阶段、下一步和运行任务重复包含完整开发 action，默认通知过长且难以判断用户下一步。
- 最小方案：当前阶段只显示阶段标签；运行中只显示任务类型和生命周期状态；详细 action、模型、命令、输出和 Session 路径保留在 `/delivery-tasks`，诊断信息保留在 `/delivery-status details`；details 只保留一行能力说明和结构化诊断字段，不重复完整能力介绍；writer 收尾和未知 lease 各保留一条简短阻塞提示。
- 验收标准：默认状态不重复输出任务 action；阶段、下一步、当前任务和阻塞提示仍准确；详情命令继续保留完整诊断；真实 Pi/临时 Git、单元测试、typecheck 和 `git diff --check` 通过。
- 已完成：状态摘要固定为阶段、下一步、当前任务和入口提示四类信息；任务类型从进度标签投影，详细任务正文不再进入默认通知；details 的能力说明压缩为单行，原有工作区、工具、模式、lease、状态目录和子 Session 字段保留。
- 已完成：README 同步说明 design → implementation → `delivery_develop` 的自动衔接、默认状态四行摘要、details 诊断字段和自动衔接失败时的 `/delivery-plan`、`/delivery-run` 手工入口，并修正命令数量描述。
- 验证证据：完整单元测试 `305/305`；状态相关真实 Pi/临时 Git 定向测试 `7/7`；完整 Extension 生命周期测试 `22/22`；`npm run typecheck`、`git diff --check` 通过。

### 13.78 子任务批次命名去歧义

- 状态：已完成。真实终端显示“交付 1/2”，容易被理解为第几次交付或第几个任务；实际编号按方案批准链路区分实施批次，独立只读任务不属于该批次。
- 最小方案：将“交付 N”改为“实施批次 N”，将“独立调用”改为“独立任务”，将“累计 N 次调用”改为“共 N 个 · 运行中 M 个”；保留开发、验收、审查的尝试次数和当前运行数量。
- 验收标准：同一方案下的返工仍显示同一实施批次并增加尝试次数；新方案形成新实施批次；独立只读任务不伪造批次；任务详情、模型和推理级别信息保持不变。
- 已完成：任务列表、实时详情和选择标题统一使用“实施批次 N”“独立任务”“共 N 个 · 运行中 M 个”，阶段尝试次数改为带空格的“第 N 次”；README 与技术方案同步说明归组规则。
- 验证证据：`delivery-ui.test.ts` `22/22`、`npm run typecheck`、`git diff --check` 通过。

### 13.79 `/delivery-shape` 补全顺序

- 状态：已完成。真实终端的 `/delivery-` 补全由 Pi 模糊匹配排序，`delivery-shape` 排在其他交付命令之后，入口不够醒目。
- 最小方案：通过 Pi 公开的 `addAutocompleteProvider` 包装当前补全结果，只将 `delivery-shape` 放到其他 `delivery-*` 命令前；保留命令名、匹配和完成行为，不修改 Pi 或添加别名。
- 验收标准：启动后 `/delivery-` 列表中 `delivery-shape` 位于其他 `delivery-*` 之前；普通命令和文件补全行为不变；首次 shape 后无需重建补全；类型检查和受影响单元测试通过。
- 已完成：通过公开 autocomplete provider 包装将 `delivery-shape` 移至其他 `delivery-*` 之前，保留命令名称、参数完成和普通文件补全行为；activation 夹具覆盖启动后顺序和首次 shape 后无需重建。
- 验证证据：`activation.test.ts` `8/8`、`npm run typecheck`、`git diff --check` 通过。

### 13.80 实施保护路径提前校验与委派启动失败提示

- 状态：实现完成，待真实 Package 重载后复核。亚马逊真实 Pi 会话暴露两处流程问题：实施提案曾把父维护的 P6.1 规划文档列入 `paths`，批准成功后才在固定验收候选快照阶段被保护路径拒绝；开发委派因父子 Skills 不一致在发送前拒绝后，父模型改用普通工具写入业务代码，造成实际差异没有受控开发证据。
- 已确认事实：固定验收的保护路径拒绝是安全关闭行为，但实施批准入口没有提前拒绝 `paths`/`inputs` 与已确认规划路径冲突；Skills 握手拒绝本身不能放宽，现有错误提示也没有直接写明“不得改用普通写工具继续本次开发”。
- 最小方案：在实施批准持久化前拒绝候选路径或额外验收输入与设计规划路径相同或互相包含；在所有发送前环境拒绝信息中明确启动失败、不得普通写入，并在 adaptive-delivery Skill 中同步父模型停止条件。保留普通工具原生权限和父子 Skills 严格一致性，不增加工具隔离、权限系统或后台调度。
- 验收标准：规划文档出现在实施 `paths` 或 `inputs` 时在批准入口失败；合法代码范围仍可批准；Skills/工具/规则/指令握手失败信息包含停止普通写入提示；现有批准、子任务和固定验收测试不回归。
- 已完成：`approvals.ts` 在持久化实施批准前拒绝候选路径或额外验收输入与父规划路径相同或互相包含；`subagents.ts` 的 Structured、工具、指令、规则和 Skills 发送前拒绝均补充“子任务尚未发送、不得改用普通工具继续源码或测试写入”的停止提示；Skill 同步父模型停止条件。未放宽环境握手或普通工具权限。
- 已完成：`development.ts` 将未发送任务但已正常关闭子进程的启动失败显示为“异常退出”，不再把收尾证明当作任务完成。已发送任务的验收结果与生命周期继续分离，writer 交接规则保持不变。
- 验证证据：批准与子会话定向测试 **100/100**；完整单元测试 **306/306**；真实 Pi/临时 Git 开发集成测试 **80/80**；`npm run typecheck`、`git diff --check` 通过。测试覆盖规划路径冲突、合法实施范围、握手失败状态和原有 writer/验收回归。
- 提交前补验：`node --import tsx test/support/run-tests.ts test/integration/local-command.test.ts` **26/26**，制品根 `adaptive-tests-Yr4cL7`；使用 fake provider、真实 Pi CLI 和临时 Git，覆盖调整后的命令修订、实施意见、验收失败和审查链路，未调用真实模型。
- 验证过程：首次定向测试因本次辅助函数插入位置错误出现 26 项连锁失败及 typecheck 失败，修正后通过；开发集成首次被夹具中旧的规划路径声明阻断，调整为源码范围后继续复验；随后修正启动状态及正常/异常关闭的测试期望，并恢复误匹配的断言，最终 **80/80**。这些失败均已处理，未作为通过证据。
- 待用户验证：业务会话完成当前收尾后加载新 Package，重新确认 Creative Apply 的准确实施范围；Skills 不一致的具体来源仍待现场核对，本次保留严格握手检查。亚马逊业务代码未修改；用户已另行授权完整本地提交，未授权推送、创建 PR、发布或部署。

### 13.81 任务卡片分离生命周期颜色与验收结果

- 状态：实现与自动化验证完成，实际终端观感待用户试用。真实验收截图显示固定命令第 5 条 Black 失败后，子 Session 已正常收尾且主状态为“已完成”，但 Pi 原生工具卡仍因 `isError=true` 使用红色背景，容易把业务验收失败误读为子 Agent 异常退出。
- 最小方案：交付任务自有渲染器使用 `renderShell: "self"`，由 Package 根据已核实的生命周期状态选择任务卡背景和标题颜色；“已完成”保持完成样式，验收失败仍保留原生错误结果、详情正文和父模型可见的失败语义；真正“异常退出”继续使用异常样式。
- 验收标准：已完成但 `isError=true` 的验收结果不使用异常颜色；异常退出仍使用异常颜色；父模型仍收到失败工具结果，详情仍保留失败命令和未执行命令；普通开发成功和取消/握手异常不回归。
- 已完成：更新 `progress.ts`，使用 Pi 公开 `renderShell: "self"` 和 `Box` 自行绘制任务卡外壳；背景仅由生命周期选择，保留 `isError=true`、失败正文和固定验收门禁。进度测试覆盖已完成但失败结果不使用 `toolErrorBg`、异常退出继续使用错误色；真实 Pi 集成继续核验失败结果、结束快照、writer 释放和禁止进入审查。不修改亚马逊业务项目，不推送、创建 PR、发布或部署。
- 验证证据：进度与交付 UI 定向测试 **31/31**；完整单元测试 `npm run test:unit` **306/306**；真实 Pi/临时 Git 的 `test/integration/local-command.test.ts` **26/26**，其中“固定验收退出 1 仍判为失败，不能因展示优化继续审查”通过；`npm run typecheck`、`git diff --check` 通过。官方 Pi `extensions.md` 与 `tui.md` 已核对 `renderShell: "self"`、`Box` 和 `isError` 的公开语义。

### 13.82 集成测试宿主契约与实施范围样本修复

- 状态：实现与自动化验证完成，已本地提交（`f91971d`），实际终端观感待用户试用。复查发现 `e93a139` 后未覆盖的 `document-entry` 集成宿主没有提供公开 `ctx.ui.addAutocompleteProvider`，以及一个实施样本仍把受保护的 `plan.md` 当作源码范围；两者均不是产品运行时逻辑回归。
- 最小方案：在 `document-entry` 真实 SDK 集成宿主中补齐无副作用的 `addAutocompleteProvider` 测试契约；将该样本的实施批准范围改为 `src`。不在产品代码中加入针对不完整 UI 宿主的兼容保护，不放宽实施范围保护校验。
- 已完成：同步技术方案第 10.8 节，修正集成夹具和过时实施范围调用；未修改亚马逊业务项目。整套集成中曾出现的 `child-environment` 单项超时已单独重跑通过，按并发资源波动记录，不扩大修复范围。
- 验证证据：`document-entry.test.ts` **30/30**；完整 `npm run test:integration` **203/203**；`npm run test:unit` **306/306**；`npm run test:e2e` **15/15**；`npm run typecheck`、`git diff --check` 通过。测试使用 fake provider、真实 Pi SDK/CLI、临时 Git 和隔离目录，未调用真实模型。
- 边界：改动已随 `f91971d` 本地提交，未 push、创建 PR 或部署其他内容。Structured 专项、真实终端、真实模型和跨平台仍按既有台账标记为未验证。

### 13.83 npm 首次发布完成

- 授权与范围：用户要求先把 npm 发布收口，并确认“可以先提交吧，然后按推荐就行”；据此提交第 13.82 节改动、补充 MIT 许可证、发布 `pi-adaptive-delivery@0.1.0` 并完成发布后核对。未 push、未创建 tag/PR，未部署其他内容。
- 提交：`f91971d`（修复集成测试宿主契约与实施范围样本）、`511e868`（补充 MIT 许可证：`package.json` 增加 `license: "MIT"`，新增 `LICENSE` 文件）。
- 首次发布受阻与处理：登录后 `npm publish` 返回 403，npm 要求发布者启用 2FA 或使用 bypass-2FA granular token；npm 已停用新增 TOTP（验证器 App）绑定，改为在账号上登记 WebAuthn 通行密钥（`auth-and-writes`），经浏览器通行密钥确认后发布成功。
- 发布证据：registry 返回 `pi-adaptive-delivery@0.1.0`，`dist-tags.latest=0.1.0`，license `MIT`，维护者 `seanxx`；线上 tarball shasum `c8c28fa9454d809491b3e1929cf71161e5e54f95` 与本地 `npm publish --dry-run` 完全一致；下载的发布包共 27 个文件（含 LICENSE、README、技术方案、实施计划、extensions、prompts、skills），不含测试目录与 `node_modules`。
- 使用：目标项目可执行 `pi install npm:pi-adaptive-delivery`（会写入 Pi 设置，本次未在验证中执行）；本地路径与 Git 安装方式保持不变。
- 边界与后续：本次未调用真实模型、未修改业务项目；Structured 专项、真实终端、真实模型与跨平台仍按既有台账标记为未验证。后续发布须递增版本号，并由账号持有人完成一次通行密钥确认；README 中 `pi install npm:...` 入口自此可用。

### 13.84 画廊卡片预览图与 npm 0.1.1

- 状态：实现、推送与发布完成；画廊实际展示待 npm 搜索索引收录。用户要求让 pi.dev 包画廊的卡片更醒目，并授权推送 GitHub。
- 依据：Pi 官方 `docs/packages.md` 规定画廊展示带 `pi-package` 标签的包，预览媒体通过 `pi.image`（PNG/JPEG/GIF/WebP）或 `pi.video`（MP4）声明公网 URL；卡片预览区为 16:10，媒体按 `object-fit: cover` 填充。
- 最小实现：新增 `docs/images/preview.png`（1280×800，16:10 深色流程示意：方案确认→实施确认→开发→验收→审查），`package.json` 的 `pi` 增加指向 GitHub raw 的 `image`，版本升为 `0.1.1`。图片不进入 npm tarball（`files` 未包含 `docs/images`），安装包仍为 27 个文件。
- 推送与发布：`bb1bc81`（预览图 + `0.1.1`）推送到 `origin/main`（`f3420fb..bb1bc81`）；`npm publish` 经通行密钥确认后返回 `+ pi-adaptive-delivery@0.1.1`，registry 异步处理约 1 分钟后可用，`dist-tags.latest=0.1.1`。
- 验证证据：预览图 URL 返回 **HTTP 200**、`image/png`、320440 bytes；registry 元数据 `license=MIT`、`pi.image=https://raw.githubusercontent.com/small-xiexu/pi-adaptive-delivery/main/docs/images/preview.png`、27 个文件；线上 tarball shasum `e41604075aa40d3478bebef032fa15e046050034` 与本地 dry-run 一致。
- 待验证：`https://pi.dev/api/packages/preview-media?name=pi-adaptive-delivery` 仍返回空，`keywords:pi-package` 搜索索引也未收录（`0.1.0` 发布约 1 小时后仍未收录）。已排除包名、版本和 `pi-package` 标签问题，属于 npm 搜索索引延迟；收录后画廊卡片应自动显示该图。
- 边界：未修改运行时代码与权限逻辑；未调用真实模型；未创建 tag，未发布其他内容。
- 补充：README 顶部（一句话简介后）新增同一张预览图的 Markdown hero 引用，alt 描述交付流程，便于 GitHub 访问者第一眼看到；npm 包页面仍展示 `0.1.1` 的 README，如需同步需另发 `0.1.2`。
- 补充 2（`0.1.2`）：新增 `pi.image` 时未同步 `package-manifest.test.ts` 的精确断言，`0.1.1` 期间默认单测为红（包本身仍可用）；已修正断言并升版 `0.1.2`，用于让 npm 页面展示带图 README。验证：`npm run typecheck`、`npm run test:unit` **306/306**、`npm pack --dry-run` 27 个文件、shasum `f06cbee49472fed1c793529a42e7398e145b266b`。
- 补充 3（`0.1.2` 发布）：`dist-tags.latest=0.1.2`，tarball shasum `b2da8a356370eec2943a3ff661bfbb9dc97fa452`（与补充 2 的 dry-run 不同，因发布前又更新了本台账，而台账在 tarball 内）；registry 的 latest `readme` 字段已包含预览图引用，npm 包页面据此展示该图；直连 `www.npmjs.com` 页面被 Cloudflare 拦截（HTTP 403），故以 registry `readme` 字段作为验证依据。`pi.dev` 预览接口与 npm 搜索索引仍未收录。

### 13.85 事实源文档与发布状态同步

- 状态：已完成并通过仓库事实核对；本次只改文档，不修改产品代码、测试、依赖或配置，未 commit、push 或发布。
- 起因：完整梳理时发现事实源滞后于实际：技术方案第 1 节仍写“尚未发布”，本台账第 1 节仍停留在 `bb1bc81` 基线与 npm `0.1.1`、未覆盖第 13.70—13.84 节与 `0.1.2`，README 快速开始仍写“发布到 npm 后”。
- 修改范围：`docs/技术方案.md` 第 1 节状态、本文件第 1 节摘要、`README.md` 快速开始措辞及本节记录；不新增文档、不复制执行进度、不改变设计、权限或发布边界。
- 核对证据（HEAD `00a6f0c`，本次实际执行）：`npm run typecheck` 退出 0；`npm run test:unit` **306/306**、`npm run test:integration` **203/203**、`npm run test:e2e` **15/15**，三组均零失败、取消或跳过；`npm pack --dry-run` 为 `pi-adaptive-delivery@0.1.2` 27 个文件；`npm view pi-adaptive-delivery version dist-tags license` 返回 `0.1.2`、`latest=0.1.2`、`MIT`；`git status` 干净且与 `origin/main` 同步，`git diff --check` 通过。
- 边界：Structured 专项、真实终端、真实模型与跨平台未在本次重跑或验收，沿用第 13.64、13.82 节记录；上述自动化使用 fake provider、临时 Git 与隔离目录，不代表真实模型质量或桌面体验。

### 13.86 npm 0.1.3 发布与包内文档同步

- 授权与范围：用户确认再发一版，授权把第 13.85 节的文档同步发布到 npm 并提交推送；只改 `package.json` 版本与版本文案，不修改产品代码、测试、依赖、权限或发布流程。
- 版本升级与提交：`package.json` 升为 `0.1.3`，同步 README、技术方案和本台账的版本文案；`npm run typecheck` 退出 0、`npm run test:unit` **306/306**、`git diff --check` 通过；提交 `b506061`（升级 0.1.3 并同步 npm 发布状态文档）已推送，`main` 与 `origin/main` 同步。
- 打包核对：`npm pack --dry-run` 为 `pi-adaptive-delivery@0.1.3`、27 个文件、shasum `088aa8857a7dbfabdd1d0d96d387387f0e960068`；两次 dry-run 与发布尝试算出的 shasum 完全一致。
- 发布过程：非交互终端下 `npm publish` 返回 401 `EOTP`，npm 的 WebAuthn 授权链接只在 TTY 下展示，凭据也不可代为读取；改用 `script -q /dev/null` 申请伪终端重试后 registry 返回手机授权链接并轮询 `doneUrl`，用户用手机通行密钥确认，npm 返回 `+ pi-adaptive-delivery@0.1.3`。两次 EOTP 失败保留为环境事实，未修改 npm 账号配置，也未使用或创建 bypass-2FA token。
- 发布证据：registry `dist-tags.latest=0.1.3`、`license=MIT`；线上 tarball shasum `088aa8857a7dbfabdd1d0d96d387387f0e960068` 与本地 dry-run 完全一致；下载解包为 27 个文件，README 与技术方案含“当前 `0.1.3`”，实施计划为 `b506061` 内容，`docs/images` 仍不在包内（画廊预览图按 `pi.image` 公网 URL 展示）。
- 边界：本次只发布版本号与文档变化，未改运行时代码；Structured 专项、真实终端、真实模型与跨平台仍未重跑或验收；未创建 tag、未发布其他内容。本节完成状态在提交成功后补记并纳入同一本地提交，最终 hash 以 Git 原生记录为准。

### 13.87 轻量任务父侧直改与固定验收简化

- 状态：已完成。原设计把固定验收也放进标准 Pi 子会话，导致简单任务承担开发子 Agent、验收子 Agent 和收尾交接的固定成本；同时技术方案仍要求源码修改统一委派，与当前普通工具不受 Package 拦截的事实不一致。
- 最小方案：`delivery_validate` 改为父 Pi 在父 writer lease 内调用受控 `createLocalOperations` 或已核实的 Structured exec bridge，按批准命令清单逐条执行；不启动模型、不创建验收子 Session，继续记录 `delivery-execution`、前后 candidate digest、真实退出状态并在父原生结果落盘后释放 lease。`delivery_develop` 和 `delivery_review` 保留给复杂实现与按风险安排的独立审查。同步 README、Skill、Prompt、技术方案以及旧集成断言。
- 安全边界：保留两次批准、单 writer、候选指纹绑定、父 Session/执行引用和持久结果核验。简单任务源码由父 Pi 的普通工具直接修改，Package 仍不拦截普通工具的路径或 I/O；因此这条范围约定继续主要依靠父模型遵守，属于已知边界，没有新增拦截器、计划系统、Agent 框架或配置面。
- 验收证据：`npm run typecheck` 退出 0；`npm run test:unit` **306/306**；`npm run test:integration` **196/196**；`npm run test:e2e` **15/15**；`git diff --check` 通过。集成覆盖父侧完整固定命令、失败/取消、候选变化、父 Session 执行引用、审查读取父侧验收记录、复杂开发子 Agent 和 writer 异常边界；测试使用 fake provider、真实 Pi SDK/CLI、临时 Git 和隔离目录，未调用真实模型。
- 未验证：真实终端观感、真实模型是否稳定选择“简单任务父侧直改/复杂任务委派”、Structured 真实用户配置及跨平台行为仍需用户试用确认。本次未 commit、push、创建 PR、发布或部署。

### 13.88 极简编排：删除固定验收工具

- 状态：已完成。根据用户确认的极简方向，删除 `delivery_validate`、`validation.ts`、本地固定执行器和旧 Structured exec bridge；父 Pi 负责简单任务的源码修改和项目已有测试、编译或 lint，复杂任务使用 `delivery_develop`，按风险使用 `delivery_review`。不新增测试 Agent 或验收 Agent。
- 实现：实施批准不再保存固定命令清单或 `validationRevisionOf`；候选指纹继续用于审查前后的代码与输入核对。`delivery_review` 子 Agent 收到原批准正文、路径和实际差异，按任务要求只读分析并主动调用项目工具，记录真实结果；开发子 Agent 的自检仍只是过程证据，不能替代父核对或独立审查。
- 保留边界：两次批准、单 writer/lease、候选指纹绑定、子 Session 收尾和父工具结果持久记录核验继续保留。删除后的真实损失是没有 Package 专用的固定命令顺序、逐命令 `delivery-execution` 证据和固定命令不可替换/漏跑门禁；普通工具本来就不受 Package 全工具拦截，因此简单任务父 Pi 直改的范围约束仍主要依靠模型遵守。
- 验证：`npm run typecheck` 通过；`npm run test:unit` **270/270**；`npm run test:integration` **103/103**；`npm run test:e2e` **15/15**；`git diff --check` 通过。自动化使用 fake provider、临时 Git 和隔离目录，未调用真实模型、真实 Provider 或用户终端。
- 未验证：真实模型是否在简单任务选择父侧直改、审查子是否能根据不同项目选出合适检查、真实 Structured 用户配置、跨平台行为和终端观感，均需真实终端或真实模型试用确认。

### 13.89 开发与审查统一继承父 Pi 权限

- 状态：已完成。用户最终选择审查子 Agent 也不裁剪权限，全部沿用父 Pi 的普通工具；此前讨论的禁用审查写入/编辑工具方案没有实施。
- 已确认事实：`policy.ts` 的 `inheritedTools()` 只筛选父当前启用的普通工具并排除本 Package 的父协调入口，不按角色或读写类型裁剪。`subagents.ts` 的 `startChild()` 对开发和审查使用同一工具列表，`readyChild()` 核对实际工具定义和来源；`development.ts` 的审查沿同一路径启动。普通 `tool_call` 不被 Package 拦截。
- 最小变更：仅明确 README、Skill、技术方案与本台账中的权限继承说明，不改运行时代码、不增加配置。开发实现、审查检查并报告问题属于提示词职责；两次批准、交付 writer、候选核对及持久收尾继续沿用。
- 验证：定向权限、开发、审查和真实 Pi/临时 Git 工具继承测试 **15/15** 通过，覆盖父当前启用工具继承、停用工具不补回、普通工具不被 Package 拦截、开发与审查委派、原插件检查及 writer 收尾。真实模型的职责遵守与真实用户插件内存状态不在本次验证范围；未提交、推送、发布、安装或重载用户会话。

### 13.90 审查修改源码后继续形成新候选

- 状态：已完成。删除审查期间候选变化即失败的门禁；审查子 Agent 可使用继承的普通写入工具，若在批准范围内修改源码，审查结束后重新捕获候选并生成对应审查制品，继续正常收尾。
- 变更：`delivery_review` 不再要求“只读、不修改文件”；普通 `delivery_readonly` 仍保持只读职责。审查结果使用修改后的候选摘要和差异制品，不复用修改前的候选作为最终结果。两次批准、writer/lease、持久 Session 核验和父裁决继续保留。
- 验证：`npm run typecheck`、开发/审查真实 Pi 临时 Git 集成测试 **5/5**、定向权限/开发/审查测试 **15/15**、完整单元测试 **270/270**、完整集成测试 **104/104**、端到端测试 **15/15** 和 `git diff --check` 通过；新增夹具已验证审查在批准范围内写入后重新捕获最终候选并生成对应差异制品。真实模型主动修改源码的职责行为仍待真实试用。

### 13.91 极简编排完整提交与 npm 0.1.4 发布

- 状态：已完成。用户明确授权完整提交、推送代码并发布；本轮范围为第 13.87—13.90 节的全部代码、测试、文档和 `0.1.4` 版本更新。
- 发布准备：`package.json` 与 `package-lock.json` 同步为 `0.1.4`，锁文件只改变根包版本，没有安装或更新依赖。README、技术方案和本台账同步当前版本与状态；远端 `main` 已 fetch，提交前与基线 `dfcfcdb` 一致。
- 验证：沿用第 13.90 节的最终单元 **270/270**、集成 **104/104**、端到端 **15/15**；升版后 `npm run typecheck` 与 `git diff --check` 通过。`npm pack --dry-run --json` 核对为 25 个文件，包含自有资源和文档，不含测试、`node_modules` 或已删除的验收模块。
- 兼容性：移除 `delivery_validate` 与固定命令参数，不提供旧调用兼容或迁移；开发和审查沿用父工具，普通工具不受 Package 拦截。真实模型、真实终端、Structured 用户配置和跨平台未在本次发布前新增验证。
- 提交与推送：代码提交为 `a96023e`（简化交付编排并移除固定验收），已推送到 `origin/main`；发布完成后本节证据更新另形成提交。未创建 tag、PR 或部署其他内容。
- 发布证据：`npm publish --access public` 返回 `+ pi-adaptive-delivery@0.1.4`；registry 查询确认版本 `0.1.4`、`dist-tags.latest=0.1.4`、license `MIT`。线上 tarball 为 `https://registry.npmjs.org/pi-adaptive-delivery/-/pi-adaptive-delivery-0.1.4.tgz`，shasum `bfead4e63a7463cd5ccd1a4495e8ffb54de3abc4`，integrity `sha512-4+Tcik2dUeI+0SMLOAcOmhDOK0mp9of7lKeGSVyArDvzYhlpszr7U3CcFX3pYmtBtBhH66vtmqe2NXj1gDOsUw==`。npm 发布时仅提示规范化 `repository.url`，未修改仓库文件。
- 边界：代码和发布均已完成；真实模型、真实终端、Structured 用户配置和跨平台未在本次发布前新增验证。

### 13.92 文档职责同步、临时 demo 完整流程验证与 npm 0.1.5 发布

- 状态：已完成。同步 README 中过时的“审查不改代码”表述，使其与 Skill、技术方案、运行提示和当前实现一致：`delivery_review` 负责独立检查，必要时可以修改批准范围内源码；这不是工具权限裁剪，修改后会重新记录最终候选和差异。
- Demo 验证：使用真实 Pi SDK/CLI、临时 Git 和隔离 demo 项目，fake provider 不调用真实模型，运行 `test/integration/development.test.ts` 中的复杂开发、独立审查和审查修改源码三个场景；3/3 通过，覆盖两次批准、开发子 Agent、项目检查、独立审查、批准范围内修改、最终候选更新、writer 收尾和子进程退出。
- 扩展 demo 验证：在同一隔离测试入口创建临时 Git 项目和真实 `node --test` 测试。简单路径由父 Pi 直接修改并通过测试，复杂路径先由开发子 Agent 产生失败检查，再由审查子 Agent 在批准范围内修复并通过测试；两条路径均完成 `/delivery-exit`、普通工具恢复、两次批准和 writer/子进程收尾，**2/2** 通过。复杂路径的审查前后候选不同，最终 `after/src/value.js` 与 diff 均记录修复后的内容。证据根：`adaptive-tests-MgaZL8`，临时 demo 结果分别写入 `adaptive-pi-xymgAK/demo-result.json` 和 `adaptive-pi-RJUeCH/demo-result.json`。
- 提交与推送：文档和版本提交为 `20c3ff8`，已推送到 `origin/main`；本次扩展 demo 证据随本台账更新提交。真实模型和用户终端仍未验证。
- 发布证据：`npm publish --access public` 返回 `+ pi-adaptive-delivery@0.1.5`；registry 查询确认版本 `0.1.5`、`dist-tags.latest=0.1.5`、license `MIT`。线上 tarball 为 `https://registry.npmjs.org/pi-adaptive-delivery/-/pi-adaptive-delivery-0.1.5.tgz`，shasum `7bba4e0c91b7a37e65be2cdb25d424978952454e`，integrity `sha512-M04hfzgSfFwaTYQ/Vvk6UQndetdI5GRvyzsOD3ISb+6mdrBRxwm2A51eUM0d4roqg9xXWoJIKrq4cYdtJ0ahaA==`。npm 发布时仅提示规范化 `repository.url`，未修改仓库文件。

### 13.93 用提示词区分开发修复与独立审查职责

- 状态：已完成。用户明确纠正：全部普通工具和权限继续继承父 Pi，开发与审查的职责仅在提示词中区分，不新增代码层面的角色权限限制。
- 最小实现：开发负责实现、修复和自检；审查默认不修改源码，独立读取代码、运行项目检查并报告问题，交回父 Pi 决定直接修复或重新委派开发。只更新现有委派提示、README、Skill、技术方案和运行提示；工具继承、批准、writer、候选记录与持久收尾实现不变。
- 验证证据：`node --import tsx test/support/run-tests.ts test/unit/policy.test.ts test/integration/development.test.ts test/integration/inherited-tools.test.ts` 通过 **16/16**；`npm run typecheck && git diff --check` 通过。真实 Pi SDK/CLI、临时 Git 和隔离 demo 中核对审查提示包含“默认不修改源码”“交回父 Pi”，同时保留 `write`、`edit`、`bash`；刻意让 fake 审查写入仍可执行，证明没有暗加权限裁剪。扩展 demo 运行真实 `node --test`：简单路径父 Pi 直接修改、0 个子 Agent；复杂路径开发失败检查→审查报告且不写入→父读取记录→开发返工→再次审查通过，最终 **2/2**，证据根为 `adaptive-tests-9RB8wg`，复杂路径 4 个子会话、两次批准、writer 释放、退出后普通工具恢复。真实模型是否遵守职责不由 fake provider 证明。

### 13.94 大型订单结算 demo 验证完整交付链

- 状态：已完成。demo 在仓库外临时目录运行，使用真实 Pi SDK/CLI、临时 Git、fake provider 和模拟 TUI，不调用真实模型。
- 案例：创建商品目录、购物车小计、满百折扣、税费和 4 个项目测试；基线测试先失败。开发子 Agent 完成部分折扣修复并保留测试失败；审查子 Agent 独立读取源码和 diff、运行真实 `node inputs/test.cjs` 并报告失败，不写入源码；父读取审查 Session 后重新调用开发子 Agent 补齐税费和金额 rounding；第二次审查通过。
- 结果：大型 demo **1/1**，4 个子会话、2 次批准，审查提示仍保留 `read/edit/bash` 普通工具继承，最终候选和 diff 记录修复内容，writer 释放，`/delivery-exit` 后普通工具恢复。证据根：`adaptive-tests-JIRdv1`，结果文件为 `adaptive-pi-oEQXmw/large-demo-result.json`。package 全量回归随后通过 unit **270/270**、integration **104/104**、E2E **15/15**，`npm run typecheck && git diff --check` 通过。
- 限制：fake provider 预设了子 Agent 的工具调用和修复步骤，证明的是 Package 编排、权限继承、真实项目检查与收尾行为；真实模型能否自行理解业务、遵守审查职责和选择合适命令仍未验证。

### 13.95 日常使用体验优化：假设可见、证伪式审查、档位宣告与卡死出口

- 状态：已完成实现与自动化验收；三条提示词改动的实际效果待真实试用。用户确认按五条清单优化，目标是「精度很高、天天用」的个人工具定位；未新增配置面、档位状态、评分器或第二套流程。
- 背景（本次读码核对确认的事实）：
  - `development.ts` 的 `finish()` 在收尾失败时设置 `state.fault` 但保留 `active`，`pending` 因此永远为 true，`assertCanExit` 永久拒绝 `/delivery-exit`；本会话没有任何出口。`parent-writer.ts` 为同一结构。
  - `<git-dir>/pi-adaptive-delivery/leases/<key>.operation-lock/` 在进程被强杀后会残留；`withOperationLock` 重试 100 次后失败，`read`/`assertIdle`/`acquire`/`release*` 都无法清理，仅删除 lease JSON 也无效，只能手工 `rm -rf`。
  - `resolveWorkspaceIdentity()` 硬要求 Git 仓库，但 `/delivery-shape` 不检查；非 Git 目录会在第一次批准或文档写入时才暴露英文错误。
- 实施项（按此顺序执行）：
  1. 提示词：`design` 正文固定附一行「本次假设」，列出方案依赖但用户未明确确认、若不成立就要改方案的推断，最多 3 条，没有写「无」。落点 `approvals.ts` 的 `body` 参数说明、Skill、`delivery-plan.md`。
  2. 小改：`/delivery-shape` 前置 Git 检查，失败给中文理由且不写启用记录、不安装运行逻辑（`activation.ts`）。
  3. 提示词：审查委派改为要求逐条取证（列出关键事实、给文件与行号、列出未覆盖失败路径），而非要求表态。落点 `development.ts` 审查任务、`subagents.ts` 审查前缀、Skill；必须保留 `test/integration/development.test.ts:44-45` 已断言的「默认不修改源码」「交回父 Pi」。
  4. 提示词：父在开始修改或委派前用一行说明本次路径（父 Pi 直接修改 / `delivery_develop` / 是否安排 `delivery_review`）与理由，用户可当场纠偏。落点 Skill、`delivery-run.md`。
  5. 行为：区分「已终结的失败」与「仍在途」。已 `finished` 且已 `fault` 的失败不再阻塞 `/delivery-exit`，退出时列出未收尾项；真正在途仍阻塞（`development.ts`、`parent-writer.ts`、`index.ts`）。
  6. 行为：新增用户命令 `/delivery-unlock`。仅在无交互、无在途任务时可用；展示 lease 记录与残留操作锁证据，二次确认后强制清理并写一条 `delivery-unlock` 审计记录；不自动解锁、不提供模型调用参数、不做 PID 存活探测（`workspace.ts`、`index.ts`、`activation.ts`）。
- 明确不做：档位字段、评分配置、schema 必填校验、超时自动清理、旧记录迁移、跨平台支持或 CI。
- 验收结果：`npm run typecheck` 退出 0；`npm run test:unit` **274/274**、`npm run test:integration` **105/105**、`npm run test:e2e` **15/15**、`git diff --check` 通过。测试使用 fake provider、真实 Pi SDK/CLI、临时 Git 与隔离目录，未调用真实模型。较本轮前基线：单元 270 → 274（新增 workspace 强制重置 3 项、非 Git 入口 1 项），集成 104 → 105（新增跨进程残留清理）。`test/unit/parent-writer.test.ts` 的「关闭失败」场景新增断言，确认已终结的失败仍为 `pending` 但暴露具体 `fault`，供退出判断区分终态与在途。
- 实现范围：`extensions/delivery-gate/`（`index.ts`、`src/activation.ts`、`src/approvals.ts`、`src/development.ts`、`src/parent-writer.ts`、`src/subagents.ts`、`src/workspace.ts`）；`skills/adaptive-delivery/SKILL.md`、`prompts/delivery-plan.md`、`prompts/delivery-run.md`；`README.md` 与 `docs/技术方案.md` 同步。新增 `WriterLeaseBlockage` 与 `inspectBlockage`/`discard`，均只在用户命令路径调用；现有 `assertIdle`/`acquire`/`handoff`/`release*` 语义与失败关闭不改。
- 未验证（真实保留）：真实模型是否稳定输出假设行、档位宣告和取证式审查结论；`/delivery-unlock` 的 TUI 确认交互与 `fault` 后退出在真实终端下的完整路径（自动化只覆盖到命令前置判断、lease 层与终态 getter）；非 Git 目录提示的真实体验；Structured 专项未执行（本次未提供 `--adapter` 路径）。
- 本节不包含：commit、push、发布或重载用户会话。

### 13.96 demo 项目完整流程验证与交互问题清单

- 状态：demo 与验证已完成（`1/1` 通过），发现的问题均**未修复**，等用户确认后再动代码。
- 新增产物：`test/demo/full-flow.test.ts`，不在 `npm run test:all` 范围内，需显式运行：

  ```sh
  node --import tsx test/support/run-tests.ts test/demo/full-flow.test.ts
  ```

- demo 项目：临时 Git 仓库内的真实订单结算小项目（`src/value.js`、`test/value.test.js`、`inputs/command.cjs`），基线 `node inputs/command.cjs` 退出码 1；交付后退出码 0。使用真实 Pi SDK/CLI、真实子进程、fake provider 与模拟 TUI，不调用真实模型。
- 覆盖环节：`/delivery-shape` → 父文档写入（真实父 writer）→ design 审阅（提意见轮 + 修订后确认）→ 实施确认 → `delivery_develop`（真实 CLI 子进程 + 真实项目检查）→ `delivery_review`（真实 before/after 与 `diff.patch`）→ 父侧再跑一次项目检查 → `/delivery-status`、`details`、`/delivery-tasks`（打印面板原文）→ 残留 lease 与操作锁 → `/delivery-exit` 被拒 → `/delivery-unlock` 确认框原文 → 正常退出后工具恢复。每步的 writer 都在收尾后交回，退出后无 `delivery_*` 工具残留。
- 验证证据：`npm run typecheck` 退出 0；demo `1/1` 通过并打印全部交互原文；证据根 `adaptive-tests-9LlCET`（宿主 `adaptive-pi-rNmF3u`，子会话 2 个）。
- 发现（按严重度，均待用户决定是否修复）：
  1. **「本次假设」在 ≤32 行终端被翻页截掉**（本轮新增机制被削弱）。直测：24 行终端分页 `1–2 / 9`、32 行 `1–8 / 9`、40/50 行单页。原因是它排在正文末尾；候选方案：移到正文最前（文档摘要之后），或在渲染时钉住。
  2. **实施确认面板只结构化列出「允许修改」，没有列出检查方式与停止条件**，二者完全靠模型写进正文；README「实施确认还会列出允许修改的范围、检查方式和停止条件」与实现不一致，需改文案或补展示。
  3. **审查结果正文以「过程工具异常摘要」开头**，容易让用户把过程性失败误读为审查失败；建议把摘要移到正文之后或压成一行 + 详情。
  4. **窄屏（52 列）中文标点被拆到行首**（`（项目真实测试）` 与 `。` 分行）；属轻微排版问题，可在换行时加简单禁则处理。
  5. **既有测试证据强度**：`test/integration/local-command.test.ts` 中开发子会话执行的 `node inputs/command.cjs` 在夹具里从未创建，实际走的是工具失败路径，因此两个测试并未真正跑过项目检查；本次 demo 才第一次真实执行。
- 观察（不算缺陷）：`/delivery-status` 在开发与审查都完成后仍显示「实施已确认」，不投影本批次调用次数；交付期间父模型工具从 4 个增到 11 个；父系统提示注入 3803 字符/回合。
- 本节不包含：commit、push、发布，也不修改第 13.95 节已验收的实现。

### 13.97 真实模型完整流程验证

- 状态：已完成三轮真实模型运行（simple 慢路径两次、feature 一次）与一次连通性冒烟；发现的问题均**未修复**，等用户确认。
- 新增产物：`test/demo/real-model.ts`（不在 `npm run test:all` 内）。真实网络、真实 SDK 父会话、真实子 Pi CLI、真实项目检查；批准由脚本代选（不是真实用户点击），已在输出里明示。

  ```sh
  node --import tsx test/demo/real-model.ts                 # 默认父模型，简单任务
  DEMO_SCENARIO=feature node --import tsx test/demo/real-model.ts
  DEMO_MODEL=openai/gpt-5.6-sol DEMO_THINKING=low node --import tsx test/demo/real-model.ts
  ```

- 凭证与隔离：临时 `HOME`/`TMPDIR`/agent dir；`auth.json`、`models.json`、`models-store.json`、全局 `AGENTS.md` 只做符号链接，不复制、不读取、不打印任何凭据；不写入用户真实 Pi 目录。实际使用 `openai/gpt-6-astra`（用户默认模型），thinking `medium`。
- 已验证（真实模型行为）：读到并遵循 Skill；先核实项目规则、Git 状态与真实检查命令；简单需求选择 `documentStrategy: "none"`，不建规划文档；**方案正文带「本次假设」**，意见轮后修订并说明未采纳原因；**执行前用一行宣告本次路径与理由**；两次确认前不写任何代码；在方案暂停时连续 8 次拒绝 nudge，未擅自动代码；父侧直改后跑真实检查、读 `git diff`；审查子（thinking high）输出「关键事实 / 代码证据（文件:行号）/ 成立」表格，并把既有失败与本次候选分开。
- 结果：simple 场景 `src/value.js` 1→2，`node inputs/command.cjs` 从退出码 1 转到 0，2 次确认、1 次委派、无残留 lease；feature 场景父侧实现满减 + 补测试，审查子与开发子都如实报出「新增测试全过、唯一失败来自范围外既有测试」。
- 发现（真实模型证据，均待确认）：
  1. **`delivery_approval` 因空字符串报错**：模型传 `implementationPlanPath: ""` 时整个调用被 schema 拒绝，返回 English 校验错误（`must not have fewer than 1 characters`）。本次模型自行重试不带该字段后成功；弱模型可能卡循环。候选修法：参数说明明确“设计阶段无对应文件时省略该字段，不要传空字符串”，并把空字符串视为省略。
  2. **实施确认后的自动衔接硬编码了委派**：`approvals.ts` 的 implementation 衔接文本写的是“立即调用 `delivery_develop` 委派当前最小可验证节点”，导致父侧已完成并已自检的简单任务（甚至已跑过审查）又被推着多花一次子 Agent。三轮都出现。候选修法：改为“简单任务自行完成并运行项目检查；只有确实需要独立子会话时才委派”。
  3. **审查/开发结果以「过程工具异常摘要」开头**：三轮均出现。本次所谓“异常”实际是**既有测试失败的正常检查结果**（退出码 1），把它框成异常既不准确也吓人。候选修法：摘要移到正文之后，或压成一行 + 详情，并区分“检查未通过”与“工具调用异常”。
  4. **`inputs` 与 `paths` 重复**：模型把可写路径又填进 `inputs`，面板显示“另有 4 项文件纳入审查核对”。候选：参数说明补一句“不要与 paths 重复”。
- 本节不包含：commit、push、发布，也不修改第 13.95/13.96 节已验收的实现。

### 13.98 修复真实模型发现的四项问题

- 状态：已完成（用户确认“都修复了”）。范围为第 13.97 节列出的四项，不改批准来源、writer、候选与收尾规则。
- 修复内容：
  1. **空字符串规划路径不再拒绝整次批准**：`technicalPlanPath` / `implementationPlanPath` 去掉 schema 的 `minLength`，执行前把空串按省略归一化；参数说明补“没有对应文件时省略该字段，不要传空字符串”。
  2. **实施确认后的自动衔接不再写死委派**：衔接文案改为“简单任务由父 Pi 直接修改并运行项目已有检查；只有确实需要独立子会话时才调用 `delivery_develop`，需要时再按风险安排 `delivery_review`”，与第 10.4 节原设计一致。
  3. **失败记录后置并区分语义**：结果正文先给子 Agent 结论，`工具调用失败记录：……` 与具体调用附在正文之后，措辞改为“可能是检查未通过，也可能是命令或检索失败”；任务列表动作同步从“N 次工具异常”改为“N 次工具调用失败”。
  4. **`inputs` 说明补“不要与 paths 重复”**。
- 验证证据：`npm run typecheck` 退出 0；`npm run test:all` 单元 **275/275**、集成 **105/105**、E2E **15/15**；`git diff --check` 通过；隔离 demo `test/demo/full-flow.test.ts` `1/1` 通过。新增定向断言：空串路径归一化后批准通过且提案不落空字段（`test/unit/approvals.test.ts`）；衔接文案包含“简单任务由父 Pi”（同文件）；失败记录顺序与“工具调用失败”文案（`test/unit/progress.test.ts`、`test/integration/extension-lifecycle.test.ts` 的 `tool-fail` 与 `readonly-recover` 场景）。
- 真实模型复验（`openai/gpt-6-astra`，thinking medium，简单任务）：`delivery-continuation` 触发后模型直接报告“已在批准范围内直接修改并核对”，**未再被推着委派子 Agent（委派记录 0，此前三轮均为 1）**；真实检查退出码从 1 转到 0；2 次确认、无残留 lease。
- 真实模型复验（feature 场景，多文件 + 用户明确要求独立审查）：实现阶段模型自己发现“实施清单误列了 `test/discount.test.js`，与项目只改 src 的规则冲突”，改走**实施变更确认**面板（标题与变化摘要正确切换）后重新获批；随后父侧直改、跑真实检查、调用 `delivery_review`（thinking high）。结果：**0 次 `delivery_develop`、1 次审查委派**（此前同场景会被 continuation 多推一次开发节点），持续为 `已完成`、无残留 lease。审查正文已验证修复 3：先给结论与「关键事实 / 代码证据（`src/discount.js:1`）/ 成立或未验证」逐条核对，`工具调用失败记录：以下调用返回了失败结果（可能是检查未通过，也可能是命令或检索失败）…` 排在正文之后、候选与制品路径之前；审查还主动列出未验证项（`discount("100")`、`null`、`NaN`、负数、`100.01`、真实调用链）。
- 说明：feature 场景的最终检查退出码为 1，来自 demo 种子故意保留的无关基线失败（`test/value.test.js` 期望 `value === 2` 而 `src/value.js` 为 `1`），父与审查子都如实报出并未扩大范围；不是产品缺陷。
- 未验证（保留）：真实模型是否不再出现空串路径（本次未重现）、真实终端下失败记录后置的观感、feature 场景的重复验收。
- 本节不包含：commit、push、发布。

### 13.99 真实终端（PTY）验证

- 状态：已完成真机验证；新增 1 项功能缺陷与 1 项 UI 可用性问题，均**未修复**，等用户确认。
- 方法：`/tmp/pi-tty/tty-drive.py`（不在仓库内）：PTY 中启动真实 `pi` 0.85.1 CLI，自写最小 ANSI 屏幕模拟器还原“用户看到的屏幕”，注入真实按键字节；两种 provider（fake 确定性布局、真实 `openai/gpt-6-astra`），临时 agent dir 仅符号链接凭证。原始字节留在 `raw.bin`（重度重绘区域模拟器可能有少量残影，判定以 raw 为准）。
- 已验证（真机、真实 TUI，不再是 SDK 模拟）：面板内联替换底部输入区而非 overlay；默认停在“稍后再看 / 暂不批准”；↑↓、Enter、Esc、Ctrl+O、PgDn 均生效；80x12 显示“请放大终端 · Esc 稍后再看”；`/delivery-tasks` 列表 → 详情弹层渲染正确（含真实 `node inputs/command.cjs` 输出与文件内容），Esc 可关闭；空闲时 `/delivery-exit` 写入 `enabled:false` 并重载；真实模型完整流程两次确认 + 父侧直改 + 真实检查（1 通过 0 失败），未产生多余委派。
- 尺寸矩阵（真机实测，方案正文 9 行）：

  | 终端 | 正文分页 | 看到「本次假设」需按 PgDn |
  |---|---|---|
  | 100x50 / 80x40 | 单页 | 0（首屏可见） |
  | 80x32 | 1–8 / 9 行 | 1 次 |
  | 80x24（macOS 终端默认） | 1–2 / 9 行 | 4 次 |

- 发现 1（功能，真机复现 2 次）：**模型流式输出期间输入 `/delivery-exit` 会失效**。raw 显示输入框内是 `delivery-exit`（无前导斜杠），被当作普通用户消息提交；包未收到命令（会话无 `enabled:false` 记录），且一次运行中模型回复“已退出交付模式。”而交付实际仍处于启用状态。空闲时 6/6 次正常。触发与 Pi 补全/忙碌排队行为有关，不需要修改包的命令判断。
- 发现 2（UI，真机实测）：24 行终端下每页只能看 2 行正文（header/选项/说明/页脚占约 14 行），读完整方案需 5 次 PgDn。
- 未覆盖：Structured、鼠标点击卡片、`/delivery-status details` 长文本的真实终端排版。
- 本节不包含：commit、push、发布，也不修改已验收的实现。

### 13.100 修复真机发现的问题（不含小终端）

- 状态：已完成。用户确认修复，并明确“不要考虑小终端”：第 13.99 节的发现 2（24 行分页）与第 13.96 节的第 4 项（窄屏标点）**按用户要求不做**，不新增相关代码。
- 修复内容：
  1. **不再谎报命令已执行**：`before_agent_start` 注入的常驻提示增加一条——`/delivery-*` 由用户命令入口执行，模型不执行它；用户消息里出现命令名、尤其没有前导斜杠时，说明该命令没有执行，不得声称已启用/已退出/已批准，应提示用户等空闲后重输并可用 `/delivery-status` 核对。这一条每回合都在，不依赖模型重新读 Skill。
  2. **README 与实现对齐**：实施确认固定展示的是文档策略、规划路径和允许修改范围；检查方式与停止条件写在实施正文里（此前 README 写成了三项都“列出”）。命令速查旁新增一条“命令没生效”的说明。
  3. **本机自检测试真的跑检查了**：`test/integration/local-command.test.ts` 的夹具现在创建 `inputs/command.cjs`（改动前返回非零并输出 `LOCAL_CHECK_FAILED`，改动后输出 `LOCAL_CHECK_OK`）；两个用例都先断言基线失败，再断言子会话回传的记录里出现 `LOCAL_CHECK_OK`。此前该文件从未存在，两个用例实际走的是“命令失败”路径。
- 验证证据：`npm run typecheck` 退出 0；`npm run test:all` 单元 **275/275**、集成 **105/105**、E2E **15/15**；`git diff --check` 通过。定向 `test/integration/local-command.test.ts` **2/2**。
- 真机 + 真实模型复验（PTY 内真实 `pi` CLI，`openai/gpt-6-astra`，重现“模型输出中输入命令”场景）：会话记录为 `user: delivery-exit` → `assistant: “delivery-exit” 没有执行，因为它不是带 / 的命令入口。请等当前执行结束后重新输入 /delivery-exit；如需核对状态，可输入 /delivery-status。`；同时 `activation: [True]`（交付确实仍启用）、未出现“已退出交付模式”。修复前同一场景模型会自编“已退出交付模式。”。
- 未验证（保留）：真实模型在其他命令（`/delivery-plan`、`/delivery-unlock`）被吞掉时是否同样不误报；Structured 环境；鼠标点击卡片。
- 本节不包含：commit、push、发布。

### 13.101 确认面板排版去拥挤

- 状态：已完成。用户要求“全屏终端下 UI 一定不要挤在一起”，并按此取向接受排版占用的行数。
- 改动（仅 `src/ui.ts` 排版，不改批准逻辑、字段或状态）：
  1. **各区独立成块**：说明区与操作区各自带一个前导空行；页脚仍以分隔线开断。
  2. **操作项再缩进两格**（正文缩进 2，操作项缩进 4），选项不再与正文同列。
  3. **去掉通用副标题**：方案审阅不再显示“请先阅读，再选择下一步”（与下方说明重复）；实施确认保留“请核对实施范围和验证方式”，`panelHeader` 支持空副标题时省行。
  4. **页脚不再重复操作名**：“Esc 稍后再看 / Esc 暂不批准”改为“Esc 暂停”。
- 真机对照（PTY 内真实 `pi` + fake provider，100x50，同一份方案正文）：

  ```text
  改前：方案审阅 / 请先阅读，再选择下一步 / ─── / 文档策略… / （空行）/ 正文… / 说明 / │…… / 操作 / 确认方案 / 提出修改意见 / → 稍后再看
  改后：方案审阅 / ─── / 文档策略… / （空行）/ 正文… / （空行）/ 说明 / │…… / （空行）/ 操作 /   确认方案 /   提出修改意见 /   → 稍后再看
  ```

  实施确认面板同样实测确认（含两行说明）：标题与副标题、信息区、空行、正文、空行、说明（两行 `│`）、空行、操作（缩进）、分隔线、页脚。
- 验证证据：`npm run typecheck` 退出 0；`npm run test:all` 单元 **275/275**、集成 **105/105**、E2E **15/15**；`git diff --check` 通过。测试夹具 `approvalUI` 新增可选 `rows`（默认仍 32），“首屏能否看到正文”的用例改用全屏尺寸 50，断言从固定行号改为“正文在操作区之前”。
- 已知取舍（用户已接受）：排版多占约 2 行。80x40 及以上全屏终端两个面板都能一屏显示正文；**≤36 行终端下实施确认正文最后一行需要一次 PgDn**（改前 32 行可见）。按用户“不考虑小终端”的口径不做适配。
- 本节不包含：commit、push、发布。

### 13.102 落盘文档必须在项目里真实存在；不落盘在首屏说明

- 状态：已完成。用户要求：面板出现时项目里应该真有可查阅的文档（不显示行数，只要存在），且不落盘也可以接受——但要在界面上说明。
- 背景（本次确认的事实）：`approvals.ts` 只校验路径的形状，唯一 `readFile` 读的是会话文件，从不对目标文档做 `stat`/`access`；真机实测面板显示 `技术方案：plan.md` 时，那个 demo 仓库里根本没有 `plan.md`。README 也只写了“提案已保存不代表文件已写入”。
- 改动：
  1. **落盘策略确认前实查文件**：`reuse` / `new` 时对声明的规划路径逐个 `lstat`，要求是 worktree 内非空普通文件（拒符号链接）；缺失时报“规划文档尚未写入：<相对路径>。先用 delivery_document_write 落盘（或改用 documentStrategy: "none"），再提交本次确认。” 实施阶段重新核验方案声明的规划路径。
  2. **不落盘在首屏写明**：`文档策略：不落盘（方案保存在本次会话，项目里不新增文档）`，不再只存在于 Ctrl+O 详情里。
- 真机验证（PTY 内真实 `pi`，100x50，fake provider）：
  - 声明 `plan.md` 但文件不存在 → 面板不出现，屏幕显示上述中文拒绝文案。
  - 先写入 `plan.md` 再提案 → 面板正常出现，且仓库里确实存在该文件（`ls` 确认 65 字节）。
  - `documentStrategy: "none"` → 首屏显示“不落盘（方案保存在本次会话，项目里不新增文档）”。
  - 同一轮复测：`/delivery-tasks` 弹层 Esc 第 1 次关闭（上次“未关闭”是脚本用聊天历史里的同名文本误判，改用弹层独有的页脚文本后确认正常）。
- 验证证据：`npm run typecheck` 退出 0；unit **275/275**、integration **105/105**、E2E **15/15**；`git diff --check` 通过。夹具同步：`test/unit/approvals.test.ts` 的 host 预写 `docs/方案.md`、`docs/计划.md`、`new-plan.md`；`test/support/development-host.ts` 的 `approve()` 在 design 阶段按声明路径先写入真实文件。
- 未验证（保留）：真实模型在落盘任务上是否自动先写文档再提案（真实模型三次运行都选了 `none`，未触发该路径）；Structured；跨平台。
- 本节不包含：commit、push、发布。

### 13.103 大型 demo 真机压测（真实模型 · 拷问式对齐 · 两阶段落盘 · 双 Agent）

- 状态：已完成。用户要求：用一个较大的 demo 项目、在真实终端里测到**技术方案与实施计划都落盘**、需求对齐阶段有 grill 式拷问（但不刨根问底）、有多 agent 参与、并尽量覆盖极端情况。
- 方法：自建交互式 PTY 控制器（`/tmp/pi-tty/session.py`，真实 `pi` 0.85.1 CLI + 真实 TTY + 真实 `openai/gpt-6-astra`，100x50），由我以用户身份逐步作答；demo 为多模块订单结算服务（`money.js` / `discount.js` / `cart.js` / `checkout.js` + 4 个真实测试文件 + `inputs/command.cjs` 统一检查），基线全绿。
- 真实模型表现（逐项有会话记录）：
  1. **拷问式对齐**：先核实现状（读 AGENTS.md、四个源文件、测试、`docs/`），然后**每轮只问一个关键问题**：① 项目规则写“只在 src/ 与 test/ 下改动”，与要求写入 `docs/` 冲突，是否例外；② 满减与 9 折是否叠加（并给出推荐与例子）。我回答后它据此定档，未再追问。
  2. **两阶段落盘**：确立 `documentStrategy: "new"`，在方案确认前就真实写入 `docs/活动-技术方案.md`（1602→1984 字节）与 `docs/活动-实施计划.md`（1565 字节）；面板显示两个路径时文件确实存在。
  3. **意见轮**：我提两条修改意见（门槛/折扣率抽命名常量、补边界对照表），它用 `delivery_document_edit` 修订同一份文档并重新提案，正文说明“均已采纳”。修订后的技术方案含四行边界对照表（180/199.99/200/250 元 → 170/189.99/180/225 元）。
  4. **两次确认**：设计面板→确认；实施面板显示 6 个可改文件、两个文档路径、依赖/验证/停止条件→确认。
  5. **多 agent**：`delivery_develop`（thinking `high`，理由“优惠分档、整数金额舍入和边界测试需要同时核对实现与现有行为。”，writer 交接，退出码 0、无工具异常）→ 再 `delivery_review`。
  6. **取证式审查生效**：审查子输出“方案依赖的事实 / 代码核对结果（含 `src/money.js:2`、`src/discount.js:1-5`、`src/checkout.js:6` 等行号）/ 成立”表格。
  7. **逆风情况**：期间两次 provider `server_error`（服务端过载），由 Pi 原生重试恢复，流程未中断。
- 最终产物：`src/discount.js` 命名常量 + 整数分 `Math.round` + 两档互斥；`src/checkout.js` 保持调用链；测试与文档齐全；父侧独立执行 `node inputs/command.cjs` **9/9 通过（退出码 0）**；无残留 lease；任务结束后父模型给出交付总结。
- 发现（待确认）：**审查子把父维护的规划文档当成超范围**。审查结论写“工作区存在超出项目规定范围的未跟踪 `docs/` 文件…不能直接判定整体通过”，理由是项目 AGENTS.md 只允许改 `src/`/`test/`；父模型随后判定“属于本次已由你明确批准的例外，不构成阻塞”。根源是审查任务文本只给了 `paths`/`inputs`/方案正文，没说明设计阶段声明的规划文档属于父维护、不在子任务范围。候选修法：审查任务里加一行“父维护的规划文档（<planningPaths>）不属于本次子任务范围，其存在是预期内的”。
- 未覆盖：本轮未跑到“审查发现代码缺陷 → 父返工 → 复审”（审查提的是范围问题而非代码缺陷）；`/delivery-status`、`/delivery-tasks` 弹层、`/delivery-exit` 已在第 13.99 节的真机运行中验证，本轮未再跑。
- 工具自身问题（非产品）：PTY 控制器在会话后期挂在一个写操作上，导致 `pi` 进程退出；产品状态改从会话 JSONL 与仓库实际状态核对，结论不受影响。证据根：`/tmp/pi-tty/big1`（含 `agent/sessions/` 三个 JSONL 与成品仓库）。
- 本节不包含：commit、push、发布。

### 13.104 给子任务声明父维护的规划文档

- 状态：已完成（用户确认）。修复第 13.103 节发现的假阳性：审查子把父维护的规划文档当成越界改动。
- 改动（仅是任务上下文，不是新增校验）：开发任务和审查任务各自多一行，把设计确认里声明的 `planningPaths` 显式告知子会话——开发子：“父维护的规划文档（不要修改）：<paths>”；审查子：“父维护的规划文档：<paths>（本次设计确认声明的父维护文档，不在你的修改范围，出现在工作区不算越界改动；但文档描述与实际代码是否一致仍要核对）”。不新增路径过滤、不新增发现白名单、不改候选或审查输入的范围。
- 为何不是硬编码：传的是本次批准记录里的实际路径（数据），而不是代码里写死的 `docs/` 前缀；也没有屏蔽任何审查发现，文档内容与代码不符仍可报。
- 验证证据：`npm run typecheck` 退出 0；unit **276/276**、integration **105/105**、E2E **15/15**；`git diff --check` 通过。`test/integration/development.test.ts` 新增断言：审查任务文本包含“父维护的规划文档…plan.md”。
- 本节不包含：commit、push、发布。

### 13.105 返工路径真机验证（审查报缺陷 → 返工 → 复审通过）

- 状态：已完成（确定性场景，真实终端）。用户要求验证“审查发现问题 → 返工 → 复审”。
- 方法：`/tmp/pi-tty/rework.py`，PTY 内真实 `pi` 0.85.1 CLI（真实 TUI 与按键），fixture provider 保证可重复；4 个子会话依次为：开发 1 → 审查 1（报 P1）→ 开发 2（返工）→ 审查 2（通过）。为了让审查必然发现问题，在开发 1 结束后向 `src/value.js` 注入缺陷（值改回 1，真实检查因此退出码 1）；这是测试刺激，不是产品缺陷。
- 实测链路：
  1. 开发 1 后 `src/value.js` = `value = 2`，检查通过。
  2. 注入后 `node inputs/command.cjs` 退出码 1。
  3. **审查 1 报告缺陷**：“独立验收和审查已结束，发现仍由父会话裁决…`P1 src/value.js:1 需要父会话裁决并修复 value`”；失败记录按第 13.98 节修复后的顺序排在正文之后（`工具调用失败记录：… 过程记录（1 次工具调用失败）…`），并给出候选摘要、审查原始 Session 与 `diff.patch`。
  4. **返工**：父再次调用 `delivery_develop`，候选回到 `value = 2`，检查通过。
  5. **复审通过**：“`FAKE_REVIEW_MECHANISM：未发现本夹具范围内问题`”。
  6. 任务列表：`子任务详情 · 共 4 个 · 运行中 0 个`，条目为 `实施批次 1 · 审查 · 第 2 次 · 已完成`（同一实施批次下的第 N 次调用）；详情弹层显示复审的 diff 与文件行。
  7. 收尾：`/delivery-status` 显示“实施已确认”；`/delivery-exit` 重载成功；**lease 目录为空**；父侧最终 `node inputs/command.cjs` **退出码 0**。
- 另一轮真实模型尝试（未完成，仅作过程记录）：同一返工计划用 `openai/gpt-6-astra` 跑时，provider 在实施确认后持续 20+ 分钟无任何输出（会话文件不增长），未能跑到返工；该轮另外真实触发了两个正面行为——① 模型把 `docs/` 写进实施范围时被拒（“实施路径或审查输入不能包含方案、实施计划等父维护规划文档路径”），它自行“Removing docs paths”后重新提交并获批；② 我在它启动开发委派时误按 Esc，卡片显示“异常退出 · This operation was aborted”，但 **writer lease 被正确释放、无残留**（失败路径的现场处理符合设计）。
- 未验证（保留）：真实模型在真实任务里自主决定返工（本轮确定性场景验证的是机制，决定权仍由脚本扮演的父会话给出）；provider 持续慢/无输出时的超时与恢复（当前依赖 Pi 自身行为）。
- 本节不包含：commit、push、发布。

### 13.106 明确审查发现的返工默认路径

- 状态：已完成（用户确认）。用户追问“返工是父 Pi 做还是开发子 Agent 做”，据此把两条路的选择写成默认规则。
- 改动（仅提示词/文档，无代码逻辑变化）：把原来只说“由父 Pi 决定直接修复或重新委派”改成带默认判据的说法——**单文件、不改变对外行为契约的修复由父 Pi 直接改并复跑项目检查；涉及多文件，或金额、并发、权限等边界问题，或需要重新跑子任务自检的，重新委派 `delivery_develop`**；并声明这只是完成方式的选择，不扩大已确认范围、不新增一次实施确认。落点三处：Skill（长期规则）、`delivery_review` 结果正文（父 Pi 做决定那一刻看到）、`/delivery-run`（手工恢复路径）。
- 依据：审查子只报告不修复（职责约定），决定权始终在父会话；父侧直改不受 writer lease 约束，重新委派则走完整交接与持久收尾核验。
- 验证证据：`npm run typecheck` 退出 0；unit **276/276**、集成 **105/105**（含本次定向的 `development` 13/13 与 `extension-lifecycle` 22/22）、E2E **15/15**；`git diff --check` 通过。
- 本节不包含：commit、push、发布。

### 13.107 真实模型全流程验证（两轮：父侧直改路径 + 委派返工路径）

- 状态：已完成。用户要求“完整跑一遍真实模型验证，把整个编排的所有功能都验证到”。
- 方法：新增 `test/demo/real-model-full.ts`（真实 SDK 父会话 + 真实子 Pi CLI + 真实项目检查 + 真实 writer lease；临时 agent dir 只符号链接凭证）。模型 `openai/gpt-5.6-sol`，thinking medium。demo 为多模块订单结算服务（money/discount/cart/checkout + 4 个真实测试 + `inputs/command.cjs` 统一检查）。为何用 SDK 宿主：同一轮 PTY 控制器下 provider 慢时 `pi` 三次中途退出（长回合 + 服务端停顿），终端渲染与按键路径已在第 13.99/13.101/13.105 节用真机验证。
- **第一轮覆盖（模型自行选父侧直改）**：
  1. 落盘两份文档（2321 + 1927 字节）；设计阶段三次把 `src/` 路径误写进 `paths` 被拒（“规划文档只接受确切 Markdown 路径”），自行修正后通过。
  2. 意见轮：脚本以用户身份提“抽命名常量 + 补边界对照表”，模型用 `delivery_document_edit` 修订**两份**文档并重新提案。
  3. 实施确认时又把文档写进可改范围，被“实施路径或审查输入不能包含方案、实施计划等父维护规划文档路径”拦住，去掉后通过。
  4. **父侧直改**完成源码与测试（6 处编辑）→ 真实检查通过 → `delivery_review`（high）。
  5. **审查发现真实问题**：实施计划文档仍写“待实施确认”（且**不再**把规划文档判成越界，第 13.104 节修复生效）；父模型说“只更新实施计划状态与证据，不改源码”→ 按第 13.106 节默认走了**父侧直改**。
  6. `/delivery-status`、`/delivery-status details`、`/delivery-tasks` 弹层（`实施批次 1 · 审查 · 第 1 次 · 已完成`）均正常。
  7. 造残留 lease + 操作锁 → `/delivery-exit` 被拒并提示 `/delivery-unlock` → `/delivery-unlock` 展示完整证据后确认清理 → 再次 `/delivery-exit` 成功重载。
- **第二轮覆盖（委派 + 返工）**：任务明确要求“实现交给 `delivery_develop`”。
  1. 前半段同上（两份 `活动3-*` 文档落盘，意见轮后两份都修订；实施路径两次被保护拦下后改为 `["src","test"]`）。
  2. `delivery_develop`（thinking medium）委派开发 → 脚本在开发结束后注入单文件缺陷（`DISCOUNT_THRESHOLD_CENTS` 25000 → 20000）。
  3. **审查报告缺陷**：“**审查结论：当前候选不可验收。** 已发现一个直接影响金额结果的高严重性缺陷，统一检查实际失败；本次未修改任何文件。”（thinking high）
  4. **父重新委派 `delivery_develop` 返工**：“根据独立审查结果…将满 250 九折门槛修正为 25000 分，补充/修正测试”。
  5. **复审**（thinking high）：逐条核对“指定边界行为：成立。已读取并实际验证 9999、10000、20000、24999、25000、25005、29999、30000、40000 分”，并主动运行统一检查。
  6. 任务弹层：`实施批次 1 · 审查 · 第 2 次`、模型 `gpt-5.6-sol · high`；最终检查退出码 0；两份 `活动3-*` 文档已存在（3046 / 2610 字节）；无残留 lease；`/delivery-unlock` 与退出同第一轮。
- 验证证据：两轮均输出到 `/tmp/pi-tty/full1.log`、`/tmp/pi-tty/full2.log`；`npm run typecheck` 退出 0；`git diff --check` 通过。
- 脚本自身问题（非产品）：注入钩子只挂在 `delivery_develop` 上，所以第一轮（父侧直改）未注入；文档存在性检查写死了上一轮的文件名，导致第二轮显示“不存在”而实际存在。
- 本节不包含：commit、push、发布。

### 13.108 真实终端完整跑到退出与 `/delivery-resume` 全程

- 状态：已完成。补齐第 13.107 节保留的两个弱项：真实终端下完整跑到退出、`/delivery-resume` 全程。
- 方法：PTY 内的真实 `pi` 0.85.1 CLI（真实 TUI 与按键），真实模型 `openai/gpt-5.6-sol`，100x50；控制器新增“子进程退出检测 + 心跳（`beat` 输出原始字节/屏幕行数）”，便于区分“provider 停顿”与“进程已退出”。demo 为多模块订单结算服务，任务为“满减门槛 100 → 120”。
- 实测链路（单会话跑到底）：
  1. 需求 → 核实项目 → 方案面板；**首屏直接显示**“文档策略：不落盘（方案保存在本次会话，项目里不新增文档）”与“本次假设：无”（第 13.102 节的改动在真机可见）。
  2. **按 Esc 暂停**：“方案审阅已暂停，方案正文与已发送意见保留…现在停止推进，不自动重问。”
  3. **`/delivery-resume`**：模型重读 Skill、两份规划文档与 git 状态，声明“本轮只形成新的 design 提案，不进入实施”并提交新提案，审阅恢复。
  4. 确认方案 → 实施确认（面板含允许修改范围、依赖与环境、验证方式、停止条件）→ 确认实施。
  5. 父侧直改：模型输出“路径：父 Pi 直接完成”，只改 `src/discount.js` 与 `test/discount.test.js`；真实检查 6/6 通过。
  6. **provider 停顿的真实恢复**：实施生成阶段输出停滞约 5 分钟、原始字节计数不再增长且 `pi` 仍存活；按 Esc 中断当前回合后 `/delivery-run` 继续，模型接着完成编辑与检查（未重做已完成部分、未重新申请确认）。
  7. `/delivery-status`（当前阶段：实施已确认；当前任务：无）→ `/delivery-tasks`（“当前会话还没有交付子任务。”）→ `/delivery-exit` → `Reloaded keybindings, extensions, skills, prompts, themes, and context files`。
- 收尾核对：会话记录为 `delivery-activation{enabled:true, tools:[read,bash,edit,write]}` → `{enabled:false, tools:[…]}` → `{enabled:false}`（恢复记录已消费）；源码为 `cents >= 12000 ? cents - 1000`；最终检查 **6/6**；`leases/` 目录为空。
- 说明：本轮全程没有委派子 Agent（模型判定为父侧直改），子 Agent 在真机下的卡片与任务弹层已在第 13.99/13.101/13.105 节验证；SDK 宿主的完整委派与返工见第 13.107 节。
- 未验证（保留）：provider 停顿后不用人工 Esc 的自动恢复（当前依赖 Pi 自身行为；控制器只做检测与报告）。
- 本节不包含：commit、push、发布。

### 13.109 provider 停顿根因分析与 Structured 专项验证

- 状态：已完成分析。本地提交 `f61f061`（29 文件，+1332/-67）已按用户授权创建，未 push。
- 根因（基于 Pi 0.85.1 实现读取，非推测）：
  1. Pi 通过 undici 全局 dispatcher 设置 `headersTimeout` 与 `bodyTimeout`，值取 `httpIdleTimeoutMs`（默认 **300000 毫秒**）；`bodyTimeout` 的官方语义是“监控**收到 body 数据之间的时间**”，即**字节级**空闲，不是内容级。
  2. Pi 的自动重试要求消息已**失败**（`stopReason === "error"` 且有 `errorMessage`），并按文本模式匹配重试词表；词表已含 `timeout / timed out / terminated / socket hang up / fetch failed / overloaded / 5xx` 等，因此**超时类错误本身可重试**。
  3. 组合上述两点：只要网关在每个 5 分钟窗口内向下游发出**任意字节**（很多兼容层会周期性发 SSE 注释/心跳），字节级空闲计时就不会触发；而不报错就不会有可重试的消息 → 父回合永久等待。这与实测一致：`pi` 进程存活、PTY 无字节、会话文件不增长，且持续 5—20 分钟（远超默认 5 分钟）。仍未验证的是“网关确实发了心跳字节”，需网关侧抓包或设短超时后观察是否自动重试才能定性。
- 可选治理（按“该谁修”排序）：
  1. **网关/上游（真根因）**：上游长时间无内容时主动断开，把停顿变成连接错误，Pi 既有重试可直接接管；实践上换模型差异明显（`gpt-6-astra` 多次停顿，`gpt-5.6-sol` 一次且可恢复）。
  2. **Pi 配置（零代码，已在本仓库 demo 脚本落地）**：调小 `httpIdleTimeoutMs`（如 30—60 秒）。对“零字节停顿”会立即超时并自动重试；对“有心跳字节”的停顿无效。`test/demo/*.ts` 与本地 PTY 控制器已设为 60000 便于观测。
  3. **Pi / pi-ai 上游增强**：把空闲判定从字节提升到**内容增量**（text/thinking/tool 增量），使心跳字节不能掩盖停顿；属于 Pi 侧改动，本包不能做。
  4. **包层兜底（未实现）**：公开事件 `message_start` / `message_update` / `message_end` 可观测内容增量，技术上可做“超时未收到增量 → `ctx.abort()` + 明确提示”；若连自动续跑也做，就与现有“断流修正交给 Pi 原生重试”的取向重复，需用户先拍板。
- **Structured 专项已跑通**：本机已安装 `@howaboua/pi-codex-conversion 3.0.31`（`~/.pi/agent/npm/node_modules/`），执行 `node --import tsx test/support/run-tests.ts --adapter "$HOME/.pi/agent/npm/node_modules/@howaboua/pi-codex-conversion" test/structured/flow.test.ts` → **1/1 通过**；覆盖 Structured 下开发与审查两个职责子 Agent、子会话 provider payload 保留 `exec_command`、writer 交回、无 `delivery_validate`。之前未跑的原因是未提供 adapter 路径，不是环境不可用；README 已补默认安装位置。
- 未验证（保留）：网关是否发心跳字节；`httpIdleTimeoutMs` 调小后真实停顿是否自动重试；Structured 下的真实模型（本次专项仍为 fake provider）。
- 阈值测量（新增 `test/demo/stream-timing.ts`，用 `message_start`/`message_update` 记录首字节延迟与相邻内容增量间隔）：`openai/gpt-5.6-sol` 六个样本（含 28 秒长输出 1013 个增量与高推理样本）——**首字节 376—470 ms，最大增量间隔 929—1143 ms**。正常条件下间隔在 1 秒量级，60 秒阈值有约 50 倍余量；与实测停顿（5—20 分钟）分离度极大。风险点：本网关几乎不流式推送 thinking（强推理样本仅 2 个 `thinking_delta`），若某次思考阶段持续数十秒且无增量，**30 秒会误杀，60—120 秒才安全**；另一风险是过载期首字节可能变慢（出现过 503 重试）。误杀代价为丢弃已生成内容并重新计费，但 Pi 每回合重试有上限（默认 3 次），不会无限重试。
- 本节不包含：push、发布。

### 13.122 交互体验三项优化

- 状态：已完成。用户已授权按顺序优化三个日常交互问题，并要求先记录再逐项实施；当前不改变两阶段确认、普通工具继承、writer lease、候选核对和失败关闭边界。
- 优化顺序：
  1. 降低小任务的确认负担：保留方案确认和实施确认，但按任务实际复杂度压缩父模型提示、确认正文和界面重复信息；不合并两次确认，不新增任务档位字段或自动评分器。
  2. 结束状态同时说明检查结论：区分子 Agent 生命周期收尾与真实项目检查结果；未运行、失败、通过和证据不足分别如实展示。检查结论继续由父 Pi 对照实施验收条件和实际命令结果裁决，不新增固定验收执行器。
  3. 简化恢复与退出提示：根据当前现场给出明确下一步，减少用户理解内部 Session、lease 和终态的负担；未知执行仍保持关闭，不自动解锁或重放。
- 附带文案修正：实施确认成功后的返回提示应同时适配父 Pi 直接处理简单任务和按需委派子 Agent，不能默认暗示必须调用 `delivery_develop`。
- 验证方式：每项完成后先运行覆盖改动的 unit/integration 定向测试，再按影响范围运行 `npm run typecheck`、`npm run test:all` 和 `git diff --check`；真实模型和真实 TUI 试用结果单独记录，未运行不标记完成。
- 停止条件：发现需要改变两阶段确认、批准来源、普通工具权限边界、writer 交接或验收责任时暂停并重新确认方案；发现仅属提示或排版问题时保持当前范围。

#### 13.122.1 小任务确认负担

- 状态：已完成。
- 实现：父会话提示明确简单任务使用短方案、短实施说明、`documentStrategy: "none"` 和父侧直改；只有复杂任务或确有独立视角价值时才委派。无文档确认面板把无效的技术方案/实施计划空值合并为一行；实施确认后的成功返回文案同步说明父 Pi 直改与按需委派两条路径。
- 文件：`extensions/delivery-gate/index.ts`、`extensions/delivery-gate/src/approvals.ts`。
- 验证：`npm run typecheck`；`test/unit/approvals.test.ts` 与 `test/unit/delivery-ui.test.ts` 共 **81/81**；`git diff --check`。

#### 13.122.2 结束状态说明检查结论

- 状态：已完成。
- 实现：开发与审查进度卡片在生命周期结束后分别显示“执行/审查已结束，检查结论由父 Pi 核对”；开发结果、审查结果和交付运行提示明确区分子 Agent 正常收尾与项目检查通过。Skill 和运行提示要求父 Pi 最终列出实际检查命令、退出码和结论；没有实际证据时不宣称通过。未新增固定验收执行器或持久化状态。
- 文件：`extensions/delivery-gate/src/progress.ts`、`extensions/delivery-gate/src/development.ts`、`skills/adaptive-delivery/SKILL.md`、`prompts/delivery-run.md`。
- 验证：`npm run typecheck`；`test/unit/progress.test.ts`、`test/integration/development.test.ts` 与 `test/integration/extension-lifecycle.test.ts` 共 **36/36**；`git diff --check`。

#### 13.122.3 恢复与退出提示

- 状态：已完成。
- 实现：重载、进入、退出、状态查询、方案恢复和残留 writer 清理提示统一改为当前状态加明确下一步命令；未知 writer 仍要求先核对证据，不自动解锁、不重放。同步更新受影响的提示断言。
- 文件：`extensions/delivery-gate/src/activation.ts`、`extensions/delivery-gate/index.ts`、`extensions/delivery-gate/src/approvals.ts`、`test/unit/approvals.test.ts`、`test/integration/extension-lifecycle.test.ts`。
- 验证：`npm run typecheck`；`npm run test:all`：unit **281/281**、integration **105/105**、E2E **15/15**；`git diff --check`。

### 13.110 空闲超时链路的直接实验（回答“最好的方案”）

- 状态：已完成。用两个决定性实验把“调小 `httpIdleTimeoutMs` 能否自动恢复”从推断变成实测：
  1. **超时确实会触发**：用 Pi 自带的 undici（`@earendil-works/pi-coding-agent/node_modules/undici`）构造 `Agent({ bodyTimeout: 3000 })`，对“只发响应头后永久沉默”的本地服务发请求——**约 3.5 秒后失败，错误为 `terminated`**（`name=TypeError`）。Pi 的 dispatcher 配置正是把 `httpIdleTimeoutMs` 同时传给 `bodyTimeout` 和 `headersTimeout`（已读代码确认）。
  2. **超时会被自动重试**：新增哨兵测试 `test/unit/pi-retry-classifier.test.ts`，把候选错误文本喂给 Pi 公开导出的 `isRetryableAssistantError`：`Body Timeout Error`、`Headers Timeout Error`、`UND_ERR_BODY_TIMEOUT`、`The operation was aborted due to timeout`、`terminated`、`socket hang up`、`fetch failed`、`server_error`、`503 Service Unavailable` **均可重试**；而 `This operation was aborted`（普通 abort）与 `stopReason=stop` 不可重试。
  3. 重试调度本身（退避、上限、取消）由仓库现有 `test/integration/stream-retry.test.ts` 覆盖，不重复实现。
- 结论：**把 `httpIdleTimeoutMs` 从默认 300 秒调到 60—120 秒，对“零字节停顿”是完整的自动恢复链路**（超时 → 可重试错误 → Pi 自动重试），无需人工介入、无需本包新增代码；对“网关持续发心跳字节”的停顿仍然无效（字节级计时器不会触发），那一种只能靠网关断开上游或 Pi 上游改成内容级判定。
- 删除了半成品探针 `test/demo/idle-timeout-probe.ts`（自定义 provider 注册在当前 Pi 版本未生效，改用上述直接实验）。
- 验证证据：`npm run typecheck` 退出 0；unit **277/277**（含新增哨兵）；`git diff --check` 通过。
- 本节不包含：push、发布。
- 用户采纳（2026-09-13）：按其指示在真实配置 `~/.pi/agent/settings.json` 加入 `"httpIdleTimeoutMs": 120000`（改动前已备份 `settings.json.bak-before-idle-20260913-090641`）；用 Pi 自己的 `SettingsManager.getHttpIdleTimeoutMs()` 读回确认为 120000，JSON 保持合法且其余键未变。生效时机为新会话或重启 Pi；回滚即删除该行或设为 0。

### 13.111 Structured 环境 + 真实模型验证

- 状态：已完成。补齐第 13.109/13.110 节保留的最后一条：“Structured 仅 fake provider 验过”。
- 方法：给 `test/demo/real-model-full.ts` 增加 `DEMO_STRUCTURED=1`（按 `test/structured/flow.test.ts` 的挂载方式：`packages += <已安装插件路径>`、`defaultTools` 设回 `read/bash/write/edit/grep/find/ls`、写入 `pi-codex-conversion.json`：`executionMode: normal`）；插件为本机 `@howaboua/pi-codex-conversion`（`~/.pi/agent/npm/node_modules/`）。
- 实测结果（`openai/gpt-5.6-sol`，thinking medium）：
  1. 父会话全程使用 Structured 工具：`exec_command` 做现状调研，`/delivery-status details` 显示“运行模式：**Structured**”，工具清单为 `grep, find, ls, apply_patch, exec_command, write_stdin, view_image`。
  2. 两次确认正常：方案审阅（两次提案，首次被自身修正）→ 实施确认（`paths: ["src","test"]`）。
  3. **开发子会话用 Structured 工具完成实现**：`exec_command` 10 次 + **`apply_patch` 1 次**（无 read/bash/edit/write）。
  4. **审查子会话用 Structured 工具独立检查**：`exec_command` 12 次，实际运行 `node inputs/command.cjs` 并核对差异；审查结论“未发现高、中严重性问题”，并用文件行号列出关键事实（`src/checkout.js:6-8` 等），低风险缺口交回父会话裁决。
  5. 最终代码：`FULL_REDUCTION_THRESHOLD_CENTS = 12000` + 命名常量，真实检查 **7/7 通过**；无残留 lease；`/delivery-unlock` 与退出路径同前。
- 未覆盖（保留）：本轮注入钩子未命中（模型把常量命名为 `FULL_REDUCTION_*`，与钩子的 `DISCOUNT*` 正则不符），所以 Structured 下没有重跑“审查报缺陷 → 返工”闭环（该闭环已在原生环境第 13.107 节验证）；Structured 下的真机终端（PTY）也仍未跑。
- 验证证据：完整日志 `/tmp/pi-tty/structured-real.log`；`npm run typecheck` 退出 0。
- 本节不包含：push、发布。

### 13.112 Structured 下的返工闭环与真机终端尝试

- 状态：返工闭环已完成（真实模型）；真机终端部分完成，并产出两条新发现。
- 已完成（Structured + 真实模型，`gpt-5.6-sol`）：把 demo 的注入钩子改为**不依赖常量命名**（依次尝试门槛数值 12000 / 任意 `THRESHOLD` 常量 / 门槛比较数值），重跑后完整复现返工闭环：
  1. 开发子（Structured 工具）把门槛误写成 `20000`，指定检查 7 项中 2 项失败；
  2. 父会话自己已发现异常，仍按流程**先安排独立审查**；审查结论“未通过”，并给出文件行号；
  3. 父判定：“该修复是**单文件、仅纠正已批准规则且不改变对外契约，因此由父会话直接修正常量**”——正是第 13.106 节的默认规则；
  4. 父用 **`apply_patch`**（Structured 工具）修复 → 检查 **7/7 通过**；
  5. 父再安排一次复审确认“结论不只针对旧候选”→ 复审逐条核对 `src/discount.js:1-2` 为 `12000`/`1000` 并成立。
- 真机终端（PTY + 插件）尝试：插件确实在真实终端生效（状态栏显示 `Codex adapter V: low • all models`），方案审阅与实施确认两个面板在真机上渲染并成功记录，父模型输出档位宣告“本次路径：父 Pi 直接修改”。但该任务未能执行完成：期间遇到两次长时间停顿（PTY 字节计数冻结 5+ 分钟），只能靠人工 Esc + `/delivery-run` 恢复。
- **新发现（有证据）**：在加载 `pi-codex-conversion` 的会话里，**Pi 的 `httpIdleTimeoutMs` 对停顿无效**。证据：该会话临时配置为 `httpIdleTimeoutMs=60000`，停顿持续 5+ 分钟未产生任何超时或重试；会话记录里只有 2 条失败消息，均为 `This operation was aborted`（手动 Esc 所致），**零条超时错误、零次重试**；停顿期间 `pi` 进程 **0% CPU**（不是在忙等，而是在等 I/O）。原因：该插件依赖里**自带 `undici` 与 `ws`**（`~/.pi/agent/npm/node_modules/undici`、`.../ws`），插件自己发起的请求不走 Pi 设置的全局 dispatcher，因此字节级 idle 超时管不到它。
- 对用户环境的含意：真实配置里没有 `pi-codex-conversion.json`（走插件默认）。若会话状态栏显示 `Codex adapter … all models`，说明插件接管了请求，那么刚设的 `httpIdleTimeoutMs=120000` 在这些会话里可能不生效；恢复手段仍是 Esc + `/delivery-run`，或根治于网关。
- 未覆盖（已在第 13.115、13.117 节补齐）：~~Structured 真机终端下“完整跑到退出”（本轮因反复停顿未完成）~~ → 第 13.117 节已完成；~~插件环境暂无停顿恢复机制~~ → 第 13.114 节已实现内容级停顿看门狗并在真实模型 + 真实网关下实测（17.2 秒恢复）。
- 结论更正（2026-09-13 事后核实）：本节的“反复停顿”判断**错误**，当时卡住的真实原因是插件 TUI 吞掉了连续按键与回车，不是 provider 停顿；详见第 13.117 节。
- 本节不包含：push、发布。

### 13.113 停顿超时的直接实验：修正第 13.110 节结论

- 状态：已完成两个直接实验，**修正第 13.110/13.112 节关于 `httpIdleTimeoutMs` 的建议**。
- 实验一（SDK 宿主 + 真实 HTTP 路径）：把内置 `deepseek` provider 的 baseUrl 覆盖到本地“只发响应头后沉默”的假服务（新增 `test/demo/idle-timeout-probe.ts`，模型 `api=openai-completions`）：
  - 配置 `httpIdleTimeoutMs=5000`，实际超时发生在 **301 秒**（= undici 默认 300 秒，不是配置值）；
  - 错误文本为 **`terminated`** → Pi **自动重试** → 第二次请求正常返回“收到”，会话完成。
  - 结论：**“停顿→超时→自动重试→完成”的链路在真实 HTTP 路径上成立**。
- 实验二（真机交互 CLI + 同一假服务，`httpIdleTimeoutMs=5000`）：请求于 +26 秒发出后沉默，**5 秒未超时，360 秒仍未超时**（停止观察时仍在等），屏幕无重试提示、会话无错误记录。
- 修正后的结论：**建议的 `httpIdleTimeoutMs=120000` 很可能不生效**。尽管 CLI 代码会把该值传给 undici dispatcher（`main.js`、`interactive-mode.js`），实测：SDK 路径生效的是 300 秒默认值，真机 CLI 上 5 秒配置 6 分钟未触发。可能原因：`api/openai-completions.js` 用官方 `openai` SDK 构造客户端（`new OpenAI({..., fetch, ...})`）并在模块导入时捕获 fetch 引用，叠加官方 SDK 默认 timeout（600 秒），使实际生效值不是配置值；未继续深挖。
- 实际效果（修正后）：卡住后大约 **5–10 分钟**才会超时重试（不是 2 分钟），最多 2—3 次——仍比“永远挂着”好，但比预期慢很多。
- 可选的真正确加速手段（未实现）：用公开事件 `message_start`/`message_update`/`message_end` 做**包层停顿看门狗**（内容增量超时 → `ctx.abort()` + 自动续跑）；这是唯一不依赖 Pi 超时配置、也不依赖网关的路径，但需用户拍板是否接受“第二套重试机制”。
- 本节不包含：push、发布。

### 13.114 停顿看门狗：实现与实测

- 状态：已完成（用户确认“挺有作用的”）。
- 实现：新增 `extensions/delivery-gate/src/stall-watch.ts`，在交付启用期间于父子会话均安装（只使用公开事件与 `ctx.abort()` / `pi.sendMessage({ deliverAs: "followUp", triggerTurn: true })`）：
  - 只在 assistant **正在流式输出**时计时（`message_start` 起、`message_end` 止），工具执行期间计时器停止 → 长时间命令（如 `sleep 120`、大型测试）不会被误判；
  - 阈值默认 **120 秒**（`PI_ADAPTIVE_STALL_MS` 仅供测试覆盖），每 **5 秒**检查一次；
  - 超时后先中断，等 `agent_settled` 再触发一次续跑，界面明确提示“已中断本次请求并自动继续（第 N/2 次）”；
  - 每回合最多自动恢复 **2 次**；只有收到完整回复（非 `aborted`/`error`）才重置计数，避免“停顿→重试→再停顿”无限循环；达上限后改为提示用户，不再自动重试。
- 新增单元测试 `test/unit/stall-watch.test.ts` **4/4**：正常增量重置计时、工具执行期间不计时、连续停顿达上限后停止且完整回复重置计数、非正阈值不安装。
- **端到端实测**（`test/demo/idle-timeout-probe.ts` + 本地假服务；把内置 `deepseek` 的 baseUrl 指向“只发响应头后沉默”的服务）：
  - 不装看门狗：停顿到重试 **301,310 ms**（默认 300 秒），会话总耗时 301,446 ms；
  - 装看门狗（阈值 3 秒）：通知“模型请求已停顿超过 3 秒：已中断本次请求并自动继续（第 1/2 次）”，停顿到重试 **5,023 ms**，会话总耗时 **5,151 ms**，最终正文“收到” ✓。
  - 对照：**~60 倍提速**；按真实阈值 120 秒，卡住后约 2 分钟自动恢复（对比原生 5—10 分钟）。
- 附带修正：探针最初未建 Git 仓库，`/delivery-shape` 被入口检查拒绝（“交付需要 Git 仓库…未启用交付”），这也再次验证了第 13.102 节的入口检查。
- 验证证据：`npm run typecheck` 退出 0；unit **281/281**（含新增 4 项）、integration **105/105**、E2E **15/15**；`git diff --check` 通过。
- 未覆盖：插件环境中看门狗同样生效（不依赖传输实现），但未单独实测。
- 本节不包含：push、发布。

### 13.115 真实模型 + 真实网关下跑全程，看门狗实测生效

- 状态：已完成。用户要求“再用真实模型跑全程验证”。
- 方法：新增本地**转发代理**（`/tmp/pi-tty/gateway-proxy.mjs`）：第 1 个请求只发响应头后沉默，其余请求原样转发到真网关（`Authorization` 等头原样透传，不读取、不打印凭证）；demo 脚本新增 `DEMO_PROXY_BASEURL` 把 provider 指向代理。用真实模型 `openai/gpt-5.6-sol` 跑完整流程，并把看门狗阈值临时设为 15 秒（`PI_ADAPTIVE_STALL_MS`，仅测试）。
- 实测结果：
  1. **看门狗在真实环境生效**：代理日志显示第 1 个请求于 `02:58:50` 被判定【沉默】，第 2 个请求于 `02:59:07` 正常转发 —— **间隔 17.2 秒**（阈值 15 秒 + 5 秒检查周期）；若不装看门狗，同一场景实测为 301 秒。
  2. **全程跑通**（真实网关 + 真实模型）：`/delivery-shape` → 两次确认 → `delivery_develop`（thinking medium）→ 注入单文件缺陷（`12000 → 20000`）→ `delivery_review`（thinking high）报缺陷 → **返工**（第 2 次 `delivery_develop`）→ **复审**（第 2 次 `delivery_review`）→ `/delivery-status`、`/delivery-tasks` → 造残留 lease → `/delivery-exit` 被拒 → `/delivery-unlock` → 退出。
  3. 最终产物：`FULL_REDUCTION_THRESHOLD_CENTS = 12000`，指定检查 **6/6 通过**，无残留 lease；子会话 4 个（开发×2、审查×2）。
  4. 代理共转发 37 个请求；模型走 `/responses`（responses API），单次响应可达 13 万字节。
- 意义：这是“停顿→自动恢复”在**真实模型 + 真实网关**下的首次端到端实测；第 13.113 节测得的 5—10 分钟原生超时被缩短到阈值 + 5 秒。
- 验证证据：完整日志 `/tmp/pi-tty/watch-real.log` 与代理日志 `/tmp/pi-tty/proxy.log`；`npm run typecheck` 退出 0；全量测试沿用第 13.114 节结果（unit 281/281、integration 105/105、E2E 15/15）。
- 本节不包含：push、发布。

### 13.116 事故与修复：demo 脚本顺着符号链接覆盖了用户全局 models.json

- 状态：已修复并恢复用户配置；用户真实配置已可正常调用模型。
- 现象：2026-09-13 10:58 之后，所有真实模型请求（真机终端、`pi --print`、结构化真机、原生真机）统一返回 `Error: ... Connection error.`，而网关 HTTP 面正常（`/`、`/health` 200；`/v1/models` 401）。
- 根因：`test/demo/real-model-full.ts` 先把用户全局 `models.json` **符号链接**进临时 agent dir（隔离手段），随后 `DEMO_PROXY_BASEURL` 分支直接 `writeFile` 同一路径 —— 写入顺着符号链接落到用户真实文件，把它覆盖成 `{"providers":{"openai":{"baseUrl":"http://127.0.0.1:8899"}}}`（本机代理，且实验结束后已关闭），于是所有请求打到死端口。
- 定位证据：目标文件 mtime 10:58 与代理实验时刻一致；同机三种配置（临时环境、用户真实配置、两个模型）全部同一错误；网关 `/`、`/health` 可达；事故前 40 分钟同一网关 37 个请求全部正常；历史会话中 `"baseUrl":"https://sub2api.shelfcanvas.top"` 出现 109 次且无其它取值。
- 恢复：从历史会话记录中反向提取原始文件内容（`providers.openai.baseUrl`，无其它字段），写回并立即用 `pi --print` 验证成功（返回「收到」）。另发现 2026-09-03 的一份历史版本含三个 1M `modelOverrides`（gpt-5.6-sol/terra/luna），但事故当日 09:55 的会话显示 `272k` 上下文，说明该覆盖当时已不在生效，故按当日实际状态恢复，未擅自加回。
- 修复：`DEMO_PROXY_BASEURL` 分支写入前先 `rm(target, { force: true })` 断开符号链接（注释说明原因）；排查 `test/demo/idle-timeout-probe.ts`、`stream-timing.ts`、`real-model.ts`，确认它们不写 `models.json` 或写的是自身目录，无同类风险。
- 教训：隔离目录里指向用户真实配置的符号链接**只读**；任何写入前必须确认目标不是链接，或先断开。
- 验证：`npm run typecheck` 退出 0；用户配置 `pi --print --model openai/gpt-5.6-sol "只回答两个字：收到"` → 「收到」。
- 本节不包含：push、发布。

### 13.117 Structured 环境 + 真机终端：完整跑到退出（补齐最后一项）

- 状态：**已完成**。这是验证矩阵中最后一个未完成项。
- 环境：真实 PTY + 真实 `pi` CLI + `@howaboua/pi-codex-conversion`（Structured adapter，`executionMode: normal`，页脚 `Codex adapter V: low`）+ 本包 + 真实模型 `openai/gpt-5.6-sol`（medium）。
- 父会话的交付工具调用（UTC；对应本地 13:xx，证据：`/tmp/pi-tty/structured-full-root/agent/sessions/**`）：
  - `05:08:10 delivery_git_status`（现场检查）
  - `05:08:35/05:08:48 delivery_approval{stage:"design", documentStrategy:"none", paths:[…]}`（方案确认）
  - `05:12:14 delivery_approval{stage:"implementation"}`（实施确认）
  - `05:15:26 delivery_develop{agent:{thinking:"medium", reason:"局部金额规则修改…"}}`（委派开发）
  - `05:16:41 delivery_review{agent:{thinking:"high", reason:"金额门槛边界…使用 high"}}`（独立审查）
  - `05:19:21 delivery_develop{reason:"审查发现的是单文件测试边界补强…medium 足以完成并复验"}`（**返工**）
  - `05:20:05 delivery_review`（**复审**）
  - 每档位都带显式选档理由；两次确认均由面板完成（TUI 内批准）。
- 最终产物：`src/discount.js` 门槛 `>= 12000` 分（满 120 减 10），注释同步；`test/discount.test.js` 补 100 元/119.99 元不优惠、120 元优惠边界。`node inputs/command.cjs` **6/6 通过**，`git diff --check` 通过，工作区仅两个文件；**无残留 lease**；`/delivery-exit` 成功（末屏「交付未启用」）。子会话 **4 个**（开发×2、审查×2），本回合花费 `$0.306`、`8.9%/272k`。
- 过程中定位并修复的驱动问题（真机 PTY 层，非产品缺陷）：
  1. **插件 TUI 会吞掉同一写入里的连续按键**：一次写入 4 个上键只处理第 1 个，光标误落「提出修改意见」并进入意见输入态，面板看起来像卡死（此前误判为 provider 停顿）。修法：**一次只发一个按键，发完即校验光标位置**。
  2. **插件 TUI 会吞回车**：首次回车常常不提交，本轮第 5 次回车才被接受。修法：回车后校验**会话记录是否生成**，不成就重发。
  3. 上游内容过滤偶发误判 `invalid_prompt`（同一文本前一轮通过）→ 驱动加重投；同时确认 Pi 对 `invalid_prompt` **不重试**，与第 13.96 节分类器设计一致。
- 结论修正：此前把「Structured 真机卡住」归因于 provider 停顿是**错的**，真实原因是按键与回车被插件 TUI 吞掉。
- 未覆盖：Structured 下的“父直接改”返工分支未在真机触发（本轮走的是重新委派分支，该分支已在第 13.111 节 SDK 结构化验证中覆盖）。
- 本节不包含：push、发布。

### 13.118 真机 PTY 验证脚本入库，并用仓库版本重跑一轮

- 状态：已完成。
- 文档：README 新增「环境边界」段（支持标准 Pi 工具集与 `pi-codex-conversion` 的 Structured 适配器 `executionMode: normal`；Code Mode / Notebook Mode 不支持，工具集不符时子会话交接明确报错），并在阅读表补 `test/demo/pty` 入口。
- 入库：新增 `test/demo/pty/`（4 个文件，手动运行，不属 `npm test`）：
  - `session.py`：可复用底座（PTY 会话 + 终端屏幕模拟、隔离 agent dir、demo 仓库生成、`Driver.transcript()` 与 `wait_quiet()`）；包路径与 `pi` 路径改为从脚本位置与 `PATH` 解析，不再硬编码。
  - `structured-full.py`：Structured 环境完整流程驱动；沿用第 13.117 节的全部修复（校验式提交、单键面板校验、内容过滤重投），并按第 13.117 节的教训把「等屏幕静止」改为**忽略页脚**的正文比对，避免被插件每 15 秒的页脚刷新拖住。
  - `gateway-proxy.mjs`：停顿注入代理（第 13.115 节实验用）。
  - `README.md`：用法、隔离原则、写入安全与两条真机硬经验。
- 脚本自检（无模型调用）：`python3 -m py_compile` 通过；`node --check` 通过；冒烟验证包路径解析为仓库根、`settings.packages=[适配器, 仓库]`、隔离目录三个用户文件确为符号链接且 `settings.json` 为新文件、demo 仓库自带检查退出码 0。
- **仓库版本重跑真实模型全程**（`/tmp/adaptive-pty-repo-run`）：两次确认均成功（逐步按键 → 光标 提出修改意见 → 确认方案/确认实施 → 面板关闭），委派 `delivery_develop` 与 `delivery_review` 各一次，`/delivery-status`、`/delivery-tasks`、`/delivery-exit` 正常；最终 `src/discount.js` 门槛 `>= 12000`、`test/discount.test.js` 补 11999/12000 边界，`node inputs/command.cjs` **6/6 通过**、`git diff --check` 通过、**无残留 lease**、退出后回到普通 Pi；3 个子会话，本回合 `$0.272`、`7.9%/272k`。本轮审查未发现缺陷，因此没有触发返工（返工闭环已在第 13.117 节验证）。
- 顺带修正：退出判定正则原先只匹配「交付已退出/交付未启用」，未覆盖退出后的提示语，导致多走一次 `/delivery-unlock`；已补入判定。
- 本节不包含：push、发布。

### 13.119 发布 0.1.6：版本升级、推送与 npm 发布

- 状态：**已发布**（版本、推送、npm 发布三步全部完成，证据见下）。
- 发布过程（含一次认知纠正）：
  - 用户 npm token 已失效（`npm whoami` → `401`）；经用户扫码完成网页登录（`npm login --auth-type=web`，登录链接由本地渲染成二维码供扫描，不经过任何第三方）。
  - `npm publish --help` 只列出 `[--otp <otp>]`，据此曾判断“扫码/security key 无法用于发布”；**该判断错误**：把 `npm publish` 放进真实 PTY 后，npm 会给出网页授权入口（`Authenticate your account at: https://www.npmjs.com/auth/cli/<uuid>` + `Press ENTER to open in the browser...`），用户用 security key 确认后发布自动继续。教训：CLI 帮助文本不能作为能力边界的唯一依据。
  - 用户账号为 **security key 类 2FA**（`Enabled for authorization and publishing`，无 TOTP），因此每次发布都需要用户在网页授权；页面横幅提示 bypass 2FA 的 token 将在 2027-01 起被限制用于直接发布。
- 线上核验（`npm view` + 拉取线上 tarball）：
  - `version = 0.1.6`，`dist-tags = { latest: '0.1.6' }`；
  - `dist.shasum = 80137bcb6e914027e6729abb281a29c2fd97908f`，与本地打包 shasum **完全一致**（`dist.integrity` 亦一致）；
  - 线上 manifest 的 `pi` 字段正常（`extensions`/`skills`/`prompts`/`image`）；
  - 下载 `pi-adaptive-delivery-0.1.6.tgz` 共 **26 个文件**，包含 `extensions/delivery-gate/src/stall-watch.ts` 与 `stream-retry.ts`（停顿看门狗已进入发布版）。
- 用户授权：本次明确要求“push 并发布 0.1.6”。
- 已完成：
  - 版本 `0.1.5` → `0.1.6`（`npm version 0.1.6 --no-git-tag-version`，同时更新 `package-lock.json`，不打 tag）；
  - 同步两处“当前版本”表述：`docs/技术方案.md` 第 7 行、`README.md` 第 57 行；历史记录中的 `0.1.5` 保持原样不改写；
  - 打包预检：`npm pack --dry-run` 共 **26 个文件**，含 `LICENSE`、`README.md`、两份文档、`extensions/**`（**含新增 `stall-watch.ts`**）、`skills`、`prompts`；`pi` 字段与 0.1.5 一致（`extensions`/`skills`/`prompts`/`image`）；
  - 全量测试绿：单元 **281/281**、集成 **105/105**、E2E **15/15**、typecheck、`git diff --check`。
- 当时的凭证阻塞已解除，最终通过真实 TTY 中的网页授权完成 npm 发布；过程和线上制品证据见本节上文。

### 13.120 README 跟随 0.1.6 复核与补齐

- 状态：已完成。
- 改动（4 处，均在 README）：
  1. 「快速开始」补项目级安装与卸载（`pi install … -l` / `pi remove … -l`），并写明 `.pi/settings.json` **要提交**、`.pi/npm/` 下的依赖与锁文件**不要提交**（该目录有 npm 自带的 `.gitignore`）。
  2. 「当前边界」删掉已过时的“实际终端体验仍需试用验证”表述，改为如实说明已完成真实终端双环境（标准工具集 + Structured）完整流程验证与停顿恢复验证，并指向第 13 节；剩余待观察项收敛为“小任务是否多写文档、长流程能否一次交付”。
  3. 停顿看门狗段落补限定：**只在交付流程内生效**（含其派出的开发/审查子会话），普通会话仍由 Pi 自身处理。
  4. 「开发验证」补真实模型完整流程脚本 `test/demo/real-model-full.ts`（含 `DEMO_STRUCTURED=1`），并新增「发布新版本（维护者）」检查清单（版本三处同步 → 测试与 push → **TTY 里 `npm publish` 走网页授权**（security key 2FA 不接受 6 位码）→ 用 `npm view`/`dist.shasum` 复核）。
- 验证：`git diff --check` 通过；`npm run typecheck` 退出 0；本次仅文档改动，未触代码，故未重跑全量测试（全量结果见第 13.118 节）。
- 本节不包含：push、发布。

### 13.121 README 增加完整流程配图

- 状态：已完成。
- 来源：用户用 GPT 图像模型按本节总结的提示词生成的流程图（1086×1448 PNG）；第一版有三处与实现不符，经追加指令修正为：实施阶段改为「任务复杂度」判断后的二选一分支（父 Pi 直接改 / 委派开发子会话）、独立审查标注「按需（高风险或需第二视角）」并改为旁路、停顿恢复补「每回合最多 2 次，超限只提示」、运行检查补「代码又改动则重新检查」。
- 处理：图片入库为 `docs/images/flow.png`（按用户要求不做压缩），README 顶部在原有 `preview.png` 之后并列引用（沿用 raw.githubusercontent 绝对地址，保证 GitHub 与 npm 都能渲染），alt 文本写明完整链路与保障机制。
- 待用户肉眼确认：OCR 将实施确认面板里的「修改范围」读作「修改沧围」，可能是图中错字（前一版该处正确）；已告知用户，未擅自改图。若确认有误，用户可让图像模型只修这一处。
- 验证：`git diff --check` 通过；仅新增图片与 README 一行引用，未触代码。
- 本节不包含：push、发布。

### 13.122 可用性收尾：文档整理与回归验证

- 状态：已完成。用户授权整理和测试；本轮范围为当前状态、安装说明和打包加载验证，不改核心实现、不升版。流程图未替换，待用户最终确认后单独处理。
- 已验证：`npm run typecheck` 退出 0；`npm run test:all` 单元 **281/281**、集成 **105/105**、E2E **15/15**，无失败、取消或跳过。临时制品根依次为 `adaptive-tests-6QLFVh`、`adaptive-tests-7mS1RR`、`adaptive-tests-YftCVx`。默认使用 fake provider、隔离配置和临时 Git，未调用真实模型。
- 打包预检：`npm pack --dry-run --json` 返回 `pi-adaptive-delivery-0.1.6.tgz`、**26 个文件**，包含 README、两份文档和正式 Extension；文档整理后在 `adaptive-tests-ji4IZB` 重跑 E2E，tarball 加载场景通过，隔离制品报告 **25 个包内文件**。
- 发布核对：`npm view pi-adaptive-delivery version dist-tags --json` 返回 `version=0.1.6`、`latest=0.1.6`；清除第 13.119 节已失效的发布阻塞结论，历史发布证据保留。
- 文档整理：台账首页已同步 `0.1.6`、当前验证结果和 npm 状态；README 已收敛为项目介绍、使用流程、安装、命令和边界说明，移除维护者发布、账号验证和发布复核细节。历史章节未整体改写。
- Git 与发布：开始时工作区干净，`main` 比本地跟踪的 `origin/main` 超前 2 个已有提交；本轮未 commit、push、创建 PR 或 npm publish，未安装或重载用户 Pi。

### 13.123 README 面向使用者收敛

- 状态：已完成。用户要求 README 只承担项目介绍和使用说明；移除维护者发布、npm 账号验证、2FA、发布复核和发布排障内容，相关历史证据仍保留在本台账中。
- 保留内容：项目定位、完整流程、协作时序、命令速查、安装方式、使用边界和进一步阅读；开发验证细节统一由 `docs/技术方案.md` 第 14 节承载。
- 验证：`rg` 复查 README 未发现 `npm publish`、security key、TOTP、OTP、npm view、shasum 等发布维护关键词；`git diff --check` 通过；`npm pack --dry-run --json` 返回 `0.1.6`、26 个文件；文档调整后 E2E **15/15** 通过，包含隔离 tarball 加载和真实 Pi 流程。
- 范围：未修改核心代码、版本、流程图或 npm 制品；本轮未 commit、push、创建 PR、npm publish 或重载用户 Pi。

### 13.124 一次方案确认与内部实施计划

- 状态：已完成本轮代码、测试和文档迁移；用户已确认新交互方向并授权落实。本次不提交、推送或发布。
- 已实现：`delivery_approval` 只接受 `design`，面板按钮为“确认方案并开始实施”；批准后自动衔接 AI 内部计划与执行，不再创建 implementation 批准。开发和审查调用分别提供非空 `paths` 和可选 `inputs`，继续核对方案正文、真实 TUI 来源、Session/worktree、writer 和终态。
- 内部计划：简单任务留在原生 Session；复杂任务沿用项目已有唯一台账，动态维护待完成、进行中、已完成、阻塞、返工和证据。不新增计划引擎、JSON 任务树或第二份进度状态。
- 重新确认：只有业务目标、数据行为、对外接口、验收标准或未覆盖的重大外部风险变化时才重新讨论；文件数量、步骤、顺序、检查方式调整和范围内返工由 AI 自行处理。
- 已验证：`npm run typecheck` 通过；`npm run test:all` 通过，单元 **236/236**、集成 **105/105**、E2E **15/15**；独立 demo **1/1** 通过；`git diff --check` 通过。E2E 包含无 `node_modules` 的 tarball 加载与真实 Pi。新增真实 SDK 场景覆盖一次确认后父 Pi 创建内部台账、修改文件、运行 Node 断言、回写证据且只保留一条批准；集成场景覆盖动态路径、空范围、worktree 越界和规划台账保护。生命周期失效、非 TUI 拒绝和持久记录核验已补回单元验证。
- 失败记录：首次直接启动集成测试未使用项目 `run-tests.ts`，夹具按设计拒绝启动；随后改用正式脚本。旧开发夹具额外传入已删除的 `inputs` 批准字段导致 schema 拒绝，已修正，开发、审查及本机检查链路已定向通过。所有默认验证使用临时 Git、fake provider 和模拟父 TUI；未调用真实模型。
- 剩余：流程图图片仍沿用仓库现有资源，未在本轮替换；版本仍为 `0.1.6`，本轮不提交、不推送、不发布。

### 13.125 运行时提示、测试宿主与 CLI 对齐修复

- 状态：已完成限定修复与验证。用户同意先处理运行时提示、开发测试环境竞争和父子 CLI 对齐；本轮只修改现有源码、测试宿主、demo/接入文案和唯一台账，不放宽父子环境握手，不新增生产配置或执行后端。未提交、推送、创建 PR、发布或部署。
- 运行时提示：`extensions/delivery-gate/src/policy.ts` 不再向父/子模型注入“方案与实施分别确认”，改为明确“一次方案确认后立即授权本轮实施、内部维护实施计划、不另设第二次确认”；`test/unit/policy.test.ts` 增加对应契约断言。
- 测试宿主：`test/support/development-host.ts` 增加进程内 FIFO 环境锁，锁覆盖父 `createAgentSession` 初始化至测试上下文清理；初始化异常也会恢复 `process.env` 并释放锁，避免并发 fixture 互相覆盖 `PATH`、`HOME` 和 agent 目录。
- CLI 策略：`test/support/run-tests.ts` 在启动隔离 Node test 进程前核验 `node_modules/.bin/pi` 存在，并将其置于测试 PATH 首位；缺失时直接失败，不回退系统全局 CLI。生产 `startChild` 的工作区外 PATH 解析和环境摘要握手保持不变，版本或基础指令不一致仍拒绝发送任务。
- 现行文案/驱动：同步技术方案、README Mermaid 流程图、Structured 接入边界、PTY 说明和两个真实模型 demo 的一次确认流程；历史章节中记录当时两阶段试验的内容保留为历史证据，不改写为当前事实。

| 验证项 | 结果 |
|---|---|
| `npm run typecheck` | 通过 |
| `node --import tsx test/support/run-tests.ts test/unit/policy.test.ts` | **11/11** |
| `node --import tsx test/support/run-tests.ts test/integration/development.test.ts` | **6/6**；原先单独执行的 4 个失败消失 |
| `npm run test:all` | unit **237/237**、integration **105/105**、E2E **15/15** |
| Structured `3.0.35` + 本地 Pi `0.85.1` | 定向流程 **1/1** 通过 |
| Structured `3.0.25` + 本地 Pi `0.85.1` | 初始因测试夹具调用不存在的可选 API 失败；移除遗留探针后 **1/1** 通过 |
| `node --import tsx test/support/run-tests.ts test/demo/full-flow.test.ts` | **1/1** 通过；改动前基线退出码 1 为预期 |

- 结论：本轮解决了测试结果受 CLI 版本混用和开发宿主共享环境竞争影响的问题；没有通过放宽 `assertReadOnlyEnvironment`、跳过 READY 握手或静默降级来掩盖差异。旧适配器的初始失败另见第 13.126 节；真实模型、真实桌面 TUI、其他平台和其他适配器版本仍未由本轮证明。

### 13.126 Structured 3.0.25 收尾失败根因定位

- 触发事实：本地 Pi `0.85.1` 加已安装 `pi-codex-conversion 3.0.25` 的首次定向运行显示子任务已发送，随后出现 `delivery-child-exit`；第一个 `apply_patch` 只有 `tool_execution_start`，没有对应 `toolResult`，父侧停止 RPC 后将其包装为“子 Pi 协议或事件处理失败”。这不是握手阶段拒绝，也不能把进程退出当作成功。
- 原始异常：实时隔离追查在子 Pi `before_agent_start` 取得 `extension_error`：`trySendCodexDeveloperMessage is not a function`。测试夹具从 `/codex` 命令的 `sourceInfo.path` 动态导入该导出；`3.0.25` 的 `dist/index.js` 没有该导出，`3.0.35` 才导出它。适配器 CHANGELOG 将 developer-message 能力记录在 `3.0.26`，所以缺少该可选 API 是版本差异，不是 `apply_patch` executor 或 `ChildRpc` 收尾契约的证据。
- 最小修复：`test/support/fake-provider.ts` 删除已不再被当前 `test/structured/flow.test.ts` 断言消费的 developer-message 探针及其版本特定导入；没有修改生产交付代码、适配器、父子握手、用户配置或安装目录。夹具继续使用真实 Structured 工具、请求 payload、父子 Session 和交付收尾。
- 能力边界决定：当前交付流程不调用 developer-message，因此不为未使用的可选导出增加版本探测或兼容垫片；若未来引入该能力，必须先做显式导出探测并在适配器矩阵中单独验证，不能直接动态调用版本特定 API。

| 验证项 | 结果 |
|---|---|
| 修复前 `3.0.25 + Pi 0.85.1` | **1/1 失败**；子 `before_agent_start` 抛出上述 `TypeError`，首个工具结果缺失 |
| 修复后 `3.0.25 + Pi 0.85.1` | **1/1 通过**；真实 `apply_patch`、`exec_command`、父子开发/审查和 writer 收尾完成 |
| 修复后 `3.0.35 + Pi 0.85.1` | **1/1 通过** |
| 修复后两版本 Session/fixture 审计 | 各 **10 个 toolCall / 10 个 toolResult**；`apply_patch` 均有对应结果，不依赖进程退出或 `rpc.stop` 作为成功证据 |
| 修复后默认 `npm run test:all` | unit **237/237**、integration **105/105**、E2E **15/15**；均无失败、取消或跳过 |
| 修复后独立 demo | **1/1** 通过；`npm pack --dry-run --json` 显示 `0.1.6`、26 个制品文件；typecheck、Python 语法检查和 `git diff --check` 均通过 |

- 结论：`3.0.25` 在当前已验证的共同 Structured 工具/Session 流程上可运行；它不因此获得 `3.0.26+` 的 developer-message 能力。该结论不扩展到任意适配器版本、Code/Notebook、真实 Provider 或生产中父 SDK 与 `PATH` 解析出的不同 Pi CLI；生产版本握手门禁保持不变。

### 13.127 升级到系统 Pi 0.87.0

- 状态：已完成限定升级与隔离验证。系统 `/opt/homebrew/bin/pi`、仓库 `node_modules/.bin/pi` 均为 `0.87.0`；开发依赖 `@earendil-works/pi-agent-core`、`pi-ai`、`pi-coding-agent`、`pi-tui` 和 `typebox` 已统一到精确版本 `0.87.0`、`0.87.0`、`0.87.0`、`0.87.0`、`1.3.27`。manifest 的 Pi peer dependency 最低声明仍为 `>=0.85.1`，没有据本轮结果扩大最低版本的完整支持承诺。
- SDK 适配：`0.87.0` 的 `TranscriptContext` 不再直接提供旧夹具读取的 prompt/tools 字段；测试 provider 和真实 SDK 夹具改用 `@earendil-works/pi-ai` 根入口导出的 `getCurrentSystemPrompt()` / `getCurrentTools()`，并补齐 `JsonObject`、`ToolResultMessage` 类型。临时复制到 fixture package 的代码不再依赖无法从该位置解析的 `pi-ai/utils/transcript` 子路径。
- 锁文件：`package-lock.json` 同步 Pi `0.87.0` 依赖树，并将根 `devDependencies` 与 `package.json` 的精确版本保持一致。相对旧锁文件的 323 个节点，当前为 268 个节点（移除 63、增加 8、变更 100）；审阅确认变化均由 Pi `0.87.0`/`typebox 1.3.27` 及其传递依赖树引入，未改变其他根开发依赖。隔离空 npm 配置下 `npm ci --dry-run --offline --ignore-scripts --no-audit --no-fund` 和实际 `npm ci --offline --ignore-scripts --no-audit --no-fund` 均已通过。未修改用户 npm 配置、Pi 安装目录、真实凭证或生产设置。生产 `startChild` 仍按 `PATH` 查找标准 CLI，父子基础环境握手和失败关闭门禁未放宽；实际运行须确保父 SDK 与子 CLI 使用同一版本并重启已运行父 Pi。

| 验证项 | 结果 |
|---|---|
| `/opt/homebrew/bin/pi --version` / `./node_modules/.bin/pi --version` | 均为 `0.87.0` |
| `npm run typecheck` | 通过 |
| `npm run test:unit` | **237/237**，0 失败/取消/跳过 |
| `npm run test:integration` | **105/105**，0 失败/取消/跳过 |
| `npm run test:e2e` | **15/15**，0 失败/取消/跳过 |
| Structured `3.0.25` + 本地 Pi `0.87.0` | **1/1** 通过 |
| Structured `3.0.35` + 本地 Pi `0.87.0` | **1/1** 通过 |
| `test/demo/full-flow.test.ts` | **1/1** 通过；基线失败、实施后检查通过 |
| `npm ci --offline --ignore-scripts --no-audit --no-fund`（隔离 user/global config） | 通过；安装 242 个包 |
| `npm ci --dry-run --offline --ignore-scripts`（隔离 user/global config） | 通过；`up to date` |
| `npm pack --dry-run --json` | 通过；已发布的 `pi-adaptive-delivery@0.1.7`，26 个文件，压缩包约 `371 KB`，解包约 `1.07 MB` |
| `git diff --check` 与 lock/manifest 对齐检查 | 通过 |

- 结论：仓库开发 SDK、测试子 CLI 和系统 CLI 已完成到 `0.87.0` 的版本对齐；实际 `npm ci` 后再次运行的默认 `test:all`、两个显式 Structured 测试及完整 demo 仍通过。共同 Structured 工具/Session 流程在两个已安装适配器上继续通过。未修改生产 `startChild` 的 PATH 解析策略，也没有通过跳过 READY 握手、放宽环境摘要检查或忽略工具结果来处理版本差异。真实模型、真实桌面 TUI、跨平台和其他适配器版本仍不在本轮支持结论内。
- Git/发布状态（本节升级记录完成时）：升级代码尚未 commit、push 或发布；后续发行证据见第 13.128 节。

### 13.128 npm 0.1.7 发布与线上核验

- 状态：已完成。用户确认将版本从已发布的 `0.1.6` 升为 `0.1.7`，并授权完整提交与 npm 发布；没有覆盖已有版本或修改 npm 账号配置。
- 发行提交：`0a83380`（`发布 0.1.7：同步 Pi 0.87.0 升级`）同步 `package.json`、`package-lock.json`、README 和当前台账；实现与依赖升级提交为前一提交 `b2998ab`。版本一致性、`npm run typecheck`、`git diff --check` 和 `npm publish --dry-run --access public` 均通过。
- 发布结果：`npm publish --access public` 返回 `+ pi-adaptive-delivery@0.1.7`，使用 `latest` tag 和 public access。npm 仅提示发布时将 `repository.url` 规范化为 `git+https://github.com/small-xiexu/pi-adaptive-delivery.git`，没有修改工作区文件。
- 线上核验：`npm view pi-adaptive-delivery@0.1.7` 返回 `version=0.1.7`、`dist-tags.latest=0.1.7`、`license=MIT`；公开 tarball 为 `https://registry.npmjs.org/pi-adaptive-delivery/-/pi-adaptive-delivery-0.1.7.tgz`，共 **26 个文件**，shasum `f775252aef0a6ca70779eaf66136eb56f1382e58`，integrity `sha512-Ix/LyPnenCKdFikDkD6aYtpuS7EERzfWMNwR+0dGFsbEVE5OjWGvpneo8QVca5kaTEVzpWR4CCSwpjJDvQSdzw==`；从 registry 下载的包与发布输出完全一致。
- Git/发布边界：本地 `main` 当前比 `origin/main` 多 3 个提交；本次只按用户请求完成本地 Git 提交和 npm 发布，未推送 Git 远端、创建 tag/PR、部署或重启用户正在运行的 Pi 会话。

### 13.129 移除旧适配器兼容逻辑

- 状态：已完成。按用户要求，Package 后续只使用标准 Pi 原生能力；本仓库不再探测、加载或兼容 `pi-codex-conversion`。
- 运行时清理：删除 `structured.ts`，移除父子环境握手中的适配器入口/版本字段、子进程环境变量和状态诊断模式分支；保留通用 `session_id` 命令进度跟踪。
- 测试与 demo 清理：删除 Structured 专项测试和适配器参数；测试替身改为只生成原生工具场景；PTY 完整流程迁移为 `test/demo/pty/full.py`，真实模型和停顿探针只保留原生 Pi/交付包路径。
- 文档清理：README、技术方案、Skill 和 PTY 说明改为原生 Pi 边界。第 13 节更早条目中的适配器名称、版本、命令和失败/通过结果属于历史记录，保留用于追溯，不代表当前支持能力。

| 验证项 | 结果 |
|---|---|
| `npm run typecheck` | 通过 |
| `npm run test:unit` | **237/237**，0 失败/取消/跳过 |
| `npm run test:integration` | **105/105**，0 失败/取消/跳过 |
| `npm run test:e2e` | **15/15**，0 失败/取消/跳过 |
| Python 语法检查（`test/demo/pty/session.py`、`test/demo/pty/full.py`） | 通过 |
| `git diff --check` | 通过 |
| 当前代码、测试、demo 和说明中的旧适配器专用引用检索 | 无残留；历史台账记录按上文保留 |

- Git/发布状态：本轮未 commit、push、创建 PR、发布或部署；工作区改动等待用户后续处理。

### 13.130 审查期间候选变化使审查结论失效

- 状态：已完成。审查开始和结束分别捕获候选 digest；如果候选发生变化，保留当前工作区，不复用旧审查正文，沿 Pi 原生工具错误语义返回“未形成有效结论”，要求父 Pi 核对当前变更后重新调用 `delivery_review`。没有新增批准、自动回滚、自动重试或第二套持久状态。
- 代码与测试：`extensions/delivery-gate/src/development.ts` 保存初始候选并比较最终候选；`test/integration/development.test.ts` 覆盖候选未变的正常审查和审查替身写入后的失效路径，并核对 writer 已释放。
- 验证：`npm run typecheck` 通过；`node --import tsx test/support/run-tests.ts test/integration/development.test.ts` **6/6** 通过。中间一次验证曾因直接返回的 `isError` 不被 Pi 执行层视为错误而失败，随后改为沿原生异常收尾路径抛出，最终验证通过。`git diff --check` 通过。
- Git/发布状态：本轮未 commit、push、创建 PR、发布或部署；当前改动仅限上述生产代码和集成测试。

### 13.131 收窄子 Agent 默认证据路径

- 状态：已完成。子任务默认只接收本回合基础规则、Skills 和调用方明确加入的当前证据；不再自动传入父 Session、历史开发/审查 Session 或历史审查目录。当前审查制品仍由审查流程显式加入。
- 代码与测试：`extensions/delivery-gate/index.ts` 删除历史 Session/委派记录的默认收集；`test/support/fake-provider.ts` 记录子进程资源路径；`test/e2e/rpc-resource-discovery.test.ts` 连续启动两个真实子任务，核对两次资源集合均不含 `.jsonl` Session。
- 验证：`npm run typecheck` 通过；`node --import tsx test/support/run-tests.ts test/e2e/rpc-resource-discovery.test.ts` **16/16** 通过；`node --import tsx test/support/run-tests.ts test/integration/child-environment.test.ts` **9/9** 通过；`git diff --check` 通过。
- 设计边界：子 Agent 仍可通过当前 Pi 的普通工具读取 worktree 内文件；本次只收窄 Package 自动提供的历史证据路径，没有引入文件系统沙箱或第二套资源权限系统。
- Git/发布状态：本轮未 commit、push、创建 PR、发布或部署；工作区当前改动等待后续统一处理。

### 13.132 成功退出后清理审查制品

- 状态：已完成。用户主动执行 `/delivery-exit` 时，Package 先完成既有退出门禁；只有回合空闲、无批准或在途任务、writer 已交回且没有未知 lease/操作锁时，才清理本次交付记录定位到的系统临时审查目录。退出被阻塞时保留制品；清理失败按 Pi 原生异常路径阻止退出并保留未清理现场。
- 实现：`review.ts` 跟踪 `prepareReview()` 创建的 `adaptive-review-*` 目录，并只接受系统临时目录下的绝对普通目录；`index.ts` 从当前 Session 的开发/审查记录收集审查目录，在 `assertCanExit()` 成功后调用清理。拒绝符号链接、普通文件、越界临时路径和清理失败，不自动重试或回滚。
- 测试：新增 `test/unit/review.test.ts` 覆盖目录创建、差异制品存在和安全清理；`test/integration/development.test.ts` 使用真实 Pi/临时 Git 核对退出被损坏 writer 记录阻塞时保留审查目录，以及清理残留后成功 `/delivery-exit` 删除审查目录。随后 `npm run typecheck`、`npm run test:unit` **238/238**、`npm run test:integration` **105/105**、`npm run test:e2e` **16/16** 和 `git diff --check` 均通过，零失败、取消或跳过。
- Git/发布状态：本轮未 commit、push、创建 PR、发布或部署；工作区当前改动等待后续统一处理。

### 13.133 `/delivery-unlock` 删除竞态收窄

- 状态：已完成。`WriterLeaseManager.discard()` 在用户快照显示没有残留操作锁时，先取得正常 operation lock，再重新读取并比较 lease digest，避免其他进程在快照和删除之间取得 writer 后被误删。已有残留操作锁时仍保留显式强制重置语义，不增加 PID 存活探测或自动解锁。
- 代码与测试：修改 `extensions/delivery-gate/src/workspace.ts`；`test/unit/workspace.test.ts` 继续覆盖现场变化、损坏记录和无残留清理；`test/integration/writer-lease-process.test.ts` 使用真实独立进程同时覆盖无操作锁 lease 清理和残留操作锁清理。
- 定向验证：`npm run typecheck` 通过；workspace 单元 **29/29**、独立进程 writer 集成 **2/2**、`git diff --check` 均通过。随后完整 `npm run test:unit` **238/238**、`npm run test:integration` **105/105**、`npm run test:e2e` **16/16** 和 `npm run typecheck` 均通过，零失败、取消或跳过。
- Git/发布状态：本轮未 commit、push、创建 PR、发布或部署；工作区当前改动等待后续统一处理。

### 13.134 版本文案与 peer dependency 范围核对

- 状态：已完成。`package.json`、`package-lock.json`、README、实施台账和技术方案均以 `0.1.7` 为当前版本；技术方案顶部的旧 `0.1.6` 已同步。未改写历史章节中的旧版本记录。
- 兼容范围：`package.json` 与 lock root 继续声明 Pi 相关 peer dependency `>=0.85.1`，开发依赖和本轮完整自动化实际使用 `0.87.0`。当前证据支持“0.87.0 已验证、低于该版本未在本轮验证”，不足以把最低兼容范围改成 `0.87.0`，也不新增兼容垫片。
- 验证：版本与 peer 字段核对、`npm ls --depth=0`、完整 unit **238/238**、integration **105/105**、E2E **16/16**、typecheck 和 `git diff --check` 均通过。
- Git/发布状态：本轮未 commit、push、创建 PR、发布或部署；工作区当前改动等待后续统一处理。

### 13.135 PTY 测试驱动器稳定性改进

- 状态：已完成。屏幕模拟器现在识别 Pi 的 `CSI ?1049h`/`?1047h` alternate screen，在 TUI 临时屏幕与主屏幕之间分别保存和恢复缓冲区，避免方案面板关闭后残留文字继续参与状态判断。
- 驱动行为：`full.py` 只把当前选择器页脚和实际标签视为活动面板；方案批准以新 Session 的 `delivery-approval` 记录确认，退出以 `delivery-activation enabled:false` 记录确认。`/delivery-exit` 首次被收尾门禁拒绝时先等待回合空闲并重试，不自动调用 `/delivery-unlock`；驱动器结束时先发送 `SIGTERM` 并回收 Pi，超时才使用 `SIGKILL`，失败则保留现场供人工核对原 Session。
- 测试与说明：新增 `test/demo/pty/test_session.py`，覆盖 `1049` 和 `1047` alternate screen 隔离；`test/demo/pty/README.md` 补充运行命令和边界说明。`python3 -m py_compile test/demo/pty/session.py test/demo/pty/full.py test/demo/pty/test_session.py`、PTY 回归 **2/2** 和 `git diff --check` 通过。
- 真实 Pi/临时 Git 验证：先以 `PI_ADAPTIVE_STALL_MS=15000`、Pi `0.87.1` 和 `openai/gpt-5.6-sol` 运行，确认真实任务已提交但独立审查因模型停顿缺少持久终态；随后以产品默认 `PI_ADAPTIVE_STALL_MS=120000` 重跑同一 `full.py`，真实完成方案 TUI 确认、`delivery_develop`、一次审查重试后的 `delivery_review`、`/delivery-status`、`/delivery-tasks` 和 `/delivery-exit`。独立审查最终 `status=completed`；临时项目 `node inputs/command.cjs` **8/8**、`git diff --check` 通过，最终退出记录为两条 `delivery-activation enabled:false`，没有 lease、审查目录或残留 Pi 进程。
- Git/发布状态：本轮未 commit、push、创建 PR、发布或部署；Package 工作区改动等待用户后续处理。

### 13.136 实施路径可见性与委派失败事实

- 状态：已完成。真实亚马逊项目试用确认：父 Pi 直接修改与 `delivery_develop` / `delivery_review` 的实际路径没有形成统一、可查询的交付记录；Provider/HTTP 流错误最终被安全地收敛为“没有正常完成的持久模型终态”，但父侧缺少原始终态事实与明确下一步；方案确认后无在途任务时 `/delivery-status` 仍显示“实施进行中”，容易把“交付模式仍启用”误解为“模型仍在运行”。本轮按最小范围补齐三项可见性能力，没有改变批准、writer、候选或失败关闭边界。
- 范围：
  - 为父 Pi 增加只记录、不改文件的 `delivery_path` 内部工具，父直接实施前记录 `parent_direct`、节点、理由和是否计划独立审查；`delivery_develop` 与 `delivery_review` 由 Package 在真实调用时自动记录路径。所有记录写入当前 Pi 原生 Session custom entry，状态页从原生记录投影，不建立第二份任务账本。
  - 子任务或审查终态异常时保留可核对事实：模型 `stopReason`、原始 `errorMessage`、子进程退出、在途工具、Session 持久化和候选核对状态；继续 fail-closed，不把事实记录改判为成功，不建立封闭错误码表。
  - `/delivery-status` 区分“实施进行中”和“交付已启用，当前无在途任务”，`details` 展示本轮已记录的执行路径、节点、审查计划、委派状态和失败事实引用；不把父普通工具调用伪装成 Package 已观察到的源码完成事实。
- 实现：新增 `extensions/delivery-gate/src/execution-path.ts` 和父侧 `delivery_path` 工具，使用当前 Pi 原生 Session custom entry 记录 `parent_direct`；开发、审查调用自动写入 started/ended 路径记录。`/delivery-status details` 从本轮分支原生记录投影父直改、开发、审查和只读委派，未声明的普通 `edit`/`write`/`bash` 明确显示未声明，不自动猜测业务节点。异常结果通过原生 `tool_result` 合并结构化执行事实，保留模型终态、Provider 原始错误、子进程退出、Session 持久化、在途工具和工具错误；失败仍沿异常路径处理并保持 writer fail-closed。实现复用 `appendEntry`、现有委派记录和状态投影，不新增配置模式、严格委派模式、自动审查重试、独立 checkpoint 文件或新的完成状态机。
- 验收：新增执行路径单元测试、父直接路径和开发/审查路径集成测试、Provider 断流失败事实断言；使用真实 Pi SDK/CLI、临时 Git、fake provider 验证 Session 记录、writer 交接、候选变化失效和失败关闭。`npm run typecheck`、`npm run test:unit`（**242/242**）、`npm run test:integration`（**106/106**）、`npm run test:e2e`（**16/16**）和 `git diff --check` 均通过。
- 后续计划：长任务 append-only checkpoint、受约束的 `delivery_review` 重试提示和实际 `cwd` 诊断作为后续独立节点；先使用本轮新增的路径与终态事实判断是否仍有必要，不在本轮引入自动恢复或第二套计划系统。
- 本轮开发状态：源码、文档和测试已完成并通过上述验证；未 commit、push、创建 PR、发布或部署。

### 13.137 npm 0.1.8 发布与线上核验

- 状态：已完成。用户授权完成 `0.1.8` 的 npm 发布、版本变更提交和 Git 推送；发布前版本、锁文件、README、技术方案和 Package 元数据已同步。
- 版本准备：`npm pkg fix` 将 `package.json.repository.url` 规范化为 `git+https://github.com/small-xiexu/pi-adaptive-delivery.git`；`npm pack --dry-run --json` 核对为 `pi-adaptive-delivery@0.1.8`、**26 个文件**、包大小约 **378.5 kB**、解包约 **1.1 MB**；`git diff --check` 通过。
- 发布过程：非交互发布首次因账号的 security-key 2FA 返回 `EOTP`；随后通过真实 TTY 生成 npm 浏览器授权链接，并在系统默认浏览器完成 security-key 验证。发布命令返回 `+ pi-adaptive-delivery@0.1.8`。
- 线上核验：`npm view pi-adaptive-delivery version` 返回 `0.1.8`；`latest` 为 `0.1.8`；tarball 为 `https://registry.npmjs.org/pi-adaptive-delivery/-/pi-adaptive-delivery-0.1.8.tgz`，shasum 为 `01c3bfe97ccbc472269dd11c6ea41e059da5c96b`，integrity 为 `sha512-lCbsTsCPKlZ640WFgrJIGbtd2M2eikbpuWz6/S4coj+WrGsO/tjmAv3UU4BD8WZFyaPl4PB1Y7wUYpgGWsPV+w==`。
- Git/发布状态：npm 线上已为 `0.1.8`；版本发布提交为 `08e478e`，发布台账修正提交为 `1d83733`，均已推送 `origin/main`；发布提交时工作区干净。13.138 第一切片已完成验证，当前只收口 Package 源码、测试和文档，不涉及 npm 发布。

### 13.138 委派失败事实、审查恢复与状态提示优化规划

- 状态：进行中。13.138.1—13.138.3 第一切片已完成并通过最终验证；13.138.4—13.138.6 仍为已规划、待实施。本节不把未验证的 P1 诊断、checkpoint 或重试提示写成当前运行时事实。
- 目标：让父 Pi 和用户能准确回答“调用停在哪一层、是否创建了子 Session、工具是否真实运行、子进程是否正常收尾、lease 为什么仍在、下一步应使用哪个命令”，同时继续保持失败关闭、候选证据绑定、单 writer 和人工强制清理边界。
- 当前事实边界：前两次 `delivery_review` 在子 Session 创建前因 `paths`/`inputs` 与父维护规划文档重叠而被拒绝；修正范围后第三次真实启动了审查子 Pi，但下游检查出现 `alembic`/Python 环境错误和长时间命令超时；父模型流中断后，子 Pi 未形成可核验的正常终态，Package 记录 `SIGKILL` 并保留 lease。目标项目的 Docker、Python、`PATH`、依赖和测试启动器问题仍由目标项目自身验证，不能归因或伪修复为 Package 问题。

#### 13.138.1 P0：审查范围和调用前失败提示

- 约束 `paths` 继续只表达本次审查需要核对的源码、测试、配置和其他候选路径；`inputs` 继续表达额外只读输入；批准时声明的父维护规划文档继续作为受保护上下文，不得放入 `paths` 或 `inputs`。不自动从模型输入中删除规划文档，也不为了启动子 Agent 放宽保护。
- 当路径与父维护规划文档重叠时，错误正文同时给出：失败发生在“调用前范围校验”、冲突路径的有界相对路径、`paths`/`inputs` 的含义、正确修正方式以及“子 Session 尚未启动”。避免只显示“开发或审查路径不能包含父维护规划文档”后让模型重复原调用。
- 调整 `delivery_develop`/`delivery_review` 的工具说明和父侧能力提示，使模型在第一次调用前知道规划文档由父会话维护，审查范围应填写实际代码和测试；不增加第二次批准，不新增范围配置模式。
- 验收：非法范围只产生一个失败工具结果和一个可核对的调用前事实，不取得 writer、不创建子 Session、不生成审查制品；修正为合法范围后可以进入下一阶段。单元测试覆盖规划文档精确命中、目录重叠、`inputs` 重叠、相对路径和空范围。**已实施并由真实 Pi/临时 Git 集成测试覆盖：冲突信息包含 `paths`/`inputs`、有界相对路径和“子 Session 尚未启动”，空范围和越界路径也在同一阶段返回。**

#### 13.138.2 P0：执行阶段和失败事实投影

- 在现有 `progress`、原生 Session custom entry、`executionFacts()` 和 `delivery_path` 基础上记录发生层次：调用前校验、批准/候选准备、子 Session 启动、子 Agent 工具执行、子 Session 收尾、父结果落盘和 lease 交接。该层次只用于事实展示，不建立第二套状态机或封闭错误码集合。
- `/delivery-tasks` 和子任务详情明确区分：调用前被拒绝、子 Session 未启动、子 Session 已启动但工具失败、子进程已退出但正常持久收尾未证明、审查结论有效、审查结论因候选变化失效、父结果或 lease 收尾失败。
- `SIGTERM`、`SIGKILL`、父 Provider/HTTP 流中断、模型 `stopReason`、原始 `errorMessage`、工具退出码、在途工具、Session 是否完整落盘和审查制品路径继续作为事实记录；强制终止永远不能投影为审查通过。
- 将“子会话已退出”改成更精确的“子进程已退出，但正常持久收尾未证明”；将“子 Session 引用尚未取得”限定为确实未启动或未取得引用的阶段，不用于掩盖已有子 Session 的失败。
- 验收：同一审查分别模拟调用前拒绝、子工具失败、父回合中断、子进程正常退出和 `SIGKILL`，状态页、原生工具结果和 Session custom 记录必须保持事实一致，不能因父模型自然语言总结而改变终态。**第一切片已覆盖调用前拒绝、正常开发/审查、候选变化、父回合取消和审查子 `SIGKILL`；progress、任务详情和 `executionFacts` 已投影阶段、模型终态、退出信号、工具错误、Session 持久化、审查制品和候选状态。**

#### 13.138.3 P0：writer lease 和退出恢复指引

- 保持当前安全规则：未知或未证明的子执行终态继续保留 lease；`/delivery-exit` 继续要求没有 lease 或残留操作锁，不承担强制清理职责；`/delivery-unlock` 继续是用户在空闲且核对现场后的显式强制入口。
- 修正 `/delivery-status`、`/delivery-status details`、`/delivery-exit` 错误提示和父侧能力说明，明确恢复顺序：先查状态和原始 Session；确认没有在途交互、排队消息或仍运行的交付任务；确认 lease 是残留记录后使用 `/delivery-unlock`；再次核对现场；若 Package 报告已复位同一父进程中已结束且有 `fault` 的已知运行态且方案确认仍有效，可重新发起交付任务，否则才使用 `/delivery-exit`。禁止提示“lease 仍保留时直接执行 `/delivery-exit`”。
- 状态页区分“交付任务仍在运行”“任务已失败但尚未证明 lease 可释放”“子进程已结束但 lease 是未知残留”“没有 lease 且可以退出”。工作区干净不单独证明 lease 可以清理。
- `/delivery-unlock` 继续展示 lease owner、PID、Session、run ID、时间和 operation lock，要求 TUI 二次确认；不做 PID 存活探测替代终态证明，不自动删除文件，不自动恢复失败委派。
- 验收：审查子 Pi 被 `SIGKILL` 后，文档编辑被拒绝、lease 保留、状态页给出 `/delivery-unlock` 路径；在没有在途任务且用户确认残留后，`/delivery-unlock` 可安全清理，再由 `/delivery-exit` 完成默认退出路径。正常审查收尾不应进入强制清理路径。**已实施：状态、退出错误、能力提示、README 和 Skill 均给出默认 `/delivery-status details` → `/delivery-unlock` → `/delivery-exit` 顺序；集成测试确认强杀保留 lease，正常审查仍自动交回。已知父 fault 与匹配 lease 的复位例外见 13.138.10。**

#### 13.138.4 P1：实际 cwd、工具和运行环境诊断

- 子任务详情和失败事实增加实际子 Session `cwd`、调用工具名、工具开始/结束状态、退出码或信号、运行时长、最近一条失败工具返回和有限长度的命令上下文；敏感环境变量、token、完整凭据和无限制输出不得进入父 Session 摘要。
- 当出现 Python、`alembic`、Docker、`PATH`、工作目录或依赖解析失败时，Package 只报告“实际执行证据”和“请核对项目运行环境”；不自动替换解释器、不修改 `PATH`、不安装依赖、不重启 Docker、不把环境失败改成审查通过。
- 如果父命令的 cwd、子 Session cwd 和审查候选 worktree 不一致，明确提示路径事实；如果一致，也只记录核对结果，不声称因此所有运行时依赖正确。
- 验收：使用临时 Git 项目和 fake provider 构造错误 cwd、错误 PATH、工具非零退出、工具超时和正常长任务，状态页能够区分 Package 收尾状态与项目命令结果。真实目标项目的 Python 3.12、PostgreSQL、MinIO/S3 和 Docker 门仍需目标项目单独运行。

#### 13.138.5 P1：append-only 长任务 checkpoint

- 复用 Pi 原生 Session custom entry 增加有界、追加式 checkpoint，记录当前节点、执行路径、候选 digest、最近一次检查命令及结果摘要、子 Session 引用、lease owner、最近失败阶段和下一步提示。只记录事实和下一步，不保存第二份任务树、不建立后台调度器。
- 在方案确认后的关键边界写入 checkpoint：委派开始、子 Session ready、候选捕获、审查制品创建、工具失败、子 Session 收尾、lease 交接、结果落盘和退出阻塞。禁止按每个输出 token 写入，避免 Session 膨胀。
- 恢复或 `/delivery-status details` 时从当前分支的 checkpoint、原生工具结果、委派记录和磁盘 lease 投影只读状态；checkpoint 过期、重复、缺失或损坏时默认显示未知并保持关闭，不重放写入。
- 验收：父模型流中断、子进程正常退出、子进程被强制终止、候选变化和 lease 残留场景均能从原生记录恢复到正确的只读诊断；不会凭 checkpoint 自动继续任务、自动重试或自动解锁。

#### 13.138.6 P1：受约束的 `delivery_review` 重试提示

- 只提供父 Pi 可见的重新调用提示，不由 Package 自动发起重试。提示前至少核对：当前候选 digest 未变化、批准仍对应当前 Session/worktree、没有在途工具或未知 lease、上一子 Session 已持久化或已确认进程终止、旧审查正文不会被复用。
- 新一轮审查必须创建新的 tool call、子 Session、审查制品和候选快照；旧正文只能作为失败证据引用，不能合并成新的通过结论。
- 候选变化、lease 未交回、Session 未持久化、父回合仍在运行或工具终态未知时，只提示继续核对或人工恢复，不提示直接重试。
- 验收：覆盖可提示重试、不可提示重试、候选变化、旧正文复用、子 Session 未持久化和 lease 残留；不新增自动重试、回滚或权限放宽。

#### 13.138.7 实施顺序与预计影响文件

- 第一切片已完成的运行时文件：`extensions/delivery-gate/src/development.ts`、`src/subagents.ts`、`src/task-details.ts`、`src/progress.ts`、`src/policy.ts`、`index.ts`；对应范围、状态和 writer 恢复测试位于 `test/integration/development.test.ts`、`test/integration/extension-lifecycle.test.ts`、`test/unit/policy.test.ts`，原有状态投影测试同步更新。
- 第一切片状态：已完成。`delivery_develop`、`delivery_review` 和 `delivery_readonly` 均投影调用阶段；开发/审查原生结果携带 `executionFacts`，调用前拒绝保留阶段事实，正常开发/审查保留退出与持久化事实，子 Session 启动失败不伪造子进程关闭记录。审查候选变化、工具失败、父回合取消和 `SIGKILL` 继续按既有失败关闭规则处理。
- 第一切片最终验证：`npm run typecheck` 通过；`npm run test:unit` 为 **242/242**；`npm run test:integration` 为 **108/108**；`npm run test:e2e` 为 **16/16**；`git diff --check` 通过。真实 Pi/临时 Git 集成场景覆盖范围拒绝、正常开发/审查、候选变化、工具失败、父回合取消、子 `SIGKILL`、writer 交接和残留恢复。
- 第二切片：13.138.4，补充 cwd、工具和环境失败事实；预计涉及 `src/subagents.ts`、`src/development.ts`、`src/task-details.ts` 及真实 Pi 临时 Git 集成测试。
- 第三切片：13.138.5—13.138.6，实现 checkpoint 和受约束重试提示；复用原生 Session 记录和现有候选/lease/Session 核对，不增加独立 JSON 状态文件、任务树或调度器。

#### 13.138.8 明确不做

- 不自动从审查范围删除规划文档。
- 不自动重试 `delivery_review`、不自动重放开发写入、不自动回滚。
- 不自动解锁、删除 lease 或把退出命令变成强制重置。
- 不解析并修复目标项目的 Python、Docker、`PATH`、数据库、MinIO/S3 或依赖问题。
- 不新增 `strict` 模式、第二套任务树、独立 delivery receipt、后台 scheduler、操作系统级沙箱或通用权限系统。
- 不因一次真实试用中的 `alembic`、Docker 或 Provider 错误扩大 Package 的运行时职责。

#### 13.138.9 完成条件

- 非法审查范围能在一次调用内说明冲突路径和修正方式，且不会创建子 Session。
- 任何失败都能区分调用前校验、子 Agent 工具、子进程收尾、父结果落盘和 lease 交接阶段。
- 强制 `SIGKILL`、Provider 中断和 Session 未持久化均不会被当成审查通过；lease 恢复路径与 `/delivery-exit` 语义一致。
- `cwd`、工具失败、运行时长和有限环境诊断可供父 Pi 核对，但 Package 不修复目标项目运行环境。
- checkpoint 追加式、可从原生 Session 恢复、没有独立任务树；重试提示受候选、批准、Session、工具和 lease 证据约束。
- 所有新增行为通过 typecheck、相关 unit、integration、E2E 和真实 Pi/临时 Git 收尾验证；工作区、候选 digest、writer lease、operation lock 和审查制品生命周期均有最终证据。
- 本节完成前，当前真实试用中的 Python 3.12、PostgreSQL、MinIO/S3、Docker 和 Q1-C4 业务验收仍按目标项目台账记录，不得因 Package 状态投影优化而关闭。

#### 13.138.10 真实试用发现：异常审查后的解锁与父进程状态未复位

- 状态：已完成。已按本次真实试用复现实现最小恢复修复；本条不改变当前失败关闭规则，也不把异常审查正文标记为通过。
- 复现事实：最新一次亚马逊项目独立审查子 Session `01a0f0ca-019b-774b-aa22-e0f663f70ed8` 已完成主要检查并写入 `delivery-child-exit`，但最后一个模型消息仍为 `stopReason=toolUse`，没有正常持久的最终审查正文。Package 因此按“子 Session 正常持久收尾未证明”处理，保留 writer lease，未生成有效审查结论。
- 恢复事实：父 Session `01a0f097-983a-75cd-b91b-3c36bec356db` 随后执行 `/delivery-unlock`，对应 lease `be6d2050-9972-415b-94d8-59bedfef9430` 已从磁盘清理；但同一父 Pi 进程中的开发/审查运行状态仍保留失败后的 `active/fault` 状态。再次调用 `delivery_review` 时，Package 在创建新子 Session 前返回“交付 writer 尚未完成交接或已关闭”。因此出现了“磁盘 lease 已清理，但当前父进程仍拒绝新委派”的恢复状态不一致。
- 影响边界：本次重试没有启动新的审查子 Session，也没有写入项目台账；已取得的测试、环境和 Worker 证据仍可作为工程验证证据，但不能替代独立审查正文或父侧收口。
- 处理结果：已增加同一父进程内“子审查异常收尾 → 显式 `/delivery-unlock` → 再次 `delivery_review`”的真实 Pi/临时 Git 回归场景；仅在 worktree 与 lease ID 匹配、运行已 `finished` 且已有 `fault` 时复位已知终态，不自动重试、自动解锁、复用旧审查正文或绕过新的方案确认。
- 当前操作指引：父 Pi 空闲且磁盘 lease 已确认清理时，先核对 `/delivery-status details`；如果新版本的 `/delivery-unlock` 已报告复位同一父进程的已知失败运行态，且方案确认仍有效，可直接重新发起独立审查；如果仍保留交付状态，再用 `/delivery-exit` 结束当前运行态，重新 `/delivery-shape` 并确认方案。
- 实现：`createDevelopmentDelegator()` 增加 `reconcileAfterUnlock()`，仅当解锁成功清理的 lease 与当前父进程中同一 worktree、同一 lease ID、已 `finished` 且已有 `fault` 的运行态完全匹配时，才清除内存 `active`；不匹配、未知或仍在途时继续保留关闭状态。`/delivery-unlock` 审计记录 `inMemoryState=cleared` 和运行 ID，并向用户明确提示可重试或必须退出/重载；旧失败工具结果和审查事实仍保留在原生 Session。
- 验收：`npm run typecheck` 通过；真实 Pi/临时 Git 开发集成测试 **110/110** 通过，新增“审查子异常 → `/delivery-unlock` → 再次 `delivery_review`”和 lease ID 不匹配场景，分别确认可安全复位与继续保留 fault；`git diff --check` 通过。

### 13.139 npm `0.1.9` 发布

- 状态：已完成。`pi-adaptive-delivery@0.1.9` 已发布到 npm，`latest` 已指向 `0.1.9`；本次只发布 Package，不修改亚马逊项目。
- 源码与版本：发布提交为 `ad37da1`（`发布 0.1.9`），包含 `5777540` 的 13.138.1—13.138.3 第一切片；`package.json`、`package-lock.json` 已同步为 `0.1.9`。发布前已通过 manifest JSON、`npm run typecheck`、unit **242/242**、integration **108/108**、E2E **16/16**、`npm ls --depth=0`、`npm pack --dry-run --json` 和 `git diff --check`。
- 线上核验：发布时间为 `2026-09-29T09:27:49.856Z`；`npm view --prefer-online pi-adaptive-delivery version dist-tags.latest` 返回 `0.1.9`；tarball 为 `https://registry.npmjs.org/pi-adaptive-delivery/-/pi-adaptive-delivery-0.1.9.tgz`，shasum 为 `853fff7120a1a420b07d74c4880885e3f610d8c1`，integrity 为 `sha512-YjRmiCj+uxD44LWS7xKnf5sPW81VfvVCqK9l5Ryf+KntEKSHhvCG2jMV8XmXcaXPmiB4cYavnjwjZBpARSUm6g==`；直接下载线上 tarball 重新计算的 SHA-1 和 SHA-512 Base64 与 registry 完全一致。
- Git/发布状态：`ad37da1` 已推送到 `origin/main`；本次补充线上发布证据后，需单独提交并推送本台账变更。目标项目继续保持独立仓库的既有干净状态。

### 13.140 npm `0.1.10` 发布与线上核验

- 状态：已完成。`pi-adaptive-delivery@0.1.10` 已发布到 npm，`latest` 已指向 `0.1.10`；本次只发布 Package，不修改亚马逊目标项目。
- 源码与版本：恢复优化实现提交为 `22d2833`（`修复解锁后的父进程状态复位`），版本准备与发布台账提交为 `5a8dab3`（`准备发布 0.1.10`）；`package.json`、`package-lock.json`、README、技术方案和本台账已同步为 `0.1.10`。发布前 manifest、`npm run typecheck`、unit **242/242**、integration **110/110**、E2E **16/16**、`npm ls --depth=0`、`npm pack --dry-run --json` 和 `git diff --check` 均通过。
- 打包核对：预览包为 `pi-adaptive-delivery@0.1.10`，26 个文件，package size `388318` bytes，unpacked size `1126770` bytes，shasum `5ad4c42621df5d76c1b429eb37b6ce003f23bfcf`，integrity `sha512-2xXBuhRQq0wKJM5eWDfDMS/Di0tpgdedxqh3hrYiuznIDU4ObngPmcyNj1tpD/D8G13x5Zi0b2WrJhYM5Hiz2g==`。
- 线上核验：发布时间为 `2026-09-30T12:13:55.333Z`；`npm view --prefer-online pi-adaptive-delivery version dist-tags.latest` 返回 `0.1.10`、`latest=0.1.10`；tarball 为 `https://registry.npmjs.org/pi-adaptive-delivery/-/pi-adaptive-delivery-0.1.10.tgz`，registry shasum 为 `5ad4c42621df5d76c1b429eb37b6ce003f23bfcf`，integrity 为 `sha512-2xXBuhRQq0wKJM5eWDfDMS/Di0tpgdedxqh3hrYiuznIDU4ObngPmcyNj1tpD/D8G13x5Zi0b2WrJhYM5Hiz2g==`；直接下载线上 tarball 重新计算的 SHA-1 和 SHA-512 Base64 与 registry 完全一致。
- Git/发布状态：`5a8dab3` 已推送到 `origin/main`；npm 发布返回 `+ pi-adaptive-delivery@0.1.10`。发布后线上证据由本节补写并单独提交推送，目标项目继续保持独立仓库的既有干净状态。

### 13.141 适配 Pi `1.0.2` 的父子 CLI 运行环境

- 状态：实现与回归已完成；版本发布、线上核验和后续 Git 证据见第 13.142 节。目标是修复最新版 Pi 的 `ToolInfo` 元数据变化、父子环境摘要稳定性，以及父进程修改 PATH 后子 CLI 找不到的问题。
- 实现：`snapshotReadOnlyEnvironment()` 仅使用工具能力和来源相关字段计算摘要，对对象键排序并纳入 Pi `1.0.2` 的 `exposure`、`namespace`、`annotations` 元数据，避免字段顺序造成误差；`startChild()` 在标准 Pi 进程中优先复用 `process.argv[1]` 对应的当前 CLI 入口，并继续核验入口与 Node 解释器均在工作区外，只有没有可复用入口时才回退到 PATH 查找。Pi Package 的 peer dependency 按宿主提供约定保留为 `*`，开发依赖和锁文件统一到 `1.0.2`。
- 回归：`npm run typecheck` 通过；`npm run test:unit` **242/242**、`npm run test:integration` **110/110**、`npm run test:e2e` **16/16** 全部通过，零失败、取消或跳过；集成测试新增并通过 `path-changed` 场景，父进程隐藏 PATH 中的 `pi` 后仍由父 CLI 入口完成真实子任务。`npm ls @earendil-works/pi-coding-agent --depth=0`、系统 `/opt/homebrew/bin/pi --version` 和仓库 `node_modules/.bin/pi --version` 均核对为 `1.0.2`，`git diff --check` 通过。
- 文档与边界：README、技术方案和本台账首页已更新当前验证组合、`0.1.12` 版本和启动策略；历史 `0.87.0` 章节保留为历史证据，不代表当前基线。验证范围为本机 macOS、Node `25.2.1`、Pi `1.0.2` 及 fake provider/临时 Git；未宣称其他版本、平台、任意插件或真实模型质量兼容。只更新本仓库开发依赖，未安装到用户 Pi；推送和发布证据见第 13.142—13.143 节。
- 本地提交：用户明确要求“完整提交”，已将本节适配范围完整提交到本地 Git；版本准备提交为 `0d568f8`。

### 13.142 `0.1.11` 推送、npm 发布与线上核验

- 状态：已完成。Pi `1.0.2` 适配已推送到 `origin/main`，`pi-adaptive-delivery@0.1.11` 已发布到 npm，`latest` 已指向 `0.1.11`。
- Git：实现提交为 `9545324`（`fix: 适配 Pi 1.0.2 子任务运行环境`），版本准备提交为 `0d568f8`（`chore: 准备发布 0.1.11`）；`0d568f8` 已推送到 `origin/main`，推送后工作区无未提交改动。
- 发布前验证：`npm run typecheck`、此前完整 unit **242/242**、integration **110/110**、E2E **16/16**、生命周期最终定向 **22/22**、`npm pack --dry-run --ignore-scripts --json` 和 `git diff --check` 均通过；预览包包含 26 个文件，package size `389879` bytes，unpacked size `1131638` bytes。
- 线上核验：registry 返回 `latest=0.1.11`，发布时间为 `2026-10-05T03:27:09.732Z`；tarball 为 `https://registry.npmjs.org/pi-adaptive-delivery/-/pi-adaptive-delivery-0.1.11.tgz`，registry shasum 为 `9440b40d6fb840e7e5aaf7fee339f2c51d774da6`，integrity 为 `sha512-atseqJP2kITGzkl+ZiU/hCIsNi9A5DNXdoBYKVs+aWHGwn2K4jQxuqZlzmrTvh0silzHLl7a+hks3xAOGv3Vpw==`；直接下载的 389879 字节 tarball 重新计算 SHA-1 和 SHA-512 Base64 与 registry 完全一致。
- 发布边界：本次只推送当前 Package 并发布 npm `0.1.11`，未修改用户 Pi 配置、目标业务项目或生产环境；未创建 PR 或部署。

### 13.143 `0.1.12` npm 摘要、README 与线上核验

- 状态：已完成。`pi-adaptive-delivery@0.1.12` 已发布到 npm，`latest` 已指向 `0.1.12`；npm 顶部摘要和关键词、包内 README 均已按面向使用者的表达更新。
- 内容：`package.json.description` 更新为 `A Pi coding workflow that confirms the plan before changes, delegates complex tasks, runs checks, and supports independent review.`；关键词更新为 `pi`、`pi-coding-agent`、`approval-gated`、`code-review`、`subagents`、`developer-workflow`。README 重排为用途、五步流程、安装方式、权限边界、命令、恢复、兼容性和详细文档入口。
- Git：`cd656c8`（`docs: 优化 npm 描述和使用文档`）已推送到 `origin/main`；版本号、锁文件、README、技术方案和实施台账均已同步，发布前工作区干净。
- 发布前验证：`git diff --check`、`npm pack --dry-run --ignore-scripts --json` 通过；包包含 26 个文件，package size `387607` bytes，unpacked size `1124561` bytes。代码未改变，Pi `1.0.2` 的既有完整验证结果仍见第 13.141—13.142 节。
- 线上核验：registry 返回 `latest=0.1.12`，发布时间为 `2026-10-05T08:50:22.138Z`；tarball 为 `https://registry.npmjs.org/pi-adaptive-delivery/-/pi-adaptive-delivery-0.1.12.tgz`，registry shasum 为 `e0c23ec82bc417823d4a09db312befe768100f1f`，integrity 为 `sha512-5ZVdytUXAo+LJW6oP1vw8Lz7yfaHzLDq28E9mTBnCguUmqUOfS2dpP02KBM4J3+KPO7dM1/S2NXQZSTxNRvLnQ==`；直接下载的 387607 字节 tarball 重新计算 SHA-1 和 SHA-512 Base64 与 registry 完全一致。
- 发布边界：本次只更新当前 Package 的 npm 摘要、关键词和使用文档，未修改用户 Pi 配置、目标业务项目或生产环境；未创建 PR 或部署。

### 13.144 `0.1.13` README Mermaid 修复与线上核验

- 状态：已完成。修复 README 流程图中 `/delivery-shape` 和 `/delivery-exit` 被 Mermaid 误解析的问题；`pi-adaptive-delivery@0.1.13` 已发布到 npm，`latest` 已指向 `0.1.13`。
- 根因与修复：Mermaid flowchart 的 `B[/delivery-shape]`、`J[/delivery-exit]` 会把斜杠解释为特殊节点形状语法，导致 `Lexical error on line 2: Unrecognized text`。已将流程图节点统一改为带引号的标签，例如 `B["/delivery-shape"]` 和 `J["/delivery-exit"]`。
- 验证：使用本机 `mmdc` 实际渲染 README Mermaid 图通过；`git diff --check`、`npm pack --dry-run --ignore-scripts --json` 通过；预览包包含 26 个文件，package size `388250` bytes，unpacked size `1126405` bytes。
- Git：`c6e750f`（`fix: 修复 README 流程图渲染`）已推送到 `origin/main`，工作区在发布前干净。
- 线上核验：registry 返回 `latest=0.1.13`，发布时间为 `2026-10-05T09:10:19.444Z`；tarball 为 `https://registry.npmjs.org/pi-adaptive-delivery/-/pi-adaptive-delivery-0.1.13.tgz`，registry shasum 为 `af2ce534a5ed75dd39bc444474552306eb9bdc91`，integrity 为 `sha512-N5S8VnNTlOeaP6lwskxInfBUv/QnEA/FZRyJwzIt2KqNT0TcDCnQ5FF0zoFE3OVACC6fjrb43ZB/8j8F8UlRUw==`；直接下载的 388250 字节 tarball 重新计算 SHA-1 和 SHA-512 Base64 与 registry 完全一致，包内 README 已包含带引号的 Mermaid 节点。
- 发布边界：本次只修复 README 图表语法并发布新的 Package 版本，未修改运行代码、用户 Pi 配置、目标业务项目或生产环境；未创建 PR 或部署。

### 13.145 `0.1.14` 用户路径和交付提示优化

- 状态：已完成。目标是让用户先判断是否需要受控交付，减少小任务进入完整流程的负担，同时保留一次方案确认、范围内返工、检查证据和异常恢复机制。
- 用户路径：README 新增“先判断是否需要交付流程”，明确小改动、低风险、范围明确的任务可以继续使用普通 Pi；涉及多个文件、业务行为、接口、权限、迁移、复杂测试或独立检查时再使用 `/delivery-shape`。命令说明明确 `/delivery-plan` 和 `/delivery-run` 是手动推动/恢复入口，普通任务通常不需要主动输入。
- 交付提示：Skill、`delivery-plan`、`delivery-run` 和批准后的执行提示统一要求父 Pi 说明本次路径和理由，并固定交付四类结果：修改内容、实际检查命令及退出码、独立审查、限制和未执行项；未运行检查不得写成通过。状态页下一步改为用户可读的“提交给你确认”，不再直接显示内部 `delivery_approval`。
- 运行提示：进入交付后的通知明确这条流程适合需要范围确认、验收或独立审查的任务；小改动、低风险任务可以继续使用普通 Pi。没有改变工具、权限、writer、lease、子任务或恢复逻辑。
- 验证：`npm run typecheck`、`npm run test:unit` **242/242**、`npm run test:integration` **110/110**、`npm run test:e2e` **16/16**、`git diff --check` 和 `npm pack --dry-run --ignore-scripts --json` 均通过；本次只同步文案、提示和对应测试断言，未改变业务执行逻辑。
- Git：`878edd5`（`feat: 优化交付流程指引`）已推送到 `origin/main`，发布前工作区干净。
- 线上核验：registry 返回 `latest=0.1.14`，发布时间为 `2026-10-05T10:02:46.525Z`；tarball 为 `https://registry.npmjs.org/pi-adaptive-delivery/-/pi-adaptive-delivery-0.1.14.tgz`，registry shasum 为 `734b8add0e8aee4ec73f1e06adeaa84724530f2b`，integrity 为 `sha512-vgQ+MppreZ2ikiTCsvgy8CtXFujSU4YHmxxYOVJTZ3MrJOsKC1yudjcYTvCtkGMab5HlR8t3PxfcSR6bq7Ww3A==`；直接下载的 389459 字节 tarball 重新计算 SHA-1 和 SHA-512 Base64 与 registry 完全一致，包内 README 已包含优化后的用户路径和交付结果说明。
- 发布边界：本次只优化用户说明、父模型提示和状态文案，未修改用户 Pi 配置、目标业务项目或生产环境；未创建 PR 或部署。

### 13.146 文档工具与任务卡片的折叠态简化

- 状态：已完成。已发布 `pi-adaptive-delivery@0.1.15`，npm `latest` 已指向 `0.1.15`。目标是减少主记录中的实现参数和内部运行元数据，同时保留原生 Session 与展开详情中的完整证据。
- 文档工具展示：`delivery_document_edit` 和 `delivery_document_write` 使用 Pi 公开的 `renderCall/renderResult` 接口；折叠态显示文档操作、相对路径和变更数量，成功只显示已更新/写入结果，失败保留错误摘要，不在主卡片展开 `oldText`、`newText` 或完整返回正文。原始参数仍由 Pi Session 持久化。
- 任务卡片展示：折叠态只显示状态、开发/审查/只读类型、最多 40 个字符的任务名和当前动作；阶段、模型、推理级别、选择理由、耗时和原始子 Session 继续放在展开详情中，未改变任务状态、交接、lease 或证据投影逻辑。
- 实现文件：`extensions/delivery-gate/src/parent-writer.ts` 增加文档工具渲染器，`extensions/delivery-gate/index.ts` 注册到两个文档工具，`extensions/delivery-gate/src/progress.ts` 收窄任务卡片折叠态；`test/unit/parent-writer.test.ts` 和 `test/unit/progress.test.ts` 增加展示契约回归。
- 验证：`npm run typecheck`、目标单元测试 **42/42**、`npm run test:unit`（此前 **242/242**，本轮新增 1 项后为 **243/243**）、`npm run test:integration` **110/110**、`npm run test:e2e` **16/16** 和 `git diff --check` 均通过。验证使用本机 Pi `1.0.2`、临时 Git 和 fake provider；未据此扩展到其他 Pi 版本、平台、插件组合或真实模型质量。
- 发布核验：`npm view --prefer-online pi-adaptive-delivery version dist-tags.latest` 返回 `0.1.15`；tarball 为 `https://registry.npmjs.org/pi-adaptive-delivery/-/pi-adaptive-delivery-0.1.15.tgz`，shasum 为 `85f47bf22f2b638b98d944c66891da809da030b5`，integrity 为 `sha512-EhLNh9SZTXD14/Vh+aXO7RAtWrirLpUmlftdeEZqWcOgoF/N3KLnTZgs5K0IGUQ31WSp4YJtfG/V06PZ2LL24g==`；直接下载的 391294 字节 tarball 重新计算的 SHA-1 和 SHA-512 Base64 与 npm 发布值一致。
- Git 与发布边界：`97cd495`（`feat: 简化交付记录展示`）已推送到 `origin/main`；本次只修改 Package 的工具渲染和测试，未修改用户 Pi 配置、目标业务项目或生产环境；未创建 PR 或部署。

### 13.147 子 Pi 协议与事件异常的原始原因保留

- 状态：已完成限定修复与自动化验证。用户在截图诊断及模拟复现后授权修复；基线为 `main / 0b345cb`，开始时工作区干净。原现场缺失的触发事件无法补回，真实模型与用户活动会话复验仍未执行。
- 已确认事实：亚马逊项目审查子进程出现“子 Pi 协议或事件处理失败”后退出 143，模型最后停在 `toolUse`，原父会话保留 lease。模拟复现确认 JSON 解析失败、工具生命周期事件不符、扩展报错和事件回调抛错都会被合并成同一句错误；现有日志缺少原始事件，不能追溯该次触发来源。
- 最小修复：在现有 `ChildRpc.failure` 与委派记录中保留有界的原始原因和事件标识，扩展错误保留来源路径、事件及错误正文；父侧追加收尾核验错误时保留原始任务错误。只使用现有工具结果和 Session 记录，不新增状态文件、错误码表、自动重试或自动解锁。
- 验证安排：先运行协议/事件单元回归，再以真实 Pi SDK 父、标准 CLI 子、临时 Git 和 fake provider 注入扩展错误，核对父工具返回与持久记录、实际退出及 lease 保留；随后运行 typecheck 和受影响自动化回归。
- 协议与事件单元验证：`node --import tsx test/support/run-tests.ts --test-name-pattern='子 Pi .*异常保留|子 Pi 错误与事件标识' test/unit/subagents.test.ts` 在修复前 **0/5、退出 1**，五项均证实原始原因被统一错误覆盖；实现后运行完整 `test/unit/subagents.test.ts` **47/47、退出 0**，覆盖 JSON 解析、事件顺序、扩展来源/原始错误、回调异常、诊断长度与停止后继续拒绝调用。制品根分别为 `adaptive-tests-WEB0bK`、`adaptive-tests-gZ6EQt`。
- 真实 Pi/临时 Git 验证：`node --import tsx test/support/run-tests.ts --test-name-pattern='子扩展异常在父返回' test/integration/development.test.ts` **2/2、退出 0**，制品根 `adaptive-tests-G2uaRA`。开发与审查子通过真实 `tool_execution_end` 钩子抛错产生 RPC `extension_error`，父工具正文、`executionFacts.childProcessFailure`、磁盘父 Session 和审查委派终态均保留扩展来源、事件和原始错误；实际子进程退出 143 且 PID 已不存在，lease 保留并拒绝新委派。`npm run typecheck` **退出 0**。
- 全量回归：`npm run test:all` **退出 0**；unit **248/248**、integration **112/112**、E2E **16/16**，全部零失败、取消或跳过。统一日志 `/tmp/adaptive-rpc-cause-regression.T7ynmy`，三组制品根分别为 `adaptive-tests-rHwL1U`、`adaptive-tests-DTJgta`、`adaptive-tests-IPzVQn`。仅核对这三个测试根的 97 份夹具执行日志，158 个记录 PID 均已退出；故障测试预期保留的 lease 未强制清理。`git diff --check` **退出 0**。
- 交付与兼容性：修改 `subagents.ts`、`development.ts`、两份回归测试和 fake provider，同步 README、技术方案与本台账，共 8 个已有文件。工具参数、Session 字段和 writer/恢复规则保持；错误正文增加具体原因与关联标识，不迁移或回填旧日志。验证使用 Pi `1.0.2`、临时 Git、fake provider 和模拟父 TUI，未调用真实模型、修改目标业务项目/用户配置、清理活动 lease 或重载用户会话。未提交、推送、创建 PR、发布或部署。

### 13.148 解锁与方案审阅的交互说明优化

- 状态：已完成本地实现与自动化验证。用户在截图评审后授权优化；保留第 13.147 节全部未提交修复。本次重点是恢复路径中的操作含义、确认原因及方案阅读；尚未发布或在用户活动 TUI 加载复验。
- 最小方案：复用现有 `DeliveryPanel` 和 `DesignReviewPanel`，解锁使用明确的中文操作，归属证据放入可展开详情；方案正文优先显示，压缩固定说明、限制阅读宽度并增加正文空间；方案工具卡片折叠时只显示中文摘要。依据当前确认及原生记录说明为何需要确认，不推断范围未变，不恢复旧权限。
- 规模与边界：不新增文件、Schema、配置或状态机，不调整 lease 清理及批准核验规则，不自动解锁或重试；同步正文生成说明、设计事实源及 README。
- 验证安排：先核对窄屏、滚动、默认取消及卡片展开的单元回归，再以真实 Pi SDK、临时 Git 和 fake provider 验证取消解锁保留现场、明确选择才清理及恢复确认说明；随后运行 typecheck 和受影响回归。不操作用户活动会话，不提交或发布。
- 已验证独立事项：`node --import tsx test/support/run-tests.ts test/unit/delivery-ui.test.ts test/unit/approvals.test.ts` **39/39、退出 0**，制品根 `adaptive-tests-XuRiZB`；覆盖 20–240 列阅读、10–60 行终端、完整首尾和详情、默认暂停、两种 TUI 焦点、折叠/展开及生命周期后不恢复旧确认。`node --import tsx test/support/run-tests.ts --test-name-pattern='显式解锁后|lease ID 不匹配|重载后重新审阅' test/integration/development.test.ts` **3/3、退出 0**，制品根 `adaptive-tests-7Hb3CS`；真实 SDK 父/CLI 子验证默认回车与查看详情不清理，明确选择才清理并记审计，同 lease fault 复位后允许新审查，不匹配继续阻止；重载后只展示确认原因，暂停不恢复权限，新确认单独持久化。
- 检查过程：初次 `npm run typecheck` **退出 2**，新增结果渲染器未对公开 API 的 `unknown` details 作类型收窄；已按现有字段修正，未新增 Schema 或校验器，最终复验 **退出 0**。
- 文案与全量回归：已同步 README、技术方案、方案工具说明、交付 Skill 和 plan prompt，保留原正文与协议字段。`npm run test:all` **退出 0**，unit **251/251**、integration **113/113**、E2E **16/16**，共 **380** 项，零失败、取消或跳过。日志 `/tmp/adaptive-ui-regression.FxEdQx`，三组制品根为 `adaptive-tests-q2Szos`、`adaptive-tests-VqOvPG`、`adaptive-tests-wSq6Sr`；卡片通过真实 `ToolExecutionComponent` 核对折叠/展开。解锁详情最后去掉“一律退出交付”的旧提示后，单独复验 `--test-name-pattern='显式解锁后' test/integration/development.test.ts` **1/1、退出 0**（制品根 `adaptive-tests-m23f4R`）；最终 `git diff --check` **退出 0**。
- 实现与边界：本轮修改 `index.ts`、`ui.ts`、`approvals.ts`、正文生成说明、4 份测试/宿主文件及 README/设计/台账，共 12 个已有文件；与第 13.147 节合计工作区 16 个修改文件，没有新增文件。工具参数字段、Session 记录及 lease 清理/批准核验规则保持；提示、布局与默认取消操作更新，不提供旧 Pi 兼容层。
- 验证限制与交付：使用 Pi `1.0.2`、临时 Git、fake provider 和模拟父 TUI，覆盖真实 SDK 父、CLI 子以及两种 TUI 渲染器；没有调用真实模型，正文生成要求不等于真实模型已按要求输出。未做用户活动终端截图复验、修改用户配置或目标业务项目、清理活动 lease、安装或重载用户会话；未提交、推送、创建 PR、发布或部署。

### 13.149 两轮修复的完整 Git 提交与推送

- 状态：已完成代码提交与远端核验。用户明确要求“完整推送下”，授权将第 13.147 节的原始错误保留修复与第 13.148 节的 UI 优化、测试、正文生成说明及文档一并提交和推送。
- 提交前核对：工作区仅有上述 16 个已知修改文件，无额外未跟踪文件；`git diff --check` 和 `git diff --cached --check` 均退出 0。`git fetch origin main` 后，本地 `HEAD` 与 `origin/main` 均为 `0b345cb`，无冲突或分叉。复用第 13.148 节已核实的 typecheck 与全量 **380/380** 回归结果，本轮没有代码修改，不重复运行测试。
- 代码提交：`a453db22f42f6ee263616905f857e3d782fa6c7f`（`fix: 保留子 Pi 原始错误并优化交付交互`），包括全部 16 个文件，345 行新增、33 行删除。使用明确文件列表暂存，没有夹带用户配置、凭证或业务项目文件。
- 推送核验：`git push origin main` 退出 0，远端 `main` 从 `0b345cb` 前进到 `a453db2`；随后 `git ls-remote --exit-code origin refs/heads/main` 与 `git rev-parse HEAD` 都返回上述完整提交号，`git status --short --branch` 仅显示 `main...origin/main`，工作区干净。本节作为后续文档提交回写已核实的代码交付事实。
- 交付范围：第 13.147、13.148 节“未提交、推送”是各轮实现完成时的状态，本次已完成这两项 Git 动作。未创建 PR、npm publish、部署、修改用户 Pi 配置、重载活动会话或清理业务项目 lease；manifest 仍为 `0.1.15`。原始故障触发来源与活动 TUI/真实模型复验的限制继续保留。

### 13.150 npm `0.1.16` 发布

- 状态：已完成。`pi-adaptive-delivery@0.1.16` 已正式发布，线上 `version/latest` 与下载制品完整性均核对通过。用户明确要求“npm也推送下呢”，授权将第 13.147—13.148 节已推送的两轮修复发布到 npm；此前完整 Git 提交与推送授权继续适用于本次版本及发布台账。
- 版本准备（首次）：registry 已核验 `version=0.1.15`、`latest=0.1.15`，`0.1.16` 查询返回 404，尚未发布。将 `package.json` 和 lock root 版本同步为 `0.1.16`，同步 README、技术方案和本台账首页；该次只升包版本，不安装或更新依赖、不修改运行代码、不创建 tag。随后 Pi `1.1.0` 对齐与完整复验见第 13.151 节。
- 发布前验证（首次准备）：复用第 13.148 节完整 **380/380** 回归；升版后 `npm run typecheck`、manifest/lock 三处版本与开发依赖一致性检查、`git diff --check` 均退出 0。`node --import tsx test/support/run-tests.ts --test-name-pattern='manifest 只声明|npm tarball' test/unit/package-manifest.test.ts test/e2e/rpc-resource-discovery.test.ts` **2/2、退出 0**，制品根 `adaptive-tests-DGrV1f`，新版在无 node_modules 的临时目录通过真实 Pi CLI 加载并执行 fake provider 任务。`npm pack --dry-run --ignore-scripts --json` 预览 **26 个文件**，包含正式资源、LICENSE、README 和两份文档，不含测试、依赖安装目录、用户配置或临时制品；后续只补充本台账事实再冻结实际 tarball。
- 制品与 Git（首次准备）：基于 Pi `1.0.2` 冻结包 `/tmp/pi-adaptive-delivery-0.1.16.pl2MPJ/pi-adaptive-delivery-0.1.16.tgz`，397832 字节、26 个文件；逐文件与版本准备源码核对一致，SHA-1 `4ad92708720d2b888f67c2ba9a70ec60b611497f`，integrity `sha512-fs3r02KgbC1bJCvdnjUCkJf6vyEx86WZuRHyy9M4956Xe2QVd24jsgFBqZw8A+xB+pPhfOqc71GKYN7oRSHUdA==`。版本准备提交 `daf0a5a`（`chore: 准备发布 0.1.16`）已推送。用户随后指出 Pi 更新并要求继续，第 13.151 节先对齐 `1.1.0`；该旧 tarball 保留为历史制品，不用于本次最终发布，验证后重新打包。
- 当前发布前复验：第 13.152 节 **391/391** 完整回归、typecheck 和实际制品真实 CLI 加载 **1/1** 已通过；包含 Pi `1.1.0` 对齐、原始错误保留、UI 优化及动态工具启动修复的实现提交 `378b3d10d64f1ef7d3fc76252096dfc91c7184c3` 已推送并核对远端一致。以下两份旧 tarball 仅保留历史证据；最终发布只使用本节最新制品。
- 初次 Pi `1.1.0` 制品（第 13.152 节追加修复前）：`/tmp/pi-adaptive-delivery-0.1.16-pi110.mN1GeK/pi-adaptive-delivery-0.1.16.tgz`，**400029 字节、26 个文件**，unpacked size `1161396`；全部文件逐字节与干净的 `3275909` 源码一致，不含测试、node_modules、用户配置或临时制品。SHA-1 `f4d5ff9ab266fc2b5ed23c161ae42812ae876fe3`，integrity `sha512-tOpeQlUqYlgAI8C/ZnCzL8pFezOz8pep58vNBo4aRychPOloQa/o38f5pAZ+8z4iCsYL8vuLgnzrkwROJVvkzg==`，均重新计算核对。针对这份实际 tarball 的 `npm publish --dry-run --ignore-scripts --access public --registry=https://registry.npmjs.org/ --json` 退出 0；元数据与 dry-run 结果保存在同一临时目录。本条及后续认证/发布证据写在冻结之后，不改变已核对制品。
- 最终制品：`/tmp/pi-adaptive-delivery-0.1.16-dynamic.f4YWfw/pi-adaptive-delivery-0.1.16.tgz`，**402610 字节、26 个文件**，unpacked size `1168464`；全部文件逐字节与干净的 `378b3d1` 源码一致，不含测试、node_modules、用户配置或临时制品。SHA-1 `2207f452fa9216b8e84cc745bd231d03f82eb5c5`，integrity `sha512-DQNUHlkL94eA5Ir//4RIZhmINS1/H6P5NdMF9ID+uRMEcGtODVXaqnALaHx7wAGjdX1kYFoTkKakAI5mzzfkVA==`。针对这份实际 tarball 的 publish dry-run 退出 0；在隔离沙箱中从该制品解包、无 node_modules 加载并真实执行动态工具委派 **1/1、退出 0**，根 `adaptive-tests-uu1XE6`，四工具替身均执行、子 PID 已退出；fake provider 不证明真实网页/模型质量。元数据、源引用、dry-run 和实际制品加载日志同在临时目录。本条为冻结后证据，不改变 tarball。
- 认证与发布过程（已结束）：旧网页登录进入 `Username:`，npm PID `5184` 已结束，退出 1；新版制品目录的官方 `npm login --auth-type=web --registry=https://registry.npmjs.org/ --browser=false` 已 **退出 0**，`npm whoami` 成功。首次非交互实际 publish 返回 **EOTP、退出 1**，账号登录与发布二次验证分开。核对官方 npm `otplease` 契约后，使用真实 PTY 的官方 CLI（`--browser=false`，普通输出）取得发布网页验证入口；该等待后因官方验证入口过期返回 **E404、退出 1**，原链接不再有效。公开 registry `version/latest` 仍为 `0.1.15`，需重新发起官方 CLI 的发布验证；使用同一已核验 tarball 的 npm PID `20206` 验证等待也返回 E404、退出 1；用户反馈“好了”后，`npm whoami` 仍成功，于 `06:53 UTC` 重新启动官方普通输出 PTY，npm PID `20636` 取得新发布验证入口。账号持有人完成验证后，CLI 于 `06:54:51 UTC` 返回 `+ pi-adaptive-delivery@0.1.16`，**退出 0**，同时提示包正在处理。旧链接不再使用，发布验证入口仅提供给用户、未写入仓库。JSON 输出会缓冲验证入口，已停止该等待并切换普通输出；本机 `script` 不能直接承接管道 stdin，改用 PATH 的 `python3` 标准库分配 PTY。只在临时目录处理 CLI，不读取、复制或索取 token/一次性密码，不修改账号验证方式，不把验证链接写入仓库。
- 正式发布与线上核验：npm 已接受发布，首次 `node .../verify-registry.mjs` 读取版本索引返回 E404；fresh npm cache 和 HTTPS `Cache-Control: no-cache` / 查询参数复验当时仍为 `latest=0.1.15`，未把 CLI 成功提前写成线上核验完成、未再次发布。随后官方版本时间为 `2026-10-08T07:02:01.924Z`；`07:05 UTC` HTTPS 下载 **402610 字节** tarball 与冻结制品逐字节一致。`07:06:22 UTC` 官方 `npm view` 和 `npm pack pi-adaptive-delivery@0.1.16 --ignore-scripts` 再验证 **version/latest 均为 `0.1.16`、26 个文件**，线上 SHA-1 `2207f452fa9216b8e84cc745bd231d03f82eb5c5`、SHA-512 integrity 与本节最终制品完全相同。实际下载与 metadata 证据保存在最终制品目录的 `registry-download/download-verification.json`、`registry-verification.json`；发布日志 `npm-publish-confirm.log` 和退出记录 `npm-publish-confirm.exit=0` 同目录。已核验制品仍对应 `378b3d1`，后续仅补台账，不重新打包或重发。
- 边界：只发布当前 Package；不调用真实模型、不修改亚马逊项目、用户 Pi 配置或活动 lease，不安装或重载活动会话，不创建 PR 或部署其他内容。

### 13.151 Pi `1.1.0` 对齐与发布前复验

- 状态：已完成 Pi `1.1.0` 对齐、完整复验及实现推送；最终制品和 npm 认证/发布进展见第 13.150 节。用户指出 Pi 更新后要求“继续”，在 npm 发布目标内对齐最新 SDK；Git 推送与 npm 发布授权继续有效。开始时 `main / ab7dfc3` 与远端同步、工作区干净。
- 起始版本：npm registry 的 Pi coding-agent `latest=1.1.0`，四个 Pi SDK 包均已发布 `1.1.0`；本机 `/opt/homebrew/bin/pi` 为 `1.1.0`，升级前仓库 CLI 和四个开发依赖为 `1.0.2`。Node 要求继续为 `>=22.19.0`，当前 Node `25.2.1`。
- 官方契约核对：新版公开 Extensions 文档明确 `agent_before_settle` 是可追加内容及请求后续回合的最后边界，`agent_settled` 仅通知。升级前方案批准的自动衔接在 `agent_settled` 中发送消息，据此适配自然收尾的衔接；lease 收尾与通知类处理继续按原证据验证，不新增状态机或旧版本回退。
- 最小实现：四个 Pi 开发依赖与 lock 已对齐 `1.1.0`，`npm ci --ignore-scripts --no-audit --no-fund` 退出 0，本地 CLI 已核对为 `1.1.0`；保留 peer `*` 与其他根依赖。方案自动衔接改在 `agent_before_settle` 返回追加的原生 `custom_message` 条目与 `continue: true`，保留前序扩展条目；同一批准只衔接一次，错误、取消、用户排队或非父 TUI 不触发。最终 `agent_settled` 不再请求该衔接。测试终端补齐新增 `setProgramStatus()`，SDK 诊断使用公开 `VERSION`，不硬编码旧版本。没有新增文件、Schema、兼容层或状态机；发布版本仍为尚未发布的 `0.1.16`。
- 已验证事项：`npm run typecheck` 退出 0；生命周期/批准目标回归 **7/7、退出 0**，根 `adaptive-tests-Uf2qGG`，真实 SDK 证明全部衔接完成后只通知一次 settled，实施说明只持久化一次、父修改与检查仍执行；新增真实 SDK 停顿恢复 **1/1、退出 0**，根 `adaptive-tests-5cgNdv`，按公开 `sendMessage` 在已中断回合之后开启新回合，通知序列为 `aborted=true / false`、请求恰好两次、恢复说明只落盘一次。该恢复属于另开回合，不迁入自然收尾边界，现有实现保留。
- 失败及处理：升级后首次 typecheck 因两处测试终端缺 `setProgramStatus` 失败，补齐替身后通过；先添加真实 SDK 回归，旧方案衔接产生两次提前/最终 settled（`[2, 3]`），证明确需适配。首轮混合回归 **89/90**，新增持久条目核验失败：实现错误地用追加前的 `context.canContinue` 阻止衔接。追加实施说明本身会产生可续跑上下文，移除该前置判断后上述 **7/7** 复验通过；原失败不计为通过。
- 完整回归：`npm run test:all` **385/385、退出 0**，其中 unit **255/255**、integration **114/114**、E2E **16/16**，全部零失败、取消或跳过；日志 `/tmp/adaptive-pi-110-regression.aemCuz/test-all.log`、退出记录 `/tmp/adaptive-pi-110-regression.aemCuz/exit`，根依次为 `adaptive-tests-ViZQH9`、`adaptive-tests-aua7LC`、`adaptive-tests-EBtd3j`。覆盖真实 SDK/CLI、临时 Git、父子工具/环境握手、取消/reload、writer 交接及 npm tarball 冷加载。
- 版本与差异：manifest/lock root 三处版本均为 `0.1.16`，四个 Pi 根开发依赖和已安装版本均为 `1.1.0`；锁文件 150 个节点，仅 8 个 `@earendil-works/*` 节点变化，没有增删节点，其他根依赖与 peer `*` 保持。`npm run typecheck`、一致性脚本、`git diff --check` 均退出 0。测试终端和模型是替身，不读取用户凭证、调用真实模型或修改用户配置/业务项目/活动 lease；没有扩大到其他 Pi 版本、平台、任意插件组合或用户活动终端体验的支持结论。
- 附加核对：扫描三处完整回归根的 337 份 JSONL，从真实 `delivery-child-exit` 记录取得 43 个子 PID，均已退出；只核对本轮临时测试，不扫描或终止用户活动会话。
- Git 与交付：这 10 个已有文件以 `327590965cd5efb497ff6906ad229d187a750a5a`（`fix: 对齐 Pi 1.1.0 并修正方案实施衔接`）提交并推送，`git ls-remote origin refs/heads/main` 与本地 HEAD 完全一致，提交后工作区干净。新版 `0.1.16` 已重新冻结，逐文件比对与 publish dry-run 通过；制品哈希与 npm 认证断点见第 13.150 节，实际发布尚未执行。没有创建 PR、部署、安装或重载用户活动会话。

### 13.152 动态网页工具的子启动选择恢复

- 状态：已完成修复、验证、提交推送和重新打包，npm 已正式发布并核验，见第 13.150 节。用户提供亚马逊项目再次阻塞的截图并要求“继续”，在当前 Package 修复与 `0.1.16` 发布目标内处理；不修改业务项目、已安装 `pi-web-access`、用户配置或活动会话。开始时 `main / 58e7949` 与远端同步，工作区干净。
- 现场事实：父原生 Session 第 1712 行记录 `delivery_develop` 因子缺少 `fetch_content`、`get_search_content`、`source_check`、`web_search` 拒绝发送，无额外启用或定义/来源差异；失败子 Session ID 为 `01a1199d-f47b-738c-a08a-491c6b071628`，未发送任务、已取得收尾证明。只读核对业务项目 lease 目录为空，Git 仅有原专项台账改动。没有据此认定开发、测试或审查已完成。
- 机制核对：已安装 `pi-web-access/tool-activation.ts` 的 `session_start` 会按原生工具声明恢复旧会话，但新动态会话会关闭四个实际网页工具；此动作可覆盖子 CLI 的 `--tools` 初始选择。修复前 Package 只传 CLI 选择后立即比较当前启用集合，未在插件启动后再次承接父选择。退出重入的通用提示没有验证能消除这类动态差异。
- 修复实现：复用既有内部 READY 请求携带父本轮明确选择的工具名，在所有子启动钩子结束后通过公开 `pi.setActiveTools()` 承接该列表，再按原有完整工具定义/来源、规则、Skills、模型和 Session 核验发送任务。未请求工具不启用；实际未注册、配置禁用或定义/来源不符仍不发送；普通权限钩子继续生效。没有新增配置、持久 Schema、兼容层、插件别名表或新文件。
- 复现与处理：新增真实 CLI 回归在修复前 **0/1**，重现与现场完全相同的四工具缺失、无额外/定义差异和未发送任务。修复后单元、真实只读及规则/Skills/定义/权限边界均通过；第一轮 **9/10** 的唯一失败是旧 `missing-tools` 字面断言，夹具已改为真正未注册的 `fixture_unavailable`，修正断言后仍验证任务不发送。第二轮 **12/14** 的两项失败是新测试误把单个工具拒绝当作整个子 Agent 异常；改为核对既有 `executionFacts.toolErrors` 和零实际执行，未改产品终态语义。
- 已验证：`npm run typecheck` 退出 0；单元及真实只读、实际缺失、配置与来源边界的通过证据见 `adaptive-tests-gQwBDM`；开发/审查动态工具和拒绝钩子 **4/4、退出 0**，根 `adaptive-tests-6EntJj`。允许路径四个替身均执行，拒绝路径零替身执行且失败事实保留；子 PID 已退出、writer 清理、源码基线保持。使用 fake provider，不调用真实搜索、抓取或模型。
- 完整验证：`npm run test:all` **391/391、退出 0**，unit **256/256**、integration **119/119**、E2E **16/16**，全部零失败、取消、跳过。日志 `/tmp/adaptive-dynamic-tools-regression.QNOK7S/test-all.log`，退出记录同目录 `exit=0`；隔离根依次为 `adaptive-tests-IB9nna`、`adaptive-tests-yPFg2Z`、`adaptive-tests-sCBQUq`。README、技术方案和 Skill 同步启动后承接语义；工具缺口提示补充真实注册/配置原因，文案定稿后 typecheck 与相关单元 **2/2**（根 `adaptive-tests-tTHTYy`）及 `git diff --check` 通过；核对完整回归根的 **352** 份 JSONL，**48** 个 `delivery-child-exit` 记录 PID 均已退出。
- 兼容性与断点：内部 READY 参数改为 `{ id, tools }`，父子使用同一新版扩展，不增加旧协议兼容；实际业务父会话须在空闲且收尾核对后加载新扩展、重新确认本次方案，未操作其活动会话；初次验收基于隔离环境，后续只读核对见末项。未修改业务项目、已安装网页插件或用户配置，本 Agent 没有调用真实网页或模型。
- Git 与制品：本节 11 个已有文件以 `378b3d10d64f1ef7d3fc76252096dfc91c7184c3`（`fix: 在子启动后承接父会话工具选择`）提交并推送，远端一致，提交后工作区干净。新的 `0.1.16` 制品逐文件比较、哈希、实际 publish dry-run 和真实 CLI 加载均通过，路径及正式发布结果见第 13.150 节。两份旧 tarball 不用于最终发布；后续仅补本台账，不改变已验证制品。
- 业务会话后续验证：重载后 `2026-10-08T06:10:09.167Z` 的新失败明确为“本轮没有有效的方案实施确认”，没有创建子 Session；这符合确认不从旧记录恢复的现有规则。重新确认后，开发子于 `06:12:07.136Z` 启动，`06:30:42.600Z` 原生 `delivery_develop` 结果 `isError=false`，模型 `stop`、退出码 0、无在途工具、Session 已持久化，业务 lease 为空。真实 `delivery-child-ready` 包含 `fetch_content/get_search_content/source_check/web_enable/web_search`，唯一 `delivery-child-exit` 的 PID `18401` 已退出，取得当前已安装网页插件组合的实际握手与收尾证据。子会话报告 304 项自检通过；本 Agent 未复跑其业务检查或执行独立审查，没有据此宣布业务交付通过，也未修改业务项目。
- 截图核对（后续执行前）：`pi-clipboard-ee17228e-9364-45e6-9383-c114bfe6e3c1.png` 仍展示修复前同一失败，父 Session 最新委派还是 `2026-10-08T03:45:44.896Z` 的原调用，没有修复后委派记录；业务 lease 仍为空。项目 `pi list` 确认本地 Package 指向 `/Users/sxie/xbk/pi-adaptive-delivery`，原生读 Skill 路径也指向本仓库。说明在空闲且收尾核对后的父 Pi `/reload` 加载新代码，再重新确认原方案并委派；无当前占用不要求解锁。图中的旧恢复提示未区分动态工具重置与父工具停用，不能将重复退出重入当作根因修复。没有执行用户活动会话的重载，也未据此声称业务回归或审查完成。

### 13.153 对外命令收敛为两个入口

- 状态：已完成实现与自动化验证。用户接受精简命令并进一步提出删除 `/delivery-exit`，当前实现只有两个入口：`/delivery-shape` 进入；`/delivery-status` 查看状态、任务详情，按明确选择解除占用或结束交付。规划、实施和恢复使用普通对话中的“继续”等意图，不新增自然语言分类器。
- 最小方案：复用现有状态、任务详情、解除占用面板及退出检查；将退出动作留在命令上下文中执行公开 `reload()`，恢复进入前工具选择。删除其余六个对外命令及 plan/run 提示模板，不保留别名、不新增配置或持久状态。
- 批准与恢复：每轮提示真实的当前方案确认状态，历史提案、进度和证据供恢复取证；旧确认仍不自动恢复。未知终态保持关闭；解除占用仍需明确选择，结束交付继续核验空闲、原执行交接、lease 和操作锁，不凭模型声称完成自动退出。
- 验证安排：单元核对两个命令、默认关闭、明确结束、忙碌拒绝和原工具恢复；真实 SDK/CLI、临时 Git、fake provider 核对任务详情、解除占用及审计、未知 writer 拒绝、自然语言恢复后重新确认与冷加载资源。先最小验证，再按受影响范围运行回归。
- 已验证：`npm run typecheck` 退出 0；六组受影响单元测试 **114/114、退出 0**，隔离根 `adaptive-tests-6Tn2Ym`，覆盖两个命令补全、状态查看不退出、明确结束仍拒绝忙碌/排队/未知 writer、原工具恢复、批准和原协议边界。
- 真实 Pi 定向验证：`--test-name-pattern='状态面板默认|复杂开发由|显式解锁后|lease ID 不匹配|真实 SDK 退出|未启用交付时|无规划文档|暂停后|真实 Pi 在方案批准'` 的开发与文档集成 **12/12、退出 0**，隔离根 `adaptive-tests-XeBdO9`。验证默认回车/详情不退出、状态面板打开已结束开发任务、解除占用默认取消和明确审计、同 lease fault 复位、不匹配保持关闭、损坏记录/操作锁阻止结束、原工具恢复、自然语言暂停/reload/重开后新提案及确认。fake provider 按脚本发工具，不证明自然语言理解质量或用户桌面观感。
- 完整回归：`npm run test:all` **393/393、退出 0**，unit **258/258**、integration **119/119**、E2E **16/16**，零失败、取消或跳过。日志 `/tmp/adaptive-command-simplification.RbOWOe/test-all.log`，退出记录同目录 `exit.json`；隔离根依次为 `adaptive-tests-33c2iY`、`adaptive-tests-5WbQd6`、`adaptive-tests-g3G68n`。真实 CLI 进入前后与无 node_modules 的实际 tarball 冷加载均只发现两个交付命令，制品不含 prompts；非 TUI 状态查询不产生结束记录或新批准。未运行真实模型或用户活动终端。
- 示例同步与收尾：`test/demo/full-flow.test.ts` 已通过状态面板完成查看任务、残留占用阻止结束、明确解除占用及结束恢复原工具，**1/1、退出 0**，隔离根 `adaptive-tests-ar31gk`；demo 的改动前检查按预期失败，改动后检查通过，fake 审查只证明机制不构成真实审查结论。两份真实模型 demo 改用普通对话继续，PTY 驱动器改为在状态面板逐键核对并选择操作；最终 `npm run typecheck` 与 Python AST 语法检查通过，未运行真实模型或真机 PTY。全量回归与 demo 的四个隔离根共 **357 份 JSONL、51 条退出记录、50 个不同子 PID**，审计时全部已退出；`git diff --check` 通过。
- 交付状态：入口、状态面板、事实文档、测试及示例同步已完成；本轮未新增状态文件、配置、旧命令兼容层或自然语言分类器。未修改业务项目、用户配置或活动会话；未提交、推送、创建 PR、发布或部署。

### 13.154 两个入口的 README 完整使用路径核对

- 状态：已完成。用户询问 README 是否需要完整修改、交互过程是否全部改变；按第 13.153 节已授权的配套文档范围完成核对，核心仍是讨论、一次方案确认、实施检查、按需审查和交付，用户操作集中到普通对话与状态面板。
- 已确认遗漏：README 顶部两张 PNG 仍展示旧“两次确认”，流程图仍列旧退出、任务及解锁命令；正文没有清楚区分本地新交互与已发布 npm `0.1.16`。默认回车与 Esc 的说明也需按当前组件的实际焦点和输入状态明确。
- 处理结果：README 按进入、意见、确认、暂停、继续、任务查看、占用处理和结束完整说明，前置两个命令并补上普通对话示例；移除误导旧 PNG 的引用，沿用并更新 Mermaid。版本与安装说明明确本地新交互尚未提交/发布，npm 安装和新 clone 不包含本轮未提交修改。说明方案面板默认“稍后再看”，状态面板默认“关闭”，以及意见输入与正文状态不同的 Esc 行为；明确普通继续不产生批准，非 TUI 只查询。技术方案同步 `Ctrl+O` 详情、一次确认及范围内调整规则。
- 验证结果：逐项对照 `activation.ts`、`index.ts`、`approvals.ts` 和 `ui.ts`；README 六个本地链接目标均存在、章节锚点已核对，只引用 `/delivery-shape` 与 `/delivery-status`，不含旧 `status details`、两次确认或旧 PNG 引用。`git diff --check` 首次发现本节末尾多一个空行，删除后复验通过、退出 0；代码回归未重复运行，第 13.153 节的 393 项仍为上一轮实际执行记录。
- 边界：本轮仅修改 README、技术方案和本台账，旧 PNG 及历史记录保留，不改运行代码、包版本或兼容性。未操作活动会话、真实模型、Git 提交/推送/PR 或 npm 发布。

### 13.155 本机压缩插件的 system 消息修复

- 状态：已完成。本机 `@lll9p/pi-better-compaction@0.6.0` 的 `src/serializer.ts`、`src/types.ts`、`src/extension-runtime.ts` 已应用修复并通过实际安装复验，宿主为 Pi `1.1.0`。本轮仓库只增加本节记录，保留已有两个交付入口的未提交改动；不新增运行依赖、配置面或持久格式。
- 根因：业务父 Session 记录 `session_before_compact` 的 `Cannot read properties of undefined (reading 'split')`，来源为该插件；实际子记录经公开 `buildSessionContext()` 得到 325 条消息，其中一条 `system` 含七个命名段落。旧插件仅识别 user/assistant，其余按 toolResult 处理，在原第 417 行读取不存在的 `toolCallId`。原始会话与单条 system 最小例均本地复现，不调用模型。
- 系统规则与编号修复：显式处理 system，使用 Pi 公开 `getSystemMessageText()` 保留初始正文和命名段落、`renderSystemMessageUpdate()` 保留后续更新与删除，沿用 system/developer 角色及 Unicode 净化。初始 system 不占普通消息编号，后续更新继续计数，无签名 assistant ID 使用 Pi `1.1.0` 的 `msg_pi_` 前缀，消除真实 SDK 重放测试发现的 `expected-pi-replay-mismatch`；不丢弃规则、不放宽请求对应核对、不吞异常。
- 公开 API 与类型修复：两处会话恢复改用公开 `buildSessionContext(ctx.sessionManager.getEntries(), ctx.sessionManager.getLeafId())`，移除对只读扩展上下文未公开方法的调用。请求重放在已完成运行环境解析后处理缺失 payload，避免把无请求体送入重写。flatMap 明确消息块元素类型，既有记录守卫保留原检查顺序；已验证原生记录的 details 设为必需，ArtifactContext 明确可用元数据。没有新增重复验证、兼容回退或第二份状态。
- 历史定位与验证：最初测试宿主缺少 ESM 标记，修正后补丁前 **1/9 通过、8 个 system 用例同错失败**，初始补丁后 **9/9**，补充钩子后隔离及安装各 **11/11**；首轮真实 SDK 压缩 **2/2**。期间 V1 替身输出形状、Session 过短及测试规则注入方式已分别修正。这批 `/tmp/pi-better-compaction-fix.zM6JCv` 目录后来已不存在，保留当时结果，当前证据与备份以下述新目录为准。
- 当前备份与证据：`/Users/sxie/.pi/agent/artifacts/pi-better-compaction-fix.1FBdgw` 保存本轮继续修复前的三份文件备份（serializer 已含初始 system 补丁）、源码副本、测试、日志与退出记录。三份安装文件均与已验证副本逐字节相同，SHA-256 及类型诊断比较保存于 `type-comparison.json`；不是未修复 npm 原版的完整备份。
- 当前功能验证：隔离副本及实际安装各 **14/14、退出 0**，日志 `isolated-unit.log`、`installed-unit.log`。覆盖完整 system 正文/段落/删除、初始与后续编号、Unicode、thinking 签名、工具配对与合成返回、记录守卫的有效值和损坏值，以及真实 Pi/临时 Git 持久 Session。原始失败会话七段规则及 **230 个工具返回**全部保留，原始文件与内存消息未修改。
- 当前 SDK 集成：隔离及实际安装各 **2/2、退出 0**，日志 `isolated-sdk.log`、`installed-sdk.log`。真实 `createAgentSession`/临时 Git 分别验证 V1/V2 压缩、`fromHook: true` 持久记录、原生窗口请求重放、缺失 payload 无异常及允许连续性重建时从普通检查点恢复原生压缩。重放初次因初始 system 改变消息编号失败，证据 `sdk-replay.initial.log` 及对应 debug 记录；对照 Pi `1.1.0` 序列化规则修正后通过，保留严格对应核对。模型与两种压缩客户端均为替身，auth/models 为测试自己的空文件，无真实模型或压缩服务调用。
- 当前类型与加载验证：定向、完整入口及实际安装完整入口严格 tsc 均 **退出 0**。完整入口对本轮继续修复前同一源码/同一选项比较为 **21 → 0**，覆盖最初剩余 10 个类型错误及扩展入口另发现的 11 个错误，证据 `type-comparison.json`；日志 `types-targeted.log`、`types-package.log`、`installed-types-package.log`。安装检查通过宿主 SDK 依赖解析，未修改全局依赖。公开 `DefaultResourceLoader` 使用默认加载方式冷加载实际 `index.ts`，**1 个扩展、零错误、Pi 1.1.0**，证据 `installed-cold-load.json`；未创建模型请求。
- 交付边界：版本保持 `0.6.0`，属于本机补丁，npm 更新或重装可能覆盖。现有进程需重载后使用新源码。本轮未重载活动会话、修改用户配置或业务代码、解除业务占用、提交、推送、创建 PR 或发布；业务任务恢复、真实服务压缩及真实桌面验收仍未执行。

### 13.156 两个入口与插件修复补丁完整提交推送

- 状态：已完成。用户明确要求“完整推送”，本轮全部已验证改动已提交并推送到 `small-xiexu/pi-adaptive-delivery` 的 `origin/main`；未执行 npm 发布、PR、部署或向第三方上游发送消息。
- 范围：第 13.153 节的两个入口、状态面板、普通对话恢复、受影响测试与示例，第 13.154 节完整 README 和技术说明，以及第 13.155 节插件修复记录。当前仓库已有改动均属于这些事项，没有整理或回退其他用户文件。
- 第三方补丁：本机 npm 安装目录不受本仓库 Git 管理，将已验证修复保存为 `docs/patches/pi-better-compaction-0.6.0-pi-1.1.0.patch`，附 `docs/插件兼容修复.md` 的适用版本、手动应用、验证及上游 MIT 声明。补丁基于 npm 官方原版 `0.6.0` tarball，SHA-512 integrity 匹配；三份原文件通过 `git apply --check`，应用后的文件与已验证本机安装逐字节一致，证据 `pi-better-compaction-fix.1FBdgw/patch-verification.json`。不提交用户 Session、凭证、Provider 配置或私有测试目录，不把第三方插件放入运行依赖。
- 文档同步：README 明确 Git `main` 包含两个入口、新 clone 可以使用，npm `0.1.16` 仍是此前发布代码；添加插件兼容修复说明入口。第 13.153—13.155 节保留当时未提交/未发布边界，本节记录后续提交推送结果。manifest 版本保持 `0.1.16`。
- 取证与验证：已读取仓库规则并核对分支、状态、差异和暂存区；`git fetch origin main` 成功，整理前 `HEAD...origin/main` 为 `0/0`，基线 `e871978`。当前 `npm run typecheck` 退出 0；manifest 单元 **1/1、退出 0**，根 `adaptive-tests-Gh8t33`；真实 CLI 两命令/RPC 状态与无 node_modules 实际 tarball 冷加载 **2/2、退出 0**，根 `adaptive-tests-GtfD3j`，制品 23 文件，fake provider，无真实模型。两份新增/更新文档的 **9 个本地链接**均存在，README 无推送前描述。运行代码与第 13.153 节 **393/393** 的已验证实现相同，完整回归未重复执行。
- 暂存复核：共 36 个任务范围文件，无额外用户文件。首次全量 `git diff --cached --check` 退出 2，原因全部是 `.patch` 的标准统一 diff 上下文前缀（空格后接 tab 或单个空格），不是修改源码的空白错误。常规代码/文档使用默认规则通过；仅该补丁在单次命令中关闭这两项格式误判后通过，并已有原版应用检查和逐字节比较。没有新增仓库/用户 Git 配置或改坏补丁上下文。
- Git 结果：本轮 36 文件以 `1e639f8491794b32a9b97924204a63c80b156007`（`feat: 收敛交付入口并归档压缩插件兼容修复`）提交，`git push origin main` 退出 0。随后直接查询 `origin refs/heads/main`，远端 SHA 与本地主体提交一致，查询时工作区干净、`main...origin/main` 一致。本节完成记录作为同一授权范围的收尾文档提交继续推送；第 13.153—13.155 节的“未提交”表述保留历史语境。测试 RPC PID `7039/7092` 均已退出。

### 13.157 继续恢复与轻量状态面板优化（已完成）

- 目标：让用户表达“继续”即可进入残留核对；状态正文只显示阶段、下一步和运行中任务，lease、PID、Session、执行路径和收尾诊断放入 `Ctrl+O` 详情；状态面板只在满足结束条件时提供“结束交付”，不提供任务选择或手动解锁。
- 实现：`delivery_develop`、`delivery_review` 在本轮方案批准核验后调用 `recoverResidual()`；同一 workspace、owner、Session、执行 ID 和 lease ID 均匹配，且原生工具结果唯一落盘、子进程/工具终态和 Session 收尾已经验证的已知 fault，才自动清理同一 lease/操作锁并记录 `delivery-unlock` 的 `recovery: "automatic"`。未知残留仍只显示一次“恢复交付”，提供“清理残留并继续”或“暂不处理”；清理不恢复批准、不重放未知执行、不代表检查或审查通过。
- 安全修正：恢复不再早于方案确认；`terminalVerified` 在验证回调成功后设置，因此 SIGKILL、扩展异常、持久记录不完整、现场变化和 lease ID 不匹配不会自动复位。开发与父文档 writer 的复位判断均要求 `finished && fault && terminalVerified`，恢复失败保留现场。
- 状态页实现：摘要正文不显示内部运行数据；`Ctrl+O` 详情保留完整证据；单一“结束交付”默认回车返回，先导航后才执行，防止仅查看状态时误结束。
- 验证：`npm run typecheck` 退出 0；`npm run test:all` 的 unit **259/259**、integration **120/120**、E2E **16/16**；demo `test/demo/full-flow.test.ts` **1/1**；`git diff --check` 退出 0；E2E 同时通过无 `node_modules` tarball 冷加载、真实 Pi/临时 Git、动态工具继承和状态恢复边界。PTY Python 仅做静态语法检查，未运行真实桌面流程。
- 边界：本节新优化尚未 commit、push、创建 PR、发布或部署。真实业务项目的历史 lease 未读取或清理，活动 Pi 也未 `/reload`；fake provider、替身 TUI、tarball 集成和本机 macOS 环境不证明真实模型质量、真实桌面体验或其他平台兼容性。

### 13.158 恢复边界复审修复（已完成）

- 来源：第 13.157 节提交 `cdd7540` 后的只读复审。复审指出活动开发并发、完整归属复核、部分清理后的复位出口、父文档恢复入口、参数校验顺序和自动恢复正向证据不足。
- 实现：`recoverResidual()` 增加恢复互斥、会话/Session 文件/cwd 变化核验、开发与父文档 writer 的活动任务前置、同 workspace 完整身份、owner/coordinator、PID、processToken、Session、执行 ID、run ID、lease ID 和原生结果复核。开发与审查先做 paths/inputs、原生调用和活动任务检查，再进入残留恢复；父文档 writer 接入相同恢复入口。`WriterLeaseManager.discard()` 先清理 operation lock，再删除 lease，并在删除前执行最后一次终态核验；operation lock 残留或部分清理失败保留可再次核对的 lease 现场。
- 恢复语义：同一已验证 fault 且无残留 operation lock 时自动恢复；operation lock、损坏记录、无归属记录或其他未知现场必须在 TUI 明确选择后处理。恢复仍不恢复旧批准、不重放未知任务、不代表检查或审查通过。
- 新增证据：真实 Pi/临时 Git 开发集成验证 `recovery: "automatic"`、lease owner Session/run 变化拒绝自动恢复；父文档 writer 自动恢复集成验证；workspace 单元故障注入验证 operation lock 清理失败时 lease 保留；已有未知终态和残留现场回归保持通过。
- 验证：`npm run typecheck` 通过；`npm run test:all` 的 unit **260/260**、integration **123/123**、E2E **16/16**；demo `test/demo/full-flow.test.ts` **1/1**；PTY Python AST 检查通过；tarball 无 `node_modules` 冷加载、真实 Pi/临时 Git、动态工具继承、writer 恢复和状态边界通过；`git diff --check` 通过。
- 边界：本轮尚未提交、推送或发布；不操作真实业务项目和活动会话。测试使用临时 Git、fake provider、替身 TUI 和本机 macOS SDK/CLI，不证明真实模型、真实桌面或其他平台兼容性。
