Conversation
Translation settings were optimistically updated without awaiting or surfacing write failures, so users could see enabled language and shortcut states that were never persisted. This keeps the fix inside the Translation page: all three save paths now show saving/saved/failed feedback, catch failed writes, and refresh preferences after failed preference persistence to roll back local state. Constraint: Follow the new beta-first PR workflow from #327. Rejected: Refactor HotkeySettingsContext queue behavior | issue explicitly excludes queue redesign. Confidence: high Scope-risk: narrow Directive: Keep Translation page save feedback local unless SelectionAsk receives the same treatment in its own issue. Tested: npm run build Tested: git diff --check Related: #314
…e-feedback 修复翻译页保存失败无提示
把分支模型从「dev/main」改造为「Beta/正式版」双渠道,渠道语义直接由分支名承载: - `beta` — Beta 渠道(开发版),默认分支、集成缓冲区,所有 PR 一律打到这里。 Beta 包不推送给普通用户,只面向主动加入 Beta 渠道的用户。 - `main` — 正式版渠道(Stable),始终可发布。仅由维护者在双端冒烟测试通过后从 beta 合入;普通用户默认拿到的就是这条线。 文档与 CI 改动: - README.md / README.zh.md:把「Contributing workflow / 贡献流程」章节 改写为 Beta/正式版双渠道,含分支流向 ASCII 图、6 条核心规则, 以及「Beta 不溢出正式版」的隔离要求。 - CLAUDE.md:把 `### Branch & contribution workflow` 改名为 `### Branch & release-channel workflow`,明确「分支名=渠道名」。 - ci.yml:触发分支从 [main, dev] 改为 [main, beta]。 仓库侧已同步: - 远端 dev 分支已重命名为 beta(git push origin dev:beta + 删除旧 dev) - GitHub 仓库默认分支已切到 beta - release-tauri.yml 用 v*-tauri tag 触发,跟分支无关,发版机制不受影响 Beta 包的 opt-in 分发机制(per-channel updater endpoint + 设置页开关) 将在独立 PR 中接入。在它落地之前,所有 v*-tauri tag 都按正式版对待, 不要从 beta 分支直接打 tag。 Co-authored-by: baiqing <lbx12309@icloud.com>
让 release pipeline 根据 tag 名后缀区分 Beta / 正式版渠道,是 opt-in beta
机制的服务端基础。客户端读取的 endpoint 在 PR-B-2 接入。
约定:
- `v<v>-tauri` = 正式版渠道(stable)
- `v<v>-beta-tauri` = Beta 渠道(beta)
release-tauri.yml 改动:
- 在 jobs.build 顶层加 OPENLESS_RELEASE_CHANNEL job-env,由
endsWith(github.ref_name, '-beta-tauri') 决定;workflow_dispatch 与
非 tag 触发回退为 stable,不改变现有 dispatch 行为。
- Write updater manifest step 把 OPENLESS_RELEASE_CHANNEL 透传给脚本。
- Upload-artifact 的 manifest path 改为 `latest-{tgt}-{arch}*.json` glob,
让 stable 和 beta 两种文件名(或 mirror 变体)都能被收集,避免
if-no-files-found 在 beta release 时挂掉。
- Create release 的 prerelease 改为
`${{ env.OPENLESS_RELEASE_CHANNEL == 'beta' }}`:beta tag 自动标
GitHub prerelease(UI 折叠 + 默认不算 latest),stable 保持不变。
write-updater-manifest.mjs 改动:
- 读取 OPENLESS_RELEASE_CHANNEL(默认 stable);非 stable / beta 时
fail-fast,避免拼错 env 静默走错路径。
- beta 渠道时 manifest 文件名加 `-beta` 后缀:
latest-{tgt}-{arch}-beta.json
latest-{tgt}-{arch}-beta-mirror.json
正式版用户的 endpoint 永远指向不带后缀的旧文件名,不会被 beta release 覆盖。
向后兼容:
- 现有 v1.2.23-tauri 等 stable release 行为完全不变(文件名、prerelease=false 沿用旧逻辑)。
- workflow_dispatch 不打 tag 时也照常构建 + 不上传 release。
发版后 checklist(PR-B-2 文档段会写进 CLAUDE.md):
- 推 v<v>-beta-tauri tag → GitHub Release 应标 prerelease 且只含
latest-*-beta.json
- 推 v<v>-tauri tag → 正式 release 且只含 latest-*.json(不带后缀)
Co-authored-by: baiqing <lbx12309@icloud.com>
* feat(updater): manual-download Beta opt-in in Settings → About
接入 PR-B-2:客户端「加入 Beta 渠道」开关 + 文档完善。
为什么不走 auto-update 切 endpoint:
tauri-plugin-updater 2.10 的 Builder 不暴露 endpoints() 运行时 API,
endpoints 只能从 tauri.conf.json 编译期读,不能跑时切。继续用 plugin
自带 check 路径意味着 Beta 包会被推到所有用户,违背「Beta 不溢出正式
版」原则。fork plugin 或自实现 update flow ~500 行高风险,本轮采用
最稳路径:plugin 永远只读正式版 manifest(旧文件名),Beta 改成手动
下载——Settings 里展示最新 prerelease 的下载入口,用户点了跳浏览器。
Rust 端:
- types.rs:UpdateChannel enum (Stable | Beta) + UserPreferences::update_channel
字段;UserPreferencesWire / Default / Deserialize 全套兼容(旧 prefs 反序列化
默认 Stable,迁移无痛)。
- commands.rs:三个新命令——
- get_update_channel:读 prefs
- set_update_channel:写 prefs,复用 persist_settings + emit prefs:changed
- fetch_latest_beta_release:reqwest 调 GitHub Releases API,过滤
prerelease=true 且 tag 以 -beta-tauri 结尾的最新一条
- lib.rs:三个命令注册到 invoke_handler
前端:
- ipc.ts:UpdateChannel + LatestBetaRelease 类型 + 三个 invoke 包装
- SettingsModal.tsx:在 AboutMini 末尾加 BetaChannelControl 组件——
Toggle 切换渠道;切到 beta 时拉一次最新 prerelease 信息,展示
「最新 Beta:v1.x.x-beta-tauri」+「前往下载」按钮(openExternal 跳
GitHub release 页面)+ 重新查询按钮。切回 stable 立即清空状态。
- Settings.tsx:把 Toggle 组件 export,让 SettingsModal 复用同一开关样式。
- i18n 五个 locale(zh-CN / zh-TW / en / ja / ko)的 settings.about 都补
齐 betaChannel* 9 个 key(zh-CN 是 source of truth)。
文档:
- README.md / README.zh.md:把 PR-A 的「opt-in,尚未接入」占位换成
manual-download 路径的说明 + tag 约定。
- CLAUDE.md:把「Channel distribution (in progress)」整段重写为已接入
状态,含 tag 约定 / wiring 位置 / 新加的 release verification checklist
(5 条,发版后一定要走一遍,含 stable/beta 双向 cross-check 与 endpoint
采样验证)。
cargo check + npm run build 本地都过。本 PR base = chore/branching-workflow
(PR-A),等 PR-A merge 后会自动指向 beta;与 PR-B-1(CI 端)解耦,可独立
review / merge。
* docs(readme): refresh Status / Architecture / Maintainer release checklist
把 README 的产品/发版描述更新到当前真实状态,配合 PR-A / PR-B 系列工作流改造:
Status (v1.2) 章节:
- 把云端 ASR / 本地 ASR / 润色 provider 三类拆开列;本地 ASR 提及内置
Qwen3-ASR + Windows Foundry Local Whisper 两条线
- 加翻译热键、QA 浮窗、Beta 渠道 opt-in、Homebrew Cask 分发渠道四个要点
- 把「中英双语」改成多语言 UI(实际已支持 zh-CN / zh-TW / en / ja / ko)
Architecture 顶句:
- 由「Auto-updates ride on Tauri updater plugin」改为双渠道描述:Stable
(v<v>-tauri) 自动推送,Beta (v<v>-beta-tauri) 手动下载
Maintainer release checklist:
- 完全重写为双渠道流程:通用准备(5 处版本号 + 冒烟 + secrets)+
Beta 流程(在 beta 分支打 v<v>-beta-tauri tag)+ 正式版流程
(beta→main 后在 main 打 v<v>-tauri tag)
- 把 CI 的 Verify version sync 5-file 校验显式提一次,避免维护者
漏改 Cargo.lock / package-lock 撞 CI 红灯
- 末尾引用 CLAUDE.md 的 5 步 release verification checklist
Roadmap 章节保持原样(多个项目实际状态我无法在不引入回归的前提下
确认,避免误判)。
* docs: drop reference to non-existent bump-version.sh; describe manual bump
---------
Co-authored-by: baiqing <lbx12309@icloud.com>
|
Codex usage limits have been reached for code reviews. Please check with the admins of this repo to increase the limits by adding credits. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
第一次 `beta → main` 同步合并。把刚刚落地的两渠道工作流改造(PR-A / PR-B-1 / PR-B-2)以及其间合入 beta 的常规 feature/fix(#328 等)一起 promote 到 main,让正式版渠道的代码与 beta 对齐。
包含的 commits
```
fd79a05 feat(updater): manual-download Beta opt-in in Settings → About (#332)
ec9584e feat(release): split updater manifest by channel from tag suffix (#330)
2fe5f2e docs: introduce Beta/Stable two-channel branching workflow (#327)
0b8c7b4 Merge pull request #328 ...
829fea3 Expose translation save failures before users trust stale settings
```
这之后会发生什么
建议合并方式
Merge commit(不 squash),保留 5 个独立 PR 的历史,便于 `git log main` 回溯。