The verification layer for coding agents
This report summarizes scanner evidence for VibiumDev/vibium, a Go project with 2,937 GitHub stars. SynthScan examined 139,295 lines of code across 788 source files, recording 522 pattern matches distributed across 17 syntactic categories. The legacy adjusted pattern signal is 5.8 (Moderate 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? 219 finding(s).
Are imports declared and package/API names verified? 151 finding(s).
Are wrappers, guards, and repeated structures necessary? 288 finding(s).
Which changes need focused human review? 522 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 522 distinct pattern matches across 17 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 |
|---|---|---|---|---|
| MEDIUM | clients/java/src/main/java/com/vibium/Page.java | 165 | // ── Properties ────────────────────────────────────────────── | COMMENT |
| MEDIUM | clients/java/src/main/java/com/vibium/Page.java | 188 | // ── Navigation ────────────────────────────────────────────── | COMMENT |
| MEDIUM | clients/java/src/main/java/com/vibium/Page.java | 212 | // ── Page Info ─────────────────────────────────────────────── | COMMENT |
| MEDIUM | clients/java/src/main/java/com/vibium/Page.java | 232 | // ── Finding Elements ──────────────────────────────────────── | COMMENT |
| MEDIUM | clients/java/src/main/java/com/vibium/Page.java | 303 | // ── Screenshots & PDF ─────────────────────────────────────── | COMMENT |
| MEDIUM | clients/java/src/main/java/com/vibium/Page.java | 365 | // ── JavaScript Evaluation ─────────────────────────────────── | COMMENT |
| MEDIUM | clients/java/src/main/java/com/vibium/Page.java | 429 | // ── Waiting ───────────────────────────────────────────────── | COMMENT |
| MEDIUM | clients/java/src/main/java/com/vibium/Page.java | 502 | // ── Viewport & Window ─────────────────────────────────────── | COMMENT |
| MEDIUM | clients/java/src/main/java/com/vibium/Page.java | 535 | // ── Emulation ─────────────────────────────────────────────── | COMMENT |
| MEDIUM | clients/java/src/main/java/com/vibium/Page.java | 564 | // ── Accessibility ─────────────────────────────────────────── | COMMENT |
| MEDIUM | clients/java/src/main/java/com/vibium/Page.java | 584 | // ── Frames ────────────────────────────────────────────────── | COMMENT |
| MEDIUM | clients/java/src/main/java/com/vibium/Page.java | 612 | // ── Scrolling ─────────────────────────────────────────────── | COMMENT |
| MEDIUM | clients/java/src/main/java/com/vibium/Page.java | 630 | // ── Lifecycle ─────────────────────────────────────────────── | COMMENT |
| MEDIUM | clients/java/src/main/java/com/vibium/Page.java | 649 | // ── HTTP Headers ──────────────────────────────────────────── | COMMENT |
| MEDIUM | clients/java/src/main/java/com/vibium/Page.java | 658 | // ── Network Interception ──────────────────────────────────── | COMMENT |
| MEDIUM | clients/java/src/main/java/com/vibium/Page.java | 694 | // ── Event Listeners ───────────────────────────────────────── | COMMENT |
| MEDIUM | clients/java/src/main/java/com/vibium/Page.java | 832 | // ── Internal ──────────────────────────────────────────────── | COMMENT |
| MEDIUM | clients/java/src/main/java/com/vibium/Element.java | 43 | // ── Interaction ───────────────────────────────────────────── | COMMENT |
| MEDIUM | clients/java/src/main/java/com/vibium/Element.java | 145 | // ── State Queries ─────────────────────────────────────────── | COMMENT |
| MEDIUM | clients/java/src/main/java/com/vibium/Element.java | 252 | // ── Waiting ───────────────────────────────────────────────── | COMMENT |
| MEDIUM | clients/java/src/main/java/com/vibium/Element.java | 274 | // ── Scoped Finding ────────────────────────────────────────── | COMMENT |
| MEDIUM | clients/java/src/main/java/com/vibium/Element.java | 328 | // ── Internal ──────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/py/conftest.py | 20 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/py/conftest.py | 22 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/py/conftest.py | 32 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/py/conftest.py | 36 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/py/conftest.py | 63 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/py/conftest.py | 66 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/py/conftest.py | 80 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/py/conftest.py | 82 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/py/conftest.py | 113 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/py/conftest.py | 115 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/py/engine/test_sync_api.py | 37 | # =========================================================================== | COMMENT |
| MEDIUM⚡ | tests/py/engine/test_sync_api.py | 39 | # =========================================================================== | COMMENT |
| MEDIUM⚡ | tests/py/engine/test_sync_api.py | 52 | # =========================================================================== | COMMENT |
| MEDIUM⚡ | tests/py/engine/test_sync_api.py | 54 | # =========================================================================== | COMMENT |
| MEDIUM⚡ | tests/py/engine/test_sync_api.py | 64 | # =========================================================================== | COMMENT |
| MEDIUM⚡ | tests/py/engine/test_sync_api.py | 66 | # =========================================================================== | COMMENT |
| MEDIUM⚡ | tests/py/engine/test_sync_api.py | 136 | # =========================================================================== | COMMENT |
| MEDIUM⚡ | tests/py/engine/test_sync_api.py | 138 | # =========================================================================== | COMMENT |
| MEDIUM⚡ | tests/py/engine/test_sync_api.py | 336 | # =========================================================================== | COMMENT |
| MEDIUM⚡ | tests/py/engine/test_sync_api.py | 338 | # =========================================================================== | COMMENT |
| MEDIUM⚡ | tests/py/engine/test_sync_api.py | 356 | # =========================================================================== | COMMENT |
| MEDIUM⚡ | tests/py/engine/test_sync_api.py | 358 | # =========================================================================== | COMMENT |
| MEDIUM⚡ | tests/py/engine/test_sync_api.py | 390 | # =========================================================================== | COMMENT |
| MEDIUM⚡ | tests/py/engine/test_sync_api.py | 392 | # =========================================================================== | COMMENT |
| MEDIUM⚡ | tests/py/engine/test_sync_api.py | 412 | # =========================================================================== | COMMENT |
| MEDIUM⚡ | tests/py/engine/test_sync_api.py | 414 | # =========================================================================== | COMMENT |
| MEDIUM⚡ | tests/py/engine/test_sync_api.py | 471 | # =========================================================================== | COMMENT |
| MEDIUM⚡ | tests/py/engine/test_sync_api.py | 473 | # =========================================================================== | COMMENT |
| MEDIUM⚡ | tests/py/engine/test_sync_api.py | 485 | # =========================================================================== | COMMENT |
| MEDIUM⚡ | tests/py/engine/test_sync_api.py | 487 | # =========================================================================== | COMMENT |
| MEDIUM⚡ | tests/py/engine/test_sync_api.py | 708 | # =========================================================================== | COMMENT |
| MEDIUM⚡ | tests/py/engine/test_sync_api.py | 710 | # =========================================================================== | COMMENT |
| MEDIUM⚡ | tests/py/engine/test_sync_api.py | 734 | # =========================================================================== | COMMENT |
| MEDIUM⚡ | tests/py/engine/test_sync_api.py | 736 | # =========================================================================== | COMMENT |
| MEDIUM⚡ | tests/py/engine/test_sync_api.py | 834 | # =========================================================================== | COMMENT |
| MEDIUM⚡ | tests/py/engine/test_sync_api.py | 836 | # =========================================================================== | COMMENT |
| MEDIUM⚡ | tests/py/engine/test_sync_api.py | 848 | # =========================================================================== | COMMENT |
| MEDIUM⚡ | tests/py/engine/test_sync_api.py | 850 | # =========================================================================== | COMMENT |
| 22 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | clients/python/src/vibium/binary.py | 74 | def get_platform_package_name() -> str: | CODE |
| LOW | clients/python/src/vibium/async_api/page.py | 417 | async def _setup_capture_navigation(self, timeout: Optional[int] = None) -> Any: | CODE |
| LOW | clients/python/src/vibium/async_api/page.py | 984 | def _handle_before_request_sent(self, params: Dict[str, Any]) -> None: | CODE |
| LOW | clients/python/src/vibium/async_api/page.py | 1018 | def _handle_response_completed(self, params: Dict[str, Any]) -> None: | CODE |
| LOW | clients/python/src/vibium/async_api/page.py | 1023 | def _handle_user_prompt_opened(self, params: Dict[str, Any]) -> None: | CODE |
| LOW | clients/python/src/vibium/async_api/page.py | 1049 | def _handle_download_will_begin(self, params: Dict[str, Any]) -> None: | CODE |
| LOW | tests/py/test_firefox.py | 59 | def test_firefox_recording_video(test_server, tmp_path): | CODE |
| LOW | tests/py/capability_adapter.py | 51 | def pytest_collection_modifyitems(config, items): | CODE |
| LOW | tests/py/test_sync_event_setup_ordering.py | 33 | def test_socket_opened_by_next_call_is_still_seen(sync_page): | CODE |
| LOW | tests/py/test_sync_event_setup_ordering.py | 46 | def test_rejected_install_raises_from_on_web_socket(monkeypatch): | CODE |
| LOW | tests/py/test_sync_event_setup_ordering.py | 59 | def test_catching_a_rejected_install_and_retrying_works(monkeypatch): | CODE |
| LOW | tests/py/test_event_setup_ordering.py | 44 | async def test_socket_opened_by_next_command_is_still_seen(page): | CODE |
| LOW | tests/py/test_event_setup_ordering.py | 55 | async def test_registering_twice_installs_the_monitor_once(page): | CODE |
| LOW | tests/py/test_event_setup_ordering.py | 67 | async def test_failed_install_is_retried_by_the_next_registration(monkeypatch): | CODE |
| LOW | tests/py/test_event_setup_ordering.py | 96 | async def test_command_parked_behind_setup_fails_when_the_connection_closes(page): | CODE |
| LOW | tests/py/test_tutorial_runner_timeout.py | 20 | async def test_async_hung_block_times_out(short_timeout): | CODE |
| LOW | tests/py/test_tutorial_runner_timeout.py | 25 | def test_sync_hung_block_times_out(short_timeout): | CODE |
| LOW | tests/py/test_tutorial_runner_timeout.py | 56 | def test_sync_timeout_kills_leaked_vibium(short_timeout, tmp_path): | CODE |
| LOW | tests/py/test_tutorial_runner_timeout.py | 77 | def test_sync_timeout_kills_vibium_that_ignores_sigterm(short_timeout, tmp_path): | CODE |
| LOW | tests/py/test_tutorial_runner_timeout.py | 107 | async def test_async_timeout_kills_leaked_vibium(short_timeout, tmp_path): | CODE |
| LOW⚡ | tests/py/test_tutorial_runner_timeout.py | 123 | async def test_async_block_still_runs_and_returns(): | CODE |
| LOW⚡ | tests/py/test_tutorial_runner_timeout.py | 127 | def test_sync_block_still_runs_and_returns(): | CODE |
| LOW⚡ | tests/py/test_tutorial_runner_timeout.py | 131 | def test_sync_block_failure_propagates(): | CODE |
| LOW⚡ | tests/py/test_tutorial_runner_timeout.py | 136 | async def test_async_block_failure_propagates(): | CODE |
| LOW | tests/py/test_errors.py | 11 | def test_errors_importable_from_vibium(): | CODE |
| LOW | tests/py/test_errors.py | 24 | def test_errors_importable_from_async_api(): | CODE |
| LOW | tests/py/test_errors.py | 39 | def test_errors_importable_from_sync_api(): | CODE |
| LOW⚡ | tests/py/test_errors.py | 54 | def test_timeout_is_builtin_subclass(): | CODE |
| LOW⚡ | tests/py/test_errors.py | 63 | def test_connection_is_builtin_subclass(): | CODE |
| LOW⚡ | tests/py/test_errors.py | 72 | def test_all_errors_subclass_vibium_error(): | CODE |
| LOW⚡ | tests/py/test_errors.py | 87 | def test_element_not_found_attributes(): | CODE |
| LOW⚡ | tests/py/test_errors.py | 96 | def test_bidi_error_attributes(): | CODE |
| LOW⚡ | tests/py/test_errors.py | 105 | def test_browser_crashed_attributes(): | CODE |
| LOW⚡ | tests/py/test_errors.py | 117 | async def test_element_not_found_raised(async_page, test_server): | CODE |
| LOW⚡ | tests/py/test_errors.py | 127 | def test_element_not_found_sync(sync_page, test_server): | CODE |
| LOW⚡ | tests/py/test_errors.py | 136 | async def test_timeout_error_is_catchable_as_builtin(async_page, test_server): | CODE |
| LOW | tests/py/test_send_deadlines.py | 51 | async def test_send_fails_fast_when_stdin_never_drains(): | CODE |
| LOW | tests/py/test_send_deadlines.py | 60 | async def test_setup_gate_cannot_outlive_its_setups(): | CODE |
| LOW | tests/py/test_tutorial_server.py | 18 | def test_serves_request_while_another_connection_is_idle(): | CODE |
| LOW | tests/py/engine/test_elements.py | 65 | async def test_find_role_text_combo(async_page, test_server): | CODE |
| LOW | tests/py/engine/test_lifecycle.py | 8 | async def test_page_returns_default(fresh_async_browser): | CODE |
| LOW | tests/py/engine/test_lifecycle.py | 58 | async def test_multiple_pages_independent(fresh_async_browser, test_server): | CODE |
| LOW | tests/py/engine/test_lifecycle.py | 94 | async def test_remove_all_listeners(fresh_async_browser): | CODE |
| LOW | tests/py/engine/test_lifecycle.py | 138 | def test_remove_all_listeners_sync(fresh_sync_browser): | CODE |
| LOW | tests/py/engine/test_navigation.py | 61 | async def test_wait_for_url_timeout(async_page, test_server): | CODE |
| LOW | tests/py/engine/test_navigation.py | 67 | async def test_wait_until_deprecated_alias(async_page, test_server): | CODE |
| LOW⚡ | tests/py/engine/test_auto_wait.py | 34 | async def test_timeout_error_message(fresh_async_browser, test_server): | CODE |
| LOW⚡ | tests/py/engine/test_auto_wait.py | 46 | async def test_navigation_error_message(fresh_async_browser, test_server): | CODE |
| LOW | tests/py/engine/test_frames.py | 8 | async def test_frames_returns_children(async_page, test_server): | CODE |
| LOW | tests/py/engine/test_cookies.py | 102 | async def test_init_script_persists(fresh_async_browser, test_server): | CODE |
| LOW | tests/py/engine/test_sync_download.py | 20 | def test_download_url_filename(sync_browser, test_server): | CODE |
| LOW | tests/py/engine/test_sync_download.py | 36 | def test_remove_download_listeners(sync_browser, test_server): | CODE |
| LOW | tests/py/engine/test_input_eval.py | 68 | async def test_screenshot_full_page(async_page, test_server): | CODE |
| LOW | tests/py/engine/test_input_eval.py | 146 | async def test_eval_is_alias_for_evaluate(async_page, test_server): | CODE |
| LOW | tests/py/engine/test_input_eval.py | 152 | async def test_large_message_does_not_crash_reader(async_page, test_server): | CODE |
| LOW | tests/py/engine/test_network_dialog.py | 60 | async def test_route_fulfill_headers(net_browser, test_server): | CODE |
| LOW | tests/py/engine/test_network_dialog.py | 139 | async def test_request_method_headers(net_browser, test_server): | CODE |
| LOW | tests/py/engine/test_network_dialog.py | 359 | async def test_capture_event_response(net_browser, test_server): | CODE |
| LOW⚡ | tests/py/engine/test_expose.py | 26 | async def test_source_form_defines_a_page_function(expose_browser): | CODE |
| LOW⚡ | tests/py/engine/test_expose.py | 35 | async def test_host_function_runs_and_returns_its_value(expose_browser): | CODE |
| 64 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | clients/python/src/vibium/_types.py | 3 | CODE | |
| LOW | clients/python/src/vibium/client.py | 3 | CODE | |
| LOW | clients/python/src/vibium/__init__.py | 18 | CODE | |
| LOW | clients/python/src/vibium/__init__.py | 18 | CODE | |
| LOW | clients/python/src/vibium/__init__.py | 18 | CODE | |
| LOW | clients/python/src/vibium/__init__.py | 18 | CODE | |
| LOW | clients/python/src/vibium/__init__.py | 19 | CODE | |
| LOW | clients/python/src/vibium/__init__.py | 19 | CODE | |
| LOW | clients/python/src/vibium/__init__.py | 19 | CODE | |
| LOW | clients/python/src/vibium/__init__.py | 19 | CODE | |
| LOW | clients/python/src/vibium/__init__.py | 19 | CODE | |
| LOW | clients/python/src/vibium/__init__.py | 20 | CODE | |
| LOW | clients/python/src/vibium/__init__.py | 21 | CODE | |
| LOW | clients/python/src/vibium/__init__.py | 22 | CODE | |
| LOW | clients/python/src/vibium/__init__.py | 23 | CODE | |
| LOW | clients/python/src/vibium/__init__.py | 24 | CODE | |
| LOW | clients/python/src/vibium/__init__.py | 25 | CODE | |
| LOW | clients/python/src/vibium/__init__.py | 26 | CODE | |
| LOW | clients/python/src/vibium/__init__.py | 26 | CODE | |
| LOW | clients/python/src/vibium/__init__.py | 26 | CODE | |
| LOW | clients/python/src/vibium/__init__.py | 26 | CODE | |
| LOW | clients/python/src/vibium/__init__.py | 26 | CODE | |
| LOW | clients/python/src/vibium/__init__.py | 26 | CODE | |
| LOW | clients/python/src/vibium/__init__.py | 26 | CODE | |
| LOW | clients/python/src/vibium/__init__.py | 65 | CODE | |
| LOW | clients/python/src/vibium/__init__.py | 65 | CODE | |
| LOW | clients/python/src/vibium/__init__.py | 67 | CODE | |
| LOW | clients/python/src/vibium/_sync_base.py | 3 | CODE | |
| LOW | clients/python/src/vibium/errors.py | 3 | CODE | |
| LOW | clients/python/src/vibium/async_api/console.py | 3 | CODE | |
| LOW | clients/python/src/vibium/async_api/dialog.py | 3 | CODE | |
| LOW | clients/python/src/vibium/async_api/recording.py | 3 | CODE | |
| LOW | clients/python/src/vibium/async_api/clock.py | 3 | CODE | |
| LOW | clients/python/src/vibium/async_api/download.py | 3 | CODE | |
| LOW | clients/python/src/vibium/async_api/route.py | 3 | CODE | |
| LOW | clients/python/src/vibium/async_api/__init__.py | 11 | CODE | |
| LOW | clients/python/src/vibium/async_api/__init__.py | 11 | CODE | |
| LOW | clients/python/src/vibium/async_api/__init__.py | 11 | CODE | |
| LOW | clients/python/src/vibium/async_api/__init__.py | 11 | CODE | |
| LOW | clients/python/src/vibium/async_api/__init__.py | 12 | CODE | |
| LOW | clients/python/src/vibium/async_api/__init__.py | 12 | CODE | |
| LOW | clients/python/src/vibium/async_api/__init__.py | 12 | CODE | |
| LOW | clients/python/src/vibium/async_api/__init__.py | 12 | CODE | |
| LOW | clients/python/src/vibium/async_api/__init__.py | 13 | CODE | |
| LOW | clients/python/src/vibium/async_api/__init__.py | 14 | CODE | |
| LOW | clients/python/src/vibium/async_api/__init__.py | 15 | CODE | |
| LOW | clients/python/src/vibium/async_api/__init__.py | 16 | CODE | |
| LOW | clients/python/src/vibium/async_api/__init__.py | 16 | CODE | |
| LOW | clients/python/src/vibium/async_api/__init__.py | 17 | CODE | |
| LOW | clients/python/src/vibium/async_api/__init__.py | 18 | CODE | |
| LOW | clients/python/src/vibium/async_api/__init__.py | 19 | CODE | |
| LOW | clients/python/src/vibium/async_api/__init__.py | 19 | CODE | |
| LOW | clients/python/src/vibium/async_api/__init__.py | 20 | CODE | |
| LOW | clients/python/src/vibium/async_api/__init__.py | 21 | CODE | |
| LOW | clients/python/src/vibium/async_api/__init__.py | 22 | CODE | |
| LOW | clients/python/src/vibium/async_api/__init__.py | 23 | CODE | |
| LOW | clients/python/src/vibium/async_api/__init__.py | 23 | CODE | |
| LOW | clients/python/src/vibium/async_api/__init__.py | 23 | CODE | |
| LOW | clients/python/src/vibium/async_api/__init__.py | 23 | CODE | |
| LOW | clients/python/src/vibium/async_api/__init__.py | 23 | CODE | |
| 56 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | clients/python/src/vibium/binary.py | 151 | except (ImportError, ModuleNotFoundError): | CODE |
| HIGH | clients/python/src/vibium/binary.py | 67 | except (asyncio.CancelledError, OSError): | CODE |
| HIGH | clients/python/src/vibium/binary.py | 336 | except ProcessLookupError: | CODE |
| HIGH | clients/python/src/vibium/binary.py | 350 | except ProcessLookupError: | CODE |
| HIGH | clients/python/src/vibium/binary.py | 311 | except ProcessLookupError: | CODE |
| HIGH | clients/python/src/vibium/binary.py | 290 | except asyncio.TimeoutError: | CODE |
| HIGH | clients/python/src/vibium/client.py | 98 | except ValueError: | CODE |
| HIGH | clients/python/src/vibium/client.py | 112 | except (asyncio.CancelledError, OSError): | CODE |
| HIGH | clients/python/src/vibium/client.py | 239 | except asyncio.CancelledError: | CODE |
| HIGH | clients/python/src/vibium/client.py | 87 | except Exception: | CODE |
| HIGH | clients/python/src/vibium/async_api/page.py | 1034 | except Exception: | CODE |
| HIGH | clients/python/src/vibium/async_api/page.py | 1004 | except Exception: | CODE |
| HIGH | clients/python/src/vibium/async_api/browser.py | 101 | except Exception: | CODE |
| HIGH | tests/py/test_event_setup_ordering.py | 80 | except Exception: | CODE |
| HIGH | tests/py/helpers/tutorial_runner.py | 247 | except OSError: | CODE |
| HIGH | tests/py/helpers/tutorial_runner.py | 258 | except OSError: | CODE |
| HIGH | scripts/apidrift_python.py | 83 | except (ImportError, AttributeError): | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | docs/explanation/bidi-data-collector.md | 54 | ### Step 1: Register a collector | COMMENT |
| LOW | docs/explanation/bidi-data-collector.md | 83 | ### Step 2: Wait for a request to happen | COMMENT |
| LOW | docs/explanation/bidi-data-collector.md | 87 | ### Step 3: Retrieve the collected data | COMMENT |
| LOW | docs/explanation/sync-async-client-architecture.md | 581 | ### Step 1: Create the SyncBridge | COMMENT |
| LOW | docs/explanation/sync-async-client-architecture.md | 624 | ### Step 2: Create the worker with a dispatch table | COMMENT |
| LOW | docs/explanation/sync-async-client-architecture.md | 669 | ### Step 3: Create sync wrapper classes | COMMENT |
| LOW | docs/explanation/sync-async-client-architecture.md | 687 | ### Step 4: Configure the build | COMMENT |
| LOW | docs/explanation/sync-async-client-architecture.md | 712 | ### Step 5: Add callback support (if needed) | COMMENT |
| LOW | docs/tutorials/webdriver-bidi-raw.md | 45 | ## Step 1: Launch Firefox with BiDi Enabled | COMMENT |
| LOW | docs/tutorials/webdriver-bidi-raw.md | 71 | ## Step 2: Connect with websocat | COMMENT |
| LOW | docs/tutorials/webdriver-bidi-raw.md | 81 | ## Step 3: Start a Session | COMMENT |
| LOW | docs/tutorials/webdriver-bidi-raw.md | 102 | ## Step 4: Get the Browsing Context | COMMENT |
| LOW | docs/tutorials/webdriver-bidi-raw.md | 126 | ## Step 5: Navigate to a Page | COMMENT |
| LOW | docs/tutorials/webdriver-bidi-raw.md | 147 | ## Step 6: Get the Document Title | COMMENT |
| LOW | docs/tutorials/webdriver-bidi-raw.md | 171 | ## Step 7: Find and Click a Link | COMMENT |
| LOW | docs/tutorials/webdriver-bidi-raw.md | 209 | ## Step 8: Close the Browser | COMMENT |
| LOW | docs/tutorials/getting-started-java.md | 13 | ## Step 1: Install Java | COMMENT |
| LOW | docs/tutorials/getting-started-java.md | 50 | ## Step 2: Create a Project Folder | COMMENT |
| LOW | docs/tutorials/getting-started-java.md | 128 | ## Step 3: Write Your First Program | COMMENT |
| LOW | docs/tutorials/getting-started-java.md | 167 | ## Step 4: Run It | COMMENT |
| LOW | docs/tutorials/getting-started-js.md | 13 | ## Step 1: Install Node.js | COMMENT |
| LOW | docs/tutorials/getting-started-js.md | 56 | ## Step 2: Create a Project Folder | COMMENT |
| LOW | docs/tutorials/getting-started-js.md | 68 | ## Step 3: Install Vibium | COMMENT |
| LOW | docs/tutorials/getting-started-js.md | 89 | ## Step 4: Write Your First Script | COMMENT |
| LOW | docs/tutorials/getting-started-js.md | 133 | ## Step 5: Run It | COMMENT |
| LOW | docs/tutorials/getting-started-python.md | 13 | ## Step 1: Install Python | COMMENT |
| LOW | docs/tutorials/getting-started-python.md | 48 | ## Step 2: Create a Project Folder | COMMENT |
| LOW | docs/tutorials/getting-started-python.md | 59 | ## Step 3: Install Vibium | COMMENT |
| LOW | docs/tutorials/getting-started-python.md | 81 | ## Step 4: Write Your First Script | COMMENT |
| LOW | docs/tutorials/getting-started-python.md | 115 | ## Step 5: Run It | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | clients/python/src/vibium/client.py | 41 | # setup can resume after close() has already drained the pending map. | COMMENT |
| LOW | clicker/cmd/clicker/helpers.go | 21 | // lateParseCommands records every command built with lateParse. The flag | COMMENT |
| LOW | clicker/cmd/clicker/helpers.go | 41 | fmt.Fprintf(os.Stderr, "Error: %v\n", err) | COMMENT |
| LOW | clicker/cmd/clicker/main.go | 81 | // and the engine, channel and session validation. | COMMENT |
| LOW | clicker/internal/bidi/subscribe.go | 1 | package bidi | COMMENT |
| LOW | clicker/internal/bidi/connection.go | 41 | // which stalls the write forever (#397). Without a deadline the single stdin | COMMENT |
| LOW | clicker/internal/paths/paths.go | 161 | // chromedriver under 147.x produced a mismatched pair that IsInstalled() | COMMENT |
| LOW | clicker/internal/paths/pins.go | 1 | package paths | COMMENT |
| LOW | clicker/internal/agent/handlers.go | 61 | // current (#383). Set and cleared by Call; both transports serialize | COMMENT |
| LOW | clicker/internal/agent/handlers.go | 81 | // launchedEngine is the browser the running session was actually | COMMENT |
| LOW | clicker/internal/browser/installer_firefox.go | 21 | COMMENT | |
| LOW | clicker/internal/daemon/client.go | 21 | COMMENT | |
| LOW | clicker/internal/api/recording_webm.go | 1 | package api | COMMENT |
| LOW | clicker/internal/api/pierce.go | 1 | package api | COMMENT |
| LOW | clicker/internal/api/handlers_expose.go | 1 | package api | COMMENT |
| LOW | clicker/internal/api/handlers_interaction.go | 841 | // segments rather than text, so there is nothing to append to. | COMMENT |
| LOW | clicker/internal/api/handlers_interaction.go | 1121 | return err | COMMENT |
| LOW | clicker/internal/api/handlers_interaction.go | 1321 | // as an error instead of 'ok' so the caller learns the field never | COMMENT |
| LOW | clicker/internal/api/helpers.go | 301 | } | COMMENT |
| LOW | clicker/internal/api/handlers_recording.go | 421 | COMMENT | |
| LOW | clicker/internal/api/router.go | 301 | }) | COMMENT |
| LOW | clicker/internal/api/router.go | 1101 | // Chrome 156 nulls navigation on link-click downloads (#604); | COMMENT |
| LOW | clicker/internal/api/navigation.go | 1 | package api | COMMENT |
| LOW | clicker/internal/verifier/modeltools.go | 81 | // validation, guards, timeout capping — is shared in ModelToolExecutor. | COMMENT |
| LOW | deploy/cloud-computers/cloud-init.yml | 1 | #cloud-config | COMMENT |
| LOW | deploy/cloud-computers/install-chrome.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | deploy/cloud-computers/flyio/fleet.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | deploy/cloud-computers/aws/user-data.sh | 1 | #!/bin/bash | COMMENT |
| LOW | tests/helpers.js | 1 | const fs = require('node:fs'); | COMMENT |
| LOW | tests/py/engine/test_lifecycle.py | 161 | # After close, should not be able to use the browser | COMMENT |
| LOW | scripts/apidrift_js.js | 1 | // Dump the JS client's public surface as JSON for the apidrift checker. | COMMENT |
| LOW | scripts/mtl-verdict.sh | 1 | #!/bin/sh | COMMENT |
| LOW | scripts/mtlprobe.m | 1 | // Reports whether this machine pays the dead-virtual-GPU stall that | COMMENT |
| LOW | scripts/cloud-bench/bench.js | 1 | #!/usr/bin/env node | COMMENT |
| LOW | scripts/cloud-bench/bench.js | 21 | // results/screenshots/, named by the same stamp + | COMMENT |
| LOW | packages/vibium/scripts/link-binary.js | 1 | // Replace the published JS bin shim with the platform binary, so running | COMMENT |
| LOW | .github/workflows/test.yml | 1 | name: Test | COMMENT |
| LOW | .github/workflows/test.yml | 21 | permissions: | COMMENT |
| LOW | .github/workflows/version-bump.yml | 1 | # Daily pin bumps for the browsers vibium installs (#469, #470). Compares | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | clients/python/src/vibium/__init__.py | 37 | __all__ = [ | CODE |
| LOW⚡ | clients/python/src/vibium/async_api/clock.py | 73 | async def set_fixed_time(self, time: Union[int, str]) -> None: | CODE |
| LOW⚡ | clients/python/src/vibium/async_api/clock.py | 80 | async def set_system_time(self, time: Union[int, str]) -> None: | CODE |
| LOW⚡ | clients/python/src/vibium/async_api/clock.py | 87 | async def set_timezone(self, timezone: str) -> None: | CODE |
| LOW | clients/python/src/vibium/async_api/__init__.py | 33 | __all__ = [ | CODE |
| LOW⚡ | clients/python/src/vibium/async_api/page.py | 644 | async def set_content(self, html: str) -> None: | CODE |
| LOW⚡ | clients/python/src/vibium/async_api/page.py | 648 | async def set_geolocation(self, coords: Dict[str, float]) -> None: | CODE |
| LOW⚡ | clients/python/src/vibium/async_api/page.py | 654 | async def set_window(self, **options: Any) -> None: | CODE |
| LOW | clients/python/src/vibium/async_api/page.py | 611 | async def set_viewport(self, size: Dict[str, int]) -> None: | CODE |
| LOW | clients/python/src/vibium/async_api/page.py | 759 | async def set_headers(self, headers: Dict[str, str]) -> None: | CODE |
| LOW | clients/python/src/vibium/async_api/element.py | 122 | async def set_files(self, files: List[str], timeout: Optional[int] = None) -> None: | CODE |
| LOW | clients/python/src/vibium/async_api/context.py | 56 | async def set_cookies(self, cookies: List[SetCookieParam]) -> None: | CODE |
| LOW | clients/python/src/vibium/async_api/context.py | 75 | async def set_storage(self, state: StorageState) -> None: | CODE |
| LOW⚡ | clients/python/src/vibium/sync_api/clock.py | 34 | def set_fixed_time(self, time: Union[int, str]) -> None: | CODE |
| LOW⚡ | clients/python/src/vibium/sync_api/clock.py | 37 | def set_system_time(self, time: Union[int, str]) -> None: | CODE |
| LOW⚡ | clients/python/src/vibium/sync_api/clock.py | 40 | def set_timezone(self, timezone: str) -> None: | CODE |
| LOW | clients/python/src/vibium/sync_api/__init__.py | 22 | __all__ = [ | CODE |
| LOW | clients/python/src/vibium/sync_api/page.py | 299 | def set_viewport(self, size: Dict[str, int]) -> None: | CODE |
| LOW⚡ | clients/python/src/vibium/sync_api/page.py | 322 | def set_content(self, html: str) -> None: | CODE |
| LOW⚡ | clients/python/src/vibium/sync_api/page.py | 325 | def set_geolocation(self, coords: Dict[str, float]) -> None: | CODE |
| LOW⚡ | clients/python/src/vibium/sync_api/page.py | 328 | def set_window(self, **options: Any) -> None: | CODE |
| LOW | clients/python/src/vibium/sync_api/page.py | 425 | def set_headers(self, headers: Dict[str, str]) -> None: | CODE |
| LOW | clients/python/src/vibium/sync_api/element.py | 88 | def set_files(self, files: List[str], timeout: Optional[int] = None) -> None: | CODE |
| LOW | clients/python/src/vibium/sync_api/context.py | 45 | def set_cookies(self, cookies: List[SetCookieParam]) -> None: | CODE |
| LOW | clients/python/src/vibium/sync_api/context.py | 54 | def set_storage(self, state: StorageState) -> None: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | clients/python/src/vibium/async_api/page.py | 269 | ("placeholder", placeholder), ("alt", alt), ("title", title), | CODE |
| LOW | clients/python/src/vibium/async_api/page.py | 308 | ("placeholder", placeholder), ("alt", alt), ("title", title), | CODE |
| LOW | clients/python/src/vibium/async_api/element.py | 228 | ("placeholder", placeholder), ("alt", alt), ("title", title), | CODE |
| LOW | clients/python/src/vibium/async_api/element.py | 270 | ("placeholder", placeholder), ("alt", alt), ("title", title), | CODE |
| LOW | …va/src/main/java/com/vibium/types/SelectorOptions.java | 40 | if (placeholder != null) params.put("placeholder", placeholder); | CODE |
| LOW | clicker/cmd/clicker/fill.go | 16 | Example: ` vibium fill "input[name=email]" "user@example.com" | CODE |
| LOW | clicker/cmd/clicker/find.go | 152 | result, err := daemonCall("browser_find", map[string]interface{}{"placeholder": args[0], "timeout": float64(placehold | CODE |
| LOW | clicker/internal/agent/handlers.go | 1288 | placeholder, _ := args["placeholder"].(string) | CODE |
| LOW | clicker/internal/agent/handlers.go | 1314 | {"role", role}, {"text", text}, {"label", label}, {"placeholder", placeholder}, | CODE |
| LOW | clicker/internal/agent/handlers.go | 1469 | const ph = el.getAttribute('placeholder'); | CODE |
| LOW | clicker/internal/agent/handlers.go | 1495 | const ph = node.getAttribute('placeholder'); | CODE |
| LOW | clicker/internal/toolschema/schema.go | 204 | "placeholder": map[string]interface{}{ | CODE |
| LOW | clicker/internal/api/handlers_elements.go | 117 | placeholder, _ := params["placeholder"].(string) | CODE |
| LOW | clicker/internal/api/handlers_elements.go | 290 | if (placeholder && el.getAttribute('placeholder') !== placeholder) return false; | CODE |
| LOW | clicker/internal/api/handlers_elements.go | 453 | labels := []string{"role", "text", "label", "placeholder", "alt", "title", "testid", "xpath"} | CODE |
| LOW | clicker/internal/api/handlers_a11y.go | 87 | const placeholder = el.getAttribute('placeholder'); | CODE |
| LOW | clicker/internal/api/handlers_a11y.go | 247 | const placeholder = el.getAttribute('placeholder'); | CODE |
| LOW | clicker/internal/api/map.go | 44 | const placeholder = el.getAttribute('placeholder'); | CODE |
| LOW | clicker/internal/api/helpers.go | 188 | ep.Placeholder, _ = params["placeholder"].(string) | CODE |
| LOW | clicker/internal/verifier/trace_snapshot.go | 106 | for _, key := range []string{"id", "role", "aria-label", "aria-checked", "aria-selected", "aria-expanded", "aria-hidde | CODE |
| LOW | docs/explanation/actionability.md | 157 | await page.find('#login-form input[type="email"]').fill('user@example.com'); | CODE |
| LOW | docs/explanation/actionability.md | 181 | await page.find({ label: 'Email' }).fill('user@example.com'); | CODE |
| LOW | docs/explanation/bidi-data-collector.md | 204 | await page.find('#name').fill('Jane Doe'); | CODE |
| LOW | docs/specs/ai-native-methods.md | 62 | data: { name: 'Jane Doe', address: '123 Main St', zip: '60601' } | CODE |
| LOW | docs/specs/ai-native-methods.md | 62 | data: { name: 'Jane Doe', address: '123 Main St', zip: '60601' } | CODE |
| LOW | docs/specs/java-client-spec.md | 436 | vibe.find("#username").fill("user@example.com"); | CODE |
| LOW | skills/browser/SKILL.md | 273 | vibium fill @e1 "user@example.com" | CODE |
| LOW | skills/browser/SKILL.md | 303 | vibium fill "input[name=email]" "user@example.com" | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | clients/python/src/vibium/client.py | 87 | except Exception: | CODE |
| LOW | clients/python/src/vibium/cli.py | 36 | except Exception as e: | CODE |
| MEDIUM | clients/python/src/vibium/cli.py | 37 | print(f"Error: {e}") | CODE |
| LOW | clients/python/src/vibium/async_api/dialog.py | 48 | except Exception as e: | CODE |
| LOW | clients/python/src/vibium/async_api/dialog.py | 60 | except Exception as e: | CODE |
| LOW | clients/python/src/vibium/async_api/route.py | 47 | except Exception as e: | CODE |
| LOW | clients/python/src/vibium/async_api/route.py | 71 | except Exception as e: | CODE |
| LOW | clients/python/src/vibium/async_api/route.py | 82 | except Exception as e: | CODE |
| MEDIUM | clients/python/src/vibium/async_api/page.py | 76 | def _run() -> None: | CODE |
| LOW | clients/python/src/vibium/async_api/page.py | 86 | except Exception as e: | CODE |
| LOW | clients/python/src/vibium/async_api/page.py | 1004 | except Exception: | CODE |
| LOW | clients/python/src/vibium/async_api/page.py | 1034 | except Exception: | CODE |
| LOW | clients/python/src/vibium/async_api/browser.py | 101 | except Exception: | CODE |
| LOW | clients/python/src/vibium/async_api/network.py | 57 | except Exception: | CODE |
| LOW | clients/python/src/vibium/async_api/network.py | 101 | except Exception: | CODE |
| LOW | clients/python/src/vibium/sync_api/page.py | 116 | except Exception: | CODE |
| LOW | clients/python/src/vibium/sync_api/page.py | 497 | except Exception as e: | CODE |
| LOW | clients/python/src/vibium/sync_api/page.py | 524 | except Exception as e: | CODE |
| LOW | clients/python/src/vibium/sync_api/page.py | 556 | except Exception as e: | CODE |
| MEDIUM | clients/python/src/vibium/sync_api/page.py | 111 | def __repr__(self) -> str: | CODE |
| LOW | tests/py/test_firefox.py | 66 | except Exception as err: | CODE |
| LOW | tests/py/test_event_setup_ordering.py | 80 | except Exception: | CODE |
| LOW⚡ | tests/py/engine/test_auto_wait.py | 41 | except Exception as err: | CODE |
| LOW | tests/py/engine/test_sync_websocket.py | 42 | except Exception as exc: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | …s/specs/vibium-check-codex-implementation-spec-v0.9.md | 284 | export OPENAI_API_KEY='your-api-key' | CODE |
| HIGH | …s/specs/vibium-check-codex-implementation-spec-v0.9.md | 951 | export OPENAI_API_KEY='your-api-key' | CODE |
| HIGH | docs/presentations/vibe-check/sources/first-check.md | 45 | export OPENAI_API_KEY='replace-with-your-api-key' | CODE |
| HIGH | docs/tutorials/first-check.md | 46 | export OPENAI_API_KEY='replace-with-your-api-key' | CODE |
| HIGH | docs/how-to-guides/using-vibium-with-claude-desktop.md | 72 | "OPENAI_API_KEY": "your-api-key" | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | clients/python/src/vibium/async_api/page.py | 0 | independently verify live behavior, or inspect a read-only archive. | STRING |
| HIGH | clients/python/src/vibium/async_api/browser.py | 0 | independently verify live behavior, or inspect a read-only archive. | STRING |
| HIGH | clients/python/src/vibium/sync_api/page.py | 0 | independently verify live behavior, or inspect a read-only archive. | STRING |
| HIGH | clients/python/src/vibium/sync_api/browser.py | 0 | independently verify live behavior, or inspect a read-only archive. | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | clients/python/src/vibium/binary.py | 179 | CODE | |
| LOW | clients/python/src/vibium/async_api/recording.py | 70 | CODE | |
| LOW | clients/python/src/vibium/async_api/page.py | 247 | CODE | |
| LOW | clients/python/src/vibium/async_api/page.py | 282 | CODE | |
| LOW | clients/python/src/vibium/async_api/page.py | 517 | CODE | |
| LOW | clients/python/src/vibium/async_api/element.py | 203 | CODE | |
| LOW | clients/python/src/vibium/async_api/element.py | 245 | CODE | |
| LOW | clients/python/src/vibium/sync_api/recording.py | 21 | CODE | |
| LOW | clients/python/src/vibium/sync_api/page.py | 170 | CODE | |
| LOW | clients/python/src/vibium/sync_api/page.py | 192 | CODE | |
| LOW | clients/python/src/vibium/sync_api/element.py | 147 | CODE | |
| LOW | clients/python/src/vibium/sync_api/element.py | 169 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | tests/py/engine/test_websocket.py | 19 | if await vibe.evaluate("window.__ws && window.__ws.readyState === 1"): | CODE |
| HIGH | tests/py/engine/test_emulation.py | 131 | () => resolve(null), | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | clicker/cmd/clicker/window.go | 19 | # Set window to 1920x1080 | COMMENT |
| LOW | clicker/cmd/clicker/window.go | 22 | # Set window to 1920x1080 at position (0, 0) | COMMENT |
| LOW | clicker/cmd/clicker/geolocation.go | 16 | # Set location to New York City | COMMENT |
| LOW | clicker/cmd/clicker/geolocation.go | 19 | # Set location to London with 10m accuracy`, | COMMENT |
| LOW | clicker/cmd/clicker/viewport.go | 19 | # Set viewport to 1280x720 | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | clients/python/src/vibium/binary.py | 179 | CODE | |
| LOW | clients/python/src/vibium/client.py | 72 | CODE | |
| LOW | clients/python/src/vibium/async_api/page.py | 776 | CODE | |
| LOW | clients/python/src/vibium/async_api/page.py | 939 | CODE | |
| LOW | clients/python/src/vibium/async_api/page.py | 984 | CODE | |
| LOW | clients/python/src/vibium/sync_api/page.py | 374 | CODE | |
| LOW | tests/py/helpers/tutorial_runner.py | 30 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | clicker/internal/verifier/fence_test.go | 21 | {"prose after the fence", "```json\n" + verdict + "\n```\nLet me know if you need more.", verdict}, | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/helpers/test-server.js | 211 | function handleRequest(req, res) { | CODE |