Skip to content

fix(#538): lyrics button goes back instead of home - #10

Closed
Owie6789 wants to merge 3 commits into
release/4.0.0-alpha.5from
fix/538-lyrics-nav-back
Closed

fix(#538): lyrics button goes back instead of home#10
Owie6789 wants to merge 3 commits into
release/4.0.0-alpha.5from
fix/538-lyrics-nav-back

Conversation

@Owie6789

@Owie6789 Owie6789 commented Aug 5, 2026

Copy link
Copy Markdown
Owner

Fixes Sandakan#538. Replaces NavLink with Button that uses useRouterState to detect if lyrics page is active. If on lyrics page and canGoBack, calls history.back(). If cannot go back, navigates to home as fallback.

Replace NavLink with Button that uses useRouterState to detect if lyrics
page is active. If on lyrics page and canGoBack, calls history.back().
If on lyrics page and cannot go back, navigates to home as fallback.
Preserves active highlight styling based on isLyricsActive state.
@qodo-code-review

Copy link
Copy Markdown

ⓘ Qodo reviews are paused because your trial has ended. Ask your workspace admin to add credits to resume reviews. Manage billing

@Owie6789

Owie6789 commented Aug 5, 2026

Copy link
Copy Markdown
Owner Author

@CodeRabbit full review

@coderabbitai

coderabbitai Bot commented Aug 5, 2026

Copy link
Copy Markdown
⚠️ Action not completed

Review rate limited.


Your included review limit is currently reached under our Fair Usage Limits Policy. This review may still proceed through usage-based billing if eligible. Your next included review will be available in 59 minutes.

@coderabbitai

coderabbitai Bot commented Aug 5, 2026

Copy link
Copy Markdown

Warning

Review limit reached

@Owie6789, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 59 minutes

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: f55612c8-264c-40ed-8c32-db1835f4123d

📥 Commits

Reviewing files that changed from the base of the PR and between 3ebea51 and 4997253.

📒 Files selected for processing (1)
  • src/renderer/src/components/SongsControlsContainer/SongControlsAndSeekbarContainer.tsx

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@Owie6789

Owie6789 commented Aug 5, 2026

Copy link
Copy Markdown
Owner Author

@CodeRabbit Act as a senior code reviewer and QA engineer. Perform a comprehensive, deep-dive analysis of the entire PR diff against release/4.0.0-alpha.5.

Self-review before posting

For each finding, double-review:

  • Cause: Is the root cause in THIS diff or pre-existing base code?
  • Action: Does the fix compile and match existing types?
  • Reaction: What breaks if applied? Does it introduce a new issue?
  • Necessity: Is this a real bug or style preference? What is the regression risk?
    Only post findings that survive all four checks.

UI review

Evaluate visual hierarchy, spacing, WCAG AA contrast, typography, focus/keyboard nav, responsive layout, loading/empty/error states, micro-interactions, icon consistency, scoped transitions (not transition-all), ARIA attributes, and dark/light theme consistency.

Coverage checklist

  • Merge state and branch staleness (is the branch based on the latest target tip?)
  • IPC boundary validation (safe integers, URL validation, discriminated results)
  • State machine / lifecycle cleanup (listeners removed, no player side-effects)
  • Persistence and async paths (generation counters, per-entity locks, finally cleanup)
  • Edge cases and error propagation
  • Security (path traversal, input validation)
  • Test coverage for new branches
  • Lint/CI hygiene (void prefix, log() not console.log, no any at boundary)

Verdict format

End with exactly one of:

  • ## Verdict: **Ready** — confidence: **high/medium** (no remaining issues)
  • ## Verdict: **Not Ready** — confidence: **high/medium** (with remaining findings listed)

If a prior finding is already fixed in the current diff, say so explicitly rather than re-reporting it.

@coderabbitai

coderabbitai Bot commented Aug 5, 2026

Copy link
Copy Markdown

Tip

For best results, initiate chat on the files or code changes.

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo '== Repository and branch state =='
git status --short
git branch --show-current
git remote -v
git show-ref --verify --quiet refs/remotes/origin/release/4.0.0-alpha.5 && \
  git merge-base --is-ancestor origin/release/4.0.0-alpha.5 HEAD && echo 'TARGET_IS_ANCESTOR_OF_HEAD=yes' || echo 'TARGET_IS_ANCESTOR_OF_HEAD=no'
git merge-base origin/release/4.0.0-alpha.5 HEAD
git rev-list --left-right --count origin/release/4.0.0-alpha.5...HEAD

echo '== Pull request metadata =='
gh pr view 10 --repo Owie6789/Nora --json number,title,baseRefName,headRefName,mergeable,mergeStateStatus,updatedAt,commits,statusCheckRollup

echo '== Complete diff against target =='
git diff --find-renames --find-copies --stat origin/release/4.0.0-alpha.5...HEAD
git diff --find-renames --find-copies --unified=80 origin/release/4.0.0-alpha.5...HEAD

echo '== Changed-file structure =='
git diff --name-only origin/release/4.0.0-alpha.5...HEAD | while IFS= read -r file; do
  echo "--- $file"
  ast-grep outline "$file" --items all --view compact 2>/dev/null || true
done

echo '== Relevant navigation and test references =='
rg -n -i -C 4 '\blyrics\b|useRouterState|canGoBack|history\.back|router\.navigate|<NavLink|<Button' \
  -g '!node_modules/**' -g '!dist/**' -g '!build/**' .

echo '== Project scripts and configuration files =='
fd -HI '^(package\.json|pnpm-lock\.yaml|yarn\.lock|package-lock\.json|tsconfig.*\.json|eslint.*|biome\.json.*|vitest\.config.*|playwright\.config.*)$' . \
  -E node_modules -E dist -E build | sort
fd -HI '^package\.json$' . -E node_modules -E dist -E build -x sh -c 'echo "--- $1"; jq ".scripts" "$1"' sh {}

Length of output: 2206


🏁 Script executed:

#!/bin/bash
set -u

echo '== Fetch requested target branch =='
git fetch --no-tags --depth=200 origin \
  +refs/heads/release/4.0.0-alpha.5:refs/remotes/origin/release/4.0.0-alpha.5
fetch_status=$?
echo "FETCH_STATUS=$fetch_status"

echo '== Local revision state =='
git branch --show-current || true
git rev-parse --verify HEAD || true
git show-ref --verify --quiet refs/remotes/origin/release/4.0.0-alpha.5 && \
  git merge-base origin/release/4.0.0-alpha.5 HEAD || true
git show-ref --verify --quiet refs/remotes/origin/release/4.0.0-alpha.5 && \
  git rev-list --left-right --count origin/release/4.0.0-alpha.5...HEAD || true

echo '== PR metadata and checks =='
gh pr view 10 --repo Owie6789/Nora \
  --json number,title,baseRefName,baseRefOid,headRefName,headRefOid,mergeable,mergeStateStatus,updatedAt,commits,statusCheckRollup \
  || true

if git show-ref --verify --quiet refs/remotes/origin/release/4.0.0-alpha.5; then
  echo '== Diff summary =='
  git diff --find-renames --find-copies --stat origin/release/4.0.0-alpha.5...HEAD
  echo '== Full diff =='
  git diff --find-renames --find-copies --unified=100 origin/release/4.0.0-alpha.5...HEAD

  echo '== Changed-file outlines =='
  git diff --name-only origin/release/4.0.0-alpha.5...HEAD | while IFS= read -r file; do
    printf '\n--- %s ---\n' "$file"
    ast-grep outline "$file" --items all --view compact 2>/dev/null || true
  done

  echo '== Navigation and test references =='
  rg -n -i -C 5 '\blyrics\b|useRouterState|canGoBack|history\.back|router\.navigate|<NavLink|<Button' \
    -g '!node_modules/**' -g '!dist/**' -g '!build/**' . || true

  echo '== Package scripts =='
  fd -HI '^package\.json$' . -E node_modules -E dist -E build \
    -x sh -c 'echo "--- $1"; jq ".scripts" "$1"' sh {} || true
fi

exit 0

Length of output: 200898


🏁 Script executed:

#!/bin/bash
set -euo pipefail

base='origin/release/4.0.0-alpha.5'

echo '== PR metadata =='
gh pr view 10 --repo Owie6789/Nora \
  --json number,title,baseRefName,baseRefOid,headRefName,headRefOid,mergeable,mergeStateStatus,updatedAt,commits,statusCheckRollup \
  | jq '{
    number,title,baseRefName,headRefName,mergeable,mergeStateStatus,updatedAt,
    commits: [.commits[] | {oid: .oid, messageHeadline: .messageHeadline}],
    checks: [.statusCheckRollup[]? | {name: .name, status: .status, conclusion: .conclusion}]
  }'

echo '== Target relationship =='
printf 'merge-base: '; git merge-base "$base" HEAD
printf 'target...head count: '; git rev-list --left-right --count "$base"...HEAD
printf 'target tip: '; git rev-parse "$base"
printf 'head tip: '; git rev-parse HEAD

echo '== Changed files =='
git diff --name-status "$base"...HEAD

echo '== Exact diff =='
git diff --find-renames --unified=30 "$base"...HEAD

echo '== Changed source, current and base =='
git diff --name-only "$base"...HEAD | while IFS= read -r file; do
  case "$file" in
    *.ts|*.tsx|*.css|*.json)
      echo "--- CURRENT: $file"
      cat -n "$file"
      echo "--- BASE: $file"
      git show "$base:$file" | cat -n || true
      ;;
  esac
