Real-time monitoring for Plex, Jellyfin, and Emby servers. Track streams, analyze playback, and detect account sharing from a single dashboard.
This report summarizes scanner evidence for connorgallopo/Tracearr, a TypeScript project with 2,758 GitHub stars. SynthScan examined 654,721 lines of code across 2236 source files, recording 744 pattern matches distributed across 9 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? 396 finding(s).
Are imports declared and package/API names verified? 322 finding(s).
Are wrappers, guards, and repeated structures necessary? 367 finding(s).
Which changes need focused human review? 744 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 744 distinct pattern matches across 9 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 | packages/shared/src/__tests__/destinations.test.ts | 184 | const parsed = schema.safeParse({ from: 'a@example.com', to: 'b@example.com, c@example.org' }); | CODE |
| LOW | packages/shared/src/__tests__/destinations.test.ts | 253 | to: 'a@example.com, b@example.org', | CODE |
| LOW | packages/translations/src/locales/tr-TR/settings.json | 1112 | "placeholder": "", | CODE |
| LOW | packages/translations/src/locales/tr-TR/pages.json | 943 | "placeholder": "" | CODE |
| LOW | packages/translations/src/locales/tr-TR/pages.json | 957 | "placeholder": "" | CODE |
| LOW | packages/translations/src/locales/tr-TR/pages.json | 1550 | "placeholder": "" | CODE |
| LOW | packages/translations/src/locales/tr-TR/pages.json | 1567 | "placeholder": "" | CODE |
| LOW⚡ | packages/translations/src/locales/tr-TR/pages.json | 1580 | "placeholder": "" | CODE |
| LOW⚡ | packages/translations/src/locales/tr-TR/pages.json | 1585 | "placeholder": "" | CODE |
| LOW⚡ | packages/translations/src/locales/tr-TR/pages.json | 1590 | "placeholder": "" | CODE |
| LOW | packages/translations/src/locales/tr-TR/pages.json | 1611 | "placeholder": "" | CODE |
| LOW | packages/translations/src/locales/tr-TR/pages.json | 1674 | "placeholder": "", | CODE |
| LOW | packages/translations/src/locales/fr-FR/settings.json | 1112 | "placeholder": "", | CODE |
| LOW | packages/translations/src/locales/fr-FR/pages.json | 943 | "placeholder": "Message facultatif" | CODE |
| LOW | packages/translations/src/locales/fr-FR/pages.json | 957 | "placeholder": "Message à afficher..." | CODE |
| LOW | packages/translations/src/locales/fr-FR/pages.json | 1550 | "placeholder": "" | CODE |
| LOW | packages/translations/src/locales/fr-FR/pages.json | 1567 | "placeholder": "" | CODE |
| LOW⚡ | packages/translations/src/locales/fr-FR/pages.json | 1580 | "placeholder": "" | CODE |
| LOW⚡ | packages/translations/src/locales/fr-FR/pages.json | 1585 | "placeholder": "" | CODE |
| LOW⚡ | packages/translations/src/locales/fr-FR/pages.json | 1590 | "placeholder": "" | CODE |
| LOW | packages/translations/src/locales/fr-FR/pages.json | 1611 | "placeholder": "" | CODE |
| LOW | packages/translations/src/locales/fr-FR/pages.json | 1674 | "placeholder": "", | CODE |
| LOW | packages/translations/src/locales/de-DE/settings.json | 1112 | "placeholder": "", | CODE |
| LOW | packages/translations/src/locales/de-DE/pages.json | 943 | "placeholder": "" | CODE |
| LOW | packages/translations/src/locales/de-DE/pages.json | 957 | "placeholder": "" | CODE |
| LOW | packages/translations/src/locales/de-DE/pages.json | 1550 | "placeholder": "" | CODE |
| LOW | packages/translations/src/locales/de-DE/pages.json | 1567 | "placeholder": "" | CODE |
| LOW⚡ | packages/translations/src/locales/de-DE/pages.json | 1580 | "placeholder": "" | CODE |
| LOW⚡ | packages/translations/src/locales/de-DE/pages.json | 1585 | "placeholder": "" | CODE |
| LOW⚡ | packages/translations/src/locales/de-DE/pages.json | 1590 | "placeholder": "" | CODE |
| LOW | packages/translations/src/locales/de-DE/pages.json | 1611 | "placeholder": "" | CODE |
| LOW | packages/translations/src/locales/de-DE/pages.json | 1674 | "placeholder": "", | CODE |
| LOW | packages/translations/src/locales/pl-PL/settings.json | 1172 | "placeholder": "Wybierz strefę czasową", | CODE |
| LOW | packages/translations/src/locales/pl-PL/pages.json | 973 | "placeholder": "Wiadomość (opcjonalnie)" | CODE |
| LOW | packages/translations/src/locales/pl-PL/pages.json | 987 | "placeholder": "Wiadomość do wyświetlenia…" | CODE |
| LOW | packages/translations/src/locales/pl-PL/pages.json | 1596 | "placeholder": "Wybierz użytkowników…" | CODE |
| LOW | packages/translations/src/locales/pl-PL/pages.json | 1613 | "placeholder": "np. Plex for iOS" | CODE |
| LOW⚡ | packages/translations/src/locales/pl-PL/pages.json | 1626 | "placeholder": "Wybierz kraje…" | CODE |
| LOW⚡ | packages/translations/src/locales/pl-PL/pages.json | 1631 | "placeholder": "np. 192.168.1.0/24 lub 2001:db8:abcd:7800::/64" | CODE |
| LOW⚡ | packages/translations/src/locales/pl-PL/pages.json | 1636 | "placeholder": "Wybierz serwery…" | CODE |
| LOW | packages/translations/src/locales/pl-PL/pages.json | 1657 | "placeholder": "Filmy" | CODE |
| LOW | packages/translations/src/locales/pl-PL/pages.json | 1720 | "placeholder": "tracearr1.…", | CODE |
| LOW | packages/translations/src/locales/vi-VN/settings.json | 1082 | "placeholder": "", | CODE |
| LOW | packages/translations/src/locales/vi-VN/pages.json | 928 | "placeholder": "" | CODE |
| LOW | packages/translations/src/locales/vi-VN/pages.json | 942 | "placeholder": "" | CODE |
| LOW | packages/translations/src/locales/vi-VN/pages.json | 1527 | "placeholder": "" | CODE |
| LOW | packages/translations/src/locales/vi-VN/pages.json | 1544 | "placeholder": "" | CODE |
| LOW⚡ | packages/translations/src/locales/vi-VN/pages.json | 1557 | "placeholder": "" | CODE |
| LOW⚡ | packages/translations/src/locales/vi-VN/pages.json | 1562 | "placeholder": "" | CODE |
| LOW⚡ | packages/translations/src/locales/vi-VN/pages.json | 1567 | "placeholder": "" | CODE |
| LOW | packages/translations/src/locales/vi-VN/pages.json | 1588 | "placeholder": "" | CODE |
| LOW | packages/translations/src/locales/vi-VN/pages.json | 1651 | "placeholder": "", | CODE |
| LOW | packages/translations/src/locales/da-DK/settings.json | 1112 | "placeholder": "", | CODE |
| LOW | packages/translations/src/locales/da-DK/pages.json | 943 | "placeholder": "" | CODE |
| LOW | packages/translations/src/locales/da-DK/pages.json | 957 | "placeholder": "" | CODE |
| LOW | packages/translations/src/locales/da-DK/pages.json | 1550 | "placeholder": "" | CODE |
| LOW | packages/translations/src/locales/da-DK/pages.json | 1567 | "placeholder": "" | CODE |
| LOW⚡ | packages/translations/src/locales/da-DK/pages.json | 1580 | "placeholder": "" | CODE |
| LOW⚡ | packages/translations/src/locales/da-DK/pages.json | 1585 | "placeholder": "" | CODE |
| LOW⚡ | packages/translations/src/locales/da-DK/pages.json | 1590 | "placeholder": "" | CODE |
| 262 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | packages/test-utils/src/factories/libraryItem.ts | 139 | export async function createTestLibraryItemVersion( | CODE |
| LOW | packages/test-utils/src/factories/automation.ts | 110 | export async function createConcurrentStreamsAutomation( | CODE |
| LOW | packages/test-utils/src/factories/automation.ts | 126 | export async function createImpossibleTravelAutomation( | CODE |
| LOW | packages/test-utils/src/factories/automation.ts | 138 | export async function createSimultaneousLocationsAutomation( | CODE |
| LOW | packages/test-utils/src/factories/automation.ts | 154 | export async function createDeviceVelocityAutomation( | CODE |
| LOW | packages/test-utils/src/factories/automation.ts | 175 | export async function createGeoRestrictionAutomation( | CODE |
| LOW | packages/test-utils/src/factories/automation.ts | 192 | export async function createAccountInactivityAutomation( | CODE |
| LOW | packages/test-utils/src/helpers/auth.ts | 166 | export function generateMobilePairingToken(length = 32): string { | CODE |
| LOW | packages/shared/src/violations.ts | 334 | export function formatEvidenceDescription( | CODE |
| LOW | packages/shared/src/resolution.ts | 135 | export function resolutionBucketSpellings(bucket: Exclude<ResolutionBucket, 'sd'>): string[] { | CODE |
| LOW | packages/shared/src/resolution.ts | 140 | export function resolutionAboveSdSpellings(): string[] { | CODE |
| LOW | packages/shared/src/releaseNotes.ts | 130 | export function renderReleaseNotesMarkdown(file: ReleaseNotesFile, tag?: string): string { | CODE |
| LOW | packages/shared/src/schemas.ts | 36 | function requireDatesForCustomPeriod(data: { | CODE |
| LOW | packages/shared/src/schemas.ts | 61 | function validateDateOrderInclusive(data: { startDate?: string; endDate?: string }) { | CODE |
| LOW | packages/shared/src/schemas.ts | 653 | export function scopeAllowsCrossServerEnforcement(data: { | CODE |
| LOW | packages/shared/src/constants.ts | 655 | export function formatConditionFieldValue( | CODE |
| LOW | packages/shared/src/constants.ts | 936 | export function liveStatsRetentionSeconds(windowSeconds: number): number { | CODE |
| LOW | apps/web/src/components/ui/skeleton.tsx | 105 | export function LibrarySummaryCardSkeleton() { | CODE |
| LOW | …/src/components/settings/notifications/Newsletters.tsx | 41 | function AddEmailDestinationButton() { | CODE |
| LOW | apps/web/src/components/media-browse/KpiStrip.tsx | 27 | export function finishedEveryEpisodeCount(watchers: MediaWatcherEntry[]): number { | CODE |
| LOW | …c/components/library/ResolutionDistributionSection.tsx | 248 | function SingleServerResolutionSection({ serverId }: { serverId?: string | null }) { | CODE |
| LOW | …c/components/library/ResolutionDistributionSection.tsx | 286 | export function ResolutionDistributionSection({ | CODE |
| LOW | apps/web/src/components/users/mergeSelection.ts | 55 | export function findOverlappingServerName( | CODE |
| LOW | apps/web/src/components/users/mergeSelection.ts | 173 | export function mergeRequestFromSuggestion(suggestion: MergeSuggestion): MergeRequest { | CODE |
| LOW | …b/src/components/automations/builder/builderReducer.ts | 276 | function writeConditionsEverywhere(state: BuilderState, write: ConditionWrite): BuilderState { | CODE |
| LOW | …c/components/import/PlaybackReportingImportSection.tsx | 46 | export function PlaybackReportingImportSection({ | CODE |
| LOW | …rc/components/violations/PersonMultiSelectCombobox.tsx | 50 | export function PersonMultiSelectCombobox({ | CODE |
| LOW | apps/web/src/hooks/queries/useStats.ts | 258 | export function useDeviceCompatibilityMatrix( | CODE |
| LOW | apps/web/src/hooks/queries/useHistory.ts | 95 | export function useAutomationFilterOptions() { | CODE |
| LOW | apps/web/src/hooks/queries/useNewsletters.ts | 218 | export function usePreviewDraftNewsletter() { | CODE |
| LOW | apps/web/src/hooks/queries/useDestinations.ts | 115 | export function useTestUnsavedDestination() { | CODE |
| LOW | apps/web/src/hooks/queries/useUsers.ts | 215 | export function useDismissedMergeSuggestions(enabled: boolean) { | CODE |
| LOW | apps/web/src/hooks/queries/useUsers.ts | 224 | export function useDismissMergeSuggestion() { | CODE |
| LOW | apps/web/src/hooks/queries/useUsers.ts | 240 | export function useRestoreMergeSuggestion() { | CODE |
| LOW | apps/web/src/hooks/queries/useUsers.ts | 259 | function invalidateIdentityQueries(queryClient: QueryClient) { | CODE |
| LOW | apps/web/src/hooks/queries/useViolations.ts | 105 | export function useBulkAcknowledgeViolations() { | CODE |
| LOW | apps/web/src/hooks/queries/usePendingViolationsCount.ts | 4 | export function usePendingViolationsCount(enabled: boolean): number { | CODE |
| LOW | apps/web/src/lib/api.ts | 308 | function appendHistoryFilterParams( | CODE |
| LOW | apps/web/src/lib/clientErrors.ts | 34 | export function installClientErrorCapture(): void { | CODE |
| LOW | apps/web/src/lib/automations/conditionFields.ts | 188 | export function getDefaultOperatorForField(field: ConditionField): Operator { | CODE |
| LOW | apps/web/src/pages/violationsFilters.ts | 40 | export function buildViolationFilterParams( | CODE |
| LOW | apps/web/src/pages/automationsFilters.ts | 39 | export function buildAutomationFilterParams( | CODE |
| LOW | apps/web/src/pages/library/Quality.tsx | 24 | function ServerQualityEvolutionCard({ | CODE |
| LOW | …tegration/dashboardStatsTodayPlays.integration.test.ts | 35 | async function oldSemanticsTodayPlaysCount(timezone: string): Promise<number> { | CODE |
| LOW | …/server/test/integration/userMerge.integration.test.ts | 124 | async function mergeSignInPlexAccountIntoJellyfinUser(targetName: string | null = null) { | CODE |
| LOW | …integration/importedHistoryLinking.integration.test.ts | 42 | async function plexServerWithSyncedLibrary(libraryId: string) { | CODE |
| LOW | …integration/importedHistoryLinking.integration.test.ts | 219 | async function trackedPlayWithLaterImport() { | CODE |
| LOW | apps/server/src/test/fixtures.ts | 407 | export function createSubtitleBurnSession(overrides: Partial<Session> = {}): Session { | CODE |
| LOW | apps/server/src/test/globalSetup.integration.ts | 66 | async function terminateTemplateSessions(client: pg.Client): Promise<void> { | CODE |
| LOW | apps/server/src/plugins/auth.ts | 97 | export function assertMobileClientSupported( | CODE |
| LOW | apps/server/src/utils/resolutionBuckets.ts | 39 | export function resolutionBucketPredicate( | CODE |
| LOW | apps/server/src/utils/serverFiltering.ts | 28 | export function buildServerAccessCondition( | CODE |
| LOW | apps/server/src/utils/serverFiltering.ts | 156 | export function buildMultiServerCondition( | CODE |
| LOW | apps/server/src/utils/representativeAccount.ts | 16 | export function representativeAccountOrderSql(alias: string): SQL { | CODE |
| LOW | apps/server/src/utils/snapshotValidation.ts | 22 | export function validLibraryItemCondition(alias: string): SQL { | CODE |
| LOW | apps/server/src/utils/publicApiRateLimitKey.ts | 22 | export function createPublicApiRateLimitKey( | CODE |
| LOW | apps/server/src/utils/parsing.ts | 96 | export function parseOptionalBoundedString(val: unknown, maxLength: number): string | undefined { | CODE |
| LOW | apps/server/src/lib/plexIdentity.ts | 17 | export async function initializePlexClientIdentifier(): Promise<string> { | CODE |
| LOW | apps/server/src/lib/authGuards.ts | 53 | export async function assertOAuthSignupClaimCode(claimCode: string | undefined): Promise<void> { | CODE |
| LOW | apps/server/src/lib/authGuards.ts | 291 | export async function assertOwnerKeepsALoginMethod( | CODE |
| 281 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM⚡ | docker/entrypoint-supervised.sh | 17 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | docker/entrypoint-supervised.sh | 19 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | docker/entrypoint-supervised.sh | 29 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | docker/entrypoint-supervised.sh | 31 | # ============================================================================= | COMMENT |
| MEDIUM | docker/entrypoint-supervised.sh | 42 | # ============================================================================= | COMMENT |
| MEDIUM | docker/entrypoint-supervised.sh | 44 | # ============================================================================= | COMMENT |
| MEDIUM | docker/entrypoint-supervised.sh | 71 | # ============================================================================= | COMMENT |
| MEDIUM | docker/entrypoint-supervised.sh | 73 | # ============================================================================= | COMMENT |
| MEDIUM | docker/entrypoint-supervised.sh | 107 | # ============================================================================= | COMMENT |
| MEDIUM | docker/entrypoint-supervised.sh | 109 | # ============================================================================= | COMMENT |
| MEDIUM | docker/entrypoint-supervised.sh | 235 | # ============================================================================= | COMMENT |
| MEDIUM | docker/entrypoint-supervised.sh | 237 | # ============================================================================= | COMMENT |
| MEDIUM | docker/entrypoint-supervised.sh | 278 | # ============================================================================= | COMMENT |
| MEDIUM | docker/entrypoint-supervised.sh | 280 | # ============================================================================= | COMMENT |
| MEDIUM | docker/entrypoint-supervised.sh | 348 | # ============================================================================= | COMMENT |
| MEDIUM | docker/entrypoint-supervised.sh | 350 | # ============================================================================= | COMMENT |
| MEDIUM | docker/entrypoint-supervised.sh | 374 | # ============================================================================= | COMMENT |
| MEDIUM | docker/entrypoint-supervised.sh | 376 | # ============================================================================= | COMMENT |
| MEDIUM | docker/entrypoint-supervised.sh | 426 | # ============================================================================= | COMMENT |
| MEDIUM | docker/entrypoint-supervised.sh | 428 | # ============================================================================= | COMMENT |
| MEDIUM | docker/entrypoint-supervised.sh | 461 | # ============================================================================= | COMMENT |
| MEDIUM | docker/entrypoint-supervised.sh | 463 | # ============================================================================= | COMMENT |
| MEDIUM | docker/entrypoint-supervised.sh | 490 | # ============================================================================= | COMMENT |
| MEDIUM | docker/entrypoint-supervised.sh | 492 | # ============================================================================= | COMMENT |
| MEDIUM | docker/entrypoint-supervised.sh | 515 | # ============================================================================= | COMMENT |
| MEDIUM | docker/entrypoint-supervised.sh | 517 | # ============================================================================= | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | apps/server/src/db/timescale.ts | 2648 | // Step 1: Drop ALL existing continuous aggregates (CASCADE will drop dependent views) | COMMENT |
| LOW⚡ | apps/server/src/db/timescale.ts | 2654 | // Step 2: Recreate all continuous aggregates with current definitions | COMMENT |
| LOW⚡ | apps/server/src/db/timescale.ts | 2660 | // Step 3: Add refresh policies for all aggregates | COMMENT |
| LOW⚡ | apps/server/src/db/timescale.ts | 2666 | // Step 4: Create all engagement views | COMMENT |
| LOW | apps/server/src/db/timescale.ts | 2710 | // Step 5: Optionally refresh historical data | COMMENT |
| LOW | apps/server/src/jobs/maintenanceQueue.ts | 1082 | // Step 1: Update joinedAt to earliest session for users with NULL joinedAt | COMMENT |
| LOW | apps/server/src/jobs/maintenanceQueue.ts | 1116 | // Step 2: Update lastActivityAt to most recent session for all users with sessions | COMMENT |
| LOW | apps/server/src/services/backup.ts | 584 | // Step 1: Clean the database — drop extensions, all schemas, then recreate public | COMMENT |
| LOW | apps/server/src/services/backup.ts | 600 | // Step 2: Create TimescaleDB at the backup's version and enter pre-restore mode. | COMMENT |
| LOW | apps/server/src/services/backup.ts | 619 | // Step 3: Restore from dump | COMMENT |
| LOW | apps/server/src/services/backup.ts | 632 | // Step 4: Upgrade TimescaleDB to the installed version if the backup was older. | COMMENT |
| LOW⚡ | apps/server/src/services/backup.ts | 655 | // Step 5: Exit pre-restore mode — rebuilds TimescaleDB internal state | COMMENT |
| LOW⚡ | apps/server/src/services/backup.ts | 665 | // Step 6: Rebuild planner statistics so queries use indexes effectively | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | apps/server/src/db/timescale.ts | 2648 | // Step 1: Drop ALL existing continuous aggregates (CASCADE will drop dependent views) | COMMENT |
| LOW⚡ | apps/server/src/db/timescale.ts | 2654 | // Step 2: Recreate all continuous aggregates with current definitions | COMMENT |
| LOW⚡ | apps/server/src/db/timescale.ts | 2660 | // Step 3: Add refresh policies for all aggregates | COMMENT |
| LOW⚡ | apps/server/src/db/timescale.ts | 2666 | // Step 4: Create all engagement views | COMMENT |
| LOW | apps/server/src/db/timescale.ts | 2710 | // Step 5: Optionally refresh historical data | COMMENT |
| LOW | apps/server/src/jobs/maintenanceQueue.ts | 1082 | // Step 1: Update joinedAt to earliest session for users with NULL joinedAt | COMMENT |
| LOW | apps/server/src/jobs/maintenanceQueue.ts | 1116 | // Step 2: Update lastActivityAt to most recent session for all users with sessions | COMMENT |
| LOW | apps/server/src/services/backup.ts | 584 | // Step 1: Clean the database — drop extensions, all schemas, then recreate public | COMMENT |
| LOW | apps/server/src/services/backup.ts | 600 | // Step 2: Create TimescaleDB at the backup's version and enter pre-restore mode. | COMMENT |
| LOW | apps/server/src/services/backup.ts | 619 | // Step 3: Restore from dump | COMMENT |
| LOW | apps/server/src/services/backup.ts | 632 | // Step 4: Upgrade TimescaleDB to the installed version if the backup was older. | COMMENT |
| LOW⚡ | apps/server/src/services/backup.ts | 655 | // Step 5: Exit pre-restore mode — rebuilds TimescaleDB internal state | COMMENT |
| LOW⚡ | apps/server/src/services/backup.ts | 665 | // Step 6: Rebuild planner statistics so queries use indexes effectively | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | docker/entrypoint-supervised.sh | 221 | fi | COMMENT |
| LOW | docker/entrypoint-supervised.sh | 421 | # The supervised image bundles its own postgres, so the extension owner is the | COMMENT |
| LOW | docker/examples/docker-compose.pg18.yml | 1 | # Tracearr - PostgreSQL 18 Deployment (Experimental) | COMMENT |
| LOW | docker/examples/docker-compose.supervised-example.yml | 1 | # Tracearr - All-in-One Deployment (Bare Metal Only) | COMMENT |
| LOW | docker/examples/docker-compose.supervised-example.yml | 41 | # - DATABASE_POOL_MAX=50 # Database connection pool size (default: derived from PostgreSQL max_connections, ~20 a | COMMENT |
| LOW | packages/shared/src/types.ts | 141 | serverUserId?: string; | COMMENT |
| LOW | …est/integration/betterAuthSecurity.integration.test.ts | 501 | }); | COMMENT |
| LOW | apps/server/src/lib/auth.ts | 281 | // Better Auth decides the cookie Secure flag (and the __Secure- name | COMMENT |
| LOW | apps/server/src/db/timescale.ts | 2161 | await rebuildAggregateDefinitions(); | COMMENT |
| LOW | apps/server/src/db/migrationRunner.ts | 61 | // drizzle then wraps in one transaction. A peer that is wedged (hung | COMMENT |
| LOW | apps/server/src/jobs/poller/processor.ts | 141 | // Per-server mutex around processServerSessions, shared by pollServers, | COMMENT |
| LOW | apps/server/src/jobs/poller/processor.ts | 201 | // Grace period tracking for session stop detection. Reads and writes here | COMMENT |
| LOW | apps/server/src/jobs/poller/processor.ts | 1361 | // by sessionKey alone (most recent active row). Filtering by the | COMMENT |
| LOW | …ver/src/jobs/poller/__tests__/sessionLifecycle.test.ts | 261 | COMMENT | |
| LOW | apps/server/src/routes/tailscale.ts | 41 | return { logs: tailscaleService.getLogs() }; | COMMENT |
| LOW | apps/server/src/routes/library/growth.ts | 141 | ${libraryFilter} | COMMENT |
| LOW | apps/server/src/routes/library/shelves.ts | 841 | // Read once per request (10s cache in the settings service) and thread | COMMENT |
| LOW | apps/server/src/routes/publicV2/shared.ts | 241 | id: row.user_id, | COMMENT |
| LOW | apps/server/src/services/tailscale.ts | 101 | await this.refreshStatus(); | COMMENT |
| LOW | apps/server/src/services/mergeService.ts | 261 | .update(terminationLogs) | COMMENT |
| LOW | apps/server/src/services/mergeService.ts | 501 | COMMENT | |
| LOW | apps/server/src/services/library/mediaWatchedService.ts | 261 | // of mapMovieWatchedRows and mapShowWatchedRows and must keep agreeing with | COMMENT |
| LOW | apps/server/src/services/automations/reverify.ts | 201 | // as-at-trigger from its row (still coherent: id, user, server, geo, media | COMMENT |
| LOW | apps/server/src/services/automations/reverify.ts | 281 | // counting for the still-pending siblings (see module header). Without this a | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | apps/server/src/services/tautulli.ts | 1494 | // Uses DISTINCT ON instead of MIN() to leverage index and avoid full hypertable scan | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | docker/entrypoint-supervised.sh | 162 | # Check if this looks like an existing installation (secrets exist) | COMMENT |
| LOW | docker/entrypoint-supervised.sh | 171 | # Check if this looks like a real database (has pg_control) | COMMENT |
| LOW | docker/entrypoint-supervised.sh | 306 | # Check if it's not the "unlimited" value (very large number ~9 exabytes) | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …egration/pushPayloadIdentityFields.integration.test.ts | 74 | function getData(message: ExpoPushMessage): Record<string, unknown> { | CODE |