Releases: pumni/Sky-Auto-Player
Releases · pumni/Sky-Auto-Player
Release list
v2.4.4
Full Changelog: v2.4.3...v2.4.4
v2.4.1
Fixed
- Calibration decision tree — severe delivery-timing failures (failed releases, p99 > 15 ms, late > 10 ms count > 5) now route to
audience_safe;local_preciseis reserved for infeasible same-key repeats without timing failure. Missed-note failure modes no longer pick the tightest profile. - Tempo scaling —
rec_tempois nowmin(current, target)in both severe and moderate branches, so a user tempo of 0.93 on a 0.95 target no longer rounds upward to 0.95. - Excellent-timing path — keeps the user's current profile instead of always recommending
local_precise; the calibration report now confirms rather than changes. - Latency margin guard — calibrated margin recommendation is rejected when sample count
n < 50, preventing low-sample p99/p50 quantiles from poisoning the input-latency guard.
Changed
docs/timing-profile-frame-model.md: updated severe-failure routing description to match the newaudience_safevslocal_precisesplit.
Notes
Shader-free pure-scheduler patch. No SendInput, platform, or updater surfaces touched. Build provenance attested.
v2.4.0 - Portable Distribution & External Updater
Changed — breaking
- In-app auto-update is removed. Sky Player now notifies you when a new version is available; applying it is done by running the new
updater.batin the install folder, then reopeningSky-Player.exe. This moves Sky Player to a portable-distribution model and removes in-place file-replacement logic from the running app. The previous "Auto-apply without asking" toggle is removed from Update Settings. - "Check for Update" in the picker now surfaces a banner modal with three actions: Open Releases page, Skip this version, Dismiss. The Download-and-apply progress modal is removed.
- The
update.auto_applyandupdate.pending_update_versionfields inconfig.jsonare no longer read or written. Existing entries in olderconfig.jsonfiles are ignored silently and stripped on next save.
Added
- External updater —
updater.bat(repo root) +installer/updater.ps1. Verifies SHA256 before any install mutation; stages in TEMP; backs up and copies binaries transactionally with fallback rollback on failure. Preservesconfig.jsonand skipssongs/entirely. Log:%LOCALAPPDATA%\Sky-Player\updater.log. Supports-Channel stable|beta,-DryRun,-ForceClose,-Restart. update.channel(defaultstable),update.last_notified_version, and (until 2.4.1)update.legacy_old_dir_sweep_pendinginconfig.json. Channel is wired to the in-app check (include_prerelease) and to the external updater.- One-time sweep of legacy
.old.{guid}install siblings left from pre-2.4.0 atomic swaps. - Release pipeline (
.github/workflows/release.yml) — tag-driven build with tag↔pyproject.tomlversion lock, free-threaded audit, build-provenance attestation, three-artifact triple (zip+sha256+MANIFEST.json). - CI workflow (
.github/workflows/ci.yml) executes the full altitude table onwindows-latestagainst the free-threaded interpreter. - Pre-commit config (
.pre-commit-config.yaml) mirrors the same gates locally and addscheck-yaml/check-toml/check-json/eol/trailing-whitespace. - Pytest markers (
scheduler,windows,golden,slow) andnorecursedirsdeclared via[tool.pytest.ini_options]. .editorconfigpins UTF-8, LF, 4-space indent for Python and 2-space for YAML/TOML/JSON; CRLF preserved on*.bat.PULL_REQUEST_TEMPLATE.md+ issue templates (bug_report.md,feature_request.md,security_p0.md,config.yml).docs/distribution-and-update.md— contributor documentation.
Removed
apply_update_and_restart,write_apply_batch,apply_staged_update,download_and_verify_update,download_and_apply_update_worker,_apply_stagedfrom the app and service layers.UpdateProgressModalfromsrc/sky_music/ui/textual_app/modals.py.find_old_backups,post_update_flag_path,write_apply_batch,apply_update_and_restartfromsrc/sky_music/infrastructure/update_installer.py.simulate_update.pyscenariosdownload-okanddownload-bad-sha.use_ll_hookmachinery — opt-in globalWH_KEYBOARD_LLhook (SetWindowsHookExW), the dormanthotkey_hook.pymodule, theAppConfig.use_ll_hookfield, and thePlaybackControls._hookslot. The hotkey mechanism now relies exclusively on the focus-gated poll path (is_virtual_key_down), aligning the runtime withAGENTS.mdP0.1 ("NO GAME TAMPERING — no hooks") and clearing the only outstanding entry in.config/security_audit_baseline.json.
Security
- AGENTS.md P0 audit enforced in CI. New
scripts/audit_security_mandates.py(AST scanner) runs on every push and PR alongside the existingaudit_free_threaded_wheels.pyprecheck. It forbidsReadProcessMemory,WriteProcessMemory,SetWindowsHookEx*,CreateRemoteThread,DebugActiveProcess,NtQueryInformationProcess, imports ofpymem/pyinject/win32api, andWinDLL("ntdll.dll"), while explicitly allowing only theSendInputfamily. - Public
SECURITY.mdrestates the P0 mandates and the disclosure channel (security@pumni.dev) for vulnerability-grade findings.
Full changelog: see CHANGELOG.md.
v2.3.4 - Dispatch Core Isolation & Hot-Path Hardening
Changed
- Dispatch loop & playback engine refactored — cleaner focus handling, tighter spin-threshold management.
- Timer management reworked in main loop and playback supervisor for improved accuracy and performance.
- Dispatch core isolated behind a structural interface, decoupling it from platform backends so the scheduler stays pure and unit-testable.
- Removed the deprecated alias for the abort input method in
DispatchLoop. - Added an update-flow simulator (
simulate_update.py) for exercising update scenarios offline. - Documented the UI CPU/RAM optimization plan for the 2026-07 workstream.
Performance
- Phase 1–3 hot-path hardening — telemetry flush, cheap focus gate, symmetric reprobe, and uncontaminated overshoot samples, lowering tail latency on the dispatch spin path.
Fixed
- Phase 1 correctness — focus gate, pause owner, clock, and estimator adjusted to remove residual bias and timing drift.
Full changelog: see CHANGELOG.md.
v2.3.3 - Performance, Command Palette & Atomic Updates
Performance
- Optimized orchestration dispatch and memory usage, cutting per-song working-set growth and reducing RSS memory during long playbacks.
- Released per-song resources and unused memory back to the OS after playback, stabilizing the footprint across repeated sessions.
- Hardened the real-time dispatch path with power throttling management and residual bias handling so input timing stays deterministic under load.
Features
- Rebuilt the command palette with modern navigation and localized the UI to English; added a manual update check.
- Implemented robust atomic updates with persistent version tracking and a safe manual fallback, plus auto-apply update configuration and status indicators.
- Added an update settings modal and silent background update checks.
- Introduced the MetadataHandle interface and refactored app state management around it.
- Added the PickerScreen for song selection and configuration.
- Added an example configuration file to document application settings.
Telemetry & Diagnostics
- Extended BackendHealth with
keys_droppedandchord_split_events, plus aretain_records_after_saveoption to preserve telemetry records post-save. - Enhanced send diagnostics to track dropped and retried keys; added abort-reason telemetry and focus-input lifecycle tests.
Fixes
- Fixed modal focus leakage from CommandModal dismiss callbacks.
- Restored search match highlighting in the song picker.
- Escaped Rich markup and consolidated duplicate CSS in the footer.
Build & Tooling
- Added uv env config, free-threaded wheel audit, and stdlib prune to the release pipeline.
- Added the
packagingdependency and centralized versioning logic acrosspyproject.toml,uv.lock, and_version.py.
v2.3.2 - Dispatch Latency Optimization
Improvements & Optimizations
- Optimized the dispatch hot path by eliminating the
GetForegroundWindowfocus-checking syscall. - Implemented dynamic scaling for the
SendLatencyEstimatorbucket size (dynamic max polyphony) adapted per song. - Prewarmed
INPUTarrays (ctypesstructs) for individual keys and chords prior to playback, eliminating runtime latency spikes. - Updated and fixed the telemetry logger, specifically addressing the
deferred_by_usandsend_while_unfocusedmetrics.
v2.3.1 - The Auto-Update Engine
v2.3.1 - The Auto-Update Engine 🚀
This release introduces a fully integrated, built-in self-updating mechanism for Sky Player. You'll never have to manually download the app again!
✨ What's New
- Autonomous Updater: Sky Player will now periodically check for updates on startup.
- In-App Notifications: A beautiful, unintrusive UI modal will alert you when a new version is available, complete with release notes.
- 1-Click Install: Click Download and restart, and Sky Player will securely download the update, swap out its own files atomically, and restart itself instantly.
🛡️ Security & Reliability
- SHA-256 Verification: Every update payload is rigorously checked against cryptographic checksums before touching your system.
- Zip-Slip Protection: Safe extraction paths ensure malicious archives cannot overwrite files outside the app's directory.
- Atomic Swaps: Upgrades happen safely via a detached script, making sure the app never corrupts its own executables.
Download the .zip below, extract, and run Sky-Player.exe. Starting from this version, updates will come to you!
v2.3.0
Release v2.3.0
Tag: v2.3.0
✨ Features
- Per-batch lead and polyphonic estimator — each chord batch now computes its own down-lead using an adaptive logic that accounts for the number of simultaneous notes. The
SendLatencyEstimatoris extended with polyphony buckets and a linear lead model, so chords of different sizes are dispatched with the right anticipation instead of a single fixed offset. (712c02e) - Exponential forgetting for the latency estimator — introduces a
lin_forgetfactor and RLS-style accumulators, so the estimator tracks recent network/system jitter instead of a stale long-term mean. State serialization and warm-up updated accordingly. (1a94ce2)
🚀 Performance
- Trimmed dispatch hot-path allocations and tightened the spin loop in
orchestration/dispatch_loop.py, reducing per-action overhead on the tightperf_counter_nsloop. (7cdb8fb)
🐛 Fixes
- Safe latency deque snapshot — the UI now retries and falls back to an empty list when the latency deque is mutated mid-iteration, instead of raising
RuntimeErrorunder load. (4191b83) - Disable lead cache in DryRunBackend —
_lead_cache_enablednow returnsFalsewhen the active backend isDryRunBackend, preventing a stale cached lead from skewing dry-run timing previews. (911d123)
📦 Assets
Sky-Player-v2.3.0.zip— standalone Windows build. Extract anywhere and runSky-Player.exe.