done

echo '== Button contract =='
button_file=$(fd -HI '^Button\.tsx$' src -E node_modules | head -n 1)
printf '%s\n' "$button_file"
cat -n "$button_file"

echo '== Router dependency versions =='
jq '{dependencies,devDependencies} | with_entries(select(.value | type == "object")) | .dependencies["`@tanstack/react-router`"], .devDependencies["`@tanstack/react-router`"]' package.json

echo '== Direct history and route-state usages =='
rg -n -C 8 '\buseRouterState\s*\(|\buseRouter\s*\(|\bhistory\.(back|length|canGoBack)\b|/main-player/lyrics' \
  src/renderer/src -g '*.ts' -g '*.tsx'

echo '== Candidate tests =='
fd -HI -t f . src -E node_modules -E dist -E build | rg -i '(\.test|\.spec)\.(ts|tsx)$|test|spec' || true

Length of output: 97267


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo '== Issue `#538` =='
gh issue view 538 --repo Owie6789/Nora --json number,title,body,state,comments \
  | jq '{number,title,state,body,comments: [.comments[] | {author: .author.login, body: .body, createdAt: .createdAt}]}'

echo '== Patch whitespace check =='
git diff --check origin/release/4.0.0-alpha.5...HEAD

echo '== Router construction and configured history =='
rg -n -C 12 'createRouter\s*\(|create(Hash|Browser|Memory)History\s*\(|history:' \
  src/renderer/src -g '*.ts' -g '*.tsx'
