SparkyFitness: Built for Families. Powered by AI. Track food, fitness, water, and health — together.
This report summarizes scanner evidence for CodeWithCJ/SparkyFitness, a TypeScript project with 6,631 GitHub stars. SynthScan examined 1,538,364 lines of code across 5279 source files, recording 1719 pattern matches distributed across 16 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? 1358 finding(s).
Are imports declared and package/API names verified? 202 finding(s).
Are wrappers, guards, and repeated structures necessary? 1239 finding(s).
Which changes need focused human review? 1719 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 1719 distinct pattern matches across 16 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 | SparkyFitnessServer/middleware/signOutCookieCleanup.ts | 9 | export function applySignOutCookieCleanup( | CODE |
| LOW | SparkyFitnessServer/middleware/readOnlyApiKeyGuard.ts | 19 | export async function isReadOnlyApiKeyAuthMutation( | CODE |
| LOW | …rkyFitnessServer/middleware/mcpOAuthAuthInterceptor.ts | 96 | export async function interceptMcpOAuthAuthRequest( | CODE |
| LOW | SparkyFitnessServer/tests/fitActivityTransform.test.ts | 29 | function createSyntheticStrengthMessages(): FitMessages { | CODE |
| LOW | …itnessServer/tests/weeklyGoalPlans.integration.test.ts | 47 | async function waitForBlockedAdvisoryLock(db: pg.Client) { | CODE |
| LOW | SparkyFitnessServer/tests/chatbotTestHarness.script.ts | 193 | async function resolveCredentialsAndCreateKey() { | CODE |
| LOW | …penFoodFactsAutomaticSyncMigration.integration.test.ts | 90 | async function installDormantAutomaticTriggers(): Promise<void> { | CODE |
| LOW | …penFoodFactsAutomaticSyncMigration.integration.test.ts | 144 | async function removeDormantAutomaticTriggers(): Promise<void> { | CODE |
| LOW | …penFoodFactsAutomaticSyncMigration.integration.test.ts | 285 | async function resetProductReadRateLimitIfPresent(): Promise<boolean> { | CODE |
| LOW | SparkyFitnessServer/tests/openFoodFactsAuth.test.ts | 88 | function makeOffLoginRejectedResponse() { | CODE |
| LOW | SparkyFitnessServer/utils/foodUtils.ts | 71 | function applyCustomNutrientMatches( | CODE |
| LOW | SparkyFitnessServer/utils/foodUtils.ts | 225 | function scaleNutritionForConsumedAmount( | CODE |
| LOW | SparkyFitnessServer/utils/outboundUrlPolicy.ts | 58 | export function requiresUserSuppliedAiUrl(serviceType: string): boolean { | CODE |
| LOW | SparkyFitnessServer/utils/outboundUrlPolicy.ts | 116 | export function deriveFoodProviderNetworkPolicy( | CODE |
| LOW | SparkyFitnessServer/utils/outboundUrlPolicy.ts | 140 | export async function resolveFoodProviderNetworkPolicy( | CODE |
| LOW | SparkyFitnessServer/utils/outboundUrlPolicy.ts | 223 | export async function resolveHostnameForOutboundConnection( | CODE |
| LOW | SparkyFitnessServer/utils/outboundUrlPolicy.ts | 258 | export function assertOutboundUrlShapeAndLiteralAllowed( | CODE |
| LOW | SparkyFitnessServer/utils/outboundUrlPolicy.ts | 267 | function assertLiteralHostnameAllowed( | CODE |
| LOW | SparkyFitnessServer/utils/outboundUrlPolicy.ts | 395 | export function isOutboundUrlBlockedError(error: unknown): boolean { | CODE |
| LOW | SparkyFitnessServer/utils/outboundUrlPolicy.ts | 399 | export function getOutboundUrlBlockedError( | CODE |
| LOW | SparkyFitnessServer/utils/sleepStageAggregates.ts | 82 | export function scoredStageRemaindersOutsideWindow( | CODE |
| LOW | SparkyFitnessServer/utils/sleepStageAggregates.ts | 211 | function sleepStageEnvelopeSeconds(stages: any[]) { | CODE |
| LOW | SparkyFitnessServer/utils/sleepStageAggregates.ts | 226 | export function getPrimarySleepStageCluster(stages: any[]) { | CODE |
| LOW | SparkyFitnessServer/utils/sleepStageAggregates.ts | 252 | export function recomputeSleepAggregatesFromStages(stages: any[]) { | CODE |
| LOW | SparkyFitnessServer/utils/foodPortionResolver.ts | 68 | export function validateNutritionReference( | CODE |
| LOW | SparkyFitnessServer/utils/bestSplit.ts | 64 | export function samplesFromDistanceSeries( | CODE |
| LOW | SparkyFitnessServer/utils/twoFactorState.ts | 25 | async function resolveTwoFactorDisableUserUpdate( | CODE |
| LOW | SparkyFitnessServer/utils/mcpOAuth.ts | 76 | function requireConfiguredPublicUrl(): string { | CODE |
| LOW | SparkyFitnessServer/utils/mcpOAuth.ts | 84 | function canonicalizeOAuthQueryParams(params: URLSearchParams): string { | CODE |
| LOW | SparkyFitnessServer/utils/mcpOAuth.ts | 144 | export function getMcpResourceMetadataUrl(): string { | CODE |
| LOW | SparkyFitnessServer/utils/mcpOAuth.ts | 158 | export function isMcpOAuthRedirectUriAllowed( | CODE |
| LOW | SparkyFitnessServer/utils/mcpOAuth.ts | 184 | export function createMcpOAuthAuthorizationRedirectValidator( | CODE |
| LOW | SparkyFitnessServer/utils/mcpOAuth.ts | 199 | export function isMcpOAuthAuthEndpointPath(requestPath: string): boolean { | CODE |
| LOW | SparkyFitnessServer/utils/mcpOAuth.ts | 213 | export function classifyMcpOAuthMetadataPath( | CODE |
| LOW | SparkyFitnessServer/utils/mcpOAuth.ts | 243 | export function shouldReturnMcpOAuthMetadataNotFound( | CODE |
| LOW | SparkyFitnessServer/utils/shutdownHooks.ts | 26 | export function pendingBackgroundWorkCount(): number { | CODE |
| LOW | SparkyFitnessServer/utils/apiKeyScope.ts | 23 | export function isRequestAllowedForReadOnlyKey( | CODE |
| LOW | …arkyFitnessServer/models/externalProviderRepository.ts | 33 | async function replaceGarminTokensIfUnchanged( | CODE |
| LOW | …arkyFitnessServer/models/externalProviderRepository.ts | 149 | async function getExternalDataProvidersByUserId( | CODE |
| LOW | …arkyFitnessServer/models/externalProviderRepository.ts | 253 | async function createExternalDataProvider(providerData: any) { | CODE |
| LOW | …arkyFitnessServer/models/externalProviderRepository.ts | 338 | async function updateExternalDataProvider( | CODE |
| LOW | …arkyFitnessServer/models/externalProviderRepository.ts | 435 | async function getExternalDataProviderById(providerId: any) { | CODE |
| LOW | …arkyFitnessServer/models/externalProviderRepository.ts | 525 | async function getExternalDataProviderByUserIdAndProviderName( | CODE |
| LOW | …arkyFitnessServer/models/externalProviderRepository.ts | 630 | async function checkExternalDataProviderAccess( | CODE |
| LOW | …arkyFitnessServer/models/externalProviderRepository.ts | 653 | async function checkExternalDataProviderOwnership( | CODE |
| LOW | …arkyFitnessServer/models/externalProviderRepository.ts | 672 | async function deleteExternalDataProvider(id: any, userId: any) { | CODE |
| LOW | …arkyFitnessServer/models/externalProviderRepository.ts | 817 | async function getActiveProvidersByTypes( | CODE |
| LOW | …arkyFitnessServer/models/externalProviderRepository.ts | 857 | async function getActiveProviderWithKeyByType( | CODE |
| LOW | …arkyFitnessServer/models/externalProviderRepository.ts | 920 | async function getGlobalExternalDataProviders() { | CODE |
| LOW | …arkyFitnessServer/models/externalProviderRepository.ts | 987 | async function createGlobalExternalDataProvider(providerData: any) { | CODE |
| LOW | …arkyFitnessServer/models/externalProviderRepository.ts | 1044 | async function updateGlobalExternalDataProvider(id: any, updateData: any) { | CODE |
| LOW | …arkyFitnessServer/models/externalProviderRepository.ts | 1114 | async function deleteGlobalExternalDataProvider(id: any) { | CODE |
| LOW | SparkyFitnessServer/models/genericHealthRepository.ts | 35 | export async function upsertHealthMetricSamples( | CODE |
| LOW | SparkyFitnessServer/models/genericHealthRepository.ts | 101 | export async function acquireHealthMetricSampleLockWithClient( | CODE |
| LOW | SparkyFitnessServer/models/genericHealthRepository.ts | 120 | export async function getHealthMetricSampleRowForUpdateWithClient( | CODE |
| LOW | SparkyFitnessServer/models/genericHealthRepository.ts | 137 | export async function upsertHealthMetricSamplesWithClient( | CODE |
| LOW | SparkyFitnessServer/models/genericHealthRepository.ts | 552 | export async function getDeviceTotalCaloriesByDateRange( | CODE |
| LOW | SparkyFitnessServer/models/food.ts | 1040 | async function deleteFoodAndDependencies( | CODE |
| LOW | SparkyFitnessServer/models/food.ts | 1699 | async function findFoodByProviderExternalId( | CODE |
| LOW | SparkyFitnessServer/models/food.ts | 1729 | async function updateFoodVariantNutrition( | CODE |
| 1020 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | SparkyFitnessServer/tests/ouraDataProcessor.test.ts | 89 | // ─── parseSleepPhases ──────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | SparkyFitnessServer/tests/ouraDataProcessor.test.ts | 129 | // ─── processOuraSleep ──────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | SparkyFitnessServer/tests/ouraDataProcessor.test.ts | 293 | // ─── processOuraDailyActivity ──────────────────────────────────────────────── | COMMENT |
| MEDIUM | SparkyFitnessServer/tests/ouraDataProcessor.test.ts | 324 | // ─── processOuraHeartRate ──────────────────────────────────────────────────── | COMMENT |
| MEDIUM | SparkyFitnessServer/tests/ouraDataProcessor.test.ts | 355 | // ─── processOuraWorkouts ───────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …yFitnessServer/tests/googleHealthDataProcessor.test.ts | 86 | // ─── Weight ────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …yFitnessServer/tests/googleHealthDataProcessor.test.ts | 118 | // ─── SpO2 ──────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …yFitnessServer/tests/googleHealthDataProcessor.test.ts | 167 | // ─── Resting Heart Rate ─────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …yFitnessServer/tests/googleHealthDataProcessor.test.ts | 203 | // ─── Active Zone Minutes ────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …yFitnessServer/tests/googleHealthDataProcessor.test.ts | 247 | // ─── Sleep anchoring ───────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …yFitnessServer/tests/googleHealthDataProcessor.test.ts | 350 | // ─── Exercise — null guard after createExercise ─────────────────────────────── | COMMENT |
| MEDIUM | …yFitnessServer/tests/googleHealthDataProcessor.test.ts | 411 | // ─── Sleep recording-zone stamp (issue #2033) ─────────────────────────────── | COMMENT |
| MEDIUM | …yFitnessServer/tests/googleHealthDataProcessor.test.ts | 411 | // ─── Sleep recording-zone stamp (issue #2033) ─────────────────────────────── | COMMENT |
| MEDIUM | …yFitnessServer/tests/googleHealthDataProcessor.test.ts | 463 | // ─── Activity minutes ──────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …yFitnessServer/tests/googleHealthDataProcessor.test.ts | 583 | // ─── Core body temperature ─────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …arkyFitnessServer/models/externalProviderRepository.ts | 918 | // ─── Admin global provider CRUD ─────────────────────────────────────────────── | COMMENT |
| MEDIUM | SparkyFitnessServer/models/measurementRepository.ts | 1778 | // ── Water Intake Entries (granular drink-by-drink tracking) ────────────── | COMMENT |
| MEDIUM | …erver/integrations/googlehealth/googleHealthService.ts | 455 | // ────────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …erver/integrations/googlehealth/googleHealthService.ts | 457 | // ────────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …erver/integrations/googlehealth/googleHealthService.ts | 734 | // ────────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …erver/integrations/googlehealth/googleHealthService.ts | 736 | // ────────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | …integrations/googlehealth/googleHealthDataProcessor.ts | 43 | // ────────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | …integrations/googlehealth/googleHealthDataProcessor.ts | 45 | // ────────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | …integrations/googlehealth/googleHealthDataProcessor.ts | 174 | // ────────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | …integrations/googlehealth/googleHealthDataProcessor.ts | 178 | // ────────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | …integrations/googlehealth/googleHealthDataProcessor.ts | 515 | // ────────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | …integrations/googlehealth/googleHealthDataProcessor.ts | 519 | // ────────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | …integrations/googlehealth/googleHealthDataProcessor.ts | 554 | // ────────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | …integrations/googlehealth/googleHealthDataProcessor.ts | 558 | // ────────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | …integrations/googlehealth/googleHealthDataProcessor.ts | 1015 | // ────────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | …integrations/googlehealth/googleHealthDataProcessor.ts | 1019 | // ────────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …integrations/googlehealth/googleHealthDataProcessor.ts | 16 | // ────────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …integrations/googlehealth/googleHealthDataProcessor.ts | 18 | // ────────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …integrations/googlehealth/googleHealthDataProcessor.ts | 235 | // ────────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …integrations/googlehealth/googleHealthDataProcessor.ts | 238 | // ────────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …integrations/googlehealth/googleHealthDataProcessor.ts | 279 | // ────────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …integrations/googlehealth/googleHealthDataProcessor.ts | 284 | // ────────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …integrations/googlehealth/googleHealthDataProcessor.ts | 317 | // ────────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …integrations/googlehealth/googleHealthDataProcessor.ts | 321 | // ────────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …integrations/googlehealth/googleHealthDataProcessor.ts | 356 | // ────────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …integrations/googlehealth/googleHealthDataProcessor.ts | 361 | // ────────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …integrations/googlehealth/googleHealthDataProcessor.ts | 412 | // ────────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …integrations/googlehealth/googleHealthDataProcessor.ts | 416 | // ────────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …integrations/googlehealth/googleHealthDataProcessor.ts | 454 | // ────────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …integrations/googlehealth/googleHealthDataProcessor.ts | 458 | // ────────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …integrations/googlehealth/googleHealthDataProcessor.ts | 610 | // ────────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …integrations/googlehealth/googleHealthDataProcessor.ts | 615 | // ────────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …integrations/googlehealth/googleHealthDataProcessor.ts | 813 | // ────────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …integrations/googlehealth/googleHealthDataProcessor.ts | 817 | // ────────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …integrations/googlehealth/googleHealthDataProcessor.ts | 933 | // ────────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …integrations/googlehealth/googleHealthDataProcessor.ts | 937 | // ────────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …integrations/googlehealth/googleHealthDataProcessor.ts | 969 | // ────────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …integrations/googlehealth/googleHealthDataProcessor.ts | 973 | // ────────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …integrations/googlehealth/googleHealthDataProcessor.ts | 1060 | // ────────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …integrations/googlehealth/googleHealthDataProcessor.ts | 1064 | // ────────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …integrations/googlehealth/googleHealthDataProcessor.ts | 1103 | // ────────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …integrations/googlehealth/googleHealthDataProcessor.ts | 1112 | // ────────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …integrations/googlehealth/googleHealthDataProcessor.ts | 1182 | // ────────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …integrations/googlehealth/googleHealthDataProcessor.ts | 1186 | // ────────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …integrations/googlehealth/googleHealthDataProcessor.ts | 1233 | // ────────────────────────────────────────────────────────────────────────────── | COMMENT |
| 58 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | README.md | 141 | # Option C: Full reference — every supported variable, commented out with its | COMMENT |
| LOW | pnpm-workspace.yaml | 61 | # published @esbuild/linux-x64 binary reports "0.27.4" to its own | COMMENT |
| LOW | SparkyFitnessServer/SparkyFitnessServer.ts | 501 | const UPLOADS_BASE_DIR = process.env.SPARKY_FITNESS_CUSTOM_UPLOADS_DIRECTORY | COMMENT |
| LOW | SparkyFitnessServer/index.ts | 21 | error | COMMENT |
| LOW | SparkyFitnessServer/auth.ts | 401 | // instance enforces one shared limit per client address. | COMMENT |
| LOW | SparkyFitnessServer/auth.ts | 481 | process.env.ALLOW_PRIVATE_NETWORK_CORS === 'true' || | COMMENT |
| LOW | SparkyFitnessServer/auth.ts | 561 | required: false, | COMMENT |
| LOW | SparkyFitnessServer/auth.ts | 581 | // | COMMENT |
| LOW | SparkyFitnessServer/middleware/authMiddleware.ts | 141 | // - Session tokens (shorter, or contain dots) → signed session cookie | COMMENT |
| LOW | SparkyFitnessServer/constants/openFoodFacts.ts | 1 | // The first release supports explicit, single-food contributions only. | COMMENT |
| LOW | …rver/tests/measurementService.sleepResyncMerge.test.ts | 21 | vi.mock('../config/logging', () => ({ | COMMENT |
| LOW | …rkyFitnessServer/tests/dailySummarySupplements.test.ts | 41 | // the clamp appears *somewhere* in the string therefore proves almost nothing, because any | COMMENT |
| LOW | …ssServer/tests/rlsPermissionMatrix.integration.test.ts | 141 | sys.release(); | COMMENT |
| LOW | SparkyFitnessServer/utils/deviceTotalCalories.ts | 1 | // Several sources can store a day's total burn in daily_health_metrics, one row | COMMENT |
| LOW | …arkyFitnessServer/models/externalProviderRepository.ts | 321 | return result.rows[0]; | COMMENT |
| LOW | SparkyFitnessServer/models/foodMisc.ts | 401 | // entry wins over the volume fallback; sf_volume_unit_to_ml returns NULL for | COMMENT |
| LOW | SparkyFitnessServer/models/syncedDataRepository.ts | 21 | // Wearable telemetry tables. Identical purpose to the list above, but they spell | COMMENT |
| LOW | SparkyFitnessServer/models/syncedDataRepository.ts | 41 | COMMENT | |
| LOW | SparkyFitnessServer/models/measurementRepository.ts | 1961 | for (const sample of samples) { | COMMENT |
| LOW | SparkyFitnessServer/ai/providerDispatch.ts | 101 | ok: false; | COMMENT |
| LOW | SparkyFitnessServer/ai/tools/index.ts | 261 | // placeholder junk that the per-action validation rejects. | COMMENT |
| LOW | SparkyFitnessServer/ai/tools/caffeineKineticsTools.ts | 21 | COMMENT | |
| LOW | …tnessServer/scripts/backfillWorkoutTelemetry.script.ts | 1 | // One-off backfill: re-derives the relational workout telemetry (exercise_entries | COMMENT |
| LOW | SparkyFitnessServer/routes/auth/apiKeyRoutes.ts | 61 | // Better Auth's server API takes endpoint fields under `body`; the | COMMENT |
| LOW | SparkyFitnessServer/routes/auth/apiKeyRoutes.ts | 121 | async (req, res, next) => { | COMMENT |
| LOW | SparkyFitnessServer/routes/v2/medicationRoutes.ts | 61 | router.use(onBehalfOfMiddleware); | COMMENT |
| LOW | SparkyFitnessServer/routes/v2/medicationRoutes.ts | 121 | // open — a caregiver without diary access could log doses of a supplement the owner | COMMENT |
| LOW | SparkyFitnessServer/services/exerciseService.ts | 1401 | // resolveImageFileName appends a URL hash (`0.jpg` -> `0_ab12cd34.jpg`), so | COMMENT |
| LOW | SparkyFitnessServer/services/foodPhotoLogService.ts | 121 | // Deliberately a normal, visible food — NOT a quick food. | COMMENT |
| LOW | SparkyFitnessServer/services/chatService.ts | 101 | COMMENT | |
| LOW | SparkyFitnessServer/services/chatService.ts | 461 | * always act as the logged-in actor, matching the previous MCP behavior. | COMMENT |
| LOW | SparkyFitnessServer/services/chatService.ts | 581 | COMMENT | |
| LOW | SparkyFitnessServer/services/chatService.ts | 721 | // auto-cache) and Ollama's KV-cache reuse only kick in when a new request is a | COMMENT |
| LOW | SparkyFitnessServer/services/chatService.ts | 841 | COMMENT | |
| LOW | SparkyFitnessServer/services/chatService.ts | 961 | }; | COMMENT |
| LOW | SparkyFitnessServer/services/chatService.ts | 1701 | // follow-up turn needs (a food's id, the matched name, its serving units) | COMMENT |
| LOW | SparkyFitnessServer/services/foodEntryService.ts | 201 | } | COMMENT |
| LOW | SparkyFitnessServer/services/foodEntryService.ts | 261 | // Food resolution per row (see agent-docs plan "diary-csv-import"): | COMMENT |
| LOW | SparkyFitnessServer/services/healthDataHandlers.ts | 801 | const ACCUMULATING_BMR_SOURCES = new Set(['garmin']); | COMMENT |
| LOW | SparkyFitnessServer/services/measurementService.ts | 741 | // glass -- and only the glass knows the hydration. This used to | COMMENT |
| LOW | SparkyFitnessServer/services/waterContainerService.ts | 301 | // be sized differently from the catalog entry. | COMMENT |
| LOW | SparkyFitnessServer/services/DashboardService.ts | 41 | calorieRuleHistory, | COMMENT |
| LOW | docker/docker-compose.dev.yml | 121 | # sparkyfitness-garmin: | COMMENT |
| LOW | docker/docker-compose.dev.yml | 141 | driver: bridge | COMMENT |
| LOW | docker/docker-compose.db_dev.yml | 21 | # - "8000:8000" | COMMENT |
| LOW | docker/docker-entrypoint.sh | 61 | esac | COMMENT |
| LOW | docker/docker-compose.prod.yml | 161 | #secrets: | COMMENT |
| LOW | docker/docker-compose.prod.yml | 201 | # Garmin integration is still work in progress. Enable once table is ready. | COMMENT |
| LOW | docker/docker-compose.prod.yml | 221 | COMMENT | |
| LOW | shared/src/constants/routingProviderTypes.ts | 1 | // The external provider that backs route generation and "Follow roads": a | COMMENT |
| LOW | shared/src/constants/foodProviderTypes.ts | 1 | // Single source of truth for the external food providers the app can | COMMENT |
| LOW | shared/src/constants/weatherProviderTypes.ts | 1 | // The external provider that backs the weather of GPS-recorded activities: an | COMMENT |
| LOW | shared/src/constants/supplementProviderTypes.ts | 1 | // The external provider that backs the supplement barcode lookup (NIH Dietary | COMMENT |
| LOW | shared/src/utils/csvFormat.ts | 1 | // Format-selection types and detection for the unified CSV import UI. This | COMMENT |
| LOW | shared/src/utils/parseCsv.ts | 1 | // Single CSV-parsing entry point shared by every import screen (frontend) | COMMENT |
| LOW | shared/src/schemas/database/HealthMetricSamples.zod.ts | 1 | import { z } from 'zod'; | COMMENT |
| LOW | shared/src/schemas/api/ExerciseEntries.api.zod.ts | 321 | // one, unlike the HealthKit/Health Connect/Garmin sync path. | COMMENT |
| LOW | SparkyFitnessFrontend/src/constants/healthDataImport.ts | 1 | import { localDateToDay, addDays } from '@workspace/shared'; | COMMENT |
| LOW | SparkyFitnessFrontend/src/utils/activityReportUtil.ts | 581 | const calories = pos(e['calories_burned']); | COMMENT |
| LOW | SparkyFitnessFrontend/src/utils/providerColor.ts | 1 | import type { DataProvider } from '@/types/settings'; | COMMENT |
| 170 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | SparkyFitnessServer/tests/emailService.test.ts | 91 | 'user@example.com', | CODE |
| LOW⚡ | SparkyFitnessServer/tests/emailService.test.ts | 96 | const mfaResult = await sendEmailMfaCode('user@example.com', '123456'); | CODE |
| LOW⚡ | SparkyFitnessServer/tests/emailService.test.ts | 100 | 'user@example.com', | CODE |
| LOW | SparkyFitnessServer/tests/emailService.test.ts | 121 | 'user@example.com', | CODE |
| LOW | SparkyFitnessServer/tests/emailService.test.ts | 129 | to: 'user@example.com', | CODE |
| LOW | SparkyFitnessServer/tests/emailService.test.ts | 150 | const result = await sendEmailMfaCode('user@example.com', '654321'); | CODE |
| LOW | SparkyFitnessServer/tests/emailService.test.ts | 156 | to: 'user@example.com', | CODE |
| LOW | SparkyFitnessServer/tests/emailService.test.ts | 178 | 'user@example.com', | CODE |
| LOW | SparkyFitnessServer/tests/emailService.test.ts | 186 | to: 'user@example.com', | CODE |
| LOW⚡ | SparkyFitnessServer/tests/emailService.test.ts | 210 | sendPasswordResetEmail('user@example.com', 'https://example.com/reset') | CODE |
| LOW⚡ | SparkyFitnessServer/tests/emailService.test.ts | 216 | sendEmailMfaCode('user@example.com', '123456') | CODE |
| LOW⚡ | SparkyFitnessServer/tests/emailService.test.ts | 220 | sendMagicLinkEmail('user@example.com', 'https://example.com/magic') | CODE |
| LOW | …rkyFitnessServer/tests/externalProviderService.test.ts | 45 | username: 'user@example.com', | CODE |
| LOW | …rkyFitnessServer/tests/externalProviderService.test.ts | 325 | app_id: 'user@example.com', | CODE |
| LOW | …rkyFitnessServer/tests/externalProviderService.test.ts | 418 | app_id: 'user@example.com', | CODE |
| LOW | …rkyFitnessServer/tests/externalProviderService.test.ts | 527 | app_id: 'user@example.com', | CODE |
| LOW | …rkyFitnessServer/tests/externalProviderService.test.ts | 547 | username: 'user@example.com', | CODE |
| LOW | SparkyFitnessServer/tests/chatbotToolsProfile.test.ts | 103 | { action: 'update_profile', email: 'admin@example.com' } as never, | CODE |
| LOW⚡ | …arkyFitnessServer/tests/authServiceUpdateEmail.test.ts | 34 | process.env.SPARKY_FITNESS_ADMIN_EMAIL = 'admin@example.com'; | CODE |
| LOW⚡ | …arkyFitnessServer/tests/authServiceUpdateEmail.test.ts | 37 | authService.updateUserEmail('attacker-id', 'admin@example.com', 'pw') | CODE |
| LOW⚡ | …arkyFitnessServer/tests/authServiceUpdateEmail.test.ts | 44 | process.env.SPARKY_FITNESS_ADMIN_EMAIL = 'admin@example.com'; | CODE |
| LOW | SparkyFitnessServer/tests/oidcGroupSync.test.ts | 91 | const idToken = createIdToken({ email: 'test@test.com' }); // No groups | CODE |
| LOW | SparkyFitnessServer/tests/oidcGroupSync.test.ts | 172 | const idToken = createIdToken({ email: 'test@test.com' }); // No groups | CODE |
| LOW | SparkyFitnessServer/tests/yazioService.test.ts | 438 | username: 'user@example.com', | CODE |
| LOW | docs/components/EnvGenerator.vue | 1065 | placeholder="admin@example.com" | CODE |
| LOW | …arkyFitnessFrontend/public/locales/sl/translation.json | 1685 | "placeholder": "Vnesite črtno kodo", | CODE |
| LOW | …arkyFitnessFrontend/public/locales/sk/translation.json | 1162 | "placeholder": "Hľadať cvičenia…", | CODE |
| LOW | …arkyFitnessFrontend/public/locales/sk/translation.json | 2010 | "placeholder": "Popis (napr. „Skratka pre zdravie na iPhone“)", | CODE |
| LOW | …itnessFrontend/public/locales/zh-Hans/translation.json | 1151 | "placeholder": "搜索运动…", | CODE |
| LOW | …itnessFrontend/public/locales/zh-Hans/translation.json | 2124 | "placeholder": "描述(例如“iPhone 健康快捷指令”)", | CODE |
| LOW | …itnessFrontend/public/locales/zh-Hans/translation.json | 5206 | "placeholder": "填写条形码编号", | CODE |
| LOW | …itnessFrontend/public/locales/zh-Hans/translation.json | 5785 | "placeholder": "敬请期待" | CODE |
| LOW | …itnessFrontend/public/locales/zh-Hant/translation.json | 1151 | "placeholder": "搜尋運動…", | CODE |
| LOW | …itnessFrontend/public/locales/zh-Hant/translation.json | 2124 | "placeholder": "描述(例如「iPhone 健康捷徑」)", | CODE |
| LOW | …itnessFrontend/public/locales/zh-Hant/translation.json | 5206 | "placeholder": "輸入條碼數字", | CODE |
| LOW | …itnessFrontend/public/locales/zh-Hant/translation.json | 5785 | "placeholder": "即將推出" | CODE |
| LOW | …arkyFitnessFrontend/public/locales/pl/translation.json | 427 | "placeholder": "Szukaj ćwiczeń…", | CODE |
| LOW | …arkyFitnessFrontend/public/locales/pl/translation.json | 1995 | "placeholder": "Opis (np. „Mój klucz”)", | CODE |
| LOW | …arkyFitnessFrontend/public/locales/pl/translation.json | 4564 | "placeholder": "Wprowadź kod kreskowy", | CODE |
| LOW | …arkyFitnessFrontend/public/locales/pl/translation.json | 5538 | "placeholder": "Wkrótce" | CODE |
| LOW | …arkyFitnessFrontend/public/locales/sv/translation.json | 790 | "placeholder": "Ange streckkod", | CODE |
| LOW | …arkyFitnessFrontend/public/locales/lv/translation.json | 394 | "placeholder": "Meklēt vingrinājumus…", | CODE |
| LOW | …arkyFitnessFrontend/public/locales/lv/translation.json | 1152 | "placeholder": "Apraksts (piem., ", | CODE |
| LOW | …arkyFitnessFrontend/public/locales/lv/translation.json | 3531 | "placeholder": "Ievadiet svītrkodu", | CODE |
| LOW | …arkyFitnessFrontend/public/locales/lv/translation.json | 4705 | "placeholder": "Drīzumā" | CODE |
| LOW | …arkyFitnessFrontend/public/locales/it/translation.json | 2029 | "placeholder": "Inserisci codice a barre", | CODE |
| LOW | …arkyFitnessFrontend/public/locales/cs/translation.json | 1178 | "placeholder": "Hledat cviky…", | CODE |
| LOW | …arkyFitnessFrontend/public/locales/cs/translation.json | 2050 | "placeholder": "Popis (např. „Zkratka Zdraví na iPhonu“)", | CODE |
| LOW | …arkyFitnessFrontend/public/locales/cs/translation.json | 4369 | "placeholder": "Zadejte čárový kód", | CODE |
| LOW | …arkyFitnessFrontend/public/locales/cs/translation.json | 4667 | "placeholder": "Již brzy" | CODE |
| LOW | …tnessFrontend/public/locales/yue-Hant/translation.json | 1151 | "placeholder": "搜尋運動…", | CODE |
| LOW | …tnessFrontend/public/locales/yue-Hant/translation.json | 2124 | "placeholder": "描述(例如 「iPhone Health Shortcut 快捷指令」 )", | CODE |
| LOW | …tnessFrontend/public/locales/yue-Hant/translation.json | 5206 | "placeholder": "輸入條碼數字", | CODE |
| LOW | …tnessFrontend/public/locales/yue-Hant/translation.json | 5785 | "placeholder": "開發中,遲啲先有得用" | CODE |
| LOW | …arkyFitnessFrontend/public/locales/ru/translation.json | 394 | "placeholder": "Поиск упражнений…", | CODE |
| LOW | …arkyFitnessFrontend/public/locales/ru/translation.json | 1174 | "placeholder": "Описание (например, «Ярлык приложения «Здоровье» на iPhone»)", | CODE |
| LOW | …arkyFitnessFrontend/public/locales/ru/translation.json | 3555 | "placeholder": "Введите штрих-код", | CODE |
| LOW | …arkyFitnessFrontend/public/locales/ru/translation.json | 4547 | "placeholder": "Скоро появится" | CODE |
| LOW | …arkyFitnessFrontend/public/locales/pt/translation.json | 1677 | "placeholder": "Insira o código de barras", | CODE |
| LOW | …yFitnessFrontend/public/locales/nb-NO/translation.json | 475 | "placeholder": "Søk etter øvelser…" | CODE |
| 140 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | SparkyFitnessServer/services/corosService.ts | 278 | // Step 1: Chunk the requested date range into 90-day windows | COMMENT |
| LOW | SparkyFitnessServer/services/corosService.ts | 546 | // Step 3: Raw Health Capture (Phase 1 mock capture ONLY; does not write to DB) | COMMENT |
| LOW | .agents/skills/pr-submission/SKILL.md | 34 | ### Step 1: Pre-Submission Validation | COMMENT |
| LOW | .agents/skills/pr-submission/SKILL.md | 58 | ### Step 2: Branch Check & Staging | COMMENT |
| LOW | .agents/skills/pr-submission/SKILL.md | 74 | ### Step 3: Commit Message | COMMENT |
| LOW | .agents/skills/pr-submission/SKILL.md | 85 | ### Step 4: Prepare PR Body from Template | COMMENT |
| LOW | .agents/skills/pr-submission/SKILL.md | 97 | ### Step 5: Push Branch & Create PR | COMMENT |
| LOW | .agents/skills/pr-submission/SKILL.md | 109 | ### Step 6: Final Verification | COMMENT |
| LOW | docs/src/install/portainer.md | 13 | ## Step 1: Create a New Stack in Portainer | COMMENT |
| LOW | docs/src/install/portainer.md | 24 | ## Step 2: Deploy the Stack | COMMENT |
| LOW | docs/src/install/portainer.md | 29 | ## Step 3: Access SparkyFitness | COMMENT |
| LOW | SparkyFitnessMobile/MobileApp-Dev-commands.md | 12 | ### Step 1: Generate Release Key (One Time) | COMMENT |
| LOW | SparkyFitnessMobile/MobileApp-Dev-commands.md | 23 | ### Step 2: Configure Secrets in GitHub | COMMENT |
| LOW | SparkyFitnessMobile/MobileApp-Dev-commands.md | 45 | ### Step 3: Trigger the Build | COMMENT |
| LOW⚡ | SparkyFitnessMobile/MobileApp-Dev-commands.md | 72 | ### Step 1: Install EAS CLI | COMMENT |
| LOW⚡ | SparkyFitnessMobile/MobileApp-Dev-commands.md | 79 | ### Step 2: Build for App Store | COMMENT |
| LOW⚡ | SparkyFitnessMobile/MobileApp-Dev-commands.md | 89 | ### Step 3: Upload to App Store | COMMENT |
| LOW | helm/chart/values.yaml | 557 | # WARNING: The DB owner is granted CREATEROLE so the application can automatically | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | SparkyFitnessGarmin/routes.py | 1667 | def _safe_sub_call(fn, *args): | CODE |
| LOW | SparkyFitnessGarmin/routes.py | 100 | except Exception as e: | CODE |
| LOW | SparkyFitnessGarmin/routes.py | 138 | except Exception as e: | CODE |
| LOW | SparkyFitnessGarmin/routes.py | 214 | except Exception as e: | CODE |
| LOW | SparkyFitnessGarmin/routes.py | 240 | except Exception as e: | CODE |
| LOW | SparkyFitnessGarmin/routes.py | 251 | except Exception as e: | CODE |
| LOW | SparkyFitnessGarmin/routes.py | 283 | except Exception as e: | CODE |
| LOW | SparkyFitnessGarmin/routes.py | 458 | except Exception as e: | CODE |
| LOW | SparkyFitnessGarmin/routes.py | 486 | except Exception as e: | CODE |
| LOW | SparkyFitnessGarmin/routes.py | 533 | except Exception as e: | CODE |
| LOW | SparkyFitnessGarmin/routes.py | 555 | except Exception as e: | CODE |
| LOW | SparkyFitnessGarmin/routes.py | 579 | except Exception as e: | CODE |
| LOW | SparkyFitnessGarmin/routes.py | 815 | except Exception as e: | CODE |
| LOW | SparkyFitnessGarmin/routes.py | 899 | except Exception as e: | CODE |
| LOW | SparkyFitnessGarmin/routes.py | 935 | except Exception as e: | CODE |
| LOW | SparkyFitnessGarmin/routes.py | 1003 | except Exception as e: | CODE |
| LOW | SparkyFitnessGarmin/routes.py | 1023 | except Exception as e: | CODE |
| LOW | SparkyFitnessGarmin/routes.py | 1067 | except Exception as e: | CODE |
| LOW | SparkyFitnessGarmin/routes.py | 1083 | except Exception as e: | CODE |
| LOW | SparkyFitnessGarmin/routes.py | 1148 | except Exception as gql_e: | CODE |
| LOW | SparkyFitnessGarmin/routes.py | 1155 | except Exception as e: | CODE |
| LOW | SparkyFitnessGarmin/routes.py | 1230 | except Exception as e: | CODE |
| LOW | SparkyFitnessGarmin/routes.py | 1248 | except Exception as e: | CODE |
| LOW | SparkyFitnessGarmin/routes.py | 1264 | except Exception as e: | CODE |
| LOW | SparkyFitnessGarmin/routes.py | 1319 | except Exception as e: | CODE |
| LOW | SparkyFitnessGarmin/routes.py | 1373 | except Exception as e: | CODE |
| LOW | SparkyFitnessGarmin/routes.py | 1386 | except Exception as e: | CODE |
| LOW | SparkyFitnessGarmin/routes.py | 1401 | except Exception as e: | CODE |
| LOW | SparkyFitnessGarmin/routes.py | 1444 | except Exception as e: | CODE |
| LOW | SparkyFitnessGarmin/routes.py | 1463 | except Exception as e: | CODE |
| LOW | SparkyFitnessGarmin/routes.py | 1528 | except Exception as e: | CODE |
| LOW | SparkyFitnessGarmin/routes.py | 1585 | except Exception as e: | CODE |
| LOW | SparkyFitnessGarmin/routes.py | 1670 | except Exception as sub_err: | CODE |
| LOW | SparkyFitnessGarmin/routes.py | 1744 | except Exception as act_err: | CODE |
| LOW | SparkyFitnessGarmin/routes.py | 1766 | except Exception as w_err: | CODE |
| LOW | SparkyFitnessGarmin/routes.py | 1814 | except Exception as e: | CODE |
| LOW | SparkyFitnessGarmin/routes.py | 1876 | except Exception as e: | CODE |
| LOW | SparkyFitnessGarmin/routes.py | 1905 | except Exception as e: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | SparkyFitnessServer/routes/withingsDataRoutes.ts | 61 | // This is a simplified check; a more robust solution might involve tagging categories by source | COMMENT |
| MEDIUM | SparkyFitnessServer/services/foodEntryService.ts | 3331 | const dateStr = getDayString(dateInput); // robust parsing | CODE |
| MEDIUM | SparkyFitnessServer/services/sleepAnalyticsService.ts | 115 | // A more robust solution might average or sum scores. | COMMENT |
| MEDIUM | …rkyFitnessFrontend/src/pages/Settings/ProviderCard.tsx | 428 | // Basic hasToken check that is more robust | COMMENT |
| MEDIUM | SparkyFitnessFrontend/src/pages/Diary/MealCard.tsx | 385 | const isFoodEntryMeal = 'foods' in item && 'entry_date' in item; // More robust check for FoodEntryMeal | CODE |
| MEDIUM | …rkyFitnessMobile/src/components/WorkoutReorderList.tsx | 585 | // seamless (see the row gesture's onEnd/onFinalize and the reset effect below). | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | docker/docker-compose.dev.yml | 77 | GARMIN_MICROSERVICE_URL: ${GARMIN_MICROSERVICE_URL:-http://sparkyfitness-garmin:${GARMIN_SERVICE_PORT:-8000}} # Ga | CODE |
| MEDIUM | docker/docker-compose.prod.yml | 128 | GARMIN_MICROSERVICE_URL: ${GARMIN_MICROSERVICE_URL:-http://sparkyfitness-garmin:${GARMIN_SERVICE_PORT:-8000}} # Ga | CODE |
| MEDIUM | docker/docker-compose.prod.yml | 199 | #- sparkyfitness-garmin # Frontend depends on Garmin microservice. Enable if you are using Garmin Connect features | COMMENT |
| MEDIUM | nix/README.md | 75 | ### Garmin Connect microservice | COMMENT |
| MEDIUM | helm/chart/values.yaml | 453 | # -- Garmin microservice (python, USER daemon UID 1) | COMMENT |
| MEDIUM | helm/chart/templates/networking/networkpolicy.yaml | 110 | # → Garmin microservice | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | db_backup.sh | 5 | # Check if .env file exists | COMMENT |
| LOW | start_garmin_microservice.sh | 53 | # Check if existing venv is using Python >= 3.10 | COMMENT |
| LOW | scripts/reset-dev.sh | 32 | # Check if origin remote is configured | COMMENT |
| LOW | SparkyFitnessGarmin/routes.py | 958 | # Check if data is in nested structure | COMMENT |
| LOW | SparkyFitnessGarmin/routes.py | 1326 | # Check if we already have body battery data for this date from user_summary | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | SparkyFitnessFrontend/src/pages/Foods/Foods.tsx | 397 | // Sorting is disabled for dietary_fiber and custom nutrients as requested | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …arkyFitnessServer/tests/chatbotToolsEngagement.test.ts | 270 | "Great workout! Don't forget to log your meals to track your nutrition.", | CODE |
| LOW | SparkyFitnessServer/ai/tools/engagementTools.ts | 176 | "Great workout! Don't forget to log your meals to track your nutrition."; | CODE |
| MEDIUM | helm/chart/values.yaml | 56 | # For local testin and port forwarding, you can use the below commented value. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | SparkyFitnessGarmin/service.py | 133 | CODE | |
| LOW | SparkyFitnessGarmin/service.py | 239 | CODE | |
| LOW | SparkyFitnessGarmin/routes.py | 146 | CODE | |
| LOW | SparkyFitnessGarmin/routes.py | 1592 | CODE | |
| LOW | SparkyFitnessGarmin/routes.py | 1821 | CODE | |
| LOW | SparkyFitnessGarmin/routes.py | 1658 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | SparkyFitnessServer/services/corosService.ts | 278 | // Step 1: Chunk the requested date range into 90-day windows | COMMENT |
| LOW | SparkyFitnessServer/services/corosService.ts | 546 | // Step 3: Raw Health Capture (Phase 1 mock capture ONLY; does not write to DB) | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | SparkyFitnessGarmin/service.py | 11 | logger = logging.getLogger(__name__) | CODE |
| LOW | SparkyFitnessGarmin/main.py | 9 | logger = logging.getLogger(__name__) | CODE |
| LOW | SparkyFitnessGarmin/routes.py | 45 | logger = logging.getLogger(__name__) | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | SparkyFitnessGarmin/routes.py | 47 | # Create the router | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | SparkyFitnessGarmin/service.py | 1 | CODE | |
| LOW | SparkyFitnessGarmin/routes.py | 2 | CODE |