Skip to content

Evilander/newamp

v1.5.7 Feature

This release adds 3 notable features for engineering teams evaluating rollout.

Published 13d Media Servers
✓ No known CVEs patched
Read the diff → Tool health → What is this tool? →

✓ No known CVEs patched in this version

ReleasePort's take

Light signal
editorial:auto 13d

v1.5.7 fixes silent data loss of album ratings from pre-1.5.4 versions with automated backfill and hardens error handling in rating, volume, and seek operations. Two breaking API changes require integration updates to align parameter order and null-check handling.

Why it matters: Upgrade for automatic data recovery on <1.5.4 migrations. Test integrations using setAlbumRating/getAlbumRating and IPC (albumArtist, album) order; verify settings.json sync flood (60-120 writes/sec) resolved.

Summary

AI summary

Updates Silent-failure hardening, Patterns, and Smokes added/extended across a mixed release.

Changes in this release

Breaking Medium

Breaking: setAlbumRatingScore and getAlbumRating throw on missing input

Breaking: setAlbumRatingScore and getAlbumRating throw on missing input

Source: llm_adapter@2026-05-21

Confidence: high

Breaking Medium

Breaking: IPC argument order aligned to (albumArtist, album) everywhere

Breaking: IPC argument order aligned to (albumArtist, album) everywhere

Source: llm_adapter@2026-05-21

Confidence: low

Breaking Medium

IPC argument order standardized to (albumArtist, album) across all call sites

IPC argument order standardized to (albumArtist, album) across all call sites

Source: granite4.1:30b@2026-05-21-audit

Confidence: low

Feature Medium

Extends rating-smoke to cover album_ratings round-trip and track separation

Extends rating-smoke to cover album_ratings round-trip and track separation

Source: llm_adapter@2026-05-21

Confidence: high

Feature Medium

Adds __newampSmoke.analyserFftSum hook to ui-visualizer-smoke

Adds __newampSmoke.analyserFftSum hook to ui-visualizer-smoke

Source: llm_adapter@2026-05-21

Confidence: high

Bugfix Medium

Fixes engine.seek false-positive warnings on seekbar drag from ~30 per drag

Fixes engine.seek false-positive warnings on seekbar drag from ~30 per drag

Source: llm_adapter@2026-05-21

Confidence: high

Bugfix Medium

Fixes AlbumsView pendingNavigation literal missing required rating fields

Fixes AlbumsView pendingNavigation literal missing required rating fields

Source: llm_adapter@2026-05-21

Confidence: high

Bugfix Medium

Fixes wheel volume settings.json sync flood from 60-120 writeFileSync per second

Fixes wheel volume settings.json sync flood from 60-120 writeFileSync per second

Source: llm_adapter@2026-05-21

Confidence: low

Bugfix Medium

Fixes silent data loss of pre-1.5.4 album ratings with backfill migration

Fixes silent data loss of pre-1.5.4 album ratings with backfill migration

Source: llm_adapter@2026-05-21

Confidence: low

Bugfix Medium

Debounces settings.json sync writes from wheel volume changes to 250 ms trailing interval

Debounces settings.json sync writes from wheel volume changes to 250 ms trailing interval

Source: granite4.1:30b@2026-05-21-audit

Confidence: low

Bugfix Medium

Adds one‑shot migration backfill for lost pre‑1.5.4 album ratings

Adds one‑shot migration backfill for lost pre‑1.5.4 album ratings

Source: granite4.1:30b@2026-05-21-audit

Confidence: low

Refactor Medium

npm run typecheck runs in prebuild to prevent type errors shipping

npm run typecheck runs in prebuild to prevent type errors shipping

Source: llm_adapter@2026-05-21

Confidence: high

Refactor Medium

Rewrites AlbumScoreInline with loud catch and stale-resolve guards

Rewrites AlbumScoreInline with loud catch and stale-resolve guards

Source: llm_adapter@2026-05-21

Confidence: high

Refactor Medium

Wraps AlbumsView.setAlbumScore write in try/catch for silent failure hardening

Wraps AlbumsView.setAlbumScore write in try/catch for silent failure hardening

Source: llm_adapter@2026-05-21

Confidence: high

Refactor Medium

Narrows Visualizer disconnectAudio error handling to benign cases only

Narrows Visualizer disconnectAudio error handling to benign cases only

Source: llm_adapter@2026-05-21

Confidence: high

Refactor Medium

Introduces canonical albumKey() helper in shared/album-key.ts

Introduces canonical albumKey() helper in shared/album-key.ts

Source: llm_adapter@2026-05-21

Confidence: high

Refactor Medium

Documents COLLATE NOCASE ASCII-only caveat at schema and helper

Documents COLLATE NOCASE ASCII-only caveat at schema and helper