router_files=$(rg -l -g '*.ts' -g '*.tsx' 'createRouter\s*\(|create(Hash|Browser|Memory)History\s*\(' src/renderer/src || true)
for file in $router_files; do
  echo "--- $file"
  cat -n "$file"
done

echo '== Main-player layouts and song-control containment =='
rg -n -C 12 'SongControlsAndSeekbarContainer|<Outlet|Outlet' \
  src/renderer/src/routes src/renderer/src/components -g '*.tsx' -g '*.ts'

echo '== Lyrics editor route navigation and containment =='
editor_file=$(fd -HI '^$songId.tsx$' src/renderer/src/routes/main-player/lyrics/editor -E node_modules | head -n 1)
printf '%s\n' "$editor_file"
cat -n "$editor_file"

echo '== Tracked test files only =='
git ls-files | rg '(^|/)(__tests__/|tests?/|.*\.(test|spec)\.(ts|tsx|js|jsx)$)' || true

echo '== Lockfile router/history packages =='
rg -n -C 3 '"`@tanstack/`(react-router|history)"|`@tanstack/`(react-router|history)@' \
  package-lock.json pnpm-lock.yaml yarn.lock 2>/dev/null || true

Length of output: 1852


🏁 Script executed:

#!/bin/bash
set -u

echo '== Patch whitespace check =='
git diff --check origin/release/4.0.0-alpha.5...HEAD
echo "DIFF_CHECK_STATUS=$?"

