feat: Wave 1 - SonarCloud fixes, PR comment workflow, session filter - #108
Conversation
- Add auth signin handler test (8 cases: valid, bcrypt, argon2, disabled, invalid, missing, malicious, rememberMe) - Add IGDB metadata provider test (7 cases: search, empty, no cover, no date, missing env, source) - Add prioritylist edge cases (4 cases: empty get, max priority, duplicate stability, 1000 item perf)
- Add CLI upload test (5 cases: path construction, dry-run, progress, missing config, manifest) - Add desktop client test (4 cases: module structure, app_state, app_status, autostart)
- S7772: Add node: prefix to fs/path imports in recursivedirs.ts - S7772: Add node: prefix to path/url imports in eslint.config.mjs - S1940: Simplify boolean expression in app.vue - S6822: Remove redundant role="list" from Library.vue and team.tsx
- S6819: Convert role="status" divs to <output> elements (6 instances) - ImgWithoutAltCheck: Add meaningful alt text to images (25+ instances) - S5255: Add aria-label to nav elements in admin.vue and UserHeader.vue - S6840: Add autocomplete attributes to form inputs - S6851: Convert div to <form> element in client/authorize/[id].vue - S5256: Add aria-label to table in store/[id]/index.vue
- Add TSDoc to 12 exported functions across 7 files - Update AGENTS.md: test count 32→176, SonarCloud 130→109 - Update coverage baseline date to 2026-07-26
- Extract helper functions in OIDCManager - Simplify conditional logic in session cache/db/memory - Fix PATH injection in nuxt.config.ts git command - All 176 tests pass
- steam.ts: Support single-quoted metadata attributes in regex - client/authorize: Fix form action mismatch, use type="hidden" - session: Extract shared sessionMatchesFilter to filter.ts
- EmulatorWidget.vue, team.tsx: Use empty alt for decorative images - GameEditor/Metadata.vue: Improve alt text for game screenshots - nuxt.config.ts: Use execFileSync with fixed arguments - store/t/[id]/index.vue: Remove empty src image - auth/oidc/index.ts: Make userinfo_endpoint and scopes_supported optional - torrential/index.ts: Add executable check before spawn - torrential/utils.ts: Update JSDoc return description - prioritylist.test.ts: Remove performance assertion, add behavioral check
… but missing - userId check: return false when session.authenticated is absent - oidc check: return false when session.oidc is absent
- Add sonarcloud-pr-comment.sh script to post findings summary to PRs - Add sonar-pr-comment job to CI workflow for PR-triggered analysis - Links to existing GitHub issues for detailed tracking - Shows top 5 issues by severity with file/line/rule info
|
Note Reviews pausedIt looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
📝 WalkthroughWalkthroughThe PR adds SonarCloud pull-request reporting, refactors desktop download and startup flows, updates executable and manifest handling, replaces mutating sorts, adjusts server contracts and metadata parsing, and changes promotional rendering and accessibility markup. ChangesApplication and CI updates
Estimated code review effort: 5 (Critical) | ~120 minutes Sequence Diagram(s)sequenceDiagram
participant GitHubActions
participant SonarCloud
participant GitHubCLI
GitHubActions->>SonarCloud: fetch unresolved issues and quality data
GitHubActions->>GitHubCLI: query labeled tracking issues
GitHubActions->>GitHubCLI: post pull-request comment
Possibly related PRs
Suggested reviewers: 🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
|
Note Docstrings generation - SUCCESS |
Docstrings generation was requested by @BillyOutlast. * #108 (comment) The following files were modified: * `desktop/main/composables/current-page-engine.ts` * `scripts/sonarcloud-pr-comment.sh` * `server/composables/current-page-engine.ts` * `server/server/internal/auth/oidc/index.ts` * `server/server/internal/auth/passwordHash.ts` * `server/server/internal/auth/webauthn.ts` * `server/server/internal/library/manifest/index.ts` * `server/server/internal/library/manifest/utils.ts` * `server/server/internal/services/services/nginx.ts` * `server/server/internal/services/torrential/utils.ts` * `server/server/internal/session/db.ts` * `server/server/internal/session/filter.ts` * `server/server/internal/session/memory.ts` * `server/server/internal/tasks/index.ts` * `server/server/internal/utils/recursivedirs.ts` * `sites/promo/src/components/linked-avatars.tsx` * `sites/promo/src/components/screenshot.tsx`
- Keep PATH sanitization in nuxt.config.ts - Keep known paths approach in nginx.ts (no shell execution)
Codecov Report❌ Patch coverage is 📢 Thoughts on this report? Let us know! |
SonarCloud AnalysisSummary
Total: 53 issues Top Issues
TrackingNo existing GitHub issues found for these findings. Run Full analysis: SonarCloud Dashboard 📋 JSON Summary (for AI agents){
"project": "BillyOutlast_drop",
"pullRequest": 108,
"qualityGate": {
"gateStatus": "ERROR",
"failedConditions": [
{
"metric": "new_coverage",
"actual": "0.0",
"threshold": "80"
}
]
},
"filesNeedingCoverage": [],
"totalIssues": 53,
"summary": {
"blocker": 0,
"critical": 11,
"major": 42
},
"issues": [
{
"key": "AZ-hG_6o_7iyvaG2TeIu",
"rule": "typescript:S3776",
"severity": "CRITICAL",
"message": "Refactor this function to reduce its Cognitive Complexity from 16 to the 15 allowed.",
"component": "server/server/internal/session/filter.ts",
"line": 10,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-hG_6o_7iyvaG2TeIu&open=AZ-hG_6o_7iyvaG2TeIu"
},
{
"key": "AZ-hHArD_7iyvaG2TeIw",
"rule": "typescript:S6851",
"severity": "MAJOR",
"message": "Redundant alt attribute. Screen-readers already announce `img` tags as an image. You don’t need to use the words `image`, `photo,` or `picture` (or any specified custom words) in the alt prop.",
"component": "sites/promo/src/components/gallery-modal.tsx",
"line": 135,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-hHArD_7iyvaG2TeIw&open=AZ-hHArD_7iyvaG2TeIw"
},
{
"key": "AZ-gksvtpI4t_4jmejj6",
"rule": "shelldre:S131",
"severity": "CRITICAL",
"message": "Add a default case (*) to handle unexpected values.",
"component": "scripts/sonarcloud-sync.sh",
"line": 306,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-gksvtpI4t_4jmejj6&open=AZ-gksvtpI4t_4jmejj6"
},
{
"key": "AZ-gA2474r4tYZa_Yi7e",
"rule": "typescript:S2004",
"severity": "CRITICAL",
"message": "Refactor this code to not nest functions more than 4 levels deep.",
"component": "sites/promo/src/components/comparison.tsx",
"line": 450,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-gA2474r4tYZa_Yi7e&open=AZ-gA2474r4tYZa_Yi7e"
},
{
"key": "AZ-c83VBnUgmSfWQkp2r",
"rule": "typescript:S8987",
"severity": "MAJOR",
"message": "Move this `v-if` to a parent element.",
"component": "desktop/main/components/GameOptions/ProtonSelector.vue",
"line": 73,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-c83VBnUgmSfWQkp2r&open=AZ-c83VBnUgmSfWQkp2r"
},
{
"key": "AZ-c83VBnUgmSfWQkp2s",
"rule": "typescript:S8987",
"severity": "MAJOR",
"message": "Move this `v-if` to a parent element.",
"component": "desktop/main/components/GameOptions/ProtonSelector.vue",
"line": 112,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-c83VBnUgmSfWQkp2s&open=AZ-c83VBnUgmSfWQkp2s"
},
{
"key": "AZ-YTBgzecfn39edgquG",
"rule": "typescript:S8786",
"severity": "MAJOR",
"message": "Simplify this regular expression to reduce its runtime, as it has super-linear performance due to backtracking.",
"component": "server/server/internal/metadata/steam.ts",
"line": 649,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-YTBgzecfn39edgquG&open=AZ-YTBgzecfn39edgquG"
},
{
"key": "AZ-YTCWiecfn39edgquP",
"rule": "typescript:S6772",
"severity": "MAJOR",
"message": "Ambiguous spacing after previous element img",
"component": "sites/promo/src/components/comparison.tsx",
"line": 54,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-YTCWiecfn39edgquP&open=AZ-YTCWiecfn39edgquP"
},
{
"key": "AZ-WZn8wL3IEMbakOkCg",
"rule": "githubactions:S6505",
"severity": "MAJOR",
"message": "Omitting \"--ignore-scripts\" allows lifecycle scripts to run during package installation.",
"component": ".github/workflows/e2e.yml",
"line": 64,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-WZn8wL3IEMbakOkCg&open=AZ-WZn8wL3IEMbakOkCg"
},
{
"key": "AZ-dRYQYZiQzo-vEe6fH",
"rule": "rust:S3776",
"severity": "CRITICAL",
"message": "Refactor this function to reduce its Cognitive Complexity from 29 to the 15 allowed.",
"component": "desktop/src-tauri/src/lib.rs",
"line": 205,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-dRYQYZiQzo-vEe6fH&open=AZ-dRYQYZiQzo-vEe6fH"
},
{
"key": "AZ-V531cdRHfOsokVAlP",
"rule": "docker:S8549",
"severity": "MAJOR",
"message": "Using dependencies without locking resolved versions is security-sensitive.",
"component": "Dockerfile",
"line": 37,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V531cdRHfOsokVAlP&open=AZ-V531cdRHfOsokVAlP"
},
{
"key": "AZ-dRYE2ZiQzo-vEe6fE",
"rule": "rust:S3776",
"severity": "CRITICAL",
"message": "Refactor this function to reduce its Cognitive Complexity from 24 to the 15 allowed.",
"component": "libraries/droplet/src/manifest.rs",
"line": 82,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-dRYE2ZiQzo-vEe6fE&open=AZ-dRYE2ZiQzo-vEe6fE"
},
{
"key": "AZ-V530UdRHfOsokVAk8",
"rule": "text:S8570",
"severity": "MAJOR",
"message": "Dependency versions are not predictable if the lock file (Cargo.lock) is missing.",
"component": "libraries/libarchive/Cargo.toml",
"line": null,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V530UdRHfOsokVAk8&open=AZ-V530UdRHfOsokVAk8"
},
{
"key": "AZ-dRYOlZiQzo-vEe6fF",
"rule": "rust:S3776",
"severity": "CRITICAL",
"message": "Refactor this function to reduce its Cognitive Complexity from 38 to the 15 allowed.",
"component": "desktop/src-tauri/games/src/downloads/download_agent.rs",
"line": 276,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-dRYOlZiQzo-vEe6fF&open=AZ-dRYOlZiQzo-vEe6fF"
},
{
"key": "AZ-dRYOzZiQzo-vEe6fG",
"rule": "rust:S3776",
"severity": "CRITICAL",
"message": "Refactor this function to reduce its Cognitive Complexity from 22 to the 15 allowed.",
"component": "desktop/src-tauri/games/src/downloads/download_logic.rs",
"line": 32,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-dRYOzZiQzo-vEe6fG&open=AZ-dRYOzZiQzo-vEe6fG"
},
{
"key": "AZ-dRYTRZiQzo-vEe6fJ",
"rule": "rust:S3776",
"severity": "CRITICAL",
"message": "Refactor this function to reduce its Cognitive Complexity from 20 to the 15 allowed.",
"component": "desktop/src-tauri/remote/src/utils.rs",
"line": 41,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-dRYTRZiQzo-vEe6fJ&open=AZ-dRYTRZiQzo-vEe6fJ"
},
{
"key": "AZ-dRYRpZiQzo-vEe6fI",
"rule": "rust:S3776",
"severity": "CRITICAL",
"message": "Refactor this function to reduce its Cognitive Complexity from 21 to the 15 allowed.",
"component": "desktop/src-tauri/download_manager/src/download_manager_builder.rs",
"line": 227,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-dRYRpZiQzo-vEe6fI&open=AZ-dRYRpZiQzo-vEe6fI"
},
{
"key": "AZ-V53JddRHfOsokVAeS",
"rule": "typescript:S4782",
"severity": "MAJOR",
"message": "Consider removing 'undefined' type or '?' specifier, one of them is redundant.",
"component": "server/server/api/v1/client/game/[id]/versions.get.ts",
"line": 11,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53JddRHfOsokVAeS&open=AZ-V53JddRHfOsokVAeS"
},
{
"key": "AZ-V53JddRHfOsokVAeT",
"rule": "typescript:S4782",
"severity": "MAJOR",
"message": "Consider removing 'undefined' type or '?' specifier, one of them is redundant.",
"component": "server/server/api/v1/client/game/[id]/versions.get.ts",
"line": 12,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53JddRHfOsokVAeT&open=AZ-V53JddRHfOsokVAeT"
},
{
"key": "AZ-V525XdRHfOsokVAbG",
"rule": "typescript:S6564",
"severity": "MAJOR",
"message": "Remove this redundant type alias and replace its occurrences with \"V2Manifest\".",
"component": "server/server/internal/library/manifest/utils.ts",
"line": 3,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V525XdRHfOsokVAbG&open=AZ-V525XdRHfOsokVAbG"
},
{
"key": "AZ-hHASC_7iyvaG2TeIv",
"rule": "Web:S6851",
"severity": "MAJOR",
"message": "Remove redundant word \"picture\" from the \"alt\" attribute of your \"img\" tag.",
"component": "server/pages/user/[id]/index.vue",
"line": 4,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-hHASC_7iyvaG2TeIv&open=AZ-hHASC_7iyvaG2TeIv"
},
{
"key": "AZ-V53uedRHfOsokVAkr",
"rule": "text:S8570",
"severity": "MAJOR",
"message": "Dependency versions are not predictable if the lock file (Cargo.lock) is missing.",
"component": "libraries/native_model/Cargo.toml",
"line": null,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53uedRHfOsokVAkr&open=AZ-V53uedRHfOsokVAkr"
},
{
"key": "AZ-dRYTRZiQzo-vEe6fK",
"rule": "rust:S3776",
"severity": "CRITICAL",
"message": "Refactor this function to reduce its Cognitive Complexity from 19 to the 15 allowed.",
"component": "desktop/src-tauri/remote/src/utils.rs",
"line": 96,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-dRYTRZiQzo-vEe6fK&open=AZ-dRYTRZiQzo-vEe6fK"
},
{
"key": "AZ-V52-SdRHfOsokVAcM",
"rule": "typescript:S8786",
"severity": "MAJOR",
"message": "Simplify this regular expression to reduce its runtime, as it has super-linear performance due to backtracking.",
"component": "server/server/internal/metadata/steam.ts",
"line": 921,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V52-SdRHfOsokVAcM&open=AZ-V52-SdRHfOsokVAcM"
},
{
"key": "AZ-V52-SdRHfOsokVAcO",
"rule": "typescript:S8786",
"severity": "MAJOR",
"message": "Simplify this regular expression to reduce its runtime, as it has super-linear performance due to backtracking.",
"component": "server/server/internal/metadata/steam.ts",
"line": 1013,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V52-SdRHfOsokVAcO&open=AZ-V52-SdRHfOsokVAcO"
},
{
"key": "AZ-V52-SdRHfOsokVAcP",
"rule": "typescript:S8786",
"severity": "MAJOR",
"message": "Simplify this regular expression to reduce its runtime, as it has super-linear performance due to backtracking.",
"component": "server/server/internal/metadata/steam.ts",
"line": 1016,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V52-SdRHfOsokVAcP&open=AZ-V52-SdRHfOsokVAcP"
},
{
"key": "AZ-V52-SdRHfOsokVAcS",
"rule": "typescript:S8786",
"severity": "MAJOR",
"message": "Simplify this regular expression to reduce its runtime, as it has super-linear performance due to backtracking.",
"component": "server/server/internal/metadata/steam.ts",
"line": 1110,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V52-SdRHfOsokVAcS&open=AZ-V52-SdRHfOsokVAcS"
},
{
"key": "AZ-V53sndRHfOsokVAkD",
"rule": "typescript:S6772",
"severity": "MAJOR",
"message": "Ambiguous spacing after previous element span",
"component": "sites/promo/src/components/comparison.tsx",
"line": 259,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53sndRHfOsokVAkD&open=AZ-V53sndRHfOsokVAkD"
},
{
"key": "AZ-V53sndRHfOsokVAkG",
"rule": "typescript:S6479",
"severity": "MAJOR",
"message": "Do not use Array index in keys",
"component": "sites/promo/src/components/comparison.tsx",
"line": 310,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53sndRHfOsokVAkG&open=AZ-V53sndRHfOsokVAkG"
},
{
"key": "AZ-V53sndRHfOsokVAkI",
"rule": "typescript:S7721",
"severity": "MAJOR",
"message": "Move function 'onlyUnique' to the outer scope.",
"component": "sites/promo/src/components/comparison.tsx",
"line": 330,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53sndRHfOsokVAkI&open=AZ-V53sndRHfOsokVAkI"
},
{
"key": "AZ-V53radRHfOsokVAju",
"rule": "typescript:S2137",
"severity": "MAJOR",
"message": "Do not use \"Map\" to declare a function - use another name.",
"component": "sites/promo/src/components/map.tsx",
"line": 53,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53radRHfOsokVAju&open=AZ-V53radRHfOsokVAju"
},
{
"key": "AZ-V53qadRHfOsokVAja",
"rule": "typescript:S1763",
"severity": "MAJOR",
"message": "Unreachable code.",
"component": "sites/promo/src/components/sponsors.tsx",
"line": 101,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53qadRHfOsokVAja&open=AZ-V53qadRHfOsokVAja"
},
{
"key": "AZ-V53qadRHfOsokVAjc",
"rule": "typescript:S6479",
"severity": "MAJOR",
"message": "Do not use Array index in keys",
"component": "sites/promo/src/components/sponsors.tsx",
"line": 245,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53qadRHfOsokVAjc&open=AZ-V53qadRHfOsokVAjc"
},
{
"key": "AZ-V53qadRHfOsokVAje",
"rule": "typescript:S6479",
"severity": "MAJOR",
"message": "Do not use Array index in keys",
"component": "sites/promo/src/components/sponsors.tsx",
"line": 262,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53qadRHfOsokVAje&open=AZ-V53qadRHfOsokVAje"
},
{
"key": "AZ-V53wAdRHfOsokVAks",
"rule": "text:S8570",
"severity": "MAJOR",
"message": "Dependency versions are not predictable if the lock file (Cargo.lock) is missing.",
"component": "libraries/native_model/native_model_macro/Cargo.toml",
"line": null,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53wAdRHfOsokVAks&open=AZ-V53wAdRHfOsokVAks"
},
{
"key": "AZ-V53pudRHfOsokVAjP",
"rule": "shell:S6506",
"severity": "MAJOR",
"message": "Not disabling redirects might allow for redirections to insecure websites. Make sure it is safe here.",
"component": "desktop/optimize-appimage.sh",
"line": 17,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53pudRHfOsokVAjP&open=AZ-V53pudRHfOsokVAjP"
},
{
"key": "AZ-V53TVdRHfOsokVAfi",
"rule": "typescript:S3358",
"severity": "MAJOR",
"message": "Extract this nested ternary operation into an independent statement.",
"component": "server/components/StoreView.vue",
"line": 465,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53TVdRHfOsokVAfi&open=AZ-V53TVdRHfOsokVAfi"
},
{
"key": "AZ-V53zOdRHfOsokVAk7",
"rule": "text:S8570",
"severity": "MAJOR",
"message": "Dependency versions are not predictable if the lock file (Cargo.lock) is missing.",
"component": "libraries/native_model/tests_crate/Cargo.toml",
"line": null,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53zOdRHfOsokVAk7&open=AZ-V53zOdRHfOsokVAk7"
},
{
"key": "AZ-V53MYdRHfOsokVAes",
"rule": "typescript:S4624",
"severity": "MAJOR",
"message": "Refactor this code to not use nested template literals.",
"component": "server/server/routes/auth/oidc.get.ts",
"line": 18,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53MYdRHfOsokVAes&open=AZ-V53MYdRHfOsokVAes"
},
{
"key": "AZ-V528odRHfOsokVAbs",
"rule": "typescript:S1751",
"severity": "MAJOR",
"message": "Invalid loop. Its body allows only one iteration.",
"component": "server/server/internal/metadata/igdb.ts",
"line": 654,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V528odRHfOsokVAbs&open=AZ-V528odRHfOsokVAbs"
},
{
"key": "AZ-V5298dRHfOsokVAby",
"rule": "typescript:S6035",
"severity": "MAJOR",
"message": "Replace this alternation with a character class.",
"component": "server/server/internal/metadata/pcgamingwiki.ts",
"line": 340,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V5298dRHfOsokVAby&open=AZ-V5298dRHfOsokVAby"
},
{
"key": "AZ-V53l8dRHfOsokVAi6",
"rule": "typescript:S7785",
"severity": "MAJOR",
"message": "Prefer top-level await over using a promise chain.",
"component": "desktop/main/pages/settings/index.vue",
"line": 45,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53l8dRHfOsokVAi6&open=AZ-V53l8dRHfOsokVAi6"
},
{
"key": "AZ-V53FhdRHfOsokVAdj",
"rule": "typescript:S4043",
"severity": "MAJOR",
"message": "Move this array \"sort\" operation to a separate statement or replace it with \"toSorted\".",
"component": "server/server/internal/utils/prioritylist.ts",
"line": 32,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53FhdRHfOsokVAdj&open=AZ-V53FhdRHfOsokVAdj"
},
{
"key": "AZ-V53AVdRHfOsokVAcb",
"rule": "typescript:S6564",
"severity": "MAJOR",
"message": "Remove this redundant type alias and replace its occurrences with \"string\".",
"component": "server/server/internal/objects/objectHandler.ts",
"line": 24,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53AVdRHfOsokVAcb&open=AZ-V53AVdRHfOsokVAcb"
},
{
"key": "AZ-V53aQdRHfOsokVAhI",
"rule": "typescript:S8786",
"severity": "MAJOR",
"message": "Simplify this regular expression to reduce its runtime, as it has super-linear performance due to backtracking.",
"component": "server/pages/admin/users/auth/simple/index.vue",
"line": 452,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53aQdRHfOsokVAhI&open=AZ-V53aQdRHfOsokVAhI"
},
{
"key": "AZ-V53c5dRHfOsokVAhe",
"rule": "Web:S5256",
"severity": "MAJOR",
"message": "Add \"<th>\" headers to this \"<table>\".",
"component": "server/pages/store/[id]/index.vue",
"line": 54,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53c5dRHfOsokVAhe&open=AZ-V53c5dRHfOsokVAhe"
},
{
"key": "AZ-V53pcdRHfOsokVAjN",
"rule": "typescript:S4043",
"severity": "MAJOR",
"message": "Move this array \"sort\" operation to a separate statement or replace it with \"toSorted\".",
"component": "desktop/main/composables/current-page-engine.ts",
"line": 16,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53pcdRHfOsokVAjN&open=AZ-V53pcdRHfOsokVAjN"
},
{
"key": "AZ-V525hdRHfOsokVAbO",
"rule": "typescript:S4043",
"severity": "MAJOR",
"message": "Move this array \"sort\" operation to a separate statement or replace it with \"toSorted\".",
"component": "server/server/internal/library/index.ts",
"line": 381,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V525hdRHfOsokVAbO&open=AZ-V525hdRHfOsokVAbO"
},
{
"key": "AZ-V52-GdRHfOsokVAb8",
"rule": "typescript:S6661",
"severity": "MAJOR",
"message": "Use an object spread instead of `Object.assign` eg: `{ ...foo }`.",
"component": "server/server/internal/metadata/index.ts",
"line": 94,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V52-GdRHfOsokVAb8&open=AZ-V52-GdRHfOsokVAb8"
},
{
"key": "AZ-V53dudRHfOsokVAhq",
"rule": "typescript:S4043",
"severity": "MAJOR",
"message": "Move this array \"sort\" operation to a separate statement or replace it with \"toSorted\".",
"component": "server/composables/current-page-engine.ts",
"line": 15,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53dudRHfOsokVAhq&open=AZ-V53dudRHfOsokVAhq"
},
{
"key": "AZ-V53o3dRHfOsokVAjG",
"rule": "typescript:S1854",
"severity": "MAJOR",
"message": "Remove this useless assignment to variable \"result\".",
"component": "desktop/main/pages/setup/server.vue",
"line": 97,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53o3dRHfOsokVAjG&open=AZ-V53o3dRHfOsokVAjG"
},
{
"key": "AZ-V53GJdRHfOsokVAdx",
"rule": "typescript:S2137",
"severity": "MAJOR",
"message": "Do not use \"globalThis\" to declare a variable - use another name.",
"component": "server/server/internal/db/database.ts",
"line": 10,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53GJdRHfOsokVAdx&open=AZ-V53GJdRHfOsokVAdx"
},
{
"key": "AZ-dRYBBZiQzo-vEe6fD",
"rule": "rust:S3776",
"severity": "CRITICAL",
"message": "Refactor this function to reduce its Cognitive Complexity from 21 to the 15 allowed.",
"component": "libraries/libarchive/src/writer.rs",
"line": 105,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-dRYBBZiQzo-vEe6fD&open=AZ-dRYBBZiQzo-vEe6fD"
}
]
} |
… data SonarCloud component_tree API with pullRequest parameter works with new_ prefixed metrics. Matches what web UI shows at /component_measures?metric=new_coverage&view=list
SonarCloud AnalysisSummary
Total: 53 issues Top Issues
TrackingNo existing GitHub issues found for these findings. Run Full analysis: SonarCloud Dashboard 📋 JSON Summary (for AI agents){
"project": "BillyOutlast_drop",
"pullRequest": 108,
"qualityGate": {
"gateStatus": "ERROR",
"failedConditions": [
{
"metric": "new_coverage",
"actual": "0.0",
"threshold": "80"
}
]
},
"filesNeedingCoverage": [
{
"file": "server/server/internal/config/application-configuration.ts",
"coverage": "0.0",
"uncovered": "0"
},
{
"file": "server/server/internal/auth/base32/index.js",
"coverage": "0.0",
"uncovered": "0"
},
{
"file": "server/server/internal/services/torrential/index.ts",
"coverage": "0.0",
"uncovered": "0"
},
{
"file": "server/server/internal/library/index.ts",
"coverage": "0.0",
"uncovered": "0"
},
{
"file": "server/server/internal/library/manifest/index.ts",
"coverage": "0.0",
"uncovered": "0"
},
{
"file": "server/pages/admin/users/auth/simple/index.vue",
"coverage": "0.0",
"uncovered": "0"
},
{
"file": "server/pages/store/[id]/index.vue",
"coverage": "0.0",
"uncovered": "0"
},
{
"file": "server/server/internal/services/services/nginx.ts",
"coverage": "0.0",
"uncovered": "0"
}
],
"totalIssues": 53,
"summary": {
"blocker": 0,
"critical": 11,
"major": 42
},
"issues": [
{
"key": "AZ-hG_6o_7iyvaG2TeIu",
"rule": "typescript:S3776",
"severity": "CRITICAL",
"message": "Refactor this function to reduce its Cognitive Complexity from 16 to the 15 allowed.",
"component": "server/server/internal/session/filter.ts",
"line": 10,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-hG_6o_7iyvaG2TeIu&open=AZ-hG_6o_7iyvaG2TeIu"
},
{
"key": "AZ-hHArD_7iyvaG2TeIw",
"rule": "typescript:S6851",
"severity": "MAJOR",
"message": "Redundant alt attribute. Screen-readers already announce `img` tags as an image. You don’t need to use the words `image`, `photo,` or `picture` (or any specified custom words) in the alt prop.",
"component": "sites/promo/src/components/gallery-modal.tsx",
"line": 135,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-hHArD_7iyvaG2TeIw&open=AZ-hHArD_7iyvaG2TeIw"
},
{
"key": "AZ-gksvtpI4t_4jmejj6",
"rule": "shelldre:S131",
"severity": "CRITICAL",
"message": "Add a default case (*) to handle unexpected values.",
"component": "scripts/sonarcloud-sync.sh",
"line": 306,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-gksvtpI4t_4jmejj6&open=AZ-gksvtpI4t_4jmejj6"
},
{
"key": "AZ-gA2474r4tYZa_Yi7e",
"rule": "typescript:S2004",
"severity": "CRITICAL",
"message": "Refactor this code to not nest functions more than 4 levels deep.",
"component": "sites/promo/src/components/comparison.tsx",
"line": 450,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-gA2474r4tYZa_Yi7e&open=AZ-gA2474r4tYZa_Yi7e"
},
{
"key": "AZ-c83VBnUgmSfWQkp2r",
"rule": "typescript:S8987",
"severity": "MAJOR",
"message": "Move this `v-if` to a parent element.",
"component": "desktop/main/components/GameOptions/ProtonSelector.vue",
"line": 73,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-c83VBnUgmSfWQkp2r&open=AZ-c83VBnUgmSfWQkp2r"
},
{
"key": "AZ-c83VBnUgmSfWQkp2s",
"rule": "typescript:S8987",
"severity": "MAJOR",
"message": "Move this `v-if` to a parent element.",
"component": "desktop/main/components/GameOptions/ProtonSelector.vue",
"line": 112,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-c83VBnUgmSfWQkp2s&open=AZ-c83VBnUgmSfWQkp2s"
},
{
"key": "AZ-YTBgzecfn39edgquG",
"rule": "typescript:S8786",
"severity": "MAJOR",
"message": "Simplify this regular expression to reduce its runtime, as it has super-linear performance due to backtracking.",
"component": "server/server/internal/metadata/steam.ts",
"line": 649,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-YTBgzecfn39edgquG&open=AZ-YTBgzecfn39edgquG"
},
{
"key": "AZ-YTCWiecfn39edgquP",
"rule": "typescript:S6772",
"severity": "MAJOR",
"message": "Ambiguous spacing after previous element img",
"component": "sites/promo/src/components/comparison.tsx",
"line": 54,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-YTCWiecfn39edgquP&open=AZ-YTCWiecfn39edgquP"
},
{
"key": "AZ-WZn8wL3IEMbakOkCg",
"rule": "githubactions:S6505",
"severity": "MAJOR",
"message": "Omitting \"--ignore-scripts\" allows lifecycle scripts to run during package installation.",
"component": ".github/workflows/e2e.yml",
"line": 64,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-WZn8wL3IEMbakOkCg&open=AZ-WZn8wL3IEMbakOkCg"
},
{
"key": "AZ-dRYQYZiQzo-vEe6fH",
"rule": "rust:S3776",
"severity": "CRITICAL",
"message": "Refactor this function to reduce its Cognitive Complexity from 29 to the 15 allowed.",
"component": "desktop/src-tauri/src/lib.rs",
"line": 205,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-dRYQYZiQzo-vEe6fH&open=AZ-dRYQYZiQzo-vEe6fH"
},
{
"key": "AZ-V531cdRHfOsokVAlP",
"rule": "docker:S8549",
"severity": "MAJOR",
"message": "Using dependencies without locking resolved versions is security-sensitive.",
"component": "Dockerfile",
"line": 37,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V531cdRHfOsokVAlP&open=AZ-V531cdRHfOsokVAlP"
},
{
"key": "AZ-dRYE2ZiQzo-vEe6fE",
"rule": "rust:S3776",
"severity": "CRITICAL",
"message": "Refactor this function to reduce its Cognitive Complexity from 24 to the 15 allowed.",
"component": "libraries/droplet/src/manifest.rs",
"line": 82,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-dRYE2ZiQzo-vEe6fE&open=AZ-dRYE2ZiQzo-vEe6fE"
},
{
"key": "AZ-V530UdRHfOsokVAk8",
"rule": "text:S8570",
"severity": "MAJOR",
"message": "Dependency versions are not predictable if the lock file (Cargo.lock) is missing.",
"component": "libraries/libarchive/Cargo.toml",
"line": null,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V530UdRHfOsokVAk8&open=AZ-V530UdRHfOsokVAk8"
},
{
"key": "AZ-dRYOlZiQzo-vEe6fF",
"rule": "rust:S3776",
"severity": "CRITICAL",
"message": "Refactor this function to reduce its Cognitive Complexity from 38 to the 15 allowed.",
"component": "desktop/src-tauri/games/src/downloads/download_agent.rs",
"line": 276,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-dRYOlZiQzo-vEe6fF&open=AZ-dRYOlZiQzo-vEe6fF"
},
{
"key": "AZ-dRYOzZiQzo-vEe6fG",
"rule": "rust:S3776",
"severity": "CRITICAL",
"message": "Refactor this function to reduce its Cognitive Complexity from 22 to the 15 allowed.",
"component": "desktop/src-tauri/games/src/downloads/download_logic.rs",
"line": 32,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-dRYOzZiQzo-vEe6fG&open=AZ-dRYOzZiQzo-vEe6fG"
},
{
"key": "AZ-dRYTRZiQzo-vEe6fJ",
"rule": "rust:S3776",
"severity": "CRITICAL",
"message": "Refactor this function to reduce its Cognitive Complexity from 20 to the 15 allowed.",
"component": "desktop/src-tauri/remote/src/utils.rs",
"line": 41,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-dRYTRZiQzo-vEe6fJ&open=AZ-dRYTRZiQzo-vEe6fJ"
},
{
"key": "AZ-dRYRpZiQzo-vEe6fI",
"rule": "rust:S3776",
"severity": "CRITICAL",
"message": "Refactor this function to reduce its Cognitive Complexity from 21 to the 15 allowed.",
"component": "desktop/src-tauri/download_manager/src/download_manager_builder.rs",
"line": 227,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-dRYRpZiQzo-vEe6fI&open=AZ-dRYRpZiQzo-vEe6fI"
},
{
"key": "AZ-V53JddRHfOsokVAeS",
"rule": "typescript:S4782",
"severity": "MAJOR",
"message": "Consider removing 'undefined' type or '?' specifier, one of them is redundant.",
"component": "server/server/api/v1/client/game/[id]/versions.get.ts",
"line": 11,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53JddRHfOsokVAeS&open=AZ-V53JddRHfOsokVAeS"
},
{
"key": "AZ-V53JddRHfOsokVAeT",
"rule": "typescript:S4782",
"severity": "MAJOR",
"message": "Consider removing 'undefined' type or '?' specifier, one of them is redundant.",
"component": "server/server/api/v1/client/game/[id]/versions.get.ts",
"line": 12,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53JddRHfOsokVAeT&open=AZ-V53JddRHfOsokVAeT"
},
{
"key": "AZ-V525XdRHfOsokVAbG",
"rule": "typescript:S6564",
"severity": "MAJOR",
"message": "Remove this redundant type alias and replace its occurrences with \"V2Manifest\".",
"component": "server/server/internal/library/manifest/utils.ts",
"line": 3,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V525XdRHfOsokVAbG&open=AZ-V525XdRHfOsokVAbG"
},
{
"key": "AZ-hHASC_7iyvaG2TeIv",
"rule": "Web:S6851",
"severity": "MAJOR",
"message": "Remove redundant word \"picture\" from the \"alt\" attribute of your \"img\" tag.",
"component": "server/pages/user/[id]/index.vue",
"line": 4,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-hHASC_7iyvaG2TeIv&open=AZ-hHASC_7iyvaG2TeIv"
},
{
"key": "AZ-V53uedRHfOsokVAkr",
"rule": "text:S8570",
"severity": "MAJOR",
"message": "Dependency versions are not predictable if the lock file (Cargo.lock) is missing.",
"component": "libraries/native_model/Cargo.toml",
"line": null,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53uedRHfOsokVAkr&open=AZ-V53uedRHfOsokVAkr"
},
{
"key": "AZ-dRYTRZiQzo-vEe6fK",
"rule": "rust:S3776",
"severity": "CRITICAL",
"message": "Refactor this function to reduce its Cognitive Complexity from 19 to the 15 allowed.",
"component": "desktop/src-tauri/remote/src/utils.rs",
"line": 96,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-dRYTRZiQzo-vEe6fK&open=AZ-dRYTRZiQzo-vEe6fK"
},
{
"key": "AZ-V52-SdRHfOsokVAcM",
"rule": "typescript:S8786",
"severity": "MAJOR",
"message": "Simplify this regular expression to reduce its runtime, as it has super-linear performance due to backtracking.",
"component": "server/server/internal/metadata/steam.ts",
"line": 921,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V52-SdRHfOsokVAcM&open=AZ-V52-SdRHfOsokVAcM"
},
{
"key": "AZ-V52-SdRHfOsokVAcO",
"rule": "typescript:S8786",
"severity": "MAJOR",
"message": "Simplify this regular expression to reduce its runtime, as it has super-linear performance due to backtracking.",
"component": "server/server/internal/metadata/steam.ts",
"line": 1013,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V52-SdRHfOsokVAcO&open=AZ-V52-SdRHfOsokVAcO"
},
{
"key": "AZ-V52-SdRHfOsokVAcP",
"rule": "typescript:S8786",
"severity": "MAJOR",
"message": "Simplify this regular expression to reduce its runtime, as it has super-linear performance due to backtracking.",
"component": "server/server/internal/metadata/steam.ts",
"line": 1016,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V52-SdRHfOsokVAcP&open=AZ-V52-SdRHfOsokVAcP"
},
{
"key": "AZ-V52-SdRHfOsokVAcS",
"rule": "typescript:S8786",
"severity": "MAJOR",
"message": "Simplify this regular expression to reduce its runtime, as it has super-linear performance due to backtracking.",
"component": "server/server/internal/metadata/steam.ts",
"line": 1110,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V52-SdRHfOsokVAcS&open=AZ-V52-SdRHfOsokVAcS"
},
{
"key": "AZ-V53sndRHfOsokVAkD",
"rule": "typescript:S6772",
"severity": "MAJOR",
"message": "Ambiguous spacing after previous element span",
"component": "sites/promo/src/components/comparison.tsx",
"line": 259,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53sndRHfOsokVAkD&open=AZ-V53sndRHfOsokVAkD"
},
{
"key": "AZ-V53sndRHfOsokVAkG",
"rule": "typescript:S6479",
"severity": "MAJOR",
"message": "Do not use Array index in keys",
"component": "sites/promo/src/components/comparison.tsx",
"line": 310,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53sndRHfOsokVAkG&open=AZ-V53sndRHfOsokVAkG"
},
{
"key": "AZ-V53sndRHfOsokVAkI",
"rule": "typescript:S7721",
"severity": "MAJOR",
"message": "Move function 'onlyUnique' to the outer scope.",
"component": "sites/promo/src/components/comparison.tsx",
"line": 330,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53sndRHfOsokVAkI&open=AZ-V53sndRHfOsokVAkI"
},
{
"key": "AZ-V53radRHfOsokVAju",
"rule": "typescript:S2137",
"severity": "MAJOR",
"message": "Do not use \"Map\" to declare a function - use another name.",
"component": "sites/promo/src/components/map.tsx",
"line": 53,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53radRHfOsokVAju&open=AZ-V53radRHfOsokVAju"
},
{
"key": "AZ-V53qadRHfOsokVAja",
"rule": "typescript:S1763",
"severity": "MAJOR",
"message": "Unreachable code.",
"component": "sites/promo/src/components/sponsors.tsx",
"line": 101,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53qadRHfOsokVAja&open=AZ-V53qadRHfOsokVAja"
},
{
"key": "AZ-V53qadRHfOsokVAjc",
"rule": "typescript:S6479",
"severity": "MAJOR",
"message": "Do not use Array index in keys",
"component": "sites/promo/src/components/sponsors.tsx",
"line": 245,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53qadRHfOsokVAjc&open=AZ-V53qadRHfOsokVAjc"
},
{
"key": "AZ-V53qadRHfOsokVAje",
"rule": "typescript:S6479",
"severity": "MAJOR",
"message": "Do not use Array index in keys",
"component": "sites/promo/src/components/sponsors.tsx",
"line": 262,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53qadRHfOsokVAje&open=AZ-V53qadRHfOsokVAje"
},
{
"key": "AZ-V53wAdRHfOsokVAks",
"rule": "text:S8570",
"severity": "MAJOR",
"message": "Dependency versions are not predictable if the lock file (Cargo.lock) is missing.",
"component": "libraries/native_model/native_model_macro/Cargo.toml",
"line": null,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53wAdRHfOsokVAks&open=AZ-V53wAdRHfOsokVAks"
},
{
"key": "AZ-V53pudRHfOsokVAjP",
"rule": "shell:S6506",
"severity": "MAJOR",
"message": "Not disabling redirects might allow for redirections to insecure websites. Make sure it is safe here.",
"component": "desktop/optimize-appimage.sh",
"line": 17,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53pudRHfOsokVAjP&open=AZ-V53pudRHfOsokVAjP"
},
{
"key": "AZ-V53TVdRHfOsokVAfi",
"rule": "typescript:S3358",
"severity": "MAJOR",
"message": "Extract this nested ternary operation into an independent statement.",
"component": "server/components/StoreView.vue",
"line": 465,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53TVdRHfOsokVAfi&open=AZ-V53TVdRHfOsokVAfi"
},
{
"key": "AZ-V53zOdRHfOsokVAk7",
"rule": "text:S8570",
"severity": "MAJOR",
"message": "Dependency versions are not predictable if the lock file (Cargo.lock) is missing.",
"component": "libraries/native_model/tests_crate/Cargo.toml",
"line": null,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53zOdRHfOsokVAk7&open=AZ-V53zOdRHfOsokVAk7"
},
{
"key": "AZ-V53MYdRHfOsokVAes",
"rule": "typescript:S4624",
"severity": "MAJOR",
"message": "Refactor this code to not use nested template literals.",
"component": "server/server/routes/auth/oidc.get.ts",
"line": 18,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53MYdRHfOsokVAes&open=AZ-V53MYdRHfOsokVAes"
},
{
"key": "AZ-V528odRHfOsokVAbs",
"rule": "typescript:S1751",
"severity": "MAJOR",
"message": "Invalid loop. Its body allows only one iteration.",
"component": "server/server/internal/metadata/igdb.ts",
"line": 654,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V528odRHfOsokVAbs&open=AZ-V528odRHfOsokVAbs"
},
{
"key": "AZ-V5298dRHfOsokVAby",
"rule": "typescript:S6035",
"severity": "MAJOR",
"message": "Replace this alternation with a character class.",
"component": "server/server/internal/metadata/pcgamingwiki.ts",
"line": 340,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V5298dRHfOsokVAby&open=AZ-V5298dRHfOsokVAby"
},
{
"key": "AZ-V53l8dRHfOsokVAi6",
"rule": "typescript:S7785",
"severity": "MAJOR",
"message": "Prefer top-level await over using a promise chain.",
"component": "desktop/main/pages/settings/index.vue",
"line": 45,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53l8dRHfOsokVAi6&open=AZ-V53l8dRHfOsokVAi6"
},
{
"key": "AZ-V53FhdRHfOsokVAdj",
"rule": "typescript:S4043",
"severity": "MAJOR",
"message": "Move this array \"sort\" operation to a separate statement or replace it with \"toSorted\".",
"component": "server/server/internal/utils/prioritylist.ts",
"line": 32,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53FhdRHfOsokVAdj&open=AZ-V53FhdRHfOsokVAdj"
},
{
"key": "AZ-V53AVdRHfOsokVAcb",
"rule": "typescript:S6564",
"severity": "MAJOR",
"message": "Remove this redundant type alias and replace its occurrences with \"string\".",
"component": "server/server/internal/objects/objectHandler.ts",
"line": 24,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53AVdRHfOsokVAcb&open=AZ-V53AVdRHfOsokVAcb"
},
{
"key": "AZ-V53aQdRHfOsokVAhI",
"rule": "typescript:S8786",
"severity": "MAJOR",
"message": "Simplify this regular expression to reduce its runtime, as it has super-linear performance due to backtracking.",
"component": "server/pages/admin/users/auth/simple/index.vue",
"line": 452,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53aQdRHfOsokVAhI&open=AZ-V53aQdRHfOsokVAhI"
},
{
"key": "AZ-V53c5dRHfOsokVAhe",
"rule": "Web:S5256",
"severity": "MAJOR",
"message": "Add \"<th>\" headers to this \"<table>\".",
"component": "server/pages/store/[id]/index.vue",
"line": 54,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53c5dRHfOsokVAhe&open=AZ-V53c5dRHfOsokVAhe"
},
{
"key": "AZ-V53pcdRHfOsokVAjN",
"rule": "typescript:S4043",
"severity": "MAJOR",
"message": "Move this array \"sort\" operation to a separate statement or replace it with \"toSorted\".",
"component": "desktop/main/composables/current-page-engine.ts",
"line": 16,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53pcdRHfOsokVAjN&open=AZ-V53pcdRHfOsokVAjN"
},
{
"key": "AZ-V525hdRHfOsokVAbO",
"rule": "typescript:S4043",
"severity": "MAJOR",
"message": "Move this array \"sort\" operation to a separate statement or replace it with \"toSorted\".",
"component": "server/server/internal/library/index.ts",
"line": 381,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V525hdRHfOsokVAbO&open=AZ-V525hdRHfOsokVAbO"
},
{
"key": "AZ-V52-GdRHfOsokVAb8",
"rule": "typescript:S6661",
"severity": "MAJOR",
"message": "Use an object spread instead of `Object.assign` eg: `{ ...foo }`.",
"component": "server/server/internal/metadata/index.ts",
"line": 94,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V52-GdRHfOsokVAb8&open=AZ-V52-GdRHfOsokVAb8"
},
{
"key": "AZ-V53dudRHfOsokVAhq",
"rule": "typescript:S4043",
"severity": "MAJOR",
"message": "Move this array \"sort\" operation to a separate statement or replace it with \"toSorted\".",
"component": "server/composables/current-page-engine.ts",
"line": 15,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53dudRHfOsokVAhq&open=AZ-V53dudRHfOsokVAhq"
},
{
"key": "AZ-V53o3dRHfOsokVAjG",
"rule": "typescript:S1854",
"severity": "MAJOR",
"message": "Remove this useless assignment to variable \"result\".",
"component": "desktop/main/pages/setup/server.vue",
"line": 97,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53o3dRHfOsokVAjG&open=AZ-V53o3dRHfOsokVAjG"
},
{
"key": "AZ-V53GJdRHfOsokVAdx",
"rule": "typescript:S2137",
"severity": "MAJOR",
"message": "Do not use \"globalThis\" to declare a variable - use another name.",
"component": "server/server/internal/db/database.ts",
"line": 10,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53GJdRHfOsokVAdx&open=AZ-V53GJdRHfOsokVAdx"
},
{
"key": "AZ-dRYBBZiQzo-vEe6fD",
"rule": "rust:S3776",
"severity": "CRITICAL",
"message": "Refactor this function to reduce its Cognitive Complexity from 21 to the 15 allowed.",
"component": "libraries/libarchive/src/writer.rs",
"line": 105,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-dRYBBZiQzo-vEe6fD&open=AZ-dRYBBZiQzo-vEe6fD"
}
]
} |
Covers JSON string parsing, object passthrough, empty string, invalid JSON
There was a problem hiding this comment.
Actionable comments posted: 3
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@scripts/sonarcloud-pr-comment.sh`:
- Around line 220-224: The coverage projection in JSON_SUMMARY must retain one
row per component even when SonarCloud omits a metric. Update the coverage and
uncovered expressions inside the --argjson coverage filter to collect matching
measure values into arrays, select the first value, and fall back to "0.0" and
"0" when no match exists.
In `@server/server/internal/services/services/nginx.ts`:
- Around line 8-15: Update the executable discovery logic around knownPaths to
validate each candidate is a regular, executable file before returning it,
rather than relying only on fs.existsSync(). Remove the "nginx" fallback so the
function returns only a validated trusted path and otherwise indicates no usable
executable was found.
In `@server/server/internal/services/torrential/index.ts`:
- Around line 61-63: Update the cargo path selection in the cargo branch to
choose only an executable cargo file: replace the existsSync-only check with
fs.accessSync using fs.constants.X_OK, preferably confirming the candidate is a
regular file before selecting it. Preserve the "cargo" fallback when neither
configured path is valid, and apply the same validation to the additional cargo
path selection noted in the comment.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro Plus
Run ID: 4203d6c8-7a90-4eda-b8d7-447368ff1b4c
📒 Files selected for processing (8)
.github/workflows/ci.yml.husky/pre-commitscripts/sonarcloud-pr-comment.shserver/components/GameCarousel.vueserver/server/internal/config/application-configuration.tsserver/server/internal/library/manifest/utils.tsserver/server/internal/services/services/nginx.tsserver/server/internal/services/torrential/index.ts
🚧 Files skipped from review as they are similar to previous changes (3)
- server/components/GameCarousel.vue
- server/server/internal/config/application-configuration.ts
- .github/workflows/ci.yml
| JSON_SUMMARY=$(echo "$SONAR_RESPONSE" | jq \ | ||
| --arg project "$SONAR_PROJECT_KEY" \ | ||
| --arg pr "$GITHUB_PR_NUMBER" \ | ||
| --argjson qg "$(echo "$QG_RESPONSE" | jq '{gateStatus: .projectStatus.status, failedConditions: [.projectStatus.conditions[]? | select(.status == "ERROR") | {metric: .metricKey, actual: .actualValue, threshold: .errorThreshold}]}')" \ | ||
| --argjson coverage "$(echo "$COVERAGE_RESPONSE" | jq '[.components[]? | {file: (.path // .name), coverage: (.measures[]? | select(.metric == "new_coverage") | .value // "0.0"), uncovered: (.measures[]? | select(.metric == "new_uncovered_lines") | .value // "0")}]')" \ |
There was a problem hiding this comment.
🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win
🧩 Analysis chain
🌐 Web query:
Does SonarCloud component_tree API always return all requested metricKeys for every component, or can individual metrics be absent per file?
💡 Result:
No, the SonarCloud component_tree API does not guarantee that every requested metricKey will be returned for every component in the response [1][2]. When you query the API with a set of metricKeys, the response includes a measures array for each component that contains data only for metrics that have been computed for that specific file or component [1][2]. If a specific metric has no value—for example, because the metric is not applicable to that file type, or the data has not been computed or captured during analysis—it will be absent from the measures list for that component [1][3][2]. Key points regarding this behavior include: Data Presence: The API returns objects only for existing metrics [1][2]. If a component lacks a specific metric, that metric simply will not appear in the measures array for that component, rather than returning a null value [1][2]. Metric Applicability: Certain metrics are scoped to specific languages or file types. If you request a metric that is incompatible with a file (e.g., requesting a coverage metric for a file type that does not support coverage analysis), that metric will be missing for that file [4][1]. Analysis State: Metrics that have not been computed during the most recent analysis, or that are newly introduced and have not yet been processed for a project, may also be absent [4][3]. Verification: To troubleshoot or verify which metrics are available for your components, you can use the /api/metrics/search endpoint to see the full list of available metrics in your instance or organization [5][1][6].
Citations:
- 1: https://community.sonarsource.com/t/what-are-the-available-fields-in-the-web-api/86256
- 2: https://community.sonarsource.com/t/api-how-to-obtain-projects-metrics-and-last-analysis-date-question/76069
- 3: https://community.sonarsource.com/t/sonarcloud-web-api-doesnt-return-anything-for-new-coverage/90752
- 4: https://community.sonarsource.com/t/sonarcloud-not-showing-metrics/113221
- 5: https://community.sonarsource.com/t/possible-values-for-the-metrickeys-parameter-of-the-api-measures-component-api/5052
- 6: https://docs.sonarsource.com/sonarqube-community-build/extension-guide/web-api
Coverage rows can disappear when SonarCloud omits a metric for a file. (.measures[]? | select(.metric == "new_coverage") | .value // "0.0") only falls back when a matching measure exists with a null value; if the metric is absent entirely, jq drops the whole object. Use an array+first fallback for both fields so each file still emits 0.0/0.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@scripts/sonarcloud-pr-comment.sh` around lines 220 - 224, The coverage
projection in JSON_SUMMARY must retain one row per component even when
SonarCloud omits a metric. Update the coverage and uncovered expressions inside
the --argjson coverage filter to collect matching measure values into arrays,
select the first value, and fall back to "0.0" and "0" when no match exists.
| const knownPaths = [ | ||
| "/usr/sbin/nginx", | ||
| "/usr/local/bin/nginx", | ||
| "/usr/bin/nginx", | ||
| ]; | ||
| for (const p of knownPaths) { | ||
| if (fs.existsSync(p)) return p; | ||
| } |
There was a problem hiding this comment.
🩺 Stability & Availability | 🟡 Minor | ⚡ Quick win
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
set -euo pipefail
# Map the target file first.
ast-grep outline server/server/internal/services/services/nginx.ts --view expanded
# Read the relevant file with line numbers.
cat -n server/server/internal/services/services/nginx.ts | sed -n '1,220p'
# Find where resolveNginxPath() is used.
rg -n "resolveNginxPath|spawn\\(" server/server/internal/services/services/nginx.ts server/server/internal/services/services -g '!**/node_modules/**'Repository: BillyOutlast/drop
Length of output: 2126
Validate executable candidates before returning a path
fs.existsSync() will accept directories and non-executable files, so a bad entry can be chosen and make spawn() fail. Also, the "nginx" fallback reintroduces PATH-based lookup, which weakens the trusted-path guarantee.
🧰 Tools
🪛 ast-grep (0.44.1)
[warning] Importing child_process exposes a command-execution surface; ensure any command/argument built from input is validated, and prefer execFile/spawn with an argument array over exec.
Context: import { spawn } from "node:child_process";
Note: [CWE-78] Improper Neutralization of Special Elements used in an OS Command ('OS Command Injection').
(detect-child-process-typescript)
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@server/server/internal/services/services/nginx.ts` around lines 8 - 15,
Update the executable discovery logic around knownPaths to validate each
candidate is a regular, executable file before returning it, rather than relying
only on fs.existsSync(). Remove the "nginx" fallback so the function returns
only a validated trusted path and otherwise indicates no usable executable was
found.
| const cargoPaths = ["/usr/local/bin/cargo", "/usr/bin/cargo"]; | ||
| const cargoPath = | ||
| cargoPaths.find((p) => fs.existsSync(p)) ?? "cargo"; |
There was a problem hiding this comment.
🩺 Stability & Availability | 🟡 Minor | ⚡ Quick win
Check executability before selecting a candidate path.
fs.existsSync also accepts directories and non-executable files. In the cargo branch, the first invalid existing path can shadow a valid fallback, causing service startup failure. Use fs.accessSync(path, fs.constants.X_OK) (and preferably verify it is a file) before selecting either executable.
Also applies to: 98-104
🧰 Tools
🪛 ast-grep (0.44.1)
[warning] Importing child_process exposes a command-execution surface; ensure any command/argument built from input is validated, and prefer execFile/spawn with an argument array over exec.
Context: import { spawn } from "node:child_process";
Note: [CWE-78] Improper Neutralization of Special Elements used in an OS Command ('OS Command Injection').
(detect-child-process-typescript)
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@server/server/internal/services/torrential/index.ts` around lines 61 - 63,
Update the cargo path selection in the cargo branch to choose only an executable
cargo file: replace the existsSync-only check with fs.accessSync using
fs.constants.X_OK, preferably confirming the candidate is a regular file before
selecting it. Preserve the "cargo" fallback when neither configured path is
valid, and apply the same validation to the additional cargo path selection
noted in the comment.
SonarCloud AnalysisSummary
Total: 53 issues Top Issues
TrackingNo existing GitHub issues found for these findings. Run Full analysis: SonarCloud Dashboard 📋 JSON Summary (for AI agents){
"project": "BillyOutlast_drop",
"pullRequest": 108,
"qualityGate": {
"gateStatus": "ERROR",
"failedConditions": [
{
"metric": "new_coverage",
"actual": "0.0",
"threshold": "80"
}
]
},
"filesNeedingCoverage": [
{
"file": "server/server/internal/config/application-configuration.ts",
"coverage": "0.0",
"uncovered": "0"
},
{
"file": "server/server/internal/auth/base32/index.js",
"coverage": "0.0",
"uncovered": "0"
},
{
"file": "server/server/internal/services/torrential/index.ts",
"coverage": "0.0",
"uncovered": "0"
},
{
"file": "server/server/internal/library/index.ts",
"coverage": "0.0",
"uncovered": "0"
},
{
"file": "server/server/internal/library/manifest/index.ts",
"coverage": "0.0",
"uncovered": "0"
},
{
"file": "server/pages/admin/users/auth/simple/index.vue",
"coverage": "0.0",
"uncovered": "0"
},
{
"file": "server/pages/store/[id]/index.vue",
"coverage": "0.0",
"uncovered": "0"
},
{
"file": "server/server/internal/services/services/nginx.ts",
"coverage": "0.0",
"uncovered": "0"
}
],
"totalIssues": 53,
"summary": {
"blocker": 0,
"critical": 11,
"major": 42
},
"issues": [
{
"key": "AZ-hG_6o_7iyvaG2TeIu",
"rule": "typescript:S3776",
"severity": "CRITICAL",
"message": "Refactor this function to reduce its Cognitive Complexity from 16 to the 15 allowed.",
"component": "server/server/internal/session/filter.ts",
"line": 10,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-hG_6o_7iyvaG2TeIu&open=AZ-hG_6o_7iyvaG2TeIu"
},
{
"key": "AZ-hHArD_7iyvaG2TeIw",
"rule": "typescript:S6851",
"severity": "MAJOR",
"message": "Redundant alt attribute. Screen-readers already announce `img` tags as an image. You don’t need to use the words `image`, `photo,` or `picture` (or any specified custom words) in the alt prop.",
"component": "sites/promo/src/components/gallery-modal.tsx",
"line": 135,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-hHArD_7iyvaG2TeIw&open=AZ-hHArD_7iyvaG2TeIw"
},
{
"key": "AZ-gksvtpI4t_4jmejj6",
"rule": "shelldre:S131",
"severity": "CRITICAL",
"message": "Add a default case (*) to handle unexpected values.",
"component": "scripts/sonarcloud-sync.sh",
"line": 306,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-gksvtpI4t_4jmejj6&open=AZ-gksvtpI4t_4jmejj6"
},
{
"key": "AZ-gA2474r4tYZa_Yi7e",
"rule": "typescript:S2004",
"severity": "CRITICAL",
"message": "Refactor this code to not nest functions more than 4 levels deep.",
"component": "sites/promo/src/components/comparison.tsx",
"line": 450,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-gA2474r4tYZa_Yi7e&open=AZ-gA2474r4tYZa_Yi7e"
},
{
"key": "AZ-c83VBnUgmSfWQkp2r",
"rule": "typescript:S8987",
"severity": "MAJOR",
"message": "Move this `v-if` to a parent element.",
"component": "desktop/main/components/GameOptions/ProtonSelector.vue",
"line": 73,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-c83VBnUgmSfWQkp2r&open=AZ-c83VBnUgmSfWQkp2r"
},
{
"key": "AZ-c83VBnUgmSfWQkp2s",
"rule": "typescript:S8987",
"severity": "MAJOR",
"message": "Move this `v-if` to a parent element.",
"component": "desktop/main/components/GameOptions/ProtonSelector.vue",
"line": 112,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-c83VBnUgmSfWQkp2s&open=AZ-c83VBnUgmSfWQkp2s"
},
{
"key": "AZ-YTBgzecfn39edgquG",
"rule": "typescript:S8786",
"severity": "MAJOR",
"message": "Simplify this regular expression to reduce its runtime, as it has super-linear performance due to backtracking.",
"component": "server/server/internal/metadata/steam.ts",
"line": 649,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-YTBgzecfn39edgquG&open=AZ-YTBgzecfn39edgquG"
},
{
"key": "AZ-YTCWiecfn39edgquP",
"rule": "typescript:S6772",
"severity": "MAJOR",
"message": "Ambiguous spacing after previous element img",
"component": "sites/promo/src/components/comparison.tsx",
"line": 54,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-YTCWiecfn39edgquP&open=AZ-YTCWiecfn39edgquP"
},
{
"key": "AZ-WZn8wL3IEMbakOkCg",
"rule": "githubactions:S6505",
"severity": "MAJOR",
"message": "Omitting \"--ignore-scripts\" allows lifecycle scripts to run during package installation.",
"component": ".github/workflows/e2e.yml",
"line": 64,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-WZn8wL3IEMbakOkCg&open=AZ-WZn8wL3IEMbakOkCg"
},
{
"key": "AZ-dRYQYZiQzo-vEe6fH",
"rule": "rust:S3776",
"severity": "CRITICAL",
"message": "Refactor this function to reduce its Cognitive Complexity from 29 to the 15 allowed.",
"component": "desktop/src-tauri/src/lib.rs",
"line": 205,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-dRYQYZiQzo-vEe6fH&open=AZ-dRYQYZiQzo-vEe6fH"
},
{
"key": "AZ-V531cdRHfOsokVAlP",
"rule": "docker:S8549",
"severity": "MAJOR",
"message": "Using dependencies without locking resolved versions is security-sensitive.",
"component": "Dockerfile",
"line": 37,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V531cdRHfOsokVAlP&open=AZ-V531cdRHfOsokVAlP"
},
{
"key": "AZ-dRYE2ZiQzo-vEe6fE",
"rule": "rust:S3776",
"severity": "CRITICAL",
"message": "Refactor this function to reduce its Cognitive Complexity from 24 to the 15 allowed.",
"component": "libraries/droplet/src/manifest.rs",
"line": 82,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-dRYE2ZiQzo-vEe6fE&open=AZ-dRYE2ZiQzo-vEe6fE"
},
{
"key": "AZ-V530UdRHfOsokVAk8",
"rule": "text:S8570",
"severity": "MAJOR",
"message": "Dependency versions are not predictable if the lock file (Cargo.lock) is missing.",
"component": "libraries/libarchive/Cargo.toml",
"line": null,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V530UdRHfOsokVAk8&open=AZ-V530UdRHfOsokVAk8"
},
{
"key": "AZ-dRYOlZiQzo-vEe6fF",
"rule": "rust:S3776",
"severity": "CRITICAL",
"message": "Refactor this function to reduce its Cognitive Complexity from 38 to the 15 allowed.",
"component": "desktop/src-tauri/games/src/downloads/download_agent.rs",
"line": 276,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-dRYOlZiQzo-vEe6fF&open=AZ-dRYOlZiQzo-vEe6fF"
},
{
"key": "AZ-dRYOzZiQzo-vEe6fG",
"rule": "rust:S3776",
"severity": "CRITICAL",
"message": "Refactor this function to reduce its Cognitive Complexity from 22 to the 15 allowed.",
"component": "desktop/src-tauri/games/src/downloads/download_logic.rs",
"line": 32,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-dRYOzZiQzo-vEe6fG&open=AZ-dRYOzZiQzo-vEe6fG"
},
{
"key": "AZ-dRYTRZiQzo-vEe6fJ",
"rule": "rust:S3776",
"severity": "CRITICAL",
"message": "Refactor this function to reduce its Cognitive Complexity from 20 to the 15 allowed.",
"component": "desktop/src-tauri/remote/src/utils.rs",
"line": 41,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-dRYTRZiQzo-vEe6fJ&open=AZ-dRYTRZiQzo-vEe6fJ"
},
{
"key": "AZ-dRYRpZiQzo-vEe6fI",
"rule": "rust:S3776",
"severity": "CRITICAL",
"message": "Refactor this function to reduce its Cognitive Complexity from 21 to the 15 allowed.",
"component": "desktop/src-tauri/download_manager/src/download_manager_builder.rs",
"line": 227,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-dRYRpZiQzo-vEe6fI&open=AZ-dRYRpZiQzo-vEe6fI"
},
{
"key": "AZ-V53JddRHfOsokVAeS",
"rule": "typescript:S4782",
"severity": "MAJOR",
"message": "Consider removing 'undefined' type or '?' specifier, one of them is redundant.",
"component": "server/server/api/v1/client/game/[id]/versions.get.ts",
"line": 11,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53JddRHfOsokVAeS&open=AZ-V53JddRHfOsokVAeS"
},
{
"key": "AZ-V53JddRHfOsokVAeT",
"rule": "typescript:S4782",
"severity": "MAJOR",
"message": "Consider removing 'undefined' type or '?' specifier, one of them is redundant.",
"component": "server/server/api/v1/client/game/[id]/versions.get.ts",
"line": 12,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53JddRHfOsokVAeT&open=AZ-V53JddRHfOsokVAeT"
},
{
"key": "AZ-V525XdRHfOsokVAbG",
"rule": "typescript:S6564",
"severity": "MAJOR",
"message": "Remove this redundant type alias and replace its occurrences with \"V2Manifest\".",
"component": "server/server/internal/library/manifest/utils.ts",
"line": 3,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V525XdRHfOsokVAbG&open=AZ-V525XdRHfOsokVAbG"
},
{
"key": "AZ-hHASC_7iyvaG2TeIv",
"rule": "Web:S6851",
"severity": "MAJOR",
"message": "Remove redundant word \"picture\" from the \"alt\" attribute of your \"img\" tag.",
"component": "server/pages/user/[id]/index.vue",
"line": 4,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-hHASC_7iyvaG2TeIv&open=AZ-hHASC_7iyvaG2TeIv"
},
{
"key": "AZ-V53uedRHfOsokVAkr",
"rule": "text:S8570",
"severity": "MAJOR",
"message": "Dependency versions are not predictable if the lock file (Cargo.lock) is missing.",
"component": "libraries/native_model/Cargo.toml",
"line": null,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53uedRHfOsokVAkr&open=AZ-V53uedRHfOsokVAkr"
},
{
"key": "AZ-dRYTRZiQzo-vEe6fK",
"rule": "rust:S3776",
"severity": "CRITICAL",
"message": "Refactor this function to reduce its Cognitive Complexity from 19 to the 15 allowed.",
"component": "desktop/src-tauri/remote/src/utils.rs",
"line": 96,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-dRYTRZiQzo-vEe6fK&open=AZ-dRYTRZiQzo-vEe6fK"
},
{
"key": "AZ-V52-SdRHfOsokVAcM",
"rule": "typescript:S8786",
"severity": "MAJOR",
"message": "Simplify this regular expression to reduce its runtime, as it has super-linear performance due to backtracking.",
"component": "server/server/internal/metadata/steam.ts",
"line": 921,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V52-SdRHfOsokVAcM&open=AZ-V52-SdRHfOsokVAcM"
},
{
"key": "AZ-V52-SdRHfOsokVAcO",
"rule": "typescript:S8786",
"severity": "MAJOR",
"message": "Simplify this regular expression to reduce its runtime, as it has super-linear performance due to backtracking.",
"component": "server/server/internal/metadata/steam.ts",
"line": 1013,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V52-SdRHfOsokVAcO&open=AZ-V52-SdRHfOsokVAcO"
},
{
"key": "AZ-V52-SdRHfOsokVAcP",
"rule": "typescript:S8786",
"severity": "MAJOR",
"message": "Simplify this regular expression to reduce its runtime, as it has super-linear performance due to backtracking.",
"component": "server/server/internal/metadata/steam.ts",
"line": 1016,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V52-SdRHfOsokVAcP&open=AZ-V52-SdRHfOsokVAcP"
},
{
"key": "AZ-V52-SdRHfOsokVAcS",
"rule": "typescript:S8786",
"severity": "MAJOR",
"message": "Simplify this regular expression to reduce its runtime, as it has super-linear performance due to backtracking.",
"component": "server/server/internal/metadata/steam.ts",
"line": 1110,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V52-SdRHfOsokVAcS&open=AZ-V52-SdRHfOsokVAcS"
},
{
"key": "AZ-V53sndRHfOsokVAkD",
"rule": "typescript:S6772",
"severity": "MAJOR",
"message": "Ambiguous spacing after previous element span",
"component": "sites/promo/src/components/comparison.tsx",
"line": 259,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53sndRHfOsokVAkD&open=AZ-V53sndRHfOsokVAkD"
},
{
"key": "AZ-V53sndRHfOsokVAkG",
"rule": "typescript:S6479",
"severity": "MAJOR",
"message": "Do not use Array index in keys",
"component": "sites/promo/src/components/comparison.tsx",
"line": 310,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53sndRHfOsokVAkG&open=AZ-V53sndRHfOsokVAkG"
},
{
"key": "AZ-V53sndRHfOsokVAkI",
"rule": "typescript:S7721",
"severity": "MAJOR",
"message": "Move function 'onlyUnique' to the outer scope.",
"component": "sites/promo/src/components/comparison.tsx",
"line": 330,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53sndRHfOsokVAkI&open=AZ-V53sndRHfOsokVAkI"
},
{
"key": "AZ-V53radRHfOsokVAju",
"rule": "typescript:S2137",
"severity": "MAJOR",
"message": "Do not use \"Map\" to declare a function - use another name.",
"component": "sites/promo/src/components/map.tsx",
"line": 53,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53radRHfOsokVAju&open=AZ-V53radRHfOsokVAju"
},
{
"key": "AZ-V53qadRHfOsokVAja",
"rule": "typescript:S1763",
"severity": "MAJOR",
"message": "Unreachable code.",
"component": "sites/promo/src/components/sponsors.tsx",
"line": 101,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53qadRHfOsokVAja&open=AZ-V53qadRHfOsokVAja"
},
{
"key": "AZ-V53qadRHfOsokVAjc",
"rule": "typescript:S6479",
"severity": "MAJOR",
"message": "Do not use Array index in keys",
"component": "sites/promo/src/components/sponsors.tsx",
"line": 245,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53qadRHfOsokVAjc&open=AZ-V53qadRHfOsokVAjc"
},
{
"key": "AZ-V53qadRHfOsokVAje",
"rule": "typescript:S6479",
"severity": "MAJOR",
"message": "Do not use Array index in keys",
"component": "sites/promo/src/components/sponsors.tsx",
"line": 262,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53qadRHfOsokVAje&open=AZ-V53qadRHfOsokVAje"
},
{
"key": "AZ-V53wAdRHfOsokVAks",
"rule": "text:S8570",
"severity": "MAJOR",
"message": "Dependency versions are not predictable if the lock file (Cargo.lock) is missing.",
"component": "libraries/native_model/native_model_macro/Cargo.toml",
"line": null,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53wAdRHfOsokVAks&open=AZ-V53wAdRHfOsokVAks"
},
{
"key": "AZ-V53pudRHfOsokVAjP",
"rule": "shell:S6506",
"severity": "MAJOR",
"message": "Not disabling redirects might allow for redirections to insecure websites. Make sure it is safe here.",
"component": "desktop/optimize-appimage.sh",
"line": 17,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53pudRHfOsokVAjP&open=AZ-V53pudRHfOsokVAjP"
},
{
"key": "AZ-V53TVdRHfOsokVAfi",
"rule": "typescript:S3358",
"severity": "MAJOR",
"message": "Extract this nested ternary operation into an independent statement.",
"component": "server/components/StoreView.vue",
"line": 465,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53TVdRHfOsokVAfi&open=AZ-V53TVdRHfOsokVAfi"
},
{
"key": "AZ-V53zOdRHfOsokVAk7",
"rule": "text:S8570",
"severity": "MAJOR",
"message": "Dependency versions are not predictable if the lock file (Cargo.lock) is missing.",
"component": "libraries/native_model/tests_crate/Cargo.toml",
"line": null,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53zOdRHfOsokVAk7&open=AZ-V53zOdRHfOsokVAk7"
},
{
"key": "AZ-V53MYdRHfOsokVAes",
"rule": "typescript:S4624",
"severity": "MAJOR",
"message": "Refactor this code to not use nested template literals.",
"component": "server/server/routes/auth/oidc.get.ts",
"line": 18,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53MYdRHfOsokVAes&open=AZ-V53MYdRHfOsokVAes"
},
{
"key": "AZ-V528odRHfOsokVAbs",
"rule": "typescript:S1751",
"severity": "MAJOR",
"message": "Invalid loop. Its body allows only one iteration.",
"component": "server/server/internal/metadata/igdb.ts",
"line": 654,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V528odRHfOsokVAbs&open=AZ-V528odRHfOsokVAbs"
},
{
"key": "AZ-V5298dRHfOsokVAby",
"rule": "typescript:S6035",
"severity": "MAJOR",
"message": "Replace this alternation with a character class.",
"component": "server/server/internal/metadata/pcgamingwiki.ts",
"line": 340,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V5298dRHfOsokVAby&open=AZ-V5298dRHfOsokVAby"
},
{
"key": "AZ-V53l8dRHfOsokVAi6",
"rule": "typescript:S7785",
"severity": "MAJOR",
"message": "Prefer top-level await over using a promise chain.",
"component": "desktop/main/pages/settings/index.vue",
"line": 45,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53l8dRHfOsokVAi6&open=AZ-V53l8dRHfOsokVAi6"
},
{
"key": "AZ-V53FhdRHfOsokVAdj",
"rule": "typescript:S4043",
"severity": "MAJOR",
"message": "Move this array \"sort\" operation to a separate statement or replace it with \"toSorted\".",
"component": "server/server/internal/utils/prioritylist.ts",
"line": 32,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53FhdRHfOsokVAdj&open=AZ-V53FhdRHfOsokVAdj"
},
{
"key": "AZ-V53AVdRHfOsokVAcb",
"rule": "typescript:S6564",
"severity": "MAJOR",
"message": "Remove this redundant type alias and replace its occurrences with \"string\".",
"component": "server/server/internal/objects/objectHandler.ts",
"line": 24,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53AVdRHfOsokVAcb&open=AZ-V53AVdRHfOsokVAcb"
},
{
"key": "AZ-V53aQdRHfOsokVAhI",
"rule": "typescript:S8786",
"severity": "MAJOR",
"message": "Simplify this regular expression to reduce its runtime, as it has super-linear performance due to backtracking.",
"component": "server/pages/admin/users/auth/simple/index.vue",
"line": 452,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53aQdRHfOsokVAhI&open=AZ-V53aQdRHfOsokVAhI"
},
{
"key": "AZ-V53c5dRHfOsokVAhe",
"rule": "Web:S5256",
"severity": "MAJOR",
"message": "Add \"<th>\" headers to this \"<table>\".",
"component": "server/pages/store/[id]/index.vue",
"line": 54,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53c5dRHfOsokVAhe&open=AZ-V53c5dRHfOsokVAhe"
},
{
"key": "AZ-V53pcdRHfOsokVAjN",
"rule": "typescript:S4043",
"severity": "MAJOR",
"message": "Move this array \"sort\" operation to a separate statement or replace it with \"toSorted\".",
"component": "desktop/main/composables/current-page-engine.ts",
"line": 16,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53pcdRHfOsokVAjN&open=AZ-V53pcdRHfOsokVAjN"
},
{
"key": "AZ-V525hdRHfOsokVAbO",
"rule": "typescript:S4043",
"severity": "MAJOR",
"message": "Move this array \"sort\" operation to a separate statement or replace it with \"toSorted\".",
"component": "server/server/internal/library/index.ts",
"line": 381,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V525hdRHfOsokVAbO&open=AZ-V525hdRHfOsokVAbO"
},
{
"key": "AZ-V52-GdRHfOsokVAb8",
"rule": "typescript:S6661",
"severity": "MAJOR",
"message": "Use an object spread instead of `Object.assign` eg: `{ ...foo }`.",
"component": "server/server/internal/metadata/index.ts",
"line": 94,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V52-GdRHfOsokVAb8&open=AZ-V52-GdRHfOsokVAb8"
},
{
"key": "AZ-V53dudRHfOsokVAhq",
"rule": "typescript:S4043",
"severity": "MAJOR",
"message": "Move this array \"sort\" operation to a separate statement or replace it with \"toSorted\".",
"component": "server/composables/current-page-engine.ts",
"line": 15,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53dudRHfOsokVAhq&open=AZ-V53dudRHfOsokVAhq"
},
{
"key": "AZ-V53o3dRHfOsokVAjG",
"rule": "typescript:S1854",
"severity": "MAJOR",
"message": "Remove this useless assignment to variable \"result\".",
"component": "desktop/main/pages/setup/server.vue",
"line": 97,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53o3dRHfOsokVAjG&open=AZ-V53o3dRHfOsokVAjG"
},
{
"key": "AZ-V53GJdRHfOsokVAdx",
"rule": "typescript:S2137",
"severity": "MAJOR",
"message": "Do not use \"globalThis\" to declare a variable - use another name.",
"component": "server/server/internal/db/database.ts",
"line": 10,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53GJdRHfOsokVAdx&open=AZ-V53GJdRHfOsokVAdx"
},
{
"key": "AZ-dRYBBZiQzo-vEe6fD",
"rule": "rust:S3776",
"severity": "CRITICAL",
"message": "Refactor this function to reduce its Cognitive Complexity from 21 to the 15 allowed.",
"component": "libraries/libarchive/src/writer.rs",
"line": 105,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-dRYBBZiQzo-vEe6fD&open=AZ-dRYBBZiQzo-vEe6fD"
}
]
} |
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@server/test/unit/library/manifest-utils.test.ts`:
- Around line 1-39: Format the castManifest tests with Prettier, including
import spacing, line wrapping, indentation, and trailing punctuation as required
by the project configuration. Run Prettier on the test file and commit the
resulting formatted output without changing test behavior.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro Plus
Run ID: a2cf5476-9e85-4b24-ada1-12154b59e1b6
📒 Files selected for processing (1)
server/test/unit/library/manifest-utils.test.ts
S6564 - single-use type alias. Replaced with raw string across objectHandler.ts and fsBackend.ts.
comparison.tsx: move onlyUnique to module scope, collapse , wrap GameVault+ text in <span> for explicit spacing. StoreView.vue: extract nested ternary, use intermediate variable. ProtonSelector.vue: move v-if from ListboxOption to <template> wrapper.
Async <script setup> allows await directly. Replaces chained .then() with cleaner top-level await pattern.
igdb.ts: replace for-of loop over IGDB response with direct array access + early return guard for single-result query. oidc.get.ts: extract nested template literal into intermediate variable to satisfy JSX no-inline-template rule.
Removed | undefined from displayName/versionPath optional fields. Changed construction from || undefined to conditional property assignment for exactOptionalPropertyTypes compliance.
Map is a JS built-in. Rename to WorldMap to prevent S1533 no-built-in-override rule violations.
Function had unreachable <div> content after bare return <div />. Replaced with proper CTA linking to Open Collective.
gallery-modal.tsx: change redundant alt="Gallery image" to alt="" (decorative). user/[id]/index.vue: change dynamic alt to empty (name visible in adjacent h1). store/[id]/index.vue: change label td elements to th scope="row" for proper table semantics.
CRITICAL cognitive complexity (10 functions): - filter.ts (16→15), comparison.tsx, sonarcloud-sync.sh - lib.rs (29→15), manifest.rs (24→15), download_agent.rs (38→15) - download_logic.rs (22→15), utils.rs (20→15, 19→15) - download_manager_builder.rs (21→15) MAJOR ReDoS regex (7 patterns): - steam.ts (5 regexes simplified), pcgamingwiki.ts, simple/index.vue MAJOR TypeScript/Vue misc (16 fixes): - Redundant types, single-iteration loop, template literal fixes - v-if→parent, nested ternary, dead code removal, naming fixes - a11y: alt text, th headers MAJOR Infrastructure (4 fixes): - e2e.yml --ignore-scripts, Dockerfile pinned version - Cargo.lock files (libarchive, native_model, tests_crate) - optimize-appimage.sh disable redirects Tests: +4 (manifest-utils coverage), 180 total
SonarCloud AnalysisSummary
Total: 53 issues Top Issues
TrackingNo existing GitHub issues found for these findings. Run Full analysis: SonarCloud Dashboard 📋 JSON Summary (for AI agents){
"project": "BillyOutlast_drop",
"pullRequest": 108,
"qualityGate": {
"gateStatus": "ERROR",
"failedConditions": [
{
"metric": "new_coverage",
"actual": "0.0",
"threshold": "80"
}
]
},
"filesNeedingCoverage": [
{
"file": "server/server/internal/config/application-configuration.ts",
"coverage": "0.0",
"uncovered": "0"
},
{
"file": "sites/promo/src/components/comparison.tsx",
"coverage": "0.0",
"uncovered": "0"
},
{
"file": "server/server/internal/session/filter.ts",
"coverage": "0.0",
"uncovered": "0"
},
{
"file": "server/server/internal/metadata/igdb.ts",
"coverage": "0.0",
"uncovered": "0"
}
],
"totalIssues": 53,
"summary": {
"blocker": 0,
"critical": 11,
"major": 42
},
"issues": [
{
"key": "AZ-hG_6o_7iyvaG2TeIu",
"rule": "typescript:S3776",
"severity": "CRITICAL",
"message": "Refactor this function to reduce its Cognitive Complexity from 16 to the 15 allowed.",
"component": "server/server/internal/session/filter.ts",
"line": 10,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-hG_6o_7iyvaG2TeIu&open=AZ-hG_6o_7iyvaG2TeIu"
},
{
"key": "AZ-hHArD_7iyvaG2TeIw",
"rule": "typescript:S6851",
"severity": "MAJOR",
"message": "Redundant alt attribute. Screen-readers already announce `img` tags as an image. You don’t need to use the words `image`, `photo,` or `picture` (or any specified custom words) in the alt prop.",
"component": "sites/promo/src/components/gallery-modal.tsx",
"line": 135,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-hHArD_7iyvaG2TeIw&open=AZ-hHArD_7iyvaG2TeIw"
},
{
"key": "AZ-gksvtpI4t_4jmejj6",
"rule": "shelldre:S131",
"severity": "CRITICAL",
"message": "Add a default case (*) to handle unexpected values.",
"component": "scripts/sonarcloud-sync.sh",
"line": 306,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-gksvtpI4t_4jmejj6&open=AZ-gksvtpI4t_4jmejj6"
},
{
"key": "AZ-gA2474r4tYZa_Yi7e",
"rule": "typescript:S2004",
"severity": "CRITICAL",
"message": "Refactor this code to not nest functions more than 4 levels deep.",
"component": "sites/promo/src/components/comparison.tsx",
"line": 450,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-gA2474r4tYZa_Yi7e&open=AZ-gA2474r4tYZa_Yi7e"
},
{
"key": "AZ-c83VBnUgmSfWQkp2r",
"rule": "typescript:S8987",
"severity": "MAJOR",
"message": "Move this `v-if` to a parent element.",
"component": "desktop/main/components/GameOptions/ProtonSelector.vue",
"line": 73,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-c83VBnUgmSfWQkp2r&open=AZ-c83VBnUgmSfWQkp2r"
},
{
"key": "AZ-c83VBnUgmSfWQkp2s",
"rule": "typescript:S8987",
"severity": "MAJOR",
"message": "Move this `v-if` to a parent element.",
"component": "desktop/main/components/GameOptions/ProtonSelector.vue",
"line": 112,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-c83VBnUgmSfWQkp2s&open=AZ-c83VBnUgmSfWQkp2s"
},
{
"key": "AZ-YTBgzecfn39edgquG",
"rule": "typescript:S8786",
"severity": "MAJOR",
"message": "Simplify this regular expression to reduce its runtime, as it has super-linear performance due to backtracking.",
"component": "server/server/internal/metadata/steam.ts",
"line": 649,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-YTBgzecfn39edgquG&open=AZ-YTBgzecfn39edgquG"
},
{
"key": "AZ-YTCWiecfn39edgquP",
"rule": "typescript:S6772",
"severity": "MAJOR",
"message": "Ambiguous spacing after previous element img",
"component": "sites/promo/src/components/comparison.tsx",
"line": 54,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-YTCWiecfn39edgquP&open=AZ-YTCWiecfn39edgquP"
},
{
"key": "AZ-WZn8wL3IEMbakOkCg",
"rule": "githubactions:S6505",
"severity": "MAJOR",
"message": "Omitting \"--ignore-scripts\" allows lifecycle scripts to run during package installation.",
"component": ".github/workflows/e2e.yml",
"line": 64,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-WZn8wL3IEMbakOkCg&open=AZ-WZn8wL3IEMbakOkCg"
},
{
"key": "AZ-dRYQYZiQzo-vEe6fH",
"rule": "rust:S3776",
"severity": "CRITICAL",
"message": "Refactor this function to reduce its Cognitive Complexity from 29 to the 15 allowed.",
"component": "desktop/src-tauri/src/lib.rs",
"line": 205,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-dRYQYZiQzo-vEe6fH&open=AZ-dRYQYZiQzo-vEe6fH"
},
{
"key": "AZ-V531cdRHfOsokVAlP",
"rule": "docker:S8549",
"severity": "MAJOR",
"message": "Using dependencies without locking resolved versions is security-sensitive.",
"component": "Dockerfile",
"line": 37,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V531cdRHfOsokVAlP&open=AZ-V531cdRHfOsokVAlP"
},
{
"key": "AZ-dRYE2ZiQzo-vEe6fE",
"rule": "rust:S3776",
"severity": "CRITICAL",
"message": "Refactor this function to reduce its Cognitive Complexity from 24 to the 15 allowed.",
"component": "libraries/droplet/src/manifest.rs",
"line": 82,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-dRYE2ZiQzo-vEe6fE&open=AZ-dRYE2ZiQzo-vEe6fE"
},
{
"key": "AZ-V530UdRHfOsokVAk8",
"rule": "text:S8570",
"severity": "MAJOR",
"message": "Dependency versions are not predictable if the lock file (Cargo.lock) is missing.",
"component": "libraries/libarchive/Cargo.toml",
"line": null,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V530UdRHfOsokVAk8&open=AZ-V530UdRHfOsokVAk8"
},
{
"key": "AZ-dRYOlZiQzo-vEe6fF",
"rule": "rust:S3776",
"severity": "CRITICAL",
"message": "Refactor this function to reduce its Cognitive Complexity from 38 to the 15 allowed.",
"component": "desktop/src-tauri/games/src/downloads/download_agent.rs",
"line": 276,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-dRYOlZiQzo-vEe6fF&open=AZ-dRYOlZiQzo-vEe6fF"
},
{
"key": "AZ-dRYOzZiQzo-vEe6fG",
"rule": "rust:S3776",
"severity": "CRITICAL",
"message": "Refactor this function to reduce its Cognitive Complexity from 22 to the 15 allowed.",
"component": "desktop/src-tauri/games/src/downloads/download_logic.rs",
"line": 32,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-dRYOzZiQzo-vEe6fG&open=AZ-dRYOzZiQzo-vEe6fG"
},
{
"key": "AZ-dRYTRZiQzo-vEe6fJ",
"rule": "rust:S3776",
"severity": "CRITICAL",
"message": "Refactor this function to reduce its Cognitive Complexity from 20 to the 15 allowed.",
"component": "desktop/src-tauri/remote/src/utils.rs",
"line": 41,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-dRYTRZiQzo-vEe6fJ&open=AZ-dRYTRZiQzo-vEe6fJ"
},
{
"key": "AZ-dRYRpZiQzo-vEe6fI",
"rule": "rust:S3776",
"severity": "CRITICAL",
"message": "Refactor this function to reduce its Cognitive Complexity from 21 to the 15 allowed.",
"component": "desktop/src-tauri/download_manager/src/download_manager_builder.rs",
"line": 227,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-dRYRpZiQzo-vEe6fI&open=AZ-dRYRpZiQzo-vEe6fI"
},
{
"key": "AZ-V53JddRHfOsokVAeS",
"rule": "typescript:S4782",
"severity": "MAJOR",
"message": "Consider removing 'undefined' type or '?' specifier, one of them is redundant.",
"component": "server/server/api/v1/client/game/[id]/versions.get.ts",
"line": 11,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53JddRHfOsokVAeS&open=AZ-V53JddRHfOsokVAeS"
},
{
"key": "AZ-V53JddRHfOsokVAeT",
"rule": "typescript:S4782",
"severity": "MAJOR",
"message": "Consider removing 'undefined' type or '?' specifier, one of them is redundant.",
"component": "server/server/api/v1/client/game/[id]/versions.get.ts",
"line": 12,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53JddRHfOsokVAeT&open=AZ-V53JddRHfOsokVAeT"
},
{
"key": "AZ-V525XdRHfOsokVAbG",
"rule": "typescript:S6564",
"severity": "MAJOR",
"message": "Remove this redundant type alias and replace its occurrences with \"V2Manifest\".",
"component": "server/server/internal/library/manifest/utils.ts",
"line": 3,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V525XdRHfOsokVAbG&open=AZ-V525XdRHfOsokVAbG"
},
{
"key": "AZ-hHASC_7iyvaG2TeIv",
"rule": "Web:S6851",
"severity": "MAJOR",
"message": "Remove redundant word \"picture\" from the \"alt\" attribute of your \"img\" tag.",
"component": "server/pages/user/[id]/index.vue",
"line": 4,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-hHASC_7iyvaG2TeIv&open=AZ-hHASC_7iyvaG2TeIv"
},
{
"key": "AZ-V53uedRHfOsokVAkr",
"rule": "text:S8570",
"severity": "MAJOR",
"message": "Dependency versions are not predictable if the lock file (Cargo.lock) is missing.",
"component": "libraries/native_model/Cargo.toml",
"line": null,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53uedRHfOsokVAkr&open=AZ-V53uedRHfOsokVAkr"
},
{
"key": "AZ-dRYTRZiQzo-vEe6fK",
"rule": "rust:S3776",
"severity": "CRITICAL",
"message": "Refactor this function to reduce its Cognitive Complexity from 19 to the 15 allowed.",
"component": "desktop/src-tauri/remote/src/utils.rs",
"line": 96,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-dRYTRZiQzo-vEe6fK&open=AZ-dRYTRZiQzo-vEe6fK"
},
{
"key": "AZ-V52-SdRHfOsokVAcM",
"rule": "typescript:S8786",
"severity": "MAJOR",
"message": "Simplify this regular expression to reduce its runtime, as it has super-linear performance due to backtracking.",
"component": "server/server/internal/metadata/steam.ts",
"line": 921,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V52-SdRHfOsokVAcM&open=AZ-V52-SdRHfOsokVAcM"
},
{
"key": "AZ-V52-SdRHfOsokVAcO",
"rule": "typescript:S8786",
"severity": "MAJOR",
"message": "Simplify this regular expression to reduce its runtime, as it has super-linear performance due to backtracking.",
"component": "server/server/internal/metadata/steam.ts",
"line": 1013,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V52-SdRHfOsokVAcO&open=AZ-V52-SdRHfOsokVAcO"
},
{
"key": "AZ-V52-SdRHfOsokVAcP",
"rule": "typescript:S8786",
"severity": "MAJOR",
"message": "Simplify this regular expression to reduce its runtime, as it has super-linear performance due to backtracking.",
"component": "server/server/internal/metadata/steam.ts",
"line": 1016,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V52-SdRHfOsokVAcP&open=AZ-V52-SdRHfOsokVAcP"
},
{
"key": "AZ-V52-SdRHfOsokVAcS",
"rule": "typescript:S8786",
"severity": "MAJOR",
"message": "Simplify this regular expression to reduce its runtime, as it has super-linear performance due to backtracking.",
"component": "server/server/internal/metadata/steam.ts",
"line": 1110,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V52-SdRHfOsokVAcS&open=AZ-V52-SdRHfOsokVAcS"
},
{
"key": "AZ-V53sndRHfOsokVAkD",
"rule": "typescript:S6772",
"severity": "MAJOR",
"message": "Ambiguous spacing after previous element span",
"component": "sites/promo/src/components/comparison.tsx",
"line": 259,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53sndRHfOsokVAkD&open=AZ-V53sndRHfOsokVAkD"
},
{
"key": "AZ-V53sndRHfOsokVAkG",
"rule": "typescript:S6479",
"severity": "MAJOR",
"message": "Do not use Array index in keys",
"component": "sites/promo/src/components/comparison.tsx",
"line": 310,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53sndRHfOsokVAkG&open=AZ-V53sndRHfOsokVAkG"
},
{
"key": "AZ-V53sndRHfOsokVAkI",
"rule": "typescript:S7721",
"severity": "MAJOR",
"message": "Move function 'onlyUnique' to the outer scope.",
"component": "sites/promo/src/components/comparison.tsx",
"line": 330,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53sndRHfOsokVAkI&open=AZ-V53sndRHfOsokVAkI"
},
{
"key": "AZ-V53radRHfOsokVAju",
"rule": "typescript:S2137",
"severity": "MAJOR",
"message": "Do not use \"Map\" to declare a function - use another name.",
"component": "sites/promo/src/components/map.tsx",
"line": 53,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53radRHfOsokVAju&open=AZ-V53radRHfOsokVAju"
},
{
"key": "AZ-V53qadRHfOsokVAja",
"rule": "typescript:S1763",
"severity": "MAJOR",
"message": "Unreachable code.",
"component": "sites/promo/src/components/sponsors.tsx",
"line": 101,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53qadRHfOsokVAja&open=AZ-V53qadRHfOsokVAja"
},
{
"key": "AZ-V53qadRHfOsokVAjc",
"rule": "typescript:S6479",
"severity": "MAJOR",
"message": "Do not use Array index in keys",
"component": "sites/promo/src/components/sponsors.tsx",
"line": 245,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53qadRHfOsokVAjc&open=AZ-V53qadRHfOsokVAjc"
},
{
"key": "AZ-V53qadRHfOsokVAje",
"rule": "typescript:S6479",
"severity": "MAJOR",
"message": "Do not use Array index in keys",
"component": "sites/promo/src/components/sponsors.tsx",
"line": 262,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53qadRHfOsokVAje&open=AZ-V53qadRHfOsokVAje"
},
{
"key": "AZ-V53wAdRHfOsokVAks",
"rule": "text:S8570",
"severity": "MAJOR",
"message": "Dependency versions are not predictable if the lock file (Cargo.lock) is missing.",
"component": "libraries/native_model/native_model_macro/Cargo.toml",
"line": null,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53wAdRHfOsokVAks&open=AZ-V53wAdRHfOsokVAks"
},
{
"key": "AZ-V53pudRHfOsokVAjP",
"rule": "shell:S6506",
"severity": "MAJOR",
"message": "Not disabling redirects might allow for redirections to insecure websites. Make sure it is safe here.",
"component": "desktop/optimize-appimage.sh",
"line": 17,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53pudRHfOsokVAjP&open=AZ-V53pudRHfOsokVAjP"
},
{
"key": "AZ-V53TVdRHfOsokVAfi",
"rule": "typescript:S3358",
"severity": "MAJOR",
"message": "Extract this nested ternary operation into an independent statement.",
"component": "server/components/StoreView.vue",
"line": 465,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53TVdRHfOsokVAfi&open=AZ-V53TVdRHfOsokVAfi"
},
{
"key": "AZ-V53zOdRHfOsokVAk7",
"rule": "text:S8570",
"severity": "MAJOR",
"message": "Dependency versions are not predictable if the lock file (Cargo.lock) is missing.",
"component": "libraries/native_model/tests_crate/Cargo.toml",
"line": null,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53zOdRHfOsokVAk7&open=AZ-V53zOdRHfOsokVAk7"
},
{
"key": "AZ-V53MYdRHfOsokVAes",
"rule": "typescript:S4624",
"severity": "MAJOR",
"message": "Refactor this code to not use nested template literals.",
"component": "server/server/routes/auth/oidc.get.ts",
"line": 18,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53MYdRHfOsokVAes&open=AZ-V53MYdRHfOsokVAes"
},
{
"key": "AZ-V528odRHfOsokVAbs",
"rule": "typescript:S1751",
"severity": "MAJOR",
"message": "Invalid loop. Its body allows only one iteration.",
"component": "server/server/internal/metadata/igdb.ts",
"line": 654,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V528odRHfOsokVAbs&open=AZ-V528odRHfOsokVAbs"
},
{
"key": "AZ-V5298dRHfOsokVAby",
"rule": "typescript:S6035",
"severity": "MAJOR",
"message": "Replace this alternation with a character class.",
"component": "server/server/internal/metadata/pcgamingwiki.ts",
"line": 340,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V5298dRHfOsokVAby&open=AZ-V5298dRHfOsokVAby"
},
{
"key": "AZ-V53l8dRHfOsokVAi6",
"rule": "typescript:S7785",
"severity": "MAJOR",
"message": "Prefer top-level await over using a promise chain.",
"component": "desktop/main/pages/settings/index.vue",
"line": 45,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53l8dRHfOsokVAi6&open=AZ-V53l8dRHfOsokVAi6"
},
{
"key": "AZ-V53FhdRHfOsokVAdj",
"rule": "typescript:S4043",
"severity": "MAJOR",
"message": "Move this array \"sort\" operation to a separate statement or replace it with \"toSorted\".",
"component": "server/server/internal/utils/prioritylist.ts",
"line": 32,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53FhdRHfOsokVAdj&open=AZ-V53FhdRHfOsokVAdj"
},
{
"key": "AZ-V53AVdRHfOsokVAcb",
"rule": "typescript:S6564",
"severity": "MAJOR",
"message": "Remove this redundant type alias and replace its occurrences with \"string\".",
"component": "server/server/internal/objects/objectHandler.ts",
"line": 24,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53AVdRHfOsokVAcb&open=AZ-V53AVdRHfOsokVAcb"
},
{
"key": "AZ-V53aQdRHfOsokVAhI",
"rule": "typescript:S8786",
"severity": "MAJOR",
"message": "Simplify this regular expression to reduce its runtime, as it has super-linear performance due to backtracking.",
"component": "server/pages/admin/users/auth/simple/index.vue",
"line": 452,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53aQdRHfOsokVAhI&open=AZ-V53aQdRHfOsokVAhI"
},
{
"key": "AZ-V53c5dRHfOsokVAhe",
"rule": "Web:S5256",
"severity": "MAJOR",
"message": "Add \"<th>\" headers to this \"<table>\".",
"component": "server/pages/store/[id]/index.vue",
"line": 54,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53c5dRHfOsokVAhe&open=AZ-V53c5dRHfOsokVAhe"
},
{
"key": "AZ-V53pcdRHfOsokVAjN",
"rule": "typescript:S4043",
"severity": "MAJOR",
"message": "Move this array \"sort\" operation to a separate statement or replace it with \"toSorted\".",
"component": "desktop/main/composables/current-page-engine.ts",
"line": 16,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53pcdRHfOsokVAjN&open=AZ-V53pcdRHfOsokVAjN"
},
{
"key": "AZ-V525hdRHfOsokVAbO",
"rule": "typescript:S4043",
"severity": "MAJOR",
"message": "Move this array \"sort\" operation to a separate statement or replace it with \"toSorted\".",
"component": "server/server/internal/library/index.ts",
"line": 381,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V525hdRHfOsokVAbO&open=AZ-V525hdRHfOsokVAbO"
},
{
"key": "AZ-V52-GdRHfOsokVAb8",
"rule": "typescript:S6661",
"severity": "MAJOR",
"message": "Use an object spread instead of `Object.assign` eg: `{ ...foo }`.",
"component": "server/server/internal/metadata/index.ts",
"line": 94,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V52-GdRHfOsokVAb8&open=AZ-V52-GdRHfOsokVAb8"
},
{
"key": "AZ-V53dudRHfOsokVAhq",
"rule": "typescript:S4043",
"severity": "MAJOR",
"message": "Move this array \"sort\" operation to a separate statement or replace it with \"toSorted\".",
"component": "server/composables/current-page-engine.ts",
"line": 15,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53dudRHfOsokVAhq&open=AZ-V53dudRHfOsokVAhq"
},
{
"key": "AZ-V53o3dRHfOsokVAjG",
"rule": "typescript:S1854",
"severity": "MAJOR",
"message": "Remove this useless assignment to variable \"result\".",
"component": "desktop/main/pages/setup/server.vue",
"line": 97,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53o3dRHfOsokVAjG&open=AZ-V53o3dRHfOsokVAjG"
},
{
"key": "AZ-V53GJdRHfOsokVAdx",
"rule": "typescript:S2137",
"severity": "MAJOR",
"message": "Do not use \"globalThis\" to declare a variable - use another name.",
"component": "server/server/internal/db/database.ts",
"line": 10,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53GJdRHfOsokVAdx&open=AZ-V53GJdRHfOsokVAdx"
},
{
"key": "AZ-dRYBBZiQzo-vEe6fD",
"rule": "rust:S3776",
"severity": "CRITICAL",
"message": "Refactor this function to reduce its Cognitive Complexity from 21 to the 15 allowed.",
"component": "libraries/libarchive/src/writer.rs",
"line": 105,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-dRYBBZiQzo-vEe6fD&open=AZ-dRYBBZiQzo-vEe6fD"
}
]
} |
SonarCloud AnalysisSummary
Total: 53 issues Top Issues
TrackingNo existing GitHub issues found for these findings. Run Full analysis: SonarCloud Dashboard 📋 JSON Summary (for AI agents){
"project": "BillyOutlast_drop",
"pullRequest": 108,
"qualityGate": {
"gateStatus": "ERROR",
"failedConditions": [
{
"metric": "new_coverage",
"actual": "0.0",
"threshold": "80"
}
]
},
"filesNeedingCoverage": [
{
"file": "server/server/internal/config/application-configuration.ts",
"coverage": "0.0",
"uncovered": "0"
},
{
"file": "sites/promo/src/components/comparison.tsx",
"coverage": "0.0",
"uncovered": "0"
},
{
"file": "server/server/internal/session/filter.ts",
"coverage": "0.0",
"uncovered": "0"
},
{
"file": "server/server/internal/metadata/igdb.ts",
"coverage": "0.0",
"uncovered": "0"
}
],
"totalIssues": 53,
"summary": {
"blocker": 0,
"critical": 11,
"major": 42
},
"issues": [
{
"key": "AZ-hG_6o_7iyvaG2TeIu",
"rule": "typescript:S3776",
"severity": "CRITICAL",
"message": "Refactor this function to reduce its Cognitive Complexity from 16 to the 15 allowed.",
"component": "server/server/internal/session/filter.ts",
"line": 10,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-hG_6o_7iyvaG2TeIu&open=AZ-hG_6o_7iyvaG2TeIu"
},
{
"key": "AZ-hHArD_7iyvaG2TeIw",
"rule": "typescript:S6851",
"severity": "MAJOR",
"message": "Redundant alt attribute. Screen-readers already announce `img` tags as an image. You don’t need to use the words `image`, `photo,` or `picture` (or any specified custom words) in the alt prop.",
"component": "sites/promo/src/components/gallery-modal.tsx",
"line": 135,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-hHArD_7iyvaG2TeIw&open=AZ-hHArD_7iyvaG2TeIw"
},
{
"key": "AZ-gksvtpI4t_4jmejj6",
"rule": "shelldre:S131",
"severity": "CRITICAL",
"message": "Add a default case (*) to handle unexpected values.",
"component": "scripts/sonarcloud-sync.sh",
"line": 306,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-gksvtpI4t_4jmejj6&open=AZ-gksvtpI4t_4jmejj6"
},
{
"key": "AZ-gA2474r4tYZa_Yi7e",
"rule": "typescript:S2004",
"severity": "CRITICAL",
"message": "Refactor this code to not nest functions more than 4 levels deep.",
"component": "sites/promo/src/components/comparison.tsx",
"line": 450,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-gA2474r4tYZa_Yi7e&open=AZ-gA2474r4tYZa_Yi7e"
},
{
"key": "AZ-c83VBnUgmSfWQkp2r",
"rule": "typescript:S8987",
"severity": "MAJOR",
"message": "Move this `v-if` to a parent element.",
"component": "desktop/main/components/GameOptions/ProtonSelector.vue",
"line": 73,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-c83VBnUgmSfWQkp2r&open=AZ-c83VBnUgmSfWQkp2r"
},
{
"key": "AZ-c83VBnUgmSfWQkp2s",
"rule": "typescript:S8987",
"severity": "MAJOR",
"message": "Move this `v-if` to a parent element.",
"component": "desktop/main/components/GameOptions/ProtonSelector.vue",
"line": 112,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-c83VBnUgmSfWQkp2s&open=AZ-c83VBnUgmSfWQkp2s"
},
{
"key": "AZ-YTBgzecfn39edgquG",
"rule": "typescript:S8786",
"severity": "MAJOR",
"message": "Simplify this regular expression to reduce its runtime, as it has super-linear performance due to backtracking.",
"component": "server/server/internal/metadata/steam.ts",
"line": 649,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-YTBgzecfn39edgquG&open=AZ-YTBgzecfn39edgquG"
},
{
"key": "AZ-YTCWiecfn39edgquP",
"rule": "typescript:S6772",
"severity": "MAJOR",
"message": "Ambiguous spacing after previous element img",
"component": "sites/promo/src/components/comparison.tsx",
"line": 54,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-YTCWiecfn39edgquP&open=AZ-YTCWiecfn39edgquP"
},
{
"key": "AZ-WZn8wL3IEMbakOkCg",
"rule": "githubactions:S6505",
"severity": "MAJOR",
"message": "Omitting \"--ignore-scripts\" allows lifecycle scripts to run during package installation.",
"component": ".github/workflows/e2e.yml",
"line": 64,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-WZn8wL3IEMbakOkCg&open=AZ-WZn8wL3IEMbakOkCg"
},
{
"key": "AZ-dRYQYZiQzo-vEe6fH",
"rule": "rust:S3776",
"severity": "CRITICAL",
"message": "Refactor this function to reduce its Cognitive Complexity from 29 to the 15 allowed.",
"component": "desktop/src-tauri/src/lib.rs",
"line": 205,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-dRYQYZiQzo-vEe6fH&open=AZ-dRYQYZiQzo-vEe6fH"
},
{
"key": "AZ-V531cdRHfOsokVAlP",
"rule": "docker:S8549",
"severity": "MAJOR",
"message": "Using dependencies without locking resolved versions is security-sensitive.",
"component": "Dockerfile",
"line": 37,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V531cdRHfOsokVAlP&open=AZ-V531cdRHfOsokVAlP"
},
{
"key": "AZ-dRYE2ZiQzo-vEe6fE",
"rule": "rust:S3776",
"severity": "CRITICAL",
"message": "Refactor this function to reduce its Cognitive Complexity from 24 to the 15 allowed.",
"component": "libraries/droplet/src/manifest.rs",
"line": 82,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-dRYE2ZiQzo-vEe6fE&open=AZ-dRYE2ZiQzo-vEe6fE"
},
{
"key": "AZ-V530UdRHfOsokVAk8",
"rule": "text:S8570",
"severity": "MAJOR",
"message": "Dependency versions are not predictable if the lock file (Cargo.lock) is missing.",
"component": "libraries/libarchive/Cargo.toml",
"line": null,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V530UdRHfOsokVAk8&open=AZ-V530UdRHfOsokVAk8"
},
{
"key": "AZ-dRYOlZiQzo-vEe6fF",
"rule": "rust:S3776",
"severity": "CRITICAL",
"message": "Refactor this function to reduce its Cognitive Complexity from 38 to the 15 allowed.",
"component": "desktop/src-tauri/games/src/downloads/download_agent.rs",
"line": 276,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-dRYOlZiQzo-vEe6fF&open=AZ-dRYOlZiQzo-vEe6fF"
},
{
"key": "AZ-dRYOzZiQzo-vEe6fG",
"rule": "rust:S3776",
"severity": "CRITICAL",
"message": "Refactor this function to reduce its Cognitive Complexity from 22 to the 15 allowed.",
"component": "desktop/src-tauri/games/src/downloads/download_logic.rs",
"line": 32,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-dRYOzZiQzo-vEe6fG&open=AZ-dRYOzZiQzo-vEe6fG"
},
{
"key": "AZ-dRYTRZiQzo-vEe6fJ",
"rule": "rust:S3776",
"severity": "CRITICAL",
"message": "Refactor this function to reduce its Cognitive Complexity from 20 to the 15 allowed.",
"component": "desktop/src-tauri/remote/src/utils.rs",
"line": 41,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-dRYTRZiQzo-vEe6fJ&open=AZ-dRYTRZiQzo-vEe6fJ"
},
{
"key": "AZ-dRYRpZiQzo-vEe6fI",
"rule": "rust:S3776",
"severity": "CRITICAL",
"message": "Refactor this function to reduce its Cognitive Complexity from 21 to the 15 allowed.",
"component": "desktop/src-tauri/download_manager/src/download_manager_builder.rs",
"line": 227,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-dRYRpZiQzo-vEe6fI&open=AZ-dRYRpZiQzo-vEe6fI"
},
{
"key": "AZ-V53JddRHfOsokVAeS",
"rule": "typescript:S4782",
"severity": "MAJOR",
"message": "Consider removing 'undefined' type or '?' specifier, one of them is redundant.",
"component": "server/server/api/v1/client/game/[id]/versions.get.ts",
"line": 11,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53JddRHfOsokVAeS&open=AZ-V53JddRHfOsokVAeS"
},
{
"key": "AZ-V53JddRHfOsokVAeT",
"rule": "typescript:S4782",
"severity": "MAJOR",
"message": "Consider removing 'undefined' type or '?' specifier, one of them is redundant.",
"component": "server/server/api/v1/client/game/[id]/versions.get.ts",
"line": 12,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53JddRHfOsokVAeT&open=AZ-V53JddRHfOsokVAeT"
},
{
"key": "AZ-V525XdRHfOsokVAbG",
"rule": "typescript:S6564",
"severity": "MAJOR",
"message": "Remove this redundant type alias and replace its occurrences with \"V2Manifest\".",
"component": "server/server/internal/library/manifest/utils.ts",
"line": 3,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V525XdRHfOsokVAbG&open=AZ-V525XdRHfOsokVAbG"
},
{
"key": "AZ-hHASC_7iyvaG2TeIv",
"rule": "Web:S6851",
"severity": "MAJOR",
"message": "Remove redundant word \"picture\" from the \"alt\" attribute of your \"img\" tag.",
"component": "server/pages/user/[id]/index.vue",
"line": 4,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-hHASC_7iyvaG2TeIv&open=AZ-hHASC_7iyvaG2TeIv"
},
{
"key": "AZ-V53uedRHfOsokVAkr",
"rule": "text:S8570",
"severity": "MAJOR",
"message": "Dependency versions are not predictable if the lock file (Cargo.lock) is missing.",
"component": "libraries/native_model/Cargo.toml",
"line": null,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53uedRHfOsokVAkr&open=AZ-V53uedRHfOsokVAkr"
},
{
"key": "AZ-dRYTRZiQzo-vEe6fK",
"rule": "rust:S3776",
"severity": "CRITICAL",
"message": "Refactor this function to reduce its Cognitive Complexity from 19 to the 15 allowed.",
"component": "desktop/src-tauri/remote/src/utils.rs",
"line": 96,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-dRYTRZiQzo-vEe6fK&open=AZ-dRYTRZiQzo-vEe6fK"
},
{
"key": "AZ-V52-SdRHfOsokVAcM",
"rule": "typescript:S8786",
"severity": "MAJOR",
"message": "Simplify this regular expression to reduce its runtime, as it has super-linear performance due to backtracking.",
"component": "server/server/internal/metadata/steam.ts",
"line": 921,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V52-SdRHfOsokVAcM&open=AZ-V52-SdRHfOsokVAcM"
},
{
"key": "AZ-V52-SdRHfOsokVAcO",
"rule": "typescript:S8786",
"severity": "MAJOR",
"message": "Simplify this regular expression to reduce its runtime, as it has super-linear performance due to backtracking.",
"component": "server/server/internal/metadata/steam.ts",
"line": 1013,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V52-SdRHfOsokVAcO&open=AZ-V52-SdRHfOsokVAcO"
},
{
"key": "AZ-V52-SdRHfOsokVAcP",
"rule": "typescript:S8786",
"severity": "MAJOR",
"message": "Simplify this regular expression to reduce its runtime, as it has super-linear performance due to backtracking.",
"component": "server/server/internal/metadata/steam.ts",
"line": 1016,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V52-SdRHfOsokVAcP&open=AZ-V52-SdRHfOsokVAcP"
},
{
"key": "AZ-V52-SdRHfOsokVAcS",
"rule": "typescript:S8786",
"severity": "MAJOR",
"message": "Simplify this regular expression to reduce its runtime, as it has super-linear performance due to backtracking.",
"component": "server/server/internal/metadata/steam.ts",
"line": 1110,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V52-SdRHfOsokVAcS&open=AZ-V52-SdRHfOsokVAcS"
},
{
"key": "AZ-V53sndRHfOsokVAkD",
"rule": "typescript:S6772",
"severity": "MAJOR",
"message": "Ambiguous spacing after previous element span",
"component": "sites/promo/src/components/comparison.tsx",
"line": 259,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53sndRHfOsokVAkD&open=AZ-V53sndRHfOsokVAkD"
},
{
"key": "AZ-V53sndRHfOsokVAkG",
"rule": "typescript:S6479",
"severity": "MAJOR",
"message": "Do not use Array index in keys",
"component": "sites/promo/src/components/comparison.tsx",
"line": 310,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53sndRHfOsokVAkG&open=AZ-V53sndRHfOsokVAkG"
},
{
"key": "AZ-V53sndRHfOsokVAkI",
"rule": "typescript:S7721",
"severity": "MAJOR",
"message": "Move function 'onlyUnique' to the outer scope.",
"component": "sites/promo/src/components/comparison.tsx",
"line": 330,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53sndRHfOsokVAkI&open=AZ-V53sndRHfOsokVAkI"
},
{
"key": "AZ-V53radRHfOsokVAju",
"rule": "typescript:S2137",
"severity": "MAJOR",
"message": "Do not use \"Map\" to declare a function - use another name.",
"component": "sites/promo/src/components/map.tsx",
"line": 53,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53radRHfOsokVAju&open=AZ-V53radRHfOsokVAju"
},
{
"key": "AZ-V53qadRHfOsokVAja",
"rule": "typescript:S1763",
"severity": "MAJOR",
"message": "Unreachable code.",
"component": "sites/promo/src/components/sponsors.tsx",
"line": 101,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53qadRHfOsokVAja&open=AZ-V53qadRHfOsokVAja"
},
{
"key": "AZ-V53qadRHfOsokVAjc",
"rule": "typescript:S6479",
"severity": "MAJOR",
"message": "Do not use Array index in keys",
"component": "sites/promo/src/components/sponsors.tsx",
"line": 245,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53qadRHfOsokVAjc&open=AZ-V53qadRHfOsokVAjc"
},
{
"key": "AZ-V53qadRHfOsokVAje",
"rule": "typescript:S6479",
"severity": "MAJOR",
"message": "Do not use Array index in keys",
"component": "sites/promo/src/components/sponsors.tsx",
"line": 262,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53qadRHfOsokVAje&open=AZ-V53qadRHfOsokVAje"
},
{
"key": "AZ-V53wAdRHfOsokVAks",
"rule": "text:S8570",
"severity": "MAJOR",
"message": "Dependency versions are not predictable if the lock file (Cargo.lock) is missing.",
"component": "libraries/native_model/native_model_macro/Cargo.toml",
"line": null,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53wAdRHfOsokVAks&open=AZ-V53wAdRHfOsokVAks"
},
{
"key": "AZ-V53pudRHfOsokVAjP",
"rule": "shell:S6506",
"severity": "MAJOR",
"message": "Not disabling redirects might allow for redirections to insecure websites. Make sure it is safe here.",
"component": "desktop/optimize-appimage.sh",
"line": 17,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53pudRHfOsokVAjP&open=AZ-V53pudRHfOsokVAjP"
},
{
"key": "AZ-V53TVdRHfOsokVAfi",
"rule": "typescript:S3358",
"severity": "MAJOR",
"message": "Extract this nested ternary operation into an independent statement.",
"component": "server/components/StoreView.vue",
"line": 465,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53TVdRHfOsokVAfi&open=AZ-V53TVdRHfOsokVAfi"
},
{
"key": "AZ-V53zOdRHfOsokVAk7",
"rule": "text:S8570",
"severity": "MAJOR",
"message": "Dependency versions are not predictable if the lock file (Cargo.lock) is missing.",
"component": "libraries/native_model/tests_crate/Cargo.toml",
"line": null,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53zOdRHfOsokVAk7&open=AZ-V53zOdRHfOsokVAk7"
},
{
"key": "AZ-V53MYdRHfOsokVAes",
"rule": "typescript:S4624",
"severity": "MAJOR",
"message": "Refactor this code to not use nested template literals.",
"component": "server/server/routes/auth/oidc.get.ts",
"line": 18,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53MYdRHfOsokVAes&open=AZ-V53MYdRHfOsokVAes"
},
{
"key": "AZ-V528odRHfOsokVAbs",
"rule": "typescript:S1751",
"severity": "MAJOR",
"message": "Invalid loop. Its body allows only one iteration.",
"component": "server/server/internal/metadata/igdb.ts",
"line": 654,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V528odRHfOsokVAbs&open=AZ-V528odRHfOsokVAbs"
},
{
"key": "AZ-V5298dRHfOsokVAby",
"rule": "typescript:S6035",
"severity": "MAJOR",
"message": "Replace this alternation with a character class.",
"component": "server/server/internal/metadata/pcgamingwiki.ts",
"line": 340,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V5298dRHfOsokVAby&open=AZ-V5298dRHfOsokVAby"
},
{
"key": "AZ-V53l8dRHfOsokVAi6",
"rule": "typescript:S7785",
"severity": "MAJOR",
"message": "Prefer top-level await over using a promise chain.",
"component": "desktop/main/pages/settings/index.vue",
"line": 45,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53l8dRHfOsokVAi6&open=AZ-V53l8dRHfOsokVAi6"
},
{
"key": "AZ-V53FhdRHfOsokVAdj",
"rule": "typescript:S4043",
"severity": "MAJOR",
"message": "Move this array \"sort\" operation to a separate statement or replace it with \"toSorted\".",
"component": "server/server/internal/utils/prioritylist.ts",
"line": 32,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53FhdRHfOsokVAdj&open=AZ-V53FhdRHfOsokVAdj"
},
{
"key": "AZ-V53AVdRHfOsokVAcb",
"rule": "typescript:S6564",
"severity": "MAJOR",
"message": "Remove this redundant type alias and replace its occurrences with \"string\".",
"component": "server/server/internal/objects/objectHandler.ts",
"line": 24,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53AVdRHfOsokVAcb&open=AZ-V53AVdRHfOsokVAcb"
},
{
"key": "AZ-V53aQdRHfOsokVAhI",
"rule": "typescript:S8786",
"severity": "MAJOR",
"message": "Simplify this regular expression to reduce its runtime, as it has super-linear performance due to backtracking.",
"component": "server/pages/admin/users/auth/simple/index.vue",
"line": 452,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53aQdRHfOsokVAhI&open=AZ-V53aQdRHfOsokVAhI"
},
{
"key": "AZ-V53c5dRHfOsokVAhe",
"rule": "Web:S5256",
"severity": "MAJOR",
"message": "Add \"<th>\" headers to this \"<table>\".",
"component": "server/pages/store/[id]/index.vue",
"line": 54,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53c5dRHfOsokVAhe&open=AZ-V53c5dRHfOsokVAhe"
},
{
"key": "AZ-V53pcdRHfOsokVAjN",
"rule": "typescript:S4043",
"severity": "MAJOR",
"message": "Move this array \"sort\" operation to a separate statement or replace it with \"toSorted\".",
"component": "desktop/main/composables/current-page-engine.ts",
"line": 16,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53pcdRHfOsokVAjN&open=AZ-V53pcdRHfOsokVAjN"
},
{
"key": "AZ-V525hdRHfOsokVAbO",
"rule": "typescript:S4043",
"severity": "MAJOR",
"message": "Move this array \"sort\" operation to a separate statement or replace it with \"toSorted\".",
"component": "server/server/internal/library/index.ts",
"line": 381,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V525hdRHfOsokVAbO&open=AZ-V525hdRHfOsokVAbO"
},
{
"key": "AZ-V52-GdRHfOsokVAb8",
"rule": "typescript:S6661",
"severity": "MAJOR",
"message": "Use an object spread instead of `Object.assign` eg: `{ ...foo }`.",
"component": "server/server/internal/metadata/index.ts",
"line": 94,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V52-GdRHfOsokVAb8&open=AZ-V52-GdRHfOsokVAb8"
},
{
"key": "AZ-V53dudRHfOsokVAhq",
"rule": "typescript:S4043",
"severity": "MAJOR",
"message": "Move this array \"sort\" operation to a separate statement or replace it with \"toSorted\".",
"component": "server/composables/current-page-engine.ts",
"line": 15,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53dudRHfOsokVAhq&open=AZ-V53dudRHfOsokVAhq"
},
{
"key": "AZ-V53o3dRHfOsokVAjG",
"rule": "typescript:S1854",
"severity": "MAJOR",
"message": "Remove this useless assignment to variable \"result\".",
"component": "desktop/main/pages/setup/server.vue",
"line": 97,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53o3dRHfOsokVAjG&open=AZ-V53o3dRHfOsokVAjG"
},
{
"key": "AZ-V53GJdRHfOsokVAdx",
"rule": "typescript:S2137",
"severity": "MAJOR",
"message": "Do not use \"globalThis\" to declare a variable - use another name.",
"component": "server/server/internal/db/database.ts",
"line": 10,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53GJdRHfOsokVAdx&open=AZ-V53GJdRHfOsokVAdx"
},
{
"key": "AZ-dRYBBZiQzo-vEe6fD",
"rule": "rust:S3776",
"severity": "CRITICAL",
"message": "Refactor this function to reduce its Cognitive Complexity from 21 to the 15 allowed.",
"component": "libraries/libarchive/src/writer.rs",
"line": 105,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-dRYBBZiQzo-vEe6fD&open=AZ-dRYBBZiQzo-vEe6fD"
}
]
} |
SonarCloud AnalysisSummary
Total: 53 issues Top Issues
TrackingNo existing GitHub issues found for these findings. Run Full analysis: SonarCloud Dashboard 📋 JSON Summary (for AI agents){
"project": "BillyOutlast_drop",
"pullRequest": 108,
"qualityGate": {
"gateStatus": "ERROR",
"failedConditions": [
{
"metric": "new_coverage",
"actual": "0.0",
"threshold": "80"
}
]
},
"filesNeedingCoverage": [
{
"file": "server/server/internal/config/application-configuration.ts",
"coverage": "0.0",
"uncovered": "0"
},
{
"file": "sites/promo/src/components/comparison.tsx",
"coverage": "0.0",
"uncovered": "0"
},
{
"file": "server/server/internal/session/filter.ts",
"coverage": "0.0",
"uncovered": "0"
},
{
"file": "server/server/internal/metadata/igdb.ts",
"coverage": "0.0",
"uncovered": "0"
}
],
"totalIssues": 53,
"summary": {
"blocker": 0,
"critical": 11,
"major": 42
},
"issues": [
{
"key": "AZ-hG_6o_7iyvaG2TeIu",
"rule": "typescript:S3776",
"severity": "CRITICAL",
"message": "Refactor this function to reduce its Cognitive Complexity from 16 to the 15 allowed.",
"component": "server/server/internal/session/filter.ts",
"line": 10,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-hG_6o_7iyvaG2TeIu&open=AZ-hG_6o_7iyvaG2TeIu"
},
{
"key": "AZ-hHArD_7iyvaG2TeIw",
"rule": "typescript:S6851",
"severity": "MAJOR",
"message": "Redundant alt attribute. Screen-readers already announce `img` tags as an image. You don’t need to use the words `image`, `photo,` or `picture` (or any specified custom words) in the alt prop.",
"component": "sites/promo/src/components/gallery-modal.tsx",
"line": 135,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-hHArD_7iyvaG2TeIw&open=AZ-hHArD_7iyvaG2TeIw"
},
{
"key": "AZ-gksvtpI4t_4jmejj6",
"rule": "shelldre:S131",
"severity": "CRITICAL",
"message": "Add a default case (*) to handle unexpected values.",
"component": "scripts/sonarcloud-sync.sh",
"line": 306,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-gksvtpI4t_4jmejj6&open=AZ-gksvtpI4t_4jmejj6"
},
{
"key": "AZ-gA2474r4tYZa_Yi7e",
"rule": "typescript:S2004",
"severity": "CRITICAL",
"message": "Refactor this code to not nest functions more than 4 levels deep.",
"component": "sites/promo/src/components/comparison.tsx",
"line": 450,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-gA2474r4tYZa_Yi7e&open=AZ-gA2474r4tYZa_Yi7e"
},
{
"key": "AZ-c83VBnUgmSfWQkp2r",
"rule": "typescript:S8987",
"severity": "MAJOR",
"message": "Move this `v-if` to a parent element.",
"component": "desktop/main/components/GameOptions/ProtonSelector.vue",
"line": 73,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-c83VBnUgmSfWQkp2r&open=AZ-c83VBnUgmSfWQkp2r"
},
{
"key": "AZ-c83VBnUgmSfWQkp2s",
"rule": "typescript:S8987",
"severity": "MAJOR",
"message": "Move this `v-if` to a parent element.",
"component": "desktop/main/components/GameOptions/ProtonSelector.vue",
"line": 112,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-c83VBnUgmSfWQkp2s&open=AZ-c83VBnUgmSfWQkp2s"
},
{
"key": "AZ-YTBgzecfn39edgquG",
"rule": "typescript:S8786",
"severity": "MAJOR",
"message": "Simplify this regular expression to reduce its runtime, as it has super-linear performance due to backtracking.",
"component": "server/server/internal/metadata/steam.ts",
"line": 649,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-YTBgzecfn39edgquG&open=AZ-YTBgzecfn39edgquG"
},
{
"key": "AZ-YTCWiecfn39edgquP",
"rule": "typescript:S6772",
"severity": "MAJOR",
"message": "Ambiguous spacing after previous element img",
"component": "sites/promo/src/components/comparison.tsx",
"line": 54,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-YTCWiecfn39edgquP&open=AZ-YTCWiecfn39edgquP"
},
{
"key": "AZ-WZn8wL3IEMbakOkCg",
"rule": "githubactions:S6505",
"severity": "MAJOR",
"message": "Omitting \"--ignore-scripts\" allows lifecycle scripts to run during package installation.",
"component": ".github/workflows/e2e.yml",
"line": 64,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-WZn8wL3IEMbakOkCg&open=AZ-WZn8wL3IEMbakOkCg"
},
{
"key": "AZ-dRYQYZiQzo-vEe6fH",
"rule": "rust:S3776",
"severity": "CRITICAL",
"message": "Refactor this function to reduce its Cognitive Complexity from 29 to the 15 allowed.",
"component": "desktop/src-tauri/src/lib.rs",
"line": 205,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-dRYQYZiQzo-vEe6fH&open=AZ-dRYQYZiQzo-vEe6fH"
},
{
"key": "AZ-V531cdRHfOsokVAlP",
"rule": "docker:S8549",
"severity": "MAJOR",
"message": "Using dependencies without locking resolved versions is security-sensitive.",
"component": "Dockerfile",
"line": 37,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V531cdRHfOsokVAlP&open=AZ-V531cdRHfOsokVAlP"
},
{
"key": "AZ-dRYE2ZiQzo-vEe6fE",
"rule": "rust:S3776",
"severity": "CRITICAL",
"message": "Refactor this function to reduce its Cognitive Complexity from 24 to the 15 allowed.",
"component": "libraries/droplet/src/manifest.rs",
"line": 82,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-dRYE2ZiQzo-vEe6fE&open=AZ-dRYE2ZiQzo-vEe6fE"
},
{
"key": "AZ-V530UdRHfOsokVAk8",
"rule": "text:S8570",
"severity": "MAJOR",
"message": "Dependency versions are not predictable if the lock file (Cargo.lock) is missing.",
"component": "libraries/libarchive/Cargo.toml",
"line": null,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V530UdRHfOsokVAk8&open=AZ-V530UdRHfOsokVAk8"
},
{
"key": "AZ-dRYOlZiQzo-vEe6fF",
"rule": "rust:S3776",
"severity": "CRITICAL",
"message": "Refactor this function to reduce its Cognitive Complexity from 38 to the 15 allowed.",
"component": "desktop/src-tauri/games/src/downloads/download_agent.rs",
"line": 276,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-dRYOlZiQzo-vEe6fF&open=AZ-dRYOlZiQzo-vEe6fF"
},
{
"key": "AZ-dRYOzZiQzo-vEe6fG",
"rule": "rust:S3776",
"severity": "CRITICAL",
"message": "Refactor this function to reduce its Cognitive Complexity from 22 to the 15 allowed.",
"component": "desktop/src-tauri/games/src/downloads/download_logic.rs",
"line": 32,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-dRYOzZiQzo-vEe6fG&open=AZ-dRYOzZiQzo-vEe6fG"
},
{
"key": "AZ-dRYTRZiQzo-vEe6fJ",
"rule": "rust:S3776",
"severity": "CRITICAL",
"message": "Refactor this function to reduce its Cognitive Complexity from 20 to the 15 allowed.",
"component": "desktop/src-tauri/remote/src/utils.rs",
"line": 41,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-dRYTRZiQzo-vEe6fJ&open=AZ-dRYTRZiQzo-vEe6fJ"
},
{
"key": "AZ-dRYRpZiQzo-vEe6fI",
"rule": "rust:S3776",
"severity": "CRITICAL",
"message": "Refactor this function to reduce its Cognitive Complexity from 21 to the 15 allowed.",
"component": "desktop/src-tauri/download_manager/src/download_manager_builder.rs",
"line": 227,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-dRYRpZiQzo-vEe6fI&open=AZ-dRYRpZiQzo-vEe6fI"
},
{
"key": "AZ-V53JddRHfOsokVAeS",
"rule": "typescript:S4782",
"severity": "MAJOR",
"message": "Consider removing 'undefined' type or '?' specifier, one of them is redundant.",
"component": "server/server/api/v1/client/game/[id]/versions.get.ts",
"line": 11,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53JddRHfOsokVAeS&open=AZ-V53JddRHfOsokVAeS"
},
{
"key": "AZ-V53JddRHfOsokVAeT",
"rule": "typescript:S4782",
"severity": "MAJOR",
"message": "Consider removing 'undefined' type or '?' specifier, one of them is redundant.",
"component": "server/server/api/v1/client/game/[id]/versions.get.ts",
"line": 12,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53JddRHfOsokVAeT&open=AZ-V53JddRHfOsokVAeT"
},
{
"key": "AZ-V525XdRHfOsokVAbG",
"rule": "typescript:S6564",
"severity": "MAJOR",
"message": "Remove this redundant type alias and replace its occurrences with \"V2Manifest\".",
"component": "server/server/internal/library/manifest/utils.ts",
"line": 3,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V525XdRHfOsokVAbG&open=AZ-V525XdRHfOsokVAbG"
},
{
"key": "AZ-hHASC_7iyvaG2TeIv",
"rule": "Web:S6851",
"severity": "MAJOR",
"message": "Remove redundant word \"picture\" from the \"alt\" attribute of your \"img\" tag.",
"component": "server/pages/user/[id]/index.vue",
"line": 4,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-hHASC_7iyvaG2TeIv&open=AZ-hHASC_7iyvaG2TeIv"
},
{
"key": "AZ-V53uedRHfOsokVAkr",
"rule": "text:S8570",
"severity": "MAJOR",
"message": "Dependency versions are not predictable if the lock file (Cargo.lock) is missing.",
"component": "libraries/native_model/Cargo.toml",
"line": null,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53uedRHfOsokVAkr&open=AZ-V53uedRHfOsokVAkr"
},
{
"key": "AZ-dRYTRZiQzo-vEe6fK",
"rule": "rust:S3776",
"severity": "CRITICAL",
"message": "Refactor this function to reduce its Cognitive Complexity from 19 to the 15 allowed.",
"component": "desktop/src-tauri/remote/src/utils.rs",
"line": 96,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-dRYTRZiQzo-vEe6fK&open=AZ-dRYTRZiQzo-vEe6fK"
},
{
"key": "AZ-V52-SdRHfOsokVAcM",
"rule": "typescript:S8786",
"severity": "MAJOR",
"message": "Simplify this regular expression to reduce its runtime, as it has super-linear performance due to backtracking.",
"component": "server/server/internal/metadata/steam.ts",
"line": 921,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V52-SdRHfOsokVAcM&open=AZ-V52-SdRHfOsokVAcM"
},
{
"key": "AZ-V52-SdRHfOsokVAcO",
"rule": "typescript:S8786",
"severity": "MAJOR",
"message": "Simplify this regular expression to reduce its runtime, as it has super-linear performance due to backtracking.",
"component": "server/server/internal/metadata/steam.ts",
"line": 1013,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V52-SdRHfOsokVAcO&open=AZ-V52-SdRHfOsokVAcO"
},
{
"key": "AZ-V52-SdRHfOsokVAcP",
"rule": "typescript:S8786",
"severity": "MAJOR",
"message": "Simplify this regular expression to reduce its runtime, as it has super-linear performance due to backtracking.",
"component": "server/server/internal/metadata/steam.ts",
"line": 1016,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V52-SdRHfOsokVAcP&open=AZ-V52-SdRHfOsokVAcP"
},
{
"key": "AZ-V52-SdRHfOsokVAcS",
"rule": "typescript:S8786",
"severity": "MAJOR",
"message": "Simplify this regular expression to reduce its runtime, as it has super-linear performance due to backtracking.",
"component": "server/server/internal/metadata/steam.ts",
"line": 1110,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V52-SdRHfOsokVAcS&open=AZ-V52-SdRHfOsokVAcS"
},
{
"key": "AZ-V53sndRHfOsokVAkD",
"rule": "typescript:S6772",
"severity": "MAJOR",
"message": "Ambiguous spacing after previous element span",
"component": "sites/promo/src/components/comparison.tsx",
"line": 259,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53sndRHfOsokVAkD&open=AZ-V53sndRHfOsokVAkD"
},
{
"key": "AZ-V53sndRHfOsokVAkG",
"rule": "typescript:S6479",
"severity": "MAJOR",
"message": "Do not use Array index in keys",
"component": "sites/promo/src/components/comparison.tsx",
"line": 310,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53sndRHfOsokVAkG&open=AZ-V53sndRHfOsokVAkG"
},
{
"key": "AZ-V53sndRHfOsokVAkI",
"rule": "typescript:S7721",
"severity": "MAJOR",
"message": "Move function 'onlyUnique' to the outer scope.",
"component": "sites/promo/src/components/comparison.tsx",
"line": 330,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53sndRHfOsokVAkI&open=AZ-V53sndRHfOsokVAkI"
},
{
"key": "AZ-V53radRHfOsokVAju",
"rule": "typescript:S2137",
"severity": "MAJOR",
"message": "Do not use \"Map\" to declare a function - use another name.",
"component": "sites/promo/src/components/map.tsx",
"line": 53,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53radRHfOsokVAju&open=AZ-V53radRHfOsokVAju"
},
{
"key": "AZ-V53qadRHfOsokVAja",
"rule": "typescript:S1763",
"severity": "MAJOR",
"message": "Unreachable code.",
"component": "sites/promo/src/components/sponsors.tsx",
"line": 101,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53qadRHfOsokVAja&open=AZ-V53qadRHfOsokVAja"
},
{
"key": "AZ-V53qadRHfOsokVAjc",
"rule": "typescript:S6479",
"severity": "MAJOR",
"message": "Do not use Array index in keys",
"component": "sites/promo/src/components/sponsors.tsx",
"line": 245,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53qadRHfOsokVAjc&open=AZ-V53qadRHfOsokVAjc"
},
{
"key": "AZ-V53qadRHfOsokVAje",
"rule": "typescript:S6479",
"severity": "MAJOR",
"message": "Do not use Array index in keys",
"component": "sites/promo/src/components/sponsors.tsx",
"line": 262,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53qadRHfOsokVAje&open=AZ-V53qadRHfOsokVAje"
},
{
"key": "AZ-V53wAdRHfOsokVAks",
"rule": "text:S8570",
"severity": "MAJOR",
"message": "Dependency versions are not predictable if the lock file (Cargo.lock) is missing.",
"component": "libraries/native_model/native_model_macro/Cargo.toml",
"line": null,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53wAdRHfOsokVAks&open=AZ-V53wAdRHfOsokVAks"
},
{
"key": "AZ-V53pudRHfOsokVAjP",
"rule": "shell:S6506",
"severity": "MAJOR",
"message": "Not disabling redirects might allow for redirections to insecure websites. Make sure it is safe here.",
"component": "desktop/optimize-appimage.sh",
"line": 17,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53pudRHfOsokVAjP&open=AZ-V53pudRHfOsokVAjP"
},
{
"key": "AZ-V53TVdRHfOsokVAfi",
"rule": "typescript:S3358",
"severity": "MAJOR",
"message": "Extract this nested ternary operation into an independent statement.",
"component": "server/components/StoreView.vue",
"line": 465,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53TVdRHfOsokVAfi&open=AZ-V53TVdRHfOsokVAfi"
},
{
"key": "AZ-V53zOdRHfOsokVAk7",
"rule": "text:S8570",
"severity": "MAJOR",
"message": "Dependency versions are not predictable if the lock file (Cargo.lock) is missing.",
"component": "libraries/native_model/tests_crate/Cargo.toml",
"line": null,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53zOdRHfOsokVAk7&open=AZ-V53zOdRHfOsokVAk7"
},
{
"key": "AZ-V53MYdRHfOsokVAes",
"rule": "typescript:S4624",
"severity": "MAJOR",
"message": "Refactor this code to not use nested template literals.",
"component": "server/server/routes/auth/oidc.get.ts",
"line": 18,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53MYdRHfOsokVAes&open=AZ-V53MYdRHfOsokVAes"
},
{
"key": "AZ-V528odRHfOsokVAbs",
"rule": "typescript:S1751",
"severity": "MAJOR",
"message": "Invalid loop. Its body allows only one iteration.",
"component": "server/server/internal/metadata/igdb.ts",
"line": 654,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V528odRHfOsokVAbs&open=AZ-V528odRHfOsokVAbs"
},
{
"key": "AZ-V5298dRHfOsokVAby",
"rule": "typescript:S6035",
"severity": "MAJOR",
"message": "Replace this alternation with a character class.",
"component": "server/server/internal/metadata/pcgamingwiki.ts",
"line": 340,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V5298dRHfOsokVAby&open=AZ-V5298dRHfOsokVAby"
},
{
"key": "AZ-V53l8dRHfOsokVAi6",
"rule": "typescript:S7785",
"severity": "MAJOR",
"message": "Prefer top-level await over using a promise chain.",
"component": "desktop/main/pages/settings/index.vue",
"line": 45,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53l8dRHfOsokVAi6&open=AZ-V53l8dRHfOsokVAi6"
},
{
"key": "AZ-V53FhdRHfOsokVAdj",
"rule": "typescript:S4043",
"severity": "MAJOR",
"message": "Move this array \"sort\" operation to a separate statement or replace it with \"toSorted\".",
"component": "server/server/internal/utils/prioritylist.ts",
"line": 32,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53FhdRHfOsokVAdj&open=AZ-V53FhdRHfOsokVAdj"
},
{
"key": "AZ-V53AVdRHfOsokVAcb",
"rule": "typescript:S6564",
"severity": "MAJOR",
"message": "Remove this redundant type alias and replace its occurrences with \"string\".",
"component": "server/server/internal/objects/objectHandler.ts",
"line": 24,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53AVdRHfOsokVAcb&open=AZ-V53AVdRHfOsokVAcb"
},
{
"key": "AZ-V53aQdRHfOsokVAhI",
"rule": "typescript:S8786",
"severity": "MAJOR",
"message": "Simplify this regular expression to reduce its runtime, as it has super-linear performance due to backtracking.",
"component": "server/pages/admin/users/auth/simple/index.vue",
"line": 452,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53aQdRHfOsokVAhI&open=AZ-V53aQdRHfOsokVAhI"
},
{
"key": "AZ-V53c5dRHfOsokVAhe",
"rule": "Web:S5256",
"severity": "MAJOR",
"message": "Add \"<th>\" headers to this \"<table>\".",
"component": "server/pages/store/[id]/index.vue",
"line": 54,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53c5dRHfOsokVAhe&open=AZ-V53c5dRHfOsokVAhe"
},
{
"key": "AZ-V53pcdRHfOsokVAjN",
"rule": "typescript:S4043",
"severity": "MAJOR",
"message": "Move this array \"sort\" operation to a separate statement or replace it with \"toSorted\".",
"component": "desktop/main/composables/current-page-engine.ts",
"line": 16,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53pcdRHfOsokVAjN&open=AZ-V53pcdRHfOsokVAjN"
},
{
"key": "AZ-V525hdRHfOsokVAbO",
"rule": "typescript:S4043",
"severity": "MAJOR",
"message": "Move this array \"sort\" operation to a separate statement or replace it with \"toSorted\".",
"component": "server/server/internal/library/index.ts",
"line": 381,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V525hdRHfOsokVAbO&open=AZ-V525hdRHfOsokVAbO"
},
{
"key": "AZ-V52-GdRHfOsokVAb8",
"rule": "typescript:S6661",
"severity": "MAJOR",
"message": "Use an object spread instead of `Object.assign` eg: `{ ...foo }`.",
"component": "server/server/internal/metadata/index.ts",
"line": 94,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V52-GdRHfOsokVAb8&open=AZ-V52-GdRHfOsokVAb8"
},
{
"key": "AZ-V53dudRHfOsokVAhq",
"rule": "typescript:S4043",
"severity": "MAJOR",
"message": "Move this array \"sort\" operation to a separate statement or replace it with \"toSorted\".",
"component": "server/composables/current-page-engine.ts",
"line": 15,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53dudRHfOsokVAhq&open=AZ-V53dudRHfOsokVAhq"
},
{
"key": "AZ-V53o3dRHfOsokVAjG",
"rule": "typescript:S1854",
"severity": "MAJOR",
"message": "Remove this useless assignment to variable \"result\".",
"component": "desktop/main/pages/setup/server.vue",
"line": 97,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53o3dRHfOsokVAjG&open=AZ-V53o3dRHfOsokVAjG"
},
{
"key": "AZ-V53GJdRHfOsokVAdx",
"rule": "typescript:S2137",
"severity": "MAJOR",
"message": "Do not use \"globalThis\" to declare a variable - use another name.",
"component": "server/server/internal/db/database.ts",
"line": 10,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53GJdRHfOsokVAdx&open=AZ-V53GJdRHfOsokVAdx"
},
{
"key": "AZ-dRYBBZiQzo-vEe6fD",
"rule": "rust:S3776",
"severity": "CRITICAL",
"message": "Refactor this function to reduce its Cognitive Complexity from 21 to the 15 allowed.",
"component": "libraries/libarchive/src/writer.rs",
"line": 105,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-dRYBBZiQzo-vEe6fD&open=AZ-dRYBBZiQzo-vEe6fD"
}
]
} |
There was a problem hiding this comment.
Actionable comments posted: 12
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (2)
desktop/src-tauri/games/src/downloads/download_agent.rs (1)
419-456: 🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick winEarly error returns discard already-completed chunk progress before it's persisted.
Both the depot-selection failure (
Err(err) => return Err(err.into()), Line 424) and anycollect_output(...)?failure (Lines 428-434 and 454-456) return out ofrun()immediately, before reachingself.dropdata.set_contexts(&drop_data_chunks)/self.dropdata.write()(Lines 467-468). Any chunk that finished successfully earlier in this same call (accumulated inoutputs) is lost — on the next attempt, those chunks will be re-downloaded even though they already succeeded. This turns a single transient chunk failure into wasted bandwidth/time for the whole in-flight batch.Consider persisting
outputs/completed_chunkstodropdatabefore propagating the error (e.g., factor the write into a small helper invoked from both the success and error paths).Also applies to: 467-468
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@desktop/src-tauri/games/src/downloads/download_agent.rs` around lines 419 - 456, Ensure errors in depot selection and both collect_output paths persist already accumulated outputs before propagating. Refactor the dropdata context/write logic currently reached near set_contexts and write into a helper or equivalent cleanup path, invoke it on both success and error exits, and preserve the original error after persistence.desktop/src-tauri/games/src/downloads/download_logic.rs (1)
141-183: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick winSkip permission updates for files that aren't written.
set_file_permissions(...)still runs whenshould_writeis false, but those paths are never created in this branch. On Unix, that turns a skipped file into aset_permissionserror and aborts the chunk.Suggested fix
- set_file_permissions(file, &path, file_handle)?; + if should_write { + set_file_permissions(file, &path, file_handle)?; + }🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@desktop/src-tauri/games/src/downloads/download_logic.rs` around lines 141 - 183, Update the file-processing loop so set_file_permissions is called only when should_write is true and the file was actually opened/written. Preserve permission updates for written files while skipping them for files handled only by stream consumption.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@desktop/main/components/GameOptions/ProtonSelector.vue`:
- Line 81: Update the fallback list items in the ProtonSelector listbox,
including the one near line 81 and its counterpart near line 113, to render
through disabled ListboxOption components. Preserve their existing empty-state
text and styling while ensuring they cannot be selected.
In `@desktop/main/pages/settings/index.vue`:
- Around line 41-42: Update the get_autostart_enabled initialization in the
component setup to catch IPC failures before assigning autostartEnabled,
preserving its default value when invoke rejects so async setup does not fail
and the settings page still renders.
In `@desktop/optimize-appimage.sh`:
- Line 17: Update the wget invocation in optimize-appimage.sh to follow the
release URL’s redirect to the GitHub release asset by removing or adjusting the
--max-redirect=0 option. Preserve the existing output filename and download URL
so the subsequent chmod and execution steps continue using APPIMAGETOOL.
In `@desktop/src-tauri/games/src/downloads/download_agent.rs`:
- Around line 413-417: Update the completed-chunk branch in the download
processing loop to advance both progress handles by chunk_length, calling the
disk progress handle’s equivalent skip operation alongside dl_handle.skip. Keep
the existing continue behavior so already-completed chunks are not downloaded
again and both download and disk progress reach completion consistently.
- Around line 323-354: Update cleanup_filetree to normalize the relative
filename derived from each scanned path and the manifest keys to the same
separator-independent format before calling file_list.contains_key. Preserve the
existing .dropdata exclusion and deletion behavior after comparison.
- Around line 72-117: Reset the per-chunk progress state before each retry
attempt in process_single_chunk. Reinitialize or clear both dl_handle and
disk_handle immediately before calling download_game_chunk, so retries begin at
zero after an error while preserving normal success and failure handling.
In `@desktop/src-tauri/games/src/downloads/download_logic.rs`:
- Around line 184-187: Update the pause-handling branch in the download logic to
reset disk_progress alongside download_progress before returning. Keep the
existing paused return behavior unchanged and match the resets used by the
earlier pause checks.
In `@desktop/src-tauri/remote/src/utils.rs`:
- Around line 101-116: Update process_cert_file so read_to_end failures are
handled like File::open failures: log a warning with the certificate path and
read error, then return without processing that file. Remove the panic-based
unwrap_or_else while preserving normal certificate parsing for successful reads.
- Around line 40-63: Update the certificate-loading path that calls
File::read_to_end so read failures are handled as warnings rather than panics or
propagated initialization errors. Preserve successful certificate loading, but
skip the affected certificate and allow client/network initialization to
continue when reading an opened file fails.
In `@Dockerfile`:
- Line 26: Update the Dockerfile’s torrential-build stage to use a published
rustlang/rust image tag, replacing nightly-20260726-bookworm-slim with
nightly-bookworm-slim or another verified available tag.
In `@server/server/internal/metadata/pcgamingwiki.ts`:
- Line 340: Update the website string cleanup expression in the surrounding
metadata parsing function to use an equivalent bracket character class that does
not escape `[`, while preserving removal of both square brackets before
splitting and returning the first token.
In `@sites/promo/src/components/gallery-modal.tsx`:
- Line 135: Update the modal image rendered in the gallery modal to use
descriptive, non-empty alt text instead of alt="". Reuse the image’s available
metadata or provide a meaningful fallback so the dialog’s primary content
remains accessible to screen readers.
---
Outside diff comments:
In `@desktop/src-tauri/games/src/downloads/download_agent.rs`:
- Around line 419-456: Ensure errors in depot selection and both collect_output
paths persist already accumulated outputs before propagating. Refactor the
dropdata context/write logic currently reached near set_contexts and write into
a helper or equivalent cleanup path, invoke it on both success and error exits,
and preserve the original error after persistence.
In `@desktop/src-tauri/games/src/downloads/download_logic.rs`:
- Around line 141-183: Update the file-processing loop so set_file_permissions
is called only when should_write is true and the file was actually
opened/written. Preserve permission updates for written files while skipping
them for files handled only by stream consumption.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro Plus
Run ID: 3cc5e0f9-1c7b-4c2a-8ce2-af161a6bbeb1
⛔ Files ignored due to path filters (3)
libraries/libarchive/Cargo.lockis excluded by!**/*.locklibraries/native_model/Cargo.lockis excluded by!**/*.locklibraries/native_model/tests_crate/Cargo.lockis excluded by!**/*.lock
📒 Files selected for processing (27)
.github/workflows/e2e.ymlDockerfiledesktop/main/components/GameOptions/ProtonSelector.vuedesktop/main/pages/settings/index.vuedesktop/optimize-appimage.shdesktop/src-tauri/download_manager/src/download_manager_builder.rsdesktop/src-tauri/games/src/downloads/download_agent.rsdesktop/src-tauri/games/src/downloads/download_logic.rsdesktop/src-tauri/remote/src/utils.rsdesktop/src-tauri/src/lib.rslibraries/droplet/src/manifest.rsscripts/sonarcloud-sync.shserver/components/StoreView.vueserver/pages/store/[id]/index.vueserver/pages/user/[id]/index.vueserver/server/api/v1/client/game/[id]/versions.get.tsserver/server/internal/metadata/igdb.tsserver/server/internal/metadata/pcgamingwiki.tsserver/server/internal/metadata/steam.tsserver/server/internal/objects/fsBackend.tsserver/server/internal/objects/objectHandler.tsserver/server/internal/session/filter.tsserver/server/routes/auth/oidc.get.tssites/promo/src/components/comparison.tsxsites/promo/src/components/gallery-modal.tsxsites/promo/src/components/map.tsxsites/promo/src/components/sponsors.tsx
|
|
||
| APPIMAGETOOL=$(echo "obsolete-appimagetool-$ARCH.AppImage") | ||
| wget --content-disposition -O "$APPIMAGETOOL" "https://github.com/AppImage/AppImageKit/releases/download/13/$APPIMAGETOOL" | ||
| wget --content-disposition --max-redirect=0 -O "$APPIMAGETOOL" "https://github.com/AppImage/AppImageKit/releases/download/13/$APPIMAGETOOL" |
There was a problem hiding this comment.
🩺 Stability & Availability | 🔴 Critical | ⚡ Quick win
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
curl -sI -o /dev/null -w "%{http_code} -> %{redirect_url}\n" \
"https://github.com/AppImage/AppImageKit/releases/download/13/appimagetool-x86_64.AppImage"Repository: BillyOutlast/drop
Length of output: 163
🏁 Script executed:
#!/bin/bash
set -euo pipefail
printf '--- file outline ---\n'
wc -l desktop/optimize-appimage.sh
printf '\n--- file contents ---\n'
cat -n desktop/optimize-appimage.sh
printf '\n--- release URL probe ---\n'
curl -sI -L -o /dev/null -w 'final:%{http_code} redirect:%{redirect_url}\n' \
'https://github.com/AppImage/AppImageKit/releases/download/13/appimagetool-x86_64.AppImage'
printf '\n--- release asset page probe ---\n'
curl -sI -o /dev/null -w 'status:%{http_code} location:%{redirect_url}\n' \
'https://github.com/AppImage/AppImageKit/releases/tag/13'Repository: BillyOutlast/drop
Length of output: 246
🏁 Script executed:
#!/bin/bash
set -euo pipefail
python3 - <<'PY'
import urllib.request, urllib.error
url = 'https://github.com/AppImage/AppImageKit/releases/download/13/appimagetool-x86_64.AppImage'
req = urllib.request.Request(url, method='HEAD')
try:
with urllib.request.urlopen(req, timeout=20) as r:
print('status', r.status)
print('final_url', r.geturl())
print('headers_location', r.headers.get('Location'))
except urllib.error.HTTPError as e:
print('HTTPError', e.code)
print('final_url', e.geturl())
print('headers_location', e.headers.get('Location'))
PYRepository: BillyOutlast/drop
Length of output: 2749
🏁 Script executed:
#!/bin/bash
set -euo pipefail
cat /tmp/coderabbit-shell-logs/shell-output-8i8RlWRepository: BillyOutlast/drop
Length of output: 163
🏁 Script executed:
#!/bin/bash
set -euo pipefail
wc -l desktop/optimize-appimage.sh
sed -n '1,120p' desktop/optimize-appimage.shRepository: BillyOutlast/drop
Length of output: 952
🌐 Web query:
GitHub release asset download URLs redirect to objects.githubusercontent.com wget max-redirect
💡 Result:
When downloading GitHub release assets, GitHub typically redirects the request to an Amazon S3-backed URL hosted on objects.githubusercontent.com [1][2]. Because this is a standard HTTP 302 redirect, command-line tools like wget require specific flags to follow the redirect and handle the request correctly [2]. To download these assets successfully with wget, use the following approach: 1. Follow Redirects: Ensure wget is configured to follow the HTTP 302 redirect. Use the --max-redirect flag (e.g., --max-redirect=10) to allow wget to follow the chain to the final S3 URL [2]. 2. Handle Authentication: If you are downloading from a private repository, passing authentication tokens in the URL itself often fails because the token is stripped during the redirect to the CDN [2]. Instead, pass the authentication token via the HTTP header [2]: --header="Authorization: token <YOUR_PERSONAL_ACCESS_TOKEN>" 3. Fix Filenames: The redirect URL often includes complex query parameters (such as signatures and expiration timestamps), which can cause wget to save the file with an incorrect or overly long name [3]. Use the --content-disposition flag to force wget to use the filename provided in the server's Content-Disposition header [2]. Example command: wget --header="Authorization: token <YOUR_PAT>" --max-redirect=10 --content-disposition "https://github.com/owner/repo/releases/download/v1.0.0/asset.zip" If you encounter issues with certificate verification, ensure your ca-certificates are up to date [4]. Avoid using --no-check-certificate unless you are in a controlled environment and have exhausted other troubleshooting steps, as it bypasses critical security checks [4]. For complex workflows involving many assets or private repositories, using the GitHub CLI (gh) or curl (with -L for location/redirects) is often more robust than wget [2][5][6].
Citations:
- 1: https://stackoverflow.com/questions/25923939/how-do-i-download-binary-files-of-a-github-release
- 2: https://www.w3tutorials.net/blog/how-to-download-github-release-from-private-repo-using-command-line/
- 3: https://serverfault.com/questions/814157/how-to-use-wget-with-redirect-and-long-url
- 4: https://oscarchou.com/posts/troubleshoot/wget-unable-to-locally-verify-the-issuer-authority/
- 5: https://www.developerload.com/authorization-required-when-downloading-from-objectsgithubusercontentcom
- 6: https://gist.github.com/maxim/6e15aa45ba010ab030c4?permalink_comment_id=3812599
🏁 Script executed:
#!/bin/bash
set -euo pipefail
python3 - <<'PY'
import urllib.request
# Probe a known GitHub release asset pattern via HEAD, without following redirects.
url = 'https://github.com/octocat/Hello-World/releases/download/v1.0/hello_world.txt'
req = urllib.request.Request(url, method='HEAD')
opener = urllib.request.build_opener(urllib.request.HTTPRedirectHandler())
# Disable redirects to inspect the first hop.
class NoRedirect(urllib.request.HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
opener = urllib.request.build_opener(NoRedirect())
try:
resp = opener.open(req, timeout=20)
print('status', resp.status)
print('url', resp.geturl())
print('location', resp.headers.get('Location'))
except Exception as e:
print(type(e).__name__, e)
if hasattr(e, 'code'):
print('code', e.code)
if hasattr(e, 'headers'):
print('location', e.headers.get('Location'))
PYRepository: BillyOutlast/drop
Length of output: 298
🌐 Web query:
AppImageKit release 13 obsolete-appimagetool AppImage asset exists
💡 Result:
The assets labeled with the "obsolete-" prefix in the AppImageKit release 13 repository exist to clearly communicate that the software is deprecated and should no longer be used for new development [1][2][3]. The AppImage project intentionally renamed these binaries (e.g., obsolete-appimagetool-x86_64.AppImage) to prevent accidental continued use in CI/CD pipelines while maintaining enough backward compatibility to avoid breaking legacy build processes that might still rely on them [2]. Key points regarding this release: - Deprecation: The appimagetool provided within the AppImageKit repository is considered obsolete and is not actively supported [1][3]. - Migration: Developers are strongly advised to switch to the active appimagetool project, which is hosted in a separate repository at https://github.com/AppImage/appimagetool [1][2]. - Purpose of the Prefix: The "obsolete-" prefix serves as a warning to developers [1][2]. Because the project maintainers found that explicit warnings in release notes were often ignored, they renamed the assets to force an error in any CI workflow that expects the original filename [2]. If a workflow is unable to migrate, it can be updated to point to the renamed "obsolete-" files as a temporary fix, although this is discouraged [2].
Citations:
- 1: https://github.com/AppImage/AppImageKit/releases/tag/13
- 2: Writing in releases "DO NOT USE ANYMORE" is not enough, almost nobody will read it! AppImage/AppImageKit#1395
- 3: https://github.com/AppImage/AppImageKit/releases
🏁 Script executed:
#!/bin/bash
set -euo pipefail
url='https://github.com/AppImage/AppImageKit/releases/download/13/obsolete-appimagetool-x86_64.AppImage'
curl -sI -o /tmp/head.out -w 'status:%{http_code}\n' "$url" || true
cat /tmp/head.outRepository: BillyOutlast/drop
Length of output: 5331
--max-redirect=0 breaks this download. The AppImageKit release URL responds with a 302 to release-assets.githubusercontent.com, so wget will stop before fetching obsolete-appimagetool-$ARCH.AppImage, and the later chmod/./$APPIMAGETOOL step will fail.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@desktop/optimize-appimage.sh` at line 17, Update the wget invocation in
optimize-appimage.sh to follow the release URL’s redirect to the GitHub release
asset by removing or adjusting the --max-redirect=0 option. Preserve the
existing output filename and download URL so the subsequent chmod and execution
steps continue using APPIMAGETOOL.
| async fn process_single_chunk( | ||
| metadata_id: String, | ||
| version_id: String, | ||
| chunk_id: String, | ||
| depot: String, | ||
| key: [u8; 16], | ||
| chunk_data: ChunkData, | ||
| file_list: HashMap<String, String>, | ||
| base_path: PathBuf, | ||
| control_flag: DownloadThreadControl, | ||
| dl_handle: ProgressHandle, | ||
| disk_handle: ProgressHandle, | ||
| permit: impl std::ops::Drop, | ||
| ) -> Result<Option<String>, ApplicationDownloadError> { | ||
| for i in 0..RETRY_COUNT { | ||
| match download_game_chunk( | ||
| &metadata_id, | ||
| &version_id, | ||
| &chunk_id, | ||
| &depot, | ||
| &key, | ||
| &chunk_data, | ||
| &file_list, | ||
| &base_path, | ||
| &control_flag, | ||
| &dl_handle, | ||
| &disk_handle, | ||
| ) | ||
| .await | ||
| { | ||
| Ok(true) => { | ||
| drop(permit); | ||
| return Ok(Some(chunk_id)); | ||
| } | ||
| Ok(false) => return Ok(None), | ||
| Err(e) => { | ||
| warn!("got error for chunk id {}: {e:?}", chunk_id); | ||
| if i == RETRY_COUNT - 1 { | ||
| warn!("retry logic failed, not re-attempting."); | ||
| return Err(e); | ||
| } | ||
| } | ||
| } | ||
| } | ||
| Ok(None) | ||
| } |
There was a problem hiding this comment.
🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
set -euo pipefail
# Map relevant files and inspect the retry/progress code paths.
git ls-files 'desktop/src-tauri/games/src/downloads/**' | sed 's#^`#FILE` #'
echo
ast-grep outline desktop/src-tauri/games/src/downloads/download_agent.rs --view expanded || true
echo
ast-grep outline desktop/src-tauri/games/src/downloads/download_logic.rs --view expanded || true
echo
ast-grep outline desktop/src-tauri/games/src/downloads/*progress* --view expanded || trueRepository: BillyOutlast/drop
Length of output: 3557
🏁 Script executed:
#!/bin/bash
set -euo pipefail
sed -n '1,220p' desktop/src-tauri/games/src/downloads/download_agent.rs | cat -n
echo
sed -n '1,260p' desktop/src-tauri/games/src/downloads/download_logic.rs | cat -n
echo
rg -n "struct ProgressHandle|impl ProgressHandle|ProgressHandle" desktop/src-tauri/games/src/downloads -g '*.rs'Repository: BillyOutlast/drop
Length of output: 17279
🏁 Script executed:
#!/bin/bash
set -euo pipefail
echo "=== download_agent.rs ==="
sed -n '1,220p' desktop/src-tauri/games/src/downloads/download_agent.rs | cat -n
echo
echo "=== download_logic.rs ==="
sed -n '1,340p' desktop/src-tauri/games/src/downloads/download_logic.rs | cat -n
echo
echo "=== progress handle references ==="
rg -n "struct ProgressHandle|impl ProgressHandle|fn .*progress|add.*progress|reset.*progress|set.*progress|ProgressHandle" desktop/src-tauri/games/src/downloads -g '*.rs'Repository: BillyOutlast/drop
Length of output: 17966
🏁 Script executed:
#!/bin/bash
set -euo pipefail
# Locate ProgressObject / ProgressHandle implementation and inspect behavior.
rg -n "struct ProgressObject|struct ProgressHandle|impl ProgressHandle|fn add\\(|fn set\\(|fn get\\(" . -g '*.rs'
echo
fd -a 'progress_object.rs' .
echo
# If the implementation is in a workspace crate, print it with line numbers.
for f in $(fd -a 'progress_object.rs' .); do
echo "=== $f ==="
sed -n '1,260p' "$f" | cat -n
echo
doneRepository: BillyOutlast/drop
Length of output: 8228
🏁 Script executed:
#!/bin/bash
set -euo pipefail
# Inspect the exact lines where chunk progress handles are created and consumed.
sed -n '360,430p' desktop/src-tauri/games/src/downloads/download_agent.rs | cat -n
echo
sed -n '1,240p' desktop/src-tauri/games/src/downloads/download_agent.rs | cat -nRepository: BillyOutlast/drop
Length of output: 12699
🏁 Script executed:
#!/bin/bash
set -euo pipefail
# Inspect progress object semantics and all call sites that mutate progress.
rg -n "struct ProgressObject|struct ProgressHandle|impl ProgressHandle|impl ProgressObject|pub fn add\\(|pub fn set\\(|pub fn get\\(" . -g '*.rs'
echo
for f in $(rg -l "struct ProgressObject|struct ProgressHandle|impl ProgressHandle|impl ProgressObject|pub fn add\\(|pub fn set\\(|pub fn get\\(" . -g '*.rs'); do
echo "=== $f ==="
sed -n '1,260p' "$f" | cat -n
echo
doneRepository: BillyOutlast/drop
Length of output: 21809
🏁 Script executed:
#!/bin/bash
set -euo pipefail
# Inspect handle creation and whether a fresh handle is created per chunk attempt or per chunk only.
sed -n '388,430p' desktop/src-tauri/games/src/downloads/download_agent.rs | cat -n
echo
sed -n '430,470p' desktop/src-tauri/games/src/downloads/download_agent.rs | cat -nRepository: BillyOutlast/drop
Length of output: 3873
🏁 Script executed:
#!/bin/bash
set -euo pipefail
# Locate the download_manager crate source and inspect its progress types if present in-tree.
git ls-files | rg '(^|/)download_manager/|progress_object|Cargo.toml$'
echo
rg -n 'name *= *"download_manager"|progress_object|ProgressObject|ProgressHandle' Cargo.toml **/Cargo.toml -g '!target' || trueRepository: BillyOutlast/drop
Length of output: 1616
Reset the per-chunk progress handles before each retry. ProgressHandle::add just increments an AtomicUsize, and the retry loop reuses the same dl_handle/disk_handle after an Err. If a chunk fails mid-read/write, the next attempt can start from stale progress and over-report completion.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@desktop/src-tauri/games/src/downloads/download_agent.rs` around lines 72 -
117, Reset the per-chunk progress state before each retry attempt in
process_single_chunk. Reinitialize or clear both dl_handle and disk_handle
immediately before calling download_game_chunk, so retries begin at zero after
an error while preserving normal success and failure handling.
| fn cleanup_filetree( | ||
| base_path: &Path, | ||
| file_list: &HashMap<String, String>, | ||
| ) -> Result<(), io::Error> { | ||
| let current_file_tree = Self::scan_filetree_static(base_path)?; | ||
| for file in current_file_tree { | ||
| let filename = file | ||
| .strip_prefix(base_path) | ||
| .map_err(|_| io::Error::new(io::ErrorKind::InvalidData, "strip_prefix failed"))? | ||
| .to_string_lossy() | ||
| .to_string(); | ||
| if !file_list.contains_key(&filename) && filename != ".dropdata" { | ||
| debug!("deleted {}", file.display()); | ||
| remove_file(file)?; | ||
| } | ||
| } | ||
| Ok(()) | ||
| } | ||
|
|
||
| fn scan_filetree_static(path: &Path) -> Result<Vec<PathBuf>, io::Error> { | ||
| if !path.is_dir() { | ||
| return Ok(vec![path.into()]); | ||
| } | ||
| let subdirs = path.read_dir()?; | ||
| let mut results = Vec::new(); | ||
| for subdir in subdirs { | ||
| let subdir = subdir?; | ||
| let subfiles = Self::scan_filetree_static(&subdir.path())?; | ||
| results.extend(subfiles); | ||
| } | ||
| Ok(results) | ||
| } |
There was a problem hiding this comment.
🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
# Check how file_list / FileEntry.filename paths are constructed/stored (server manifest vs local FS keys)
rg -n "file_list" -g '*.rs' -A3 -B3 desktop libraries
rg -n "\"/\"|'/'" libraries/droplet/src -nRepository: BillyOutlast/drop
Length of output: 7510
🏁 Script executed:
#!/bin/bash
set -euo pipefail
# Inspect how chunk/file paths are represented and whether any normalization already exists.
sed -n '1,220p' desktop/src-tauri/games/src/downloads/download_logic.rs
printf '\n---\n'
sed -n '1,220p' desktop/src-tauri/games/src/downloads/download_agent.rs
printf '\n=== path-related occurrences ===\n'
rg -n "replace\\('\\\\\\\\', \"/\"|replace\\('/', \"\\\\\\\\\"|to_string_lossy\\(|strip_prefix\\(|file\\.filename|filename" desktop/src-tauri/games/src/downloads -A2 -B2
printf '\n=== cfg / target hints ===\n'
rg -n "#\\[cfg\\(|target_os|windows|unix" desktop/src-tauri/games/src/downloads desktop/src-tauri -g '*.rs' -A2 -B2Repository: BillyOutlast/drop
Length of output: 37577
🏁 Script executed:
#!/bin/bash
set -euo pipefail
# Find where FileEntry / ChunkData filenames are defined and serialized.
rg -n "struct FileEntry|struct ChunkData|filename:|file_list|Manifest" -g '*.rs' desktop/src-tauri libraries
printf '\n=== droplet_types locations ===\n'
fd -a 'droplet_types' .Repository: BillyOutlast/drop
Length of output: 4297
🏁 Script executed:
#!/bin/bash
set -euo pipefail
printf '=== libraries/droplet/src/versions/path_backend.rs ===\n'
sed -n '1,180p' libraries/droplet/src/versions/path_backend.rs
printf '\n=== libraries/droplet/src/versions/archive_backend.rs ===\n'
sed -n '1,180p' libraries/droplet/src/versions/archive_backend.rs
printf '\n=== libraries/droplet/src/manifest.rs relevant slice ===\n'
sed -n '240,320p' libraries/droplet/src/manifest.rs
printf '\n=== droplet_types src/lib.rs ===\n'
sed -n '1,120p' libraries/droplet_types/src/lib.rsRepository: BillyOutlast/drop
Length of output: 9338
🏁 Script executed:
#!/bin/bash
set -euo pipefail
printf '=== VersionBackend implementors and selection ===\n'
rg -n "impl VersionBackend for|PathVersionBackend|ZipVersionBackend|require_whole_files|peek_file\\(" libraries/droplet/src -A4 -B4
printf '\n=== platform selection / backend wiring ===\n'
rg -n "PathVersionBackend::new|ZipVersionBackend::new|VersionBackend" libraries/droplet/src -A4 -B4Repository: BillyOutlast/drop
Length of output: 19226
Normalize cleanup paths before deleting files. cleanup_filetree compares raw filesystem paths against manifest keys, so backend-dependent separators (\ vs /) can make valid files look stale and get removed; normalize both sides to the same relative format before calling contains_key.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@desktop/src-tauri/games/src/downloads/download_agent.rs` around lines 323 -
354, Update cleanup_filetree to normalize the relative filename derived from
each scanned path and the manifest keys to the same separator-independent format
before calling file_list.contains_key. Preserve the existing .dropdata exclusion
and deletion behavior after comparison.
| ### BUILD TORRENTIAL | ||
| # Bookworm-pinned to match the runtime image's glibc (a trixie build would not run on bookworm). | ||
| FROM rustlang/rust:nightly-bookworm-slim AS torrential-build | ||
| FROM rustlang/rust:nightly-20260726-bookworm-slim AS torrential-build |
There was a problem hiding this comment.
🩺 Stability & Availability | 🟠 Major | ⚡ Quick win
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
curl -s "https://hub.docker.com/v2/repositories/rustlang/rust/tags/nightly-20260726-bookworm-slim/" | head -c 500
echo
curl -s "https://hub.docker.com/v2/repositories/rustlang/rust/tags/nightly-bookworm-slim/" | head -c 200Repository: BillyOutlast/drop
Length of output: 525
Use a published rustlang/rust tag here
rustlang/rust:nightly-20260726-bookworm-slim does not exist, so this stage will fail to pull. Switch back to rustlang/rust:nightly-bookworm-slim or another published tag.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@Dockerfile` at line 26, Update the Dockerfile’s torrential-build stage to use
a published rustlang/rust image tag, replacing nightly-20260726-bookworm-slim
with nightly-bookworm-slim or another verified available tag.
SonarCloud AnalysisSummary
Total: 53 issues Top Issues
TrackingNo existing GitHub issues found for these findings. Run Full analysis: SonarCloud Dashboard 📋 JSON Summary (for AI agents){
"project": "BillyOutlast_drop",
"pullRequest": 108,
"qualityGate": {
"gateStatus": "ERROR",
"failedConditions": [
{
"metric": "new_coverage",
"actual": "0.0",
"threshold": "80"
}
]
},
"filesNeedingCoverage": [
{
"file": "server/server/internal/config/application-configuration.ts",
"coverage": "0.0",
"uncovered": "0"
},
{
"file": "sites/promo/src/components/comparison.tsx",
"coverage": "0.0",
"uncovered": "0"
},
{
"file": "server/server/internal/session/filter.ts",
"coverage": "0.0",
"uncovered": "0"
},
{
"file": "server/server/internal/metadata/igdb.ts",
"coverage": "0.0",
"uncovered": "0"
},
{
"file": "server/server/internal/auth/base32/index.js",
"coverage": "0.0",
"uncovered": "0"
}
],
"totalIssues": 53,
"summary": {
"blocker": 0,
"critical": 11,
"major": 42
},
"issues": [
{
"key": "AZ-hG_6o_7iyvaG2TeIu",
"rule": "typescript:S3776",
"severity": "CRITICAL",
"message": "Refactor this function to reduce its Cognitive Complexity from 16 to the 15 allowed.",
"component": "server/server/internal/session/filter.ts",
"line": 10,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-hG_6o_7iyvaG2TeIu&open=AZ-hG_6o_7iyvaG2TeIu"
},
{
"key": "AZ-hHArD_7iyvaG2TeIw",
"rule": "typescript:S6851",
"severity": "MAJOR",
"message": "Redundant alt attribute. Screen-readers already announce `img` tags as an image. You don’t need to use the words `image`, `photo,` or `picture` (or any specified custom words) in the alt prop.",
"component": "sites/promo/src/components/gallery-modal.tsx",
"line": 135,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-hHArD_7iyvaG2TeIw&open=AZ-hHArD_7iyvaG2TeIw"
},
{
"key": "AZ-gksvtpI4t_4jmejj6",
"rule": "shelldre:S131",
"severity": "CRITICAL",
"message": "Add a default case (*) to handle unexpected values.",
"component": "scripts/sonarcloud-sync.sh",
"line": 306,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-gksvtpI4t_4jmejj6&open=AZ-gksvtpI4t_4jmejj6"
},
{
"key": "AZ-gA2474r4tYZa_Yi7e",
"rule": "typescript:S2004",
"severity": "CRITICAL",
"message": "Refactor this code to not nest functions more than 4 levels deep.",
"component": "sites/promo/src/components/comparison.tsx",
"line": 450,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-gA2474r4tYZa_Yi7e&open=AZ-gA2474r4tYZa_Yi7e"
},
{
"key": "AZ-c83VBnUgmSfWQkp2r",
"rule": "typescript:S8987",
"severity": "MAJOR",
"message": "Move this `v-if` to a parent element.",
"component": "desktop/main/components/GameOptions/ProtonSelector.vue",
"line": 73,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-c83VBnUgmSfWQkp2r&open=AZ-c83VBnUgmSfWQkp2r"
},
{
"key": "AZ-c83VBnUgmSfWQkp2s",
"rule": "typescript:S8987",
"severity": "MAJOR",
"message": "Move this `v-if` to a parent element.",
"component": "desktop/main/components/GameOptions/ProtonSelector.vue",
"line": 112,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-c83VBnUgmSfWQkp2s&open=AZ-c83VBnUgmSfWQkp2s"
},
{
"key": "AZ-YTBgzecfn39edgquG",
"rule": "typescript:S8786",
"severity": "MAJOR",
"message": "Simplify this regular expression to reduce its runtime, as it has super-linear performance due to backtracking.",
"component": "server/server/internal/metadata/steam.ts",
"line": 649,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-YTBgzecfn39edgquG&open=AZ-YTBgzecfn39edgquG"
},
{
"key": "AZ-YTCWiecfn39edgquP",
"rule": "typescript:S6772",
"severity": "MAJOR",
"message": "Ambiguous spacing after previous element img",
"component": "sites/promo/src/components/comparison.tsx",
"line": 54,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-YTCWiecfn39edgquP&open=AZ-YTCWiecfn39edgquP"
},
{
"key": "AZ-WZn8wL3IEMbakOkCg",
"rule": "githubactions:S6505",
"severity": "MAJOR",
"message": "Omitting \"--ignore-scripts\" allows lifecycle scripts to run during package installation.",
"component": ".github/workflows/e2e.yml",
"line": 64,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-WZn8wL3IEMbakOkCg&open=AZ-WZn8wL3IEMbakOkCg"
},
{
"key": "AZ-dRYQYZiQzo-vEe6fH",
"rule": "rust:S3776",
"severity": "CRITICAL",
"message": "Refactor this function to reduce its Cognitive Complexity from 29 to the 15 allowed.",
"component": "desktop/src-tauri/src/lib.rs",
"line": 205,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-dRYQYZiQzo-vEe6fH&open=AZ-dRYQYZiQzo-vEe6fH"
},
{
"key": "AZ-V531cdRHfOsokVAlP",
"rule": "docker:S8549",
"severity": "MAJOR",
"message": "Using dependencies without locking resolved versions is security-sensitive.",
"component": "Dockerfile",
"line": 37,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V531cdRHfOsokVAlP&open=AZ-V531cdRHfOsokVAlP"
},
{
"key": "AZ-dRYE2ZiQzo-vEe6fE",
"rule": "rust:S3776",
"severity": "CRITICAL",
"message": "Refactor this function to reduce its Cognitive Complexity from 24 to the 15 allowed.",
"component": "libraries/droplet/src/manifest.rs",
"line": 82,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-dRYE2ZiQzo-vEe6fE&open=AZ-dRYE2ZiQzo-vEe6fE"
},
{
"key": "AZ-V530UdRHfOsokVAk8",
"rule": "text:S8570",
"severity": "MAJOR",
"message": "Dependency versions are not predictable if the lock file (Cargo.lock) is missing.",
"component": "libraries/libarchive/Cargo.toml",
"line": null,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V530UdRHfOsokVAk8&open=AZ-V530UdRHfOsokVAk8"
},
{
"key": "AZ-dRYOlZiQzo-vEe6fF",
"rule": "rust:S3776",
"severity": "CRITICAL",
"message": "Refactor this function to reduce its Cognitive Complexity from 38 to the 15 allowed.",
"component": "desktop/src-tauri/games/src/downloads/download_agent.rs",
"line": 276,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-dRYOlZiQzo-vEe6fF&open=AZ-dRYOlZiQzo-vEe6fF"
},
{
"key": "AZ-dRYOzZiQzo-vEe6fG",
"rule": "rust:S3776",
"severity": "CRITICAL",
"message": "Refactor this function to reduce its Cognitive Complexity from 22 to the 15 allowed.",
"component": "desktop/src-tauri/games/src/downloads/download_logic.rs",
"line": 32,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-dRYOzZiQzo-vEe6fG&open=AZ-dRYOzZiQzo-vEe6fG"
},
{
"key": "AZ-dRYTRZiQzo-vEe6fJ",
"rule": "rust:S3776",
"severity": "CRITICAL",
"message": "Refactor this function to reduce its Cognitive Complexity from 20 to the 15 allowed.",
"component": "desktop/src-tauri/remote/src/utils.rs",
"line": 41,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-dRYTRZiQzo-vEe6fJ&open=AZ-dRYTRZiQzo-vEe6fJ"
},
{
"key": "AZ-dRYRpZiQzo-vEe6fI",
"rule": "rust:S3776",
"severity": "CRITICAL",
"message": "Refactor this function to reduce its Cognitive Complexity from 21 to the 15 allowed.",
"component": "desktop/src-tauri/download_manager/src/download_manager_builder.rs",
"line": 227,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-dRYRpZiQzo-vEe6fI&open=AZ-dRYRpZiQzo-vEe6fI"
},
{
"key": "AZ-V53JddRHfOsokVAeS",
"rule": "typescript:S4782",
"severity": "MAJOR",
"message": "Consider removing 'undefined' type or '?' specifier, one of them is redundant.",
"component": "server/server/api/v1/client/game/[id]/versions.get.ts",
"line": 11,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53JddRHfOsokVAeS&open=AZ-V53JddRHfOsokVAeS"
},
{
"key": "AZ-V53JddRHfOsokVAeT",
"rule": "typescript:S4782",
"severity": "MAJOR",
"message": "Consider removing 'undefined' type or '?' specifier, one of them is redundant.",
"component": "server/server/api/v1/client/game/[id]/versions.get.ts",
"line": 12,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53JddRHfOsokVAeT&open=AZ-V53JddRHfOsokVAeT"
},
{
"key": "AZ-V525XdRHfOsokVAbG",
"rule": "typescript:S6564",
"severity": "MAJOR",
"message": "Remove this redundant type alias and replace its occurrences with \"V2Manifest\".",
"component": "server/server/internal/library/manifest/utils.ts",
"line": 3,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V525XdRHfOsokVAbG&open=AZ-V525XdRHfOsokVAbG"
},
{
"key": "AZ-hHASC_7iyvaG2TeIv",
"rule": "Web:S6851",
"severity": "MAJOR",
"message": "Remove redundant word \"picture\" from the \"alt\" attribute of your \"img\" tag.",
"component": "server/pages/user/[id]/index.vue",
"line": 4,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-hHASC_7iyvaG2TeIv&open=AZ-hHASC_7iyvaG2TeIv"
},
{
"key": "AZ-V53uedRHfOsokVAkr",
"rule": "text:S8570",
"severity": "MAJOR",
"message": "Dependency versions are not predictable if the lock file (Cargo.lock) is missing.",
"component": "libraries/native_model/Cargo.toml",
"line": null,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53uedRHfOsokVAkr&open=AZ-V53uedRHfOsokVAkr"
},
{
"key": "AZ-dRYTRZiQzo-vEe6fK",
"rule": "rust:S3776",
"severity": "CRITICAL",
"message": "Refactor this function to reduce its Cognitive Complexity from 19 to the 15 allowed.",
"component": "desktop/src-tauri/remote/src/utils.rs",
"line": 96,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-dRYTRZiQzo-vEe6fK&open=AZ-dRYTRZiQzo-vEe6fK"
},
{
"key": "AZ-V52-SdRHfOsokVAcM",
"rule": "typescript:S8786",
"severity": "MAJOR",
"message": "Simplify this regular expression to reduce its runtime, as it has super-linear performance due to backtracking.",
"component": "server/server/internal/metadata/steam.ts",
"line": 921,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V52-SdRHfOsokVAcM&open=AZ-V52-SdRHfOsokVAcM"
},
{
"key": "AZ-V52-SdRHfOsokVAcO",
"rule": "typescript:S8786",
"severity": "MAJOR",
"message": "Simplify this regular expression to reduce its runtime, as it has super-linear performance due to backtracking.",
"component": "server/server/internal/metadata/steam.ts",
"line": 1013,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V52-SdRHfOsokVAcO&open=AZ-V52-SdRHfOsokVAcO"
},
{
"key": "AZ-V52-SdRHfOsokVAcP",
"rule": "typescript:S8786",
"severity": "MAJOR",
"message": "Simplify this regular expression to reduce its runtime, as it has super-linear performance due to backtracking.",
"component": "server/server/internal/metadata/steam.ts",
"line": 1016,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V52-SdRHfOsokVAcP&open=AZ-V52-SdRHfOsokVAcP"
},
{
"key": "AZ-V52-SdRHfOsokVAcS",
"rule": "typescript:S8786",
"severity": "MAJOR",
"message": "Simplify this regular expression to reduce its runtime, as it has super-linear performance due to backtracking.",
"component": "server/server/internal/metadata/steam.ts",
"line": 1110,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V52-SdRHfOsokVAcS&open=AZ-V52-SdRHfOsokVAcS"
},
{
"key": "AZ-V53sndRHfOsokVAkD",
"rule": "typescript:S6772",
"severity": "MAJOR",
"message": "Ambiguous spacing after previous element span",
"component": "sites/promo/src/components/comparison.tsx",
"line": 259,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53sndRHfOsokVAkD&open=AZ-V53sndRHfOsokVAkD"
},
{
"key": "AZ-V53sndRHfOsokVAkG",
"rule": "typescript:S6479",
"severity": "MAJOR",
"message": "Do not use Array index in keys",
"component": "sites/promo/src/components/comparison.tsx",
"line": 310,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53sndRHfOsokVAkG&open=AZ-V53sndRHfOsokVAkG"
},
{
"key": "AZ-V53sndRHfOsokVAkI",
"rule": "typescript:S7721",
"severity": "MAJOR",
"message": "Move function 'onlyUnique' to the outer scope.",
"component": "sites/promo/src/components/comparison.tsx",
"line": 330,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53sndRHfOsokVAkI&open=AZ-V53sndRHfOsokVAkI"
},
{
"key": "AZ-V53radRHfOsokVAju",
"rule": "typescript:S2137",
"severity": "MAJOR",
"message": "Do not use \"Map\" to declare a function - use another name.",
"component": "sites/promo/src/components/map.tsx",
"line": 53,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53radRHfOsokVAju&open=AZ-V53radRHfOsokVAju"
},
{
"key": "AZ-V53qadRHfOsokVAja",
"rule": "typescript:S1763",
"severity": "MAJOR",
"message": "Unreachable code.",
"component": "sites/promo/src/components/sponsors.tsx",
"line": 101,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53qadRHfOsokVAja&open=AZ-V53qadRHfOsokVAja"
},
{
"key": "AZ-V53qadRHfOsokVAjc",
"rule": "typescript:S6479",
"severity": "MAJOR",
"message": "Do not use Array index in keys",
"component": "sites/promo/src/components/sponsors.tsx",
"line": 245,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53qadRHfOsokVAjc&open=AZ-V53qadRHfOsokVAjc"
},
{
"key": "AZ-V53qadRHfOsokVAje",
"rule": "typescript:S6479",
"severity": "MAJOR",
"message": "Do not use Array index in keys",
"component": "sites/promo/src/components/sponsors.tsx",
"line": 262,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53qadRHfOsokVAje&open=AZ-V53qadRHfOsokVAje"
},
{
"key": "AZ-V53wAdRHfOsokVAks",
"rule": "text:S8570",
"severity": "MAJOR",
"message": "Dependency versions are not predictable if the lock file (Cargo.lock) is missing.",
"component": "libraries/native_model/native_model_macro/Cargo.toml",
"line": null,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53wAdRHfOsokVAks&open=AZ-V53wAdRHfOsokVAks"
},
{
"key": "AZ-V53pudRHfOsokVAjP",
"rule": "shell:S6506",
"severity": "MAJOR",
"message": "Not disabling redirects might allow for redirections to insecure websites. Make sure it is safe here.",
"component": "desktop/optimize-appimage.sh",
"line": 17,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53pudRHfOsokVAjP&open=AZ-V53pudRHfOsokVAjP"
},
{
"key": "AZ-V53TVdRHfOsokVAfi",
"rule": "typescript:S3358",
"severity": "MAJOR",
"message": "Extract this nested ternary operation into an independent statement.",
"component": "server/components/StoreView.vue",
"line": 465,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53TVdRHfOsokVAfi&open=AZ-V53TVdRHfOsokVAfi"
},
{
"key": "AZ-V53zOdRHfOsokVAk7",
"rule": "text:S8570",
"severity": "MAJOR",
"message": "Dependency versions are not predictable if the lock file (Cargo.lock) is missing.",
"component": "libraries/native_model/tests_crate/Cargo.toml",
"line": null,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53zOdRHfOsokVAk7&open=AZ-V53zOdRHfOsokVAk7"
},
{
"key": "AZ-V53MYdRHfOsokVAes",
"rule": "typescript:S4624",
"severity": "MAJOR",
"message": "Refactor this code to not use nested template literals.",
"component": "server/server/routes/auth/oidc.get.ts",
"line": 18,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53MYdRHfOsokVAes&open=AZ-V53MYdRHfOsokVAes"
},
{
"key": "AZ-V528odRHfOsokVAbs",
"rule": "typescript:S1751",
"severity": "MAJOR",
"message": "Invalid loop. Its body allows only one iteration.",
"component": "server/server/internal/metadata/igdb.ts",
"line": 654,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V528odRHfOsokVAbs&open=AZ-V528odRHfOsokVAbs"
},
{
"key": "AZ-V5298dRHfOsokVAby",
"rule": "typescript:S6035",
"severity": "MAJOR",
"message": "Replace this alternation with a character class.",
"component": "server/server/internal/metadata/pcgamingwiki.ts",
"line": 340,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V5298dRHfOsokVAby&open=AZ-V5298dRHfOsokVAby"
},
{
"key": "AZ-V53l8dRHfOsokVAi6",
"rule": "typescript:S7785",
"severity": "MAJOR",
"message": "Prefer top-level await over using a promise chain.",
"component": "desktop/main/pages/settings/index.vue",
"line": 45,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53l8dRHfOsokVAi6&open=AZ-V53l8dRHfOsokVAi6"
},
{
"key": "AZ-V53FhdRHfOsokVAdj",
"rule": "typescript:S4043",
"severity": "MAJOR",
"message": "Move this array \"sort\" operation to a separate statement or replace it with \"toSorted\".",
"component": "server/server/internal/utils/prioritylist.ts",
"line": 32,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53FhdRHfOsokVAdj&open=AZ-V53FhdRHfOsokVAdj"
},
{
"key": "AZ-V53AVdRHfOsokVAcb",
"rule": "typescript:S6564",
"severity": "MAJOR",
"message": "Remove this redundant type alias and replace its occurrences with \"string\".",
"component": "server/server/internal/objects/objectHandler.ts",
"line": 24,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53AVdRHfOsokVAcb&open=AZ-V53AVdRHfOsokVAcb"
},
{
"key": "AZ-V53aQdRHfOsokVAhI",
"rule": "typescript:S8786",
"severity": "MAJOR",
"message": "Simplify this regular expression to reduce its runtime, as it has super-linear performance due to backtracking.",
"component": "server/pages/admin/users/auth/simple/index.vue",
"line": 452,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53aQdRHfOsokVAhI&open=AZ-V53aQdRHfOsokVAhI"
},
{
"key": "AZ-V53c5dRHfOsokVAhe",
"rule": "Web:S5256",
"severity": "MAJOR",
"message": "Add \"<th>\" headers to this \"<table>\".",
"component": "server/pages/store/[id]/index.vue",
"line": 54,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53c5dRHfOsokVAhe&open=AZ-V53c5dRHfOsokVAhe"
},
{
"key": "AZ-V53pcdRHfOsokVAjN",
"rule": "typescript:S4043",
"severity": "MAJOR",
"message": "Move this array \"sort\" operation to a separate statement or replace it with \"toSorted\".",
"component": "desktop/main/composables/current-page-engine.ts",
"line": 16,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53pcdRHfOsokVAjN&open=AZ-V53pcdRHfOsokVAjN"
},
{
"key": "AZ-V525hdRHfOsokVAbO",
"rule": "typescript:S4043",
"severity": "MAJOR",
"message": "Move this array \"sort\" operation to a separate statement or replace it with \"toSorted\".",
"component": "server/server/internal/library/index.ts",
"line": 381,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V525hdRHfOsokVAbO&open=AZ-V525hdRHfOsokVAbO"
},
{
"key": "AZ-V52-GdRHfOsokVAb8",
"rule": "typescript:S6661",
"severity": "MAJOR",
"message": "Use an object spread instead of `Object.assign` eg: `{ ...foo }`.",
"component": "server/server/internal/metadata/index.ts",
"line": 94,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V52-GdRHfOsokVAb8&open=AZ-V52-GdRHfOsokVAb8"
},
{
"key": "AZ-V53dudRHfOsokVAhq",
"rule": "typescript:S4043",
"severity": "MAJOR",
"message": "Move this array \"sort\" operation to a separate statement or replace it with \"toSorted\".",
"component": "server/composables/current-page-engine.ts",
"line": 15,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53dudRHfOsokVAhq&open=AZ-V53dudRHfOsokVAhq"
},
{
"key": "AZ-V53o3dRHfOsokVAjG",
"rule": "typescript:S1854",
"severity": "MAJOR",
"message": "Remove this useless assignment to variable \"result\".",
"component": "desktop/main/pages/setup/server.vue",
"line": 97,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53o3dRHfOsokVAjG&open=AZ-V53o3dRHfOsokVAjG"
},
{
"key": "AZ-V53GJdRHfOsokVAdx",
"rule": "typescript:S2137",
"severity": "MAJOR",
"message": "Do not use \"globalThis\" to declare a variable - use another name.",
"component": "server/server/internal/db/database.ts",
"line": 10,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53GJdRHfOsokVAdx&open=AZ-V53GJdRHfOsokVAdx"
},
{
"key": "AZ-dRYBBZiQzo-vEe6fD",
"rule": "rust:S3776",
"severity": "CRITICAL",
"message": "Refactor this function to reduce its Cognitive Complexity from 21 to the 15 allowed.",
"component": "libraries/libarchive/src/writer.rs",
"line": 105,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-dRYBBZiQzo-vEe6fD&open=AZ-dRYBBZiQzo-vEe6fD"
}
]
} |
- Dockerfile: revert to valid nightly-bookworm-slim tag - optimize-appimage.sh: remove --max-redirect=0 (breaks wget) - gallery-modal.tsx: use descriptive alt text - ProtonSelector.vue: render fallback items as disabled ListboxOption - settings/index.vue: catch IPC failures to preserve default value - download_agent.rs: skip disk_handle alongside dl_handle for completed chunks - download_logic.rs: reset disk_progress on pause - remote/src/utils.rs: warn on read_to_end failures instead of panic
|
SonarCloud AnalysisSummary
Total: 53 issues Top Issues
TrackingNo existing GitHub issues found for these findings. Run Full analysis: SonarCloud Dashboard 📋 JSON Summary (for AI agents){
"project": "BillyOutlast_drop",
"pullRequest": 108,
"qualityGate": {
"gateStatus": "ERROR",
"failedConditions": [
{
"metric": "new_coverage",
"actual": "0.0",
"threshold": "80"
}
]
},
"filesNeedingCoverage": [
{
"file": "server/server/internal/config/application-configuration.ts",
"coverage": "0.0",
"uncovered": "0"
},
{
"file": "sites/promo/src/components/comparison.tsx",
"coverage": "0.0",
"uncovered": "0"
},
{
"file": "server/server/internal/session/filter.ts",
"coverage": "0.0",
"uncovered": "0"
},
{
"file": "server/server/internal/metadata/igdb.ts",
"coverage": "0.0",
"uncovered": "0"
},
{
"file": "server/server/internal/auth/base32/index.js",
"coverage": "0.0",
"uncovered": "0"
}
],
"totalIssues": 53,
"summary": {
"blocker": 0,
"critical": 11,
"major": 42
},
"issues": [
{
"key": "AZ-hG_6o_7iyvaG2TeIu",
"rule": "typescript:S3776",
"severity": "CRITICAL",
"message": "Refactor this function to reduce its Cognitive Complexity from 16 to the 15 allowed.",
"component": "server/server/internal/session/filter.ts",
"line": 10,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-hG_6o_7iyvaG2TeIu&open=AZ-hG_6o_7iyvaG2TeIu"
},
{
"key": "AZ-hHArD_7iyvaG2TeIw",
"rule": "typescript:S6851",
"severity": "MAJOR",
"message": "Redundant alt attribute. Screen-readers already announce `img` tags as an image. You don’t need to use the words `image`, `photo,` or `picture` (or any specified custom words) in the alt prop.",
"component": "sites/promo/src/components/gallery-modal.tsx",
"line": 135,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-hHArD_7iyvaG2TeIw&open=AZ-hHArD_7iyvaG2TeIw"
},
{
"key": "AZ-gksvtpI4t_4jmejj6",
"rule": "shelldre:S131",
"severity": "CRITICAL",
"message": "Add a default case (*) to handle unexpected values.",
"component": "scripts/sonarcloud-sync.sh",
"line": 306,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-gksvtpI4t_4jmejj6&open=AZ-gksvtpI4t_4jmejj6"
},
{
"key": "AZ-gA2474r4tYZa_Yi7e",
"rule": "typescript:S2004",
"severity": "CRITICAL",
"message": "Refactor this code to not nest functions more than 4 levels deep.",
"component": "sites/promo/src/components/comparison.tsx",
"line": 450,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-gA2474r4tYZa_Yi7e&open=AZ-gA2474r4tYZa_Yi7e"
},
{
"key": "AZ-c83VBnUgmSfWQkp2r",
"rule": "typescript:S8987",
"severity": "MAJOR",
"message": "Move this `v-if` to a parent element.",
"component": "desktop/main/components/GameOptions/ProtonSelector.vue",
"line": 73,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-c83VBnUgmSfWQkp2r&open=AZ-c83VBnUgmSfWQkp2r"
},
{
"key": "AZ-c83VBnUgmSfWQkp2s",
"rule": "typescript:S8987",
"severity": "MAJOR",
"message": "Move this `v-if` to a parent element.",
"component": "desktop/main/components/GameOptions/ProtonSelector.vue",
"line": 112,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-c83VBnUgmSfWQkp2s&open=AZ-c83VBnUgmSfWQkp2s"
},
{
"key": "AZ-YTBgzecfn39edgquG",
"rule": "typescript:S8786",
"severity": "MAJOR",
"message": "Simplify this regular expression to reduce its runtime, as it has super-linear performance due to backtracking.",
"component": "server/server/internal/metadata/steam.ts",
"line": 649,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-YTBgzecfn39edgquG&open=AZ-YTBgzecfn39edgquG"
},
{
"key": "AZ-YTCWiecfn39edgquP",
"rule": "typescript:S6772",
"severity": "MAJOR",
"message": "Ambiguous spacing after previous element img",
"component": "sites/promo/src/components/comparison.tsx",
"line": 54,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-YTCWiecfn39edgquP&open=AZ-YTCWiecfn39edgquP"
},
{
"key": "AZ-WZn8wL3IEMbakOkCg",
"rule": "githubactions:S6505",
"severity": "MAJOR",
"message": "Omitting \"--ignore-scripts\" allows lifecycle scripts to run during package installation.",
"component": ".github/workflows/e2e.yml",
"line": 64,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-WZn8wL3IEMbakOkCg&open=AZ-WZn8wL3IEMbakOkCg"
},
{
"key": "AZ-dRYQYZiQzo-vEe6fH",
"rule": "rust:S3776",
"severity": "CRITICAL",
"message": "Refactor this function to reduce its Cognitive Complexity from 29 to the 15 allowed.",
"component": "desktop/src-tauri/src/lib.rs",
"line": 205,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-dRYQYZiQzo-vEe6fH&open=AZ-dRYQYZiQzo-vEe6fH"
},
{
"key": "AZ-V531cdRHfOsokVAlP",
"rule": "docker:S8549",
"severity": "MAJOR",
"message": "Using dependencies without locking resolved versions is security-sensitive.",
"component": "Dockerfile",
"line": 37,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V531cdRHfOsokVAlP&open=AZ-V531cdRHfOsokVAlP"
},
{
"key": "AZ-dRYE2ZiQzo-vEe6fE",
"rule": "rust:S3776",
"severity": "CRITICAL",
"message": "Refactor this function to reduce its Cognitive Complexity from 24 to the 15 allowed.",
"component": "libraries/droplet/src/manifest.rs",
"line": 82,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-dRYE2ZiQzo-vEe6fE&open=AZ-dRYE2ZiQzo-vEe6fE"
},
{
"key": "AZ-V530UdRHfOsokVAk8",
"rule": "text:S8570",
"severity": "MAJOR",
"message": "Dependency versions are not predictable if the lock file (Cargo.lock) is missing.",
"component": "libraries/libarchive/Cargo.toml",
"line": null,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V530UdRHfOsokVAk8&open=AZ-V530UdRHfOsokVAk8"
},
{
"key": "AZ-dRYOlZiQzo-vEe6fF",
"rule": "rust:S3776",
"severity": "CRITICAL",
"message": "Refactor this function to reduce its Cognitive Complexity from 38 to the 15 allowed.",
"component": "desktop/src-tauri/games/src/downloads/download_agent.rs",
"line": 276,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-dRYOlZiQzo-vEe6fF&open=AZ-dRYOlZiQzo-vEe6fF"
},
{
"key": "AZ-dRYOzZiQzo-vEe6fG",
"rule": "rust:S3776",
"severity": "CRITICAL",
"message": "Refactor this function to reduce its Cognitive Complexity from 22 to the 15 allowed.",
"component": "desktop/src-tauri/games/src/downloads/download_logic.rs",
"line": 32,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-dRYOzZiQzo-vEe6fG&open=AZ-dRYOzZiQzo-vEe6fG"
},
{
"key": "AZ-dRYTRZiQzo-vEe6fJ",
"rule": "rust:S3776",
"severity": "CRITICAL",
"message": "Refactor this function to reduce its Cognitive Complexity from 20 to the 15 allowed.",
"component": "desktop/src-tauri/remote/src/utils.rs",
"line": 41,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-dRYTRZiQzo-vEe6fJ&open=AZ-dRYTRZiQzo-vEe6fJ"
},
{
"key": "AZ-dRYRpZiQzo-vEe6fI",
"rule": "rust:S3776",
"severity": "CRITICAL",
"message": "Refactor this function to reduce its Cognitive Complexity from 21 to the 15 allowed.",
"component": "desktop/src-tauri/download_manager/src/download_manager_builder.rs",
"line": 227,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-dRYRpZiQzo-vEe6fI&open=AZ-dRYRpZiQzo-vEe6fI"
},
{
"key": "AZ-V53JddRHfOsokVAeS",
"rule": "typescript:S4782",
"severity": "MAJOR",
"message": "Consider removing 'undefined' type or '?' specifier, one of them is redundant.",
"component": "server/server/api/v1/client/game/[id]/versions.get.ts",
"line": 11,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53JddRHfOsokVAeS&open=AZ-V53JddRHfOsokVAeS"
},
{
"key": "AZ-V53JddRHfOsokVAeT",
"rule": "typescript:S4782",
"severity": "MAJOR",
"message": "Consider removing 'undefined' type or '?' specifier, one of them is redundant.",
"component": "server/server/api/v1/client/game/[id]/versions.get.ts",
"line": 12,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53JddRHfOsokVAeT&open=AZ-V53JddRHfOsokVAeT"
},
{
"key": "AZ-V525XdRHfOsokVAbG",
"rule": "typescript:S6564",
"severity": "MAJOR",
"message": "Remove this redundant type alias and replace its occurrences with \"V2Manifest\".",
"component": "server/server/internal/library/manifest/utils.ts",
"line": 3,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V525XdRHfOsokVAbG&open=AZ-V525XdRHfOsokVAbG"
},
{
"key": "AZ-hHASC_7iyvaG2TeIv",
"rule": "Web:S6851",
"severity": "MAJOR",
"message": "Remove redundant word \"picture\" from the \"alt\" attribute of your \"img\" tag.",
"component": "server/pages/user/[id]/index.vue",
"line": 4,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-hHASC_7iyvaG2TeIv&open=AZ-hHASC_7iyvaG2TeIv"
},
{
"key": "AZ-V53uedRHfOsokVAkr",
"rule": "text:S8570",
"severity": "MAJOR",
"message": "Dependency versions are not predictable if the lock file (Cargo.lock) is missing.",
"component": "libraries/native_model/Cargo.toml",
"line": null,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53uedRHfOsokVAkr&open=AZ-V53uedRHfOsokVAkr"
},
{
"key": "AZ-dRYTRZiQzo-vEe6fK",
"rule": "rust:S3776",
"severity": "CRITICAL",
"message": "Refactor this function to reduce its Cognitive Complexity from 19 to the 15 allowed.",
"component": "desktop/src-tauri/remote/src/utils.rs",
"line": 96,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-dRYTRZiQzo-vEe6fK&open=AZ-dRYTRZiQzo-vEe6fK"
},
{
"key": "AZ-V52-SdRHfOsokVAcM",
"rule": "typescript:S8786",
"severity": "MAJOR",
"message": "Simplify this regular expression to reduce its runtime, as it has super-linear performance due to backtracking.",
"component": "server/server/internal/metadata/steam.ts",
"line": 921,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V52-SdRHfOsokVAcM&open=AZ-V52-SdRHfOsokVAcM"
},
{
"key": "AZ-V52-SdRHfOsokVAcO",
"rule": "typescript:S8786",
"severity": "MAJOR",
"message": "Simplify this regular expression to reduce its runtime, as it has super-linear performance due to backtracking.",
"component": "server/server/internal/metadata/steam.ts",
"line": 1013,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V52-SdRHfOsokVAcO&open=AZ-V52-SdRHfOsokVAcO"
},
{
"key": "AZ-V52-SdRHfOsokVAcP",
"rule": "typescript:S8786",
"severity": "MAJOR",
"message": "Simplify this regular expression to reduce its runtime, as it has super-linear performance due to backtracking.",
"component": "server/server/internal/metadata/steam.ts",
"line": 1016,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V52-SdRHfOsokVAcP&open=AZ-V52-SdRHfOsokVAcP"
},
{
"key": "AZ-V52-SdRHfOsokVAcS",
"rule": "typescript:S8786",
"severity": "MAJOR",
"message": "Simplify this regular expression to reduce its runtime, as it has super-linear performance due to backtracking.",
"component": "server/server/internal/metadata/steam.ts",
"line": 1110,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V52-SdRHfOsokVAcS&open=AZ-V52-SdRHfOsokVAcS"
},
{
"key": "AZ-V53sndRHfOsokVAkD",
"rule": "typescript:S6772",
"severity": "MAJOR",
"message": "Ambiguous spacing after previous element span",
"component": "sites/promo/src/components/comparison.tsx",
"line": 259,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53sndRHfOsokVAkD&open=AZ-V53sndRHfOsokVAkD"
},
{
"key": "AZ-V53sndRHfOsokVAkG",
"rule": "typescript:S6479",
"severity": "MAJOR",
"message": "Do not use Array index in keys",
"component": "sites/promo/src/components/comparison.tsx",
"line": 310,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53sndRHfOsokVAkG&open=AZ-V53sndRHfOsokVAkG"
},
{
"key": "AZ-V53sndRHfOsokVAkI",
"rule": "typescript:S7721",
"severity": "MAJOR",
"message": "Move function 'onlyUnique' to the outer scope.",
"component": "sites/promo/src/components/comparison.tsx",
"line": 330,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53sndRHfOsokVAkI&open=AZ-V53sndRHfOsokVAkI"
},
{
"key": "AZ-V53radRHfOsokVAju",
"rule": "typescript:S2137",
"severity": "MAJOR",
"message": "Do not use \"Map\" to declare a function - use another name.",
"component": "sites/promo/src/components/map.tsx",
"line": 53,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53radRHfOsokVAju&open=AZ-V53radRHfOsokVAju"
},
{
"key": "AZ-V53qadRHfOsokVAja",
"rule": "typescript:S1763",
"severity": "MAJOR",
"message": "Unreachable code.",
"component": "sites/promo/src/components/sponsors.tsx",
"line": 101,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53qadRHfOsokVAja&open=AZ-V53qadRHfOsokVAja"
},
{
"key": "AZ-V53qadRHfOsokVAjc",
"rule": "typescript:S6479",
"severity": "MAJOR",
"message": "Do not use Array index in keys",
"component": "sites/promo/src/components/sponsors.tsx",
"line": 245,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53qadRHfOsokVAjc&open=AZ-V53qadRHfOsokVAjc"
},
{
"key": "AZ-V53qadRHfOsokVAje",
"rule": "typescript:S6479",
"severity": "MAJOR",
"message": "Do not use Array index in keys",
"component": "sites/promo/src/components/sponsors.tsx",
"line": 262,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53qadRHfOsokVAje&open=AZ-V53qadRHfOsokVAje"
},
{
"key": "AZ-V53wAdRHfOsokVAks",
"rule": "text:S8570",
"severity": "MAJOR",
"message": "Dependency versions are not predictable if the lock file (Cargo.lock) is missing.",
"component": "libraries/native_model/native_model_macro/Cargo.toml",
"line": null,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53wAdRHfOsokVAks&open=AZ-V53wAdRHfOsokVAks"
},
{
"key": "AZ-V53pudRHfOsokVAjP",
"rule": "shell:S6506",
"severity": "MAJOR",
"message": "Not disabling redirects might allow for redirections to insecure websites. Make sure it is safe here.",
"component": "desktop/optimize-appimage.sh",
"line": 17,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53pudRHfOsokVAjP&open=AZ-V53pudRHfOsokVAjP"
},
{
"key": "AZ-V53TVdRHfOsokVAfi",
"rule": "typescript:S3358",
"severity": "MAJOR",
"message": "Extract this nested ternary operation into an independent statement.",
"component": "server/components/StoreView.vue",
"line": 465,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53TVdRHfOsokVAfi&open=AZ-V53TVdRHfOsokVAfi"
},
{
"key": "AZ-V53zOdRHfOsokVAk7",
"rule": "text:S8570",
"severity": "MAJOR",
"message": "Dependency versions are not predictable if the lock file (Cargo.lock) is missing.",
"component": "libraries/native_model/tests_crate/Cargo.toml",
"line": null,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53zOdRHfOsokVAk7&open=AZ-V53zOdRHfOsokVAk7"
},
{
"key": "AZ-V53MYdRHfOsokVAes",
"rule": "typescript:S4624",
"severity": "MAJOR",
"message": "Refactor this code to not use nested template literals.",
"component": "server/server/routes/auth/oidc.get.ts",
"line": 18,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53MYdRHfOsokVAes&open=AZ-V53MYdRHfOsokVAes"
},
{
"key": "AZ-V528odRHfOsokVAbs",
"rule": "typescript:S1751",
"severity": "MAJOR",
"message": "Invalid loop. Its body allows only one iteration.",
"component": "server/server/internal/metadata/igdb.ts",
"line": 654,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V528odRHfOsokVAbs&open=AZ-V528odRHfOsokVAbs"
},
{
"key": "AZ-V5298dRHfOsokVAby",
"rule": "typescript:S6035",
"severity": "MAJOR",
"message": "Replace this alternation with a character class.",
"component": "server/server/internal/metadata/pcgamingwiki.ts",
"line": 340,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V5298dRHfOsokVAby&open=AZ-V5298dRHfOsokVAby"
},
{
"key": "AZ-V53l8dRHfOsokVAi6",
"rule": "typescript:S7785",
"severity": "MAJOR",
"message": "Prefer top-level await over using a promise chain.",
"component": "desktop/main/pages/settings/index.vue",
"line": 45,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53l8dRHfOsokVAi6&open=AZ-V53l8dRHfOsokVAi6"
},
{
"key": "AZ-V53FhdRHfOsokVAdj",
"rule": "typescript:S4043",
"severity": "MAJOR",
"message": "Move this array \"sort\" operation to a separate statement or replace it with \"toSorted\".",
"component": "server/server/internal/utils/prioritylist.ts",
"line": 32,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53FhdRHfOsokVAdj&open=AZ-V53FhdRHfOsokVAdj"
},
{
"key": "AZ-V53AVdRHfOsokVAcb",
"rule": "typescript:S6564",
"severity": "MAJOR",
"message": "Remove this redundant type alias and replace its occurrences with \"string\".",
"component": "server/server/internal/objects/objectHandler.ts",
"line": 24,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53AVdRHfOsokVAcb&open=AZ-V53AVdRHfOsokVAcb"
},
{
"key": "AZ-V53aQdRHfOsokVAhI",
"rule": "typescript:S8786",
"severity": "MAJOR",
"message": "Simplify this regular expression to reduce its runtime, as it has super-linear performance due to backtracking.",
"component": "server/pages/admin/users/auth/simple/index.vue",
"line": 452,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53aQdRHfOsokVAhI&open=AZ-V53aQdRHfOsokVAhI"
},
{
"key": "AZ-V53c5dRHfOsokVAhe",
"rule": "Web:S5256",
"severity": "MAJOR",
"message": "Add \"<th>\" headers to this \"<table>\".",
"component": "server/pages/store/[id]/index.vue",
"line": 54,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53c5dRHfOsokVAhe&open=AZ-V53c5dRHfOsokVAhe"
},
{
"key": "AZ-V53pcdRHfOsokVAjN",
"rule": "typescript:S4043",
"severity": "MAJOR",
"message": "Move this array \"sort\" operation to a separate statement or replace it with \"toSorted\".",
"component": "desktop/main/composables/current-page-engine.ts",
"line": 16,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53pcdRHfOsokVAjN&open=AZ-V53pcdRHfOsokVAjN"
},
{
"key": "AZ-V525hdRHfOsokVAbO",
"rule": "typescript:S4043",
"severity": "MAJOR",
"message": "Move this array \"sort\" operation to a separate statement or replace it with \"toSorted\".",
"component": "server/server/internal/library/index.ts",
"line": 381,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V525hdRHfOsokVAbO&open=AZ-V525hdRHfOsokVAbO"
},
{
"key": "AZ-V52-GdRHfOsokVAb8",
"rule": "typescript:S6661",
"severity": "MAJOR",
"message": "Use an object spread instead of `Object.assign` eg: `{ ...foo }`.",
"component": "server/server/internal/metadata/index.ts",
"line": 94,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V52-GdRHfOsokVAb8&open=AZ-V52-GdRHfOsokVAb8"
},
{
"key": "AZ-V53dudRHfOsokVAhq",
"rule": "typescript:S4043",
"severity": "MAJOR",
"message": "Move this array \"sort\" operation to a separate statement or replace it with \"toSorted\".",
"component": "server/composables/current-page-engine.ts",
"line": 15,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53dudRHfOsokVAhq&open=AZ-V53dudRHfOsokVAhq"
},
{
"key": "AZ-V53o3dRHfOsokVAjG",
"rule": "typescript:S1854",
"severity": "MAJOR",
"message": "Remove this useless assignment to variable \"result\".",
"component": "desktop/main/pages/setup/server.vue",
"line": 97,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53o3dRHfOsokVAjG&open=AZ-V53o3dRHfOsokVAjG"
},
{
"key": "AZ-V53GJdRHfOsokVAdx",
"rule": "typescript:S2137",
"severity": "MAJOR",
"message": "Do not use \"globalThis\" to declare a variable - use another name.",
"component": "server/server/internal/db/database.ts",
"line": 10,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-V53GJdRHfOsokVAdx&open=AZ-V53GJdRHfOsokVAdx"
},
{
"key": "AZ-dRYBBZiQzo-vEe6fD",
"rule": "rust:S3776",
"severity": "CRITICAL",
"message": "Refactor this function to reduce its Cognitive Complexity from 21 to the 15 allowed.",
"component": "libraries/libarchive/src/writer.rs",
"line": 105,
"url": "https://sonarcloud.io/project/issues?id=BillyOutlast_drop&issues=AZ-dRYBBZiQzo-vEe6fD&open=AZ-dRYBBZiQzo-vEe6fD"
}
]
} |


Summary
Wave 1 of the hyperplan execution. Addresses SonarCloud issues, adds PR comment workflow, and fixes session filter behavior.
Changes
SonarCloud Trivial Fixes (C1-C8):
new Array()fixes (5 files).sort()→.toSorted()(4 files)structuredClone()(1 file)SonarCloud PR Comment Workflow:
sonarcloud-pr-comment.shscriptsonar-pr-commentjob to CI workflowSession Filter Fix:
filter.tsmoduleTest Results
SonarCloud Impact
Manual Step Required
Coverage gate: Go to https://sonarcloud.io/project/quality_gate?id=BillyOutlast_drop and switch from "Sonar way" to "Drop Project Gate", then click Apply.
Refs: #105, #106, #107
Summary by CodeRabbit
Bug Fixes
New Features
Chores