merge: close verified governance implementation

This commit is contained in:
weichen
2026-09-21 14:47:01 +00:00
12 changed files with 353 additions and 63 deletions
@@ -0,0 +1,51 @@
---
title: "落实 Agent 规范与 L1 操作门禁"
status: done
created: 2026-09-21
updated: 2026-09-21
owner: Codex
branch: feature/agent-governance-implementation
worktree: .worktrees/agent-governance-implementation
base_dev_sha: a241e838150f218f3a09d3523f93291b847d45fd
mutex: agent-governance
review_state: passed
integration_state: integrated
deployment: not_required
cleanup: pending
cleanup_owner: independent-maintainer-after-owner-exit
remote_sync: not_requested
---
# 落实 Agent 规范与 L1 操作门禁
用户已授权“按照方案实现这些规范”。范围:审查 R01–R10、两项安全补充、两个共享文档与 dev 操作的 L1 管理入口。所有修改在本任务 worktree;不改产品业务代码、数据库、模型配置,不升级 test/main,不 push。Python 标准库 sqlite3/fcntl 实现本机协调,不增加产品 Go 依赖。
## 实施单元与所有权
- 规范 Agent:AGENTS/PROJECT/客户端薄入口/模板/测试规范/CURRENT 归档,互斥 policy-docs。
- 工具 Agent:worktree helper、env-service、candidate-images-build 与对应测试,互斥 ops-scripts。
- 根 Agent:agentctl/SQLite/lease/CAS/提交与集成门禁、runbook、报告、FEATURE-MATRIX、ignore,互斥 coordination-core。
- 测试 Agent:核心独立行为测试,仅写自己的测试文件,使用临时 Git 仓库。
## 验收
- [x] 新规范一致、轻量入口和真实状态可用;历史迁移不丢失。
- [x] 主仓唯一 .locks;原子资源集合、父子冲突、活跃/失效身份、幂等及保守恢复。
- [x] CURRENT/MATRIX 受控增量/CAS 更新,旧基线不覆盖,记录恢复证据。
- [x] 错误工作区/无租约服务写入被拒;候选镜像源码 SHA 不符被拒。
- [x] 安全 create/remove、commit/ref 门禁正反例通过。
- [x] 独立代码审查及真实临时仓库并发验收;本地 dev 接收验证后的候选;安全清理。
## 交付边界
L1 对统一入口与 Git hooks 防误改,不能阻止任意同 UID shell 绕过。OS 沙箱、跨机锁、产品 PI 镜像交付等独立运行架构变更不在本次规范/最小门禁改动内。纯工程代码与文档不触发产品重建;将验证主目录运行挂载和就绪未因本轮改变。
## 验证与集成结果
- 76 项 Python 工程测试通过;最终候选复跑同样 76 PASS。20 个真实进程/独立 Git worktree 争同一资源:1 个执行、19 个 LOCK_BUSY。
- ce-simplify-code 三视角完成;ce-code-review `20260921-133611-5e4781e6` 的 5 个确认问题全部修复并经独立复核关闭。详见[报告](../../test-reports/2026-09-21-agent-governance-test-report.md)。
- 源码实现提交 `fed87ad1`;保留并行 Cursor 材料切块任务后任务 HEAD 为 `578a96440da56717582ec5ab267a094ceea3d941`。dev 从 `a5ea469ca44171a5c3e6419b1757852270fb991d` 接收完整验证候选 `7e9317b849e0696e110bac5b27749861178d7e3d`,这是规则 effective_commit。
- 主仓 `.locks` 初始化、旧/新 dev flock 同 inode 和三个 hooks 已启用;doctor 正常,无租约 env guard 返回 LEASE_REQUIRED。收口文档使用已生效入口完成 CAS、提交与后续候选集成。
- 真实 dev 合入前后 ready=ok/schema61、容器镜像和主目录 data/dev 挂载一致。本轮 deployment=not_required;未 push、未操作 test/main、无产品数据库或模型配置改动。
- cleanup=pending:实际普通 remove 因部分同 UID 进程 cwd 不可读拒绝。保留本任务及 integrate-agent-governance-implementation 两个工作区,不使用 force/-D。独立维护者在 owner 退出并解决/核实进程可见性后重跑全部门禁;仅含可再生 pycache 的文件先明确删除。其他任务现场不在清理范围。
- 文档链接检查 356 个目标中,唯一已存在的 `FEATURE-MATRIX` 历史 promotion receipt 断链不由本轮引入;本轮新增/修改链接全部有效。
@@ -1,6 +1,6 @@
# Agent worktree 与 L1 操作规范
**修订**:`agent-governance-2026-09-21-r1`。来源:[AGENTS](../../AGENTS.md)、[规范登记](./2026-09-21-policy-registry.md)。工具为 `scripts/agentctl`(Python 标准库,Linux 本机),协议 v1;实际安装与验证见[实施任务](./short-term/2026-09-21-agent-governance-implementation.md)。
**修订**:`agent-governance-2026-09-21-r1`。来源:[AGENTS](../../AGENTS.md)、[规范登记](./2026-09-21-policy-registry.md)。工具为 `scripts/agentctl`(Python 标准库,Linux 本机),协议 v1;实际安装与验证见[实施任务](../archive/ops/2026-09-21-agent-governance-implementation.md)。
本规范约束合作 Agent 的统一操作入口和 Git 提交/引用门禁。任意同 UID shell、修改管理器或跳过 hooks 仍可绕过;不把 L1 宣称为 OS 沙箱。共享服务配置与产品数据库不属于任务素材。
+7 -7
View File
@@ -4,17 +4,17 @@
`proposed → approved → active → deprecated` 是规则生命周期;与任务的 `planned/in_progress/blocked/done/cancelled` 分开。`manual/enforced` 是工具执行能力,独立于规则状态。规则获批准不证明脚本已经强制执行。
本轮修订 ID:`agent-governance-2026-09-21-r1`。owner:`orchestrator_codex`。批准依据:[规范审查](../audit/2026-09-21-agent-policy-review.md) R01–R10 与用户后续实施授权,具体授权回链由[实施任务](./short-term/2026-09-21-agent-governance-implementation.md)保存;审查原文保留历史“待采纳”语境,不改写成执行证据。
本轮修订 ID:`agent-governance-2026-09-21-r1`。owner:`orchestrator_codex`。批准依据:[规范审查](../audit/2026-09-21-agent-policy-review.md) R01–R10 与用户后续实施授权,具体授权回链由[实施任务](../archive/ops/2026-09-21-agent-governance-implementation.md)保存;审查原文保留历史“待采纳”语境,不改写成执行证据。
本轮规则在任务分支为 `approved`;**包含本修订的受控 dev 集成提交**是 `effective_commit`,从该提交进入 dev 后为 `active`。集成者在实施任务记录完整 SHA 与验证证据,避免自引用提交散列。读取时先核对该集成提交是否为当前 dev 祖先;尚未集成的规则不能冒充全仓已生效。任务记录读取的 dev SHA 和修订 ID;旧任务集成前比较规则变化,只按已生效规则补齐适用条件。
本轮规则已通过 `7e9317b849e0696e110bac5b27749861178d7e3d` 合入 dev 并为 `active`;**包含本修订的受控 dev 集成提交**是 `effective_commit`,从该提交进入 dev 后为 `active`。集成者在实施任务记录完整 SHA 与验证证据,避免自引用提交散列。读取时先核对该集成提交是否为当前 dev 祖先;尚未集成的规则不能冒充全仓已生效。任务记录读取的 dev SHA 和修订 ID;旧任务集成前比较规则变化,只按已生效规则补齐适用条件。
| 唯一来源 | 范围 | 本轮 revision/state | owner | 生效提交 |
|---|---|---|---|---|
| [AGENTS](../../AGENTS.md) | 任务分级、授权、安全、Git/收口硬边界 | r1 / approved,合入后 active | orchestrator_codex | 本修订 dev 集成提交 |
| [PROJECT](../../PROJECT.md) | 仓库地图、环境、工具与模块入口 | r1 / approved,合入后 active | orchestrator_codex | 同上 |
| [验证契约](./2026-09-21-validation-contract.md) | 测试范围、精确 PI 用例与报告 | r1 / approved,合入后 active | orchestrator_codex | 同上 |
| [worktree 操作规范](./2026-09-21-agent-worktree-workflow.md) | 创建、租约、共享文档、候选、环境、恢复、清理 | 本轮更新部分 approved,合入后 active;既有规则按历史集成记录 | orchestrator_codex | 本轮实施任务及既有历史交接 |
| [Herdr roster](./2026-09-13-herdr-agent-roster.md) | 角色与备援;实际模型/可用性须重新核验 | 既有规则 active;本轮澄清 approved,合入后 active | orchestrator_codex | Git 历史及本轮实施任务 |
| [AGENTS](../../AGENTS.md) | 任务分级、授权、安全、Git/收口硬边界 | r1 / active | orchestrator_codex | 本修订 dev 集成提交 |
| [PROJECT](../../PROJECT.md) | 仓库地图、环境、工具与模块入口 | r1 / active | orchestrator_codex | 同上 |
| [验证契约](./2026-09-21-validation-contract.md) | 测试范围、精确 PI 用例与报告 | r1 / active | orchestrator_codex | 同上 |
| [worktree 操作规范](./2026-09-21-agent-worktree-workflow.md) | 创建、租约、共享文档、候选、环境、恢复、清理 | 本轮更新 active;既有规则按历史集成记录 | orchestrator_codex | 本轮实施任务及既有历史交接 |
| [Herdr roster](./2026-09-13-herdr-agent-roster.md) | 角色与备援;实际模型/可用性须重新核验 | 既有规则 active;本轮澄清 active | orchestrator_codex | Git 历史及本轮实施任务 |
客户端入口仅指向上述来源;不独立制定第二套测试、提交或凭证规则。外层系统约束及当前用户授权优先,内部冲突按 AGENTS 硬边界、PROJECT 项目细则、专门操作流程的职责解决;仍无法同时满足时记录冲突并请求范围决策。
+1 -1
View File
@@ -43,7 +43,7 @@ go test -count=1 -timeout 90m -v ./internal/server/ -run '^TestWorkflowGovernanc
测试筛选区分大小写;`-run 'PI'` 不能选择名称中的 `PiAgent`。追加用例先读其环境前提;FullLifecycle 中 `RUN_FULL_ADHOC_WBS` 与 `RUN_HEAVY_STAGES` 控制额外段,不能把默认未跑段报为已覆盖。普通 PG 用例同样以源码中的精确名称/前提为准。
运行前列 `expected_tests`(含必须子场景),运行后逐项对照执行、PASS、FAIL、SKIP、未匹配及重试。退出码 0 或 nightly receipt `pass` 不能替代该对照:基线脚本检查全 SKIP,但部分 SKIP 仍须人工核验。缺项不记 PASS,基础设施问题记录 blocker/infra_fail。保留首轮与重试关系,不隐藏失败。
运行前列 `expected_tests`(含必须子场景),运行后逐项对照执行、PASS、FAIL、SKIP、未匹配及重试。退出码 0 或 nightly receipt `pass` 不能替代该对照:基线脚本逐项核对两个预期顶层测试;额外子场景/用例仍须逐项核验。缺项不记 PASS,基础设施问题记录 blocker/infra_fail。保留首轮与重试关系,不隐藏失败。
## 模型与环境证据
+3 -3
View File
@@ -4,7 +4,7 @@
## 焦点
1. **Agent 规范与 L1 操作门禁实施**:R01–R10、授权/证据边界、临时仓库负例验收;[实施任务](./short-term/2026-09-21-agent-governance-implementation.md)。工具是否 enforced 以实际版本和验收收据为准。
1. **Agent 规范与 L1 操作门禁已启用**:R01–R10、共享 .locks/CAS/hooks 生效;[实施任务](../archive/ops/2026-09-21-agent-governance-implementation.md)。dev 生效提交 7e9317b8;本机受测门禁 enforced,OS 隔离不在本轮范围。
2. **遗留未完成任务确认**:保留 governance-adoption 与 partial-deferred 原状态,由原 owner 核验后收口/交接;本次归档不擅自宣告完成。
3. **worktree 保留与清理接管**:已完成交付与 cleanup 分别记录。owner 退出、证据保存且门禁满足后再由维护者清理,见下表。
@@ -12,7 +12,7 @@
| owner | task | branch | worktree | mutex | status |
|---|---|---|---|---|---|
| Codex | 2026-09-21-agent-governance-implementation | feature/agent-governance-implementation | .worktrees/agent-governance-implementation | agent-governance | in_progress |
| Codex | 2026-09-21-agent-governance-implementation | feature/agent-governance-implementation | .worktrees/agent-governance-implementation | agent-governance | done |
| Cursor | 2026-09-21-force-material-chunk-index | feature/force-material-chunk-index-2026-09-21 | .worktrees/force-material-chunk-index-2026-09-21 | bizdev+materialindex | done |
| Cursor | 2026-09-21-workflow-scope-weighting | feature/workflow-scope-weighting-2026-09-21 | .worktrees/workflow-scope-weighting-2026-09-21 | intent+web+docgov | done |
| Cursor | 2026-09-21-upload-parse-ux-dedup | feature/upload-parse-ux-2026-09-21 | .worktrees/upload-parse-ux-2026-09-21 | server+web+storage | done |
@@ -35,7 +35,7 @@
| 路径/事项 | 分类与保留原因 | cleanup_owner | 复查触发 |
|---|---|---|---|
| `.worktrees/force-material-chunk-index-2026-09-21` | Cursor 已交付,保留原任务验收与工作区 | Cursor owner / 独立维护者 | owner 退出后核对祖先、文件、证据与进程 |
| `.worktrees/agent-governance-implementation` | 活跃实施;cleanup=pending | Codex 之外的集成/维护执行者 | 验收、集成、证据归档完成且 owner 退出 |
| `.worktrees/agent-governance-implementation`、`.worktrees/integrate-agent-governance-implementation` | 已交付;同 UID 进程 cwd 不可读,cleanup=pending | Codex 之外的集成/维护执行者 | 验收、集成、证据归档完成且 owner 退出 |
| `.worktrees/feature-agent-workflow-governance-plan` | 原 adoption 仍 in_progress;不得替 owner 改 done | 原 Codex owner / 维护者接管 | 核对原任务交付与进程后更新真实状态 |
| Cline `2026-09-16-partial-deferred-completion` | 原 in_progress,worktree 未登记;保留待核验 | Cline owner / 维护者接管 | 查明主文档、分支与未提交现场 |
| `.worktrees/agent-governance-dev-integration` | 历史集成现场 detached;待检查唯一证据/进程 | Codex 维护者 | 所需证据持久化并确认不再使用 |
@@ -29,6 +29,6 @@ mutex: agent-workflow-governance
## 2026-09-21 L1 分批交付
[实施任务](../short-term/2026-09-21-agent-governance-implementation.md) 已验证 W1、安全门禁、W2 本机 SQLite 原子租约/恢复/有限等待、两个共享文档 CAS,以及 W3 精确候选准入与固定源码导出、W4 薄入口和证据归档。验收见[报告](../../test-reports/2026-09-21-agent-governance-test-report.md),实际主仓启用状态以收口为准。
[实施任务](../../archive/ops/2026-09-21-agent-governance-implementation.md) 已验证 W1、安全门禁、W2 本机 SQLite 原子租约/恢复/有限等待、两个共享文档 CAS,以及 W3 精确候选准入与固定源码导出、W4 薄入口和证据归档。验收见[报告](../../test-reports/2026-09-21-agent-governance-test-report.md),实际主仓启用状态以收口为准。
完整自动化仍未关闭:后台持久队列与自动调度、通用文档投影、两个业务任务的部署/恢复闭环、产品 PI 源码镜像交付及本机不可读进程造成的清理限制仍需后续范围;OS/跨机隔离另立任务。不得把本次临时 Git 仓库门禁测试当作真实业务运行验收。
@@ -1,47 +0,0 @@
---
title: "落实 Agent 规范与 L1 操作门禁"
status: in_progress
created: 2026-09-21
updated: 2026-09-21
owner: Codex
branch: feature/agent-governance-implementation
worktree: .worktrees/agent-governance-implementation
base_dev_sha: a241e838150f218f3a09d3523f93291b847d45fd
mutex: agent-governance
review_state: approved
integration_state: pending
deployment: not_required
cleanup: pending
remote_sync: not_requested
---
# 落实 Agent 规范与 L1 操作门禁
用户已授权“按照方案实现这些规范”。范围:审查 R01–R10、两项安全补充、两个共享文档与 dev 操作的 L1 管理入口。所有修改在本任务 worktree;不改产品业务代码、数据库、模型配置,不升级 test/main,不 push。Python 标准库 sqlite3/fcntl 实现本机协调,不增加产品 Go 依赖。
## 实施单元与所有权
- 规范 Agent:AGENTS/PROJECT/客户端薄入口/模板/测试规范/CURRENT 归档,互斥 policy-docs。
- 工具 Agent:worktree helper、env-service、candidate-images-build 与对应测试,互斥 ops-scripts。
- 根 Agent:agentctl/SQLite/lease/CAS/提交与集成门禁、runbook、报告、FEATURE-MATRIX、ignore,互斥 coordination-core。
- 测试 Agent:核心独立行为测试,仅写自己的测试文件,使用临时 Git 仓库。
## 验收
- [ ] 新规范一致、轻量入口和真实状态可用;历史迁移不丢失。
- [ ] 主仓唯一 .locks;原子资源集合、父子冲突、活跃/失效身份、幂等及保守恢复。
- [ ] CURRENT/MATRIX 受控增量/CAS 更新,旧基线不覆盖,记录恢复证据。
- [ ] 错误工作区/无租约服务写入被拒;候选镜像源码 SHA 不符被拒。
- [ ] 安全 create/remove、commit/ref 门禁正反例通过。
- [ ] 独立代码审查及真实临时仓库并发验收;本地 dev 接收验证后的候选;安全清理。
## 交付边界
L1 对统一入口与 Git hooks 防误改,不能阻止任意同 UID shell 绕过。OS 沙箱、跨机锁、产品 PI 镜像交付等独立运行架构变更不在本次规范/最小门禁改动内。纯工程代码与文档不触发产品重建;将验证主目录运行挂载和就绪未因本轮改变。
## 验证与集成进度
- 76 项 Python 工程测试通过;20 个真实进程/独立 Git worktree 争同一资源:1 个执行、19 个 LOCK_BUSY。
- ce-simplify-code 三视角完成;ce-code-review `20260921-133611-5e4781e6` 完成,5 个确认问题全部修复并经独立复核关闭。详见[报告](../../test-reports/2026-09-21-agent-governance-test-report.md)。
- 候选待基于最新 dev 构造;期间 Cursor 的材料切块任务推进 dev,保留其 CURRENT 增量和验收记录。
- 主机部分同 UID 进程 cwd 不可读,保守清理可能 pending;证据与接管责任随收口更新。
+1 -1
View File
@@ -49,7 +49,7 @@
| 模块 | 声明范围 | 状态 | 发布关系 | 证据 | 剩余工作 / 关闭条件 | mutex |
|------|----------|------|----------|------|---------------------|-------|
| Agent worktree 治理自动化 | 主目录保护、任务 worktree、机器认领、候选集成、dev 部署与安全清理 | partial | non_blocker | [方案](../remediation/2026-09-21-agent-workflow-governance-plan.md);[L1 验收](../test-reports/2026-09-21-agent-governance-test-report.md) | 本机 .locks/短租约、共享文档 CAS、提交/候选/环境门禁及安全 helper 已验;主仓启用见报告。后台调度、完整业务部署恢复闭环、产品 PI 镜像交付、OS/跨机隔离与清理可见性仍待[后续](../ops/long-term/2026-09-21-agent-workflow-governance-automation.md) | `agent-workflow-governance` |
| Agent worktree 治理自动化 | 主目录保护、任务 worktree、机器认领、候选集成、dev 部署与安全清理 | partial | non_blocker | [方案](../remediation/2026-09-21-agent-workflow-governance-plan.md);[L1 验收](../test-reports/2026-09-21-agent-governance-test-report.md) | 本机 .locks/短租约、共享文档 CAS、提交/候选/环境门禁及安全 helper 已验;主仓 7e9317b8 已启用 init/hooks,拒绝无租约 env 操作。后台调度、完整业务部署恢复闭环、产品 PI 镜像交付、OS/跨机隔离与清理可见性仍待[后续](../ops/long-term/2026-09-21-agent-workflow-governance-automation.md) | `agent-workflow-governance` |
| 意图识别 L1 | 18 类 Intent、三分支消解、写/只读分流、双标签 `DOC_BUSY`、intent 纯依赖边界 | done | non_blocker | [intent-recognition](../system-design/intent-recognition/);[工作流作用域](../test-reports/2026-09-21-intent-workflow-scoping-test-report.md);[审计](../audit/2026-09-13-conversation-intent-runtime-state.md);[报告](../test-reports/2026-09-13-conversation-intent-runtime-state-test-report.md);[双标签](../test-reports/assets/2026-09-15-conversation-intent-dual-tab/live.json);[U1](../test-reports/2026-09-15-multi-intent-u1-contracts-test-report.md)–[U3](../test-reports/2026-09-15-multi-intent-u3-intentflow-pg-test-report.md) | **边界 before**:含 U9–U12 叙事混入 → **after**:U9–U12 迁至「多意图扩面」行。关闭:纯依赖边界回归即重开 | `intent` |
| 多意图持久计划(U1–U8 基线) | app/intentflow 生命周期、HITL、默认 `legacy`、U1–U8 代码与安全基线 | partial | non_blocker(默认 legacy) | [设计](../system-design/2026-09-15-multi-intent-hitl-plan.md);[U1](../test-reports/2026-09-15-multi-intent-u1-contracts-test-report.md)–[U8](../test-reports/2026-09-16-multi-intent-u8-task-generate-test-report.md);[Wave2 真 PI](../test-reports/2026-09-16-wave2-real-pi-evidence-test-report.md);[2026-09-20 复核](../ops/research/2026-09-20-capability-enablement-impact-research.md) | legacy 有限只读多意图仍默认启用;新持久计划生产组合根仍使用 Fake query owner,confirm 后缺可靠调度,typed 参数/目标版本不足。原 U1–U8 测试证据保留,但不足以证明升 `auto_read/confirm` 可用。关闭条件见[整改方案](../remediation/2026-09-20-capability-enablement-impact-plan.md) Foundation 1 与 Track I | `intent-plan` |
| 多意图扩面(U9–U12) | U9 LLM 分段实验;U10 mutate;U11 docgov;U12 workflow/run-control | partial | deferred_enhancement | [设计](../system-design/2026-09-15-multi-intent-hitl-plan.md);[go/no-go GO](../ops/research/2026-09-16-wave3-pu6-pu8-go-no-go.md);[脚手架](../test-reports/2026-09-16-pu8-u9-u12-flags-test-report.md);[U9](../test-reports/2026-09-17-w4-u9-segment-test-report.md);[U10](../test-reports/2026-09-17-w4-u10-mutate-test-report.md);[U11](../test-reports/2026-09-17-w4-u11-docgov-test-report.md);[U12](../test-reports/2026-09-17-w4-u12-run-control-test-report.md);[2026-09-20 复核](../ops/research/2026-09-20-capability-enablement-impact-research.md) | U9 proposer 已实现和注入但未进入生产聊天分段调用;提议请求已带 reasoning profile。U10–U12 当前为 dry-run/validated-only adapter。历史直接调用/PI 测试继续有效,不代表 live 接线。逐域实现和验收,禁止以 `full` 一次放量 | `intent-plan` |
@@ -1,6 +1,6 @@
# Agent 规范与 L1 操作门禁验收
日期:2026-09-21。范围:R01–R10、授权与脱敏证据补充、本机两个共享文档/dev 的最小 L1 门禁。授权与收口见[实施任务](../ops/short-term/2026-09-21-agent-governance-implementation.md)。不改变产品完成度/发布 blocker。
日期:2026-09-21。范围:R01–R10、授权与脱敏证据补充、本机两个共享文档/dev 的最小 L1 门禁。授权与收口见[实施任务](../archive/ops/2026-09-21-agent-governance-implementation.md)。不改变产品完成度/发布 blocker。
## 变更与边界
@@ -26,4 +26,12 @@
## 主仓收口
待验证候选集成后启用 init/hooks,并记录实际生效提交、主仓 doctor、环境只读核对与安全清理结果。
生效提交:`7e9317b849e0696e110bac5b27749861178d7e3d`。候选第一父节点为当时最新 dev `a5ea469ca44171a5c3e6419b1757852270fb991d`;实现任务 HEAD `578a96440da56717582ec5ab267a094ceea3d941`,合并后重新运行 76 项测试全部通过,主目录只快进接收同一节点。首次启用由旧 dev flock 持锁完成,经检查旧操作 released;启用新库时已释放旧 fd,没有双重加锁死锁。
[候选完整输出](./assets/2026-09-21-agent-governance/candidate-tests.txt)、[实际集成及运行快照](./assets/2026-09-21-agent-governance/live-integration.json)、[实际激活检查](./assets/2026-09-21-agent-governance/live-activation.json)。只收集 readiness、镜像和挂载身份,未保存业务正文或环境变量;cleanup 错误省略 PID 列表。
主仓唯一 `.locks` 已初始化;旧/新 dev 锁 inode 相同;pre-commit、pre-merge-commit、reference-transaction 已安装。doctor 正常;无租约 env guard 在调用服务前返回 LEASE_REQUIRED。收口使用管理入口完成文档 CAS、带租约提交、精确候选验证与集成。
dev 集成前后 ready=ok、schema61,镜像及主目录数据挂载一致;无需重建产品服务。普通 remove 的真实尝试因同 UID cwd 不可读返回 cleanup_pending,未删除目录/分支。当前两个 worktree 由独立维护者在 owner 退出和进程可见性核实后复查,不扩大为清理其他任务。用户未要求 push,变更仅在本地。
关联影响:AGENTS/PROJECT/客户端入口、操作规范/验证契约/规则登记、模板、CURRENT 历史和自动化 backlog 均已同步;FEATURE-MATRIX 仅把治理自动化 planned 调整为 partial,不关闭完整部署恢复/权限隔离范围,不改产品 production_ready 或 gap-matrix。356 个文档目标检查保留一处既有历史 promotion receipt 断链(未由本轮引入)。
@@ -0,0 +1,81 @@
test_unknown_same_uid_inaccessible_cwd_is_not_skipped (test_agent_worktree.ProcessVisibilityTest.test_unknown_same_uid_inaccessible_cwd_is_not_skipped) ... ok
test_branch_delete_refusal_preserves_branch_without_force_with_visibility_fixture (test_agent_worktree.WorktreeTest.test_branch_delete_refusal_preserves_branch_without_force_with_visibility_fixture) ... ok
test_cleanup_actual_branch_mapping_with_visibility_fixture (test_agent_worktree.WorktreeTest.test_cleanup_actual_branch_mapping_with_visibility_fixture) ... ok
test_cleanup_legacy_mapping_and_nonforced_branch_delete_with_visibility_fixture (test_agent_worktree.WorktreeTest.test_cleanup_legacy_mapping_and_nonforced_branch_delete_with_visibility_fixture) ... ok
test_cleanup_lifecycle_lock_prevents_a_new_run (test_agent_worktree.WorktreeTest.test_cleanup_lifecycle_lock_prevents_a_new_run) ... ok
test_cleanup_refuses_active_registry_operation_even_with_other_cwd (test_agent_worktree.WorktreeTest.test_cleanup_refuses_active_registry_operation_even_with_other_cwd) ... ok
test_cleanup_refuses_live_process_cwd (test_agent_worktree.WorktreeTest.test_cleanup_refuses_live_process_cwd) ... ok
test_cleanup_refuses_tracked_untracked_and_ignored_evidence (test_agent_worktree.WorktreeTest.test_cleanup_refuses_tracked_untracked_and_ignored_evidence) ... ok
test_cleanup_refuses_unfinished_git_operation (test_agent_worktree.WorktreeTest.test_cleanup_refuses_unfinished_git_operation) ... ok
test_cleanup_refuses_unmerged_commit (test_agent_worktree.WorktreeTest.test_cleanup_refuses_unmerged_commit) ... ok
test_create_from_feature_uses_current_dev_and_canonical_main (test_agent_worktree.WorktreeTest.test_create_from_feature_uses_current_dev_and_canonical_main) ... ok
test_create_with_main_on_unrelated_branch_uses_dev (test_agent_worktree.WorktreeTest.test_create_with_main_on_unrelated_branch_uses_dev) ... ok
test_forged_inherited_lease_is_refused (test_agent_worktree.WorktreeTest.test_forged_inherited_lease_is_refused) ... ok
test_inherited_worktree_lease_does_not_double_lock (test_agent_worktree.WorktreeTest.test_inherited_worktree_lease_does_not_double_lock) ... ok
test_list_is_read_only_without_init (test_agent_worktree.WorktreeTest.test_list_is_read_only_without_init) ... ok
test_rejects_traversal_nested_and_protected_branches (test_agent_worktree.WorktreeTest.test_rejects_traversal_nested_and_protected_branches) ... ok
test_same_task_id_and_existing_branch_do_not_collide (test_agent_worktree.WorktreeTest.test_same_task_id_and_existing_branch_do_not_collide) ... ok
test_stable_lock_refuses_concurrent_writer (test_agent_worktree.WorktreeTest.test_stable_lock_refuses_concurrent_writer) ... ok
test_symlink_parent_or_target_is_refused (test_agent_worktree.WorktreeTest.test_symlink_parent_or_target_is_refused) ... ok
test_write_requires_explicit_init (test_agent_worktree.WorktreeTest.test_write_requires_explicit_init) ... ok
test_admin_document_cannot_bypass_done_with_compact_cells (test_agentctl.AgentctlTests.test_admin_document_cannot_bypass_done_with_compact_cells) ... ok
test_admin_document_cas_preserves_slot_and_needs_capability (test_agentctl.AgentctlTests.test_admin_document_cas_preserves_slot_and_needs_capability) ... ok
test_admin_full_document_requires_explicit_admin_capability (test_agentctl.AgentctlTests.test_admin_full_document_requires_explicit_admin_capability) ... ok
test_commit_lease_must_cover_staged_files_not_only_task_scope (test_agentctl.AgentctlTests.test_commit_lease_must_cover_staged_files_not_only_task_scope) ... ok
test_descendant_resource_guard_accepts_only_held_resource (test_agentctl.AgentctlTests.test_descendant_resource_guard_accepts_only_held_resource) ... ok
test_docs_cannot_launder_unmanaged_other_task_changes (test_agentctl.AgentctlTests.test_docs_cannot_launder_unmanaged_other_task_changes) ... ok
test_docs_foreign_current_row_is_rejected (test_agentctl.AgentctlTests.test_docs_foreign_current_row_is_rejected) ... ok
test_docs_multi_file_preflight_failure_has_no_partial_writes (test_agentctl.AgentctlTests.test_docs_multi_file_preflight_failure_has_no_partial_writes) ... ok
test_docs_row_cas_preserves_unrelated_rows_and_is_idempotent (test_agentctl.AgentctlTests.test_docs_row_cas_preserves_unrelated_rows_and_is_idempotent) ... ok
test_env_guard_accepts_clean_main_and_requires_all_target_leases (test_agentctl.AgentctlTests.test_env_guard_accepts_clean_main_and_requires_all_target_leases) ... ok
test_env_guard_refuses_linked_worktree_even_with_capability (test_agentctl.AgentctlTests.test_env_guard_refuses_linked_worktree_even_with_capability) ... ok
test_failed_child_releases_lease_and_preserves_failure (test_agentctl.AgentctlTests.test_failed_child_releases_lease_and_preserves_failure) ... ok
test_failed_revalidation_revokes_old_success_receipt (test_agentctl.AgentctlTests.test_failed_revalidation_revokes_old_success_receipt) ... ok
test_guard_build_requires_exact_clean_commit (test_agentctl.AgentctlTests.test_guard_build_requires_exact_clean_commit) ... ok
test_hook_checks_reject_out_of_scope_and_secret_paths (test_agentctl.AgentctlTests.test_hook_checks_reject_out_of_scope_and_secret_paths) ... ok
test_hook_rejects_shared_document_without_publish_receipt (test_agentctl.AgentctlTests.test_hook_rejects_shared_document_without_publish_receipt) ... ok
test_hooks_allow_published_shared_document_receipt (test_agentctl.AgentctlTests.test_hooks_allow_published_shared_document_receipt) ... ok
test_hooks_allow_scoped_task_commit_under_live_lease (test_agentctl.AgentctlTests.test_hooks_allow_scoped_task_commit_under_live_lease) ... ok
test_hooks_refuse_overwriting_foreign_hook (test_agentctl.AgentctlTests.test_hooks_refuse_overwriting_foreign_hook) ... ok
test_init_cannot_steal_live_legacy_lock (test_agentctl.AgentctlTests.test_init_cannot_steal_live_legacy_lock) ... ok
test_init_preserves_existing_legacy_lock_inode (test_agentctl.AgentctlTests.test_init_preserves_existing_legacy_lock_inode) ... ok
test_installed_hooks_reject_direct_dev_commit (test_agentctl.AgentctlTests.test_installed_hooks_reject_direct_dev_commit) ... ok
test_interrupted_validation_stops_child_before_releasing_scope (test_agentctl.AgentctlTests.test_interrupted_validation_stops_child_before_releasing_scope) ... ok
test_invalid_document_request_shape_has_no_write_side_effects (test_agentctl.AgentctlTests.test_invalid_document_request_shape_has_no_write_side_effects) ... ok
test_linked_worktree_uses_only_main_coordination_root (test_agentctl.AgentctlTests.test_linked_worktree_uses_only_main_coordination_root) ... ok
test_live_and_stale_credentials_cannot_be_spoofed (test_agentctl.AgentctlTests.test_live_and_stale_credentials_cannot_be_spoofed) ... ok
test_live_run_cannot_be_recovered_or_task_closed (test_agentctl.AgentctlTests.test_live_run_cannot_be_recovered_or_task_closed) ... ok
test_multi_resource_acquisition_is_atomic (test_agentctl.AgentctlTests.test_multi_resource_acquisition_is_atomic) ... ok
test_parent_child_path_conflict_and_disjoint_coexistence (test_agentctl.AgentctlTests.test_parent_child_path_conflict_and_disjoint_coexistence) ... ok
test_path_scope_and_capability_are_enforced (test_agentctl.AgentctlTests.test_path_scope_and_capability_are_enforced) ... ok
test_recovery_refuses_dead_supervisor_with_live_child (test_agentctl.AgentctlTests.test_recovery_refuses_dead_supervisor_with_live_child) ... ok
test_registered_active_task_must_close_before_cleanup (test_agentctl.AgentctlTests.test_registered_active_task_must_close_before_cleanup) ... ok
test_replaced_compatibility_inode_is_not_a_new_free_lock (test_agentctl.AgentctlTests.test_replaced_compatibility_inode_is_not_a_new_free_lock) ... ok
test_shared_lease_does_not_satisfy_write_guard (test_agentctl.AgentctlTests.test_shared_lease_does_not_satisfy_write_guard) ... ok
test_task_index_lease_serializes_index_but_not_disjoint_work (test_agentctl.AgentctlTests.test_task_index_lease_serializes_index_but_not_disjoint_work) ... ok
test_task_registration_rejects_protected_branch_and_invalid_scopes (test_agentctl.AgentctlTests.test_task_registration_rejects_protected_branch_and_invalid_scopes) ... ok
test_uninitialized_status_and_doctor_do_not_create_state (test_agentctl.AgentctlTests.test_uninitialized_status_and_doctor_do_not_create_state) ... ok
test_validated_linear_commit_cannot_bypass_candidate_entrypoint (test_agentctl.AgentctlTests.test_validated_linear_commit_cannot_bypass_candidate_entrypoint) ... ok
test_validated_merge_candidate_is_exactly_promoted_to_dev (test_agentctl.AgentctlTests.test_validated_merge_candidate_is_exactly_promoted_to_dev) ... ok
test_both_expected_tests_pass (test_go_test_evidence.TestEvidence.test_both_expected_tests_pass) ... ok
test_missing_partial_skip_failure_and_duplicate_are_not_pass (test_go_test_evidence.TestEvidence.test_missing_partial_skip_failure_and_duplicate_are_not_pass) ... ok
test_subtests_and_case_mismatches_do_not_prove_parent_execution (test_go_test_evidence.TestEvidence.test_subtests_and_case_mismatches_do_not_prove_parent_execution) ... ok
test_authorized_pinned_rebuild_preserves_no_build (test_ops_guards.OpsGuardsTest.test_authorized_pinned_rebuild_preserves_no_build) ... ok
test_build_accepts_nightly_evidence_excluded_from_build_context (test_ops_guards.OpsGuardsTest.test_build_accepts_nightly_evidence_excluded_from_build_context) ... ok
test_build_context_is_frozen_when_managed_source_changes (test_ops_guards.OpsGuardsTest.test_build_context_is_frozen_when_managed_source_changes) ... ok
test_build_dirty_source_refuses_before_docker_or_receipts (test_ops_guards.OpsGuardsTest.test_build_dirty_source_refuses_before_docker_or_receipts) ... ok
test_build_mismatched_commit_refuses_before_docker_or_receipts (test_ops_guards.OpsGuardsTest.test_build_mismatched_commit_refuses_before_docker_or_receipts) ... ok
test_build_untracked_source_refuses_before_docker_or_receipts (test_ops_guards.OpsGuardsTest.test_build_untracked_source_refuses_before_docker_or_receipts) ... ok
test_clean_build_records_exact_source_commit (test_ops_guards.OpsGuardsTest.test_clean_build_records_exact_source_commit) ... ok
test_environment_lease_cannot_deploy_dirty_main_source (test_ops_guards.OpsGuardsTest.test_environment_lease_cannot_deploy_dirty_main_source) ... ok
test_invalid_action_does_not_initialize_environment (test_ops_guards.OpsGuardsTest.test_invalid_action_does_not_initialize_environment) ... ok
test_linked_worktree_writes_refuse_and_queries_remain_read_only (test_ops_guards.OpsGuardsTest.test_linked_worktree_writes_refuse_and_queries_remain_read_only) ... ok
test_one_environment_lease_does_not_authorize_all (test_ops_guards.OpsGuardsTest.test_one_environment_lease_does_not_authorize_all) ... ok
test_queries_never_initialize_environment (test_ops_guards.OpsGuardsTest.test_queries_never_initialize_environment) ... ok
test_service_writes_without_lease_refuse_before_any_side_effect (test_ops_guards.OpsGuardsTest.test_service_writes_without_lease_refuse_before_any_side_effect) ... ok
test_valid_lease_cannot_hide_linked_caller_or_linked_script (test_ops_guards.OpsGuardsTest.test_valid_lease_cannot_hide_linked_caller_or_linked_script) ... ok
----------------------------------------------------------------------
Ran 76 tests in 31.162s
OK
@@ -0,0 +1,25 @@
{
"effective_commit": "7e9317b849e0696e110bac5b27749861178d7e3d",
"doctor": {
"exit_code": 0,
"stdout": "{\"epoch\": \"a994d494-0d98-4dc9-9a84-26b8f8f824f8\", \"lock_root\": \"/home/weichen/projects/Agent-System/.locks\", \"main\": \"/home/weichen/projects/Agent-System\", \"runs\": [{\"boot\": \"a37fa29f-4cbd-4c8a-89d2-d5d31b20615b\", \"child_pid\": 2165741, \"child_start\": \"87333114\", \"created\": 1790001931.4922044, \"exit_code\": null, \"fingerprint\": \"c958ecaf00a4028ec9e7009b4edab3e9af369aa9e9f58361def05f97d32efe1f\", \"generation\": 2, \"heartbeat\": 1790001931.4990153, \"id\": \"107c0cc3-0428-4d72-93c0-8f06af2bd266\", \"kind\": \"command\", \"mode\": \"X\", \"pgid\": 2165741, \"pid\": 2165706, \"reason\": null, \"resources\": \"[\\\"path:.\\\"]\", \"start\": \"87333102\", \"state\": \"running\", \"supervisor_alive\": true, \"task\": \"2026-09-21-agent-governance-implementation\"}], \"status\": \"ok\", \"tasks\": [{\"base_sha\": \"578a96440da56717582ec5ab267a094ceea3d941\", \"branch\": \"feature/agent-governance-implementation\", \"capabilities\": \"[\\\"docs:admin\\\", \\\"docs:approve\\\", \\\"docs:publish\\\"]\", \"id\": \"2026-09-21-agent-governance-implementation\", \"owner\": \"Codex\", \"scopes\": \"[\\\".\\\"]\", \"state\": \"active\", \"worktree\": \"/home/weichen/projects/Agent-System/.worktrees/agent-governance-implementation\"}, {\"base_sha\": \"7e9317b849e0696e110bac5b27749861178d7e3d\", \"branch\": \"feature/integrate-agent-governance-implementation\", \"capabilities\": \"[\\\"git:dev\\\"]\", \"id\": \"integrate-agent-governance-implementation\", \"owner\": \"Codex\", \"scopes\": \"[\\\".\\\"]\", \"state\": \"active\", \"worktree\": \"/home/weichen/projects/Agent-System/.worktrees/integrate-agent-governance-implementation\"}], \"version\": 1}\n",
"stderr": ""
},
"guard_without_lease": {
"exit_code": 1,
"stdout": "",
"stderr": "{\"code\": \"LEASE_REQUIRED\", \"message\": \"Required exclusive resource is not held\", \"resource\": \"env:dev\", \"status\": \"denied\"}\n"
},
"bridge_same_inode": true,
"hooks": {
"pre-commit": true,
"pre-merge-commit": true,
"reference-transaction": true
},
"cleanup_attempt": {
"command": "./scripts/agent-worktree.sh remove feature/integrate-agent-governance-implementation --delete-branch",
"exit_code": 1,
"reason": "cannot verify cwd of same-user process; cleanup_pending",
"redaction": "PID list omitted; no forced retry"
}
}
@@ -0,0 +1,172 @@
{
"base_dev": "a5ea469ca44171a5c3e6419b1757852270fb991d",
"task_head": "578a96440da56717582ec5ab267a094ceea3d941",
"before": {
"ready": {
"status": "ok",
"env": "dev",
"agent_backend": "pi-agent",
"version": "v1.0",
"shared_kb_port": 5432,
"kb_ready": true,
"database_ready": true,
"schema_version": 61,
"schema_ready": true,
"task_store_ready": true
},
"containers": [
{
"name": "shuimu-agent-app-dev",
"image": "sha256:fed356f7375893583a4d5ad5c56290af0e6ce4f1194c2a8303a24e83502fa41c",
"mounts": [
{
"source": "/home/weichen/projects/Agent-System/.regulations",
"target": "/app/.regulations"
},
{
"source": "/home/weichen/projects/Agent-System/data/dev",
"target": "/app/data"
},
{
"source": "/var/lib/docker/volumes/agent-dev-aux-sqlite-data/_data",
"target": "/var/lib/feishu"
}
]
},
{
"name": "shuimu-agent-events-dev",
"image": "sha256:6ec4210dd28d271efaf257ad92eb9425c092dfb80522402f098366ade739f192",
"mounts": []
},
{
"name": "shuimu-pi-agent-dev",
"image": "sha256:ce30798e2553a85079e3b54a370b4d11efa5d57e1cccc8fb462b4ebe05366917",
"mounts": [
{
"source": "/home/weichen/projects/Agent-System/deploy/pi-agent/extensions",
"target": "/app/extensions"
},
{
"source": "/home/weichen/projects/Agent-System/deploy/pi-agent/pi-args.mjs",
"target": "/app/pi-args.mjs"
},
{
"source": "/home/weichen/projects/Agent-System/deploy/pi-agent/result-v1.mjs",
"target": "/app/result-v1.mjs"
},
{
"source": "/home/weichen/projects/Agent-System/deploy/pi-agent/runner.mjs",
"target": "/app/runner.mjs"
},
{
"source": "/home/weichen/projects/Agent-System/data/dev/workspaces",
"target": "/app/data/workspaces"
},
{
"source": "/home/weichen/projects/Agent-System/data/dev/agent_sessions",
"target": "/root/.pi/agent/sessions"
}
]
},
{
"name": "shuimu-context-pg-dev",
"image": "sha256:ccc6e83d6e35e931dc7c5def2022729d5a6c370318d099181995567ff1fb4d6b",
"mounts": [
{
"source": "/home/weichen/projects/Agent-System/deploy/postgres/context_init.sql",
"target": "/docker-entrypoint-initdb.d/01-init.sql"
},
{
"source": "/var/lib/docker/volumes/agent-dev-context-pgdata/_data",
"target": "/var/lib/postgresql/data"
}
]
}
]
},
"candidate": "7e9317b849e0696e110bac5b27749861178d7e3d",
"after": {
"ready": {
"status": "ok",
"env": "dev",
"agent_backend": "pi-agent",
"version": "v1.0",
"shared_kb_port": 5432,
"kb_ready": true,
"database_ready": true,
"schema_version": 61,
"schema_ready": true,
"task_store_ready": true
},
"containers": [
{
"name": "shuimu-agent-app-dev",
"image": "sha256:fed356f7375893583a4d5ad5c56290af0e6ce4f1194c2a8303a24e83502fa41c",
"mounts": [
{
"source": "/home/weichen/projects/Agent-System/.regulations",
"target": "/app/.regulations"
},
{
"source": "/home/weichen/projects/Agent-System/data/dev",
"target": "/app/data"
},
{
"source": "/var/lib/docker/volumes/agent-dev-aux-sqlite-data/_data",
"target": "/var/lib/feishu"
}
]
},
{
"name": "shuimu-agent-events-dev",
"image": "sha256:6ec4210dd28d271efaf257ad92eb9425c092dfb80522402f098366ade739f192",
"mounts": []
},
{
"name": "shuimu-pi-agent-dev",
"image": "sha256:ce30798e2553a85079e3b54a370b4d11efa5d57e1cccc8fb462b4ebe05366917",
"mounts": [
{
"source": "/home/weichen/projects/Agent-System/deploy/pi-agent/extensions",
"target": "/app/extensions"
},
{
"source": "/home/weichen/projects/Agent-System/deploy/pi-agent/pi-args.mjs",
"target": "/app/pi-args.mjs"
},
{
"source": "/home/weichen/projects/Agent-System/deploy/pi-agent/result-v1.mjs",
"target": "/app/result-v1.mjs"
},
{
"source": "/home/weichen/projects/Agent-System/deploy/pi-agent/runner.mjs",
"target": "/app/runner.mjs"
},
{
"source": "/home/weichen/projects/Agent-System/data/dev/workspaces",
"target": "/app/data/workspaces"
},
{
"source": "/home/weichen/projects/Agent-System/data/dev/agent_sessions",
"target": "/root/.pi/agent/sessions"
}
]
},
{
"name": "shuimu-context-pg-dev",
"image": "sha256:ccc6e83d6e35e931dc7c5def2022729d5a6c370318d099181995567ff1fb4d6b",
"mounts": [
{
"source": "/home/weichen/projects/Agent-System/deploy/postgres/context_init.sql",
"target": "/docker-entrypoint-initdb.d/01-init.sql"
},
{
"source": "/var/lib/docker/volumes/agent-dev-context-pgdata/_data",
"target": "/var/lib/postgresql/data"
}
]
}
]
},
"status": "integrated"
}