专注于绚丽的歌词动画效果的本地音乐/navidrome/第三方多平台在线音乐播放器
This report summarizes scanner evidence for chthollyphile/folia-major, a TypeScript project with 10,669 GitHub stars. SynthScan examined 746,716 lines of code across 4039 source files, recording 615 pattern matches distributed across 10 syntactic categories. The legacy adjusted pattern signal is 1.3 (Low pattern signal); it is not an authorship estimate.
Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.
Use each vector to guide manual verification of the underlying findings.
Payload schema: 1.0.0 · Engine: 2.0.0 · Scoring: heuristic-density-v1 · Scan date: 2026-10-31.
Can maintainers explain intent, assumptions, and trade-offs? 479 finding(s).
Are imports declared and package/API names verified? 41 finding(s).
Are wrappers, guards, and repeated structures necessary? 170 finding(s).
Which changes need focused human review? 615 finding(s).
This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.
Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.
This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.
The scanner identified 615 distinct pattern matches across 10 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | playwright.config.ts | 61 | // 组件测试走 @playwright/test 内置的 mount fixture。它会导航到 baseURL,所以 baseURL | COMMENT |
| LOW | packaging/macos/desktop-click-guard/ClickGuard.swift | 1 | // packaging/macos/desktop-click-guard/ClickGuard.swift | COMMENT |
| LOW | packaging/windows/wallpaper-helper/src/events.rs | 1 | // packaging/windows/wallpaper-helper/src/events.rs | COMMENT |
| LOW | packaging/windows/wallpaper-helper/src/events.rs | 21 | /// Detach completed: window un-parented from WorkerW, styles restored. | COMMENT |
| LOW | packaging/windows/wallpaper-helper/src/mouse_forward.rs | 1 | // packaging/windows/wallpaper-helper/src/mouse_forward.rs | COMMENT |
| LOW | packaging/windows/wallpaper-helper/src/mouse_forward.rs | 41 | COMMENT | |
| LOW | packaging/windows/wallpaper-helper/src/main.rs | 1 | // packaging/windows/wallpaper-helper/src/main.rs | COMMENT |
| LOW | packaging/windows/wallpaper-helper/src/cli.rs | 1 | // packaging/windows/wallpaper-helper/src/cli.rs | COMMENT |
| LOW | native/folia-mnn/folia_beat_this.cpp | 1 | #include <MNN/expr/ExecutorScope.hpp> | COMMENT |
| LOW | native/folia-mnn/dconv_kernels.hpp | 1 | #include <algorithm> | COMMENT |
| LOW | native/folia-mnn/dconv_kernels.hpp | 21 | // Included once per instruction set into a translation unit of its own - dconv_kernels_*.cpp - | COMMENT |
| LOW | native/folia-mnn/folia_dconv.cpp | 1 | #include <MNN/plugin/PluginKernel.hpp> | COMMENT |
| LOW | native/folia-mnn/folia_dconv.cpp | 21 | // and every edge between the layer's eight operators was a layout conversion. On an M4 that was 27ms of | COMMENT |
| LOW | native/folia-mnn/dconv_kernels_base.cpp | 1 | #define FOLIA_DCONV_NS folia_dconv_base | COMMENT |
| LOW | native/folia-mnn/folia_mnn.cpp | 1 | #include <MNN/Interpreter.hpp> | COMMENT |
| LOW | native/folia-mnn/folia_mnn.cpp | 21 | #endif | COMMENT |
| LOW | native/folia-mnn/folia_mnn.h | 1 | #pragma once | COMMENT |
| LOW | native/folia-mnn/folia_htdemucs.cpp | 1 | #include <MNN/expr/ExecutorScope.hpp> | COMMENT |
| LOW | native/folia-mnn/folia_htdemucs.cpp | 21 | // | COMMENT |
| LOW | test/ui/renderCounts.probe.ts | 1 | import { expect, test } from '@playwright/test'; | COMMENT |
| LOW | test/ui/bravaisVisualizerMount.spec.ts | 1 | import { expect, test, type Page } from '@playwright/test'; | COMMENT |
| LOW | test/ui/collectionOpenTransition.spec.ts | 1 | import { expect, test, type Page } from '@playwright/test'; | COMMENT |
| LOW | test/ui/wallHandoff.spec.ts | 1 | import { expect, test, type Page } from '@playwright/test'; | COMMENT |
| LOW | test/unit/lyrics/icuFolia/corpus.ts | 1 | // test/unit/lyrics/icuFolia/corpus.ts | COMMENT |
| LOW | test/unit/lyrics/icuFolia/corpus.ts | 21 | // ko, th, other-scripts | COMMENT |
| LOW | test/unit/settings/hifiSettingsPage.test.ts | 1 | // @vitest-environment jsdom | COMMENT |
| LOW | test/unit/analysis/modelAvailability.test.ts | 1 | import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'; | COMMENT |
| LOW | test/unit/mod-system/foliumStartLimit.test.ts | 21 | import * as loader from '@/mods/runtime/clientLoader'; | COMMENT |
| LOW | test/unit/mod-system/devFoliumSamples.test.ts | 21 | FoliumQueueSnapshot, | COMMENT |
| LOW | test/unit/stores/storeContract.test.ts | 1 | import { existsSync, readFileSync, readdirSync } from 'node:fs'; | COMMENT |
| LOW | test/unit/library/suiteEntries.test.ts | 1 | import { existsSync, readFileSync, readdirSync } from 'node:fs'; | COMMENT |
| LOW | test/unit/onlineMusic/platformNameCount.ts | 1 | import { readdirSync, readFileSync, writeFileSync } from 'node:fs'; | COMMENT |
| LOW | test/unit/playback/currentSongRestoreRoutes.test.ts | 1 | import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'; | COMMENT |
| LOW | test/unit/playback/currentSongArchitecture.test.ts | 1 | import { readdir, readFile } from 'node:fs/promises'; | COMMENT |
| LOW | test/unit/playback/currentSongWatch.ts | 1 | import { PlayerState, type SongResult } from '@/types'; | COMMENT |
| LOW | test/unit/playback/queueReplaceLibraryRaces.test.ts | 1 | import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'; | COMMENT |
| LOW | test/unit/playback/currentSongLibraryRoutes.test.ts | 1 | import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'; | COMMENT |
| LOW | test/unit/playback/queueReplaceRaces.test.ts | 1 | import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'; | COMMENT |
| LOW | test/unit/electron/ipcSecurity.test.ts | 1 | import { existsSync, mkdtempSync, readFileSync, rmSync, writeFileSync } from 'node:fs'; | COMMENT |
| LOW | test/unit/services/onlineAudioLevelCache.test.ts | 1 | import { afterAll, beforeEach, describe, expect, it, vi } from 'vitest'; | COMMENT |
| LOW | test/unit/services/playbackGraph.test.ts | 1 | import { describe, expect, it, vi } from 'vitest'; | COMMENT |
| LOW | test/unit/visualizer/storedSettingsPins.test.ts | 21 | import { DEFAULT_HANABI_TUNING } from '@/components/visualizer/hanabi/types'; | COMMENT |
| LOW | test/unit/automix/stemWaitsForBytes.test.ts | 1 | import { beforeEach, describe, expect, it, vi } from 'vitest'; | COMMENT |
| LOW | test/unit/automix/deckSrc.test.ts | 81 | it('never leaves the deck being listened to without a source', () => { | COMMENT |
| LOW | test/unit/automix/automixSession.test.ts | 181 | it('measures the lead from where the music stops, not from the end of the file', () => { | COMMENT |
| LOW | test/unit/automix/transitionPlanner.test.ts | 81 | // The release above is earned by `tailRoom` binding. Without it there is nothing saying the | COMMENT |
| LOW | test/unit/automix/analysisHostLifecycle.test.ts | 1 | import { EventEmitter } from 'node:events'; | COMMENT |
| LOW | test/unit/automix/stemLateResult.test.ts | 1 | import { beforeEach, describe, expect, it, vi } from 'vitest'; | COMMENT |
| LOW | test/unit/automix/modelNullAnswer.test.ts | 1 | import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'; | COMMENT |
| LOW | test/unit/automix/musicalTime.test.ts | 21 | it('answers null when the two readings of one track disagree', () => { | COMMENT |
| LOW | test/component/accountBehavior.spec.ts | 21 | // 账户 store、当前平台、待确认切换,再加上界面上用户能看到的结果(登录界面、状态文案、诊断入口、确认)。 | COMMENT |
| LOW | test/component/artistBehavior.spec.ts | 21 | onlineSongId, | COMMENT |
| LOW | test/component/homeBehavior.spec.ts | 41 | // 首页与目录(GridMap)的行为回归闸门(Library Core P3 期间每一步都跑,和 libraryBehavior 一起)。 | COMMENT |
| LOW | test/component/bravaisTileKinds.spec.ts | 1 | import type { Locator, Page } from '@playwright/test'; | COMMENT |
| LOW | test/component/collectionMorph.spec.ts | 1 | import type { Locator, Page } from '@playwright/test'; | COMMENT |
| LOW | test/component/standInHandover.spec.ts | 1 | import type { Locator, Page } from '@playwright/test'; | COMMENT |
| LOW | test/component/bravaisPerf.spec.ts | 1 | import type { Page } from '@playwright/test'; | COMMENT |
| LOW | test/component/libraryBehavior.spec.ts | 21 | PROBE_LONG_DESCRIPTION, | COMMENT |
| LOW | test/manual/wallpaper-watchdog-sim.ts | 1 | import { spawn } from 'node:child_process'; | COMMENT |
| LOW | mods/folium.d.ts | 1 | // mods/folium.d.ts | COMMENT |
| 330 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | …st/unit/library/core/providerAccountController.test.ts | 234 | // ─── 切换 ─────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …st/unit/library/core/providerAccountController.test.ts | 328 | // ─── 确认之后 ─────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …st/unit/library/core/providerAccountController.test.ts | 409 | // ─── 登录 ─────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …st/unit/library/core/providerAccountController.test.ts | 542 | // ─── 本地服务 ─────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …st/unit/library/core/providerAccountController.test.ts | 608 | // ─── 登出 ─────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …st/unit/library/core/providerAccountController.test.ts | 663 | // ─── 当前平台与快照 ───────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …st/unit/library/core/providerAccountController.test.ts | 719 | // ─── 寿命 ─────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …st/unit/library/core/providerAccountController.test.ts | 769 | // ─── 日志 ─────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | test/unit/library/core/providerLoginSession.test.ts | 108 | // ─── 一次登录的每一步 ──────────────────────────────────────────────────── | COMMENT |
| MEDIUM | test/unit/library/core/providerLoginSession.test.ts | 392 | // ─── 在浏览器里确认的登录 ──────────────────────────────────────────────── | COMMENT |
| MEDIUM | test/unit/library/core/providerLoginSession.test.ts | 515 | // ─── 没有成功时是哪一种情况(A 到 G) ─────────────────────────────────── | COMMENT |
| MEDIUM | test/unit/library/core/providerLoginSession.test.ts | 634 | // ─── 串行开始、瞬时失败与自检 ──────────────────────────────────────────── | COMMENT |
| MEDIUM | test/unit/visualizer/hanabi/hanabiProgram.test.ts | 215 | // ─── folia 的整首编译 ────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | test/unit/visualizer/hanabi/hanabiFireworks.test.ts | 149 | // ─── 用最小的假 Pixi 跑一遍图层:池不超上限、乱序 seek 的画面一致 ───────── | COMMENT |
| MEDIUM | test/unit/visualizer/hanabi/hanabiFireworks.test.ts | 221 | // ─── 环境层 ───────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …rary/core/account/providerAccountController.service.ts | 288 | // ─── 切换 ─────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …rary/core/account/providerAccountController.service.ts | 358 | // ─── 登录 ─────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …rary/core/account/providerAccountController.service.ts | 530 | // ─── 选平台与登出 ─────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …rary/core/account/providerAccountController.service.ts | 571 | // ─── 寿命 ─────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/library/core/account/account.contract.ts | 23 | // ─── 快照 ─────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/library/core/account/account.contract.ts | 52 | // ─── 登录失败后的自检(规则在 core/account/loginSelfCheckRules) ───────── | COMMENT |
| MEDIUM | src/library/core/account/account.contract.ts | 175 | // ─── 动作结果(判别式,文案由 UI 自己翻译) ───────────────────────────── | COMMENT |
| MEDIUM | src/library/core/account/account.contract.ts | 269 | // ─── controller ───────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/library/core/account/account.contract.ts | 307 | // ─── 端口(默认装配见 core/account/providerAccountDeps.service) ────────────── | COMMENT |
| MEDIUM | src/library/core/account/account.contract.ts | 421 | // ─── account surface ──────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …c/library/core/account/providerLoginSession.service.ts | 293 | // ─── 第 6 步:失败后的主动自检 ───────────────────────────────────── | COMMENT |
| MEDIUM | …c/library/core/account/providerLoginSession.service.ts | 351 | // ─── 第 5 步:确认 ───────────────────────────────────────────────── | COMMENT |
| MEDIUM | …c/library/core/account/providerLoginSession.service.ts | 377 | // ─── 第 4 步:轮询 ───────────────────────────────────────────────── | COMMENT |
| MEDIUM | …c/library/core/account/providerLoginSession.service.ts | 447 | // ─── 第 3 步:就绪 ───────────────────────────────────────────────── | COMMENT |
| MEDIUM | …c/library/core/account/providerLoginSession.service.ts | 471 | // ─── 第 2 步:开始 ───────────────────────────────────────────────── | COMMENT |
| MEDIUM | …c/library/core/account/providerLoginSession.service.ts | 484 | // ─── 一轮登录 ───────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/library/core/account/accountRules.ts | 20 | // ─── 选平台 ───────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/library/core/account/accountRules.ts | 44 | // ─── 当前平台 ─────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/library/core/account/accountRules.ts | 62 | // ─── 切换确认 ─────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/library/core/account/accountRules.ts | 70 | // ─── 登出 ─────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/library/core/account/accountRules.ts | 88 | // ─── 登录会话的派生 ───────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/library/core/account/accountRules.ts | 149 | // ─── 诊断报告交给谁 ───────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/library/core/account/accountRules.ts | 181 | // ─── 登录 / 账户错误的日志描述 ────────────────────────────────────────── | COMMENT |
| MEDIUM | src/components/visualizer/hanabi/program.ts | 98 | // ─── 分词与切片 ───────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/components/visualizer/hanabi/program.ts | 307 | // ─── 选预设 ───────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/components/visualizer/hanabi/types.ts | 16 | // ─── 颜色 ────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/components/visualizer/hanabi/types.ts | 34 | // ─── 文字 ────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/components/visualizer/hanabi/types.ts | 175 | // ─── MG 部件 ──────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/components/visualizer/hanabi/types.ts | 344 | // ─── 预设(镜头风格) ─────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/components/visualizer/hanabi/types.ts | 379 | // ─── tuning ──────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/components/visualizer/hanabi/types.ts | 443 | // ─── 模块函数签名(各模块按这些名字导出) ─────────────────────────────── | COMMENT |
| MEDIUM | src/components/visualizer/hanabi/scene.ts | 637 | // ─── 烟花事件(构建时算好) ───────────────────────────────────────────── | COMMENT |
| MEDIUM | src/components/visualizer/hanabi/hanabiBeatFx.ts | 82 | // ─── 随拍推镜 ─────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/components/visualizer/hanabi/color.ts | 32 | // ─── HSL ─────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/components/visualizer/hanabi/color.ts | 79 | // ─── 对比度 ───────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/components/visualizer/hanabi/color.ts | 166 | // ─── 八种角色的鲜艳配色 ───────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/components/visualizer/hanabi/hanabiTuning.ts | 64 | // ─── 画质档 ──────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/components/visualizer/hanabi/catalog.ts | 49 | // ─── 零件 ────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/components/visualizer/hanabi/catalog.ts | 176 | // ─── 10 族 ───────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/components/visualizer/hanabi/catalog.ts | 842 | // ─── 组件槽的选项(中文名) ───────────────────────────────────────────── | COMMENT |
| MEDIUM | src/components/visualizer/hanabi/mg/burstPlan.ts | 527 | // ─── 闭式求值 ─────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/components/visualizer/hanabi/mg/burstPlan.ts | 598 | // ─── 画一帧(访问者,不分配) ──────────────────────────────────────────── | COMMENT |
| MEDIUM | src/components/visualizer/hanabi/mg/burstPlan.ts | 703 | // ─── 升空尾迹 ─────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/components/visualizer/hanabi/mg/ornamentShapes.ts | 20 | // ─── ring:扩散的描边圆环 ────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/components/visualizer/hanabi/mg/ornamentShapes.ts | 83 | // ─── spokes:集中线 ──────────────────────────────────────────────────── | COMMENT |
| 34 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL | test/unit/mod-system/devFoliumSamples.test.ts | 1049 | const first = fake.omni.searchSongs.mock.results.at(-2)!; | CODE |
| CRITICAL | test/unit/ytm/ytmUltra.test.ts | 447 | expect(yt.created.map(client => [client.kind, client.actions.execute.mock.calls.map(([endpoint]: [string]) => en | CODE |
| CRITICAL | test/unit/ytm/ytmApiBridge.test.ts | 620 | yt.clients.guest.actions.execute.mockResolvedValue(watchPage('MPLYt_fixture')); | CODE |
| CRITICAL | test/unit/ytm/ytmApiBridge.test.ts | 635 | yt.clients.guest.actions.execute.mockResolvedValue(watchPage()); | CODE |
| CRITICAL | test/unit/ytm/ytmApiBridge.test.ts | 639 | yt.clients.guest.actions.execute.mockResolvedValue(watchPage('MPLYt_fixture')); | CODE |
| CRITICAL | test/unit/ytm/ytmApiBridge.test.ts | 873 | expect(yt.clients.web.actions.execute.mock.calls.filter(([endpoint]: [string]) => endpoint === '/next')).toH | CODE |
| CRITICAL | test/unit/ytm/ytmApiBridge.test.ts | 877 | expect(yt.clients.web.actions.execute.mock.calls.filter(([endpoint]: [string]) => endpoint === '/next')).toH | CODE |
| CRITICAL | test/unit/ytm/ytmApiBridge.test.ts | 912 | const unliked = yt.clients.web.actions.execute.mock.calls.filter(([endpoint]: [string]) => endpoint === '/like/r | CODE |
| CRITICAL⚡ | test/unit/ytm/ytmApiBridge.test.ts | 974 | expect(yt.clients.web.actions.execute.mock.calls.filter(([endpoint]: [string]) => endpoint === '/next')).toHaveL | CODE |
| CRITICAL⚡ | test/unit/ytm/ytmApiBridge.test.ts | 977 | expect(yt.clients.web.actions.execute.mock.calls.filter(([endpoint]: [string]) => endpoint === '/next')).toHaveL | CODE |
| CRITICAL⚡ | test/unit/ytm/ytmApiBridge.test.ts | 982 | expect(yt.clients.web.actions.execute.mock.calls.filter(([endpoint]: [string]) => endpoint === '/next')).toHaveL | CODE |
| CRITICAL⚡ | test/unit/ytm/ytmApiBridge.test.ts | 992 | const unliked = yt.clients.web.actions.execute.mock.calls.filter(([endpoint]: [string]) => endpoint === '/like/r | CODE |
| CRITICAL | test/unit/electron/hifiIpc.test.ts | 447 | expect(harness.runtime.detect.mock.calls.every(([options]) => options.manualPath !== '/tmp/evil')).toBe(true); | CODE |
| CRITICAL | test/unit/electron/hifiIpc.test.ts | 524 | expect(stored.runtime.detect.mock.calls.map(([options]) => options.manualPath)).toEqual([null]); | CODE |
| CRITICAL | src/components/visualizer/machi/createMachiRuntime.ts | 430 | this.ground.uniforms.uPuddleOffset.value.set(stage.puddles.offset[0], stage.puddles.offset[1]); | CODE |
| CRITICAL | src/components/visualizer/machi/createMachiRuntime.ts | 689 | this.ground.uniforms.uReflectMatrix.value.copy(this.reflection.textureMatrix); | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …t/unit/command-palette/libraryWallLookCommands.test.ts | 252 | function libraryWallSeamStyleSurfaceMatches(context: CommandPaletteContext, query: string) { | CODE |
| LOW | worker/generate-theme_openai.ts | 325 | export async function handleGenerateOpenAITheme(request: Request, env: WorkerEnv) { | CODE |
| LOW | worker/qq.ts | 109 | export async function handleQqServerlessRequest( | CODE |
| LOW | src/types/webLyricSource.ts | 42 | export function initialWebLyricSourceState(): WebLyricSourceState { | CODE |
| LOW | src/utils/settingLabelLookup.ts | 128 | export function resolveSettingValueLabelKey( | CODE |
| LOW | src/utils/obsWebAppearance.ts | 105 | export function buildObsAppearanceFromShortcode( | CODE |
| LOW | src/utils/flacPictureRepair.ts | 55 | export async function repairFlacPictureComments(bytes: Uint8Array): Promise<Uint8Array> { | CODE |
| LOW | src/utils/metadataParserTypeHint.ts | 13 | export function withMetadataParserTypeHint(input: Blob, fileName: string): Blob { | CODE |
| LOW | src/utils/playerCapWebSource.ts | 12 | export function foldPlayerCapConnectionStatus(status: PlayerCapConnectionStatus): WebLyricConnectionStatus { | CODE |
| LOW | src/utils/playerCapWebSource.ts | 29 | export function playerCapToWebLyricSource( | CODE |
| LOW | src/utils/lyrics/matchScore.ts | 126 | function calculateArtistSimilarity(target: string, search: string): number { | CODE |
| LOW | src/utils/lyrics/matchScore.ts | 155 | export function calculateMatchScoreDetails( | CODE |
| LOW | src/utils/lyrics/formatDetection.ts | 52 | export function detectNonTtmlTimedLyricFormat(content?: string): NonTtmlTimedLyricFormat { | CODE |
| LOW | src/utils/lyrics/formatDetection.ts | 57 | export function resolveExplicitFileTimedLyricFormat(fileName?: string): ExplicitFileTimedLyricFormat | undefined { | CODE |
| LOW | src/utils/lyrics/lyricMatchSources.ts | 84 | export async function searchAmllDbLyricCandidates( | CODE |
| LOW | src/utils/lyrics/lyricMatchSources.ts | 103 | async function fetchAmllDbCandidateLyrics(song: SongResult): Promise<LyricSourceLyrics | null> { | CODE |
| LOW | src/utils/lyrics/lyricMatchSources.ts | 171 | export async function searchLyricsByMatchSource( | CODE |
| LOW | src/utils/lyrics/lyricMatchSources.ts | 179 | export async function fetchLyricsForMatchSource( | CODE |
| LOW | src/utils/lyrics/embeddedLrcNormalization.ts | 52 | export function normalizeEmbeddedUsltTags( | CODE |
| LOW | src/utils/lyrics/embeddedLrcNormalization.ts | 74 | export function normalizeEmbeddedStructuredLyrics( | CODE |
| LOW | src/utils/lyrics/lyricSeekTime.ts | 27 | export function resolveLyricSeekMediaTime(lyricTimeSec: number, clock: LyricSeekClock): number | null { | CODE |
| LOW | src/utils/lyrics/providers/amllDbProvider.ts | 35 | async function fetchAmllDbLyricsUncached( | CODE |
| LOW | src/components/wall/WallToolsQueueIslandHeader.tsx | 57 | export function WallToolsQueueIslandHeader({ host, count, readOnly, canSave, announce, isDragging, search }: WallToolsQu | CODE |
| LOW | …c/components/app/lattice/useLatticeExpansionSettled.ts | 13 | export function useLatticeExpansionSettled(expanded: boolean, immediate: boolean) { | CODE |
| LOW | src/components/app/lattice/useLatticePosterSelection.ts | 10 | export function useLatticePosterSelection(tiles: LatticeTile[], layout: WallLayout) { | CODE |
| LOW | …c/components/app/lattice/useLatticeChromeDisclosure.ts | 5 | export function useLatticeChromeDisclosure(expanded: boolean) { | CODE |
| LOW | …onents/app/lattice/lyrics/createLatticeLyricRuntime.ts | 39 | export function createLatticeLyricRuntime(host: HTMLElement, initial: LatticeLyricInput, | CODE |
| LOW | …components/app/lattice/lyrics/latticeLyricFrameLoop.ts | 3 | export function createLatticeLyricFrameLoop(draw: (delta: number) => boolean, | CODE |
| LOW | …c/components/app/lattice/lyrics/latticeLyricFilters.ts | 80 | export function createLatticeQuadGeometry(pixi: Pixi) { | CODE |
| LOW | src/components/app/lattice/lyrics/latticeLyricLayout.ts | 89 | export function resolveLatticeLongLineOffset(layout: LatticeLineLayout, time: number, available: number, lineHeight: num | CODE |
| LOW | …/components/app/playback/useStagePlaybackController.ts | 100 | export function useStagePlaybackController({ | CODE |
| LOW | …nts/app/playback/start/useLibraryPlaybackController.ts | 194 | export function useLibraryPlaybackController({ | CODE |
| LOW | …nents/app/playback/start/usePlaybackQueueController.ts | 223 | export function usePlaybackQueueController({ | CODE |
| LOW | …s/app/playback/bridges/usePlaybackInteractionBridge.ts | 85 | export function usePlaybackInteractionBridge({ | CODE |
| LOW | …ts/app/playback/bridges/usePlaybackVisualizerBridge.ts | 76 | export function usePlaybackVisualizerBridge({ | CODE |
| LOW | …app/playback/bridges/usePlaybackTransportController.ts | 52 | export function usePlaybackTransportController({ | CODE |
| LOW | …p/playback/restore/useElectronWindowPlaybackHandoff.ts | 123 | export function useElectronWindowPlaybackHandoff({ | CODE |
| LOW | …ts/app/playback/restore/useSessionRestoreController.ts | 47 | export function useSessionRestoreController({ | CODE |
| LOW | …mand-palette/surfaces/LatticePosterTintSurfaceView.tsx | 6 | export default function LatticePosterTintSurfaceView( | CODE |
| LOW | src/components/visualizer/pendolo/pendoloGeometry.ts | 22 | export function calculatePendoloWheelLayout( | CODE |
| LOW | src/components/visualizer/fume/fumeArticleLayout.ts | 202 | function buildArticleLayoutAttempt( | CODE |
| LOW | src/components/visualizer/fume/fumeArticleLayout.ts | 211 | function buildArticleLayoutAttempt( | CODE |
| LOW | src/components/hifi/useHifiMediaSessionKeepAlive.ts | 146 | export function useHifiMediaSessionKeepAlive() { | CODE |
| LOW | src/hooks/useElectronDisplaySleepBlocker.ts | 4 | export function useElectronDisplaySleepBlocker(enabled: boolean, isPlaying: boolean) { | CODE |
| LOW | src/hooks/usePersonalFmModeController.ts | 31 | export function usePersonalFmModeController({ | CODE |
| LOW | src/hooks/useSongThemeAutoGeneration.ts | 34 | export function useSongThemeAutoGeneration({ | CODE |
| LOW | src/workers/metadataParser.worker.ts | 78 | function normalizeLyricCandidateText(text: string): string { | CODE |
| LOW | src/workers/metadataParser.worker.ts | 141 | function getDurationFromParsedMetadata(durationSeconds?: number): number { | CODE |
| LOW | src/services/onlineMetadataSearchService.ts | 146 | export async function findAutomaticOnlineMetadataCandidate( | CODE |
| LOW | src/services/onlinePlayback.ts | 51 | export async function loadOnlineSongAudioSource( | CODE |
| LOW | src/services/localMusicService.ts | 124 | async function removeDeletedSongIdsFromPlaylists(songIds: string[]): Promise<void> { | CODE |
| LOW | src/services/localMusicService.ts | 150 | function notifyLocalMusicScanProgress(detail: LocalMusicScanProgressDetail) { | CODE |
| LOW | src/services/localMusicService.ts | 187 | async function findImportedRootForHandle(dirHandle: FileSystemDirectoryHandle): Promise<string | null> { | CODE |
| LOW | src/services/localMusicService.ts | 217 | export function extractMetadataFromFilename(fileName: string): { title?: string; artist?: string; } { | CODE |
| LOW | src/services/localMusicService.ts | 280 | function canImportElectronFallbackAudio(): boolean { | CODE |
| LOW | src/services/localMusicService.ts | 318 | function collectLyricBasePathsAffectedByFormatOrder( | CODE |
| LOW | src/services/localMusicService.ts | 397 | function getDurationFromParsedMetadata(durationSeconds?: number): number { | CODE |
| LOW | src/services/localMusicService.ts | 1032 | async function hydrateImportedSongsInBackground(rootFolderName: string, songs: LocalSong[]) { | CODE |
| LOW | src/services/localMusicService.ts | 1519 | async function resolveFileHandleFromDirHandle( | CODE |
| LOW | src/services/localMusicService.ts | 1539 | async function recoverFileHandleFromPersistedDirectory(song: LocalSong): Promise<FileSystemFileHandle | null> { | CODE |
| 15 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | src/stores/motionSignals.ts | 10 | // skills/frontend-runtime-guardrails. | COMMENT |
| MEDIUM | src/library/suites/bravais/useBravaisFrame.ts | 8 | // 边缘标签的显隐与侧别、空墙说明的区间,不经过 React(frontend-runtime-guardrails:拖动、补间期间没有逐帧 setState)。 | COMMENT |
| MEDIUM | src/components/ponder/PonderStage.tsx | 36 | // Lattice 相机也绕过 React,订阅既拿不到正确值也违反 guardrails。窗口尺寸变了才重采一次。 | COMMENT |
| MEDIUM | src/components/ponder/PonderHintCapsule.tsx | 15 | // 写进 state 就等于让整棵树按指针频率重渲染(见 skills/frontend-runtime-guardrails)。 | COMMENT |
| MEDIUM | src/components/visualizer/README.md | 321 | ## Runtime guardrails | COMMENT |
| MEDIUM | src/components/visualizer/diorama/CameraRig.tsx | 36 | // Drives the camera every frame from refs only - no React state - per the frontend runtime guardrails. | COMMENT |
| MEDIUM | src/components/visualizer/diorama/VisualizerDiorama.tsx | 198 | // state - it changes every frame and must never trigger React re-renders (per runtime guardrails). | COMMENT |
| MEDIUM | src/hooks/usePonderHoverProbe.ts | 14 | // 而且 N 个订阅者做一件事正是 guardrails 要避免的形状。 | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | test/ui/panelControlsTab.spec.ts | 285 | await expect(page.getByRole('combobox')).toHaveAttribute('placeholder', '输入歌名、歌手、专辑或队列序号'); | CODE |
| LOW | test/component/artistBehavior.spec.ts | 796 | await expect(input).toHaveAttribute('placeholder', 'Filter albums'); | CODE |
| LOW | test/component/bravaisHome.spec.ts | 287 | await expect(search.locator('input[name="bravais-search"]')).toHaveAttribute('placeholder', 'Search online platf | CODE |
| LOW | test/component/bravaisHome.spec.ts | 297 | await expect(filterInput(page)).toHaveAttribute('placeholder', 'Filter this page'); | CODE |
| LOW | test/component/pendoloSubtitleDualRow.spec.ts | 50 | await page.locator('[data-probe-line="placeholder"]').click(); | CODE |
| LOW | test/component/wallToolsIsland.spec.ts | 311 | await expect(input).toHaveAttribute('placeholder', 'Search the queue (200)'); | CODE |
| LOW | test/component/nowPlayingToastTransitionBorder.spec.ts | 181 | await expect(cover).toHaveAttribute('data-toast-cover', 'placeholder'); | CODE |
| LOW | test/component/nowPlayingToastTransitionBorder.spec.ts | 185 | await expect(cover).toHaveAttribute('data-toast-cover', 'placeholder'); | CODE |
| LOW | test/component/libraryBehavior.spec.ts | 1678 | await expect(filterInput(page)).toHaveAttribute('placeholder', 'Filter this page'); | CODE |
| LOW | src/components/app/overlays/NowPlayingToast.tsx | 234 | data-toast-cover={coverSrc ? 'image' : 'placeholder'} | CODE |
| LOW | src/components/command-palette/commandFactories.ts | 135 | options: Pick<CommandPaletteCommand, 'requiresInput' | 'placeholder'> = {}, | CODE |
| LOW | src/i18n/locales/zh-CN.ts | 506 | "placeholder": "输入命令或搜索内容...", | CODE |
| LOW | src/i18n/locales/zh-CN.ts | 560 | "placeholder": "按下快捷键,立即执行", | CODE |
| LOW | src/i18n/locales/zh-CN.ts | 1366 | "placeholder": "搜索歌曲...", | CODE |
| LOW | src/i18n/locales/en.ts | 506 | "placeholder": "Type a command or search...", | CODE |
| LOW | src/i18n/locales/en.ts | 560 | "placeholder": "Press a shortcut key to run it instantly", | CODE |
| LOW | src/i18n/locales/en.ts | 1366 | "placeholder": "Search songs...", | CODE |
| LOW | src/i18n/locales/in.ts | 506 | "placeholder": "Ketik perintah atau cari...", | CODE |
| LOW | src/i18n/locales/in.ts | 560 | "placeholder": "Tekan tombol pintasan untuk langsung menjalankan", | CODE |
| LOW | src/i18n/locales/in.ts | 1366 | "placeholder": "Cari lagu...", | CODE |
| LOW | src/i18n/locales/vi.ts | 506 | "placeholder": "Nhập lệnh hoặc tìm kiếm...", | CODE |
| LOW | src/i18n/locales/vi.ts | 560 | "placeholder": "Nhấn phím tắt để chạy ngay", | CODE |
| LOW | src/i18n/locales/vi.ts | 1366 | "placeholder": "Tìm bài hát...", | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | docs/technical.md | 226 | OPENAI_API_KEY=your_api_key | CODE |
| HIGH | docs/technical.md | 237 | OPENAI_API_KEY=your_api_key | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | src/App.tsx | 2461 | // see resolveDeckSrc, where that fallthrough is what keeps the handover seamless. | COMMENT |
| MEDIUM | …ts/app/playback/bridges/usePlaybackVisualizerBridge.ts | 247 | // a visible stutter at exactly the moment meant to be seamless. | COMMENT |
| MEDIUM | src/components/visualizer/diorama/DioramaScene.tsx | 388 | // spike - so the swap from units to plane is seamless; all the genuinely new lines stay async. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | sync-server/install.sh | 63 | # Check if Node.js is installed | COMMENT |
| LOW | sync-server/install.sh | 90 | # Check if NPM is installed | COMMENT |
| LOW | sync-server/install.sh | 174 | # Check if NPM is installed | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | test/manual/bili-livesong/main.py | 81 | except Exception as e: | CODE |