Skip to content

Releases: yingo-server/OhGithubLost

v7.2.2

Choose a tag to compare

@github-actions github-actions released this 09 Oct 23:14

v7.2.2(2026-10-09 · 正式版)

Fixes from a UI and interaction review.

主题:修复一轮界面与交互审查发现的问题。

修复 · Fixed

  • 打开含代码文件的 Gist 详情页会触发布局断言(编辑器组件在无界高度的列表里);
    现为每个文件给定确定高度。
  • 代码编辑器内打字时,键盘会遮住编辑区底部(自绘输入未纳入键盘避让判定)。
  • 首页与仓库页的「下拉刷新 / 加载更多 / 切换筛选」存在竞态:快速操作会丢失第一页、
    重复条目或显示与筛选不符的数据。相关列表改为排队刷新或丢弃过期响应。
  • 代码编辑器退出时无条件回写草稿:「保存成功」或「放弃修改」后草稿仍会残留,
    与操作语义相反。现在这两种情况不再回写,「放弃」会真正删除草稿。
  • 文件预览页加载失败后,「重试」成功仍显示错误页(错误状态未复位)。
  • 手动触发工作流时快速切换目标,表单参数可能与所选工作流不符(请求无序)。
  • 搜索与仓库页在控制器释放后仍可能收到通知(debug 下触发断言)。
  • 新建 Gist / 议题 / 仓库 / 发布 / 工作流参数 / 仓库设置等表单,
    返回时不再静默丢弃已输入内容(与代码编辑器一致的「放弃确认」)。
  • 删除仓库后,首页与搜索结果不再保留已删除的仓库。
  • 授予「所有文件访问」权限后,提示文案误显示为 DNS 相关(文案串用)。
  • 二进制 / 图片文件可经「打开方式 → 编辑器」进入并保存乱码内容覆盖原文件;
    现按文件类型禁用该入口。
  • 设置页账户行在页面重建时反复闪「读取中」(Future 在 build 中创建)。
  • 法律文本页快速切换语言时,正文可能与所选语言不一致。
  • 布局与动效:加速范围开关组与标题错位、条件内容无过渡、弹窗与折叠动画未接动效档位、
    协议弹窗勾选框位置、错误卡片边距、若干对齐与触控目标过小、
    两处缺失的无障碍语义、关于页硬编码颜色、字号滑块整页重建等。

v7.2.1

Choose a tag to compare

@github-actions github-actions released this 09 Oct 14:24

OhGithubLost v7.2.1

调整平台架构兼容性。

变更 / Changed

  • Web 与原生拆分为两个独立系统:本分支为原生版,只构建 Android / Windows / Linux;
    Web 在独立分支维护,产物发布到该分支的 app/<版本数字>/,不产生 GitHub Release。

产物 / Artifacts

Android arm64-v8a / armeabi-v7a / x86_64 / universal-APK / AAB、
Windows x64 / arm64、Linux x64 / arm64,每份均含 zip 与 7z。

v7.0.0

Choose a tag to compare

@github-actions github-actions released this 08 Oct 23:29

OhGithubLost v7.0.0

新增 Web 版(浏览器),并把它作为正式平台之一。
Adds a Web build and treats it as one of the supported platforms.

新增 / Added

  • Web 版(PWA):可在浏览器中使用,并可「添加到桌面 / 主屏幕」作为独立窗口打开。
    • 入口 app/index.html 用 iframe 包裹当前版本,地址长期不变;各版本产物在
      app/v<版本号去点>/(本版为 v700),app/versions.json 为清单。
    • 图标与三端同源(assets/icon/ogl_icon.svg 光栅化)。
  • 「添加到桌面」提示:Chromium(含 macOS)走标准流程,每次打开提示一次;
    iOS Safari 不支持 beforeinstallprompt(平台限制),iOS 上给出
    「共享 → 添加到主屏幕」的引导。已安装后不再提示;可在 设置 → Web 版 关闭。
  • Web 首次打开对话框:提示可配置加速服务,并写明不配置也能正常使用(下载走直连)。
  • tool/web_publish.py:按版本发布到 app/ 并重写入口页与清单。

变更 / Changed

  • 平台差异改用条件导入:此前 18 个文件直接 import 'dart:io'(浏览器无该库),
    现改为 import 'x_io.dart' if (dart.library.js_interop) 'x_web.dart';。
  • 新增依赖 http: ^1.2.2(自带浏览器实现)。
  • web.yml 在 main 与 web 两条分支构建 Web;其成败不阻塞五平台发布。

