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
13 changes: 10 additions & 3 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -1,8 +1,15 @@
name: Release

# Push a version tag (v0.2.0, v0.3.1, ...) and this job builds the .deb on
# Ubuntu 24.04 and publishes it as a GitHub Release asset with sha256sums -
# that release is what tools/install-deb.sh downloads.
# Push a version tag and this job builds the .deb on Ubuntu 24.04 and publishes
# it as a GitHub Release asset with sha256sums - that release is what
# tools/install-deb.sh downloads.
#
# Tags are the version with a v prefix. Since 10.12.0 the versions are
# date-based MM.DD.N (first release of a day = .0), so v10.12.0, v10.12.1, ...;
# the older v0.x tags were semantic. Whatever the shape, the tag must equal the
# top debian/changelog version (plus the -1 revision) or the mismatch gate below
# refuses to publish - that check is what makes a bumped meson.build and a
# forgotten changelog impossible to ship together.

"on":
push:
Expand Down
12 changes: 9 additions & 3 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,11 +1,17 @@
# Changelog

All notable changes to Nextless are documented here. The format follows
[Keep a Changelog](https://keepachangelog.com/en/1.1.0/), the versions follow
[Semantic Versioning](https://semver.org/spec/v2.0.0.html), and this project keeps one line per
[Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project keeps one line per
user-visible change rather than one per commit.

## [Unreleased]
**Version scheme.** Since `10.12.0` the versions are date-based: `MM.DD.N`, where `N` counts
releases made that day starting at 0 - so `10.12.0` is "October 12th, first cut", and a second
release the same day would be `10.12.1`. The tag is the version with a `v` prefix (`v10.12.0`),
which is what `.github/workflows/release.yml` matches and what must equal `debian/changelog`
(`10.12.0-1`) or the publish step refuses to run. The earlier `0.x` line was semantic versioning;
it stays as history and `dpkg` still orders it correctly (`10.12.0` upgrades `0.3.1`).

## [10.12.0] - 2026-10-12

### Added
- **The optional DeepFilterNet denoiser is now measured, not assumed**
Expand Down
20 changes: 20 additions & 0 deletions FINDINGS.md
Original file line number Diff line number Diff line change
Expand Up @@ -836,3 +836,23 @@ Roadmap 上 "Silence should be a no-op, not an `ASR error: empty result`" 的实
#### 未处理风险
- VAD 跑在 EBU R128 归一化**之后**,所以安静房间的底噪会被 +107 dB 的增益抬成"有语音",静音仍然白花一次进程调用(约 1.4s)。正确修法是对归一化前的信号做 VAD,或给增益设上限(例如 30 dB)。这条与降噪顺序纠缠,单独处理。
- `Nextless: no audio captured` / `microphone read failed` 这类状态同样没有清理时机,只是它们本来就该被看见。

### 2026-10-12 — 版本号改成日期制(用户定的规则)

#### 决策
- 从 **`10.12.0`** 起不再用 semver,改成 **`MM.DD.N`**:当天第一个版本 `N=0`,同一天再发就是 `10.12.1`。tag 是版本号加 `v` 前缀(`v10.12.0`)。已有的 `0.2.0/0.3.0/0.3.1` 保留为历史,不回溯改写。
- 规则写在三处,因为读的人不同:`CHANGELOG.md` 顶部(发布口径权威)、`release.yml` 头部注释(打 tag 的人先看到)、`debian/changelog` 条目里(打包者)。

#### 发一个版本要动的地方(这次的全集)
- `meson.build` 的 `version:` —— addon 版本是从它注入 `adapter/src/nextless-addon.conf.in` 的 `@PROJECT_VERSION@`,所以 **`fcitx5-diagnose` 显示的就是这一个值**。本机升之前显示 0.2.0、仓库已经是 0.3.1,说明那次之后没重装 addon;这就是「版本对不上到底哪来的」的答案。
- `debian/changelog` 新条目 `fcitx5-nextless (<ver>-1)`:星期的英文缩写必须是**真实星期**(dpkg 校验;用 `LC_ALL=C date -d <day> +"%a, %d %b %Y %H:%M:%S %z"`),条目之间恰好一个空行。本地先 `dpkg-parsechangelog -l debian/changelog` 验,别等 CI。
- `docs/nextless.1` 的 `.TH` 日期与版本两个参数。
- `CHANGELOG.md`:`## [Unreleased]` 改名成 `## [<ver>] - <YYYY-MM-DD>`;release.yml 的发布说明就是按 `## [<ver>]` 抓这一段,抓不到只发警告不发正文。
- tag 与 `debian/changelog` 不一致时 mismatch 门会**拒绝发布**,所以顺序固定为:bump PR → 合 main → 打 tag → push tag。

#### 风险与判断
- 排序没问题:dpkg 里 `10.12.0 > 0.3.1`(先比第一段),GitHub `releases/latest` 也跟新版本;`install-deb.sh` 只按 `${tag}-1_amd64.deb` 拼确定性文件名,对版本形状没有假设。
- 代价要说清楚:日期版本号看不出「补丁还是破坏性变更」。缓解是发布说明必须有实质内容(现在强制从 CHANGELOG 取),以及 CHANGELOG 一行只写一条用户可见变化。

#### 验证
- `dpkg-parsechangelog` 解析新条目通过,时间戳 `Mon, 12 Oct 2026 08:50:00 +0800`;`meson test -C build` 21/21。
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -358,7 +358,7 @@ only way to get the 1.8 GB back, and `nextless-get-models` will re-download what
**Check what is actually loaded**, because a stale install is otherwise invisible:

```bash
fcitx5-diagnose | grep -i nextless # e.g. "Nextless 0.3.1"
fcitx5-diagnose | grep -i nextless # e.g. "Nextless 10.12.0"
```

If that prints an older version than the release you installed, the running addon is the old one -
Expand Down
2 changes: 1 addition & 1 deletion README.zh.md
Original file line number Diff line number Diff line change
Expand Up @@ -321,7 +321,7 @@ grep -v '^#' build/meson-logs/install-log.txt | sudo xargs -d '\n' rm -f --
**确认到底加载的是哪个版本**,否则装了旧版你看不出来:

```bash
fcitx5-diagnose | grep -i nextless # 例如 "Nextless 0.3.1"
fcitx5-diagnose | grep -i nextless # 例如 "Nextless 10.12.0"
```

如果这里显示的数字比你装的 release 旧,说明在跑的还是老 addon:要么安装那步没执行,
Expand Down
4 changes: 3 additions & 1 deletion SECURITY.md
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,9 @@ Use [GitHub Security Advisories](https://github.com/RevolutionLA/nextless/securi
— private, and the right channel. Please do not open a public issue.

I aim to reply within 7 days and ship a fix or a mitigation within 30. Reportedly affected
versions: `0.3.1` and everything before it, including upstream `vinput`.
versions: every release, `10.12.0` included (and upstream `vinput`) - assume your version is
affected until an advisory says otherwise. Versions before `10.12.0` were numbered semver
(`0.3.1` was the last of them).

Not valid on its own: an open port, a missing HTTP header, a dependency advisory without an
exploitable path through this add-on, or "the cloud backend sends my audio to a cloud backend".
Expand Down
23 changes: 23 additions & 0 deletions debian/changelog
Original file line number Diff line number Diff line change
@@ -1,3 +1,26 @@
fcitx5-nextless (10.12.0-1) unstable; urgency=medium

* Capture-path behaviour fix (issue #61): with denoise=deepfilter, both legs
of the 16k -> 48k -> 16k resample are now drained (soxr returns its
group-delay tail only when end-of-input is signalled with in == NULL, not
with ilen == 0), and deep-filter's own constant 30 ms is appended back from
the raw input. A denoised utterance therefore keeps its full length instead
of silently losing 69-97 ms off the end, which is where the last syllable
lives. A response more than 160 ms short is treated as a malfunction and
falls back to speexdsp rather than being padded into a half-denoised buffer.
* Benchmark harness: bench_asr --denoise (and BACKENDS="deepfilter" in
run_bench.sh) measures the add-on's own dfDenoise(). docs/benchmarks.md
carries the first real-binary DeepFilterNet row - RTF 0.13-0.16, ~1.0-1.3 s
per 5-10 s utterance, 60 MB - with the machine header and raw JSONL
committed next to it.
* README: the measured DeepFilterNet cost, and a new "Rolling back" section
(apt remove vs purge, downgrading with dpkg -i, the meson install-log
manifest, and fcitx5-diagnose as the which-version-is-loaded check).
* Versioning moves to date-based MM.DD.N (first release of a day is .0);
this is the first under that scheme and supersedes 0.3.1.

-- RevolutionLA <[email protected]> Mon, 12 Oct 2026 08:50:00 +0800

fcitx5-nextless (0.3.1-1) unstable; urgency=medium

* Bug-fix release, no new configuration surface:
Expand Down
2 changes: 1 addition & 1 deletion docs/nextless.1
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
.\" Man page for fcitx5-nextless
.TH nextless 1 "2026-10-09" "0.3.1" "fcitx5-nextless"
.TH nextless 1 "2026-10-12" "10.12.0" "fcitx5-nextless"
.SH NAME
fcitx5\-nextless \- push-to-talk voice input addon for fcitx5
.SH SYNOPSIS
Expand Down
2 changes: 1 addition & 1 deletion meson.build
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
project('fcitx5-nextless', 'cpp',
version: '0.3.1',
version: '10.12.0',
default_options: ['cpp_std=c++20', 'warning_level=2', 'werror=true'])

# warning_level=2 is -Wall -Wextra (plus -Werror); 3 would add -Wpedantic, and that one is not
Expand Down
Loading