echo '== Router construction and configured history =='
rg -n -C 12 'createRouter\s*\(|create(Hash|Browser|Memory)History\s*\(|history:' \
  src/renderer/src -g '*.ts' -g '*.tsx' || true
router_files=$(rg -l -g '*.ts' -g '*.tsx' 'createRouter\s*\(|create(Hash|Browser|Memory)History\s*\(' src/renderer/src || true)
for file in $router_files; do
  echo "--- $file"
  cat -n "$file"
done

echo '== Main-player layouts and song-control containment =='
rg -n -C 12 'SongControlsAndSeekbarContainer|<Outlet|Outlet' \
  src/renderer/src/routes src/renderer/src/components -g '*.tsx' -g '*.ts' || true

echo '== Lyrics editor route =='
editor_file=$(fd -HI -t f '^\$songId\.tsx$' src/renderer/src/routes/main-player/lyrics/editor -E node_modules | head -n 1)
if [ -n "$editor_file" ]; then
  echo "--- $editor_file"
  cat -n "$editor_file"
else
  echo 'EDITOR_ROUTE_NOT_FOUND'
fi

echo '== Tracked test files only =='
git ls-files | rg '(^|/)(__tests__/|tests?/|.*\.(test|spec)\.(ts|tsx|js|jsx)$)' || true

echo '== Lockfile router/history packages =='
rg -n -C 3 '"`@tanstack/`(react-router|history)"|`@tanstack/`(react-router|history)@' \
  package-lock.json pnpm-lock.yaml yarn.lock 2>/dev/null || true

exit 0

Length of output: 45512


🤖 web_search executed:

TanStack History createHashHistory length browser history length documentation source @tanstack/history 1.162.0

Length of output: 5792


@Owie6789

Finding

  • High — the no-history fallback cannot execute.
    In src/renderer/src/components/SongsControlsContainer/SongControlsAndSeekbarContainer.tsx, Line 31 sets canGoBack to history.length > 0. The configured createHashHistory() uses the browser history stack. Its length is the total number of entries, including the current entry. A directly opened lyrics route has one entry, so this condition is true even when no previous route exists. The click handler then calls history.back() on Line 49 and does not navigate to home on Lines 50-51. This fails the stated fallback requirement.

    Use a predicate that proves a previous application entry exists. At minimum, use history.length > 1. A tracked router-history index is more reliable because total history length can include forward entries or entries outside the application. TanStack History documentation defines history.length as the total stack-entry count.

Review notes

  • The branch is current against release/4.0.0-alpha.5: zero commits behind and one commit ahead.
  • GitHub reports a clean, mergeable PR.
  • The reported lint/format and test checks passed.
  • The replacement uses a semantic button. It preserves keyboard activation, focus-visible styling, tooltip text, light/dark styles, and scoped transitions.
  • This renderer-only diff adds no IPC, persistence, path, URL, or player lifecycle boundary.
  • No dedicated renderer navigation test covers the new branches: navigate to lyrics, go back from lyrics, and direct-entry fallback to home.
  • GitHub Issues are disabled for this repository, so Issue #538 could not provide additional acceptance details.

Verdict: Not Ready — confidence: high

You are interacting with an AI system.

history.length includes the current entry, so a directly-opened lyrics
page has length=1. Using > 0 would always be true even with no back
history. Changed to > 1 to correctly detect previous entries.
Replace nested template literal with ternary expression using regular
string to satisfy typescript:S4624 rule.
@sonarqubecloud

sonarqubecloud Bot commented Aug 5, 2026

Copy link
Copy Markdown

@Owie6789

Owie6789 commented Aug 5, 2026

Copy link
Copy Markdown
Owner Author

@CodeRabbit Act as a senior code reviewer and QA engineer. Perform a comprehensive, deep-dive analysis of the entire PR diff against release/4.0.0-alpha.5.

Self-review before posting

For each finding, double-review:

  • Cause: Is the root cause in THIS diff or pre-existing base code?
  • Action: Does the fix compile and match existing types?
  • Reaction: What breaks if applied? Does it introduce a new issue?
  • Necessity: Is this a real bug or style preference? What is the regression risk?
    Only post findings that survive all four checks.

