Repository navigation
fix(install): keep nested archives out of the parent Git identity - #6964
Conversation
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
loopx-agent
left a comment
There was a problem hiding this comment.
Reviewer: model_agent · gpt-6.1-sol · OpenAI · runtime_reported · reasoning_effort=max
Approval conclusion (author-owned PR; GitHub blocks formal self-approval)
动机
把源码归档解压在其他 Git 仓库中的安装者。旧实现把父仓库的提交、分支和脏状态写进安装记录;修复后仅记录源码本身的 Git 身份,未知来源保持未知。实际嵌套归档安装、doctor 和技能读回均不再借用父仓库身份,显式归档提交仍保留。本次只修复安装来源归属,不重新发布版本、不迁移已有安装,也不宣称全仓测试或长程收益已验收。
改动思路
统一现有 Git 来源 owner,同时覆盖安装器的选择与最终读回,避免各入口保留不同规则。本 PR 限于来源归属与相关回归;保留现有发布格式、显式覆盖及默认提升策略。不修改归档,也不通过增加开关来掩盖错误。Git 只是本机来源探测提供方;显式归档提交、已保存的发布记录和技能摘要各自保留既有优先级。安装器的自动提升与最终提交核验同时接入同一来源判断,因此修复可以完整走过实际安装,而不只是把某个输出字段改成空值。
具体改动
没有公开、已接受的专项规范规定“嵌套归档 Git 根”的识别算法;本次按独立复现的缺陷和现有调用方验收。现有安装指南提供来源与读回背景,不据此虚构新的准入义务。
关键代码讲解
_is_git_worktree_root:先检查源码根的 Git 标记,再比较 Git 返回的实际工作树根。linked worktree 的.git文件和解析后的目录别名都能进入正常路径;缺失、损坏及父仓库发现不能提供身份。Git 目录环境变量在来源探测中隔离,避免 hook 的上下文被当成源码本身。_source_metadata:复用现有 Git owner,删除独立探测实现。源码无 Git 身份时仍读取原有release.json,显式归档提交不会再被父仓库覆盖。_source_readback:保留显式提交、发布记录、Python distribution 的既有顺序,最后使用统一的 Git 来源。未知 Git 来源继续采用已有技能摘要机制,不新增持久状态。真实 pip 的最小 wheel fixture 增加这个依赖模块,编译与未编译安装的身份断言保持不变。resolve_default_promotion:自动提升只使用源码自身的提交;verify_default_promotion复用相同来源,仍核验显式提交。安装器原有不可用目标检查、显式提升和 canary 路线保留。
对主干的风险
最强反例是“manifest 修好了,但安装器还期待父仓库提交,导致合法归档安装失败”,以及“.git 必须是目录,误拒绝 linked worktree”。已从同一冻结基线执行九组完整对象对照:普通 checkout、linked worktree、目录别名,分别处于干净、脏、脱离分支的 tag 状态,三个 Python owner 的结果全部一致。
另外实际构建三个隔离安装:旧实现重现父提交/分支/脏状态污染;修复后的无 Git 归档保持未知,显式提交归档保留指定提交。各次安装、安装范围 deep doctor 及另行调用的普通 doctor 均成功。未向当前使用中的安装、服务或用户资料写入这些合成 fixture。
14 个完整回归模块通过 239 项,6 个原生 Windows 条件用例在 macOS 跳过。冻结测试和固定 Git fixture 时间下,基线 3 失败/10 通过,当前 head 同 13 项通过;额外的损坏标记、环境目录借用和自动提升用例也通过。标准 premerge 的 6 个直接检查、18 次选择的 smoke 执行全过,CQR 有效。保留原生 Windows 和全仓健康未验收的范围,不把历史失败改成通过。
语义与 CI 对齐
复用现有发布/技能 schema、GitRevisionRelation 和空值含义,没有新增协议词汇、迁移或通用工作义务。差异扫描未发现支持范围内的新词汇载体;动态及未支持形式不据此宣称已证明。按当前评审策略未查询、等待或依赖远端 CI,使用当前 head 的本地验证。
我的整体评价
APPROVE:本次来源归属修复的目标已实现,长程过程 preserved,用户体验 improved:安装与反复读回仍由现有 owner 完成,用户不用增加配置、确认或人工标注。四个生产文件合计减少 4 行,删除了两套重复探测;保留实际安装所需的格式兼容,没有借机扩展架构。收益限于可验证的来源准确性,不推断 Agent 长程效率提升。评审结论仅覆盖 909e4e11ddab06c9dfa244163606ab491aeb156d;合并仍须独立取得精确 head 的 merge-readiness,并沿用已有维护者授权。
English verdict: APPROVE — 909e4e11ddab06c9dfa244163606ab491aeb156d fixes parent-repository provenance for nested source archives, reuses the existing Git owner and preserves legitimate checkout/linked-worktree behavior. Verified with 239 passing tests (6 platform skips), nine matched comparisons, three real installs and the standard premerge gate. Native Windows and global-suite health remain unqualified.
Source archives unpacked inside an unrelated Git checkout currently inherit the container's commit, branch and dirty state. This can overwrite explicit archive provenance in
release.json, leak into doctor/skill readback, and misidentify the source used for installer promotion checks.Require the supplied source directory to own its Git working tree, including linked-worktree gitfiles and resolved symlinks. Manifest and skill readback reuse the existing Git diagnostic owner; parent remotes/ancestry and inherited Git-hook directory selectors cannot supply source identity. Explicit archive commits and saved release metadata retain their existing precedence. The installer uses that same identity for automatic promotion and final commit verification.
Validation at
909e4e11ddab06c9dfa244163606ab491aeb156d:中文:修复嵌套归档误用父仓库身份的问题,统一安装 manifest、doctor、技能读回与安装器的来源判断。保留正常 Git checkout、linked worktree、tag、脏状态及显式归档 commit;不改变发布版本或已有发布产物。