Skip to content

chore(main): release 2.3.0 - #115

Closed
github-actions[bot] wants to merge 1 commit into
mainfrom
release-please--branches--main
Closed

github-actions[bot] wants to merge 1 commit into
mainfrom
release-please--branches--main

Conversation

@github-actions

@github-actions github-actions Bot commented Sep 22, 2026

Copy link
Copy Markdown
Contributor

🤖 I have created a release beep boop

2.3.0 (2026-09-22)

Features

  • add GitHub Pages online demo (pure frontend simulation) (dad34bc)
  • add social media links to help page (40e6f4c)
  • app: /readyz 升级为模型就绪流量闸门 (0cac4b4)
  • app: 应用层集成 SRE/可观测性能力 + 修复相对导入深度错误 (7183fe2)
  • C2: TTS voicebox MCP 桥接 + 引擎适配器; 第三方声明与 gitignore 更新 (c02b908)
  • ci: 锁集交叉约束检查,抓 issue #97 那类上界/通配冲突 (e104809)
  • ci: 锁集交叉约束检查(抓 #97 那类上界/通配冲突) (4f82a21)
  • compliance: add script workshop legal warning (5 locales) - prohibit synthesizing protected voices per IndexTTS DISCLAIMER (4ae3cbd)
  • data-governance: generation_history 血缘字段扩展 + 双轨训练架构文档收敛 (a495079)
  • data-governance: P0+P1 核心数据治理落地 (e608451)
  • data-governance: 新增治理/验证/诊断脚本集(18个) (85eb3d1)
  • desktop: 移植 Tauri v2 桌面壳并适配 TTS 语义(报告 P1-2) (a9b8947)
  • dist: 便携分卷打包/NSIS 安装器/增量更新装配链(对应《桌面分发与安全加固-20260910》P1-3) (6294622)
  • dist: 发布门禁五步 + 完整性诊断脚本(对应《桌面分发与安全加固-20260910》P2-1) (7666397)
  • dist: 发布门禁真实模式(真实资产五步门禁,P2-1 扩展) (a30d2f2)
  • dist: 统一模型下载器 + 下载/许可文档 (#56) (7e1535e)
  • dist: 解包器检测 model 缺失时提示官方源下载路径(模型可选分发) (68b5731)
  • engine: gptsovits robustness + en/zh i18n + template polish (cafac6d)
  • engine: harden dotstts load() + ja/ko i18n parity (4bea877)
  • engines: integrate GPT-SoVITS and dots.tts as declarative engines (6221cc3)
  • engines: 新增只读引擎发现/能力查询端点(/api/engines) (#55) (024572e)
  • full-feature demo v2 - 15 tabs/command palette/persona/history (fef46c1)
  • generate: 信号量超时 429/硬超时 503 + Retry-After,接入 bad_case 质量检测,db.insert 异步化 (S2-1/S2-2/S3-3) (2a239da)
  • hooks: 新增 .githooks —— DCO 自动签名与校验、依赖漂移提醒 (fd1667a)
  • indextts20: 独立侧栏分组与页面,并修复 IndexTTS 无法出音与引擎切不回 (8d45578)
  • indextts2: 新增可对比的 IndexTTS 2.0 引擎并清理误导残留 (0cb9af8)
  • infra: vendor tn stubs + opencc fallback + install docs (6ff5e3f)
  • logging: 完善日志机制 - 统一格式(PID/TID/模块位置/request_id) + 环境变量覆盖 + 双通道输出 (9097178)
  • model_registry: add MultiEngineRegistry for concurrent engine management (176ef52)
  • observability: 可观测性与韧性基础设施落地 (SRE P0~P2) (1652049)
  • observability: 运维稳定性 P1/P1-4 落地——OOM耗尽异常、p95直方图SLO、受控重载计数持久化 (83f21f2)
  • openai: /v1/audio/speech 支持 stream 参数 (S3-1) (e21a6fb)
  • ops: 运维能力补齐 —— 备份/回滚/部署清单 (SRE P1/P3) (e9298fa)
  • P0 Voicebox VC 真实接入 — 基于 OpenVoice ToneColorConverter 实现零样本音色转换 (0e302f4)
  • P1 Step-Audio-EditX 音频编辑引擎接入 (dcde9df)
  • P2 学习报告成果落地 — dia剧本配音schema + LoRA训练编排器 + 模型格式评估 (bf62a2f)
  • perf: apply OPTIMIZATION spec (history FTS5 + keyset pagination + audio streaming) (41c7757)
  • perf: 运维稳定性 P0-2/P0-3 落地——冷启动测量修复 + GPU MTTR 基线门禁链 (b423bcf)
  • persona: 实现 /api/persona/save 并修复语言码三套词表不通 (8234f86)
  • pwa,stage-e: PWA Phase 1 基础设施(manifest + Service Worker + 客户端控制器) (307ddcf)
  • pwa,stage-e: PWA Phase 2 — IndexedDB 音频缓存(SW 拦截 + LRU + 跨标签页同步) (9731f3a)
  • quality: 能力声明=>验证门禁 —— check_declared_capabilities (79042d3)
  • security: API 认证覆盖 /v1 与 SSE + 结构化审计日志 (H1/M6/M7) (86dfb69)
  • security: complete security hardening based on assessment report (f623304)
  • security: HTTPS/SSL 接线 + 启动完整性阻断 + 模型权重校验 + PII 留存清理 + CORS 修正 (a600854)
  • security: integrity manifest signing (Ed25519+HMAC) with enforce, 3-tier watermark failure strategy, portable pinning (5e8d781)
  • security: P0 克隆频率限制 + 参考音频质量门槛 + 训练接口限流 (07ccb21)
  • security: P1 审计轮转 + PII加密默认开启 + uploads递归TTL清理 (7dfd179)
  • security: P1 水印HMAC密钥版 + AI标识三件套 + P3水印强度配置接线 (0c59343)
  • security: P2 内容安全变体规则+fail-closed + 权重SHA256校验接线 + 训练operation_id (3c095ac)
  • security: 二进制/模型权重完整性校验默认接线 (C1/M8/M1) (01e7e70)
  • security: 内容安全网关受配置开关控制 + 拦截审计 (M3) (f7cbcf0)
  • security: 历史记录 PII 字段级加密落库与留存清理 (H3) (d818f62)
  • security: 路径遍历防护/LoRA白名单/模型注册完整性/路由鉴权 (cb11bf5)
  • security: 速率限制覆盖 /v1 与上传端点 + 可信代理 XFF (M2) (1a21a72)
  • security: 配置模型扩展 — SSL/PII加密/审计/完整性/限流/SecretStr (f63438c)
  • task_queue: add PerEngineQueueManager for multi-engine parallel inference (3b083ca)
  • tests: 安全测试补盲与 M1 里程碑达成(最终轮次) (b6b5e48)
  • tests: 新增安全测试覆盖与引擎协议合规性测试 (M1 里程碑) (4a2c010)
  • text-processing: G2P manager, text segmenter, content safety, prompt expander (9f005b8)
  • training: 修复 LoRA 训练工具链 + 生成模型权重 SHA256 完整性清单 (95ea7e9)
  • training: 训练启动前显存仲裁 + 自动卸载推理引擎 (a934975)
  • UI overhaul, new modules, and project cleanup (8fbdb5f)
  • UI/UX audit fixes, bad-case retry queue, model optimizer, and engine refinements (d420d15)
  • ui: collapsible advanced-params panels for gptsovits/dotstts clone tabs (05afa15)
  • ui: 模型切换器/语音创建表单/健康监控与样式增强;后端路由支撑 (#62) (eafc4d6)
  • update integrated app features and clean up deprecated components (c0728cd)
  • web: favicon 独立资源化——icons/app-icon.svg + favicon.ico,base.html 挂接双图标 (0c800cd)
  • 下载指南/设置页增强 + CI 门禁收紧延续(mypy 基线棘轮)+ 引擎检查 venv 自动切换 (e9d35cf)
  • 添加性能监控脚本与计划文档 (91b8ddd)
  • 累计提交历史任务成果 - IndexTTS2 引擎完善/多语言/文档/学习报告 (36a94f2)
  • 跨项目借鉴改造 — 安全/配置/断点续跑/模型共享/音频水印 (11a0e57)
  • 路线图落地 — 数字水印、spec 契约层、断点续跑恢复接线、前端冒烟 (27e2a7d)

Bug Fixes

  • .gitignore static/ 规则过宽导致前端资源未入库(CI 页面无 CSS/JS);锚定根目录并补提交 static 39 个文件 (fc9c484)
  • api,ui: resolve persona API 404 and 11 UI issues (a18f0a2)
  • api: 前后端一致性 P0/P1 后端修复——参数接线与死参清理 (a0769c6)
  • app_server 补充 main 入口(python -m 启动失败根因,E2E 服务器无法启动) (611422c)
  • build: 移除 license classifier(PEP 639 与 license 表达式冲突,新版 setuptools 拒绝构建) (aca3fc7)
  • check_local.py 移除未使用 import 并通过 black (8834c15)
  • ci: .gitignore 的 model/ 误吞 upstream 源码,修复 CI 幻影导入报红 (3258e4e)
  • ci+tests: 修复流水线、激活 smoke marker 并更新 AGENTS.md (89bbcdd)
  • ci: coverage omit /vendor/(分母回归、pytest 覆盖率门禁有效)+ docker-build 构建后清缓存再扫描(runner 磁盘耗尽修复) (65077f2)
  • ci: DCO check via self-contained bash (dcoapp/dco is a GitHub App, not an Action) (c67a0ff)
  • ci: mypy 基线 101→103(M4/M5 容器安全批次新增 2 处类型债务,watermark bytearray→bytes 真修复已含) (f6fde3d)
  • ci: pytest 加 180s 超时保护(pytest-timeout),防止测试挂起导致 job 卡 6 小时 (e47fe7b)
  • ci: release-please 三处静默失效——它其实从没发过版(merge 需等 v2.2.2 tag 落地) (a174a2e)
  • ci: release-please 改为仅手动触发(避免 push 时误报失败) (2676fe2)
  • ci: render_pages 自建最小 Jinja2 环境,修复 Frontend Smoke 红灯 (a79d581)
  • ci: watermark metadata 类型注解(棘轮 100≤101)+ trivy-action SHA pin v0.36.0 + md5 usedforsecurity=False(bandit B324) (0c9bd5b)
  • ci: 为 docker-publish.yml 的 Trivy 扫描设置 10m 超时 (d246704)
  • ci: 为 Trivy 扫描设置 10m 超时,避免大镜像分析触发 5m 默认上限 (af351fe)
  • ci: 修复两个 Docker 工作流的 Trivy 扫描假红 (ee3ec76)
  • ci: 修复被前置门禁遮蔽的下游红灯(引擎规格门禁 / compose schema / 完整性清单) (11abb15)
  • ci: 修复配置门禁红灯与 Docker 构建 ensurepip 缺失 (e6442df)
  • ci: 压力测试安装 pytest-timeout,修复 --timeout=300 无法识别 (08003f5)
  • ci: 把 release-please 从"永远绿的空转"修成真会发版(含两个静默失效点) (6396bcb)
  • ci: 补装训练层依赖,修复覆盖率预算门禁在 CI 结构性假红 (a157e0f)
  • compose: 云原生评估 P1-1/P2-4/P2-6 跟进——解释器同步、停等对齐、日志格式统一 (094d0b3)
  • config: 路由层改用类型化 AppConfig 访问,修复 mypy 棘轮回归 (60e8dfe)
  • consent: 克隆授权门禁 P0-1 + 完整性清单同步 + 移除 CONTRIBUTING.md(compliance 批次) (#68) (a3d336c)
  • core: 修全站 toast 静默失效与 3 处幻影引用,语言下拉标签接入 i18n (62d8544)
  • deps: einops 提为核心依赖,并把"声明了却没钉版"这一类变成门禁(镜像探针抓出来的) (b34da43)
  • deps: repair pydantic-core lock pair and stop Dependabot breaking it (#92) (09b7cdb)
  • deps: 下界回到 transformers>=4.52.1,<4.53,两道安全门禁改为逐条带理由的豁免 (77ac14b)
  • deps: 依赖下界回到实测能跑的 transformers 4.52.x,安全门禁改为逐条带理由的豁免 (e4f20d3)
  • deps: 把"下界 vs 引擎可用性"的互斥交回决策,本 PR 只保留无争议部分 (a4b64f3)
  • deps: 锁集三处非法约束改为合法,并把 crossconflict 检查接进 CI (8b5dd4c)
  • deps: 锁集三处非法约束改到合法且与已验证环境一致,并把 crossconflict 检查接进 CI (91a0846)
  • dist: 发布门禁补 ⑤ 冒烟启动与磁盘释放,闭环完整性 enforce (48bd757)
  • docker: deadsnakes 索引没抓下来时硬停,不再两步之后炸成"Unable to locate package" (6ebfa43)
  • docker: deadsnakes 索引没抓下来时硬停(推翻 bash-builtins 假设) (f39bdb1)
  • docker: 云原生评估 P1-1/P2-2/P2-4 落地——镜像 Python 3.10→3.12 与可复现性加固 (2993c22)
  • docker: 修正容器内包导入路径与 ttsuser 的 home,容器才起得来 (c305daf)
  • docker: 容器内 import 路径与 ttsuser home 修正(liveness 长期红的下一层) (6046bfa)
  • docker: 消除 pids_limit 与 deploy.resources.limits.pids 取值冲突(Docker Smoke 长期红) (98b30a0)
  • docker: 消除 pids_limit 与 deploy.resources.limits.pids 的取值冲突 (5d9b77f)
  • e2e: collapse_toggle 与 theme_toggle 测试前 dismiss onboarding overlay(CI 全新环境无 localStorage 缓存) (87769a3)
  • e2e: expand collapsed nav section before clicking tab in extended screenshot test (b1b4301)
  • e2e: test_collapse_toggle 完整版 onboarding dismiss(等 2.2s 覆盖 setTimeout boot + 二扫 DOM) (590d257)
  • e2e: 修正失效的 /tabs/ 路由为 /?tab=,修复 wait_for_function arguments 兼容性(Playwright 新版) (d58a03f)
  • e2e: 停止 JS 定时器 + 禁用 CSS 动画消除动画帧差异;临时重建 Linux baseline (fa50990)
  • e2e: 冻结 Math.random 消除波形随机绘制导致的截图差异 (ce84dca)
  • e2e: 引擎 tab 切换用 JS click 绕过 model-tabs 容器指针拦截(headless 布局差异) (5903281)
  • e2e: 截图测试点击折叠分组内 tab 前先展开;E2E job 超时 15→30 分钟 (c89f2dc)
  • e2e: 拦截远程字体 + 等待 fonts.ready 消除字体加载时序差异 (c34afc3)
  • e2e: 视觉回归测试统一稳定化(onboarding dismiss + 渲染等待)+ 更新全部 baseline (ad2132f)
  • e2e: 等待 htmx 异步内容加载完成再截图(消除跨 run 加载时序差异) (7359fc0)
  • engines: 2.5/2.0 共用类的两处错误文案点名了错的变体 (a68055b)
  • engines: EngineName 补齐 voicebox/step-audio-editx 并同步能力契约基线,重签完整性清单 (ccb38ee)
  • engines: 修正引擎规格三向漂移并新增一致性校验门禁 (S1-2/S3-2) (c3e4dd1)
  • engines: 预热绕开串行队列与用户请求并发 → CUDA device-side assert(已定位并修) (9e41963)
  • frontend,dist: 侧栏换页竞态 + 正文字体栈,并把分发负载钉进 CI (a654a80)
  • frontend,dist: 侧栏换页竞态与正文字体栈,并把分发负载钉进 CI (c9161b6)
  • hide watermark from user-visible surfaces (logs to debug, README, demo, agreement wording) (b1acdc5)
  • hooks: pre-commit 分发器支持控制台命令回退(无 venv 时框架仍生效) (bb9c3d3)
  • hooks: 修正 pre-commit 配置使钩子可用 (7bb4a73)
  • i18n: 补齐 5 语种词表至完全对齐,错误片段标题改为按端点语义可配 (002e3cc)
  • k8s: 云原生评估 P0-1/P0-2/P1-2/P2-6 落地——清单从'能看'变'能 apply' (71d421c)
  • launcher: 便携钉装自洽修复(真实构建暴露,P1-1 补正) (5c4f485)
  • launch: 端口被占用时自动换端口,移除交互式强杀确认 (04dbf2e)
  • model-manager: 恢复被 lint 删除的 re-export 门面并统一 lint 范围 (74ce0f7)
  • openai: tts-1-hd 从必然 500 改成 400 + 出路;smoke 补 2.5 真合成与状态谓词修正 (bf2ff85)
  • portability: 新增路径可移植性自动化检查并登记规范 (#76) (af8d3ba)
  • portability: 路径包含判定归一 8.3 短名,避免打包器把同目录误判为外部 (b1eb9f5)
  • precommit: check-engine-compat 存在 .venv 时优先用 .venv 检测,避免误用系统 python (c771d1c)
  • release: ⑤ 冒烟不再拿 fixture 的假 python.exe 当便携解释器 (f103992)
  • release: 修复发版链路编码崩溃与 release-please 静默空转 (a7b7c21)
  • release: 发版链路编码崩溃 + v2.2.2 口径收口 + CodeQL 110 条分诊 (552b0c6)
  • remove local-only Chinese docs from remote; add gitignore rules (56e7efc)
  • resolve 5 better-harness findings + lint cleanup (e04219b)
  • resolve ruff lint & format issues to pass CI (Lint job) (8cde27a)
  • routes: 运维稳定性 P1-1/P2 落地——日志端点访问控制、用户文本日志脱敏、模型路由契约全覆盖 (85d6912)
  • ruff import 排序(audio_watermark 拆分 import,修复 CI lint 失败) (435c19f)
  • scripts: pin-cross 门禁不再被一次丢包打死(顺序抓 97 个包 → 并发 + 重试) (79b7549)
  • security: CSRF 密钥不可用时拒绝启动(清单已重生成并重签,可正常合并) (6cb9edd)
  • security: CSRF 密钥拿不出来时拒绝启动,不再 warning 后无签名继续跑 (8752729)
  • security: CSRF 密钥按 0600 落盘,CodeQL #1 走"真加固 + 有据抑制"而不是空消音 (379905b)
  • security: OpenAI 兼容端点的 voice 不再被用作文件存在性探针 (161e78c)
  • security: OpenAI 端点 voice 参数存在性探针 + 17 条 path-injection 复核结论 (9c91040)
  • security: wheel 漏打完整性清单三件套,且 enforce 开着没清单时静默跳过自检 (b6b4c7b)
  • security: wheel 补齐完整性清单三件套;enforce 开着却没清单改为拒绝启动 (0b53429)
  • security: 升级基础镜像系统包,修复 Trivy 发现的 14 个 HIGH CVE (7958872)
  • security: 封死音色嵌入读路径越界并建 CodeQL 110 条告警分诊表 (3e910a0)
  • security: 把两道门禁的豁免改成真实生效的版本,并把代价从"3 条"更正为 16 条 (e91dae2)
  • security: 错误消息脱敏补上四条领域异常分支 (1e29807)
  • security: 错误脱敏补上四条领域异常分支 (970cdc2)
  • server: SSL 显式 enabled 开关默认 HTTP + 健康 ping 统一实现 (7b6a694)
  • SSE 测试线程改 daemon 防 pytest 挂死(根因:SSE 无限流线程永不退出);矩阵排除 tests/e2e(Playwright 由独立 workflow 跑) (0c37acb)
  • sse: set default retry: 3000ms for browser auto-reconnect (ba2f0aa)
  • streaming: 统一 wireGenerationResult 接线入口并新增 /api/audio 音频路由 (#65) (4924ec8)
  • test: correct whitespace and length calculation in text segmenter crossfade, fix whitespace and empty text trim in G2P manager/prompt expander, align G2P is_available with design that supported language is always available on download (15b3f64)
  • test: pretrained_models 目录测试改为自动创建(目录被 gitignore,CI checkout 不含模型目录) (2503f0f)
  • tests: 修复 EngineRegistry 导入错误 (82f6ae5)
  • tests: 修复测试反模式-PytestReturnNotNone/硬编码/残缺断言/吞没异常/视觉回归无对比, 删除废弃脚本 (f0bcc63)
  • tests: 消除永真断言与零断言反模式并强化认证行为级测试 (a982676)
  • track docs/screenshots by fixing .gitignore glob pattern (10ea1d2)
  • training: 修复 training 测试假覆盖 — datasets/argbind 可选懒加载 + 循环导入修复 (34ebc77)
  • treat dots_tts as optional in compat check; skip playwright test when dep missing (629a1bd)
  • types: mypy 棘轮 156=>103 —— 修复 10 文件类型错误 (0bd74cc)
  • web: 前后端一致性 P0/P1/P2 前端修复——控件对齐与静默失效清理 (eea5352)
  • zh voice warning in script dubbing play paths (0f82d8a)
  • zh voice warning, full-text display in continue generation to match spoken text (b7c9f0a)
  • 修复 task_queue 协程泄漏并消除测试弃用警告 (4f1f4e0)
  • 消除硬编码本机绝对路径,新增路径可移植性规范 (#75) (fc4034b)
  • 补 psutil 依赖(health.py 顶层导入,CI 测试收集失败) (d961d90)

Reverts

  • pyproject addopts 移除 --timeout(与 pytest-playwright 同名选项冲突致 visual gate 失败);CI 命令里保留 --timeout=180 (c2d347e)

Documentation

  • add model download & verification examples (0c4384f)
  • add module responsibility boundaries (model_manager/registry/config/service_layer/optimizer); gitignore: unify template (1b70a86)
  • add phase-A support documentation (deps, deployment, GPU runner) (0316275)
  • add UI screenshots to README demo section (3a63704)
  • adr: ADR-0001 remove GPT-SoVITS + 3-engine compat checker (5276d4c)
  • agents: 家族规范审计 Phase A+B 落地 — 主干事实校正、协议 v1.11、CI 一致性 (82c8885)
  • CHANGELOG Unreleased 补钉装自洽修复与 shebang 清理两条 (44b4234)
  • CHANGELOG 正式跟踪 + 新增 PRIVACY_POLICY (3bc4471)
  • compliance: add independent third-party declaration vs model owners (ByteDance Seed / Alibaba Tongyi / bilibili) (499355b)
  • compliance: rebrand subtitle, unify IndexTTS version naming, add third-party disclaimer to demo footer (61fa452)
  • CONTRIBUTING 脱敏后入库(对外协作指南) (1ac53fe)
  • data-governance: 数据治理评估报告 v2.2.1(HTML 交付版)入库 (65f1238)
  • deploy: 运维稳定性 P0 落地——K8s readiness 探针改接 /readyz 并留档冷启动 MTTR (1862c01)
  • DOD: 更正镜像构建那条的记载——bash-builtins 是噪声,真因是 apt-get update 容忍索引缺失 (39d3daf)
  • DOD: 记一条发版后核对产物才暴露的缺口——wheel 未打包完整性清单,pip 路径的 enforce 从不生效 (22f9471)
  • DOD: 记到第几格就写到第几格 —— 补上"第二次切换后 CUDA assert"这条未定级缺陷 (003ef9a)
  • dod: 记录 rebase 到 main 之后的门禁数字 (c906b8d)
  • enhance community engagement and onboarding experience (538cf84)
  • examples: add batch + dots.tts quickstart clone examples (cc92efd)
  • governance: 家族规范治理 Phase C/D/E 落地 — 一致性、补齐与账本 (6e4afea)
  • link MODEL_DOWNLOADS.md from README (93bc422)
  • pending issues tracker + security + training guide (deb4c06)
  • plan,stage-e: execution handbook for 6 task packages (5 sub + PWA skip) (d379a71)
  • quality,stage-e: baseline quality report + reproducible evidence (a9cd539)
  • readme: Demo 段接上真实存在的 6 张界面截图 (89b909f)
  • readme: Docker 部署补充 GHCR 镜像拉取(对齐已有发布) (bddfe4f)
  • readme: 修正 GHCR 镜像 tag 为最新已发布版本 (6401c61)
  • readme: 公开仓库向重写(五引擎定位、API 与许可表对齐) (ddb8927)
  • record watermark v2 known boundaries (1s-white-noise payload info-theoretic limit, SNR-crest coupling) with measured data and optional breakthrough paths (fc2585f)
  • refresh README + recapture all tab screenshots (light + dark) (d6ff151)
  • relicense from MIT to Apache License 2.0 (5ab840b)
  • remove dots.tts references and add VoxCPM source baseline (c24ec79)
  • restore open-source essentials (LICENSE, NOTICE, USER_AGREEMENT, COC, SECURITY, upstream source declaration) (dea71ee)
  • restore README, CI, demo, screenshots to remote; gitignore local-only content; restore pyproject readme ref (2816758)
  • restore README, CI, demo, screenshots to remote; restore pyproject; gitignore local-only (4bbcdf8)
  • roadmap,stage-e: E.1-E.5 sub-tasks planning + PWA feasibility study (2c4b666)
  • security: §5 补上 dismissal 的合法枚举与 20 条告警的逐条处置映射 (eae5134)
  • security: 20 条告警 dismiss 的执行记录 + 三条实测 API 行为(PATCH / 280 字上限 / 409) (0f59891)
  • security: 20 条告警的 dismiss 已执行完毕,并记下三条只有实测才知道的 API 行为 (a799620)
  • security: P3 新建根级 SECURITY.md,修复 docs/SECURITY.md 断链 (1fb861b)
  • security: protobuf 上界改为实测结论(无人挡住)+ 锁集全量审计数字 (1b29d0f)
  • security: protobuf 的"上界来源"改为实测结论(没人挡住),并补锁集全量审计数字 (a185ebc)
  • security: 云原生评估证据绑定整改——修复安全架构章节路径漂移 (9a2445b)
  • security: 把 CodeQL 分诊台账从 PR #81 里救出来,并按 09-21 实测刷新到 76 条 (b179a7f)
  • security: 救回 CodeQL 分诊台账并按 09-21 实测刷新(open 110→76,critical 归零) (5753fbd)
  • self-check pass, bump v1.7 (ac8e7c1)
  • service-layer: 记录 HTTP 生成路由迁移至 service_layer 的阻塞分析 (S2-4) (26d584b)
  • sync: synchronize 3-engine governance completion state (706d3c2)
  • tasks index and v2 workflow - 8 chapters + 2 appendices, maintained on task completion (63b2cf8)
  • trigger pages deploy (f42a806)
  • TTS_MultiModel v2.2.0 安全合规体系完整性评估与整改报告 (03ba382)
  • update README to include dots.tts (three-model support) and API/dirs (c6084f8)
  • 密钥轮换 SOP-19 runbook(演练记录:三脚本可用性已验证) (a8823f3)
  • 归档评估报告至 docs/_devarchive,README 补结构树,新增六大项目文档整理核对 (6f1d241)
  • 新增 ROADMAP.md 长期路线图 (6311eab)
  • 新增 TTS 竞品库技术学习报告(T5,4 份) (9bbd381)
  • 新增远程同步铁律,防止 AI 直写远程后本地分叉 (ebfabbd)
  • 桌面分发与安全加固 P0-P2 落地同步(CHANGELOG Unreleased) (2b877bf)
  • 模型下载章节补充 HuggingFace/ModelScope 链接,新增社交预览图 (19cb124)
  • 治理执行总结入库(钩子四级回退 / 日志落点 / 约定速查) (7ebde50)
  • 界面预览只展示浅色截图,深色截图不再跟踪 (2a7b926)
  • 统一安全披露渠道并对齐 version.json 发布日期 (#66) (3be35aa)
  • 补全项目健康度评估报告全部缺失要素(perf目录+AGENTS.md+ARCHITECTURE.md+pre-commit) (a5348c2)
  • 顶部补齐 CI 徽章,移除底部重复徽章 (1205d8a)

This PR was generated with Release Please. See documentation.

@ReSerendipity

Copy link
Copy Markdown
Owner

这条 PR 是刚修好的 release-please 自动开的#114 合并后第一次 main push,约 1 分钟就开了它)。
在这之前那条作业是结构性空转:skip-github-pull-request: true + 仓库从没有过 release PR
→ 每次 push 都 found 0 possible releases 然后绿着什么都不做。所以现在能看到 PR,本身就是修复生效的证据。

两点要处理,另一点是预测并已本地复现的失败。

1. CI 现在根本没跑:停在 action_required

6 条作业(CI / Self-Purify / Docker Smoke / Auto-merge / Security Scan / structure-guard)
全是 action_required。也就是说仓库的工作流审批设置对本仓自己 bot 开的 PR 也要手点一次
—— 发版流程因此多了一个必然而隐蔽的人工卡点(不点就永远不跑,也就永远不会红)。
要么这次先手动 Approve and run,要么把该设置改成"同仓库 token 发起的 PR 免审批"再观察。

2. 一旦 CI 跑起来,预期会红在版本位一致性上(本地已复现,不是猜测)

RP 只改 pyproject.toml + CHANGELOG.md + .release-please-manifest.json(本 PR 的 3 个文件),
而本仓有 9 处跟踪中的版本位。把本 PR 的内容拉到本地跑
tests/test_version_consistency.py#113 加的闸)实测输出:

AssertionError: 版本位互相矛盾(release-governance §5 的『版本位全部同步』没做到):
    config.yaml                          = 2.2.2
    deploy/kubernetes/deployment.yaml    = 2.2.2
    desktop/package.json                 = 2.2.2
    desktop/src-tauri/Cargo.lock         = 2.2.2
    desktop/src-tauri/Cargo.toml         = 2.2.2
    desktop/src-tauri/tauri.conf.json    = 2.2.2
    pyproject.toml                       = 2.2.3   ← 只有 RP 动的这两三处被抬了
    scripts/installer/setup.nsi          = 2.2.2
    version.json                         = 2.2.2

这是有意留的闸:红 = 有人来同步,而不是安静地发出一堆版本互相矛盾的产物
version.json.minimum_shell_version 与安装器文件名都参与更新契约,不一致会让壳侧比对失去意义)。

3. 所以有两条路,我倾向第二条

  • A. 真要发 2.2.3:把 release-please-config.jsonextra-files 逐条填上那 8 处
    (json/yaml/toml/regex 各类型,setup.nsiOutFile/VIProductVersion 与 k8s 镜像 tag 要 regex 条目),
    然后以这条 PR 为实测场验证 RP 真的改对了每一处 —— 现在 extra-files: [] 是我留的诚实状态,
    没验证过的映射不如不写。
  • B. 先挂着不合(建议):v2.2.2 刚发完(tag → e64d0e6,Release 已上线并做过产物回读校验),
    本 PR 的实质内容只有一句 fix(ci): release-please 三处静默失效,不值得立刻占一个补丁版本号;
    攒到下次真有用户可见改动时,连同 A 的 extra-files 一起处理。

不论走哪条,别在 CI 没跑过的情况下合(第 1 点那个 action_required 要先解掉)。

@github-actions github-actions Bot changed the title chore(main): release 2.2.3 chore(main): release 2.3.0 Sep 22, 2026
@github-actions
github-actions Bot force-pushed the release-please--branches--main branch from ff22c79 to 7379ad5 Compare September 22, 2026 05:16
@ReSerendipity

Copy link
Copy Markdown
Owner

关闭:本 PR 的内容已由手工发版 v2.2.3 落地,两处差异说明如下(不是"没人看就丢掉")。

为什么关

版本位与 manifest

本 PR 只改 pyproject.toml / CHANGELOG.md / .release-please-manifest.json 三处;
手工发布把全部 10 处跟踪版本位一起抬到了 2.2.3(含 config.yamlversion.json
桌面壳三处、Cargo.locksetup.nsiOutFile/APP_VERSION/VIProductVersion
k8s 镜像 tag),.release-please-manifest.json 也同步为 2.2.3,
所以 main push 的"发版链路自证"步骤不会判失同步。
minimum_shell_version 保持 2.2.2(它是下界,抬上去等于把刚发的一版壳判死)。

发布证据(这条 PR 给不出的部分)

产物是从 Release 页面重新下载回来核对的:
tts_multimodel-2.2.3-py3-none-any.whl 28,378,301 B、tts_multimodel-2.2.3.tar.gz 28,324,368 B
均与 SHA256SUMS.txt 一致;解开下载回来的 wheel 确认三件套在场 ——
integrity_manifest.json / integrity_manifest.json.sig.ed25519 / manifest_signing_public_key.pem
这正是本版存在的理由(v2.2.2 的产物里没有它们)。

下一步留给谁

release-please-config.jsonextra-files 现在是 []:RP 只会自动改 pyproject.toml +
CHANGELOG。要让下一条 release PR 自己过版本位闸,需要把那几处逐条登记进去
version.json/config.yaml/桌面壳三处/setup.nsi/k8s tag),并在一次真实 release PR 上验
—— 那类正则/toml 映射我没在真 CI 上验过,就不照抄文档填进去了。
另外仓库对工作流审批的设置(连本仓自己 bot 的 PR 都要手点 Approve)也值得顺手定一下。

@ReSerendipity

Copy link
Copy Markdown
Owner

补一条更正:我上面写"它按约定式提交算出的是 2.2.3"——那是它刚被创建时的标题。
刚才关它时标题已经是 chore(main): release 2.3.0 了。

时间线(都能对上):

为什么变 2.3.0 我没有验证,只是最自然的一种解释:manifest 已是 2.2.3、CHANGELOG 里出现了
[2.2.3] 段,RP 便把 2.2.3 当成"已占用/已发布",于是往下取下一个号;至于是走 minor 而非 2.2.4,
我没有依据解释这条。别把它当成结论——要确认得看 RP 自己的 groom 日志。

关它的实质理由不受这个更正影响:内容已经由手工 v2.2.3 发出去了
(tag ffd72efdace73dorigin/main 现在就是 dace73d没有第三方提交混进我打 tag 的基线
#116 至今仍是 OPEN),产物已从 Release 页面下载回来验过 SHA256 与"三件套在 wheel 里"。

留一个后话给下一次发版:手工写 CHANGELOG 段 + 手工抬 manifest 与"让 RP 自己发版"这两条路
会在版本号上互相踩(这次就是 RP 在我合并后重算了号)。要么以后 extra-files 填齐、
让 RP 一次改全 10 处;要么明确"发版只走手工,RP 的作业关到只有 owner 手动触发"。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant