用途与实际影响
这项功能怎样使用
为什么需要它
仓库改名、改变公开范围或删历史会影响别人看到什么、还能找回什么;目标错一个字就可能改错仓库。系统只对这一项真实变化做判断,不把每次普通提交都叫来本人验证。
举个实际例子
比如我说“把仓库改名,但公开性和默认分支都别动”。系统先固定旧名称、仓库唯一 ID、可见性、默认分支,并确认新名称没有冲突;随后只执行改名。做完立即从新名称回读同一仓库 ID,并确认可见性和默认分支原样不动。任何目标漂移都会停下,而不是顺手改 owner 或其他设置。
最后我会得到什么
拿到明确的变更目标、执行前后状态以及是否还需本人验证;执行后从仓库现场核对。结果暂时不明时先查仓库,不重复发起可能已经发生的重大动作。
正常时
目标仓库、旧状态、授权与必要确认都吻合后,只执行点名的这一项,并回读真实仓库。
发现问题时
目标变化、安装版本不符或远端部分完成时保留已发生结果,只补真正没完成的步骤。
入口不可用或证据不足时
当前规则、仓库现场或本人验证入口不可用时停重大动作;普通只读与安全本地工作仍可继续。
从哪里开始
在已接入总索引的 AI 对话中明确提出仓库改名、公开性或历史等重大 Git/GitHub 变更,并写清唯一目标。
需要准备什么
- 当前仓库和预期新状态
- 哪些设置必须保持
- 可用的恢复或确认方式
从开始到拿到结果
- 1
固定具体变化
AI 记录旧仓库身份、目标值和不允许改变的设置,先查现场是否吻合。
- 2
按条件取得确认
由合格判断与现有本人验证入口决定是否能执行;普通提交和推送不因同属 Git 就附加这套步骤。
- 3
只执行并核对一次
回读同一仓库、目标状态和未改变项;结果丢失时先查现场,不重复发起可能已完成的动作。
技术实现与依据
这里保留实现、关键条件、精确入口、历史记录和验证结果。
9月9日 E126 保护合同的回读保留为历史;当前保护语义按 verified current(当前状态) E release 读取。来源bfc9f3f的九种类型化动作保留独立SecretBroker路由与具体失败原因,PRIVATE(私有)创建只保留既有验收记录,不外推其他动作和因子E2E(端到端验证)关键规则与设计选择
普通本地读取、可逆编辑、定向提交和已授权正常推送不自动升级为重大动作。
git-local 固定只允许 delete-local-ref、force-update-local-ref、replace-remote-url;github-api 固定只允许 create-repository、set-visibility、rename-repository、set-default-branch、delete-repository、transfer-repository。
create-repository 只负责创建空 PRIVATE(私有) 远端;配置 origin、首次 normal push、live Admission(仓库准入检查)、Owner 登记和 default-branch convergence 必须随后分别完成。
每种动作使用自己的精确参数、preimage 和 read-back(正式回读);改名不能顺带改 owner/visibility/default branch(分支),替换 remote(远端仓库) URL 不能变成任意 Git 命令。
是否需要人类因子由最高权限智能体结合真实目标和风险判断,不由适配器按动作名称机械决定。
Passkey(通行密钥)、TOTP(动态验证码)、Recovery(恢复码)、Account(账号验证)是四类因子;Google 和 Microsoft 只是 Account 类别的不同 Provider(提供方)。
已证层分别是当前源码、既有回归、2026-09-01的精确PRIVATE(私有)创建记录,以及2026-09-02的仓库元数据回读;没有本轮完整broker(代理服务)/人类因子E2E(端到端验证),不代表整条链已被判不可用,也不能外推其余动作通过。
C 盘第 79 代已退役;current(当前状态) E release 是当前保护合同。历史 6afc858 只证明当时修正的四类因子和 step_up 语义,不自动证明当前 consumer(使用方)。
本模块用到的名词
- Major action(重大动作)
- 会删除、转移、公开、重命名或改变仓库关键身份和恢复路径的 GitHub 现实操作。
- Typed effect(类型化动作)
- 九个固定操作之一,使用封闭字段、argv、endpoint 与回读合同;不是通用 shell 或 GitHub API 通道。
- Proposal(动作提案)
- Prepare 冻结的短时不可变候选,包含身份、preimage、参数、执行模式、语义判断和执行器指纹。
- Single-use capability(单次执行能力)
- Authorize/Consume 后只能对同一提案消费一次;漂移或重放都会失败。
- Execution mode(执行模式)
- dry_run 只验证能力且不得执行;execute 才允许在全部门成立后执行,二者不能互相升级。
- Human factor(人类因子)
- Passkey、TOTP、Recovery、Account 四类已登记证明中的任一类;是否需要由最高权限智能体判断。
- Semantic decision(语义判断)
- 结合用户真实目标、范围、影响和可恢复性决定允许、补验证、拒绝或先补证据。
- Mechanical adapter(机械适配器)
- 只核对签名、一次性凭据、目标、事实、执行器和边界并执行;不能自行扩大授权或决定人类下限。
- Preimage(变更前状态)
- 动作前真实仓库身份、可见性、默认分支或远端配置,用于判断漂移和恢复。
- Read-back(正式回读)
- 动作之后从 GitHub Owner 现场重新读取最终状态;命令返回成功不能替代它。
专业定义
创建空 PRIVATE(私有) 仓库、删库、转移、改名、改可见性、换默认分支或远端,都必须绑住精确目标并事后回读;普通 Git 不因此层层弹确认。
解决什么
重大动作要区分源码支持、某次真实动作完成和当前执行路线可用。当前活动保护规则保留精确目标、最高权限判断与因子边界;独立SecretBroker返回的具体原因不能被通用错误或旧C目录名掩盖。既有PRIVATE(私有)创建保留为历史结果,其他动作未重验就明确未重验。
当前怎样实现
- Adapter(执行适配器) schema(数据结构) 只有两个 effect(外部现实动作) family:git-local 的 3 个操作和 github-api 的 6 个操作;不接受 shell string、任意 executable、别名、重定向或任意 REST endpoint。
- Prepare 读取 live Admission(仓库准入检查) 与 GitHub metadata(元数据),冻结 repo database/node ID(稳定节点编号)、worktree(Git 工作树)/common-dir、visibility(公开或私有属性)/default branch(分支)、typed parameters、完整 argv、execution_mode、语义判断、preconditions 与 adapter(执行适配器)/native executor hashes,能力 TTL 为 30 秒。
- 最高权限智能体的 allow 冻结为 runtime_allowed,step_up 冻结为 human_required;deny、needs_evidence、suspected_tamper 在读取 broker(代理服务) 或执行 effect(外部现实动作) 前失败关闭。适配器不能按动作名自行要求或取消人类因子。
- Execute 依次重新取得现场事实、调用 AuthorityHost AuthorizeMajorAction、再取证并 single-use Consume,非 dry-run 只在 consume 成功后最终取证并执行固定 argv;任何 target、参数、preimage、assessment、executor 或 epoch 漂移都使旧能力失效。
- git-local 只使用固定 Git for Windows 与 ArgumentList,清除 Git/SSH/askpass/config 环境覆盖并禁用 hooks/credential helper;github-api 只调用固定 gh api endpoint 与 method。
- 类型化 create-repository 只接受 expected_absent=true、visibility(公开或私有属性)=PRIVATE(私有)、expected_local_branch 和 expected_head_oid;它要求 canonical worktree(Git 工作树) clean,并固定调用本人账号的空仓库创建接口。
- rename-repository 冻结旧/新 slug、同一 database/node ID(稳定节点编号)、visibility(公开或私有属性) 和 default branch(分支);新 slug 必须 absent,回读必须确认 identity 与除名称外的字段不变。其他 set/delete/transfer/ref/remote 操作也按各自 schema(数据结构) 精确绑定目标字段。
- Current(当前状态) E release 把人类因子固定为 Passkey、TOTP、Recovery、Account 四类;Google/Microsoft 归入 Account provider(账号验证提供方)。Git Owner(Git 事实责任方) 历史 6afc858 源码使用同一语义。
- 最高权限智能体拥有 allow(允许)、step up(补充人类验证)、deny(拒绝)和 needs evidence(先补证据)的语义判断。
- 机械适配器只能验证登记、签名、nonce(一次性随机凭据)、目标、事实、完整性、执行器和动作边界,不能按 effect(外部现实动作) 名称推导 human_required。
- highest_authority_verification_required 只说明本次身份或因子尚未通过,不代表用户没授权,也不代表 SecretBroker 已退役。适配器透传合格的 reason_code(具体机器原因),让人分清因子不足、运行时身份与 provider 故障;未知原因保持未知,不让用户重复已有授权。
- Owner 仓库已经原位升级合同与适配器:非执行判断 deny(拒绝)、needs_evidence(先补证据)、suspected_tamper(疑似完整性异常)在 proposal(动作提案)前失败关闭,allow(允许继续)可走 runtime_allowed(运行时允许),step_up(补充人类验证)才产生 human_required(需要人类验证)。
- 9月7日旧fetch文档修复2bad541已正常发布回读;bfc9f3f仍是当前重大动作与诊断机制来源。2026-09-01 PRIVATE(私有) daily-preferences创建与9月2日元数据回读只保留为历史结果;本轮没有重跑Authorize/Consume、其他八种动作或四类因子,独立provider安装与动作成功仍分层。
- 网页只展示公开安全的动作类别、规则差异和证据层,不公开因子秘密、账号身份、内部请求材料或可重放参数。
执行流程
- 1
先从九个固定操作中选择一个;把其精确仓库/ref/remote、旧值、目标值、恢复条件和 execution_mode 写进 typed JSON,不接受自由命令
- 2
最高权限智能体按真实目的、范围、可恢复性和异常证据给 allow、step_up、deny、needs_evidence 或 suspected_tamper;只有前两者继续
- 3
Prepare 取得 live Admission(仓库准入检查)/provider facts,冻结 identity、preimage、argv、参数、执行器 hashes 和 30 秒 TTL;dry_run 与 execute 不能互相升级
- 4
需要本人验证时,日常只核对所选登记方式和必要状态,并复用仍有效的验收证据;未指定时可选健康方式,指定路径故障不静默替换。只有实现、安装或接口变化时,才按实际影响做生产等价回归。验证后再次核对提案,单次Consume成功才执行该精确动作
- 5
执行前最后核对同一 target、参数、preimage、assessment、executor 与 AuthorityHost epoch;任一漂移就让旧能力失效
- 6
固定 Git argv 或固定 GitHub REST endpoint 只执行一次;native 返回非零或响应丢失仍先从本地/GitHub 现场回读
- 7
read-back(正式回读) 比较操作自己的目标字段:ref OID、remote(远端仓库) URL、repo identity/visibility/name/default branch(分支)/existence/owner;不以命令成功替代现实状态
- 8
create 之后另做 origin、normal push、default-branch convergence 与 Owner 登记;其他动作成功后也只报告精确字段变化,项目发布/恢复继续由对应 Owner 完成
边界
- 管理员权限、插件、账号登录或适配器存在都不产生用户授权
- 普通提交和正常推送不会仅因使用 GitHub 就自动要求人类因子
- 九个 typed effect(外部现实动作) 是闭集;不开放任意 shell、任意 Git argv、任意 gh alias/extension、任意 endpoint 或任意 payload
- Dry-run 仍验证授权与 capability,但 execute_allowed=false、capability_consumed=false,不调用 effect(外部现实动作) executor
- 人类因子值、恢复秘密、账号身份和一次性执行材料不进入公开网页
- 源码、安装态或正式 E 盘保护规则不一致时不静默选择其中一份,也不把源码修复或旧第 79 代快照写成生产 E2E(端到端验证) 已通过
- 公开页面只报告会改变用户判断的状态、缺口和完成证据
失败与恢复
- 本页没有本轮某项生产E2E(端到端验证),或真实调用发现入口/身份/能力失效
- 前者只标未重验,不单凭网页旧快照拒绝已授权动作;执行时现场核对精确目标并以真实adapter(执行适配器)的allow/deny/step_up/unavailable及回读为准。实际失败只停受影响动作,保留既有创建结果,普通工作继续。
- 删除/强更 ref 或替换 remote(远端仓库) URL 的旧值/OID 不再匹配
- 能力失效,保留当前 ref/remote(远端仓库) 并重新取证;不把目标漂移当作允许覆盖。
- 改名目标已存在,或改名后 database/node ID(稳定节点编号)、visibility(公开或私有属性)、default branch(分支) 变化
- 停止并报告 identity/read-back(正式回读) mismatch;不把另一仓库或顺带字段变更写成成功。
- set-visibility、set-default-branch、delete 或 transfer 后回读不一致
- 保留 state_unknown,先从 GitHub 现场确认最终 visibility(公开或私有属性)/branch/existence/owner;禁止盲目重放。
- 创建前同名远端已存在、登录 owner 不符或本地 branch(分支)/HEAD/clean 漂移
- create-repository 失败关闭;保留本地仓库,先确认是接入已有远端、改名还是修复本地 preimage。
- 空 PRIVATE(私有) 远端已创建,但配置 origin 或首次 push 失败
- 不再调用 create;从已回读的同一 PRIVATE(私有) identity 继续普通 Git 收敛,保留本地首个提交并在完成默认分支回读后再登记。
- 首次 push 成功但默认分支或 Owner 登记未闭合
- 把远端提交保留为已完成事实;显式修正/确认 default branch(分支),再刷新 baseline/generation(代际),不删除或重建仓库。
- 仓库身份、可见性或目标动作漂移
- 使本次能力失效,重新取得现场事实;不能拿旧仓库名或旧可见性继续。
- 人类验证取消、超时或 Provider 不可用
- 只暂停未形成的重大动作,不自动换另一因子,也不改变设备信任。
- 动作响应丢失或结果不确定
- 保留同一尝试并先从 GitHub 现场回读;禁止直接重放删除、转移、改名或公开操作。
- 正式回读与预期不一致
- 标记现实状态未收敛并进入恢复或人工协调;不以本地日志冒充完成。
真实入口
E:\GitHub总索引\docs\contracts\git.protected-major-actions.mdGit/GitHub 重大动作 Owner 合同;历史提交 6afc858 曾对齐四类因子与最高权限语义判断
E:\GitHub总索引\tools\Invoke-ProtectedGitHubMajorAction.ps1重大动作适配器;human_required(需要人类验证)只消费 step_up(补充人类验证),不再按动作类型机械派生
E:\.agents\releases\current-rules.json解析 current(当前状态) E 保护合同路径的当前指针;正文路径由 Inspect 返回
E:\GitHub总索引\AGENTS.mdGitHub 总索引的项目重大动作边界和公开安全规则
如何验证
- 2026-08-29 历史提交 6afc858 修复五因子与机械 human_required(需要人类验证)旧语义,并 normal push(正常推送)到当时的公开 main。
- 2026-08-31 Test-ProtectedGitHubMajorAction.ps1 重新通过:类型化 create 的 absent/PRIVATE/local branch(分支)/HEAD 绑定、固定 POST、dry run、竞争目标、失败响应与 read-back(正式回读) mismatch 均有回归;这是源码测试,不是现实仓库创建 E2E(端到端验证)。
- 合同与源码当前声明 3 个 git-local + 6 个 github-api 操作;回归覆盖 typed schema(数据结构)、多余字段/shell 拒绝、Prepare/DryRun/Execute、drift、single-use consume 与 read-back(正式回读),且不对真实仓库执行破坏动作。
- 历史 Test-ControlPlaneContracts.ps1、git diff --check 和 staged public-content hook(钩子) 通过;本次未把这些历史层升级为当前执行证据。
- 2026-08-29 当时的 GitHub API 与 ls-remote 对 refs/heads/main 回读均精确等于 6afc858d418714664a757a4950f65de8a9d3578d;它只是一条历史验收。
- 2026-09-01 直接回读源 main/origin=281344b…与 current(当前状态) create-repository 合同:只允许本人账号、空 PRIVATE(私有)、expected absent、本地 branch(分支)/HEAD/clean preimage,创建后的 origin/push 明确留给普通 Git 收敛。
- 2026-09-09 E126历史保护合同SHA-256=c40181f4d95fbda801058565747aa86ffdacc31265c540ddc128fdffa1087943。2026-09-09 当时 Inspect 返回活动 E131 及保护合同 SHA-256=c73283eabc9ece26f1fda913f1f2c9c7790a58baf68e4b9f047e20383dc2ad39;规则身份不证明九类受保护动作或四类因子的端到端验收,本轮未重跑。网站普通Git发布另行验证。
与其他模块的关系
它在 Publication Gate 已证明目标、内容和授权之后,单独处理少数高影响 GitHub 动作;Admission(仓库准入检查) 提供现场身份,Snapshot 只记录索引代际,二者都不能替代最高权限语义判断和正式回读。
