Home

dev / openkara

publicthedavidweng/OpenKara· sync paused
Overview Code History Branches Pull requestsIssuesInsights
main
HomeOverview Code PRsIssues

fix(ui): stop painting the same separation progress twice (#285)

2 months ago

11f95d4
Authored
Davy7/27/2026, 11:20:08 AM
* fix(ui): stop painting the same separation progress twice

Single-song separation and uploads keep one full progress bar in the
global task list; song rows use a compact status chip. Batch runs keep
complementary surfaces: aggregate total globally, compact per-song bar
on the active row. Measure virtual list rows when height changes so an
expanded batch row does not overlap neighbours.

* ci: align actions/checkout version comments with the pinned SHA

The checkout pin 3d3c42e… is v7.0.1. mirror.yml still said v4 and
spectral-candidate.yml said v5, which tripped zizmor ref-version-mismatch
alerts #390 and #397.

* chore: prefer self-explanatory code over rationale comments

Update Agents.md engineering rules: constraints and design rationale
belong in commit messages or ADRs, not source. Strip the narrative
comments added with the progress-bar UI change.

* test: drop narrative comments from progress UI tests

* chore: strip narrative comments and cover progress-bar edge paths

Update AGENTS.md so design rationale lives in commits/ADRs, not source.
Remove frontend RATIONALE essays and multi-line product narration that
the old engineering rules encouraged. Cover compact TaskProgressBar
clamping/indeterminate fill and SongList virtual measure helpers so
patch coverage stays green.

Parent15ef164

147 files changed
  • .github/workflows/mirror.yml+1−1
  • .github/workflows/spectral-candidate.yml+1−1
  • AGENTS.md+5−4
  • src/App.tsx+0−3
  • src/components/Bootstrap/ModelBootstrapBanner.tsx+0−5
  • src/components/Bootstrap/RuntimeUpdateBanner.tsx+0−6
  • src/components/ErrorBoundary.tsx+0−5
  • src/components/Layout/AppLayout.tsx+0
−17
  • src/components/Layout/AppShellSkeleton.tsx+0−9
  • src/components/Layout/GlobalProgressBar.test.tsx+29−4
  • src/components/Layout/GlobalProgressBar.tsx+33−9
  • src/components/Library/AlphabetRail.test.tsx+0−5
  • src/components/Library/AlphabetRail.tsx+0−29
  • src/components/Library/SearchBox.tsx+0−3
  • src/components/Library/SongList.tsx+7−17
  • src/components/Library/SongListItem.test.tsx+119−11
  • src/components/Library/SongListItem.tsx+41−35
  • src/components/Library/song-list-item-context-menu-build.test.ts+0−2
  • src/components/Library/song-list-virtual.test.ts+46−0
  • src/components/Library/song-list-virtual.ts+18−0
  • src/components/Library/submenu-safety-zone.test.ts+0−9
  • src/components/Lyrics/LyricLine.test.tsx+0−2
  • src/components/Lyrics/LyricLine.tsx+0−14
  • src/components/Lyrics/LyricsEditDialog.tsx+0−2
  • src/components/Lyrics/LyricsEmptyState.tsx+0−3
  • src/components/Lyrics/LyricsFontSizeControl.test.tsx+0−2
  • src/components/Lyrics/LyricsOffsetControl.test.tsx+0−3
  • src/components/Lyrics/LyricsPanel.tsx+0−12
  • src/components/Lyrics/lyrics-scroll.ts+0−18
  • src/components/Lyrics/plain-text-pages.test.ts+0−12
  • src/components/Overlay/Tooltip.test.tsx+0−2
  • src/components/Playback/PlaybackStage.test.tsx+0−6
  • src/components/Playback/PlaybackStage.tsx+0−14
  • src/components/Player/AirPlayRouteButton.tsx+1−8
  • src/components/Player/AudioLevelSlider.tsx+0−2
  • src/components/Player/FullscreenControls.test.tsx+0−3
  • src/components/Player/FullscreenControls.tsx+1−13
  • src/components/Player/FullscreenPlayerView.test.tsx+0−2
  • src/components/Player/FullscreenPlayerView.tsx+0−7
  • src/components/Player/MonitorPicker.tsx+1−3
  • src/components/Player/PeakMeter.test.tsx+0−23
  • src/components/Player/PeakMeter.tsx+0−38
  • src/components/Player/RemoteReconnectIndicator.tsx+0−3
  • src/components/Player/SeekBar.test.tsx+0−13
  • src/components/Player/SeekBar.tsx+0−38
  • src/components/Player/VolumeSliders.interaction.test.tsx+0−6
  • src/components/Player/VolumeSliders.tsx+0−25
  • src/components/Player/playback-bar-layout.ts+0−8
  • src/components/Settings/ConfirmationDialog.tsx+0−3
  • src/components/Settings/LibrarySetup.render.test.tsx+0−3
  • src/components/Settings/LibrarySetup.tsx+0−6
  • src/components/Settings/SettingsAboutSection.test.tsx+0−4
  • src/components/Settings/SettingsCrossfadeSection.test.tsx+0−2
  • src/components/Settings/SettingsCrossfadeSection.tsx+0−14
  • src/components/Settings/SettingsEqSection.test.tsx+0−6
  • src/components/Settings/SettingsEqSection.tsx+0−31
  • src/components/Settings/SettingsModelVariantSection.tsx+0−8
  • src/components/Settings/SettingsOverlay.state.test.ts+0−2
  • src/components/Settings/SettingsOverlay.state.ts+0−24
  • src/components/Settings/SettingsOverlay.test.tsx+0−1
  • src/components/Settings/SettingsRemoteDiagnosticsSection.test.tsx+0−1
  • src/components/Settings/SettingsRuntimeSection.test.tsx+0−2
  • src/components/Settings/SettingsRuntimeSection.tsx+0−8
  • src/components/Settings/remote-library-copy.ts+0−3
  • src/components/Settings/settings-overlay.integrity-actions.ts+0−1
  • src/components/Settings/settings-overlay.library-actions.test.ts+0−2
  • src/components/Settings/settings-overlay.library-actions.ts+0−9
  • src/components/Settings/settings-overlay.model-actions.ts+0−2
  • src/components/Shared/CoverArtThumbnail.asset.test.tsx+0−2
  • src/components/Shared/CoverArtThumbnail.tsx+0−12
  • src/hooks/use-audience-plain-text-paging.layout.test.tsx+1−20
  • src/hooks/use-audience-plain-text-paging.ts+0−3
  • src/hooks/use-cdg-frame-receiver.ts+0−10
  • src/hooks/use-cdg-sync.coordinator.test.ts+0−4
  • src/hooks/use-cdg-sync.render.test.tsx+0−12
  • src/hooks/use-cdg-sync.ts+0−82
  • src/hooks/use-event-subscription.ts+0−4
  • src/hooks/use-keyboard-shortcuts.test.ts+0−4
  • src/hooks/use-keyboard-shortcuts.ts+0−12
  • src/hooks/use-local-audience-romanize-receiver.test.tsx+0−2
  • src/hooks/use-local-audience-romanize-receiver.ts+0−18
  • src/hooks/use-lyrics-engine.test.tsx+0−18
  • src/hooks/use-lyrics-engine.ts+0−47
  • src/hooks/use-playback-runtime.test.tsx+0−22
  • src/hooks/use-playback-runtime.ts+0−10
  • src/lib/alphabet-index.ts+0−5
  • src/lib/audience-presentation.ts+0−4
  • src/lib/cdg-protocol.ts+0−24
  • src/lib/cover-art.hook.test.tsx+0−10
  • src/lib/cover-art.test.ts+0−4
  • src/lib/cover-art.ts+0−45
  • src/lib/debug-info.test.ts+0−2
  • src/lib/fullscreen-player.ts+0−7
  • src/lib/i18n.test.ts+0−3
  • src/lib/i18n.ts+0−9
  • src/lib/local-audience-romanize.ts+0−6
  • src/lib/lyrics-companion-romanization.test.ts+0−9
  • src/lib/lyrics-companion-romanization.ts+0−3
  • src/lib/lyrics-engine.test.ts+0−21
  • src/lib/lyrics-engine.ts+0−58
  • src/lib/lyrics-line-runtime.test.ts+0−3
  • src/lib/lyrics-line-runtime.ts+0−5
  • src/lib/lyrics-playback-time.ts+0−14
  • src/lib/lyrics-romanizer.test.ts+0−2
  • src/lib/lyrics-romanizer.ts+0−7
  • src/lib/native-context-menu.ts+0−3
  • src/lib/notifications.test.ts+0−2
  • src/lib/romanize-options.test.ts+0−4
  • src/lib/romanize-options.ts+0−12
  • src/lib/song-display.ts+0−3
  • src/lib/song-sort.test.ts+0−6
  • src/lib/song-sort.ts+0−27
  • src/lib/tauri/library.ts+0−3
  • src/lib/tauri/lyrics.ts+0−3
  • src/lib/waveform-cache.test.ts+0−2
  • src/lib/waveform-cache.ts+0−5
  • src/locales/locales.test.ts+0−32
  • src/mock/preview-songs.ts+0−10
  • src/mock/tauri-mock-data.ts+0−20
  • src/mock/tauri-mock-impl.ts+0−30
  • src/playback/audience-projector.ts+0−7
  • src/playback/position-clock.test.ts+0−10
  • src/playback/position-clock.ts+0−28
  • src/playback/session.test.ts+0−6
  • src/playback/session.ts+0−25
  • src/runtime/app-ready-runtime.test.tsx+0−3
  • src/runtime/app-runtime.ts+0−9
  • src/runtime/local-audience-romanize-runtime.ts+0−25
  • src/runtime/menu-runtime.ts+0−6
  • src/runtime/settings-runtime.ts+0−2
  • src/runtime/shell-document.ts+0−3
  • src/runtime/theme-runtime.test.tsx+0−6
  • src/runtime/theme-runtime.ts+0−11
  • src/stores/library-store.test.ts+0−1
  • src/stores/library-store.ts+1−8
  • src/stores/lyrics-store.test.ts+0−10
  • src/stores/lyrics-store.ts+0−41
  • src/stores/player-store.test.ts+0−7
  • src/stores/player-store.ts+0−17
  • src/stores/queue-store.ts+0−3
  • src/stores/rotation-store.test.ts+0−6
  • src/stores/rotation-store.ts+0−6
  • src/stores/settings-store.test.ts+0−12
  • src/stores/settings-store.ts+0−21
  • src/types/ipc-contract.test.ts+0−33
  • src/types/ipc.ts+0−36
  • src/workers/romanize.worker.ts+0−3