AI observability platform for production LLM and agent systems.
This report summarizes scanner evidence for pydantic/logfire, a Python project with 4,511 GitHub stars. SynthScan examined 174,541 lines of code across 673 source files, recording 2871 pattern matches distributed across 21 syntactic categories. The legacy adjusted pattern signal is 19.3 (Elevated pattern signal); it is not an authorship estimate.
Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.
Use each vector to guide manual verification of the underlying findings.
Can maintainers explain intent, assumptions, and trade-offs? 2077 finding(s).
Are imports declared and package/API names verified? 355 finding(s).
Are wrappers, guards, and repeated structures necessary? 2289 finding(s).
Which changes need focused human review? 2871 finding(s).
This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.
Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.
This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.
The scanner identified 2871 distinct pattern matches across 21 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/test_secret_scrubbing.py | 41 | def test_optimized_default_patterns_match_naive_pattern(): | CODE |
| LOW | tests/test_secret_scrubbing.py | 73 | def test_optimized_default_patterns_preserve_extra_pattern_order(extra_pattern: str, value: str, expected_match: str): | CODE |
| LOW | tests/test_secret_scrubbing.py | 87 | def test_default_pattern_start_chars_cover_each_pattern(): | CODE |
| LOW | tests/test_secret_scrubbing.py | 189 | def test_scrub_log_event_attribute(logs_exporter: TestLogExporter): | CODE |
| LOW | tests/test_secret_scrubbing.py | 562 | def test_fstring_magic_scrubbing(exporter: TestExporter): | CODE |
| LOW | tests/test_secret_scrubbing.py | 651 | def test_default_patterns_match_docs(): | CODE |
| LOW | tests/test_secret_scrubbing.py | 681 | def test_logfire_token_prefix_scrubbing(exporter: TestExporter): | CODE |
| LOW | tests/test_slow_async_callbacks.py | 13 | def test_slow_async_callbacks(exporter: TestExporter) -> None: | CODE |
| LOW | tests/test_query_client.py | 53 | def test_infers_base_url_from_token( | CODE |
| LOW | tests/test_query_client.py | 61 | def test_infers_base_url_from_unknown_token_region( | CODE |
| LOW | tests/test_query_client.py | 94 | def test_query_json_rows_read_sync(): | CODE |
| LOW | tests/test_query_client.py | 150 | def test_query_arrow_read_sync(): | STRING |
| LOW | tests/test_query_client.py | 178 | async def test_query_json_rows_read_async(): | STRING |
| LOW | tests/test_query_client.py | 220 | async def test_query_csv_read_async(): | STRING |
| LOW | tests/test_query_client.py | 239 | async def test_query_arrow_read_async(): | STRING |
| LOW | tests/test_query_client.py | 321 | def test_query_body_params_sync(): | STRING |
| LOW | tests/test_query_client.py | 337 | def test_query_methods_share_docstring(): | CODE |
| LOW | tests/test_query_client.py | 353 | def test_query_method_signatures(client_class: type[AsyncLogfireQueryClient | LogfireQueryClient]): | CODE |
| LOW | tests/test_query_client.py | 366 | def test_query_json_rows_methods_share_returns_docstring(): | CODE |
| LOW⚡ | tests/test_internal_forwarding.py | 230 | def test_forwarding_path_config_timeout_defaults(monkeypatch: pytest.MonkeyPatch) -> None: | CODE |
| LOW⚡ | tests/test_internal_forwarding.py | 238 | def test_forwarding_path_config_timeout_generic_fallback(monkeypatch: pytest.MonkeyPatch) -> None: | CODE |
| LOW⚡ | tests/test_internal_forwarding.py | 246 | def test_forwarding_path_config_timeout_signal_specific_override(monkeypatch: pytest.MonkeyPatch) -> None: | CODE |
| LOW | tests/test_internal_forwarding.py | 47 | def test_parse_forwarding_content_type(content_type: str, expected: ForwardingContentType | None) -> None: | CODE |
| LOW | tests/test_internal_forwarding.py | 58 | def test_normalize_forwarding_path_valid(path: str, expected: str) -> None: | CODE |
| LOW | tests/test_internal_forwarding.py | 71 | def test_normalize_forwarding_path_rejections(path: str) -> None: | CODE |
| LOW | tests/test_internal_forwarding.py | 79 | def test_build_forwarding_request_valid_protobuf() -> None: | CODE |
| LOW | tests/test_internal_forwarding.py | 103 | def test_build_forwarding_request_valid_json_with_parameters() -> None: | CODE |
| LOW | tests/test_internal_forwarding.py | 120 | def test_build_forwarding_request_oversized_body() -> None: | CODE |
| LOW | tests/test_internal_forwarding.py | 143 | def test_build_forwarding_request_unsupported_content_type(headers: dict[str, str], content: bytes) -> None: | CODE |
| LOW | tests/test_internal_forwarding.py | 151 | def test_build_forwarding_request_invalid_path() -> None: | CODE |
| LOW | tests/test_internal_forwarding.py | 162 | def test_build_success_response_protobuf() -> None: | CODE |
| LOW | tests/test_internal_forwarding.py | 177 | def test_build_success_response_json() -> None: | CODE |
| LOW | tests/test_internal_forwarding.py | 192 | def test_build_partial_success_response_json() -> None: | CODE |
| LOW | tests/test_internal_forwarding.py | 212 | def test_build_partial_success_response_protobuf() -> None: | CODE |
| LOW | tests/test_internal_forwarding.py | 266 | def test_forwarding_pipeline_enqueue_accepts_and_accounts_bytes() -> None: | CODE |
| LOW | tests/test_internal_forwarding.py | 312 | def test_forwarding_pipeline_enqueue_rejects_at_item_limit() -> None: | CODE |
| LOW | tests/test_internal_forwarding.py | 326 | def test_forwarding_pipeline_at_fork_reinit_clears_inherited_queue_and_worker() -> None: | CODE |
| LOW | tests/test_internal_forwarding.py | 374 | def test_forwarding_pipeline_force_flush_success_waits_for_active_send() -> None: | CODE |
| LOW | tests/test_internal_forwarding.py | 393 | def test_forwarding_pipeline_shutdown_closes_admission_and_idle_session() -> None: | CODE |
| LOW | tests/test_internal_forwarding.py | 428 | def test_forwarding_pipeline_shutdown_drains_queued_work() -> None: | CODE |
| LOW | tests/test_internal_forwarding.py | 451 | def test_forwarding_pipeline_shutdown_timeout_drops_queued_work_after_active_send() -> None: | CODE |
| LOW | tests/test_internal_forwarding.py | 470 | def test_forwarding_pipeline_send_fans_out_to_tokens(monkeypatch: pytest.MonkeyPatch) -> None: | CODE |
| LOW | tests/test_internal_forwarding.py | 526 | def test_forwarding_pipeline_worker_continues_after_unexpected_send_failure() -> None: | CODE |
| LOW | tests/test_internal_forwarding.py | 542 | def test_forwarding_manager_destinations_create_pipeline_and_group_tokens( | CODE |
| LOW | tests/test_internal_forwarding.py | 580 | def test_forwarding_manager_after_fork_callback_is_weak(monkeypatch: pytest.MonkeyPatch) -> None: | CODE |
| LOW | tests/test_internal_forwarding.py | 620 | def test_forwarding_manager_submit_reinitializes_after_pid_change(monkeypatch: pytest.MonkeyPatch) -> None: | CODE |
| LOW | tests/test_internal_forwarding.py | 660 | def test_forwarding_manager_submit_success_enqueues_per_backend_url() -> None: | CODE |
| LOW | tests/test_internal_forwarding.py | 682 | def test_forwarding_manager_submit_partial_success_for_mixed_backend_outcomes() -> None: | CODE |
| LOW | tests/test_internal_forwarding.py | 707 | def test_forwarding_manager_submit_after_close_returns_partial_success_without_enqueue() -> None: | CODE |
| LOW | tests/test_internal_forwarding.py | 739 | def test_forwarding_manager_force_flush_uses_remaining_budget(monkeypatch: pytest.MonkeyPatch) -> None: | CODE |
| LOW | tests/test_internal_forwarding.py | 753 | def test_forwarding_manager_force_flush_returns_false_for_pipeline_timeout() -> None: | CODE |
| LOW | tests/test_internal_forwarding.py | 776 | def test_forwarding_manager_shutdown_uses_remaining_budget( | CODE |
| LOW | tests/test_internal_forwarding.py | 794 | def test_forwarding_manager_shutdown_returns_false_for_pipeline_timeout() -> None: | CODE |
| LOW | tests/test_build_offline_skill_prompt.py | 40 | def test_mandatory_references_are_never_dropped() -> None: | CODE |
| LOW | tests/test_build_offline_skill_prompt.py | 58 | def test_full_build_has_no_dead_reference_links() -> None: | CODE |
| LOW | tests/test_build_offline_skill_prompt.py | 82 | def test_reference_links_inside_appendix_resolve_to_inlined_anchors() -> None: | CODE |
| LOW | tests/test_build_offline_skill_prompt.py | 105 | def test_reference_link_fragments_are_qualified_by_their_file() -> None: | CODE |
| LOW | tests/test_build_offline_skill_prompt.py | 119 | def test_reference_heading_aliases_do_not_rewrite_code_fences() -> None: | CODE |
| LOW | tests/test_build_offline_skill_prompt.py | 128 | def test_build_rewrites_public_links_only_for_inlined_skills() -> None: | CODE |
| LOW⚡ | tests/test_build_offline_skill_prompt.py | 139 | def test_auth_link_rewrite_preserves_the_complete_fragment() -> None: | CODE |
| 1785 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM⚡ | tests/test_variable_composition.py | 496 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | tests/test_variable_composition.py | 498 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | tests/test_variable_composition.py | 713 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | tests/test_variable_composition.py | 715 | # ============================================================================= | COMMENT |
| MEDIUM | tests/test_variable_composition.py | 34 | # ============================================================================= | COMMENT |
| MEDIUM | tests/test_variable_composition.py | 36 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | tests/test_template_validation.py | 103 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | tests/test_template_validation.py | 105 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | tests/test_template_validation.py | 496 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | tests/test_template_validation.py | 498 | # ============================================================================= | COMMENT |
| MEDIUM | tests/test_template_validation.py | 19 | # ============================================================================= | COMMENT |
| MEDIUM | tests/test_template_validation.py | 21 | # ============================================================================= | COMMENT |
| MEDIUM | tests/test_template_validation.py | 359 | # ============================================================================= | COMMENT |
| MEDIUM | tests/test_template_validation.py | 361 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | tests/test_datasets_client.py | 582 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | tests/test_datasets_client.py | 584 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | tests/test_datasets_client.py | 1496 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | tests/test_datasets_client.py | 1498 | # ============================================================================= | COMMENT |
| MEDIUM | tests/test_datasets_client.py | 161 | # ============================================================================= | COMMENT |
| MEDIUM | tests/test_datasets_client.py | 163 | # ============================================================================= | COMMENT |
| MEDIUM | tests/test_datasets_client.py | 488 | # ============================================================================= | COMMENT |
| MEDIUM | tests/test_datasets_client.py | 490 | # ============================================================================= | COMMENT |
| MEDIUM | tests/test_datasets_client.py | 501 | # ============================================================================= | COMMENT |
| MEDIUM | tests/test_datasets_client.py | 503 | # ============================================================================= | COMMENT |
| MEDIUM | tests/test_datasets_client.py | 1071 | # ============================================================================= | COMMENT |
| MEDIUM | tests/test_datasets_client.py | 1073 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | tests/test_db_api.py | 86 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_db_api.py | 88 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_db_api.py | 97 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_db_api.py | 99 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_db_api.py | 123 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_db_api.py | 125 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_db_api.py | 225 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_db_api.py | 227 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_db_api.py | 313 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_db_api.py | 315 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_db_api.py | 443 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_db_api.py | 445 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_db_api.py | 518 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_db_api.py | 520 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_db_api.py | 605 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_db_api.py | 607 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_db_api.py | 625 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_db_api.py | 627 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_db_api.py | 668 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_db_api.py | 670 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_db_api.py | 17 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_db_api.py | 19 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_db_api.py | 164 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_db_api.py | 166 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_db_api.py | 490 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_db_api.py | 492 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_db_api.py | 535 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_db_api.py | 537 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_db_api.py | 556 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_db_api.py | 558 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_db_api.py | 572 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_db_api.py | 574 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_db_api.py | 585 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_db_api.py | 587 | # --------------------------------------------------------------------------- | COMMENT |
| 142 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | tests/conftest.py | 58 | except (ImportError, UserWarning, DeprecationWarning): | CODE |
| HIGH | tests/conftest.py | 77 | except ImportError: | CODE |
| HIGH | tests/test_configure.py | 2944 | except AttributeError: | CODE |
| HIGH | tests/test_logfire_api.py | 45 | except ImportError: | CODE |
| HIGH | tests/test_logfire_api.py | 76 | except Exception: | CODE |
| HIGH | tests/test_logfire_api.py | 323 | except AttributeError: # pragma: no cover # TODO figure this out | CODE |
| HIGH | tests/test_logfire_api.py | 336 | except ImportError: | CODE |
| HIGH | tests/test_cli.py | 94 | except SystemExit: | CODE |
| HIGH | tests/test_cli.py | 2914 | except PermissionError: | CODE |
| HIGH | tests/test_variables.py | 829 | except ValueError: | CODE |
| HIGH | tests/test_pydantic_plugin.py | 47 | except ImportError: | CODE |
| HIGH | tests/otel_integrations/fake_claude.py | 240 | except json.JSONDecodeError: | CODE |
| HIGH | tests/otel_integrations/fake_claude.py | 223 | except json.JSONDecodeError: | CODE |
| HIGH | tests/otel_integrations/fake_claude.py | 46 | except subprocess.TimeoutExpired: | CODE |
| HIGH | tests/otel_integrations/fake_claude.py | 175 | except json.JSONDecodeError: | CODE |
| HIGH | .github/workflows/scripts/minimal_install_smoke.py | 14 | except metadata.PackageNotFoundError: | CODE |
| HIGH | logfire-sdk/logfire/_internal/stack_info.py | 60 | except ValueError: # pragma: no cover | CODE |
| HIGH | logfire-sdk/logfire/_internal/config.py | 1847 | except: # noqa # weird errors can happen during shutdown, ignore them *all* with a bare except | CODE |
| HIGH | logfire-sdk/logfire/_internal/config.py | 2446 | except Exception: | CODE |
| HIGH | logfire-sdk/logfire/_internal/config.py | 1135 | except Exception: | CODE |
| HIGH | logfire-sdk/logfire/_internal/config.py | 2270 | except EOFError: | CODE |
| HIGH | logfire-sdk/logfire/_internal/forwarding.py | 205 | except Exception: | CODE |
| HIGH | logfire-sdk/logfire/_internal/json_encoder.py | 300 | except Exception: # pragma: no cover | CODE |
| HIGH | logfire-sdk/logfire/_internal/json_encoder.py | 295 | except Exception: # currently redundant, but future-proof | CODE |
| HIGH | logfire-sdk/logfire/_internal/json_encoder.py | 283 | except KeyError: | CODE |
| HIGH | logfire-sdk/logfire/_internal/utils.py | 289 | except AttributeError: # pragma: no cover | CODE |
| HIGH | logfire-sdk/logfire/_internal/utils.py | 249 | except FileExistsError: | CODE |
| HIGH | logfire-sdk/logfire/_internal/utils.py | 333 | except Exception: # pragma: no cover | CODE |
| HIGH | logfire-sdk/logfire/_internal/config_params.py | 231 | except LogfireConfigError: | CODE |
| HIGH | logfire-sdk/logfire/_internal/async_.py | 54 | except Exception: | CODE |
| HIGH | logfire-sdk/logfire/_internal/auto_trace/import_hook.py | 60 | except Exception: | CODE |
| HIGH | …e-sdk/logfire/_internal/exporters/processor_wrapper.py | 622 | except Exception: # pragma: no cover | CODE |
| HIGH | …e-sdk/logfire/_internal/exporters/processor_wrapper.py | 216 | except Exception: # pragma: no cover | CODE |
| HIGH | …e-sdk/logfire/_internal/exporters/processor_wrapper.py | 248 | except Exception: # pragma: no cover | CODE |
| HIGH | logfire-sdk/logfire/_internal/exporters/otlp.py | 109 | except ImportError: # pragma: no cover | CODE |
| HIGH | logfire-sdk/logfire/_internal/exporters/otlp.py | 116 | except ImportError: # pragma: no cover | CODE |
| HIGH | logfire-sdk/logfire/_internal/exporters/test.py | 169 | except JSONDecodeError: # pragma: no cover | CODE |
| HIGH | logfire-sdk/logfire/_internal/cli/auth.py | 117 | except webbrowser.Error: | CODE |
| HIGH | logfire-sdk/logfire/_internal/cli/run.py | 556 | except importlib.metadata.PackageNotFoundError: # pragma: no cover | CODE |
| HIGH | logfire-sdk/logfire/_internal/cli/__init__.py | 284 | except FileNotFoundError: | CODE |
| HIGH | …ire-sdk/logfire/_internal/integrations/google_genai.py | 35 | except Exception: # pragma: no cover | CODE |
| HIGH | logfire-sdk/logfire/_internal/integrations/pytest.py | 29 | except ImportError: # pragma: no cover | CODE |
| HIGH | logfire-sdk/logfire/_internal/integrations/pytest.py | 351 | except ValueError: # pragma: no cover | CODE |
| HIGH | …re-sdk/logfire/_internal/integrations/openai_agents.py | 158 | except Exception: # pragma: no cover | CODE |
| HIGH | …logfire/_internal/integrations/llm_providers/openai.py | 545 | except Exception: | CODE |
| HIGH | …logfire/_internal/integrations/llm_providers/openai.py | 580 | except AssertionError: | CODE |
| HIGH | …logfire/_internal/integrations/llm_providers/openai.py | 570 | except AssertionError: | CODE |
| HIGH | …logfire/_internal/integrations/llm_providers/openai.py | 692 | except Exception: | CODE |
| HIGH | …e/_internal/integrations/llm_providers/llm_provider.py | 239 | except Exception: # pragma: no cover | CODE |
| HIGH | …/logfire/_internal/integrations/llm_providers/usage.py | 43 | except Exception: | CODE |
| HIGH | …/logfire/_internal/integrations/llm_providers/usage.py | 79 | except Exception: | CODE |
| HIGH | …/logfire/_internal/integrations/llm_providers/usage.py | 77 | except Exception: | CODE |
| HIGH | logfire-sdk/logfire/variables/abstract.py | 687 | except Exception: # pragma: no cover | CODE |
| HIGH | logfire-sdk/logfire/variables/template_validation.py | 151 | except RecursionError: | CODE |
| HIGH | logfire-sdk/logfire/variables/remote.py | 359 | except (json.JSONDecodeError, TypeError): | CODE |
| HIGH | logfire-sdk/logfire/variables/variable.py | 173 | except Exception: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/test_secret_scrubbing.py | 1 | CODE | |
| LOW | tests/test_query_client.py | 1 | CODE | |
| LOW | tests/test_internal_forwarding.py | 1 | CODE | |
| LOW | tests/test_llm_provider.py | 3 | CODE | |
| LOW | tests/conftest.py | 2 | CODE | |
| LOW | tests/conftest.py | 11 | CODE | |
| LOW | tests/test_server_response.py | 1 | CODE | |
| LOW | tests/test_console_exporter.py | 2 | CODE | |
| LOW | tests/test_metrics.py | 1 | CODE | |
| LOW | tests/test_stdlib_logging.py | 1 | CODE | |
| LOW | tests/test_auth.py | 1 | CODE | |
| LOW | tests/test_source_code_extraction.py | 1 | CODE | |
| LOW | tests/test_variable_composition.py | 5 | CODE | |
| LOW | tests/test_loguru.py | 1 | CODE | |
| LOW | tests/test_template_validation.py | 5 | CODE | |
| LOW | tests/test_logfire.py | 1 | CODE | |
| LOW | tests/test_http_transport.py | 1 | CODE | |
| LOW | tests/test_url_from_eval.py | 1 | CODE | |
| LOW | tests/test_datasets_client.py | 5 | CODE | |
| LOW | tests/test_docs_serve.py | 1 | CODE | |
| LOW | tests/test_forwarding.py | 1 | CODE | |
| LOW | tests/test_configure.py | 1 | CODE | |
| LOW | tests/utils.py | 1 | CODE | |
| LOW | tests/test_db_api.py | 3 | CODE | |
| LOW | tests/test_push_variables.py | 4 | CODE | |
| LOW | tests/test_logfire_api.py | 1 | CODE | |
| LOW | tests/test_otel_logs.py | 1 | CODE | |
| LOW | tests/test_json_args.py | 1 | CODE | |
| LOW | tests/test_variable_templates.py | 5 | CODE | |
| LOW | tests/test_client.py | 1 | CODE | |
| LOW | tests/test_tail_sampling.py | 1 | CODE | |
| LOW | tests/test_query_client_errors.py | 7 | CODE | |
| LOW | tests/test_cli.py | 1 | CODE | |
| LOW | tests/test_sampling.py | 1 | CODE | |
| LOW | tests/test_variables.py | 4 | CODE | |
| LOW | tests/test_pydantic_plugin.py | 1 | CODE | |
| LOW | tests/exporters/test_retry_fewer_spans.py | 1 | CODE | |
| LOW | tests/exporters/test_dynamic_batch_span_processor.py | 1 | CODE | |
| LOW | tests/import_used_for_tests/open_span_at_shutdown.py | 1 | CODE | |
| LOW | tests/otel_integrations/test_claude_agent_sdk.py | 15 | CODE | |
| LOW | tests/otel_integrations/test_anthropic.py | 1 | CODE | |
| LOW | tests/otel_integrations/test_redis.py | 1 | CODE | |
| LOW | tests/otel_integrations/test_openai.py | 1 | CODE | |
| LOW | tests/otel_integrations/conftest.py | 1 | CODE | |
| LOW | tests/otel_integrations/test_snowflake.py | 1 | CODE | |
| LOW | tests/otel_integrations/test_faststream.py | 1 | CODE | |
| LOW | tests/otel_integrations/test_sqlalchemy.py | 1 | CODE | |
| LOW | tests/otel_integrations/test_pymongo.py | 1 | CODE | |
| LOW | tests/otel_integrations/fake_claude.py | 21 | CODE | |
| LOW | tests/otel_integrations/test_fastapi.py | 1 | CODE | |
| LOW | tests/otel_integrations/test_asgi.py | 1 | CODE | |
| LOW | tests/otel_integrations/test_mysql.py | 1 | CODE | |
| LOW | tests/otel_integrations/test_aiohttp_client.py | 1 | CODE | |
| LOW | tests/otel_integrations/test_dspy.py | 1 | CODE | |
| LOW | tests/otel_integrations/test_requests.py | 1 | CODE | |
| LOW | tests/otel_integrations/test_litestar.py | 1 | CODE | |
| LOW | tests/otel_integrations/test_starlette.py | 1 | CODE | |
| LOW | tests/otel_integrations/test_httpx.py | 1 | CODE | |
| LOW | tests/otel_integrations/test_wsgi.py | 1 | CODE | |
| LOW | tests/otel_integrations/test_pytest_plugin.py | 7 | CODE | |
| 219 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | logfire-sdk/logfire/_internal/config.py | 1876 | Check if a credentials file exists and if so load it. Args: creds_dir: Path to the credentials dire | STRING |
| HIGH | logfire-sdk/logfire/_internal/config.py | 1955 | Configure one of the user projects to be used by Logfire. It configures the project if organization/project_nam | STRING |
| HIGH | logfire-sdk/logfire/_internal/config.py | 2063 | Create a new project and configure it to be used by Logfire. It creates the project under the organization if b | STRING |
| HIGH | logfire-sdk/logfire/_internal/config.py | 2227 | Create a new project or use an existing project on logfire.dev requesting the given project name. Args: | STRING |
| HIGH | logfire-sdk/logfire/_internal/exporters/test.py | 52 | The exported spans as a list of dicts. Args: fixed_line_number: The line number to use for all span | STRING |
| HIGH | logfire-sdk/logfire/experimental/api_client.py | 709 | Update an existing dataset. Args: id_or_name: The dataset ID (UUID) or name. name: New | STRING |
| HIGH | logfire-sdk/logfire/experimental/api_client.py | 766 | List all cases in a dataset. Args: dataset_id_or_name: The dataset ID (UUID) or name. Retu | STRING |
| HIGH | logfire-sdk/logfire/experimental/api_client.py | 781 | Get a specific case from a dataset. Args: dataset_id_or_name: The dataset ID (UUID) or name. | STRING |
| HIGH | logfire-sdk/logfire/experimental/api_client.py | 805 | Publish a local `pydantic_evals.Dataset` to the hosted datasets API. This is the high-level "push my dataset to | STRING |
| HIGH | logfire-sdk/logfire/experimental/api_client.py | 912 | Add cases to a dataset. Accepts either pydantic-evals Case objects or plain dicts. By default, uses up | STRING |
| HIGH | logfire-sdk/logfire/experimental/api_client.py | 969 | Update an existing case. Args: dataset_id_or_name: The dataset ID (UUID) or name. case_ | STRING |
| HIGH | logfire-sdk/logfire/experimental/api_client.py | 1053 | Get a dataset by ID or name. The return type depends on the arguments provided: - **No type arguments* | STRING |
| HIGH | logfire-sdk/logfire/experimental/api_client.py | 1247 | Async version of `LogfireAPIClient.push_dataset`. Args: dataset: The local `pydantic_evals.Dataset` | STRING |
| HIGH | logfire-sdk/logfire/variables/abstract.py | 160 | Convert template `inputs` to a context dict for Handlebars rendering. Accepts whatever the variable's declared `inp | STRING |
| HIGH | logfire-sdk/logfire/variables/abstract.py | 1133 | Retrieve the serialized value for a variable. Args: variable_name: The name of the variable to reso | STRING |
| HIGH | logfire-sdk/logfire/variables/abstract.py | 1252 | Create a new variable configuration. Args: config: The configuration for the new variable. | STRING |
| HIGH | logfire-sdk/logfire/variables/abstract.py | 1274 | Update an existing variable configuration. Args: name: The name of the variable to update. | STRING |
| HIGH | logfire-sdk/logfire/variables/abstract.py | 1974 | Return None for all variable lookups. Args: variable_name: The name of the variable to resolve (ign | STRING |
| HIGH | logfire-sdk/logfire/variables/config.py | 352 | Evaluate rollout rules and return the selected label name. The resolution process: 1. Evaluate override | STRING |
| HIGH | logfire-sdk/logfire/variables/config.py | 391 | Resolve the serialized value for this variable. Resolution order: 1. If explicit label requested, look | STRING |
| HIGH | logfire-sdk/logfire/variables/config.py | 507 | Evaluate a managed variable configuration and resolve the selected value. Args: name: The name of t | STRING |
| HIGH | logfire-sdk/logfire/variables/config.py | 635 | Check if all conditions match the provided attributes. Args: conditions: List of conditions to evaluate. | STRING |
| HIGH | logfire-sdk/logfire/variables/remote.py | 540 | Resolve a variable's serialized value from the remote configuration. Args: variable_name: The name | STRING |
| HIGH | logfire-sdk/logfire/variables/remote.py | 636 | Create a new variable configuration via the remote API. Args: config: The configuration for the new | STRING |
| HIGH | logfire-sdk/logfire/variables/remote.py | 665 | Update an existing variable configuration via the remote API. Args: name: The name of the variable | STRING |
| HIGH | logfire-sdk/logfire/variables/remote.py | 843 | Create or update a variable type via the remote API. If a type with the given name exists, it will be updated. | STRING |
| HIGH | logfire-sdk/logfire/variables/local.py | 39 | Resolve a variable's serialized value from the local configuration. Args: variable_name: The name o | STRING |
| HIGH | logfire-sdk/logfire/variables/local.py | 83 | Create a new variable configuration. Args: config: The configuration for the new variable. | STRING |
| HIGH | logfire-sdk/logfire/variables/local.py | 102 | Update an existing variable configuration. Args: name: The name of the variable to update. | STRING |
| HIGH | logfire-sdk/logfire/variables/variable.py | 952 | Resolve the variable and return full details including label, version, and any errors. Args: target | STRING |
| HIGH | logfire-sdk/logfire/variables/variable.py | 1044 | Resolve the variable, render templates with the given inputs, and return the result. The resolution pipeline is | STRING |
| HIGH | logfire-sdk/logfire/variables/composition.py | 123 | Expand `@{var}@` references in a serialized variable value. Uses the Handlebars engine so `@{}@` supports the full | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/test_secret_scrubbing.py | 293 | except Exception as e: | CODE |
| LOW | tests/test_url_from_eval.py | 7 | except Exception: | CODE |
| LOW | tests/test_datasets_client.py | 22 | except Exception: | CODE |
| LOW | tests/test_logfire_api.py | 76 | except Exception: | CODE |
| MEDIUM | tests/test_canonicalize_exception.py | 184 | def test_cyclic_exception_cause(): | CODE |
| MEDIUM | tests/test_canonicalize_exception.py | 214 | def test_cyclic_exception_group(): | CODE |
| MEDIUM | tests/test_canonicalize_exception.py | 248 | def test_canonicalize_no_traceback(): | CODE |
| LOW⚡ | tests/test_canonicalize_exception.py | 28 | except Exception as e: | CODE |
| LOW⚡ | tests/test_canonicalize_exception.py | 33 | except Exception as e: | CODE |
| LOW⚡ | tests/test_canonicalize_exception.py | 38 | except Exception: | CODE |
| LOW⚡ | tests/test_canonicalize_exception.py | 42 | except Exception: | CODE |
| LOW⚡ | tests/test_canonicalize_exception.py | 45 | except Exception as e4: | CODE |
| LOW⚡ | tests/test_canonicalize_exception.py | 188 | except Exception as e: | STRING |
| LOW⚡ | tests/test_canonicalize_exception.py | 190 | except Exception as e2: | STRING |
| LOW | tests/test_canonicalize_exception.py | 85 | except Exception as e6: | STRING |
| LOW | tests/test_canonicalize_exception.py | 151 | except Exception as e: | STRING |
| LOW | tests/test_canonicalize_exception.py | 220 | except Exception as e: | STRING |
| LOW | tests/test_canonicalize_exception.py | 251 | except Exception as e: | STRING |
| LOW | tests/test_canonicalize_exception.py | 277 | except Exception as e: | STRING |
| LOW | tests/test_canonicalize_exception.py | 292 | except Exception as e: | STRING |
| LOW | tests/test_canonicalize_exception.py | 307 | except Exception as e: | STRING |
| LOW | …ternal_error_handling/internal_logfire_code_example.py | 27 | except Exception: | CODE |
| MEDIUM | …ternal_error_handling/internal_logfire_code_example.py | 24 | def using_try_except(): | CODE |
| LOW | tests/otel_integrations/fake_claude.py | 204 | except Exception: | CODE |
| LOW | tests/otel_integrations/test_pydantic_ai_mcp.py | 37 | except Exception: | CODE |
| LOW | tests/otel_integrations/test_pydantic_ai.py | 15 | except Exception: | CODE |
| LOW | tests/otel_integrations/test_llm_usage_attributes.py | 20 | except Exception: | CODE |
| LOW | docs/guides/onboarding-checklist/add-metrics.md | 55 | except Exception: | CODE |
| LOW | docs/guides/onboarding-checklist/add-metrics.md | 192 | except Exception: # Replace with the exception your client raises. | CODE |
| LOW | docs/reference/advanced/generators.md | 151 | except Exception: | CODE |
| LOW | docs/reference/advanced/generators.md | 239 | except Exception: | CODE |
| LOW | logfire-sdk/logfire/_internal/formatter.py | 205 | except Exception as exc: | CODE |
| LOW | logfire-sdk/logfire/_internal/formatter.py | 212 | except Exception as exc: | CODE |
| LOW | logfire-sdk/logfire/_internal/formatter.py | 223 | except Exception as exc: | CODE |
| LOW | logfire-sdk/logfire/_internal/formatter.py | 269 | except Exception: | CODE |
| LOW⚡ | logfire-sdk/logfire/_internal/config.py | 1709 | except Exception: | CODE |
| LOW | logfire-sdk/logfire/_internal/config.py | 1135 | except Exception: | CODE |
| LOW | logfire-sdk/logfire/_internal/config.py | 1237 | except Exception: | CODE |
| LOW | logfire-sdk/logfire/_internal/config.py | 1726 | except Exception: # pragma: no cover | CODE |
| LOW | logfire-sdk/logfire/_internal/config.py | 1733 | except Exception as e: # pragma: no cover | CODE |
| LOW | logfire-sdk/logfire/_internal/config.py | 1928 | except Exception: | CODE |
| LOW | logfire-sdk/logfire/_internal/config.py | 2396 | except Exception as exc: | CODE |
| LOW | logfire-sdk/logfire/_internal/config.py | 2446 | except Exception: | CODE |
| LOW | logfire-sdk/logfire/_internal/forwarding.py | 189 | except Exception: | CODE |
| LOW | logfire-sdk/logfire/_internal/forwarding.py | 205 | except Exception: | CODE |
| LOW | logfire-sdk/logfire/_internal/json_schema.py | 153 | except Exception: # pragma: no cover | CODE |
| LOW | logfire-sdk/logfire/_internal/json_encoder.py | 295 | except Exception: # currently redundant, but future-proof | CODE |
| LOW | logfire-sdk/logfire/_internal/json_encoder.py | 300 | except Exception: # pragma: no cover | CODE |
| LOW | logfire-sdk/logfire/_internal/json_encoder.py | 312 | except Exception: | CODE |
| LOW | logfire-sdk/logfire/_internal/json_encoder.py | 329 | except Exception: | CODE |
| LOW | logfire-sdk/logfire/_internal/utils.py | 69 | except Exception: # pragma: no cover | CODE |
| LOW | logfire-sdk/logfire/_internal/utils.py | 93 | except Exception: # pragma: no cover | CODE |
| LOW | logfire-sdk/logfire/_internal/utils.py | 102 | except Exception: # pragma: no cover | CODE |
| LOW | logfire-sdk/logfire/_internal/utils.py | 320 | except Exception: # pragma: no cover | CODE |
| LOW | logfire-sdk/logfire/_internal/utils.py | 333 | except Exception: # pragma: no cover | CODE |
| LOW | logfire-sdk/logfire/_internal/utils.py | 385 | except Exception: # pragma: no cover | CODE |
| LOW | logfire-sdk/logfire/_internal/utils.py | 502 | except Exception: | CODE |
| LOW | logfire-sdk/logfire/_internal/utils.py | 542 | except Exception: # pragma: no cover | CODE |
| MEDIUM | logfire-sdk/logfire/_internal/utils.py | 314 | def log_internal_error(): | CODE |
| LOW | logfire-sdk/logfire/_internal/ast_utils.py | 262 | except Exception: # probably SyntaxError, but ast.parse can raise other exceptions too | CODE |
| 78 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | docs/cookbook/evaluate-an-agent.md | 42 | ## Step 1: Build the agent | COMMENT |
| LOW | docs/cookbook/evaluate-an-agent.md | 75 | ## Step 2: Instrument it and see the trace | COMMENT |
| LOW | docs/cookbook/evaluate-an-agent.md | 121 | ## Step 3: Is it any good? Score it with an eval | COMMENT |
| LOW | docs/cookbook/evaluate-an-agent.md | 226 | ## Step 4: Catch a regression | COMMENT |
| LOW | docs/cookbook/evaluate-an-agent.md | 265 | ## Step 5: Send the uncertain cases to a human | COMMENT |
| LOW | docs/how-to-guides/sso-setup.md | 43 | ## Step 1: Find the Redirect URI in Logfire | COMMENT |
| LOW | docs/how-to-guides/sso-setup.md | 52 | ## Step 2: Create an App Registration in Azure Entra ID | COMMENT |
| LOW | docs/how-to-guides/sso-setup.md | 63 | ## Step 3: Create a Client Secret | COMMENT |
| LOW | docs/how-to-guides/sso-setup.md | 71 | ## Step 4: Collect Required Values from Azure | COMMENT |
| LOW | docs/how-to-guides/sso-setup.md | 83 | ## Step 5: Configure the OIDC Provider in Logfire | COMMENT |
| LOW | docs/how-to-guides/sso-setup.md | 96 | ## Step 6: Connect Entra ID | COMMENT |
| LOW | docs/how-to-guides/sso-setup.md | 104 | ## Step 7: Test the SSO Login | COMMENT |
| LOW | docs/how-to-guides/sso-setup.md | 121 | ## Step 8: Invite Team Members | COMMENT |
| LOW | docs/reference/self-hosted/bucket-migration.md | 33 | ## Step 1: Replicate & Sync Bucket Data | COMMENT |
| LOW | docs/reference/self-hosted/bucket-migration.md | 66 | ## Step 2: Scale Down Writer Workloads | COMMENT |
| LOW | docs/reference/self-hosted/bucket-migration.md | 138 | ## Step 3: Deploy Updated Configuration & Scale Up | COMMENT |
| LOW | …re-sdk/logfire/.agents/skills/logfire-setup-offline.md | 25 | ## Step 1: Authenticate and Select the Exact Project | COMMENT |
| LOW | …re-sdk/logfire/.agents/skills/logfire-setup-offline.md | 32 | ## Step 2: Understand the Repo | COMMENT |
| LOW | …re-sdk/logfire/.agents/skills/logfire-setup-offline.md | 50 | ## Step 3: Fetch the Right Skill(s) | COMMENT |
| LOW | …re-sdk/logfire/.agents/skills/logfire-setup-offline.md | 70 | ## Step 1: Authenticate and Select the Exact Project | COMMENT |
| LOW | …re-sdk/logfire/.agents/skills/logfire-setup-offline.md | 76 | ## Step 2: Detect Language and Frameworks | COMMENT |
| LOW | …re-sdk/logfire/.agents/skills/logfire-setup-offline.md | 88 | ## Step 3: Install and Instrument | COMMENT |
| LOW | …re-sdk/logfire/.agents/skills/logfire-setup-offline.md | 204 | ## Step 4: Set Service Metadata and Metrics | COMMENT |
| LOW | …re-sdk/logfire/.agents/skills/logfire-setup-offline.md | 246 | ## Step 5: Verify | COMMENT |
| LOW | …re-sdk/logfire/.agents/skills/logfire-setup-offline.md | 358 | ## Step 1: Authenticate and Select the Exact Project | COMMENT |
| LOW | …re-sdk/logfire/.agents/skills/logfire-setup-offline.md | 365 | ## Step 2: Identify What to Monitor | COMMENT |
| LOW | …re-sdk/logfire/.agents/skills/logfire-setup-offline.md | 377 | ## Step 3: Configure the Collector | COMMENT |
| LOW | …re-sdk/logfire/.agents/skills/logfire-setup-offline.md | 392 | ## Step 4: Verify | COMMENT |
| LOW | …re-sdk/logfire/.agents/skills/logfire-setup-offline.md | 421 | ## Step 1: Check for an Existing Braintrust Suite First | COMMENT |
| LOW⚡ | …re-sdk/logfire/.agents/skills/logfire-setup-offline.md | 441 | ## Step 2: Authenticate When the Run Needs Logfire | COMMENT |
| LOW⚡ | …re-sdk/logfire/.agents/skills/logfire-setup-offline.md | 448 | ## Step 3: Detect What to Evaluate | COMMENT |
| LOW⚡ | …re-sdk/logfire/.agents/skills/logfire-setup-offline.md | 455 | ## Step 4: Define the Dataset and Run It | COMMENT |
| LOW | …re-sdk/logfire/.agents/skills/logfire-setup-offline.md | 565 | ## Step 5: Verify | COMMENT |
| LOW | …ogfire/.agents/skills/logfire-instrumentation/SKILL.md | 14 | ## Step 1: Authenticate and Select the Exact Project | COMMENT |
| LOW | …ogfire/.agents/skills/logfire-instrumentation/SKILL.md | 20 | ## Step 2: Detect Language and Frameworks | COMMENT |
| LOW | …ogfire/.agents/skills/logfire-instrumentation/SKILL.md | 32 | ## Step 3: Install and Instrument | COMMENT |
| LOW | …ogfire/.agents/skills/logfire-instrumentation/SKILL.md | 148 | ## Step 4: Set Service Metadata and Metrics | COMMENT |
| LOW | …ogfire/.agents/skills/logfire-instrumentation/SKILL.md | 190 | ## Step 5: Verify | COMMENT |
| LOW | …fire-sdk/logfire/.agents/skills/logfire-evals/SKILL.md | 14 | ## Step 1: Check for an Existing Braintrust Suite First | COMMENT |
| LOW⚡ | …fire-sdk/logfire/.agents/skills/logfire-evals/SKILL.md | 34 | ## Step 2: Authenticate When the Run Needs Logfire | COMMENT |
| LOW⚡ | …fire-sdk/logfire/.agents/skills/logfire-evals/SKILL.md | 41 | ## Step 3: Detect What to Evaluate | COMMENT |
| LOW⚡ | …fire-sdk/logfire/.agents/skills/logfire-evals/SKILL.md | 48 | ## Step 4: Define the Dataset and Run It | COMMENT |
| LOW | …fire-sdk/logfire/.agents/skills/logfire-evals/SKILL.md | 158 | ## Step 5: Verify | COMMENT |
| LOW | …fire-sdk/logfire/.agents/skills/logfire-setup/SKILL.md | 12 | ## Step 1: Authenticate and Select the Exact Project | COMMENT |
| LOW | …fire-sdk/logfire/.agents/skills/logfire-setup/SKILL.md | 19 | ## Step 2: Understand the Repo | COMMENT |
| LOW | …fire-sdk/logfire/.agents/skills/logfire-setup/SKILL.md | 37 | ## Step 3: Fetch the Right Skill(s) | COMMENT |
| LOW | …logfire/.agents/skills/logfire-infrastructure/SKILL.md | 14 | ## Step 1: Authenticate and Select the Exact Project | COMMENT |
| LOW | …logfire/.agents/skills/logfire-infrastructure/SKILL.md | 21 | ## Step 2: Identify What to Monitor | COMMENT |
| LOW | …logfire/.agents/skills/logfire-infrastructure/SKILL.md | 33 | ## Step 3: Configure the Collector | COMMENT |
| LOW | …logfire/.agents/skills/logfire-infrastructure/SKILL.md | 48 | ## Step 4: Verify | COMMENT |
| LOW⚡ | logfire-sdk/logfire/variables/config.py | 370 | # Step 1: Determine the rollout and overrides to use | COMMENT |
| LOW⚡ | logfire-sdk/logfire/variables/config.py | 374 | # Step 2: Find the first matching override, or use the base rollout | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | docs/evaluate/evals-in-code.md | 162 | with LogfireAPIClient(api_key='your-api-key') as client: | CODE |
| HIGH | docs/evaluate/datasets-sdk.md | 29 | client = LogfireAPIClient(api_key='your-api-key') | CODE |
| HIGH | docs/evaluate/datasets-sdk.md | 35 | with LogfireAPIClient(api_key='your-api-key') as client: | CODE |
| HIGH | docs/evaluate/datasets-sdk.md | 46 | api_key='your-api-key', | CODE |
| HIGH | docs/evaluate/datasets-sdk.md | 56 | async with AsyncLogfireAPIClient(api_key='your-api-key') as client: | CODE |
| HIGH | docs/evaluate/datasets-sdk.md | 110 | with LogfireAPIClient(api_key='your-api-key') as client: | CODE |
| HIGH | docs/how-to-guides/client-side-feature-flags.md | 42 | const LOGFIRE_API_KEY = 'your-api-key' // project:read_external_variables scope | CODE |
| HIGH | docs/how-to-guides/client-side-feature-flags.md | 217 | headers_factory=lambda: {'Authorization': 'Bearer YOUR_API_KEY'}, | CODE |
| HIGH | docs/how-to-guides/client-side-feature-flags.md | 233 | headers={'Authorization': 'Bearer YOUR_API_KEY'}, | CODE |
| HIGH⚡ | docs/reference/advanced/use-api-keys.md | 110 | -H "Authorization: Bearer YOUR_API_KEY" | CODE |
| HIGH⚡ | docs/reference/advanced/use-api-keys.md | 117 | -H "Authorization: Bearer YOUR_API_KEY" | CODE |
| HIGH⚡ | docs/reference/advanced/use-api-keys.md | 120 | Replace `YOUR_API_KEY` with your actual API key. | CODE |
| HIGH | docs/reference/advanced/managed-variables/external.md | 62 | headers={'Authorization': 'Bearer YOUR_API_KEY'}, | CODE |
| HIGH | logfire-sdk/logfire/experimental/api_client.py | 33 | with LogfireAPIClient(api_key='your-api-key') as client: | STRING |
| HIGH | logfire-sdk/logfire/experimental/api_client.py | 566 | with LogfireAPIClient(api_key='your-api-key') as client: | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/test_sampling.py | 102 | CODE | |
| LOW | tests/test_sampling.py | 129 | CODE | |
| LOW | tests/test_sampling.py | 162 | CODE | |
| LOW | tests/test_variables.py | 1782 | CODE | |
| LOW | tests/test_variables.py | 3393 | CODE | |
| LOW | tests/test_variables.py | 3441 | CODE | |
| LOW | tests/test_variables.py | 3487 | CODE | |
| LOW | tests/test_variables.py | 3521 | CODE | |
| LOW | tests/test_variables.py | 4718 | CODE | |
| LOW | tests/test_baggage.py | 124 | CODE | |
| LOW | tests/otel_integrations/test_anthropic.py | 637 | CODE | |
| LOW | tests/otel_integrations/test_openai.py | 41 | CODE | |
| LOW | tests/otel_integrations/fake_claude.py | 34 | CODE | |
| LOW | tests/otel_integrations/fake_claude.py | 72 | CODE | |
| LOW | tests/otel_integrations/test_openai_agents.py | 54 | CODE | |
| LOW | scripts/build_offline_skill_prompt.py | 111 | CODE | |
| LOW | .github/workflows/scripts/upgrade_install_smoke.py | 75 | CODE | |
| LOW | logfire-sdk/logfire/query_client.py | 213 | CODE | |
| LOW | logfire-sdk/logfire/_internal/json_formatter.py | 69 | CODE | |
| LOW | logfire-sdk/logfire/_internal/formatter.py | 61 | CODE | |
| LOW | logfire-sdk/logfire/_internal/formatter.py | 152 | CODE | |
| LOW | logfire-sdk/logfire/_internal/config.py | 1155 | CODE | |
| LOW | logfire-sdk/logfire/_internal/config.py | 1697 | CODE | |
| LOW | logfire-sdk/logfire/_internal/config.py | 1947 | CODE | |
| LOW | logfire-sdk/logfire/_internal/config.py | 2055 | CODE | |
| LOW | logfire-sdk/logfire/_internal/config.py | 1278 | CODE | |
| LOW | logfire-sdk/logfire/_internal/forwarding.py | 192 | CODE | |
| LOW | logfire-sdk/logfire/_internal/json_schema.py | 99 | CODE | |
| LOW | logfire-sdk/logfire/_internal/json_schema.py | 317 | CODE | |
| LOW | logfire-sdk/logfire/_internal/json_encoder.py | 246 | CODE | |
| LOW | logfire-sdk/logfire/_internal/utils.py | 481 | CODE | |
| LOW | logfire-sdk/logfire/_internal/scrubbing.py | 311 | CODE | |
| LOW | logfire-sdk/logfire/_internal/db_statement_summary.py | 50 | CODE | |
| LOW | logfire-sdk/logfire/_internal/instrument.py | 52 | CODE | |
| LOW | logfire-sdk/logfire/_internal/instrument.py | 65 | CODE | |
| LOW | logfire-sdk/logfire/_internal/main.py | 3450 | CODE | |
| LOW | logfire-sdk/logfire/_internal/main.py | 724 | CODE | |
| LOW | logfire-sdk/logfire/_internal/auto_trace/__init__.py | 16 | CODE | |
| LOW | …e-sdk/logfire/_internal/exporters/processor_wrapper.py | 89 | CODE | |
| LOW | …e-sdk/logfire/_internal/exporters/processor_wrapper.py | 174 | CODE | |
| LOW | …e-sdk/logfire/_internal/exporters/processor_wrapper.py | 310 | CODE | |
| LOW | …e-sdk/logfire/_internal/exporters/processor_wrapper.py | 390 | CODE | |
| LOW | …e-sdk/logfire/_internal/exporters/processor_wrapper.py | 478 | CODE | |
| LOW | logfire-sdk/logfire/_internal/exporters/otlp.py | 308 | CODE | |
| LOW | logfire-sdk/logfire/_internal/exporters/otlp.py | 354 | CODE | |
| LOW | logfire-sdk/logfire/_internal/exporters/otlp.py | 437 | CODE | |
| LOW | …fire-sdk/logfire/_internal/exporters/remove_pending.py | 15 | CODE | |
| LOW | logfire-sdk/logfire/_internal/cli/auth.py | 32 | CODE | |
| LOW | logfire-sdk/logfire/_internal/cli/__init__.py | 66 | CODE | |
| LOW | …e-sdk/logfire/_internal/integrations/aiohttp_client.py | 113 | CODE | |
| LOW | logfire-sdk/logfire/_internal/integrations/fastapi.py | 196 | CODE | |
| LOW | logfire-sdk/logfire/_internal/integrations/psycopg.py | 28 | CODE | |
| LOW | logfire-sdk/logfire/_internal/integrations/pytest.py | 432 | CODE | |
| LOW | logfire-sdk/logfire/_internal/integrations/snowflake.py | 27 | CODE | |
| LOW | …sdk/logfire/_internal/integrations/claude_agent_sdk.py | 82 | CODE | |
| LOW | …sdk/logfire/_internal/integrations/claude_agent_sdk.py | 287 | CODE | |
| LOW | …sdk/logfire/_internal/integrations/claude_agent_sdk.py | 339 | CODE | |
| LOW | …re-sdk/logfire/_internal/integrations/openai_agents.py | 364 | CODE | |
| LOW | …re-sdk/logfire/_internal/integrations/openai_agents.py | 78 | CODE | |
| LOW | …re-sdk/logfire/_internal/integrations/openai_agents.py | 143 | CODE | |
| 27 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tests/test_query_client.py | 13 | # This file is intended to be updated by the Logfire developers, with the development platform running locally. | COMMENT |
| MEDIUM | tests/test_metrics.py | 648 | # Create a view that only keeps 'important' attribute for our custom counter | COMMENT |
| MEDIUM | tests/test_variable_composition.py | 1049 | # Create a variable config with a non-string variable | COMMENT |
| MEDIUM | tests/test_tail_sampling.py | 634 | # Create a span that doesn't trigger sampling — immediate processor gets on_start, | COMMENT |
| MEDIUM | tests/test_variables.py | 1729 | # Create a logfire instance | COMMENT |
| MEDIUM | tests/test_variables.py | 1760 | # Create a logfire instance and start the provider | COMMENT |
| MEDIUM | tests/test_variables.py | 4006 | # Create a new var to ensure there are changes (so push proceeds) | COMMENT |
| MEDIUM | tests/test_variables.py | 4341 | # Create a real trace context using the logfire instance | COMMENT |
| MEDIUM | tests/test_variables.py | 4358 | # Create a config that will report "not on server" | COMMENT |
| MEDIUM | tests/test_variables.py | 4372 | # Create a config where variant validation will produce a multi-line error | COMMENT |
| MEDIUM | tests/test_variables.py | 4392 | # Create a variable with a complex type that will generate multi-line errors | COMMENT |
| MEDIUM | tests/test_variables.py | 5201 | # Create a type-like object without __module__ | COMMENT |
| MEDIUM | tests/exporters/test_otlp_session.py | 576 | # Create a bunch of failed exports. | COMMENT |
| MEDIUM | tests/otel_integrations/test_dspy.py | 132 | # Define a simple signature | STRING |
| MEDIUM | tests/otel_integrations/test_dspy.py | 139 | # Create a predictor | COMMENT |
| MEDIUM | tests/otel_integrations/test_pytest_plugin.py | 68 | # Create a conftest that captures spans to a JSON file | COMMENT |
| MEDIUM⚡ | tests/otel_integrations/test_pytest_plugin.py | 1339 | # Create a child span and verify it's properly nested | STRING |
| MEDIUM | tests/otel_integrations/test_pytest_plugin.py | 1185 | # Create a child span and verify it's properly nested | STRING |
| MEDIUM | logfire-sdk/logfire/propagate.py | 1 | """This module provides a thin wrapper around the OpenTelemetry propagate API to allow | STRING |
| MEDIUM | logfire-sdk/logfire/_internal/config.py | 2118 | # Creating a project is a side effect, so this is never assumed -- | COMMENT |
| MEDIUM | logfire-sdk/logfire/_internal/utils.py | 354 | # This function is always called from log_internal_error, so skip that frame. | COMMENT |
| MEDIUM | logfire-sdk/logfire/_internal/tracer.py | 342 | # Create a no-op span with the same SpanContext as the current span. | COMMENT |
| MEDIUM | logfire-sdk/logfire/_internal/cli/run.py | 437 | # Create a final rule for the bottom section | COMMENT |
| MEDIUM | logfire-sdk/logfire/_internal/cli/run.py | 457 | # Create a panel containing the content with a rounded box border | COMMENT |
| MEDIUM | logfire-sdk/logfire/_internal/integrations/asgi.py | 81 | # Create a no-op span with the same SpanContext as the current span. | COMMENT |
| MEDIUM | logfire-sdk/logfire/_internal/integrations/pytest.py | 145 | # Create a scoped logfire instance for pytest spans | COMMENT |
| MEDIUM | logfire-sdk/logfire/integrations/pydantic.py | 338 | """This method is called every time a new `SchemaValidator` is created. | STRING |
| MEDIUM | logfire-sdk/logfire/integrations/structlog.py | 12 | # This file is currently imported eagerly from __init__.py, so it shouldn't import structlog directly | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | tests/test_configure.py | 1397 | def _update_resource(self, resource: Resource) -> None: | CODE |
| LOW⚡ | tests/test_configure.py | 1404 | def _update_resource(self, resource: Resource) -> None: | CODE |
| LOW⚡ | tests/test_configure.py | 1409 | def _update_resource(self, resource: Resource) -> None: | CODE |
| LOW | tests/otel_integrations/test_anthropic.py | 1389 | def set_attribute(self, key: str, value: Any) -> None: | CODE |
| LOW | tests/otel_integrations/test_anthropic.py | 1392 | def set_attributes(self, attributes: dict[str, Any]) -> None: | CODE |
| LOW | release/versioning.py | 33 | def update_project_version(pyproject_file: str | Path, new_version: str) -> None: | CODE |
| LOW | release/versioning.py | 40 | def update_meta_version(pyproject_file: str | Path, new_version: str) -> None: | CODE |
| LOW | release/prepare.py | 63 | def update_history(new_version: str, notes: str) -> None: | CODE |
| LOW | logfire-sdk/logfire/query_client.py | 30 | __all__ = [ | CODE |
| LOW | logfire-sdk/logfire/query_client.py | 256 | def _set_problem_attributes(error: _ProblemDetailsMixin, response: Response, problem: dict[str, Any] | None) -> None: | CODE |
| LOW | logfire-sdk/logfire/testing.py | 22 | __all__ = [ | CODE |
| LOW | logfire-sdk/logfire/_internal/metrics.py | 65 | def set_meter_provider(self, meter_provider: MeterProvider) -> None: | CODE |
| LOW | logfire-sdk/logfire/_internal/metrics.py | 95 | def set_meter(self, meter_provider: MeterProvider) -> None: | CODE |
| LOW | logfire-sdk/logfire/_internal/logs.py | 49 | def set_min_level(self, min_level: int) -> None: | CODE |
| LOW | logfire-sdk/logfire/_internal/logs.py | 62 | def set_provider(self, logger_provider: LoggerProvider) -> None: | CODE |
| LOW | logfire-sdk/logfire/_internal/logs.py | 126 | def set_logger(self, provider: LoggerProvider) -> None: | CODE |
| LOW | logfire-sdk/logfire/_internal/interactive.py | 43 | def set_non_interactive(value: bool) -> None: | CODE |
| LOW | logfire-sdk/logfire/_internal/main.py | 3310 | def set_attribute(self, key: str, value: Any) -> None: | CODE |
| LOW | logfire-sdk/logfire/_internal/main.py | 3323 | def set_attributes(self, attributes: dict[str, Any]) -> None: | CODE |
| LOW | logfire-sdk/logfire/_internal/main.py | 3372 | def _set_attribute(self, key: str, value: Any) -> None: | CODE |
| LOW | logfire-sdk/logfire/_internal/main.py | 3475 | def set_user_attributes_on_raw_span(span: Span, attributes: dict[str, Any]) -> None: | CODE |
| LOW | logfire-sdk/logfire/_internal/tracer.py | 67 | def set_provider(self, provider: SDKTracerProvider) -> None: | CODE |
| LOW | logfire-sdk/logfire/_internal/tracer.py | 174 | def set_attributes(self, attributes: Mapping[str, otel_types.AttributeValue]) -> None: | CODE |
| LOW | logfire-sdk/logfire/_internal/tracer.py | 177 | def set_attribute(self, key: str, value: otel_types.AttributeValue) -> None: | CODE |
| LOW | logfire-sdk/logfire/_internal/tracer.py | 191 | def update_name(self, name: str) -> None: | CODE |
| LOW | logfire-sdk/logfire/_internal/tracer.py | 286 | def set_tracer(self, tracer: Tracer) -> None: | CODE |
| LOW | …e-sdk/logfire/_internal/exporters/processor_wrapper.py | 89 | def _set_error_level_and_status(span: ReadableSpanDict) -> None: | CODE |
| LOW | logfire-sdk/logfire/_internal/cli/__init__.py | 47 | logger = logging.getLogger(__name__) | CODE |
| LOW | …e-sdk/logfire/_internal/integrations/aiohttp_client.py | 149 | def _set_complex_span_attributes(self, attributes: dict[str, Any]) -> None: | CODE |
| LOW⚡ | …sdk/logfire/_internal/integrations/claude_agent_sdk.py | 68 | def _set_state(state: _ConversationState) -> None: | CODE |
| LOW | …re-sdk/logfire/_internal/integrations/openai_agents.py | 334 | def set_error(self, error: SpanError) -> None: | CODE |
| LOW | logfire-sdk/logfire/sampling/__init__.py | 5 | __all__ = [ | CODE |
| LOW | logfire-sdk/logfire/integrations/pydantic.py | 254 | def _set_span_attributes(self, span: LogfireSpan, *, status: str, success: bool, **attributes: Any) -> None: | CODE |
| LOW⚡ | logfire-sdk/logfire/integrations/pydantic.py | 406 | def set_pydantic_plugin_config(plugin_config: PydanticPlugin | None) -> None: | CODE |
| LOW | logfire-sdk/logfire/variables/__init__.py | 54 | __all__ = [ | CODE |
| LOW | logfire-api/logfire_api/__init__.py | 88 | def set_attribute(self, key: str, value: Any) -> None: ... # pragma: no cover | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | docs/integrations/llms/langgraph.md | 0 | look up the current status and owner of an incident by id. | STRING |
| HIGH | docs/integrations/llms/autogen.md | 0 | look up the current status and owner of an incident by id. | STRING |
| HIGH | docs/integrations/llms/crewai.md | 0 | look up the current status and owner of an incident by id. | STRING |
| HIGH | logfire-sdk/logfire/_internal/integrations/starlette.py | 0 | instrument `app` so that spans are automatically created for each request. see the `logfire.instrument_wsgi` method for | STRING |
| HIGH | logfire-sdk/logfire/_internal/integrations/flask.py | 0 | instrument `app` so that spans are automatically created for each request. see the `logfire.instrument_wsgi` method for | STRING |
| HIGH | logfire-sdk/logfire/_internal/integrations/asgi.py | 0 | instrument `app` so that spans are automatically created for each request. see the `logfire.instrument_wsgi` method for | STRING |
| HIGH | logfire-sdk/logfire/_internal/integrations/wsgi.py | 0 | instrument `app` so that spans are automatically created for each request. see the `logfire.instrument_wsgi` method for | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/test_configure.py | 1962 | # we check that fake_token is valid now when we configure the project | COMMENT |
| LOW⚡ | tests/test_configure.py | 2554 | with patch.dict(os.environ, {'LOGFIRE_TOKEN': 'fake_token'}), requests_mock.Mocker() as request_mocker: | CODE |
| LOW⚡ | tests/test_configure.py | 2562 | assert request_mocker.request_history[0].headers['Authorization'] == 'fake_token' | CODE |
| LOW⚡ | tests/test_configure.py | 2579 | with patch.dict(os.environ, {'LOGFIRE_TOKEN': 'fake_token'}), requests_mock.Mocker() as request_mocker: | CODE |
| LOW⚡ | tests/test_configure.py | 2586 | assert logfire.DEFAULT_LOGFIRE_INSTANCE.config.token == 'fake_token' | CODE |
| LOW⚡ | tests/test_configure.py | 2590 | assert request_mocker.request_history[0].headers['Authorization'] == 'fake_token' | CODE |
| LOW | tests/test_configure.py | 1695 | 'token': 'fake_token', | CODE |
| LOW | tests/test_configure.py | 1755 | 'token': 'fake_token', | CODE |
| LOW | tests/test_configure.py | 1817 | 'token': 'fake_token', | CODE |
| LOW | tests/test_configure.py | 1942 | 'token': 'fake_token', | CODE |
| LOW | tests/test_configure.py | 1965 | assert request_mocker.request_history[-1].headers['Authorization'] == 'fake_token' | CODE |
| LOW | tests/test_configure.py | 2052 | 'token': 'fake_token', | CODE |
| LOW | tests/test_configure.py | 2113 | 'token': 'fake_token', | CODE |
| LOW | tests/test_configure.py | 2179 | 'token': 'fake_token', | CODE |
| LOW | tests/test_configure.py | 2237 | 'token': 'fake_token', | CODE |
| LOW | tests/test_configure.py | 2292 | 'token': 'fake_token', | CODE |
| LOW | tests/test_db_api.py | 74 | read_token='fake-token', | CODE |
| LOW | tests/test_json_args.py | 464 | NameEmail(name='John Doe', email='john.doe@mail.com'), | CODE |
| LOW | tests/test_variable_templates.py | 210 | resolved = var.get(Inputs(user_name='Alice', company='Acme Corp')) | CODE |
| LOW | tests/test_cli.py | 643 | token = "fake_token" | CODE |
| LOW | tests/test_cli.py | 1321 | json={'token': 'fake_token', 'expiration': 'fake_exp'}, | CODE |
| LOW | tests/test_cli.py | 1374 | dict(text='{"token": "fake_token", "expiration": "fake_exp"}'), | CODE |
| LOW | tests/test_cli.py | 1466 | dict(text='{"token": "fake_token", "expiration": "fake_exp"}'), | CODE |
| LOW | tests/test_cli.py | 1630 | 'token': 'fake_token', | CODE |
| LOW | tests/test_cli.py | 1676 | 'token': 'fake_token', | CODE |
| LOW | tests/test_cli.py | 1724 | 'token': 'fake_token', | CODE |
| LOW | tests/test_cli.py | 1770 | 'token': 'fake_token', | CODE |
| LOW | tests/test_cli.py | 1819 | 'token': 'fake_token', | CODE |
| LOW | tests/test_cli.py | 1922 | 'token': 'fake_token', | CODE |
| LOW | tests/test_cli.py | 1966 | 'token': 'fake_token', | CODE |
| LOW | tests/test_cli.py | 2014 | 'token': 'fake_token', | CODE |
| LOW | tests/test_cli.py | 2067 | 'token': 'fake_token', | CODE |
| LOW | tests/test_cli.py | 2105 | 'token': 'fake_token', | CODE |
| LOW | tests/test_cli.py | 2215 | json={'token': 'fake_token'}, | CODE |
| LOW | tests/test_cli.py | 2221 | assert output == snapshot('fake_token\n') | CODE |
| LOW | tests/test_cli.py | 3310 | 'token': 'fake_token', | CODE |
| LOW | tests/test_cli.py | 3356 | 'token': 'fake_token', | CODE |
| LOW | tests/test_cli.py | 3415 | 'token': 'fake_token', | CODE |
| LOW | tests/test_cli.py | 3478 | 'token': 'fake_token', | CODE |
| LOW | tests/test_cli.py | 3521 | 'token': 'fake_token', | CODE |
| LOW | tests/test_cli.py | 3582 | 'token': 'fake_token', | CODE |
| LOW | tests/test_cli.py | 3646 | 'token': 'fake_token', | CODE |
| LOW | tests/test_cli.py | 3763 | 'token': 'fake_token', | CODE |
| LOW | tests/test_cli.py | 6449 | json={'token': 'fake_token'}, | CODE |
| LOW⚡ | tests/test_cli.py | 691 | text='{"token": "fake_token", "expiration": "fake_exp"}', | STRING |
| LOW⚡ | tests/test_cli.py | 699 | assert 'fake_token' in auth_file.read_text() | STRING |
| LOW⚡ | tests/test_cli.py | 758 | text='{"token": "fake_token", "expiration": "fake_exp"}', | STRING |
| LOW⚡ | tests/test_cli.py | 763 | assert 'fake_token' in auth_file.read_text() | STRING |
| LOW⚡ | tests/test_cli.py | 847 | text='{"token": "fake_token", "expiration": "fake_exp"}', | STRING |
| LOW⚡ | tests/test_cli.py | 854 | assert 'fake_token' in auth_file.read_text() | STRING |
| LOW | tests/test_cli.py | 634 | dict(text='{"token": "fake_token", "expiration": "fake_exp"}'), | STRING |
| LOW | tests/test_cli.py | 1476 | token = "fake_token" | STRING |
| LOW | tests/test_cli.py | 6653 | 'env = { "LOGFIRE_READ_TOKEN" = "fake_token" }\n' | STRING |
| LOW⚡ | tests/test_variables.py | 127 | assert condition.matches({'email': 'user@example.com'}) is True | CODE |
| LOW | docs/integrations/llms/instructor.md | 50 | #> name='John Doe' age=30 | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH⚡ | tests/test_template_validation.py | 72 | result = extract_template_strings('{"text": "{{name}}", "count": 42, "active": true, "nothing": null}') | CODE |
| HIGH⚡ | tests/test_template_validation.py | 77 | result = extract_template_strings('["{{a}}", 42, true, null, "{{b}}"]') | CODE |
| HIGH | tests/test_configure.py | 2262 | exact prompt a real user copying `logfire auth && python -c '...configure()'` out of | STRING |
| HIGH | tests/test_json_args.py | 807 | '{"x":1,"y":2,"z":null}', | CODE |
| HIGH | tests/test_json_args.py | 828 | '{"x":1,"y":2,"z":{"x":1,"y":2,"z":null}}', | CODE |
| HIGH | tests/test_json_args.py | 1109 | 'complex_list': '[1,2,{"a":{"b":{"c":["d"]}}},{"b":[2]},true,false,null,"a","b",[1,2]]', | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | pyproject.toml | 241 | # See test_filter_warnings in test_testing.py | COMMENT |
| LOW | pyproject.toml | 281 | source = ["logfire-sdk/logfire", "logfire-api"] | COMMENT |
| LOW | tests/test_query_client.py | 21 | # ```python | COMMENT |
| LOW | docs/how-to-guides/alternative-clients.md | 141 | .http() | COMMENT |
| LOW | logfire-sdk/logfire/_internal/cli/auth.py | 101 | # into an EOFError traceback for every such caller. | COMMENT |
| LOW | logfire-sdk/logfire/_internal/cli/__init__.py | 601 | # does not guarantee matching HOST (self-hosted, or a different region), and the query | COMMENT |
| LOW | logfire-sdk/logfire/_internal/cli/__init__.py | 741 | # `client.base_url` is the host the CREATE request actually used -- resolved | COMMENT |
| LOW | logfire-sdk/logfire/integrations/logging.py | 141 | # so `name` should be treated as a keyword argument, i.e. its own attribute. | COMMENT |
| LOW | logfire-sdk/logfire/variables/remote.py | 401 | # the full 60-second base interval -- which would push the effective interval to | COMMENT |
| LOW | logfire-sdk/logfire/variables/composition.py | 261 | ) | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/test_tail_sampling.py | 25 | # Set duration to None to not include spans with a long duration. | COMMENT |
| LOW | tests/test_tail_sampling.py | 214 | # Set level to None to not include spans merely based on a high level. | COMMENT |
| LOW | logfire-sdk/logfire/_internal/formatter.py | 288 | # Check if the expression contains await before attempting to compile | COMMENT |
| LOW | logfire-sdk/logfire/variables/abstract.py | 900 | # Check if description differs (for warning purposes) | COMMENT |
| LOW | logfire-sdk/logfire/variables/remote.py | 356 | # Set flag to force refresh and wake up the worker | COMMENT |
| LOW | logfire-sdk/logfire/variables/remote.py | 393 | # Check if SSE event requested a forced refresh | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tests/test_utils.py | 58 | # - They should look seamless, with each frame pointing to the next one. | COMMENT |
| LOW | logfire-sdk/logfire/_internal/formatter.py | 274 | # Formatting failed, so just use the original format string as the message. | COMMENT |
| LOW⚡ | …e-sdk/logfire/_internal/exporters/processor_wrapper.py | 459 | # If the input messages are a prefix of the output messages, we can just use the output messages | COMMENT |
| LOW | logfire-sdk/logfire/sampling/_tail_sampling.py | 205 | # Most processors just set attributes, which is safe before the sampling decision. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tests/otel_integrations/test_openai_agents.py | 1046 | # The model call runs concurrently with input guardrails. Depending on when it is | COMMENT |
| MEDIUM | docs/evaluate/overview.md | 16 | ## The scaffold: dataset → task → evaluators → results → experiment | COMMENT |
| MEDIUM | docs/reference/advanced/gateway/protect-data.md | 21 | 1. Open [**AI Engineering → Gateway → Guardrails → Protections**](https://logfire.pydantic.dev/-/redirect/default-org/-/ | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | logfire-sdk/logfire/variables/config.py | 370 | # Step 1: Determine the rollout and overrides to use | COMMENT |
| LOW⚡ | logfire-sdk/logfire/variables/config.py | 374 | # Step 2: Find the first matching override, or use the base rollout | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | logfire-sdk/logfire/_internal/config.py | 520 | CODE | |
| LOW | logfire-sdk/logfire/_internal/config.py | 941 | CODE | |
| LOW | logfire-sdk/logfire/_internal/main.py | 1622 | CODE | |
| LOW | logfire-sdk/logfire/_internal/main.py | 1637 | CODE | |
| LOW | …logfire/_internal/integrations/llm_providers/openai.py | 517 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | logfire-sdk/logfire/_internal/main.py | 637 | def my_function(a: int): | STRING |
| LOW | logfire-sdk/logfire/_internal/main.py | 667 | def my_function(a: int): | STRING |
| LOW | logfire-sdk/logfire/_internal/main.py | 692 | def my_function(a: int): | STRING |