diff --git a/policy/platform-admission.md b/policy/platform-admission.md index 093a38b4..9de5aef1 100644 --- a/policy/platform-admission.md +++ b/policy/platform-admission.md @@ -5,6 +5,22 @@ ## 已核实的差距 +本轮读取结果见 `.task/feature-merge-queue-policy-draft.md` 的原始 SELF 收据(2026-10-13; +命令 `python3 /tmp/mq-read-platform-20261013.py`)。观察对象 main 为 +`ff3fb4a7ebe432ab21c6b9668abc9823aca2fdd1`:禁直推/强推、陈旧分支阻断开启, +必需状态检查关闭,管理员强制合入覆盖未阻断。此为配置观察,不是拒绝路径通过证明。 +PR #513 的固定 head `9a3c205b0b93185172cb6b31f6793b3a4d71ea58` 状态列表实际包含以下三个上下文; +该次记录未核验它们的最终通过结果,不能据此合入该 PR。 + +```text +ci / test (pull_request) +ci / test-pg (pull_request) +ci / svc-realcombo (pull_request) +``` + +仓级 runner 查询为空,不代表实例/组织共享 runner 不存在;总体容量与预算仍待核验。 +执行以下操作前重查 main、保护配置和当次 PR/运行,不把本次读配置当长期授权或能力保证。 + 2026-10-05 读取 Dev 的 main 分支保护 API,观察到禁直推与陈旧分支拦截开启, 必需状态检查关闭、批准数为 0。读取历史 PR head 的状态 API,实际检查名为 `ci / test (pull_request)`。完整命令与输出由 evidence 工具记录在 @@ -15,8 +31,9 @@ 1. 在 Gitea 的 Agent-System-Dev 仓库设置中打开 main 的分支保护,先保留当前配置截图或导出。 2. 确认本次修复 PR 的固定 head 已实际运行 CI,并在提交状态中核对完整检查名。 -3. 启用必需状态检查,选择实际的 `ci / test (pull_request)`;保持禁直推及陈旧分支拦截。 +3. 启用必需状态检查,逐项选择当次核验的 test、test-pg、svc-realcombo 三个完整 PR 上下文;保持禁直推、禁强推及陈旧分支拦截。 不用仅在合入后运行的 `ci / test (push)` 替代 PR 检查。 + 建议同时启用“管理员遵守分支保护”,关闭管理员强制合入覆盖;该配置也由所有者亲手执行。 4. 批准数暂不随此修复自动调整。若另行启用非作者批准,先确认有可用且符合权限要求的 独立审核账号;不能把切换 Agent 角色当独立账号,也不能盲设阈值使单账号仓库无法交付。 5. 在隔离的测试 PR 上验证:无检查、检查失败和陈旧候选均不可合入;合法且检查通过的 @@ -26,6 +43,38 @@ 任一判据未满足时暂停合入并保留测试对象。配置调整失败由所有者对照保存的配置恢复; 不把“配置 API 返回成功”写成“门禁已有效”。其他组合仓分别核验,不外推 Dev 的结果。 +## 可评审配置与恢复 + +以下是待所有者执行的最小字段变更,不是已经执行的 API 请求;批准数、白名单和其他策略保持原值。 +在 Gitea 仓库设置 → Branches → main 对照这些字段保存即可。 +API 使用 PATCH `/api/v1/repos/weichen/Agent-System-Dev/branch_protections/main`,只改变指定字段, +语义依据 [官方 API](https://docs.gitea.com/api/operations/repo-edit-branch-protection/) 和 +[分支保护说明](https://docs.gitea.com/1.27/usage/access-control/protected-branches/)。 + +```json +{ + "enable_push": false, + "enable_force_push": false, + "block_on_outdated_branch": true, + "enable_status_check": true, + "status_check_contexts": [ + "ci / test (pull_request)", + "ci / test-pg (pull_request)", + "ci / svc-realcombo (pull_request)" + ], + "block_admin_merge_override": true +} +``` + +所有者先通过 GET 同一资源保存完整旧配置到仓外受保护文件;恢复只写回本次涉及的这六类字段, +使用保存时的实际值,避免覆盖同时发生的其他配置调整。根 AGENTS.md 的双钥匙边界对恢复同样适用,Agent 不自行恢复保护。 +凭据只从环境或受保护文件引用,不放请求 URL、日志或提交;不生成带 token 字面量的 curl 示例。 + +验证对象由所有者和协调者在动作前指定:优先隔离保护规则/测试 PR,记录实际 head/base 和预期副作用。 +需要作用于 Dev 时单独确认该测试对象及合入/撤回安排;不为构造测试直推 main、发布或改写历史。 +临时仓的 fixture CI 只证明保护机制,Dev workflow 的仓库 allowlist 和完整业务 CI 仍需在实际 Dev 候选核验。 +缺检查/失败/陈旧/无权推进的拒绝与合法路径全部有 GATE/REPLAY 后,再更新能力矩阵并判断是否可切换调度模式。 + ## CI 信任前提 本次 workflow 修复减少 checkout token 对候选代码的暴露;仍须由平台维护者核验