Web 与桌面不同的部分(均在界面与日志中如实标注)

  • 磁盘:无文件系统。键值走 localStorage;文件类存储仅会话内有效;
    令牌保险库仅内存持有,刷新需重新登录(避免长期令牌明文留在 localStorage)。
  • 网络:传输层用 BrowserClient。自定义 DNS / DoH 不可用(浏览器不提供裸 socket)。
  • 网络自检:Web 上为有限自检,只测 HTTP 可达性。
  • 下载:background_downloader 无 Web 实现,下载交给浏览器。因此暂停、续传、
    多连接分片、进度、文件大小、保存路径、sha256 校验均不可用 —— 如实标注,不做假动作。
  • 带 Authorization 头的下载会明确失败(浏览器不允许页面设置跨域鉴权头)。
  • 预签名不可用:fetch 读不到跨域 302 的 Location;实现如实返回「解不出签名」,
    不会改成跟随重定向(那会绕过「令牌只用于第一跳」的设计)。
  • 日志不落盘:Web 上 OgLLogFile.isEnabled == false,保留控制台输出。

已知限制 / Known limitations

  • Web 不提供:自定义 DNS / DoH、多连接分片、后台下载与续传、下载进度与校验、
    导出到 SAF、TLS / DNS 级网络自检。
  • iOS 需按引导手动「添加到主屏幕」(Safari 不提供安装接口)。
  • docs/ARCHITECTURE.md 等 5 份被注释引用的文档仍不存在(已逐处标注「以源码为准」)。
  • Linux 裸放安装包 3 / 6:rpm(arm64)缺平台定义;AppImage 的 ARCH
    环境变量未被接受。三种包在 zip / 7z 里都齐全。
  • macOS / iOS 原生应用自 v5.6.0 起弃用(Web 版在 iOS 浏览器可用,但不是原生应用)。

产物 / Artifacts

Android arm64-v8a / armeabi-v7a / x86_64 / universal-APK / AAB、
Windows x64 / arm64、Linux x64 / arm64,每份均含 zip 与 7z;
Web 产物按版本发布在分支的 app/ 目录下。

v6.5.0

Choose a tag to compare

@github-actions github-actions released this 08 Oct 15:04

OhGithubLost v6.5.0

修复一轮全量代码审查发现的问题。审查由 4 个子代理并行覆盖加速链路、平台与底座、
展示层、领域层与工具,结论逐条经人工复核。
Fixes from a full-codebase review run by four parallel sub-agents across the
acceleration path, platform layer, presentation layer, and domain/tooling;
every finding was verified by hand before being acted on.

变更 / Changed(原 v6.4.3,未单独发布,并入本版)

  • 删除内置加速通道与内置网络镜像:通道列表不再包含任何内置项,代码里也不再
    预置第三方代理地址(原 proxy.344977.xyz、ghproxy.net 规则)。要加速需自行
    添加通道地址;不添加则始终直连。
  • 删除降级回退:加速判定现在至多返回一项 —— 加速就是 前缀 + 原址,不加速
    就是原址,不再追加直连候选。所依据的判断是:静默降级会让「是否经过通道」无法
    从结果判断。
  • 加速适用范围可逐项开关(设置 → 网络 → 加速),共 4 类:Release 附件、
    Action 构建产物、仓库文件(下载与预览)、README 仓库内图片。默认全开,可逐项
    关闭。Action 运行日志不在此列 —— 它不经由加速判定。
  • 加速协议升版 v3 → v4,需重新同意:正文删去「本应用提供 / 维护通道」的表述,
    写明「不预置任何通道、不提供代理服务」,并说明失败时不会静默回落到直连。

修复 / Fixed(用户可感知)

  • README 仓库内图片在私有仓库返回 404:Image.network 没有 headers 参数,
    无法携带令牌,而私有 raw 匿名访问返回 404。此前「私有 + 已知情接受」会走到
    该分支;现在私有仓库一律回退到 API 取字节(该路径带令牌)。
  • 仓库内图片跨仓库串图:字节缓存只以仓库内相对路径为键,assets/logo.png
    这类同名文件在两个仓库间会命中同一份缓存。键改为 仓库@分支:路径。
  • 分页列表在缓存窗口内只显示第一页:缓存命中时只回填响应体、headers 为空,
    而翻页依赖 Link 头。现在缓存条目连同 link 一起存储并在命中时回填。
  • 同一文件第二次下载不再导出到 SAF:导出去重表只在失败路径移除 id,
    成功导出后 id 常驻;taskId 由 url + 文件名派生,重复下载会命中同一条目。
  • 自定义 DNS / DoH 开关对真实请求不生效:connectionFactory 只在传输层
    构造时安装一次,而 DNS 模式的写入发生在模块注册之后。现在每次发送前按当前
    策略校正(模式变化才重装,切回系统 DNS 时把 factory 摘掉)。
  • 登录页切换账号不清缓存:只清仓库缓存会留下 DNS 缓存与页面分页快照,
    多账号下是「用 B 账号看到 A 账号内容」的来源。现与「我的」页一致,清全部缓存。
  • 版本常量 kOgLAppVersion 停在 6.0.0,与 pubspec.yaml 相差三个小版本;
    该常量会写入日志与内核报告。已对齐。

