fix: install managed Python on Linux filesystems
GoodBuddy Agents / Validate Agent source (push) Canceled after 0s
GoodBuddy Agents / Build Linux arm64 Agent (push) Canceled after 0s
GoodBuddy Agents / Build Linux x64 Agent (push) Canceled after 0s
Cross-platform packages / Validate source (push) Canceled after 0s
Cross-platform packages / Authorize desktop packaging (push) Canceled after 0s
Cross-platform packages / linux arm64 (push) Canceled after 0s
Cross-platform packages / macos arm64 (push) Canceled after 0s
Cross-platform packages / windows arm64 (push) Canceled after 0s
Cross-platform packages / linux x64 (push) Canceled after 0s
Cross-platform packages / macos x64 (push) Canceled after 0s
Cross-platform packages / windows x64 (push) Canceled after 0s
Cross-platform packages / Publish GitHub and OSS release (push) Canceled after 0s

Managed Python installation rejected valid case-distinct terminfo symlinks in the pinned Astral archives on Linux x64 and arm64. Archive uniqueness now follows the target filesystem: Linux preserves case-distinct paths, while every target still rejects exact duplicates and unsafe entries.

Move the unpublished 0.12.0 bilingual release notes to the immutable-tag recovery version 0.12.1 and record the failed tag evidence.

