补齐单Agent受控本地Git提交

新增 project.git_commit 强制确认命令并同步前后端共享契约
绑定 git.inspect 安全快照、当前 revision 与 passed verification gate
使用临时 index、原子 update-ref、双 reflog 和跨平台 index 安装创建精确提交
限制动态隔离 child 提交并保护 Git objects、refs、reflog 与控制文件
补齐安全审计、fallback receipt、needs-reconciliation 和执行中恢复不重放
新增故障矩阵测试并同步 Runtime 技术方案、实施计划与项目决策记录
This commit is contained in:
AIGameCreator App
2026-07-14 14:39:56 +08:00
parent 4ef3dbd677
commit 86bbd046ec
11 changed files with 3425 additions and 59 deletions
@@ -4516,6 +4516,14 @@
- 决策:active process session 事实由 live registry、durable active/reconciliation record 和 Linux pending reservation 并集构成。capacity、cancel、final 和 runner idle 都必须先合并 live registry;record 被删除或改名不能让 live session 失败开放,损坏 record 仍读取失败关闭。non-Linux live record 的 started/ready/exec 使用同一 launch 时间点,避免跨秒后违反 v3 时间顺序。
- 边界:确定性 bridge、PTY、迁移、fast-exit、target-exec-failed 和零执行测试通过后,只能宣称本地 Runtime 链路完成;真实 Provider `process-session` 与 Runner kill 套件重新通过前,不新增 V1.11.1 Provider PASS 结论。
## 2026-07-14 AI 游戏创作 Agent Runtime V1.12 受控本地 Git 提交
- 决策:新增且只新增 `project.git_commit`,补齐单 Agent 修改、验证、`git.inspect` 审阅后的本地提交闭环。该工具强制确认,项目策略和 legacy 空策略都不能降为 `auto`,但可显式 `deny`。首版不开放 remote、分支、merge / rebase、reset、stash、tag、submodule 或 worktree 写操作,`.git` 对 `command.exec` 继续只读。
- 决策:提交绑定 `message / paths / expectedHead / expectedSnapshotFingerprint`,最多 12 个显式安全路径;执行前要求标准仓库根、附着分支、空 staged index、当前 HEAD 与安全工作树快照一致,并要求当前 run 的非零项目 revision 已有 passed verification gate。跨动作快照排除 `.agent`、凭据和其它隔离路径的正常控制面变化,但绑定全部安全变更状态和文件内容;安全源码、HEAD、revision 或 gate 任一漂移都在 Git 写入前失败关闭。
- 决策:Runtime 用临时 index 构造精确 tree,以真实 index lock、`commit-tree` 和带 expected old HEAD 的 `update-ref` 推进本地分支,再安装与新 HEAD 对齐的 index;只读取仓库本地作者身份并禁用 hooks、签名、pager、全局配置、凭据和网络。执行中崩溃或 ref 前移后的不确定失败进入 `needs-reconciliation` 且不得重放。
- 决策:动态隔离 child 禁止调用 `project.git_commit`,最终提交只由父 Agent 统一发起。`update-ref HEAD` 使用固定安全 reflog message 同步 HEAD / branch reflog;Windows index 安装必须使用 replace-existing + write-through 语义,不能用无法覆盖已有 index 的普通 rename。
- 审计:确认摘要不保存完整提交正文;成功 observation / receipt 只保留 parent / commit SHA、分支、路径数量、有限安全路径、message SHA-256 和剩余变更计数。已知 commit 成功但专用审计失败时,fallback terminal receipt 仍保存同一安全字段;执行中恢复不重放。编码级契约与验收矩阵见 `docs/technical/【技术方案】AI游戏创作Agent Runtime V1.1-2026-07-12.md` 的 V1.12。
## 2026-07-14 Agent Runner 临时端口耗尽与旧进程恢复
- 决策:Runner 正常仍优先 `bind(127.0.0.1:0)`。Linux 仅在该调用返回 `AddrInUse` 后懒读取 `ip_local_port_range / ip_unprivileged_port_start / ip_local_reserved_ports`,按 boot 随机化起点并扫描 61000-65535 中同时位于临时范围外、不低于实际非特权起点且未被 reserved ranges 占用的 loopback 端口;任一 sysctl 不可可信读取、候选耗尽或非占用类错误继续失败关闭。不得停止现有服务、绑定非 loopback 地址或移除 endpoint 私有 token。