用途与实际影响
这项功能怎样使用
为什么需要它
代码能推上去,不代表里面的资料适合公开,更不代表这次推送得到本人许可。这里分别看目标是否正确、实际内容能否公开和本轮是否获准。
举个实际例子
我说:“检查这批文件能否发到公开仓库。”系统逐文件判断真实内容;普通仓库名、路径和版本不会仅因看起来私有就全遮掉,能重复使用的密码则必须拦住。最后还要核对这一次的发布授权。
最后我会得到什么
得到三个独立答案:Git 目标与分支能否传输、实际候选是否适合当前公开面、这一次操作是否已经获授权。三道门都成立才会推送并从远端回读;任何一道不成立,只阻断对应步骤并说明缺口。
正常时
远端正确、实际内容适合目标可见范围且本轮已获准时才推送,并从远端回看。
发现问题时
候选文件含秘密、范围不清或目标仓库不对时停下对应步骤。
入口不可用或证据不足时
公开性或远端主分支暂时读不到时不发布,不拿简单扫描或旧记录代替判断。
从哪里开始
在 AI 项目对话中给出要发布的仓库、文件和目标分支,请它核对公开内容并完成已授权的正常推送。
需要准备什么
- 精确候选文件或提交
- 目标仓库可见性
- 本轮发布目标与授权
从开始到拿到结果
- 1
固定这批候选
AI 核对远端身份、可见性、要推出的内容及用户授权。
- 2
分别检查三件事
先看传输目标是否正确,再看这些内容适不适合目标可见范围,最后核对本轮是否获准推出。
- 3
回读远端结果
正常推送后从远端默认分支核对提交;网站或应用可用性还需目标项目另验,任何一门不清楚都不宣称发布完成。
技术实现与依据
这里保留实现、关键条件、精确入口、历史记录和验证结果。
发布三重门已落地;传输、内容与授权分开判断关键规则与设计选择
用户未授权外部写入时,只做本地实现和只读诊断。
PUBLIC(公开) 目标必须使用当前 visibility(公开或私有属性),并审查实际 commits、paths 和 content。
PRIVATE(私有) 备份/恢复目标可按范围 preserve exact content,但不能把内容复制到公开索引或聊天。
PUBLIC(公开) 页面可以说明有用且已核对的 PRIVATE(私有) 仓库名、普通路径和状态,但不给 PRIVATE(私有) 项目制造猜测 GitHub 链接,也不展开其秘密或私人正文。
dirty 或混合工作区必须显式候选文件;不使用 `git add .`。
Hook(钩子)/scan 零命中只是一层防护,不能替代人工/模型对候选语义的复审。
本模块用到的名词
- transport ready(传输就绪)
- 身份、分支、upstream(上游分支) 和同步状态支持已授权的 Git 传输。
- publication safe(发布安全)
- 实际候选在当前 visibility(公开或私有属性)、项目规则和内容边界下可以进入目标。
- authorization present(已有授权)
- 当前请求明确允许对应外部副作用;工具输出不能生成这份授权。
- canonical matrix(唯一规范矩阵)
- 完整 PUBLIC(公开)/PRIVATE(私有) 放行和否决条件只维护一份,其他文档只链接。
- defense in depth(纵深防护)
- Hook(钩子)、ignore 与 scanner 提供多层拦截,但任何一层都不是绝对安全证明。
专业定义
网络能推、内容适合当前公开面、本轮已经获授权,是三道彼此独立的门,缺一不可。
解决什么
如果把 admission(仓库准入检查) 的 proceed 当成 publication 批准,公开仓库可能接收秘密或私人正文;如果把“出现敏感信息”机械等同于“必须脱敏”,又会破坏已确认 PRIVATE(私有) 恢复目标的可恢复性。
当前怎样实现
- 唯一矩阵按用户授权、repo identity、sync、dirty、visibility(公开或私有属性)、candidate exposure 和目标类别逐层判断。
- PUBLIC(公开) 路径分类由 PublicExposurePolicy.psd1 统一给 admission(仓库准入检查)、Hook(钩子) 与 `.gitignore` 使用,避免三套规则漂移。
- 真实 `.env` 家族中的可用秘密、私钥、令牌、恢复材料和可直接滥用载荷失败关闭;日志、数据库、原始目录或普通个人数据只是内容审查候选,不因路径形态自动升级。
- pure delete、删除 secret-shaped 行和从敏感路径 rename 到安全目标属于修复;rename 进入敏感目标继续阻断。
- Git Hook(钩子) 通过 NUL-delimited(以空字符分隔) staged paths 与新增 diff 内容拦截高置信模式,只安装在总索引自身 bootstrap/repair。
- 项目规则与 candidate diff 决定业务是否适合公开;总索引不生成 V1 publication_decision。
执行流程
- 1
确认当前用户请求是否允许外部 effect(外部现实动作)
- 2
取得新鲜 repo identity、visibility(公开或私有属性)、目标 branch(分支) 与 refs
- 3
限定本次 candidate commits、paths 和 staged/unstaged 内容
- 4
按 canonical path policy 和语义边界复审公开暴露面
- 5
运行项目测试和必要的 defense-in-depth scan
- 6
normal push 明确目标后,从远端默认分支回读 commit
- 7
部署或网页结果由目标项目另行验证,不由 Git receipt(执行回执) 冒充
边界
- Get-ProjectAdmission V1 不输出 publication_decision
- Install-GitHook.ps1 -Inspect 只比较预期与现役 pre-commit 的哈希并返回 current(当前状态)/missing/drift(当前一致/缺失/漂移);检查不创建目录、不写 Hook(钩子),不把每次准入变成重装。
- PUBLIC(公开) 历史 visibility(公开或私有属性) 不可代替本次现场 visibility(公开或私有属性)
- 模板后缀不豁免 secret content
- PRIVATE(私有) 不等于可以向公开页面、日志或聊天泄露内容
- PRIVATE(私有) 也不等于普通仓库名、公开安全路径或 Git 技术事实必须整类消失;只按实际值与当前用途判断
- 本模块不替目标项目决定 deploy、Pages 或用户验收
失败与恢复
- identity、visibility(公开或私有属性)、target 或 candidate 不明确
- 停止写入/发布,补最能降低不确定性的证据。
- PUBLIC(公开) candidate 命中秘密或私人原始材料
- 只提交移除、安全重构或公开安全摘要后的候选。
- transport behind/diverged/conflicted/detached
- 按项目语义 update/reconcile 后重新取证。
- Hook(钩子) 通过但语义仍可能泄露
- 继续人工/模型候选复审;不得以零命中放行。
- PRIVATE(私有) 恢复目标可见性可能变化
- 重新读取 live visibility(公开或私有属性);未确认前不继续敏感 push。
真实入口
E:\GitHub总索引\05_规则与模板\推送放行与否决规则.md唯一 transport/publication/authorization 矩阵
E:\GitHub总索引\docs\contracts\git.push-publication.mdpublication 分离和 V1 边界
E:\GitHub总索引\tools\PublicExposurePolicy.psd1敏感路径 canonical cases
E:\GitHub总索引\tools\Install-GitHook.ps1总索引自身 Hook(钩子) bootstrap/repair
E:\GitHub总索引\tests\Run-UnitTests.ps1Hook(钩子)、ignore、rename/delete 与内容扫描回归
如何验证
- 2026-08-29 完整 Admission(仓库准入检查) 回归 exit 0,包含 PUBLIC(公开) exposure、pure delete、rename 和目标工作树 gate。
- Test-ProjectAdmission.ps1 对中央 policy 的真实 `.env`、模板、私钥、凭据配置、数据库与普通安全路径逐案验证。
- Run-UnitTests.ps1 覆盖中文/空格路径、NUL delimiter、模板秘密内容、type change、pure delete 和双向 rename。
- 合同测试要求完整矩阵只有一个副本,旧脱敏文档只保留 redirect role。
- 2026-08-29 live admission(仓库准入检查) 证明 PUBLIC(公开)/main/0-0 仍因 dirty 返回 warn,现实示例符合三层分离。
与其他模块的关系
它消费 Admission(仓库准入检查) 与 Worktree(Git 工作树) Sync 的 Git 证据,但额外要求候选内容和用户授权;Snapshot 模块只负责记录事实,不会替它批准发布。