Release note: 修复 Linux x64/ARM64 上托管 Python 因官方归档包含大小写不同路径而无法安装的问题。
This commit is contained in:
mesalogo
2026-09-03 10:31:14 +08:00
parent fb5a9c6f43
commit 3b8d129693
10 changed files with 152 additions and 38 deletions
@@ -6,8 +6,8 @@
| --- | --- |
| 文档类型 | 功能进度 |
| 状态 | 已实施,发布候选 CI 验收中 |
| 版本 | 0.4 |
| 日期 | 2026-09-02 |
| 版本 | 0.5 |
| 日期 | 2026-09-03 |
| 关联入口 | [工具执行环境](./README.md) |
## 当前结论
@@ -19,7 +19,9 @@
六个 OSS 镜像对象已发布并公开回读验证。托管 Python 继续按需下载,Desktop 发行包不额外
带入许可证文件。标准六平台打包任务已改用目标架构原生 Runner,并在打包前执行托管 Python
的真实安装、SSL、pip 和 venv 探针;`0.12.0` 候选仍需通过这组 CI 才能完成对应跨平台验收。
的真实安装、SSL、pip 和 venv 探针。不可变的 `v0.12.0` 尝试已通过 Windows 与 macOS,
但 Linux x64/ARM64 在发布前暴露 TAR 大小写冲突误判;修正后的 `0.12.1` 候选仍需通过
全部六个目标才能完成对应跨平台验收。
## 已完成
@@ -53,6 +55,8 @@
- [x] 用户选择的原生地址或 OSS 镜像在任务开始时冻结,同一次任务不回退。
- [x] HTTPS、重定向 Host、大小、SHA-256、取消和部分文件清理。
- [x] NuGet ZIP 与 Astral TAR 的 payload 限定、路径穿越防护、展开上限和安全链接处理。
- [x] 归档路径唯一性遵循目标文件系统;Linux 保留大小写不同的合法 TAR 条目,所有目标
仍拒绝完全重复路径,Windows/macOS 仍拒绝大小写冲突。
- [x] GoodBuddy-owned 暂存安装、发布、失败清理、更新保留和删除。
- [x] `python`、`python3`、`pip` 同源,`pip` 固定使用所选 Python 的 `-m pip`。
- [x] 发布前真实验证 Python 3.13.15、架构、标准库、SSL、pip,并创建和执行临时 venv。
@@ -62,7 +66,9 @@
- [x] 发布六个平台/架构的字节完全相同 OSS 镜像对象并公开回读校验。
- [x] 确认托管 Python 保持按需下载,Desktop 发行包不额外带入许可证文件。
- [ ] Windows ARM64、macOS x64/ARM64、Linux x64/ARM64 原生 CI 安装、SSL、pip、venv 探针;工作流已接线,等待 `0.12.0` 候选运行结果。
- [x] Windows ARM64、macOS x64/ARM64 原生 CI 安装、SSL、pip、venv 探针。
- [ ] Linux x64/ARM64 原生 CI 安装、SSL、pip、venv 探针;`v0.12.0` 因 TAR 大小写
冲突误判失败,等待 `0.12.1` 修正候选运行结果。
- [ ] 最低 Windows/macOS/glibc 支持矩阵和 Windows NuGet 签名核验。
- [ ] 真实 JavaScript/Python SKILL 成果及 Node/Python stdio MCP 调用。
- [ ] 自定义 Node/Python 在产品 UI 中的真实选择和任务执行。
@@ -75,6 +81,20 @@
## 已验证证据
### 2026-09-03 `v0.12.0` 失败标签恢复
- 不可变标签工作流 `33704483505` 的 Windows x64/ARM64 与 macOS x64/ARM64 托管 Python
安装、SSL、pip、venv 探针和打包成功;Linux x64/ARM64 在实际官方 Astral TAR 中发现
`share/terminfo/2/2621A` 与 `share/terminfo/2/2621a` 后被大小写无关去重误判为冲突。
- 最终 GitHub/OSS 发布任务跳过,GitHub 未创建 `v0.12.0` Release,Latest 仍为
`v0.11.14`;恢复版本按不可变标签规则提升为 `0.12.1`。
- 提取器改为按工件目标平台判断路径唯一性,并继续保留完全重复路径、路径穿越、安全链接
和展开上限校验。锁定的 Linux x64 上游工件重新下载后大小与 SHA-256 匹配目录,并确认
冲突项确为大小写不同的两个合法 symlink;临时审计工件已清理。
- Release Notes 校验通过;工具环境、工作流和 Release Notes 聚焦测试 `40/40` 通过,
live 安装项按本地发布规则未启用。最终 `npm test` 为 `3478` 通过、`51` 跳过,
typecheck 与 lint 通过;未运行本地 production build、package 或安装探针。
### 2026-09-02 完整实现
- 发布准备确认不把按需下载的托管 Python 许可证文件加入 Desktop `extraResources`、解包
@@ -5,8 +5,8 @@
| 项目 | 内容 |
| --- | --- |
| 状态 | 已实施,跨平台验收中 |
| 版本 | 0.2 |
| 日期 | 2026-09-02 |
| 版本 | 0.3 |
| 日期 | 2026-09-03 |
| 关联 PRD | [工具执行环境 PRD](./prd.md) |
| 功能逻辑 | [工具执行环境功能逻辑设计](./logic-design.md) |
| 相关架构 | [DeepSeek Harness Runtime 设计](../deepseek-harness/technical-design.md)、[SSH 远程主机与 GoodBuddy Agent 实现说明](../remote-host/technical-design.md) |
@@ -122,6 +122,8 @@ ELECTRON_RUN_AS_NODE=1 <process.execPath> <arguments...>
- 目录包含版本、平台、架构、字节数、SHA-256、原生 Target 和 OSS Target。
- OSS 对象直接复制原生工件字节,不重新压缩或转换。
- 安装包不无条件携带完整 Python。
- 归档条目唯一性按目标文件系统判断:Linux TAR 区分大小写,Windows 与 macOS 拒绝
大小写冲突,所有目标都拒绝完全相同的重复路径。
具体发行包和版本必须在实现前完成六平台工件、维护状态和 pip/venv 可用性核验。
@@ -349,7 +351,7 @@ Renderer 不能提交 PATH、环境变量、下载 URL、摘要、安装目录
## 15. 验证
单元测试覆盖设置迁移、探测、版本解析、shim 转义、PATH 顺序、失效路径、下载摘要和暂存
清理,以及原生/OSS 选择冻结、Target 缺失和禁止回退。
清理,以及原生/OSS 选择冻结、Target 缺失、禁止回退和目标文件系统的归档大小写语义。
Renderer 测试覆盖统一一级分类、三个外层 Tab、默认 Skills、Skills/MCP 定向入口、会话内
状态保留、MCP 内外层 tablist 隔离、键盘切换和窄屏单行滚动。