From 59eefdb05236b57f7993ad8867701c01178dce30 Mon Sep 17 00:00:00 2001 From: AskaEth Date: Thu, 5 Nov 2026 17:54:18 +0800 Subject: [PATCH 1/2] =?UTF-8?q?docs(packaging):=20M129=20=E5=8F=91?= =?UTF-8?q?=E5=B8=83=E8=AF=B4=E6=98=8E=E9=87=8D=E5=86=99=E5=88=B0=E7=8E=B0?= =?UTF-8?q?=E8=A1=8C=E4=BA=8B=E5=AE=9E=EF=BC=88=E4=B8=8B=E5=88=92=E7=BA=BF?= =?UTF-8?q?=E8=B5=84=E4=BA=A7=E5=90=8D=20/=20MSA=20client=20id=20/=20?= =?UTF-8?q?=E5=88=A0=20Termux=20=E4=B8=8B=E8=BD=BD=E5=BC=95=E5=AF=BC?= =?UTF-8?q?=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 资产名全部改成 make_artifacts.py::asset_stem() 的 `名字_版本号_平台_架构`(下划线): 六行矩阵、ull 资产、tar 包名与解压出的顶层目录、PowerShell 校验命令。旧的连字符名 按文档下载会 404(D49 2026-11-05 改名,文档没跟)。 删掉「微软登录等 Mojang 白名单审批」整条(白名单 2026-11-03 已批准并真机验签), 换成真缺口:发布版不带 Azure 公共客户端 id,要 ULL_MSA_CLIENT_ID(环境变量或构建期 注入),未配置时界面说「未配置」而不是静默失败。不写任何 id 值。 Termux:删掉「下 ull 资产」的引导(ull 的 Linux 资产是 glibc 版,Android/bionic 上跑 不起来),矩阵行只留「构建自源码、GUI 未验证、不在本发布矩阵」。 顺带清掉三处过期陈述:Windows 数据根(原文说有 `portable.marker` 就便携、否则落 %APPDATA%——实际 portable 是默认模式,首次运行在 exe 旁建 .ULL/ 与 .minecraft/); CLI 子命令表漏了 `pack import`;arm64 行里的内部决策编号 D21。124 → 107 行。 --- packaging/release-notes.md | 121 ++++++++++++++++--------------------- 1 file changed, 52 insertions(+), 69 deletions(-) diff --git a/packaging/release-notes.md b/packaging/release-notes.md index 7d6c63b..63faa82 100644 --- a/packaging/release-notes.md +++ b/packaging/release-notes.md @@ -1,124 +1,107 @@ # Unlucky Launcher {{VERSION}} Rust-native **single-file** Minecraft launcher: iced 0.14 + Material 3 Expressive UI, built-in AI agent -(chat / config edits / crash diagnosis) and an MCP server other agent tools can attach to. +(chat / setting edits / crash diagnosis) and an MCP server other agent tools can attach to. No WebView, no bundled runtime, no JRE download needed to start the launcher itself. ## Downloads +Asset names are `___`, underscore separated — the rule +`packaging/make_artifacts.py::asset_stem()` applies: + | Platform | Asset | Notes | | --- | --- | --- | -| Windows 10/11 x64 | `unlucky-launcher-{{VERSION}}-windows-x64.exe` | single exe, double-click to run | -| Windows 11 ARM64 | `unlucky-launcher-{{VERSION}}-windows-arm64.exe` | single exe, runs natively on ARM64 Windows | -| Linux x64 (X11/Wayland) | `unlucky-launcher-{{VERSION}}-linux-x64.tar.gz` | single binary inside, no installer | -| Linux arm64 (X11/Wayland) | `unlucky-launcher-{{VERSION}}-linux-arm64.tar.gz` | single binary inside; needs glibc 2.35+ | -| macOS 12+ Apple Silicon | `unlucky-launcher-{{VERSION}}-macos-arm64.tar.gz` | single binary inside, no installer | -| macOS 12+ Intel | `unlucky-launcher-{{VERSION}}-macos-x64.tar.gz` | single binary inside, no installer | +| Windows 10/11 x64 | `unlucky-launcher_{{VERSION}}_windows_x64.exe` | single exe, double-click to run | +| Windows 11 ARM64 | `unlucky-launcher_{{VERSION}}_windows_arm64.exe` | single exe, runs natively on ARM64 Windows | +| Linux x64 (X11/Wayland) | `unlucky-launcher_{{VERSION}}_linux_x64.tar.gz` | single binary inside, no installer | +| Linux arm64 (X11/Wayland) | `unlucky-launcher_{{VERSION}}_linux_arm64.tar.gz` | single binary inside; needs glibc 2.35+ | +| macOS 12+ Apple Silicon | `unlucky-launcher_{{VERSION}}_macos_arm64.tar.gz` | single binary inside, no installer | +| macOS 12+ Intel | `unlucky-launcher_{{VERSION}}_macos_x64.tar.gz` | single binary inside, no installer | -`LICENSE`, `NOTICE` and `README.md` ship in every archive; on Windows they are attached to -this release next to the `.exe` (a lone exe cannot carry them), so the license terms travel -with the download on every platform. +Each archive unpacks to one top-level directory of the same name holding the binary plus `LICENSE`, +`NOTICE` and `README.md`; the Windows assets are bare `.exe` files, so those three documents are attached +to this release next to them — the license terms travel with every download. -Every slot also ships the command line as its own small asset — `ull-{{VERSION}}-` -(`.exe` on Windows): +Every slot also ships the command line as its own small bare asset, +`ull_{{VERSION}}__` (`.exe` on Windows): ```bash -chmod +x ull-{{VERSION}}-linux-x64 # Release 资产不带可执行位,先补上 -./ull-{{VERSION}}-linux-x64 instances list # servers / CI / Termux: no graphics stack needed -unlucky-launcher instances list # desktops: the GUI binary answers the same commands +chmod +x ull_{{VERSION}}_linux_x64 # release assets carry no executable bit +./ull_{{VERSION}}_linux_x64 instances list # servers and CI: no graphics stack needed ``` -`ull` runs `instances`, `install`, `launch`, `accounts`, `sessions`, `logs`, `diag`, `config`, -`java` and `agent`, and links no graphics library at all. The GUI binary accepts the same set -before it ever opens a window, so on a machine with a desktop you do not need `ull`. +`ull` runs `instances`, `install`, `pack import`, `launch`, `accounts`, `sessions`, `logs`, `diag`, +`config`, `java` and `agent`, and links no graphics library at all. The GUI binary accepts the same set +before it ever opens a window, so a desktop machine does not need `ull`. ## Support matrix | Platform | Level | Runtime requirements | | --- | --- | --- | | Windows 10/11 x64 | first class | nothing beyond the OS (UCRT is part of Win10+) | -| Windows 11 ARM64 | first class (launcher artifact) | nothing extra; launcher runs natively, the game itself runs through the OS x64 emulation layer with an x64 JDK | -| macOS 12+ (arm64 / x64) | first class | nothing; unsigned build, see Gatekeeper note | +| Windows 11 ARM64 | first class (launcher artifact) | nothing extra; the launcher runs natively, the game itself runs through the OS x64 emulation layer with an x64 JDK | +| macOS 12+ (arm64 / x64) | first class | nothing; unsigned build, see the Gatekeeper note | | Linux x64, X11 | first class | `libxkbcommon`, `fontconfig`, `libGL` (or software renderer), `libxcb` | | Linux x64, Wayland | supported | `wayland-client`, `libxkbcommon`, plus the X11 set for XWayland apps | -| Linux arm64, X11 | first class | glibc 2.35+ (built on `ubuntu-22.04-arm`, same floor as x64), `libxkbcommon`, `fontconfig`, `libGL`, `libxcb` | +| Linux arm64, X11 | first class | glibc 2.35+ (same floor as x64), `libxkbcommon`, `fontconfig`, `libGL`, `libxcb` | | Linux arm64, Wayland | supported | the above plus `wayland-client` | -| Windows 8.1/8/7 | unsupported | baseline was raised to Win10 (decision D21) | -| Android — Termux + X11 | experimental, not promised | CLI only (the `ull` asset, or build from source), GUI unverified; not part of this release matrix | +| Windows 8.1/8/7 | unsupported | the baseline is Windows 10 | +| Android — Termux + X11 | experimental, not promised | CLI only and only when built from source; GUI unverified; not part of this release matrix | -Both arm64 rows are **formally released slots** (the assets ship in this release and in -`SHA256SUMS.txt`), not the experimental Termux path: Linux arm64 is built and smoke-tested on a -native ARM64 runner, Windows ARM64 is cross-built with the same static-CRT gate as x64. +Both arm64 rows are **formally released slots** (assets ship here and in `SHA256SUMS.txt`), not the +experimental Termux path: Linux arm64 is built and smoke-tested on a native ARM64 runner, Windows ARM64 is +cross-built with the same static-CRT gate as x64. ## Install -**Windows** — put the `.exe` anywhere and run it (pick `-windows-arm64.exe` on ARM64 Windows, -`-windows-x64.exe` everywhere else). Portable data lives next to the exe when a -`portable.marker` file is present, otherwise under `%APPDATA%`. +**Windows** — put the `.exe` anywhere and run it (pick `_windows_arm64.exe` on ARM64 Windows, +`_windows_x64.exe` everywhere else). The first run creates `.ULL/` and `.minecraft/` next to the exe +(portable is the default data mode); the per-user `%APPDATA%\ULL` plus `%APPDATA%\.minecraft`, or a custom +root, are selectable instead. -**Linux** +**Linux / macOS** ```bash -tar -xzf unlucky-launcher-{{VERSION}}-linux-x64.tar.gz # use linux-arm64 on aarch64 -cd unlucky-launcher-{{VERSION}}-linux-x64 # ditto -chmod +x unlucky-launcher && ./unlucky-launcher -``` - -**macOS** - -```bash -tar -xzf unlucky-launcher-{{VERSION}}-macos-arm64.tar.gz -cd unlucky-launcher-{{VERSION}}-macos-arm64 -xattr -d com.apple.quarantine unlucky-launcher # unsigned build, Gatekeeper quarantine +tar -xzf unlucky-launcher_{{VERSION}}_linux_x64.tar.gz # _linux_arm64 on aarch64; _macos_arm64 / _macos_x64 on macOS +cd unlucky-launcher_{{VERSION}}_linux_x64 # ditto +xattr -d com.apple.quarantine unlucky-launcher # macOS only: unsigned build, Gatekeeper chmod +x unlucky-launcher && ./unlucky-launcher ``` ## No GPU? Software renderer The UI renders through `wgpu` (GPU) and falls back to the `tiny-skia` CPU rasteriser when no usable -adapter is present. Force the CPU path on any machine with: - -```bash -unlucky-launcher --software-renderer # the documented switch -unlucky-launcher --renderer=cpu # equivalent: pick the CPU renderer explicitly -``` +adapter is present; `--software-renderer` (or its equivalent `--renderer=cpu`) forces that path. ## Verify the download ```bash -# Linux / macOS -sha256sum -c SHA256SUMS.txt --ignore-missing -# Windows (PowerShell) -Get-FileHash .\unlucky-launcher-{{VERSION}}-windows-x64.exe -Algorithm SHA256 +sha256sum -c SHA256SUMS.txt --ignore-missing # Linux / macOS +Get-FileHash .\unlucky-launcher_{{VERSION}}_windows_x64.exe -Algorithm SHA256 # Windows PowerShell ``` -## Checksums - ``` {{SUMS}} ``` ## Known limitations of this build -- Microsoft (MSA) account login depends on a Mojang app-id whitelist that is still pending; - until it is granted, use offline accounts or authlib-injector (the 403 is reported with a - readable diagnostic instead of a silent failure). -- Binaries are not code-signed / notarized yet: Windows SmartScreen and macOS Gatekeeper warn - on first launch. Checksums above are the integrity reference for now. -- macOS ships the bare binary (single-file promise), not a `.app` bundle: no Dock icon or - Finder double-click — launch it from a terminal. +- Microsoft (MSA) sign-in needs an Azure public client id, and release binaries do not carry one: set + `ULL_MSA_CLIENT_ID=` before launching, or build with that variable set. Until then the app says + "not configured" (with the command to fix it) instead of failing silently. Offline profiles and + authlib-injector servers need no id. +- Binaries are not code-signed / notarized yet: Windows SmartScreen and macOS Gatekeeper warn on first + launch. The checksums above are the integrity reference for now. +- macOS ships the bare binary (single-file promise), not a `.app` bundle: no Dock icon or Finder + double-click — launch it from a terminal. ## License -Apache-2.0. Third-party notices are in `NOTICE`. Unlucky Launcher is not affiliated with Mojang or -Microsoft; it does not ship game files. +Apache-2.0, third-party notices in `NOTICE`. Not affiliated with Mojang or Microsoft; no game files ship. ## UI framework in this build -Every asset in this release is built from the iced UI (`crates/app-iced`, iced 0.14, MIT) — no Slint -code is linked into it. The earlier Slint UI (`crates/app`) stays in the repository as historical -source only: excluded from the cargo workspace, not built, not part of any asset here and not part of -the release matrix. It did ship in the previous `v0.1.0` release; that release's Slint Royalty-Free -2.0 attribution remains where it was published, and no asset in this build carries that obligation. -There is deliberately no "Made with Slint" badge on this page: the obligation follows a Slint-linked -binary, and this release has none. +Every asset here is built from the iced UI (`crates/app-iced`, iced 0.14, MIT); no Slint code is linked +into it. The earlier Slint UI (`crates/app`) stays in the repository as historical source only — +excluded from the workspace, not built, in no asset and in no release slot. The Slint Royalty-Free 2.0 +attribution it carried belongs to the `v0.1.0` release and remains where it was published. From 5a9d67530ab3b7241dcb12f7c0cd2c803b787afe Mon Sep 17 00:00:00 2001 From: AskaEth Date: Thu, 5 Nov 2026 18:00:55 +0800 Subject: [PATCH 2/2] =?UTF-8?q?docs(packaging):=20M129=20r1=20P1-1=20?= =?UTF-8?q?=E2=80=94=E2=80=94=20MSA=20=E9=82=A3=E6=AE=B5=E6=94=B9=E6=88=90?= =?UTF-8?q?=20GUI=20=E7=8E=B0=E6=9C=89=E8=A1=8C=E4=B8=BA=EF=BC=8C=E4=B8=8D?= =?UTF-8?q?=E5=86=8D=E5=86=99=E3=80=8C=E7=95=8C=E9=9D=A2=E4=BC=9A=E5=91=8A?= =?UTF-8?q?=E8=AF=89=E4=BD=A0=E6=80=8E=E4=B9=88=E9=85=8D=E3=80=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 复审 r1 把链路走了一遍:core 缺 id 早退(零网络)成立,但 presenter 的 fail() 只把原文 eprintln 进日志,事件只带原因码 Other;账户页据此画通用横幅「Sign-in failed」+「Code: other」, 完整原因在日志里。LaunchMsaNotConfigured 那条 i18n 目前只有定义/单测/golden,GUI 零调用点。 所以上一版「the app says "not configured" (with the command to fix it)」是把设计意图写成了现有行为。 改成分段如实描述:无 id 时在联网之前就停;GUI 显示通用横幅 + Code: other(原因在日志); `ull accounts add msa` 会打出可照抄的修复命令(map_auth_error 的 hint,含变量名与 cargo build)。 另按 r1 P2-1 给 macOS 补 shasum 校验行(sha256sum 不是 macOS 自带)。 --- packaging/release-notes.md | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/packaging/release-notes.md b/packaging/release-notes.md index 63faa82..cf19ff4 100644 --- a/packaging/release-notes.md +++ b/packaging/release-notes.md @@ -76,7 +76,8 @@ adapter is present; `--software-renderer` (or its equivalent `--renderer=cpu`) f ## Verify the download ```bash -sha256sum -c SHA256SUMS.txt --ignore-missing # Linux / macOS +sha256sum -c SHA256SUMS.txt --ignore-missing # Linux +shasum -a 256 -c SHA256SUMS.txt # macOS (sha256sum is not bundled) Get-FileHash .\unlucky-launcher_{{VERSION}}_windows_x64.exe -Algorithm SHA256 # Windows PowerShell ``` @@ -87,9 +88,10 @@ Get-FileHash .\unlucky-launcher_{{VERSION}}_windows_x64.exe -Algorithm SHA256 ## Known limitations of this build - Microsoft (MSA) sign-in needs an Azure public client id, and release binaries do not carry one: set - `ULL_MSA_CLIENT_ID=` before launching, or build with that variable set. Until then the app says - "not configured" (with the command to fix it) instead of failing silently. Offline profiles and - authlib-injector servers need no id. + `ULL_MSA_CLIENT_ID=` before launching, or build with that variable set. Without it sign-in stops + before any network call; in the GUI that shows up as the generic "Sign-in failed" banner with + `Code: other` (the full reason goes to the launcher log), and `ull accounts add msa` prints the exact + fix. Offline profiles and authlib-injector servers need no id. - Binaries are not code-signed / notarized yet: Windows SmartScreen and macOS Gatekeeper warn on first launch. The checksums above are the integrity reference for now. - macOS ships the bare binary (single-file promise), not a `.app` bundle: no Dock icon or Finder