From d2d9fcd09ed78fc78cf38ac2118fd6e748ae7baa Mon Sep 17 00:00:00 2001 From: "sorokin.oleg.edu" Date: Sun, 25 Oct 2026 23:00:45 +0300 Subject: [PATCH] chore: prepare 0.5.0 Linux and Windows release --- .gitea/workflows/release.yml | 4 +-- docs/desktop-release.md | 2 +- docs/gitea-release.md | 33 +++++++++---------- docs/release-0.5.0.md | 62 ++++++++++++++++++++++++++++++++++++ package-lock.json | 4 +-- package.json | 2 +- scripts/gitea-release.mjs | 2 +- 7 files changed, 86 insertions(+), 23 deletions(-) create mode 100644 docs/release-0.5.0.md diff --git a/.gitea/workflows/release.yml b/.gitea/workflows/release.yml index 279ce7d..73bb273 100644 --- a/.gitea/workflows/release.yml +++ b/.gitea/workflows/release.yml @@ -1,12 +1,12 @@ name: Linux desktop release -# Manual until a native Linux runner is registered. The current 0.4.0 +# Manual until a native Linux runner is registered. The current 0.5.0 # packages are built locally using the identical gates documented below. on: workflow_dispatch: inputs: tag: - description: Existing stable version tag to package (for example v0.4.0) + description: Existing stable version tag to package (for example v0.5.0) required: true type: string diff --git a/docs/desktop-release.md b/docs/desktop-release.md index 3125858..cfeb69a 100644 --- a/docs/desktop-release.md +++ b/docs/desktop-release.md @@ -1,6 +1,6 @@ # Desktop builds and releases -For this fork’s Linux and Windows 0.4.0 release on Gitea, see [Gitea releases](gitea-release.md). +For this fork’s Linux and Windows 0.5.0 release on Gitea, see [Gitea releases](gitea-release.md). The three-platform GitHub process below documents the upstream reference. ## Platforms diff --git a/docs/gitea-release.md b/docs/gitea-release.md index ca140d2..567c822 100644 --- a/docs/gitea-release.md +++ b/docs/gitea-release.md @@ -2,7 +2,7 @@ The release destination is https://server2.sorokin-oleg-edu.xyz/replicated/learnharness. -Version **0.4.0 targets Linux x64 and Windows x64**, with each platform built +Version **0.5.0 targets Linux x64 and Windows x64**, with each platform built and verified on its native operating system. The upstream GitHub workflow and three-platform packaging configuration remain available as reference in `.github/workflows/release.yml` and `electron-builder.yml`. @@ -48,18 +48,19 @@ node scripts/smoke-provider-runtime.mjs --standalone dist/linux-unpacked/resourc xvfb-run -a node scripts/smoke-demo-runtime.mjs --standalone dist/linux-unpacked/resources/server/standalone --runtime dist/linux-unpacked/learnharness --browser ``` -The Linux portion of 0.4.0 has these attachments: +The Linux portion of 0.5.0 has these attachments: -- `LearnHarness-0.4.0-x86_64.AppImage` -- `LearnHarness-0.4.0-amd64.deb` +- `LearnHarness-0.5.0-x86_64.AppImage` +- `LearnHarness-0.5.0-amd64.deb` - `latest-linux.yml` - `SHA256SUMS` ## Preparing Windows packages -Use a clean checkout of the same `v0.4.0` tag on Windows x64 with Node 26 and Git -for Windows. Keep build tools and logs outside the checkout. The local Windows -checkout used for this release is `~/Documents/Gitea/learnharness`. +Use a clean checkout of the same `v0.5.0` tag on Windows x64 with Node 26 and Git +for Windows. Keep build tools and logs outside the checkout. The Windows +release checkout is `~/Documents/Gitea/learnharness-release-0.5.0`, linked to the +existing repository in `~/Documents/Gitea/learnharness`. In PowerShell, stop after any failed command: @@ -84,13 +85,13 @@ node scripts/smoke-demo-runtime.mjs --standalone dist/win-unpacked/resources/ser Windows contributes three attachments: -- `LearnHarness-0.4.0-x64-setup.exe` -- `LearnHarness-0.4.0-x64-setup.exe.blockmap` +- `LearnHarness-0.5.0-x64-setup.exe` +- `LearnHarness-0.5.0-x64-setup.exe.blockmap` - `latest.yml` The combined release has **seven attachments**, including one `SHA256SUMS` covering all six other files. Verify that `latest.yml` names the Windows -installer exactly, reports version `0.4.0`, and matches the installer's actual +installer exactly, reports version `0.5.0`, and matches the installer's actual size and SHA-512. Its gzip blockmap must cover the installer and match every block checksum. Confirm the packaged `resources/app-update.yml` uses the Gitea generic provider. Windows builds follow upstream's unsigned, per-user installer @@ -101,8 +102,8 @@ configuration. Commit and push the release source, then push its exact annotated tag: ```sh -git tag -a v0.4.0 -m 'LearnHarness 0.4.0' -git push gitea main v0.4.0 +git tag -a v0.5.0 -m 'LearnHarness 0.5.0' +git push gitea main v0.5.0 ``` Supply `GITEA_TOKEN` only to the upload command. A token file may remain outside @@ -116,10 +117,10 @@ The tool requires the tag to exist in Gitea, creates or reuses one draft at that tag, uploads missing assets, and downloads every attachment to verify its actual SHA-256 against the local verified build. Existing mismatched attachments and published releases are refused. It never publishes or changes repository -visibility. Release notes come from `docs/release-0.4.0.md`. +visibility. Release notes come from `docs/release-0.5.0.md`. This uploader and its remote verifier enforce a **Linux-only** inventory. They -will refuse a combined Linux/Windows draft. For the combined 0.4.0 release, add +will refuse a combined Linux/Windows draft. For the combined 0.5.0 release, add the verified Windows attachments to the existing draft and replace `SHA256SUMS` with the combined manifest. Keep the Linux installers and feed unchanged. Check all seven attachment names, sizes, and actual downloaded hashes against the @@ -141,12 +142,12 @@ public `latest` feed and in-app automatic updates expose this version. workflow with an existing release tag as input. It requires a native Linux x64 runner labeled `ubuntu-24.04`, the label used by upstream's Linux release job, plus the native Electron dependencies and `xvfb-run`. There were no runners -registered when 0.4.0 was prepared, so its packages are built locally. A tag push +registered when 0.5.0 was prepared, so its packages are built locally. A tag push does not queue a job that cannot run. The workflow uses the repository's ephemeral `GITEA_TOKEN` with release-write permission only in the final upload step. It checks out the requested tag without persisting credentials and leaves the result as a verified draft. Public pull requests cannot trigger this publishing workflow. This workflow remains -Linux-only; the combined 0.4.0 draft was assembled from local native builds. +Linux-only; the combined 0.5.0 draft was assembled from local native builds. Windows has its own standalone payload and smoke checks, as described above. diff --git a/docs/release-0.5.0.md b/docs/release-0.5.0.md new file mode 100644 index 0000000..952635d --- /dev/null +++ b/docs/release-0.5.0.md @@ -0,0 +1,62 @@ +# LearnHarness 0.5.0 + +## English + +This release adds ChatGPT Fast mode and improves the language controls and +Russian settings layout introduced in 0.4.0. + +- Interface-language and speech-recognition selectors in **Settings → General**, + plus the quick selector beside the microphone, now use the app's styled menus. + The menus include selected-item checkmarks and keyboard navigation; Escape + closes the menu and restores focus to its trigger. Language preferences stay + independent, and STT selection remains locked while recording. +- **Quizzing** keeps its full Russian labels. The label and segmented control + share a row when space permits. Narrower panels stack the control beneath the + hint with matching left alignment and enough height for wrapped text. +- **Settings → Agent** now has a **⚡ Fast** toggle for each Strong, Cheap, and + Vision model tier. Fast mode is **off by default** and initially available only + for **ChatGPT** connections. It requests priority processing and may consume + more ChatGPT plan allowance; availability depends on the model and account. +- Fast preferences take effect on the **next request**, including existing + ChatGPT conversations and newly started background work in the corresponding + tier. The selected model and reasoning effort are preserved. Selecting another + provider turns Fast off for that tier; other providers show it as unavailable. +- Unsupported Fast requests produce actionable, localized errors. Connections + keep their existing account, background-consent, and no-API-key-fallback rules. + +Packages: **Linux x64** AppImage and Debian, and a **Windows x64** installer. +Both platforms use this fork's public Gitea releases for automatic updates. +Windows packaging remains unsigned, matching upstream. + +## Русский + +В этом выпуске добавлен быстрый режим ChatGPT и улучшены языковые настройки +и их отображение на русском языке, появившиеся в версии 0.4.0. + +- Выбор языка интерфейса и распознавания речи в разделе **Настройки → Общие**, + а также быстрый выбор языка рядом с микрофоном теперь используют меню в стиле + приложения. Выбранный пункт отмечен галочкой, поддерживается управление + клавиатурой. Escape закрывает меню и возвращает фокус на кнопку. Языковые + настройки остаются независимыми; язык распознавания нельзя менять во время + записи. +- В разделе **Проверка понимания** сохранены полные русские подписи. Если места + достаточно, заголовок и переключатель расположены в одной строке. В узких + панелях переключатель размещается под пояснением с выравниванием по левому + краю; высота кнопок учитывает перенос текста. +- В разделе **Настройки → Агент** появился переключатель **⚡ Быстро** для каждого + уровня моделей: основной, экономичной и с поддержкой изображений. Быстрый + режим **отключён по умолчанию** и пока доступен только для подключений + **ChatGPT**. Он запрашивает приоритетную обработку и может быстрее расходовать + лимит ChatGPT. Доступность зависит от модели и учётной записи. +- Настройка применяется к **следующему запросу**, в том числе в существующих + занятиях с ChatGPT и в новых фоновых задачах соответствующего уровня. + Выбранная модель и уровень рассуждений сохраняются. При выборе другого + провайдера быстрый режим для этого уровня отключается; для остальных + провайдеров переключатель недоступен. +- Если быстрый режим не поддерживается, приложение показывает понятную ошибку + на выбранном языке. Сохраняются выбранная учётная запись, разрешения на + фоновую работу и запрет автоматического перехода на API-ключ. + +Пакеты: AppImage и Debian для **Linux x64**, установщик для **Windows x64**. +Обе версии используют публичные выпуски этого форка в Gitea для автоматических +обновлений. Установщик Windows не подписан, как и в исходном проекте. diff --git a/package-lock.json b/package-lock.json index e9cda73..6a9821d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "learnharness", - "version": "0.4.0", + "version": "0.5.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "learnharness", - "version": "0.4.0", + "version": "0.5.0", "license": "AGPL-3.0-only", "dependencies": { "@earendil-works/pi-agent-core": "1.4.0", diff --git a/package.json b/package.json index 53d35ab..6b14dd9 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "learnharness", - "version": "0.4.0", + "version": "0.5.0", "license": "AGPL-3.0-only", "author": { "name": "Amos Blomqvist", diff --git a/scripts/gitea-release.mjs b/scripts/gitea-release.mjs index 92b6a97..8db12a9 100644 --- a/scripts/gitea-release.mjs +++ b/scripts/gitea-release.mjs @@ -74,7 +74,7 @@ export async function verifyLocal(directory, version) { /** The downloaded bytes, not only API-reported sizes, must agree with the local verified package. */ export async function verifyRemote(release, localInventory, headers = {}, request = fetch) { assert.equal(release.draft, true, "only a draft may be prepared or verified by this tool"); - assert.equal(release.prerelease, false, "0.4.0 is a stable release"); + assert.equal(release.prerelease, false, "release must be stable"); assert.deepEqual(release.assets.map((asset) => asset.name).sort(), localInventory.map((asset) => asset.name).sort(), "remote draft has missing, duplicate, or unexpected assets"); const temporary = await fsp.mkdtemp(path.join(os.tmpdir(), "lh-release-verify-")); try {