Source: llm_adapter@2026-05-21

Confidence: low

Refactor Low

Increases ui-visualizer-smoke fixture duration from 4.2 s to 30 s for extended coverage

Increases ui-visualizer-smoke fixture duration from 4.2 s to 30 s for extended coverage

Source: granite4.1:30b@2026-05-21-audit

Confidence: low

Full changelog

Expert-pass cleanup driven by a 10-reviewer parallel ultrareview of the 1.5.3 → 1.5.6 changeset. Five blockers, ten high-priority items, two cleanup passes — all applied and verified by smoke.

Structural fix

`npm run typecheck` runs in `prebuild`. The frontend has had zero type checking in CI since the project's start — `build:electron` only ran `tsc` against the electron tsconfig, and `build:vite` used esbuild which strips types without checking them. That's why 1.5.4 shipped an `AlbumSummary` literal missing required fields and 1.5.5 shipped despite strict-mode TypeScript. New `typecheck` script runs `tsc` against both tsconfigs; release builds now fail on type errors instead of letting them ship.

Real bugs fixed in shipped 1.5.6

  • `engine.seek` false-positive warnings on every seekbar drag. The 1.5.4 diagnostic captured `target` in a closure but read `currentTime` at fire time. ~30 spurious warnings per drag. Now snapshots seekSeq + deck identity at schedule time and bails if anything changed.
  • `AlbumsView` pendingNavigation literal had `undefined` rating fields. Caught by the new typecheck gate. Fix also hydrates the real album rating asynchronously.
  • Wheel volume → settings.json sync writes flood. The 1.5.4 wheel-anywhere-over-viz handler made the whole canvas wheel-active; 60-120 sync `writeFileSync` calls per second on rapid scroll. Web Audio gain ramp stays synchronous; disk persist now debounces 250ms trailing.
  • Pre-1.5.4 album ratings silently vanished. New one-shot backfill migration via a `library_meta` flag table.

Silent-failure hardening

  • AlbumScoreInline rewritten: loud catch, write try/catch, write-generation guard for stale resolves, albumArtist fallback so empty-tag albums can be rated.
  • AlbumsView.setAlbumScore write wrapped in try/catch matching the 1.5.6 read-path hardening; no more lying "Rated X 75/100" after a failed write.
  • Visualizer disconnectAudio narrowed to the benign `InvalidAccessError | not connected` case; real graph corruption now logs at `console.error`.
  • `setAlbumRatingScore` + `getAlbumRating` throw on missing input — caller can distinguish "successful clear" from "this call should never have been made."

Patterns

  • Canonical `albumKey()` helper in `shared/album-key.ts`. Four inline rating sites collapsed to one.
  • IPC argument order aligned to `(albumArtist, album)` everywhere; 7 call sites updated.
  • COLLATE NOCASE ASCII-only caveat documented at schema + helper.

Smokes added/extended

  • `rating-smoke` covers album_ratings round-trip (set/get/clear/NOCASE/persist), the explicit "must not touch track ratings" guarantee, `getAlbums()` after `album_ratings` rows exist (locks down the 1.5.4 LEFT JOIN ambiguous-column regression class), and throws on bad input.
  • `ui-visualizer-smoke` adds FFT-sum liveness via a new `__newampSmoke.analyserFftSum` hook. Software WebGL drops shader paint so pixel deltas don't work, but the FFT path catches the load-bearing signal — if the analyser subtree is alive, FFT bytes are non-zero. Fixture extended from 4.2s to 30s.

Verification

`npm run typecheck` clean. Smoke battery green: library, album-art, keyboard, rating, visualizer, ui-visualizer, audio-limiter, replaygain, harmonic, sonic-atlas, album-random-sort, packaged-normal-launch. Windows binaries signed. SHA256SUMS + BUILD-PROVENANCE attached.

The 1.5.4 → 1.5.5 → 1.5.6 hotfix sequence happened because vite silently shipped TypeScript-invalid code, a silent `.catch(() => setAlbums([]))` made the SQL error look like "library is empty," and a smoke that asserted on a setup flag missed a broken render loop. All three failure modes now have structural prevention.

Weekly OSS security release digest.

The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.

No spam, unsubscribe anytime.

Share this release

Track Evilander/newamp

Get notified when new releases ship.

Sign up free

About Evilander/newamp

All releases →

Related context

Earlier breaking changes

  • v1.5.6 Milkdrop broken on 1.5.4 and 1.5.5 builds; upgrade recommended.
  • v1.5.5 Upgrade strongly recommended; version 1.5.4 cannot display albums.
  • v1.5.0 Bit-Perfect Path requires specific WASAPI Exclusive (Windows) or ALSA PipeWire setup for true kernel streaming (Phase 2).

Beta — feedback welcome: [email protected]