UI review

Evaluate visual hierarchy, spacing, WCAG AA contrast, typography, focus/keyboard nav, responsive layout, loading/empty/error states, micro-interactions, icon consistency, scoped transitions (not transition-all), ARIA attributes, and dark/light theme consistency.

Coverage checklist

  • Merge state and branch staleness (is the branch based on the latest target tip?)
  • IPC boundary validation (safe integers, URL validation, discriminated results)
  • State machine / lifecycle cleanup (listeners removed, no player side-effects)
  • Persistence and async paths (generation counters, per-entity locks, finally cleanup)
  • Edge cases and error propagation
  • Security (path traversal, input validation)
  • Test coverage for new branches
  • Lint/CI hygiene (void prefix, log() not console.log, no any at boundary)

Verdict format

End with exactly one of:

  • ## Verdict: **Ready** — confidence: **high/medium** (no remaining issues)
  • ## Verdict: **Not Ready** — confidence: **high/medium** (with remaining findings listed)

If a prior finding is already fixed in the current diff, say so explicitly rather than re-reporting it.

@coderabbitai

coderabbitai Bot commented Aug 5, 2026

Copy link
Copy Markdown

Tip

For best results, initiate chat on the files or code changes.

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

repo='Owie6789/Nora'
base='origin/release/4.0.0-alpha.5'

echo '== PR metadata and checks =='
gh pr view 10 --repo "$repo" \
  --json number,title,baseRefName,baseRefOid,headRefName,headRefOid,mergeable,mergeStateStatus,updatedAt,commits,statusCheckRollup \
  | jq '{
      number, title, baseRefName, headRefName, mergeable, mergeStateStatus, updatedAt,
      commits: [.commits[] | {oid, messageHeadline}],
      checks: [.statusCheckRollup[]? | {name, status, conclusion}]
    }'

echo '== Target relationship =='
git fetch --no-tags --depth=200 origin \
  '+refs/heads/release/4.0.0-alpha.5:refs/remotes/origin/release/4.0.0-alpha.5' >/dev/null 2>&1 || true
printf 'head: '; git rev-parse HEAD
printf 'base: '; git rev-parse "$base"
printf 'merge-base: '; git merge-base "$base" HEAD
printf 'base...head commits: '; git rev-list --left-right --count "$base"...HEAD

echo '== Diff summary =='
git diff --check "$base"...HEAD
git diff --name-status "$base"...HEAD
git diff --stat "$base"...HEAD
echo '== Complete diff =='
git diff --find-renames --find-copies --unified=80 "$base"...HEAD

echo '== Changed-file outlines and content =='
git diff --name-only "$base"...HEAD | while IFS= read -r file; do
  printf '\n--- OUTLINE: %s ---\n' "$file"
  ast-grep outline "$file" --items all --view compact 2>/dev/null || true
  printf '\n--- CURRENT: %s ---\n' "$file"
  cat -n "$file"
  printf '\n--- BASE: %s ---\n' "$file"
  git show "$base:$file" | cat -n || true
done

echo '== Router and history use sites =='
rg -n -C 8 '\b(createRouter|createHashHistory|useRouterState|useRouter|canGoBack|history\.(back|length)|navigate)\s*\(|/main-player/lyrics' \
  src/renderer/src -g '*.ts' -g '*.tsx' || true

echo '== Button implementation and equivalent controls =='
fd -HI -t f '^Button\.tsx$' src -E node_modules -E dist -E build -x sh -c 'echo "--- $1"; cat -n "$1"' sh {} || true
rg -n -C 5 '<Button[^>]*onClick|onClick=\{.*navigate|aria-label=|title=' \
  src/renderer/src -g '*.tsx' || true

echo '== Tests and scripts =='
git ls-files | rg '(^|/)(__tests__/|tests?/|.*\.(test|spec)\.(ts|tsx|js|jsx)$)' || true
fd -HI '^package\.json$' . -E node_modules -E dist -E build \
  -x sh -c 'echo "--- $1"; jq ".scripts" "$1"' sh {}