修复 / Fixed(下载器与网络)

  • 分片任务在探测期间被移除后会重新出现在列表:_runRanged 在 await probe
    之后无条件写回快照。现在探测返回后先确认任务仍在,否则直接退出。
  • 任务表清理不完整:remove() 与 clearFinished() 漏清 _urlCandidates、
    _rangeConnections、_lastSample、_expectedSha256、_exportedToSaf。
  • dispose() 不取消进行中的分片下载:分片任务不等待返回,管理器回收后引擎
    仍在下载并调用已释放的通知器。现取消全部令牌并加 _disposed 守卫。
  • ix_presign 在 200 直链分支先读取响应体再注释说明「不能读」:每个直链下载
    都会多传输一遍完整内容。已移除。
  • isForbiddenHost 存在绕过形式:原先只识别点分十进制与 fe80: 前缀。
    现在先做归一化(整数形式的 IPv4、IPv4-mapped IPv6、方括号与尾点),IPv6 段
    按位判断(fc00::/7、fe80::/10),并支持 127.1 这类缩写。
  • 分片合并失败会留下不完整的文件:finally 只删分片,不删目标文件。
  • abs() 未拒绝绝对路径与空串(注释称会拒绝):/etc/passwd 会被静默剥掉
    前导斜杠并塞进根目录。现显式拒绝。

修复 / Fixed(界面文案)

  • 19 个界面文案取自错误的语言分片,显示为裸键名:设置页 13 处、仓库页 2 处、
    关于页 4 处。取法已改到键实际所在的分片。
  • previewSvg / previewUnknown 两个键在 6 种语言里都不存在(「打开方式」
    弹窗的 SVG 与未知类型条目显示裸键)。已补齐。
  • 三处硬编码中文改为 i18n:Gist 详情页的「公开 / N 个文件」、议题列表的
    「N 条评论」、评论作者缺失时的「未知用户」(复用已有的 common.unknown)。

