Repository navigation
v1.0.0
Dashboard
- Move navigation and search into the top bar; remove the retired local-overlay guide and schema builder.
- Show larger installed cards with enlargeable live previews, and list catalog overlays with lazy-loaded preview images and their metadata.
- Adapt the dashboard to the screen: catalog rows sit side by side when there is room, previews follow the window height so short laptop screens show more cards, catalog text scales with its card, and the whole layout grows slightly on large monitors. Phones get a compact header with full-width page tabs and settings checkboxes beside their labels; short landscape screens no longer pin the header.
- Autosave runtime settings with interval/port validation; preserve the unsaved/error status until every rejected field is corrected.
- Show a community-overlays notice above the Available listing: listed overlays are third-party work from the tosu catalog, run with the dashboard's access, and should be installed only when trusted. It links the upstream catalog and the privacy policy.
- Describe Automatic updates accurately: turning it off stops startup installation, but release builds still check for a new version at every start.
Packaging and desktop
- Publish Debian/Ubuntu (
.deb), Fedora (.rpm), and Arch (.pkg.tar.zst) packages next to the portable ZIPs, plus a rendered AURvosu-binPKGBUILD bundle. Packages install/usr/bin/vosu, an application launcher, and icons, and runvosu --setupon install and upgrade without failing the transaction when capabilities cannot be set. - Build Linux releases against glibc 2.35, so the binary runs on Debian 12+, Ubuntu 22.04+, Fedora, and Arch; release CI asserts the baseline and install-tests every package in clean containers.
- Show a tray icon on Linux (StatusNotifierItem) and Windows with Open dashboard and Quit; headless sessions without a tray host run unchanged.
- Launching vosu while another instance already serves the configured address opens that instance's dashboard and exits instead of failing to bind.
- Add the Linux-only Start at login setting (
START_AT_LOGIN), which manages a marked systemd user unit for the graphical session. - Treat an executable whose directory the user cannot write (for example a package-managed
/usr/bin/vosu) as externally managed: skip self-update checks, rejectPOST /api/runUpdateswith an explanation, and disable the dashboard's automatic-update setting. - Build tagged releases from a clean target directory without restoring any Cargo cache. Windows releases stay unsigned until SignPath signing is enabled; signed releases must carry a timestamped signature issued to SignPath Foundation.
Security
- Prevent counter-delete CSRF and protect the shared management mutation boundary with exact same-origin browser provenance. Counter delete/download/open, updater, and report actions now require POST; no mutating GET aliases remain. The dashboard uses the new methods.
- Preserve headerless/file-origin read-only overlay access and stock settings commands. Hosted counters can still save settings without new tokens or code; non-hosted sockets may read settings but cannot save them.
- Management writes require exact HTTP scheme/host/port browser provenance;
Originis authoritative, withRefererfallback only when absent. Missing, null, malformed, or duplicate provenance cannot authorize writes. Non-hosted settings sockets retain reads but close with 1008 before saving or relaying mutations. - Made an unprivileged
vosu --setuprequest OS-owned authentication through a trusted polkitpkexecboundary before any capability change. Root execution skips authentication; cancellation, denial, unavailable/noninteractive elevation, and missingpkexecfail without invokingsetcap. Vosu never reads credentials and has no sudo fallback. vosu --setupwarns before the authentication prompt when the executable or its directory is writable without root, as with a portable ZIP: the polkit prompt authorizes whatever file currently sits at that path. Setup still continues so portable installs can receive capabilities.- Bound native telemetry, calculator inputs, counter installation and transport work without losing stable hit-error catch-up, ordered filter precedence or settings refreshes during receive-side connection contention. Preserve per-recipient control-queue backpressure.
Runtime and maintenance
-
Selected-field v2 subscriptions now sample game state on their own cadence. While any selection is established, both readers run every
V2_SUBSCRIPTION_DEBOUNCEmilliseconds, so subscribed fields can change before HTTP and compatibility WebSocket payloads. Those payloads keep theirPOLL_RATE/PRECISE_DATA_POLL_RATEcadence; beatmap changes and retries still reach them immediately. The osu!stable stall-pause heuristic no longer depends on how often state is sampled. -
V2_SUBSCRIPTION_DEBOUNCEnow defaults to1with a minimum of1. Saved values below the minimum clamp to1, and settings saves below1are rejected. -
Disable Nagle's algorithm (
TCP_NODELAY) on every accepted connection. Small WebSocket state frames written while an earlier frame was still unacknowledged waited for the client's delayed ACK (about 40 ms on Linux loopback) and then arrived in bursts; at the 1 ms selected-field cadence this showed up as live-time delivery jitter. -
Fix automatic offset generation for lazer framework upgrades, including
2026.1005.0on .NET 10: run both embedded helpers with the exact client's bundled CLR/framework in disposable staging instead of measuring under the helper's .NET 8 build runtime. No user-installed SDK, runtime download, or game-file modification is needed. -
Include client-published NuGet framework replacements and their transitive dependencies in the staged helper runtime. Native Windows startup with the client's .NET 8 runtime and
System.Text.Json/System.IO.Pipelines10 now resolves the game and serves its live API without changing the game or verified helper payload. -
Route maintained Windows autoresearch benchmarks through the shared
windows-vmcommand: transfer filtered source/vendor archives with SFTP, extract through native PowerShell, and clean temporary archives on success or failure. Sources, Cargo vendor caches, builds, and run output stay onV:\agent-workspacesinstead of an account-specific C: profile. -
Fix mania gradual-performance completion so
last()and oversized skips return the final attributes before exhaustion; correct the osu! gradual example to finish without consuming the calculator before checking exhaustion. -
Make the daemon reload smoke verify rejected malformed TOML through unchanged served settings, untouched source bytes, and an unbound requested port, independently of whether osu! is running. Production last-good configuration and state-readiness behavior is unchanged.
-
Split maintained code into domain-focused modules capped at 1,000 lines, preserving API and calculator behavior; remove tracked offset-tool build output while retaining source, locks, and provenance.
-
Use the upstream tosu catalog service at
https://tosu.app/api.json; vosu does not operate a website. Usevosu/<version> (+https://github.com/shiruviaa/vosu)as the first-party request identity. -
Derive Windows textual and numeric executable-resource versions from the root Cargo package version, keeping both resource version fields consistent with the package.
-
Remove the report-only graphics stack; use Linux sysfs and Windows WMI hardware metadata, with explicit unavailable/unknown states.
-
Bound report log retention with visible truncation notices; isolate counter discovery, report capture, configuration persistence/reload, and ordered console output from async workers.
-
Avoid primary API graph/hit-error encoding copies, share live-calculator map preparation and unchanged stable mania replay batches, and bound WebSocket pong backpressure.
-
Use component-aware case-insensitive Windows startup-path checks rather than string-prefix matching.
-
Separate MSVC SDK, Cargo downloads, and build caches; restrict cross SDK downloads to x86_64; classify changes conservatively and always publish
CI required, including docs-only changes. -
Move packaged-executable smoke checks into
vosu-release-smoke, remove duplicate daemon asset embedding, and maintain existing Markdown without scheduled inference. Linux process-event backends and defaults remain unchanged. -
Pin release toolchain actions to reviewed commits and limit repository-write permissions to the release-publishing job. Documentation-only changes retain required CI checks without triggering native compilation.
-
Add
CONTRIBUTING.mdwith per-platform setup, the local check set, and a repository map; move the historical offsets-asset reproduction recipe from the README intodocs/operations/offsets-asset.md. Remove the vendored third-party agent skills, personal agent settings, the superseded Windows verification batch script, and the retired docs instruction stub; the Linux process-event benchmark now lives attools/autoresearch/process-events-bench.sh. -
Replace remote/manual offset acquisition with automatic exact-instance resolution: valid versioned
<version>.jsoncache entries are preferred, then matching embedded offsets, then local generation from the exact PID and version. The extracted helper cache is keyed by the embedded bundle checksum; no bundle identity is added to offset-file metadata. Release binaries embed the platform-matching self-contained generator; end users do not install .NET, and debug builds without a prepared payload report an explicit missing-bundle error. -
Maintainer source builds prepare
target/offset-generator/<rid>/offset-generator-v1-<rid>.zipplus its.zip.sha256sidecar with the .NET 8 SDK. Release archives remain exactly the executable and rootLICENSE; updater behavior is unchanged. -
Consolidate the five retained autoresearch lanes: reduce Linux read/scanner allocation work, combine lazer key-read stages, avoid per-byte stable mod-checksum allocations, reserve v1 serialization capacity and sort StreamCompanion strains in place, share selected-field comparison results, and reuse immutable calculator source maps.
-
Retain the Linux sparse-large iovec capacity change with a measured limitation: 65,536-request/33-active spread/back probes improved 10.64–13.54%, while all-empty and 32-active controls regressed 2.64–3.83%. These are synthetic native self-process measurements, not a general daemon speedup; see the benchmark guide.
-
Merge all five reopened lane histories and benchmark the combined source against both the original optimization base and previous integration. Production calculator preparation and shared subscriptions improved on the measured fixtures; native lazer precise capture was 16.04% faster than previous while requested bytes rose 570 → 912 per cycle.
-
Preserve the final measured limitations: sparse 33-front/64-spread controls were 16.48%/13.69% slower than the original base, distinct-plan fast-writer subscriptions were 4.03% slower than previous, and mania parsing was 4.89% slower than previous. These are workload-specific results, not a general daemon speedup; see the final combined measurements.
-
Qualify the retained parsing regression as archived-binary/protocol-specific: follow-up diagnosis found unchanged allocations and negligible instruction-work changes, while a disposable diagnostic reversed the timing sign with setup both present and absent. The exact cause remains unresolved; no parser speedup or fix is claimed. Preserve the original unfavorable numbers and see the parsing interpretation and local evidence.
-
Keep live-parity attestation compatible with protected Git for Windows/MSVC build layouts; require initialized client settings before promoting the menu barrier. Compare shared fields strictly while recognizing only vosu's documented additive hit-error arrays and
keys.allpaths. Distinguish stale Windows exit snapshots from new clients without relaxing PID/creation-time ownership checks. -
Attest the exact published compressed Linux parity reference by its pinned executable SHA-256 rather than requiring an uncompressed version string; retain ELF, configured-digest, ownership, and strict comparison checks.
-
Preserve the Linux live-parity socket-ownership cache across CLI module composition; keep its 5 ms lifetime and exact process/connection ownership checks unchanged.
-
Require the exact Linux production build command, including
linux-process-events, when verifying live-parity build attestation; keep the Windows command and all capture/comparison gates unchanged. -
Preserve the attested executable search order on POSIX when constructing the reference-build PATH, so system Rustup proxies cannot shadow a protected Rust toolchain; continue rejecting untrusted paths and cross-tool shadowing.
-
Build the pinned upstream Node reference on Linux without requiring
cmd.exe; retain protectedcmd.exeand MSVC discovery requirements on Windows. -
Mark Linux osu!stable through Wine as experimental and not release-verified; retain its existing discovery/read implementation without claiming a live-parity pass.
-
Record clean strict Windows stable, Windows lazer, and native Linux lazer release-gate captures with exact source/artifact identities; preserve failed sampling-boundary captures without claiming those boundaries are fixed.
Documentation
- Move maintained Markdown from
openwiki/todocs/, update live navigation and relative references, and document the reviewed-maintenance workflow without generator dependencies. - Add a privacy policy covering every network request (GitHub update checks and downloads, the tosu catalog, overlay download hosts, and catalog preview images), the local API, and locally stored data.
- Add a code signing policy for SignPath Foundation signing of the Windows executable, link it from the README and release notes, and add uninstall instructions.
- Document the community-overlay licensing position in the third-party notices, and record the decision to keep counters on the dashboard origin (ADR 0013).
- Add a security and installation disclosure (memory access, Linux capabilities and process-event backends, installed files, system changes, network exposure) and a security policy for private vulnerability reports.
- Record the final released-tosu comparison on native Windows and the Linux VM, keeping whole-daemon resources separate from synthetic reader latency and preserving the unfavorable Linux VM precise-reader result. See the measured protocol and limitations; those measurements describe the recorded 0.3.0 generation, not the final 1.0.0 dashboard build.
Gameplay
- Reset published hit-error arrays when osu!lazer or osu!stable rebuilds the live hit-event list, so editor test-mode section restarts drop pre-restart errors and skipped-object zeros instead of waiting for those notes to elapse again.
- Track upstream tosu changes through
2359305a63f2aaebb201bc8d2eee58177f52590e: expose lazer multiplayer rooms and optional avatars, preserve falsey stable settings, recognize multiplayer ScoreV2, and calculate unstable rate incrementally using the active clock rate. - Retain lazer gameplay score, hit counts, accuracy, rank, and modifiers while paused; entering song selection still clears the previous play epoch.
Licensing
- Correct first-party attribution to
Copyright (c) 2026 sxlviain the root/calculator license copies and Windows resources, preserving genuine upstream copyright and canonical MIT/Apache terms. - Include the six retained calculator MIT texts (rosu-pp, rosu-map, osu!, osu-framework, osu-tools and dotnet/runtime) in the root release
LICENSEwithout changing the updater's two-entry ZIP contract; reject stale license members and bad ZIP CRCs. - Qualify unsupported source-independence claims, inventory locked dependency license declarations, and record concrete source matches and unresolved production-file origins in the provenance audit. Map the current calculator to its pinned permissive sources and keep the former wrapper only as a historical parity reference and black-box oracle.
Calculation
-
Replaced the former LGPL-declared native live calculator with a Rust facade and pinned MIT
rosu-pp4.0.1 /ppy/osusources; retained the former calculator tree only as non-production historical parity evidence. The replacement commit's clean-room characterization is not a certification of source independence; see the provenance audit. -
Update max-achievable/full-combo score and accuracy projections, nested tick-score metadata, long-slider/spinner strain graph bounds, Hidden slider opacity, and source-calculator performance clamps. Regenerate current API/calculator fixtures while retaining historical source and NUnit provenance.
-
Report converted osu!→mania display circle size using the source-OD fallback with ties-to-even rounding and 4–7 bounds, then apply key-count overrides and Dual Stages doubling. Native mania display and playable-map difficulty/PP remain unchanged.
-
Refresh the embedded lazer offsets for osu!
2026.921.0, including room-user fields, with version-matched runtime-derivedGameBaseVtableevidence.
API
-
Add mode-aware
beatmap.stats.hitWindowjudgement windows, including upstream's zero-valued Catch windows; normalize StreamCompanion token-array commands without broadening other WebSocket command paths. -
Restored the tosu-compatible hit-error arrays at
hitErrorArrayandhitErrors; ordered press and release classifications now use additive siblingpressHitErrorsandreleaseHitErrorsfields. -
Matched gosuMemory v1 replay visibility and stable tournament spectator global-rank fields to current tosu behavior instead of emitting fixed defaults.
-
Replaced
beatmap.stats.timingWindowswith Storycraft's merged tosubeatmap.stats.hitWindowcontract and its mode-specificmiss,meh,ok,good,great, andperfectkeys. -
Replaced the separate
keypressesobject with a tosu-compatiblekeysobject. Regular and precise v2 responses retaink1,k2,m1, andm2and add the ordered mode-agnostic controls underkeys.all, matching the planned upstream port.
Code signing policy
SignPath signing is not active yet, so this release's Windows executable is unsigned. See the code signing policy.