Skip to content

Releases: pumni/Sky-Auto-Player

v2.4.4

Choose a tag to compare

@github-actions github-actions released this 24 Jul 21:04

Full Changelog: v2.4.3...v2.4.4

v2.4.1

Choose a tag to compare

@github-actions github-actions released this 20 Jul 06:13

Fixed

  • Calibration decision tree — severe delivery-timing failures (failed releases, p99 > 15 ms, late > 10 ms count > 5) now route to audience_safe; local_precise is reserved for infeasible same-key repeats without timing failure. Missed-note failure modes no longer pick the tightest profile.
  • Tempo scalingrec_tempo is now min(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 new audience_safe vs local_precise split.

Notes

Shader-free pure-scheduler patch. No SendInput, platform, or updater surfaces touched. Build provenance attested.

v2.4.0 - Portable Distribution & External Updater

Choose a tag to compare

@github-actions github-actions released this 18 Jul 19:23

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.bat in the install folder, then reopening Sky-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_apply and update.pending_update_version fields in config.json are no longer read or written. Existing entries in older config.json files are ignored silently and stripped on next save.

Added

  • External updaterupdater.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. Preserves config.json and skips songs/ entirely. Log: %LOCALAPPDATA%\Sky-Player\updater.log. Supports -Channel stable|beta, -DryRun, -ForceClose, -Restart.
  • update.channel (default stable), update.last_notified_version, and (until 2.4.1) update.legacy_old_dir_sweep_pending in config.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.toml version 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 on windows-latest against the free-threaded interpreter.
  • Pre-commit config (.pre-commit-config.yaml) mirrors the same gates locally and adds check-yaml / check-toml / check-json / eol / trailing-whitespace.
  • Pytest markers (scheduler, windows, golden, slow) and norecursedirs declared via [tool.pytest.ini_options].
  • .editorconfig pins 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_staged from the app and service layers.
  • UpdateProgressModal from src/sky_music/ui/textual_app/modals.py.
  • find_old_backups, post_update_flag_path, write_apply_batch, apply_update_and_restart from src/sky_music/infrastructure/update_installer.py.
  • simulate_update.py scenarios download-ok and download-bad-sha.
  • use_ll_hook machinery — opt-in global WH_KEYBOARD_LL hook (SetWindowsHookExW), the dormant hotkey_hook.py module, the AppConfig.use_ll_hook field, and the PlaybackControls._hook slot. The hotkey mechanism now relies exclusively on the focus-gated poll path (is_virtual_key_down), aligning the runtime with AGENTS.md P0.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 existing audit_free_threaded_wheels.py precheck. It forbids ReadProcessMemory, WriteProcessMemory, SetWindowsHookEx*, CreateRemoteThread, DebugActiveProcess, NtQueryInformationProcess, imports of pymem/pyinject/win32api, and WinDLL("ntdll.dll"), while explicitly allowing only the SendInput family.
  • Public SECURITY.md restates 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

Choose a tag to compare

@pumni pumni released this 17 Jul 00:53

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

Choose a tag to compare

@pumni pumni released this 15 Jul 22:15

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_dropped and chord_split_events, plus a retain_records_after_save option 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 packaging dependency and centralized versioning logic across pyproject.toml, uv.lock, and _version.py.

v2.3.2 - Dispatch Latency Optimization

Choose a tag to compare

@pumni pumni released this 12 Jul 22:55

Improvements & Optimizations

  • Optimized the dispatch hot path by eliminating the GetForegroundWindow focus-checking syscall.
  • Implemented dynamic scaling for the SendLatencyEstimator bucket size (dynamic max polyphony) adapted per song.
  • Prewarmed INPUT arrays (ctypes structs) for individual keys and chords prior to playback, eliminating runtime latency spikes.
  • Updated and fixed the telemetry logger, specifically addressing the deferred_by_us and send_while_unfocused metrics.

v2.3.1 - The Auto-Update Engine

Choose a tag to compare

@pumni pumni released this 12 Jul 20:19

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

Choose a tag to compare

@pumni pumni released this 12 Jul 11:39

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 SendLatencyEstimator is 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_forget factor 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 tight perf_counter_ns loop. (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 RuntimeError under load. (4191b83)
  • Disable lead cache in DryRunBackend_lead_cache_enabled now returns False when the active backend is DryRunBackend, 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 run Sky-Player.exe.

v2.2.4

Choose a tag to compare

@pumni pumni released this 25 Jun 06:07
refactor(backend): centralize tracked key state initialization and add t

v2.2.3

Choose a tag to compare

@pumni pumni released this 23 Jun 08:49
I don't know what to do anymore. If anyone has any ideas on how to he…