变更 / Changed

  • i18n_scan.py 的分类规则收紧:LOG_CONTEXT 原含 log\w*(,该模式会命中
    AlertDialog(、showDialog(、catalog( 与 login(,使对话框附近的用户可见
    文案被计为开发者日志。现改为只列精确的日志入口。
  • docs/NETWORK.md 更正与代码不符的表述,补入「加速适用范围」与 web 端 CORS
    实测表;docs/README.md 补入索引,路径改为可点击链接。
  • 多处注释更正为与实现一致(平台分派范围、私有仓库口径、模块描述、
    IxChannel.auto 语义、日志文件名格式、诊断中的并发数文案)。
  • 删除无引用的 IoBootFileSystem;对仅测试使用的 ScriptedTransport 与
    无调用方的 DiskPaths 加注说明。

已知限制 / Known limitations

  • docs/ARCHITECTURE.md、BOOT.md、CONSISTENCY.md、DURABILITY.md、
    NAMING.md 被代码注释引用,但仓库中并不存在;这些引用尚未清理。
  • Action 运行日志不走加速(直接请求 api.github.com),加速适用范围没有它。
  • web 端:私有仓库的 raw 与「私有 + 加速」均不可用 —— 浏览器预检会拦截
    Authorization,而 Release 附件的签名地址不带 CORS 头。
  • Linux 裸放安装包 3 / 6:rpm(arm64)缺少平台定义;AppImage 的 ARCH
    环境变量未被接受。三种包在 zip / 7z 里都齐全。
  • macOS / iOS 自 v5.6.0 起弃用。

产物 / Artifacts

Android arm64-v8a / armeabi-v7a / x86_64 / universal-APK / AAB、
Windows x64 / arm64、Linux x64 / arm64,每份均含 zip 与 7z。

质量审计 20261009-0632(+8)

Pre-release

Choose a tag to compare

每小时质量审计报告(Agnes · 逐文件审查 lib/)。
Quality audit report (Agnes, per-file review of lib/).
报告文件:quality_audit.txt

v6.4.2

Choose a tag to compare

@github-actions github-actions released this 07 Oct 11:25

OhGithubLost v6.4.2

图标终于真的来自 assets/icon —— 顺手挖出两个一直在出厂的缺陷。
Icons now genuinely derive from assets/icon — which surfaced two shipped bugs.

修复 / Fixed

1. Windows 与 Linux 的图标自 v5.6.0 起一直是空白的

desktop_icon.render_rgba 解析出的图层里存的是 url(#bodyGrad) 这样的引用串,
而渐变表的键是 bodyGrad;查表写成 grads.get(layer["fill"].strip()),
永远查不到,于是每个图层都被跳过,输出是一张全透明的图。

症状不是报错,而是一个看不见的图标;构建全程"成功"。
现在:正确解析引用,并且渲染结果若全透明就直接报错 —— 不允许再交出空白图。

2. Android 图标从来没有跟过源图

注入器里是一段硬编码的矢量前景(盾牌 + 蓝色三角),与
assets/icon/ogl_icon.svg(深色多边形 + 金色双眼)完全不同。所谓"唯一事实来源"
名不副实。现在改为真实转换。

3. 自适应图标纵向偏移 3%

居中只按 X 算了横向平移,Y 套用了同一个值;源图重心是 (256, 272),于是图形在
安全区里整体下移。已改为 X/Y 分别计算。

变更 / Changed

  • 图标全平台统一从同一份 SVG 派生:
    • Android:矢量(VectorDrawable,自适应前景收在安全区内)
    • Windows:256 ICO;Linux:2048 PNG 母版
  • 传统启动图标放 mipmap-anydpi/:优先级高于具体密度,会盖过模板生成的 PNG,
    因此 API < 26 也不会残留 Flutter 默认图标。

新增 / Added

  • tool/svg_vector.py:SVG → VectorDrawable(纯标准库,渐变按
    objectBoundingBox 语义换算成绝对坐标)。
  • 注入器自检新增「图标管线」一节共 13 项断言:渲染非空白、全透明必须报错、
    矢量含真实几何与渐变、安全区生效、五个 Android 图标文件均写出。

已知限制 / Known limitations

  • 图标转换器只认 polygon + linearGradient(当前源图恰好只用这两者);
    源图若引入 path/circle/径向渐变,转换会明确报错而不是静默画错。
  • 私有仓库的 raw 无法像 Release 附件那样「先签名再加速」:GitHub 没给 raw
    提供签名机制,这是硬约束(详见 v6.4.1)。
  • Linux 裸放安装包 3 / 6:rpm(arm64)缺平台定义;AppImage 的 ARCH
    环境变量未被接受。三种包在 zip / 7z 里都齐全。
  • macOS / iOS 自 v5.6.0 起弃用。

产物 / Artifacts

Android arm64-v8a / armeabi-v7a / x86_64 / universal-APK / AAB、
Windows x64 / arm64、Linux x64 / arm64,每份均含 zip 与 7z。

v6.4.1

Choose a tag to compare

@github-actions github-actions released this 07 Oct 07:56

OhGithubLost v6.4.1

私有仓库也可以加速了 —— 但必须先过一道知情警告。
Private repos can now be accelerated — but only after an explicit warning.

变更 / Changed

  • 私有仓库加速的知情开关(accelPrivateRepoAccepted,默认关闭):
    • 位于设置 → 网络 → 加速通道;
    • 开启必须先过警告弹窗,且强制展示 3 秒后才可操作,按钮显示剩余秒数
      (防手滑连点 —— 这是「令牌离开设备」的唯一一道闸门);
    • 关闭不弹窗,语义是「不再询问且不再加速」,退回 API 直取。
      本项目不留「别再问我、但照旧送令牌」这种选项 —— 那等于把一次性的知情
      同意悄悄变成永久授权。
  • 公开仓库不受影响:加速行为与之前一致。

为什么要有这道闸门(都是实测结论)

  • 私有仓库的 raw 匿名 404,?token= 形式早已废弃,只有带
    Authorization 头才 200;
  • 内置通道会原样转发该头给 GitHub(带令牌 200 / 不带 404)
    —— 所以「令牌离开设备」是实测事实,不是理论风险;
  • 令牌进入第三方服务器后,其留存与用途不在本项目控制范围内。

新增 / Added

  • docs/NETWORK.md:全仓库网络连接清单 —— 出口主机 × 资源类型 ×
    取法 × 公私差异 × 复现命令。

修复 / Fixed

  • 补回 ogLAccelCandidates 在上一笔提交中被误删的 repoPrivate 参数
    (改签名时替换掉了,函数体却仍在引用它),该项曾导致 9 条构建腿与质量门全红。
  • 私有 + 已接受加速时必须带令牌:旧判据 proxied || !repoPrivate
    在此情形给出空头,代理拿到一个取不到内容的地址,必然 404。

已知限制 / Known limitations

  • 音频不做内置播放:Contents API 对超过 1 MB 的文件不返回内容。
  • 私有仓库的 raw 无法像 Release 附件那样「先签名再加速」 —— GitHub 没有
    给 raw 提供签名机制,这是硬约束。
  • Linux 裸放安装包 3 / 6:rpm(arm64)缺平台定义;AppImage 的 ARCH
    环境变量未被接受。三种包在 zip / 7z 里都齐全。
  • macOS / iOS 自 v5.6.0 起弃用。

产物 / Artifacts

Android arm64-v8a / armeabi-v7a / x86_64 / universal-APK / AAB、
Windows x64 / arm64、Linux x64 / arm64,每份均含 zip 与 7z。

v6.4.0

Choose a tag to compare

@github-actions github-actions released this 07 Oct 05:21

OhGithubLost v6.4.0

把界面语言从 15 种收敛到 6 种 —— 只留下真的能读的那 6 种。
Interface languages narrowed from 15 to 6: only those that were genuinely translated.

垂直切片 / Vertical slices

切片一 · 语言不再自欺 Language honesty

上一版埋着一个隐患:15 种语言里有 12 种的法律类正文实际是英文占位 ——
键在、目录在、值与英文一字不差。用户切到自己的语言,看到的仍是看不懂的
法律说明。而这方面恰恰最不容含糊:本项目对数据收集、令牌存储、
加速责任的承诺都写在这些文本里。

与其让 9 种语言挂个名,不如把留下的每一种都做到能读。保留的是:

  • zh 简体中文(原始表述)
  • zh_TW 繁體中文
  • en English
  • de Deutsch
  • fr Français
  • ru Русский

移除 ja ko es pt ar hi th vi id。
加回某个语种的前提是全部键都是真译文,不是把英文复制一遍。
OgLI18n.locales 的注释里写明了这条规矩。

切片二 · 三处语言清单必须一致 Consistency guard

这版真正的根因在这里。语言清单散在三处,任两处不同步都会出事,
而且两种故障方向相反、都很难在排查时想到根源:

  • OgLI18n.locales(Dart 运行时清单)
  • assets/i18n/ 下的目录
  • pubspec.yaml 的 assets 声明

pubspec 多声明 → 构建期「资源不存在」直接失败;
pubspec 少声明 → 构建通过,运行时该语言全是裸键名。

后者尤其险:打出来的包能装能用,只是某个语言下满屏 settings.theme。
v6.4.0 删了 9 个语言目录,若不同步 pubspec,踩的就是第一种。

tool/i18n_scan.py --check 新增该项检查。负向验证:故意在 pubspec 加一个
不存在的语言目录 → 报「pubspec.yaml 声明但目录不存在(构建必失败)」,
退出码 1。

新增 / Added

  • 语言清单三处一致成为 CI 门禁:OgLI18n.locales × assets/i18n/ 目录 ×
    pubspec.yaml 的 assets 声明,逐项比对,不一致即失败(退出码 1,已负向验证)。

变更 / Changed

  • 界面语言由 15 种收敛为 6 种:zh / zh_TW / en / de / fr / ru。
    同步更新 OgLI18n.locales、pubspec.yaml、README.md、docs/USAGE.md、
    docs/I18N.md。
  • 仓库页选项卡按语种分别处理(此前各语言混杂、口径不一):
    • zh / zh_TW:Code / Issues / Pull requests / Actions 保留英文,
      其余(分支 / 提交 / 设置)照常用中文。
    • de / fr / ru:译为各自语言的对应词。此前这些语言里混着英文残留 ——
      例如 fr 的 pulls 原是 Pull Requests、releases 原是 Releases,
      现已分别改为 Demandes de tirage / Versions。
    • 测试相应更新:语种数 15 → 6,并保留「中文语境下 GitHub 术语必须保持英文」
      这条断言。
  • 繁体中文修正少量沿用大陆用法的词:Gist 片段 → Gist 程式碼片段、
    我的加速 → 我的加速節點。

修复 / Fixed

  • OgLProjectInfo.licenseUrl 仍指向 AGPL-3.0:v6.3.0 换了许可,
    标识(licenseId)与名称(licenseName)都改了,地址漏改,还指向
    www.gnu.org/licenses/agpl-3.0.html。该常量目前无引用(死常量),但一旦有人
    用它生成「查看许可」链接,就会把用户送到一份与实际许可无关的全文。
    已改为 https://www.apache.org/licenses/LICENSE-2.0。
  • 私有仓库大图预览「用了 raw 却不带令牌」:超过 1 MB 改用 raw 链接时,
    代码写成 headers: proxied || !repoPrivate ? null : const <String, String>{} ——
    注释说「未走代理且私有仓库才带认证头」,实际给的是空 map,一个头都没带。
    私有仓库必然 404,而界面显示成「文件过大,无法在内置预览中加载」,
    把认证失败误报成文件过大。现在真的去取一步令牌。
  • 私有仓库被「加速已开启 → 不弹窗」规则误伤:raw 族的加速门槛本就是
    「内置通道 + 公开仓库」,私有仓库的 raw 永远不加速。旧代码只要检测到加速
    开着就不弹窗、直接走 raw,私有仓库用户于是什么都看不到就掉进上面那个必然失败
    的分支。现已显式排除私有仓库。
  • 私有仓库的音频「播放」按钮点了必然失败:该按钮把 raw 地址交给系统播放器,
    而系统播放器没有本应用的令牌。私有仓库现在只给「下载」。
  • 法律全文弹窗写死 height: 460:小屏 / 大字体 / 横屏下会溢出。
    改为按视口比例给上限。
  • 新增键 common.previewLoadFailed(6 语言),把「加载失败」与「文件过大」
    区分开 —— 超过 1 MB 已有专门面板处理,走到 errorBuilder 说明是认证 / 限流 /
    网络问题,说成「文件过大」会让人往错的方向排查。

已知限制 / Known limitations

  • 音频不做内置播放:Contents API 对超过 1 MB 的文件不返回内容,音频必然超限。
    预览页对公开仓库给「播放」(交系统播放器),私有仓库给「下载」。
  • Linux 裸放安装包仍缺失:rpm(arm64)因 Ubuntu 的 rpm 缺少 aarch64 平台
    定义、无法在 x86_64 宿主上交叉构建;两个 AppImage 因 appimagetool 未接受到
    ARCH 环境变量而退出码 1。三种包在 zip / 7z 里都齐全,功能不缺,
    只是未裸放直传。
  • 私有仓库的 raw 内容无法走加速(README 仓库内图片、仓库文件):raw 端点
    没有签名机制,交给代理等于送令牌。这是硬约束,不是取舍。
  • macOS / iOS 自 v5.6.0 起弃用。
  • Linux 需要 glibc ≥ 2.35(Ubuntu 22.04 一代及以上)。

产物 / Artifacts

Android arm64-v8a / armeabi-v7a / x86_64 / universal-APK / AAB、
Windows x64 / arm64、Linux x64 / arm64,每份均含 zip 与 7z。

Linux 裸放安装包

与 v6.2.0 / v6.3.0 相同,仍为 3 / 6:

amd64 / x86_64 arm64
.deb ✅ ✅
.rpm ✅ ❌ Ubuntu 的 rpm 缺少 aarch64 平台定义,无法交叉构建
.AppImage ❌ ❌ appimagetool 声称未收到 ARCH,退出码 1

三种包在 zip / 7z 里都齐全,功能不缺,只是未裸放直传。

v6.3.0

Choose a tag to compare

@github-actions github-actions released this 06 Oct 10:32

OhGithubLost v6.3.0

无障碍补全 + 恢复 UI 截屏矩阵 + 消除两套「可见性」定义。
Accessibility completed, the UI screenshot matrix restored, and two conflicting definitions of "storage visibility" unified.

新增 / Added

  • 无障碍语义标注(4 处):此前全项目 Semantics 为 0 —— 50 个图标按钮虽都有
    tooltip(Flutter 会自动取作语义标签),但自定义可点击区域没有任何语义标注,
    屏幕阅读器只能念出"按钮",用户不知道点了会怎样。
    • 标题栏窗口控件(最小化 / 最大化 / 关闭)→ Semantics(button: true, label: …)
    • 代码配色色板 → Semantics(button: true, selected: …, label: 颜色 #rrggbb)
    • 通知开关行 → Semantics(toggled: …, button: true, label: 消息内容)
    • 仓库页分支选择条 → Semantics(button: true, label: 选择分支)
    • 文案 4 键 × 15 语言。
  • 恢复 UI 截屏矩阵:从 2 张样本扩回 26 张(5 页面 × 亮/暗 × 横/竖 = 20,
    再加 3 平台 × 亮/暗的首页 = 6)。此前退化成冒烟测试后,UI 改动无法自动发现视觉回归。

变更 / Changed

  • 「落盘可见性」统一成一套判定。此前有两处定义:

    • OgLStoragePlan.userVisible:mode != internal(按档位)
    • OgLAppDirs.isUserVisible:tier ∈ {public, desktop}(按路径分级)

    两者在「桌面文档目录不可写、最终落到应用支持目录」时会给出相反结论。
    今天没露馅纯属侥幸 —— 界面接的是前者、测试锁的是后者,谁也没验证过它们一致。
    现统一为路径分级(唯一来源),SAF 档作为例外单列(用户授权过就可见)。
    新增测试把「无论什么档位,可见性都等于按路径分级的结论」钉成回归。

  • OgLAppDirs.categoryFolder 补上 artifact 映射。此前漏了 Action 构建产物,
    一旦被用到会静默落到 other/ —— 用户看不到任何异常,只是分类目录不对。
    补上映射,并新增测试把底座与中枢两份映射逐枚举比对(新增分类漏改一侧立刻红灯)。
    死代码转为防漂移护栏。

修复 / Fixed

  • window_windows.dart 缩进损坏:第 27/29/30 行等顶格,Linux 同位置正常。
    应是 v6.0.1 删除注入脚本那次重构的残留。
  • app_dirs.dart 注释与代码矛盾:_resolveRoot() ② 档注释原说应用外部目录
    「文件管理器可见」,而 isUserVisible() 明确判为不可见(Android 11+ 隐藏
    Android/data/)。注释会误导后续维护,已改为准确描述并说明为何仍选它作退路。
  • appTitle 三份字面量重复(windows / linux / macos):值上收到
    window_capability.dart 的 kOgLAppTitle,各平台保留同名常量指向它
    (不删符号),消除标题悄悄分叉的可能。

已知限制 / Known limitations

  • 音频不做内置播放:Contents API 对超过 1 MB 的文件不返回内容,音频必然超限。
    预览页给出「下载」动作,之后可在下载管理页交给系统播放器。
  • Linux 裸放安装包仅 3 / 6:deb(amd64 / arm64)与 rpm(x86_64)已产出;
    rpm(arm64)因 Ubuntu 的 rpm 缺少 aarch64 平台定义、无法在 x86_64 宿主上交叉构建;
    两个 AppImage 因 appimagetool 未接受到 ARCH 环境变量而退出码 1。
    三种包在 zip / 7z 里都齐全,功能不缺,只是未裸放直传。详见「产物」一节。
  • 14 种语言的加速协议文本仍为旧版(zh 已改,键集合未变故门禁通过)。
    法律 / 隐私文本在 15 种语言下不一致是合规风险,需按既定流程补齐。
  • 私有仓库的 raw 内容无法走加速(README 仓库内图片、仓库文件):raw 端点
    没有签名机制,交给代理等于送令牌。这是硬约束。
  • macOS / iOS 自 v5.6.0 起弃用。
  • Linux 需要 glibc ≥ 2.35(Ubuntu 22.04 一代及以上)。

产物 / Artifacts

Android arm64-v8a / armeabi-v7a / x86_64 / universal-APK / AAB、
Windows x64 / arm64、Linux x64 / arm64,每份均含 zip 与 7z。

Linux 裸放安装包:本版只产出了 3 / 6(如实说明)

amd64 / x86_64 arm64
.deb ✅ ✅
.rpm ✅ ❌ Ubuntu 的 rpm 缺少 aarch64 平台定义,无法交叉构建
.AppImage ❌ ❌ appimagetool 声称未收到 ARCH,退出码 1

三种包在 zip / 7z 里都齐全,功能不缺,只是未裸放直传。
裸放安装包是 v6.2.0 才开始产出的(此前从未真正发布过),缺失项后续补齐。

v6.2.0

Choose a tag to compare

@github-actions github-actions released this 06 Oct 05:54

OhGithubLost v6.2.0

下载链路重做(端点 / 路由 / 完整性)+ 文件预览 + 隐私承诺。九条构建腿全绿。
Download pipeline rebuilt (endpoints, routing, integrity), plus file previews and a privacy commitment.

新增 / Added

  • 文件预览:图片(可缩放)、SVG(矢量渲染)、XML 与文本(语法高亮)。
    在仓库页**长按文件 →「打开方式」**可在「内置预览 / 编辑器 / 浏览器」之间选择。
    File previews for images (zoomable), SVG (vector), XML and text; long-press a file
    in the repository page and pick "Open with".
  • Action 构建产物下载控件:运行详情页列出产物(名称 / 大小 / 有效期),
    已过期的条目直接禁用。
    Build-artifact download control in the run detail page; expired artifacts are disabled.
  • 编辑器长按菜单:复制 / 剪切 / 粘贴 / 全选(只读态自动裁掉剪切与粘贴)。
    Long-press selection menu in the code editor.
  • 引导页最后一页《开源协议与隐私承诺》(15 语言全文):
    保证不收集数据(无遥测 / 分析 / 广告 / 追踪 SDK,令牌只在本机),
    并明确排除可选的 Web 浏览器版本 —— 该功能默认关闭,开启前会再次单独提示。
    A licence-and-privacy page as the final onboarding step, guaranteeing no data
    collection while explicitly excluding the optional Web build.

变更 / Changed

  • 内置加速通道改为 https://proxy.344977.xyz/(单前缀转发完整原始链接),
    同意协议版本 1 → 2(地址变更属实质修改,需重新征求同意)。
    Built-in acceleration channel switched to proxy.344977.xyz; consent version 1 → 2.
  • 加速路由改为纯函数判定(ogLAccelCandidates):签名族(Release 附件 /
    Action 日志 / 产物)按 500KB 阈值;raw 族仅「内置通道 + 公开仓库」才加速。
    Routing is now a pure function: signed assets follow a 500 KB threshold; raw assets
    accelerate only on the built-in channel for public repositories.
  • 仓库文件取法按是否加速分流:不加速走 API
    (/repos/{o}/{r}/contents/{path} + Accept: application/vnd.github.raw,
    实测支持 Range,多连接分片不退化);加速才把 raw 链接交给代理。
    Repository files now use the Contents API with the raw media type when not
    accelerating, and only hand raw links to the proxy when accelerating.
  • README 仓库内图片:内置 + 公开时改走 raw + 代理 —— raw 不限流,而
    Contents API 认证后也只有 5000 次/小时,一次 README 几十张图很容易吃配额。
    README images use raw through the proxy on the built-in channel: raw is not
    rate-limited, unlike the 5 000/hour authenticated Contents API.
  • 登录页极简化:删掉「怎么拿令牌」引导、「向导进度」四步清单与重复标题,
    保留安全说明、输入、显示/隐藏、登录与游客入口(文件缩小 27%)。
    Login page simplified; the how-to guide and step checklist are gone.
  • 下载管理页的状态与分类标签改为走 i18n(此前是域层硬编码中文)。
    Download status/category labels are now localised.

修复 / Fixed

  • 私有仓库下载完全没带认证头(Release 附件 / Action 产物 / 仓库文件三处都会
    401/404)。私有仓库此前实际上无法下载。
    Private-repository downloads carried no auth header and failed outright.
  • 下载后不校验完整性:现在比对 GitHub 提供的 SHA-256;不匹配判为失败且
    不导出到 SAF;没有摘要可比对时如实标注「未校验」,绝不谎称已验证。
    Downloads are now verified against GitHub's SHA-256 digest; mismatches fail and are
    never exported. Resources without a digest are honestly labelled "not verified".
  • 文件名零净化:新增净化(只取末段、剔控制字符、拒 ..、绕开 Windows
    保留设备名、限长 120 并保住扩展名)。
    Download file names are now sanitised.
  • 非 http(s) 地址被放行:新增协议白名单,入队与全部降级地址一律校验。
    A scheme allow-list now rejects anything that is not http/https.
  • 跨域重定向的令牌外泄风险:此前依赖 Dart SDK 未文档化的"自动剥离
    Authorization"行为;现在显式不跟随重定向,并校验跳转目标(拒绝回环 / 私网 /
    链路本地,含云元数据 169.254.169.254)。
    Redirects are no longer followed implicitly, and redirect targets are validated.
  • 构建:Windows 两条腿 spec 从未被应用 —— Windows runner 无 PyYAML,注入器
    走了手写的兜底解析器,而它几乎解析不出内容,导致编译宏全部未注入。
    已重写为缩进驱动解析器,与 PyYAML 结果逐字段一致。
    Windows builds never applied the platform spec because the dependency-free YAML
    fallback parser was broken; it has been rewritten.
  • 构建:Android 五条腿未跟进 Kotlin DSL 迁移 —— 模板已生成
    build.gradle.kts,spec 仍指向 build.gradle,注入被静默跳过,
    compileSdk 停在 36 且 desugaring 未开。注入器现在缺目标文件即报错退出,
    失败点从编译期前移到注入期。
    Android legs had not followed the Kotlin DSL migration; the injector now fails
    loudly instead of silently skipping.
  • 发布:Linux 的 deb / rpm / AppImage 从未真正发布过 —— 发布作业没有
    actions/checkout
    ,工作目录是空的,tool/linux_packages.py 根本找不到;
    而该步骤带 || true,把错误整个吞掉。v5.6.0、v6.0.0、v6.2.0 的 Release 里
    裸放安装包数量均为 0。已补上签出步骤,并把「脚本不存在」改为响亮失败
    (单个格式打包失败仍只告警,不拖垮发布)。
    Linux .deb / .rpm / AppImage were never actually published: the release job had no
    actions/checkout, so the packaging script was absent, and || true swallowed it.

移除 / Removed

  • main 上的 Web 残留:.github/workflows/web.yml(挂在 push:[main],每次推 main
    都白跑一遍且带 contents: write)、tool/web_build.py、docs/WEB.md。
  • 5 个已被 platform_spec.yaml + 统一注入器取代的旧脚本
    (inject_android_gradle / inject_android_icon / inject_android_manifest /
    inject_desktop_shell / inject_windows_cmake)。
  • 2 个零引用僵尸文档(docs/ANIMATION_PLAN.md、docs/RELEASE_NOTES.md)。

已知限制 / Known limitations

  • 私有仓库的 raw 内容无法走加速(README 仓库内图片、仓库文件)。raw 端点
    没有签名机制,私有内容必须直接带令牌 —— 交给代理等于泄露令牌。这是硬约束。
    Raw content of private repositories cannot be accelerated: the raw endpoint has no
    signing mechanism, so delegating it to a proxy would leak the token.
  • 音频不做内置播放:Contents API 对超过 1 MB 的文件不返回内容,音频必然超限。
    请下载后用系统播放器打开。
    No in-app audio playback: the Contents API returns no content above 1 MB.
  • Web 功能不在隐私承诺范围内(见引导页最后一页);该功能默认关闭。
    The Web build is excluded from the privacy commitment; it is off by default.
  • macOS / iOS 自 v5.6.0 起弃用。
  • Linux 需要 glibc ≥ 2.35(Ubuntu 22.04 一代及以上)。
  • Linux 裸放安装包本版仅 3 / 6:deb(两架构)与 rpm(x86_64)已产出,
    rpm(arm64)与两个 AppImage 尚未产出。三种包在 zip / 7z 里都齐全,
    详见「产物」一节。

产物 / Artifacts

Android arm64-v8a / armeabi-v7a / x86_64 / universal-APK / AAB、
Windows x64 / arm64、Linux x64 / arm64,每份均含 zip 与 7z。

Linux 裸放安装包:本版只产出了 3 / 6(如实说明)

这三种包此前从未真正发布过 —— 本版第一次让它们开始产出,但仍未齐备:

amd64 / x86_64 arm64
.deb ✅ ✅
.rpm ✅ ❌ Ubuntu 的 rpm 缺少 aarch64 平台定义,无法在 x86_64 宿主上交叉构建
.AppImage ❌ ❌ appimagetool 未接受到 ARCH 环境变量,退出码 1

三种包在 zip / 7z 里都齐全 —— deb / rpm / AppImage 一并打进了
OGL-v6.2.0-Linux.*.zip 与 .7z,所以功能上不缺,只是没有裸放直传。
裸放安装包是本版新增的,缺失项会在后续版本补齐。