The Ruby AI framework.
This report summarizes scanner evidence for crmne/ruby_llm, a Ruby project with 4,490 GitHub stars. SynthScan examined 221,907 lines of code across 1235 source files, recording 734 pattern matches distributed across 11 syntactic categories. The legacy adjusted pattern signal is 3.6 (Low pattern signal); it is not an authorship estimate.
Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.
Use each vector to guide manual verification of the underlying findings.
Payload schema: 1.0.0 · Engine: 2.0.0 · Scoring: heuristic-density-v1 · Scan date: 2026-10-31.
Can maintainers explain intent, assumptions, and trade-offs? 719 finding(s).
Are imports declared and package/API names verified? 10 finding(s).
Are wrappers, guards, and repeated structures necessary? 355 finding(s).
Which changes need focused human review? 734 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 734 distinct pattern matches across 11 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 | spec/ruby_llm/chat_tools_spec.rb | 6 | def skip_unless_supports_functions(provider, model) | CODE |
| LOW | spec/ruby_llm/chat_tools_spec.rb | 194 | def assistant_tool_call_messages(chat) | CODE |
| LOW | spec/ruby_llm/uploaded_file_spec.rb | 151 | def stub_default_model_provider(provider, config: RubyLLM.config) | CODE |
| LOW | spec/ruby_llm/chat_tool_attachments_spec.rb | 66 | def messages_with_tool_attachment(path) | CODE |
| LOW | spec/ruby_llm/chat_tool_attachments_spec.rb | 74 | def chat_with_tool_attachment(model, provider, protocol: nil, attachment: image_path) | CODE |
| LOW | spec/ruby_llm/chat_streaming_spec.rb | 13 | def visible_output_token_count(message) | CODE |
| LOW | spec/ruby_llm/open_telemetry_spec.rb | 356 | def complete_standalone_operation(operation, reported: true) | CODE |
| LOW | spec/ruby_llm/active_record/acts_as_action_text_spec.rb | 72 | def attachable_plain_text_representation(caption) | CODE |
| LOW | spec/ruby_llm/generators/chat_ui_generator_spec.rb | 23 | def expect_messages_helper_content(path) | CODE |
| LOW | spec/ruby_llm/generators/chat_ui_generator_spec.rb | 36 | def expect_generated_view_set( # rubocop:disable Metrics/AbcSize | CODE |
| LOW | spec/ruby_llm/generators/chat_ui_generator_spec.rb | 148 | def expect_queued_message_views(base_path, path_helper) | CODE |
| LOW | spec/ruby_llm/generators/chat_ui_generator_spec.rb | 169 | def expect_broadcasting_model(path:, acts_as_message_lines:) | CODE |
| LOW | spec/ruby_llm/generators/chat_ui_generator_spec.rb | 198 | def run_rails_runner_outside_executor(script) | CODE |
| LOW | spec/ruby_llm/generators/chat_ui_generator_spec.rb | 208 | def give_chat_agent_an_approval_tool(agent_path) | CODE |
| LOW | spec/ruby_llm/generators/chat_ui_generator_spec.rb | 394 | def expect_chat_script_to_succeed(script) | CODE |
| LOW | …y_llm/protocols/invoke_model/embedding_batches_spec.rb | 72 | def cleanup_live_embedding_batch(batch) | CODE |
| LOW | …y_llm/protocols/invoke_model/embedding_batches_spec.rb | 89 | def wait_for_live_embedding_batch(batch) | CODE |
| LOW | spec/support/websocket_cassette.rb | 82 | def ensure_websocket_recording_allowed(path, key) | CODE |
| LOW | spec/support/models_to_test.rb | 16 | def filter_unrecorded_providers(models) | CODE |
| LOW | spec/support/models_to_test.rb | 36 | def skip_without_cassette_or_key(env_key) | CODE |
| LOW⚡ | benchmarks/support/payloads.rb | 115 | def chat_completions_text_stream(count) | CODE |
| LOW⚡ | benchmarks/support/payloads.rb | 121 | def chat_completions_large_event(bytes, piece:) | CODE |
| LOW⚡ | benchmarks/support/payloads.rb | 127 | def openrouter_reasoning_stream(count) | CODE |
| LOW | benchmarks/support/payloads.rb | 173 | def converse_reasoning_stream(count) | CODE |
| LOW | lib/ruby_llm/tool.rb | 561 | def validate_keyword_arguments(arguments) # :nodoc: | CODE |
| LOW | lib/ruby_llm/cost.rb | 91 | def missing_recorded_components(amounts, tokens, total) | CODE |
| LOW | lib/ruby_llm/agent.rb | 732 | def validate_thinking_options(enabled, options) | CODE |
| LOW | lib/ruby_llm/agent.rb | 844 | def apply_passthrough_options(chat) | CODE |
| LOW | lib/ruby_llm/agent.rb | 938 | def apply_assume_model_exists(chat_object) | CODE |
| LOW | lib/ruby_llm/agent.rb | 958 | def resolved_instruction_value(declaration, chat_object, runtime, inputs:) | CODE |
| LOW | lib/ruby_llm/model.rb | 210 | def pricing_data_with_long_context(pricing) | CODE |
| LOW | lib/ruby_llm/model.rb | 234 | def normalize_reasoning_options(options) | CODE |
| LOW⚡ | lib/ruby_llm/chat.rb | 2157 | def handle_concurrent_tool_calls(tool_calls) | CODE |
| LOW⚡ | lib/ruby_llm/chat.rb | 2167 | def execute_tools_concurrently(tool_calls, &on_result) | CODE |
| LOW⚡ | lib/ruby_llm/chat.rb | 2173 | def execute_tool_with_callbacks(tool_call) | CODE |
| LOW | lib/ruby_llm/chat.rb | 1300 | def convert_unsupported_attachments(&) | CODE |
| LOW | lib/ruby_llm/chat.rb | 1557 | def extract_schema_definition(schema) | CODE |
| LOW | lib/ruby_llm/chat.rb | 1944 | def replacing_missing_uploads(request_messages, streamed = -> { false }) | CODE |
| LOW | lib/ruby_llm/chat.rb | 2008 | def execute_pending_tool_calls(response) | CODE |
| LOW | lib/ruby_llm/chat.rb | 2019 | def answer_claimed_tool_calls(claimed, server_calls, decisions, executable, denied) | CODE |
| LOW | lib/ruby_llm/chat.rb | 2059 | def respond_to_tool_approvals(tool_calls, decisions) | CODE |
| LOW | lib/ruby_llm/chat.rb | 2070 | def partition_pending_tool_calls(pending) | CODE |
| LOW | lib/ruby_llm/chat.rb | 2089 | def record_tool_call_decision(tool_call, decision) | CODE |
| LOW | lib/ruby_llm/chat.rb | 2144 | def handle_sequential_tool_calls(tool_calls) | CODE |
| LOW | lib/ruby_llm/chat.rb | 2332 | def normalize_tool_concurrency(concurrency) | CODE |
| LOW | lib/ruby_llm/chat.rb | 2362 | def tool_name_for_choice_class(tool_class) | CODE |
| LOW | lib/ruby_llm/protocol.rb | 380 | def render_video_extension_payload(*) | CODE |
| LOW | lib/ruby_llm/protocol.rb | 384 | def video_extension_attachment(source) | CODE |
| LOW | lib/ruby_llm/protocol.rb | 428 | def render_transcription_options(timestamps:, **) | CODE |
| LOW | lib/ruby_llm/protocol.rb | 609 | def resolve_provider_tools_for_request(entries) | CODE |
| LOW | lib/ruby_llm/protocol.rb | 633 | def merge_server_tool_entries(payload, entries) | CODE |
| LOW | lib/ruby_llm/protocol.rb | 641 | def ensure_embedding_per_text(embedding, text, attachments, response) | CODE |
| LOW | lib/ruby_llm/protocol.rb | 668 | def apply_before_request_hooks(payload, hooks) | CODE |
| LOW | lib/ruby_llm/protocol.rb | 695 | def replace_unsupported_attachment(attachment, handler, message) | CODE |
| LOW | lib/ruby_llm/protocol.rb | 761 | def provider_file_upload_options(_attachment) | CODE |
| LOW | lib/ruby_llm/protocol.rb | 805 | def parse_completion_response(response) | CODE |
| LOW | lib/ruby_llm/provider.rb | 531 | def cache_write_input_multiplier(_model_id, _ttl) # :nodoc: | CODE |
| LOW | lib/ruby_llm/provider.rb | 686 | def configured_remote_providers(config) # :nodoc: | CODE |
| LOW | lib/ruby_llm/provider.rb | 788 | def validation_detail_message(detail) | CODE |
| LOW | lib/ruby_llm/models.rb | 255 | def models_dev_provider_models(provider_key, provider_data) # :nodoc: | CODE |
| 290 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | Archspec.rb | 241 | # job (they word an option list, resolve a speech format, or guess from a | COMMENT |
| LOW | .mutineer.yml | 1 | # Mutineer settings shared by bin/mutineer and direct mutineer runs; see | COMMENT |
| LOW | spec/dummy/config/puma.rb | 1 | # frozen_string_literal: true | COMMENT |
| LOW | spec/dummy/config/puma.rb | 21 | # response time (latency) of the application. | COMMENT |
| LOW | spec/dummy/config/database.yml | 21 | database: storage/test<%= ENV['TEST_ENV_NUMBER'] %>.sqlite3 | COMMENT |
| LOW | spec/dummy/config/locales/en.yml | 1 | # Files in the config/locales directory are used for internationalization and | COMMENT |
| LOW | spec/dummy/config/locales/en.yml | 21 | # | COMMENT |
| LOW | spec/dummy/config/environments/production.rb | 61 | # /.*\.example\.com/ # Allow requests from subdomains like `www.example.com` | COMMENT |
| LOW | spec/dummy/config/environments/test.rb | 1 | # frozen_string_literal: true | COMMENT |
| LOW | spec/dummy/config/initializers/inflections.rb | 1 | # frozen_string_literal: true | COMMENT |
| LOW | spec/dummy/config/initializers/cors.rb | 1 | # frozen_string_literal: true | COMMENT |
| LOW | spec/dummy/db/seeds.rb | 1 | # frozen_string_literal: true | COMMENT |
| LOW | .github/scripts/indexnow.rb | 1 | #!/usr/bin/env ruby | COMMENT |
| LOW | lib/ruby_llm.rb | 61 | # end | COMMENT |
| LOW | lib/ruby_llm.rb | 81 | # - Chat#with_fallbacks tries other models when a request fails. | COMMENT |
| LOW | lib/ruby_llm.rb | 101 | # format: each request lists them, the model loads the instructions and | COMMENT |
| LOW | lib/ruby_llm.rb | 121 | # VideoJob that you can poll. Speech.speak also streams SpeechChunk objects | COMMENT |
| LOW | lib/ruby_llm.rb | 141 | # | COMMENT |
| LOW | lib/ruby_llm.rb | 161 | # result. Implement Evaluation#perform to return a value, Message, Chat, or | COMMENT |
| LOW | lib/ruby_llm.rb | 181 | # method evaluates supplied text, structured data, or images passed as +with:+ | COMMENT |
| LOW | lib/ruby_llm.rb | 201 | # and attempts that produced no message. Provider-reported costs take | COMMENT |
| LOW | lib/ruby_llm.rb | 241 | # Duplicates the global configuration and yields the copy if a block is | COMMENT |
| LOW | lib/ruby_llm.rb | 261 | # RubyLLM.workflow("Write article", id: "article-42") do |workflow| | COMMENT |
| LOW | lib/ruby_llm.rb | 281 | # restore the outer owner when they end. Each fiber and thread keeps its | COMMENT |
| LOW | lib/ruby_llm.rb | 301 | # | COMMENT |
| LOW | lib/ruby_llm.rb | 321 | def mcp(...) | COMMENT |
| LOW | lib/ruby_llm.rb | 341 | COMMENT | |
| LOW | lib/ruby_llm.rb | 361 | # embedding requests, not both. Look up an existing batch with | COMMENT |
| LOW | lib/ruby_llm.rb | 381 | Embedding.embed(...) | COMMENT |
| LOW | lib/ruby_llm.rb | 401 | # result = RubyLLM.moderate("Some user input text") | COMMENT |
| LOW | lib/ruby_llm.rb | 441 | COMMENT | |
| LOW | lib/ruby_llm.rb | 461 | def animate_later(...) | COMMENT |
| LOW | lib/ruby_llm.rb | 481 | # transcription.text | COMMENT |
| LOW | lib/ruby_llm.rb | 501 | # Ranks documents by relevance to a query on providers with a rerank | COMMENT |
| LOW | lib/ruby_llm.rb | 521 | COMMENT | |
| LOW | lib/ruby_llm.rb | 541 | end | COMMENT |
| LOW | lib/ruby_llm.rb | 561 | # | COMMENT |
| LOW | lib/ruby_llm.rb | 581 | # RubyLLM.configure do |config| | COMMENT |
| LOW | lib/ruby_llm/image.rb | 21 | attr_reader :data | COMMENT |
| LOW | lib/ruby_llm/image.rb | 41 | # images for editing, and +mask:+ constrains which parts of the image | COMMENT |
| LOW | lib/ruby_llm/image.rb | 141 | end | COMMENT |
| LOW | lib/ruby_llm/video_job.rb | 1 | # frozen_string_literal: true | COMMENT |
| LOW | lib/ruby_llm/tool.rb | 21 | # | COMMENT |
| LOW | lib/ruby_llm/tool.rb | 101 | # class Weather < RubyLLM::Tool | COMMENT |
| LOW | lib/ruby_llm/tool.rb | 121 | # the tools in its own namespace: | COMMENT |
| LOW | lib/ruby_llm/tool.rb | 141 | # parameter :destination, description: "Destination city name" | COMMENT |
| LOW | lib/ruby_llm/tool.rb | 161 | # object :window, description: "Time window to reserve" do | COMMENT |
| LOW | lib/ruby_llm/tool.rb | 181 | # Chat#approve or Chat#deny, so Chat#complete returns cleanly and | COMMENT |
| LOW | lib/ruby_llm/tool.rb | 201 | # request, make that a find-or-create. | COMMENT |
| LOW | lib/ruby_llm/tool.rb | 221 | # Without an argument, returns the declared value, or +nil+. | COMMENT |
| LOW | lib/ruby_llm/tool.rb | 241 | # | COMMENT |
| LOW | lib/ruby_llm/tool.rb | 261 | def defer | COMMENT |
| LOW | lib/ruby_llm/tool.rb | 481 | else | COMMENT |
| LOW | lib/ruby_llm/tool.rb | 501 | # end | COMMENT |
| LOW | lib/ruby_llm/tool.rb | 541 | # can show it before the result arrives. Chat#after_tool_progress | COMMENT |
| LOW | lib/ruby_llm/fallback.rb | 1 | # frozen_string_literal: true | COMMENT |
| LOW | lib/ruby_llm/video.rb | 1 | # frozen_string_literal: true | COMMENT |
| LOW | lib/ruby_llm/video.rb | 21 | attr_reader :mime_type | COMMENT |
| LOW | lib/ruby_llm/video.rb | 41 | # +default_video_model+. +provider:+ forces a specific provider, and | COMMENT |
| LOW | lib/ruby_llm/cost.rb | 1 | # frozen_string_literal: true | COMMENT |
| 273 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | Archspec.rb | 18 | # User-facing objects and orchestration. These are nouns like Chat, Batch, | COMMENT |
| MEDIUM | spec/ruby_llm/chat_error_spec.rb | 80 | # Create enough copies to overflow the model's context window | COMMENT |
| MEDIUM | docs/_advanced/batches.md | 135 | Rails saves approval decisions so another process can resume. See [Tool Approvals]({% link _core_features/tool-execution | CODE |
| MEDIUM | docs/_advanced/error-handling.md | 97 | # Reduce prompt size or use a model with a larger context window | COMMENT |
| MEDIUM | docs/_core_features/citations.md | 67 | ## Citing Tool Results (RAG) | COMMENT |
| MEDIUM | docs/_core_features/moderation.md | 91 | Apply a [configured Bedrock guardrail]({% link _getting_started/configuration-providers.md %}#guardrails) without select | CODE |
| MEDIUM | docs/_data/provider_coverage.json | 197 | "s81": {"title": "Bedrock ApplyGuardrail API", "url": "https://docs.aws.amazon.com/bedrock/latest/userguide/guardrai | CODE |
| MEDIUM | docs/_data/provider_coverage.json | 371 | "s255": {"url": "https://elevenlabs.io/docs/eleven-agents/best-practices/guardrails", "title": "Guardrails"}, | CODE |
| MEDIUM | lib/ruby_llm/workflow.rb | 5 | # records while leaving orchestration in ordinary Ruby code. | COMMENT |
| MEDIUM | lib/ruby_llm/attachment.rb | 40 | # How the model reads a video: +:static+, +:agentic+, or +nil+ for the | COMMENT |
| MEDIUM | lib/ruby_llm/attachment.rb | 101 | # frames across the whole video up front. +:agentic+ lets the model | COMMENT |
| MEDIUM | lib/ruby_llm/attachment.rb | 105 | # RubyLLM::Attachment.new("lecture.mp4", processing: :agentic) | COMMENT |
| MEDIUM | lib/ruby_llm/chat.rb | 937 | # going instead of overflowing the context window. The provider condenses | COMMENT |
| MEDIUM | lib/ruby_llm/error.rb | 226 | # Raised when the request exceeds the model's context window or token | COMMENT |
| MEDIUM | lib/ruby_llm/embedding.rb | 83 | # +model:+ selects the embedding model and defaults to the | COMMENT |
| MEDIUM | lib/ruby_llm/embedding_request.rb | 21 | # The Model of the embedding model the request targets. | COMMENT |
| MEDIUM | lib/ruby_llm/providers/openrouter/chat.rb | 21 | # would overflow the model's context window. It summarizes nothing | COMMENT |
| MEDIUM | lib/ruby_llm/providers/xai/responses.rb | 7 | # Grok models. Usage counts agentic tool activity. | COMMENT |
| MEDIUM | lib/ruby_llm/protocols/gemini/chat.rb | 238 | # the frames of an agentic video, apart from the prompt, and bills it | COMMENT |
| MEDIUM | lib/generators/ruby_llm/generator_helpers.rb | 276 | # scaffold conventions without complicating scaffold templates. | COMMENT |
| MEDIUM | lib/generators/ruby_llm/chat_ui/chat_ui_generator.rb | 8 | # Generates a simple chat UI scaffold for RubyLLM | COMMENT |
| MEDIUM | lib/generators/ruby_llm/chat_ui/chat_ui_generator.rb | 46 | # - `scaffold` should stay close to Rails scaffold ERB output. | COMMENT |
| MEDIUM | lib/generators/ruby_llm/chat_ui/chat_ui_generator.rb | 47 | # - `tailwind` should stay close to tailwindcss-rails scaffold output. | COMMENT |
| MEDIUM | media/tour/video/hyperframes/index.html | 2662 | <svg id="b7cur" width="26" height="26" viewBox="0 0 24 24" style="position:absolute;left:300px;top:150px"><path d="M | CODE |
| MEDIUM | media/tour/video/hyperframes/tools/snippets.rb | 269 | # 9. Agent with approval. Sources: docs/_core_features/tool-execution.md, docs/_advanced/agentic-workflows.md | COMMENT |
| MEDIUM | media/tour/video/hyperframes/tools/snippets.rb | 460 | # agentic-workflows.md:43, chat-request-control.md:80, tokenization.md:57, _reference/models.md:177/220 | COMMENT |
| MEDIUM | media/tour/video/hyperframes/src/index.html | 2662 | <svg id="b7cur" width="26" height="26" viewBox="0 0 24 24" style="position:absolute;left:300px;top:150px"><path d="M | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | spec/ruby_llm/chat_error_spec.rb | 77 | # Create a huge conversation (matching <MASSIVE_TEXT> in spec_helper) | COMMENT |
| MEDIUM | spec/ruby_llm/models_refresh_spec.rb | 169 | # Create a temporary file for testing | COMMENT |
| MEDIUM | spec/ruby_llm/chat_schema_spec.rb | 5 | # Define a test schema class for testing Schematist::Schema instances | COMMENT |
| MEDIUM | …ec/ruby_llm/active_record/acts_as_with_context_spec.rb | 67 | # Create a different API key in custom context | COMMENT |
| MEDIUM | spec/ruby_llm/protocols/gemini/chat_spec.rb | 8 | # Create a test object that includes the module to access private methods | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | media/tour/music-shared/tired_wired.py | 79 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | media/tour/music-shared/tired_wired.py | 83 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | media/tour/music-shared/tired_wired.py | 595 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | media/tour/music-shared/tired_wired.py | 597 | # --------------------------------------------------------------------------- | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL | spec/ruby_llm/evaluation_live_spec.rb | 107 | messages = report.first.evaluations.first.evidence.fetch(:messages) | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | spec/tasks/models_workflow_spec.rb | 51 | # exec calls, and clear inherited Ruby options so the harness stays isolated. | COMMENT |
| MEDIUM | conformance/client.rb | 4 | # suite. The harness starts a scenario server, passes its URL as the last | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | spec/ruby_llm/chat_tools_spec.rb | 705 | expect(response.content).to match(/simple PDF file|Lorem ipsum/i) | CODE |
| LOW | spec/ruby_llm/mcp/input_request_spec.rb | 11 | request = form('name' => { 'type' => 'string', 'default' => 'John Doe' }, | CODE |
| LOW | spec/ruby_llm/mcp/input_request_spec.rb | 19 | .to eq(action: 'accept', content: { 'name' => 'John Doe', 'age' => 31, 'verified' => false }) | CODE |
| LOW | docs/_getting_started/configuration-providers.md | 440 | config.openai_api_key = ENV['CUSTOM_API_KEY'] # Or 'dummy-key' if not required | CODE |
| LOW | docs/_getting_started/configuration-providers.md | 458 | config.openai_api_key = "dummy-key" # If required by your server | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | media/tour/music-shared/preview.py | 163 | except ImportError: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | media/tour/video/hyperframes/tools/film.py | 2 | CODE | |
| LOW | media/tour/video/hyperframes/tools/open_test.py | 3 | CODE | |
| LOW | media/tour/video/hyperframes/tools/full.py | 3 | CODE | |
| LOW | media/tour/video/hyperframes/tools/full.py | 4 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | media/tour/music-shared/tired_wired.py | 405 | CODE | |
| LOW | media/tour/music-shared/verify_tw.py | 25 | CODE |