echo '== Boundary-risk indicators in changed code =='
git diff --unified=0 "$base"...HEAD | rg -n '^\+.*\b(any|console\.log|ipc|invoke|on\(|off\(|setTimeout|setInterval|localStorage|fetch|URL|path)\b' || true

Length of output: 203000


🏁 Script executed:

#!/bin/bash
set -euo pipefail

base='origin/release/4.0.0-alpha.5'
changed_file='src/renderer/src/components/SongsControlsContainer/SongControlsAndSeekbarContainer.tsx'

echo '== PR state =='
gh pr view 10 --repo Owie6789/Nora \
  --json mergeable,mergeStateStatus,updatedAt,statusCheckRollup \
  | jq '{
    mergeable, mergeStateStatus, updatedAt,
    checks: [.statusCheckRollup[]? | {name, status, conclusion}]
  }'
printf 'base...head: '; git rev-list --left-right --count "$base"...HEAD

echo '== Changed files =='
git diff --name-status "$base"...HEAD

echo '== Exact changed-file diff =='
git diff --unified=50 "$base"...HEAD -- "$changed_file"

echo '== Current changed file =='
cat -n "$changed_file"

echo '== Router construction =='
router_files=$(rg -l -g '*.ts' -g '*.tsx' 'createRouter\s*\(|createHashHistory\s*\(' src/renderer/src || true)
for file in $router_files; do
  echo "--- $file"
  cat -n "$file"
done

echo '== All active history contract usages =='
rg -n -C 6 '\bhistory\.(length|back)\b|\buseRouterState\s*\(' \
  src/renderer/src -g '*.ts' -g '*.tsx' || true

echo '== Router/history dependency versions =='
jq '{
  dependencies: {
    "`@tanstack/react-router`": .dependencies["`@tanstack/react-router`"],
    "`@tanstack/history`": .dependencies["`@tanstack/history`"]
  },
  devDependencies: {
    "`@tanstack/react-router`": .devDependencies["`@tanstack/react-router`"],
    "`@tanstack/history`": .devDependencies["`@tanstack/history`"]
  }
}' package.json

echo '== Navigation-related tests =='
rg -n -i -C 3 'lyrics|router|history|navigate|SongControlsAndSeekbarContainer' \
  test -g '*.test.ts' -g '*.test.tsx' -g '*.spec.ts' -g '*.spec.tsx' || true

Length of output: 76714


@Owie6789

Finding

  • Medium — history.length > 1 does not prove that backward navigation is available.
    In src/renderer/src/components/SongsControlsContainer/SongControlsAndSeekbarContainer.tsx, Line 31 uses the total browser history entry count. It does not indicate the current position. For example, open the lyrics route directly, navigate to home, then use browser Back to return to lyrics. The history has two entries, but lyrics is the first entry. The lyrics button calls history.back() on Line 49. It does not navigate to home on Line 51.

    The prior direct-open case is fixed. A history with one entry now uses the home fallback. The remaining case still violates the fallback requirement when forward entries exist.

    Track application navigation position, or use a router API that exposes a true back-navigation predicate. Add tests for:

    1. Navigate from another page to lyrics, then return to that page.
    2. Open lyrics directly, then use browser Back after visiting another page; the lyrics button must navigate home.
    3. Open lyrics directly with no other entry; the lyrics button must navigate home.

Review notes

  • The branch is current against release/4.0.0-alpha.5. It is zero commits behind and three commits ahead.
  • GitHub reports a clean, mergeable pull request.
  • Lint, format, test, SonarCloud, and Socket Security checks passed.
  • The replacement uses the semantic shared Button component. Keyboard activation, tooltip text, focus-visible styling, light and dark theme colors, and scoped transitions remain present.
  • This renderer-only change adds no IPC boundary, persistence path, URL or filesystem input, player side effect, or listener lifecycle.
  • No dedicated renderer test covers the new navigation branches.

Verdict: Not Ready — confidence: high

You are interacting with an AI system.

@Owie6789 Owie6789 closed this Aug 5, 2026
@Owie6789
Owie6789 deleted the fix/538-lyrics-nav-back branch August 5, 2026 19:05
@Owie6789
Owie6789 restored the fix/538-lyrics-nav-back branch August 5, 2026 19:08
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant