Drift audit 2026-06-02 — 26 findings shipped #75
Reference in New Issue
Block a user
Delete Branch "dev"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Multi-system drift audit from 2026-06-02: 14 auditors (12 subsystem + 2 cross-cutting) fanned out across the codebase looking for the 10-pattern drift taxonomy. 26 candidate findings surfaced; 24 confirmed by adversarial verify and shipped, 1 cancelled as a duplicate, 1 doc-only correction (implementation tracked separately).
Scribe parent task: project 12 / task 552. All 26 child tasks closed.
Batches
47d2f611— batch 1 (6 mechanical wins): web Tailwind token (bg-action-danger→bg-action-destructive, #553); TS type for play_startedsource(#555); coverage rollup whitelist + test extended to deezer/lastfm (#556 #557); /forgot-password + /reset-password/[token] added to PUBLIC_ROUTES (#558); scanner extensions aligned to media handler (.opus/.aac/.wav, #571).fb3116d6— batch 2 (5 patterned fixes): playback-error channel CONFLATED → BUFFERED so burst-counting works (#561); system-playlist rotation whitelist gains 6 missing variants (#563); Android source format aligned with server (bare variant, notplaylist:<variant>, #564); AuthCookieInterceptor scoped to placeholder host (#568 #569).b19c6217— batch 3a (offline correctness): LikesRepository.refreshIds atomic replaceAllForUser so cross-device unlike clears (#570); RequestsViewModel.cancel only refresh()s on Synced outcome (#577).5014f754— batch 3b (cold-boot resume): PlayerController.setQueue gainsautoplayopt-out so ResumeController doesn't auto-start playback on cold launch (#560); awaitReady() suspend lets ResumeController wait for MediaController bind (#562).b970b873— batch 4: server /api/me returns full profile shape (display_name + email) so Android Settings → Profile stops wiping users' stored values (#578).413d7297— batch 5 (web): +page.server.ts → +page.ts so the /library and /playlists redirects actually run in the static SPA build (#559); radio auto-refresh capsexclude=at 100 ids to avoid 414 URI Too Long (#554).bda0896d— batch 6: delete.go docstring made honest about the missing orphan-row reconcile (#572 — implementation kept as a tracked follow-up).258bc1f7— batch 7 (GC worker): newinternal/gcpackage with one Worker running 5 idempotent sweeps on a 1h tick: orphan play_events close (#566), play_sessions ended_at writer (#565), expired scrobble_queue retention (#567), system_playlist_runs stuck-row reaper (#574), expired password_resets (#575).dbcadf0f— batch 8: LikesRepository uses real user UUID from AuthController.currentUser instead of LOCAL_USER_ID, clears outgoing user's cached_likes on user-switch (#576).Plus
305d4780+cb2f9a2e— two test-seed fixes for NOT NULL columns the GC integration test was missing (artists.sort_name, then tracks.file_size + file_format). Both caught by Go integration CI on dev before this PR.Test plan
cb2f9a2edbcadf0f(latest commit that touched Kotlin)413d7297(latest commit that touched .ts/.svelte)