Your Bambu Lab. No Cloud. Your Rules. Self-hosted command center for Bambu Lab — from one A1 to a 40-printer farm.
This report presents the forensic synthetic code analysis of maziggy/bambuddy, a Python project with 2,532 GitHub stars. SynthScan v2.0 examined 560,928 lines of code across 1156 source files, recording 8948 pattern matches distributed across 20 syntactic categories. The overall adjusted score of 20.3 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).
Longitudinal tracking requires multiple scan runs. Once this repository is re-scanned after new commits land, this chart will visualise how the synthetic code signal evolves over time — enabling you to detect whether AI authorship is growing, stabilising, or being actively corrected by human engineers.
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 8948 distinct pattern matches across 20 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/printer.ts | 39 | export function filterCompatibleQueueItems( | 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 | 52 | export function matchesPrinterModelSuffix(presetSuffix: string, printerModel: string): boolean { | CODE |
| LOW | frontend/src/utils/slicerPrinterMatch.ts | 132 | function extractPrinterPresetModel(printerPresetName: string): { model: string; nozzle: string | null } | null { | 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 | 38 | export function parsePreheatFilamentTargets(raw: string): Record<string, number> { | CODE |
| LOW | frontend/src/utils/preheatFilamentTargets.ts | 59 | export function serializePreheatFilamentTargets(map: Record<string, number>): string { | CODE |
| LOW | frontend/src/utils/preheatFilamentTargets.ts | 76 | export function normalizePreheatFilamentType(trayType: string): string { | CODE |
| LOW | frontend/src/utils/preheatFilamentTargets.ts | 84 | export function deriveChamberTargetForTrays( | CODE |
| LOW | frontend/src/components/ModelViewer.tsx | 140 | function parsePlateIdFromAttributes(element: Element): number | null { | CODE |
| LOW | frontend/src/components/CreateUserAdvancedAuthModal.tsx | 32 | export function CreateUserAdvancedAuthModal({ | CODE |
| LOW | frontend/src/components/ConnectionDiagnostic.tsx | 103 | 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 | 22 | export function PreheatFilamentTargetsEditor({ value, onChange, disabled = false }: Props) { | 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 | 129 | function buildLocalFilamentOptions(localPresets: LocalPreset[]): FilamentOption[] { | CODE |
| LOW | frontend/src/__tests__/components/SliceModal.test.tsx | 459 | function makeMultiPlateLibraryResponse() { | CODE |
| LOW | frontend/src/__tests__/components/SliceModal.test.tsx | 684 | function makeMultiColorPlateResponse() { | CODE |
| LOW | frontend/src/__tests__/components/SliceModal.test.tsx | 708 | function makeMultiColorRequirementsResponse() { | CODE |
| LOW | frontend/src/hooks/useMultiPrinterFilamentMapping.ts | 199 | function computeMappingWithOverrides( | CODE |
| LOW | frontend/src/hooks/useMultiPrinterFilamentMapping.ts | 294 | 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 | 1324 | function NozzleTemperatureControlBox({ | 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 | gcode_viewer/js/camera-controls.js | 266 | var extractClientCoordFromEvent = function extractClientCoordFromEvent(event, out) { | CODE |
| LOW | gcode_viewer/js/prettygcode.js | 1635 | function resizeCanvasToDisplaySize() { | CODE |
| LOW⚡ | backend/app/main.py | 2067 | async def _capture_snapshot_for_notification(printer_id: int, printer, logger) -> bytes | None: | CODE |
| LOW⚡ | backend/app/main.py | 5138 | async def _background_layer_timelapse(): | CODE |
| LOW⚡ | backend/app/main.py | 5465 | def start_ams_history_recording(): | CODE |
| LOW⚡ | backend/app/main.py | 5473 | def stop_ams_history_recording(): | CODE |
| LOW⚡ | backend/app/main.py | 5594 | def start_printer_sensor_history_recording(): | CODE |
| LOW⚡ | backend/app/main.py | 5601 | def stop_printer_sensor_history_recording(): | CODE |
| LOW⚡ | backend/app/main.py | 5727 | async def _spoolbuddy_watchdog_loop(): | CODE |
| LOW⚡ | backend/app/main.py | 5741 | def start_spoolbuddy_watchdog(): | CODE |
| LOW⚡ | backend/app/main.py | 5795 | def _evict_stale_expected_prints() -> None: | CODE |
| LOW⚡ | backend/app/main.py | 5833 | async def _expected_prints_cleanup_loop() -> None: | CODE |
| LOW⚡ | backend/app/main.py | 5845 | def start_expected_prints_cleanup() -> None: | CODE |
| LOW⚡ | backend/app/main.py | 5852 | def stop_expected_prints_cleanup() -> None: | CODE |
| LOW | backend/app/main.py | 724 | def _compute_run_filament_grams( | CODE |
| LOW | backend/app/main.py | 788 | def _scope_notification_archive_data_to_plate( | CODE |
| LOW | backend/app/main.py | 853 | def _extract_filament_data_from_mqtt(data: dict, ams_mapping: list[int] | None = None) -> dict[str, str]: | CODE |
| LOW | backend/app/main.py | 936 | def _maybe_start_layer_timelapse(printer, printer_id: int, archive_id: int) -> bool: | CODE |
| LOW | backend/app/main.py | 961 | def _format_hms_error_summary(hms_errors: list[dict]) -> str | None: | CODE |
| LOW | backend/app/main.py | 988 | async def _bump_library_file_usage_if_completed(db, item, queue_status: str) -> None: | CODE |
| LOW | backend/app/main.py | 1005 | def mark_printer_stopped_by_user(printer_id: int) -> None: | CODE |
| LOW | backend/app/main.py | 1021 | async def _maybe_notify_printer_offline(printer_id: int) -> None: | CODE |
| LOW | backend/app/main.py | 2152 | async def _send_print_start_notification( | CODE |
| LOW | backend/app/main.py | 2192 | async def _dispatch_user_print_email( | CODE |
| LOW | backend/app/main.py | 2227 | def _load_objects_from_archive(archive, printer_id: int, logger) -> None: | CODE |
| LOW | backend/app/main.py | 3358 | async def _capture_timelapse_baseline_at_start(printer, printer_id: int, logger: logging.Logger) -> None: | CODE |
| LOW | backend/app/main.py | 3384 | async def _scan_for_timelapse_with_retries(archive_id: int, baseline_names: set[str] | None = None): | CODE |
| 5341 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 | 100 | # ============================================================ | COMMENT |
| MEDIUM⚡ | docker-publish-daily-beta.sh | 102 | # ============================================================ | COMMENT |
| MEDIUM⚡ | docker-publish-daily-beta.sh | 125 | # ============================================================ | COMMENT |
| MEDIUM⚡ | docker-publish-daily-beta.sh | 127 | # ============================================================ | COMMENT |
| MEDIUM⚡ | docker-publish-daily-beta.sh | 286 | # ============================================================ | COMMENT |
| MEDIUM⚡ | docker-publish-daily-beta.sh | 288 | # ============================================================ | COMMENT |
| MEDIUM⚡ | docker-publish-daily-beta.sh | 378 | # ============================================================ | COMMENT |
| MEDIUM⚡ | docker-publish-daily-beta.sh | 380 | # ============================================================ | COMMENT |
| MEDIUM | docker-publish-daily-beta.sh | 398 | # ============================================================ | COMMENT |
| MEDIUM | docker-publish-daily-beta.sh | 400 | # ============================================================ | COMMENT |
| MEDIUM | docker-publish-daily-beta.sh | 429 | # ============================================================ | COMMENT |
| MEDIUM | docker-publish-daily-beta.sh | 431 | # ============================================================ | 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 | 704 | # ----------------------------------------------------------------------------- | COMMENT |
| MEDIUM | install/install.sh | 706 | # ----------------------------------------------------------------------------- | 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 |
| 1112 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 | 4463 | def _notify_no_archive(): | CODE |
| LOW⚡ | backend/app/main.py | 1835 | except Exception as e: | CODE |
| LOW⚡ | backend/app/main.py | 2059 | except Exception as e: | CODE |
| LOW⚡ | backend/app/main.py | 2063 | except Exception as e: | CODE |
| LOW⚡ | backend/app/main.py | 4347 | except Exception as e: | CODE |
| LOW⚡ | backend/app/main.py | 4349 | except Exception as e: | CODE |
| LOW⚡ | backend/app/main.py | 5126 | except Exception as e: | CODE |
| LOW⚡ | backend/app/main.py | 5130 | except Exception as e: | CODE |
| LOW⚡ | backend/app/main.py | 5460 | except Exception as e: | CODE |
| LOW⚡ | backend/app/main.py | 5589 | except Exception as e: | CODE |
| LOW⚡ | backend/app/main.py | 5736 | except Exception as e: | CODE |
| LOW⚡ | backend/app/main.py | 5840 | except Exception as e: | CODE |
| LOW | backend/app/main.py | 675 | except Exception as e: | CODE |
| LOW | backend/app/main.py | 1062 | except Exception as e: | CODE |
| LOW | backend/app/main.py | 1192 | except Exception: | CODE |
| LOW | backend/app/main.py | 1244 | except Exception as e: | CODE |
| LOW | backend/app/main.py | 1345 | except Exception as e: | CODE |
| LOW | backend/app/main.py | 1390 | except Exception: | CODE |
| LOW | backend/app/main.py | 1408 | except Exception as e: | CODE |
| LOW | backend/app/main.py | 1541 | except Exception: | CODE |
| LOW | backend/app/main.py | 1589 | except Exception as e: | CODE |
| LOW | backend/app/main.py | 1755 | except Exception: | CODE |
| LOW | backend/app/main.py | 1891 | except Exception as e: | CODE |
| LOW | backend/app/main.py | 1917 | except Exception as e: | CODE |
| LOW | backend/app/main.py | 1928 | except Exception as e: | CODE |
| LOW | backend/app/main.py | 2025 | except Exception as e: | CODE |
| LOW | backend/app/main.py | 2122 | except Exception as e: | CODE |
| LOW | backend/app/main.py | 2147 | except Exception as e: | CODE |
| LOW | backend/app/main.py | 2188 | except Exception as e: | CODE |
| LOW | backend/app/main.py | 2245 | except Exception as e: | CODE |
| LOW | backend/app/main.py | 2287 | except Exception: | CODE |
| LOW | backend/app/main.py | 2300 | except Exception as e: | CODE |
| LOW | backend/app/main.py | 2310 | except Exception as e: | CODE |
| LOW | backend/app/main.py | 2405 | except Exception as notif_err: | CODE |
| LOW | backend/app/main.py | 2409 | except Exception as plate_err: | CODE |
| LOW | backend/app/main.py | 2626 | except Exception: | CODE |
| LOW | backend/app/main.py | 2670 | except Exception as e: | CODE |
| LOW | backend/app/main.py | 2929 | except Exception as e: | CODE |
| LOW | backend/app/main.py | 2994 | except Exception as e: | CODE |
| LOW | backend/app/main.py | 3079 | except Exception as e: | CODE |
| LOW | backend/app/main.py | 3193 | except Exception: | CODE |
| LOW | backend/app/main.py | 3207 | except Exception as e: | CODE |
| LOW | backend/app/main.py | 3214 | except Exception as e: | CODE |
| LOW | backend/app/main.py | 3264 | except Exception: | CODE |
| LOW | backend/app/main.py | 3295 | except Exception as e: | CODE |
| LOW | backend/app/main.py | 3309 | except Exception as e: | CODE |
| LOW | backend/app/main.py | 3351 | except Exception as e: | CODE |
| LOW | backend/app/main.py | 3380 | except Exception as e: | CODE |
| LOW | backend/app/main.py | 3449 | except Exception as e: | CODE |
| LOW | backend/app/main.py | 3528 | except Exception as e: | CODE |
| LOW | backend/app/main.py | 3569 | except Exception as e: | CODE |
| LOW | backend/app/main.py | 3829 | except Exception as e: | CODE |
| LOW | backend/app/main.py | 3953 | except Exception as e: | CODE |
| LOW | backend/app/main.py | 3993 | except Exception as e: | CODE |
| LOW | backend/app/main.py | 4040 | except Exception: | CODE |
| LOW | backend/app/main.py | 4203 | except Exception as e: | CODE |
| LOW | backend/app/main.py | 4240 | except Exception as e: | CODE |
| 614 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | backend/app/cli.py | 9 | 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 | 167 | CODE | |
| LOW | backend/app/core/database.py | 167 | CODE | |
| LOW | backend/app/core/database.py | 167 | CODE | |
| LOW | backend/app/core/database.py | 167 | CODE | |
| LOW | backend/app/core/database.py | 167 | CODE | |
| LOW | backend/app/core/database.py | 167 | CODE | |
| LOW | backend/app/core/database.py | 167 | CODE | |
| LOW | backend/app/core/database.py | 167 | CODE | |
| LOW | backend/app/core/database.py | 167 | CODE | |
| LOW | backend/app/core/database.py | 167 | CODE | |
| LOW | backend/app/core/database.py | 167 | CODE | |
| LOW | backend/app/core/database.py | 167 | CODE | |
| LOW | backend/app/core/database.py | 167 | CODE | |
| LOW | backend/app/core/database.py | 167 | CODE | |
| LOW | backend/app/core/database.py | 167 | CODE | |
| LOW | backend/app/core/database.py | 167 | CODE | |
| LOW | backend/app/core/database.py | 167 | CODE | |
| LOW | backend/app/core/database.py | 167 | CODE | |
| LOW | backend/app/core/database.py | 167 | CODE | |
| LOW | backend/app/core/database.py | 167 | CODE | |
| LOW | backend/app/core/database.py | 167 | CODE | |
| LOW | backend/app/core/database.py | 167 | CODE | |
| LOW | backend/app/core/database.py | 167 | CODE | |
| LOW | backend/app/core/database.py | 167 | CODE | |
| LOW | backend/app/core/database.py | 167 | CODE | |
| LOW | backend/app/core/database.py | 167 | CODE | |
| LOW | backend/app/core/database.py | 167 | CODE | |
| LOW | backend/app/core/database.py | 167 | CODE | |
| LOW | backend/app/core/database.py | 167 | CODE | |
| LOW | backend/app/core/database.py | 167 | CODE | |
| LOW | backend/app/core/database.py | 167 | CODE | |
| LOW | backend/app/core/database.py | 167 | CODE | |
| LOW | backend/app/core/database.py | 167 | CODE | |
| LOW | backend/app/core/database.py | 167 | CODE | |
| LOW | backend/app/core/database.py | 167 | CODE | |
| LOW | backend/app/core/database.py | 167 | CODE | |
| LOW | backend/app/core/database.py | 167 | CODE | |
| LOW | backend/app/core/database.py | 167 | CODE | |
| LOW | backend/app/core/database.py | 167 | CODE | |
| LOW | backend/app/core/database.py | 167 | CODE | |
| LOW | backend/app/core/database.py | 167 | CODE | |
| LOW | backend/app/core/database.py | 167 | CODE | |
| LOW | backend/app/core/database.py | 167 | CODE | |
| LOW | backend/app/core/database.py | 167 | CODE | |
| LOW | backend/app/core/database.py | 167 | CODE | |
| LOW | backend/app/core/database.py | 167 | CODE | |
| LOW | backend/app/core/database.py | 167 | CODE | |
| LOW | backend/app/core/database.py | 167 | CODE | |
| LOW | backend/app/core/asyncio_handlers.py | 10 | CODE | |
| LOW | backend/app/core/logging_filters.py | 11 | CODE | |
| LOW | backend/app/core/local_config.py | 26 | CODE | |
| LOW | backend/app/utils/tray_split.py | 17 | CODE | |
| LOW | backend/app/utils/safe_path.py | 18 | CODE | |
| 568 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | docker-publish-daily-beta.sh | 332 | # 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 | backend/app/main.py | 3107 | # 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 | 719 | # Create a temporary engine for the import (current engine was disposed) | COMMENT |
| MEDIUM | backend/app/api/routes/projects.py | 1689 | # Create the project | COMMENT |
| MEDIUM | backend/app/api/routes/projects.py | 1814 | # Create the project | COMMENT |
| MEDIUM | backend/app/services/layer_timelapse.py | 112 | # Create a concat file listing all frames | COMMENT |
| MEDIUM | backend/app/services/smart_plug_manager.py | 443 | # Create a minimal plug-like object for the service | COMMENT |
| MEDIUM | backend/app/services/bambu_mqtt.py | 2118 | # Create a hash of relevant AMS data to detect changes | COMMENT |
| MEDIUM | backend/app/services/virtual_printer/manager.py | 1626 | # This method is kept for backward compat with the settings endpoint. | COMMENT |
| MEDIUM | backend/tests/conftest.py | 186 | # Create a new session maker for the test engine | COMMENT |
| MEDIUM | backend/tests/conftest.py | 316 | # 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 | 640 | # 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 | 437 | # Create a mock provider with digest enabled | COMMENT |
| MEDIUM | …ckend/tests/unit/services/test_notification_service.py | 525 | # 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_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 | 1291 | # Create a printer with model X1C so the API can validate | COMMENT |
| MEDIUM | backend/tests/integration/test_print_queue_api.py | 2123 | # 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 |
| MEDIUM | backend/tests/integration/test_ownership_permissions.py | 439 | # Create an archive to link to the queue item | COMMENT |
| MEDIUM | backend/tests/integration/test_ownership_permissions.py | 966 | # Create a new user with items | COMMENT |
| 19 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | backend/app/main.py | 1068 | CODE | |
| LOW | backend/app/main.py | 1375 | CODE | |
| LOW | backend/app/main.py | 2227 | CODE | |
| LOW | backend/app/main.py | 2249 | CODE | |
| LOW | backend/app/main.py | 3327 | CODE | |
| LOW | backend/app/main.py | 3384 | CODE | |
| LOW | backend/app/main.py | 3581 | CODE | |
| LOW | backend/app/main.py | 3842 | CODE | |
| LOW | backend/app/main.py | 3966 | CODE | |
| LOW | backend/app/main.py | 5229 | CODE | |
| LOW | backend/app/main.py | 5500 | CODE | |
| LOW | backend/app/main.py | 5614 | CODE | |
| LOW | backend/app/main.py | 5956 | CODE | |
| LOW | backend/app/main.py | 4754 | CODE | |
| LOW | backend/app/main.py | 4930 | CODE | |
| LOW | backend/app/main.py | 5062 | CODE | |
| LOW | backend/app/main.py | 5138 | CODE | |
| LOW | backend/app/main.py | 4463 | CODE | |
| LOW | backend/app/core/auth.py | 893 | CODE | |
| LOW | backend/app/core/auth.py | 1229 | CODE | |
| LOW | backend/app/core/database.py | 475 | CODE | |
| LOW | backend/app/core/database.py | 659 | CODE | |
| LOW | backend/app/core/database.py | 3406 | CODE | |
| LOW | backend/app/utils/threemf_tools.py | 25 | CODE | |
| LOW | backend/app/utils/threemf_tools.py | 214 | CODE | |
| LOW | backend/app/utils/threemf_tools.py | 310 | CODE | |
| LOW | backend/app/utils/threemf_tools.py | 427 | CODE | |
| LOW | backend/app/utils/threemf_tools.py | 505 | CODE | |
| LOW | backend/app/utils/threemf_tools.py | 563 | CODE | |
| LOW | backend/app/utils/threemf_tools.py | 721 | CODE | |
| LOW | backend/app/utils/threemf_tools.py | 925 | CODE | |
| LOW | backend/app/utils/threemf_tools.py | 1021 | 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 | 1705 | CODE | |
| LOW | backend/app/api/routes/slicer_presets.py | 99 | CODE | |
| LOW | backend/app/api/routes/slicer_presets.py | 182 | CODE | |
| LOW | backend/app/api/routes/auth.py | 214 | CODE | |
| LOW | backend/app/api/routes/auth.py | 366 | CODE | |
| LOW | backend/app/api/routes/auth.py | 664 | CODE | |
| LOW | backend/app/api/routes/auth.py | 1774 | CODE | |
| LOW | backend/app/api/routes/system.py | 244 | 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 | 667 | CODE | |
| LOW | backend/app/api/routes/library.py | 450 | CODE | |
| LOW | backend/app/api/routes/library.py | 543 | CODE | |
| LOW | backend/app/api/routes/library.py | 606 | CODE | |
| LOW | backend/app/api/routes/library.py | 1106 | CODE | |
| LOW | backend/app/api/routes/library.py | 1213 | CODE | |
| LOW | backend/app/api/routes/library.py | 1485 | CODE | |
| LOW | backend/app/api/routes/library.py | 1785 | CODE | |
| LOW | backend/app/api/routes/library.py | 1935 | CODE | |
| LOW | backend/app/api/routes/library.py | 2103 | CODE | |
| LOW | backend/app/api/routes/library.py | 2598 | CODE | |
| LOW | backend/app/api/routes/library.py | 2953 | CODE | |
| LOW | backend/app/api/routes/library.py | 3212 | CODE | |
| 216 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | install/install.sh | 304 | # Check if Homebrew is installed | COMMENT |
| LOW | install/install.sh | 867 | # 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 | 1843 | # Check if Spoolman is enabled | COMMENT |
| LOW | backend/app/main.py | 1634 | # Check if assignment already exists for this slot | COMMENT |
| LOW | backend/app/main.py | 1875 | # Check if Spoolman is reachable | COMMENT |
| LOW | backend/app/main.py | 2494 | # Check if this is an expected print from reprint/scheduled | COMMENT |
| LOW | backend/app/main.py | 2683 | # Check if there's already a "printing" archive for this printer/file | COMMENT |
| LOW | backend/app/main.py | 4309 | # Check if queue is now empty and send notification | COMMENT |
| LOW | backend/app/main.py | 4365 | # Check if any provider has on_bed_cooled enabled (skip registration if none) | COMMENT |
| LOW | backend/app/main.py | 4868 | # Check if camera stream is active - use buffered frame to avoid freeze | COMMENT |
| LOW | backend/app/main.py | 6566 | # Check if auth is enabled. Fail CLOSED on any exception during the | COMMENT |
| LOW | backend/app/core/auth.py | 1045 | # Check if it's an API key (starts with bb_) | COMMENT |
| LOW | backend/app/core/auth.py | 1264 | # Check if key matches (verify against hash) | COMMENT |
| LOW | backend/app/core/auth.py | 1397 | # Check if it's an API key (starts with bb_) | COMMENT |
| LOW | backend/app/core/auth.py | 1480 | # Check if it's an API key (starts with bb_) | COMMENT |
| LOW | backend/app/core/auth.py | 1734 | # Check if it's an API key (starts with bb_) | COMMENT |
| LOW | backend/app/core/database.py | 1208 | # Check if archive_id needs to be made nullable (requires table recreation in SQLite) | STRING |
| LOW | backend/app/utils/threemf_tools.py | 342 | # Check if only one extruder is active. | COMMENT |
| LOW | backend/app/models/archive.py | 48 | # Print result | COMMENT |
| LOW | backend/app/api/routes/auth.py | 232 | # Check if admin users already exist | COMMENT |
| LOW | backend/app/api/routes/auth.py | 262 | # Check if username already exists (shouldn't happen if no admin users exist, but check anyway) | COMMENT |
| LOW | backend/app/api/routes/auth.py | 376 | # Check if auth is enabled | COMMENT |
| LOW | backend/app/api/routes/auth.py | 401 | # Check if LDAP is enabled | COMMENT |
| LOW | backend/app/api/routes/auth.py | 600 | # Check if it's an API key (starts with bb_) | COMMENT |
| LOW | backend/app/api/routes/auth.py | 972 | # Check if advanced auth is enabled | COMMENT |
| LOW | backend/app/api/routes/auth.py | 1149 | # 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 | 1226 | # Check if debug logging is enabled and collect sensitive values for redaction | COMMENT |
| LOW | backend/app/api/routes/library.py | 1744 | # Check if subfolder has any remaining files | COMMENT |
| LOW | backend/app/api/routes/library.py | 1752 | # Check if it has any remaining child folders | COMMENT |
| LOW | backend/app/api/routes/library.py | 2170 | # Check if folder already exists | COMMENT |
| LOW | backend/app/api/routes/library.py | 2224 | # Check if folder exists | COMMENT |
| LOW | backend/app/api/routes/library.py | 3003 | # Check if this is the requested plate | COMMENT |
| LOW | backend/app/api/routes/users.py | 101 | # Check if advanced auth is enabled | COMMENT |
| LOW | backend/app/api/routes/users.py | 106 | # Check if username already exists (case-insensitive) | COMMENT |
| LOW | backend/app/api/routes/users.py | 128 | # Check if email already exists (case-insensitive) | COMMENT |
| LOW | backend/app/api/routes/users.py | 257 | # Check if new username already exists (case-insensitive) | COMMENT |
| LOW | backend/app/api/routes/users.py | 269 | # 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 | 296 | # Check if this is a prerelease (has b/beta/alpha/rc/daily suffix anywhere) | COMMENT |
| LOW | backend/app/api/routes/updates.py | 389 | # Check if beta updates should be included | COMMENT |
| LOW | backend/app/api/routes/archives.py | 2932 | # Check if source 3MF exists - this is where actual mesh data typically lives | COMMENT |
| LOW | backend/app/api/routes/groups.py | 95 | # Check if group name already exists | COMMENT |
| LOW | backend/app/api/routes/groups.py | 179 | # Check if updating name to one that already exists | COMMENT |
| LOW | backend/app/api/routes/groups.py | 286 | # Check if user is already in group | COMMENT |
| LOW | backend/app/api/routes/groups.py | 324 | # Check if user is in group | COMMENT |
| LOW | backend/app/api/routes/camera.py | 174 | # Check if client disconnected | COMMENT |
| LOW | backend/app/api/routes/camera.py | 544 | # Check if stream was explicitly stopped (e.g., by stop endpoint) | COMMENT |
| LOW | backend/app/api/routes/camera.py | 1026 | # Check if there's an active stream for this printer | COMMENT |
| LOW | backend/app/api/routes/settings.py | 245 | # Check if any MQTT settings are being updated | COMMENT |
| 62 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | backend/app/core/auth.py | 25 | 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/threemf_tools.py | 18 | logger = logging.getLogger(__name__) | CODE |
| LOW | backend/app/models/__init__.py | 42 | __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 | 55 | logger = logging.getLogger(__name__) | CODE |
| LOW⚡ | backend/app/api/routes/auth.py | 183 | async def set_advanced_auth_enabled(db: AsyncSession, enabled: bool) -> None: | CODE |
| LOW⚡ | backend/app/api/routes/auth.py | 190 | async def set_auth_enabled(db: AsyncSession, enabled: bool) -> None: | CODE |
| LOW | backend/app/api/routes/auth.py | 205 | 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/spoolman.py | 39 | logger = logging.getLogger(__name__) | CODE |
| LOW | backend/app/api/routes/support.py | 46 | logger = logging.getLogger(__name__) | CODE |
| LOW | backend/app/api/routes/library.py | 76 | 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 | 52 | 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 | 40 | 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 | 65 | 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 | 64 | logger = logging.getLogger(__name__) | CODE |
| LOW | backend/app/api/routes/makerworld.py | 49 | 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 | 44 | logger = logging.getLogger(__name__) | CODE |
| LOW | backend/app/api/routes/github_backup.py | 26 | logger = logging.getLogger(__name__) | CODE |
| LOW | backend/app/api/routes/_spoolman_helpers.py | 20 | 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 | 92 | 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 | 63 | 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 | 43 | logger = logging.getLogger(__name__) | CODE |
| LOW | backend/app/api/routes/print_queue.py | 46 | logger = logging.getLogger(__name__) | CODE |
| LOW | backend/app/api/routes/projects.py | 47 | 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 |
| LOW | backend/app/api/routes/inventory.py | 72 | logger = logging.getLogger(__name__) | CODE |
| LOW | backend/app/services/print_scheduler.py | 47 | logger = logging.getLogger(__name__) | CODE |
| LOW | backend/app/services/timelapse_processor.py | 11 | logger = logging.getLogger(__name__) | CODE |
| LOW | backend/app/services/library_trash.py | 32 | logger = logging.getLogger(__name__) | CODE |
| 99 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | requirements.txt | 1 | # Web Framework | COMMENT |
| LOW | requirements.txt | 101 | COMMENT | |
| LOW | requirements.txt | 121 | # Transitive pin: urllib3 2.6.3 has CVE-2026-44431 and CVE-2026-44432; | 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 | # Transitive of pip-audit→CacheControl. 1.2.1 patches GHSA-6v7p-g79w-8964 | 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 | # Example: DATABASE_URL=postgresql+asyncpg://bambuddy:password@db-host:5432/bambuddy | COMMENT |
| LOW | docker-compose.yml | 141 | # Example for a single NAS mount: | COMMENT |
| LOW | docker-publish-daily-beta.sh | 1 | #!/bin/bash | COMMENT |
| LOW | docker-publish-daily-beta.sh | 21 | # Prerequisites: | 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/utils/colors.ts | 1 | // Runtime color-name catalog, populated once at app startup by ColorCatalogProvider | 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 | 21 | // is the @BBL token → printer-preset fragment map derived from the backend's | COMMENT |
| LOW | frontend/src/utils/slicerPrinterMatch.ts | 101 | // Bambu Studio's naming convention for bundled presets: the 0.4 nozzle is | COMMENT |
| LOW | frontend/src/utils/slicerPrinterMatch.ts | 161 | // identical — e.g. "Q1" preset against "Bambu Lab Q1 0.4 nozzle" — | COMMENT |
| LOW | frontend/src/components/ConfigureAmsSlotModal.tsx | 201 | const normalized = name.toLowerCase().trim(); | COMMENT |
| LOW | frontend/src/components/ConfigureAmsSlotModal.tsx | 221 | // | 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/QueueTimelineView.tsx | 81 | const nowMs = now.getTime(); | COMMENT |
| LOW | frontend/src/components/SliceModal.tsx | 61 | // preview slice on first open of an unsliced project file (cached after); | COMMENT |
| LOW | frontend/src/components/SliceModal.tsx | 201 | const [errorMessage, setErrorMessage] = useState<string | null>(null); | COMMENT |
| LOW | frontend/src/components/SliceModal.tsx | 261 | }); | 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 | 121 | COMMENT | |
| LOW | frontend/src/__tests__/setup.ts | 81 | COMMENT | |
| LOW | frontend/src/__tests__/utils/date.test.ts | 441 | describe('localDateKey (#1446 — Print Activity heatmap bucketing)', () => { | 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 | // A 401/403 from the token mint is an AUTH decision, not a transient | COMMENT |
| LOW | frontend/src/api/client.ts | 481 | // Air conditioning mode (0=cooling, 1=heating) | COMMENT |
| LOW | frontend/src/api/client.ts | 2821 | // True when color_name was synthesised from subtype because Spoolman has no | COMMENT |
| LOW | frontend/src/pages/SettingsPage.tsx | 901 | // causing the text field to reset mid-typing. Instead, let the useEffect | COMMENT |
| LOW | frontend/src/pages/MakerworldPage.tsx | 121 | // MakerWorld folder" (auto-created if missing). Any other value is the id | COMMENT |
| LOW | frontend/src/pages/spoolbuddy/SpoolBuddyDashboard.tsx | 261 | const byTag = spools.find((s) => tagsEquivalent(s.tag_uid, displayedTagId)); | COMMENT |
| LOW | deploy/docker-entrypoint.sh | 1 | #!/bin/sh | COMMENT |
| LOW | slicer-api/docker-compose.yml | 1 | # Optional slicer-API sidecar stack for Bambuddy. | COMMENT |
| LOW | gcode_viewer/js/prettygcode.js | 41 | // next segment is recalculated. Reduces the number of sin/cos calls. | COMMENT |
| LOW | gcode_viewer/js/prettygcode.js | 141 | // Calculate xy_segment_theta, z_segment_theta, and e_segment_theta | COMMENT |
| LOW | gcode_viewer/js/prettygcode.js | 981 | COMMENT | |
| LOW | gcode_viewer/js/bambuddy_adapter.js | 241 | var args = Array.prototype.slice.call(arguments); | COMMENT |
| LOW | backend/app/main.py | 261 | # per-request ContextVar so the format string above can reference it. | COMMENT |
| LOW | backend/app/main.py | 341 | # fires when stg_cur enters 22 ("Filament unloading") at end-of-print — toolhead | COMMENT |
| LOW | backend/app/main.py | 361 | # (#1542 follow-up — power-cycle ghost prints). The value is True after | COMMENT |
| LOW | backend/app/main.py | 401 | # Track printers waiting for bed to cool after print completion. | COMMENT |
| LOW | backend/app/main.py | 421 | # Debounce: a printer must stay offline this long before we notify. Sized | COMMENT |
| LOW | backend/app/main.py | 501 | _expected_print_creators: dict[tuple[int, str], int] = {} | COMMENT |
| 142 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | backend/app/core/auth.py | 1684 | - Ownerless items (created_by_id = null) require ``all_permission`` | STRING |
| HIGH | backend/app/models/library.py | 96 | # Soft-delete / trash bin (Issue #1008). When non-null, the file is in the | COMMENT |
| HIGH | backend/app/models/archive.py | 87 | # Soft-delete sentinel (#1343). When non-null, the UI hides this archive | COMMENT |
| HIGH | backend/app/schemas/library.py | 216 | # never null, so the FE can iterate without a guard. | COMMENT |
| HIGH | backend/app/api/routes/library.py | 4712 | 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 | 878 | "git pull && docker compose build --pull && docker compose up -d" | CODE |
| HIGH | backend/app/services/print_scheduler.py | 2069 | 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/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 | 406 | """Ownerless archive (created_by_id=null) requires REPRINT_ALL. | 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 | 859 | # And a fresh GET also sees it as null, not the literal string "None". | COMMENT |
| HIGH | backend/tests/integration/test_printers_api.py | 1279 | 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 | 101 | # Step 1: Read and validate APP_VERSION | COMMENT |
| LOW⚡ | docker-publish-daily-beta.sh | 126 | # Step 2: Build & push Docker images | COMMENT |
| LOW⚡ | docker-publish-daily-beta.sh | 287 | # Step 3: Create/update GitHub release | COMMENT |
| LOW⚡ | docker-publish-daily-beta.sh | 379 | # 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 | 496 | // 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 | 548 | // Step 1: pick Plate 2. | COMMENT |
| LOW⚡ | frontend/src/__tests__/components/SliceModal.test.tsx | 552 | // Step 2: profile dropdowns are now visible. | COMMENT |
| LOW⚡ | frontend/src/__tests__/components/SliceModal.test.tsx | 555 | // Step 3: submit and verify the plate index made it into the body. | COMMENT |
| LOW⚡ | frontend/src/api/client.ts | 3560 | // Step 1: send a verification code to the user's email (proof of possession) | COMMENT |
| LOW⚡ | frontend/src/api/client.ts | 3563 | // Step 2: confirm with the code received by email | COMMENT |
| LOW | backend/app/core/database.py | 3081 | # Step 1: link old log entries to their archive via print_name + printer_id. | COMMENT |
| LOW | backend/app/core/database.py | 3105 | # Step 2: backfill cost / energy_kwh / energy_cost onto the latest linked | STRING |
| LOW | backend/app/services/ldap_service.py | 239 | # 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 | 4490 | # Step 1: Stale detection triggers | COMMENT |
| LOW⚡ | backend/tests/unit/services/test_bambu_mqtt.py | 4494 | # Step 2: Paho fires disconnect callback (from socket close) | COMMENT |
| LOW⚡ | backend/tests/unit/services/test_bambu_mqtt.py | 4499 | # Step 3: Paho reconnects | COMMENT |
| LOW | backend/tests/unit/services/test_bambu_mqtt.py | 3003 | # Step 1: Right extruder loads AMS 0 slot 0 | COMMENT |
| LOW | backend/tests/unit/services/test_bambu_mqtt.py | 3015 | # Step 2: Switch to left, load AMS HT | COMMENT |
| LOW | backend/tests/unit/services/test_bambu_mqtt.py | 3028 | # Step 3: Switch back to right, load AMS 0 slot 2 | COMMENT |
| LOW | backend/tests/unit/services/test_bambu_mqtt.py | 3041 | # 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 | 101 | # Step 1: Read and validate APP_VERSION | COMMENT |
| LOW⚡ | docker-publish-daily-beta.sh | 126 | # Step 2: Build & push Docker images | COMMENT |
| LOW⚡ | docker-publish-daily-beta.sh | 287 | # Step 3: Create/update GitHub release | COMMENT |
| LOW⚡ | docker-publish-daily-beta.sh | 379 | # 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 | 496 | // 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 | 548 | // Step 1: pick Plate 2. | COMMENT |
| LOW⚡ | frontend/src/__tests__/components/SliceModal.test.tsx | 552 | // Step 2: profile dropdowns are now visible. | COMMENT |
| LOW⚡ | frontend/src/__tests__/components/SliceModal.test.tsx | 555 | // Step 3: submit and verify the plate index made it into the body. | COMMENT |
| LOW⚡ | frontend/src/api/client.ts | 3560 | // Step 1: send a verification code to the user's email (proof of possession) | COMMENT |
| LOW⚡ | frontend/src/api/client.ts | 3563 | // Step 2: confirm with the code received by email | COMMENT |
| LOW | backend/app/core/database.py | 3081 | # Step 1: link old log entries to their archive via print_name + printer_id. | COMMENT |
| LOW | backend/app/core/database.py | 3105 | # Step 2: backfill cost / energy_kwh / energy_cost onto the latest linked | STRING |
| LOW | backend/app/services/ldap_service.py | 239 | # 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 | 4490 | # Step 1: Stale detection triggers | COMMENT |
| LOW⚡ | backend/tests/unit/services/test_bambu_mqtt.py | 4494 | # Step 2: Paho fires disconnect callback (from socket close) | COMMENT |
| LOW⚡ | backend/tests/unit/services/test_bambu_mqtt.py | 4499 | # Step 3: Paho reconnects | COMMENT |
| LOW | backend/tests/unit/services/test_bambu_mqtt.py | 3003 | # Step 1: Right extruder loads AMS 0 slot 0 | COMMENT |
| LOW | backend/tests/unit/services/test_bambu_mqtt.py | 3015 | # Step 2: Switch to left, load AMS HT | COMMENT |
| LOW | backend/tests/unit/services/test_bambu_mqtt.py | 3028 | # Step 3: Switch back to right, load AMS 0 slot 2 | COMMENT |
| LOW | backend/tests/unit/services/test_bambu_mqtt.py | 3041 | # 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 | 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_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/i18n/locales/zh-TW.ts | 3178 | emailPlaceholder: 'user@example.com', | CODE |
| LOW | frontend/src/i18n/locales/pt-BR.ts | 3178 | emailPlaceholder: 'user@example.com', | CODE |
| LOW | frontend/src/i18n/locales/zh-CN.ts | 3178 | emailPlaceholder: 'user@example.com', | CODE |
| LOW | frontend/src/i18n/locales/en.ts | 3219 | emailPlaceholder: 'user@example.com', | CODE |
| LOW | frontend/src/i18n/locales/ko.ts | 3018 | emailPlaceholder: 'user@example.com', | CODE |
| LOW | frontend/src/i18n/locales/ja.ts | 3190 | emailPlaceholder: 'user@example.com', | CODE |
| LOW | frontend/src/pages/SettingsPage.tsx | 6232 | 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 | 1911 | # and "user@example.com" are treated as the same identity, preventing | COMMENT |
| LOW | backend/tests/unit/test_db_dialect.py | 240 | assert rows[0] == "user@example.com" | CODE |
| LOW⚡ | backend/tests/unit/services/test_ldap_service.py | 482 | displayName="John Doe", | CODE |
| LOW⚡ | backend/tests/unit/services/test_ldap_service.py | 483 | cn="John Doe", | CODE |
| LOW⚡ | backend/tests/unit/services/test_ldap_service.py | 493 | assert results[0].display_name == "John Doe" | CODE |
| LOW⚡ | backend/tests/unit/services/test_ldap_service.py | 585 | displayName="John Doe", | CODE |
| LOW⚡ | backend/tests/unit/services/test_ldap_service.py | 595 | assert info.display_name == "John Doe" | CODE |
| LOW⚡ | backend/tests/unit/services/test_orca_cloud.py | 221 | await svc.password_login("user@example.com", "secret") | CODE |
| LOW⚡ | backend/tests/unit/services/test_orca_cloud.py | 240 | await svc.password_login("user@example.com", "secret") | CODE |
| LOW⚡ | backend/tests/unit/services/test_orca_cloud.py | 250 | await svc.password_login("user@example.com", "wrong") | 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 | 543 | json={"email": "user@example.com", "password": "x", "region": "china"}, | CODE |
| LOW | backend/tests/integration/test_cloud_auth.py | 566 | "email": "user@example.com", | CODE |
| LOW⚡ | backend/tests/integration/test_spoolbuddy.py | 216 | fake_key = "ssh-ed25519 AAAATESTKEY bambuddy-spoolbuddy" | CODE |
| LOW⚡ | backend/tests/integration/test_spoolbuddy.py | 221 | AsyncMock(return_value=fake_key), | CODE |
| LOW⚡ | backend/tests/integration/test_spoolbuddy.py | 231 | assert resp.json()["ssh_public_key"] == fake_key | CODE |
| LOW | backend/tests/integration/test_ldap_provision.py | 167 | display_name="John Doe", | CODE |
| 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 | 1833 | # 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/printers.py | 3836 | # the publish is the robust ack signal. | COMMENT |
| LOW | backend/app/api/routes/printers.py | 696 | # No conversion needed - just use the raw value directly | COMMENT |
| MEDIUM | backend/app/services/bambu_mqtt.py | 3214 | # Track RUNNING state for more robust completion detection | COMMENT |
| MEDIUM | backend/app/services/bambu_mqtt.py | 3305 | # Use _was_running flag in addition to _previous_gcode_state for more robust detection | COMMENT |
| LOW | backend/app/services/bambu_mqtt.py | 1876 | # We've already processed the status fields above, so just return if no ams list | 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 | 351 | # 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 | 1785 | CODE | |
| LOW | backend/app/api/routes/print_log.py | 27 | CODE | |
| LOW | backend/app/api/routes/cloud.py | 1158 | CODE | |
| LOW | backend/app/api/routes/archives.py | 347 | CODE | |
| LOW | backend/app/api/routes/archives.py | 619 | CODE | |
| LOW | backend/app/api/routes/archives.py | 793 | CODE | |
| LOW | backend/app/api/routes/archives.py | 892 | CODE | |
| LOW | backend/app/api/routes/archives.py | 2604 | CODE | |
| LOW | backend/app/api/routes/archives.py | 4109 | CODE | |
| LOW | backend/app/api/routes/pipeline_runs.py | 780 | CODE | |
| LOW | backend/app/api/routes/local_backup.py | 48 | CODE | |
| LOW | backend/app/api/routes/camera.py | 976 | CODE | |
| LOW | backend/app/api/routes/notification_templates.py | 173 | CODE | |
| LOW | backend/app/api/routes/settings.py | 1243 | CODE | |
| LOW | backend/app/api/routes/printers.py | 883 | CODE | |
| LOW | backend/app/api/routes/printers.py | 2186 | CODE | |
| LOW | backend/app/api/routes/notifications.py | 248 | 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 | 140 | CODE | |
| LOW | backend/app/services/usage_tracker.py | 863 | 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 | 465 | CODE | |
| LOW | backend/app/services/bambu_mqtt.py | 3601 | CODE | |
| LOW | backend/app/services/email_service.py | 88 | CODE | |
| LOW | backend/app/services/printer_manager.py | 680 | CODE | |
| LOW | backend/app/services/virtual_printer/manager.py | 145 | CODE | |
| LOW | backend/tests/integration/test_auth_apikey_rbac.py | 279 | CODE | |
| LOW | spoolbuddy/daemon/api_client.py | 60 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM⚡ | backend/app/main.py | 4354 | # Register bed cooldown waiter (event-driven via on_bed_temp_update callback). | COMMENT |
| MEDIUM⚡ | backend/app/api/routes/pipeline_runs.py | 365 | # Source resolution + orchestration | COMMENT |
| MEDIUM | backend/app/api/routes/pipeline_runs.py | 578 | # set unconditionally since the orchestration actually got here. | COMMENT |
| MEDIUM | backend/app/api/routes/pipeline_runs.py | 945 | # orchestration single-sourced. The result inherits parent_run_id. | COMMENT |
| MEDIUM | backend/app/services/bambu_mqtt.py | 2709 | # 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 | gcode_viewer/js/three.min.js | 37 | c.update(h));h.material.uniforms.t2D.value=d;!0===d.matrixAutoUpdate&&d.updateMatrix();h.material.uniforms.uvTransform.v | CODE |
| CRITICAL | gcode_viewer/js/jquery.min.js | 2 | !function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):f | 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 |