Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .release-please-manifest.json
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
{
".": "2.2.3"
".": "2.2.4"
}
56 changes: 56 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,62 @@

## [Unreleased]

## [2.2.4] - 2026-09-22

两处用户可见修复,其余是**发布与 CI 链路的收口**(这个版本存在的理由之一:v2.2.3 之后 main 上
攒了一批"门禁本身错了"的修复,需要一次可安装的锚点)。

### Bug Fixes

* **engines:** 12GB 显存档**直切引擎必 503**(#84)—— 切换路径先做显存预检再清场,于是预检永远
看见"上一个引擎还占着"。现在先清场再预检,报错文案给可操作下一步(哪个引擎占了多少、要释放到多少)。
* **security:** persona / 历史卡片把数据拼进 `onclick="…"` 属性(#99)—— 名字里带 `'` 就能逃出
属性上下文。改为事件闭包接线(数据进 JS 闭包,不进 HTML 属性),信息面板的**同源裸插值**一并收口。

### CI / 发布链路(不改运行时行为,但改"能不能信这条流水线")

* **性能门禁**(issue #118)判据从 `--benchmark-compare-fail=mean:20%` 换成
**`median` 单向 > 50%**,逐条打印对比表而不是整段重定向到 step summary;同代码在 runner 间的
实测摆动是 **17%–80%**,而旧判据方向也不对(被它判成"回退"的五个例子**全是变快**)。
* 更深的第二层:门禁的"三级基线存储"**三条都不通** —— L1 `actions/cache` 在
**10.23 GB / 配额 10 GB** 下两小时就被驱逐(main 存的基线,同一天 PR 侧 `Cache not found`)、
L2 那两步的 `if startsWith(github.ref,'refs/tags/')` 在现有触发器下**永不成立**(三个已发布
Release 的资产里确实没有基线文件)、L3 `benchmarks/baseline.json` 是 **0 条占位且无人读**。
现在对比按 L1 → L3 退让、空占位单独 `::warning::`(不把"没数据"过成"通过")、读取器同时认
storage 顶层与 `{"benchmark":{…}}` 两种 JSON 形状,L3 用 main 真 run 的 artifact 填了 5 条 median。
* **release-please 的 `extra-files`** 第一次在真 release PR 上被验:`type: yaml` 不是"改一个字段",
而是 parse 后整份重排 —— `config.yaml` 被改成 **160 增 / 160 删、注释行 96 → 0**。已摘掉该条目
(`config.yaml` 归手工同步),并加闸:类型只允许 `json|toml|generic`、逐条走 jsonpath 确认
"今天确实命中"、以及拦"RP 抬了 `$.version` 却没抬同文件里的 `changelog`/`release_date`"。
* 记录一条会咬人的机制:**release PR 上看不到任何 CI 检查**(GitHub 固定行为:`GITHUB_TOKEN`
产生的提交不再级联触发 workflow)。所以手工同步位不会红在 release PR 上,只会红在发布之后的
main 上 —— 合 release PR 前必须本地跑版本位一致性。v2.2.4 因此走手工路径(#120 关闭)。
* **§7b 依赖复算**跑完 ①②③:候选锁与真锁**不同源**(97 vs 92 条、一致 74、16 条版本变、
7 条 huggingface-hub 的 extras 链来历未定、2 条新增)。`transformers` 复算给 4.52.4 会让
引擎血统闸红,`protobuf` 直接给到 7.36.2 但 gencode 兼容要到 import 期才暴露。
**候选锁未采纳**,真锁继续手工钉;④ 的 GB 级真装仍待验收。
* 治理文件:`.gitattributes` 给 `/.gitattributes`、`/.mailmap`、`Dockerfile` 锁 LF;
`.mailmap` 补上此前漏掉的 `TTS MultiModel Dev` 两个变体(**249 个提交**,shortlog 上原本
多出第三个"贡献者");`CODEOWNERS` 指向真实路径(注意:`require_code_owner_reviews` 未开启,
它目前**拦不住任何合并**)。

### 版本语义

按约定式提交算也是 patch(`fix:` / `docs:` / `ci:` / `chore:`,无 `feat:`)。
`.release-please-manifest.json` 随本次一起抬到 2.2.4,避免 release-please 在下一条 release PR
上把版本号再往抬一格(手工与自动两条路互踩,见 `docs/release-governance.md` §1)。

### 已知未覆盖(比 v2.2.3 多两条)

* 资产仍是 **wheel + sdist + SHA256SUMS**:不含 26 GB 便携分卷(core/torch/model)与桌面增量包,
`Setup.exe` 的**真机安装验收**也没做过(该链路无任何 workflow 覆盖)。
* `ghcr.io/.../tts-multimodel:2.2.4` 是否真的产出,本机无从核对:匿名拉 manifest 得 403、
`gh api packages` 得 404(token 无 `read:packages`)。镜像由 `docker-publish.yml` 在
`v*` tag push 时按 `type=semver` 产出,且被 Trivy HIGH/CRITICAL 阻断逻辑把关。
* §7b 的 ④(复算锁真装 + 三引擎复验)未做,#89/#90/#91 三条 dependabot PR 因此仍挂着。
* 上面那条"合 release PR 前必须本地跑版本位闸"目前只是**文档 + 手工动作**,不是机器闸;
要变机器闸需要一个能对 release 分支 head SHA 报 commit status 的作业(权限决策)。

## [2.2.3] - 2026-09-22

补丁版,只为把一处**随包分发缺口**送进可安装的产物:它修在 main 上,但晚于 v2.2.2 的 tag,
Expand Down
2 changes: 1 addition & 1 deletion config.yaml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
version: "2.2.3"
version: "2.2.4"

server:
host: "127.0.0.1"
Expand Down
4 changes: 2 additions & 2 deletions deploy/kubernetes/deployment.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ spec:
# P0-1:subPath 挂载要求 PVC 内子目录预先存在(kubelet 不会自动创建)。
# 用主镜像(离线可用、自带 python)在可写的 data 卷上预建全部运行时目录。
- name: init-dirs
image: ghcr.io/reserendipity/tts-multimodel:2.2.3
image: ghcr.io/reserendipity/tts-multimodel:2.2.4
imagePullPolicy: IfNotPresent
command: ["python3.12", "-c",
"import os; [os.makedirs(f'/mnt/data/{d}', exist_ok=True) for d in ['data','outputs','logs','cache','lora','personas']]; print('init-dirs ok')"]
Expand All @@ -58,7 +58,7 @@ spec:
memory: "256Mi"
containers:
- name: tts
image: ghcr.io/reserendipity/tts-multimodel:2.2.3
image: ghcr.io/reserendipity/tts-multimodel:2.2.4
imagePullPolicy: IfNotPresent
ports:
- containerPort: 7869
Expand Down
2 changes: 1 addition & 1 deletion desktop/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "tts-multimodel-desktop",
"version": "2.2.3",
"version": "2.2.4",
"private": true,
"description": "TTS MultiModel 桌面应用壳",
"scripts": {
Expand Down
2 changes: 1 addition & 1 deletion desktop/src-tauri/Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion desktop/src-tauri/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "tts-multimodel-desktop"
version = "2.2.3"
version = "2.2.4"
description = "TTS MultiModel 桌面应用壳"
authors = ["TTSMultiModel"]
edition = "2021"
Expand Down
2 changes: 1 addition & 1 deletion desktop/src-tauri/tauri.conf.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"$schema": "https://schema.tauri.app/config/2",
"productName": "TTSMultiModel",
"version": "2.2.3",
"version": "2.2.4",
"identifier": "com.ttsmultimodel.desktop",
"build": {
"beforeDevCommand": "",
Expand Down
2 changes: 1 addition & 1 deletion docs/release-governance.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@

## 1. 版本号规范

- 遵循 SemVer `MAJOR.MINOR.PATCH`。**已发布最新 = v2.2.3(2026-09-22)**。
- 遵循 SemVer `MAJOR.MINOR.PATCH`。**已发布最新 = v2.2.4(2026-09-22)**。
版本号出现在 11 处(`version.json`/`pyproject.toml`/`config.yaml`/`desktop/*`/`scripts/installer/setup.nsi`),
但只有 tag + GitHub Release 同时存在才算发出去;核对:`gh release view v<版本>`。
> 其中 `desktop/package-lock.json` 在 `.gitignore` 里(不是仓库内的版本位);仓库内跟踪的 9 处
Expand Down
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[project]
name = "tts-multimodel"
version = "2.2.3"
version = "2.2.4"
description = "TTS MultiModel - Multi-engine Text-to-Speech platform with voice cloning, voice design, and LoRA fine-tuning"
readme = "README.md"
license = "Apache-2.0"
Expand Down
6 changes: 3 additions & 3 deletions scripts/installer/setup.nsi
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,15 @@ Unicode true
!include "LogicLib.nsh"

Name "TTSMultiModel 桌面版"
OutFile "TTSMultiModel-Setup-v2.2.3.exe"
OutFile "TTSMultiModel-Setup-v2.2.4.exe"
InstallDir "$LOCALAPPDATA\Programs\TTSMultiModel"
InstallDirRegKey HKCU "Software\TTSMultiModel" "InstallDir"
RequestExecutionLevel user
SetCompressor /SOLID lzma
CRCCheck on
BrandingText "TTSMultiModel"

!define APP_VERSION "2.2.3"
!define APP_VERSION "2.2.4"
!define DATA_PREFIX "TTSMultiModel-Data.7z"
!define UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\TTSMultiModel"
!define APP_ICON "${__FILEDIR__}\..\..\desktop\src-tauri\icons\icon.ico"
Expand Down Expand Up @@ -135,7 +135,7 @@ Section "TTSMultiModel 桌面版" SEC_APP
SectionEnd

; ---------- 版本信息 ----------
VIProductVersion "2.2.3.0"
VIProductVersion "2.2.4.0"
VIAddVersionKey "ProductName" "TTSMultiModel 桌面版"
VIAddVersionKey "LegalCopyright" "Copyright (C) 2026 TTSMultiModel"
VIAddVersionKey "ProductVersion" "${APP_VERSION}"
Expand Down
4 changes: 2 additions & 2 deletions version.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"version": "2.2.3",
"version": "2.2.4",
"release_date": "2026-09-22",
"minimum_shell_version": "2.2.2",
"changelog": "2.2.3:修复随包分发缺口 —— wheel 此前没打进完整性自检清单三件套(清单/签名/公钥),而 enforce 默认开启,导致 pip 安装出来的环境里 P0 完整性保护一条都没执行却写着在强制运行;现在三件随包走,且 enforce 开着而清单缺失会拒绝启动。另含 2.2.2 的发布前置回归(干净环境缺 einops/addict、镜像 apt 索引就绪守卫、CSRF 硬失败与 0600、IndexTTS 预热并发崩溃修复)。资产为 wheel + sdist + SHA256SUMS;不含 26 GB 便携分卷与增量包。"
"changelog": "2.2.4:两处用户可见修复 —— 12GB 显存档直切引擎不再 503(先清场再预检),persona/历史里的 onclick 字符串拼接改为事件闭包(消除属性注入面,同源裸插值一并收口)。其余是发布与 CI 链路收口:性能门禁改判 median 单向 50% 且基线改从仓内 L3 取、release-please 的 extra-files 摘掉会整份重写 config.yaml 的 yaml 类型、版本位新增『每条自动位今天真能命中』的闸、§7b 依赖复算结果落成账。资产为 wheel + sdist + SHA256SUMS;不含 26 GB 便携分卷与桌面增量包,NSIS 安装包真装未验收。"
}
Loading