macOS menu bar app that tells you, in plain English, what each USB-C cable plugged into your Mac can actually do
This report summarizes scanner evidence for darrylmorley/whatcable, a Swift project with 8,875 GitHub stars. SynthScan examined 193,219 lines of code across 544 source files, recording 1745 pattern matches distributed across 10 syntactic categories. The legacy adjusted pattern signal is 8.5 (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? 1737 finding(s).
Are imports declared and package/API names verified? 8 finding(s).
Are wrappers, guards, and repeated structures necessary? 59 finding(s).
Which changes need focused human review? 1745 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 1745 distinct pattern matches across 10 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 | .gitleaks.toml | 1 | # gitleaks configuration for WhatCable. | COMMENT |
| LOW | probes/test-kit/55_hub_ports.c | 21 | #include <IOKit/IOCFPlugIn.h> | COMMENT |
| LOW | probes/test-kit/probe_json.h | 21 | #include <CoreFoundation/CoreFoundation.h> | COMMENT |
| LOW | Tests/WhatCableCoreTests/VendorDBTests.swift | 41 | COMMENT | |
| LOW | …atCableCoreTests/LocalizedBundleConcurrencyTests.swift | 1 | import Foundation | COMMENT |
| LOW | Tests/WhatCableCoreTests/TRMTransportTests.swift | 101 | #expect(t.transportType == "USB2") | COMMENT |
| LOW | …sts/WhatCableCoreTests/CableDBVariantLookupTests.swift | 1 | import Testing | COMMENT |
| LOW | …sts/WhatCableCoreTests/CableDBVariantLookupTests.swift | 81 | #expect(matches.first?.brand.contains("CalDigit") == true) | COMMENT |
| LOW | …/WhatCableCoreTests/USB3CorroborationWidgetTests.swift | 1 | import Foundation | COMMENT |
| LOW | …/WhatCableCoreTests/USB3CorroborationWidgetTests.swift | 61 | } | COMMENT |
| LOW | …ts/WhatCableCoreTests/ThunderboltProbeSweepTests.swift | 1 | import Foundation | COMMENT |
| LOW | …ts/WhatCableCoreTests/ThunderboltProbeSweepTests.swift | 121 | /// | COMMENT |
| LOW | …ts/WhatCableCoreTests/ThunderboltProbeSweepTests.swift | 421 | // Both corpus pairs carry both ends; a folder with one end only is a | COMMENT |
| LOW | …ts/WhatCableCoreTests/ThunderboltProbeSweepTests.swift | 661 | #expect(sw?.parentSwitchUID == 100) | COMMENT |
| LOW | …ts/WhatCableCoreTests/ThunderboltProbeSweepTests.swift | 861 | /// through the PRODUCTION parser (`IOThunderboltPort.from(read:)`, the | COMMENT |
| LOW | …ts/WhatCableCoreTests/ThunderboltProbeSweepTests.swift | 941 | } | COMMENT |
| LOW | …ts/WhatCableCoreTests/ThunderboltProbeSweepTests.swift | 1061 | // An earlier hop-table count of 45 was inflated by truncated | COMMENT |
| LOW | …ts/WhatCableCoreTests/ThunderboltProbeSweepTests.swift | 1101 | """ | COMMENT |
| LOW | …ts/WhatCableCoreTests/ThunderboltProbeSweepTests.swift | 1121 | // exercised: at zero, nothing in this sweep would touch it. | COMMENT |
| LOW | …ts/WhatCableCoreTests/ThunderboltProbeSweepTests.swift | 1221 | .filter { $0.parentSwitchUID == sw.id && $0.depth >= 1 } | COMMENT |
| LOW | Tests/WhatCableCoreTests/CableCertLookupTests.swift | 1 | import Foundation | COMMENT |
| LOW | Tests/WhatCableCoreTests/CableCertLookupTests.swift | 41 | COMMENT | |
| LOW | Tests/WhatCableCoreTests/CableCertLookupTests.swift | 81 | let certs = CableDB.certifications(forXID: Self.ankerXID) | COMMENT |
| LOW | …CableCoreTests/DataLinkDiagnosticProbeSweepTests.swift | 1081 | // case is the non-confirming one and the golden (unknownCable) | COMMENT |
| LOW | …s/WhatCableCoreTests/PortSummaryCorpusSweepTests.swift | 1 | import Foundation | COMMENT |
| LOW | …s/WhatCableCoreTests/PortSummaryCorpusSweepTests.swift | 21 | /// probe capture (never a decodable array), so `PowerSource.options` is | COMMENT |
| LOW | …s/WhatCableCoreTests/PortSummaryCorpusSweepTests.swift | 441 | // case, not as a list of ports: a case resolves with source | COMMENT |
| LOW | …s/WhatCableCoreTests/PortSummaryCorpusSweepTests.swift | 521 | "\(violations.count) connected corpus port(s) reported .empty status: \(violations.prefix(5))") | COMMENT |
| LOW | …s/WhatCableCoreTests/PortSummaryCorpusSweepTests.swift | 761 | @Test("Invariant: an e-marker response always produces an e-marker group") | COMMENT |
| LOW | …sts/WhatCableCoreTests/PowerSourceSynthesisTests.swift | 321 | ) | COMMENT |
| LOW | …sts/WhatCableCoreTests/PowerSourceSynthesisTests.swift | 361 | } | COMMENT |
| LOW | …sts/WhatCableCoreTests/PowerSourceSynthesisTests.swift | 521 | #expect(result == nil) | COMMENT |
| LOW | …sts/WhatCableCoreTests/PowerSourceSynthesisTests.swift | 581 | // Mismatch: entries.count (2) != positionalPortKeys.count (3). | COMMENT |
| LOW | …bleCoreTests/PowerSourceSynthesisProbeSweepTests.swift | 1 | import Foundation | COMMENT |
| LOW | …bleCoreTests/PowerSourceSynthesisProbeSweepTests.swift | 121 | guard let range = body.range(of: "\(key):") else { return nil } | COMMENT |
| LOW | …bleCoreTests/PowerSourceSynthesisProbeSweepTests.swift | 441 | if routine.count > 40 { | COMMENT |
| LOW | …CableCoreTests/USB3CorroborationCorpusSweepTests.swift | 1 | import Foundation | COMMENT |
| LOW | …CableCoreTests/USB3CorroborationCorpusSweepTests.swift | 21 | /// (`portName(fromUSBIOPortPath:)`: take the first ancestor's | COMMENT |
| LOW | …CableCoreTests/USB3CorroborationCorpusSweepTests.swift | 41 | /// - **Uncorroborated baseline ports**: asserts NO USB3 label/verdict | COMMENT |
| LOW | …CableCoreTests/USB3CorroborationCorpusSweepTests.swift | 261 | } | COMMENT |
| LOW | …CableCoreTests/USB3CorroborationCorpusSweepTests.swift | 421 | COMMENT | |
| LOW | …CableCoreTests/USB3CorroborationCorpusSweepTests.swift | 541 | } | COMMENT |
| LOW | …CableCoreTests/USB3CorroborationCorpusSweepTests.swift | 581 | // an unrelated later block when a probe-19 dash separator appeared | COMMENT |
| LOW | Tests/WhatCableCoreTests/AppInfoVersionTests.swift | 1 | import Testing | COMMENT |
| LOW | Tests/WhatCableCoreTests/SnapshotCorpusTests.swift | 81 | func snapshotView() throws { | COMMENT |
| LOW | …sts/WhatCableCoreTests/ClassDiscoveryCorpusTests.swift | 1 | import Foundation | COMMENT |
| LOW | Tests/WhatCableCoreTests/DisplayDiagnosticTests.swift | 181 | @Test("4-lane HBR2, the node lists the G34w-10's 100Hz top: belowMonitorMax, the statement clears the cable") | COMMENT |
| LOW | Tests/WhatCableCoreTests/DisplayDiagnosticTests.swift | 201 | let diag = try #require(DisplayDiagnostic(dp: makeDP(lanes: 2, currentMode: Self.liveG34w60, drivenTiming: Self. | COMMENT |
| LOW | Tests/WhatCableCoreTests/DisplayDiagnosticTests.swift | 321 | // Base block PLUS the CTA-861 extension. The G34w's 100 Hz mode is | COMMENT |
| LOW | Tests/WhatCableCoreTests/DisplayDiagnosticTests.swift | 381 | #expect(DisplayDiagnostic.branchDeviceLabel("CustomHub") == "CustomHub") | COMMENT |
| LOW | Tests/WhatCableCoreTests/DisplayDiagnosticTests.swift | 401 | // UltraFine 4K reached over a Thunderbolt/USB4 tunnel at 4 lanes HBR2. | COMMENT |
| LOW | Tests/WhatCableCoreTests/DisplayDiagnosticTests.swift | 581 | COMMENT | |
| LOW | Tests/WhatCableCoreTests/DisplayDiagnosticTests.swift | 701 | #expect(diag.facts.maxMode?.height == 2880) | COMMENT |
| LOW | Tests/WhatCableCoreTests/DisplayDiagnosticTests.swift | 741 | #expect(diag.bottleneck == .fine) | COMMENT |
| LOW | Tests/WhatCableCoreTests/DisplayDiagnosticTests.swift | 1101 | // Driven at 1440p60 with the node listing that picture at 60 Hz only: | COMMENT |
| LOW | Tests/WhatCableCoreTests/DisplayDiagnosticTests.swift | 1221 | } | COMMENT |
| LOW | Tests/WhatCableCoreTests/DisplayDiagnosticTests.swift | 1241 | COMMENT | |
| LOW | Tests/WhatCableCoreTests/DisplayDiagnosticTests.swift | 1321 | func linkLimitedMaxModeDoesNotReadAsFine() throws { | COMMENT |
| LOW | Tests/WhatCableCoreTests/DisplayDiagnosticTests.swift | 1381 | // never a throughput figure. | COMMENT |
| LOW | Tests/WhatCableCoreTests/DisplayDiagnosticTests.swift | 1441 | @Test("A max mode below the declared top does not lower it") | COMMENT |
| 1585 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/check-localisation.py | 762 | def scan_triple_quoted_literal(text: str, start: int): | CODE |
| LOW | scripts/check-localisation.py | 1099 | def build_string_returning_funcs(all_contents): | CODE |
| LOW | scripts/check-localisation.py | 1193 | def check_stringsdict_structure(target, lang, path, failures): | CODE |
| LOW | scripts/probe-tests/snapshot_checks.py | 261 | def connection_class_problems(body): | CODE |
| LOW⚡ | scripts/probe-tests/test_snapshot_checks.py | 117 | def test_withheld_summary_must_add_up(self): | CODE |
| LOW⚡ | scripts/probe-tests/test_snapshot_checks.py | 121 | def test_skipped_summary_must_add_up(self): | CODE |
| LOW⚡ | scripts/probe-tests/test_snapshot_checks.py | 126 | def test_skipped_connection_keeps_its_class_and_place(self): | CODE |
| LOW⚡ | scripts/probe-tests/test_snapshot_checks.py | 201 | def test_part_withheld_bytes_must_be_zero(self): | CODE |
| LOW⚡ | scripts/probe-tests/test_snapshot_checks.py | 205 | def test_part_withheld_range_in_bounds(self): | CODE |
| LOW⚡ | scripts/probe-tests/test_snapshot_checks.py | 213 | def test_small_probe_withheld_bytes_checked(self): | CODE |
| LOW⚡ | scripts/probe-tests/test_snapshot_checks.py | 323 | def test_reci_in_a_raw_bytes_field(self): | CODE |
| LOW⚡ | scripts/probe-tests/test_snapshot_checks.py | 330 | def test_short_identifier_gives_no_short_text(self): | CODE |
| LOW⚡ | scripts/probe-tests/test_snapshot_checks.py | 338 | def test_shared_bytes_not_dropped(self): | CODE |
| LOW⚡ | scripts/probe-tests/test_snapshot_checks.py | 409 | def test_skipped_entry_not_missing(self): | CODE |
| LOW⚡ | scripts/probe-tests/test_snapshot_checks.py | 417 | def test_skipped_connection_must_have_its_entry_and_links(self): | CODE |
| LOW⚡ | scripts/probe-tests/test_snapshot_checks.py | 426 | def test_skipped_hardware_is_a_problem(self): | CODE |
| LOW⚡ | scripts/probe-tests/test_snapshot_checks.py | 433 | def test_beneath_a_process_connection_is_recorded(self): | CODE |
| LOW⚡ | scripts/probe-tests/test_snapshot_checks.py | 553 | def test_accessories_beneath_user_clients_pass(self): | CODE |
| LOW⚡ | scripts/probe-tests/test_snapshot_checks.py | 560 | def test_connection_without_its_entry_is_an_island(self): | CODE |
| LOW⚡ | scripts/probe-tests/test_snapshot_checks.py | 569 | def test_nested_user_client_must_be_an_instance(self): | CODE |
| LOW⚡ | scripts/probe-tests/test_snapshot_checks.py | 575 | def test_virtual_hid_device_skipped_with_its_user_client(self): | CODE |
| LOW⚡ | scripts/probe-tests/test_snapshot_checks.py | 774 | def test_paired_bluetooth_kept_count(self): | CODE |
| LOW⚡ | scripts/probe-tests/test_snapshot_checks.py | 780 | def test_small_probe_skips_snapshot_only_checks(self): | CODE |
| LOW⚡ | scripts/probe-tests/test_snapshot_checks.py | 788 | def test_privacy_fails_on_a_broken_file(self): | CODE |
| LOW⚡ | scripts/probe-tests/test_snapshot_checks.py | 837 | def test_part_withheld_join_key(self): | CODE |
| LOW⚡ | scripts/probe-tests/test_snapshot_checks.py | 841 | def test_part_withheld_not_counted_as_kept(self): | CODE |
| LOW⚡ | scripts/probe-tests/test_snapshot_checks.py | 846 | def test_withheld_device_serial_flagged(self): | CODE |
| LOW⚡ | scripts/probe-tests/test_snapshot_checks.py | 859 | def test_attached_adapter_must_be_kept(self): | CODE |
| LOW⚡ | scripts/probe-tests/test_snapshot_checks.py | 867 | def test_withheld_volume_uuid_flagged(self): | CODE |
| LOW | scripts/probe-tests/test_snapshot_checks.py | 90 | def test_footer_step_is_required(self): | CODE |
| LOW | scripts/probe-tests/test_snapshot_checks.py | 139 | def test_connection_recorded_in_full_is_caught_by_its_class(self): | CODE |
| LOW | scripts/probe-tests/test_snapshot_checks.py | 163 | def test_process_id_left_in_the_output_is_caught(self): | CODE |
| LOW | scripts/probe-tests/test_snapshot_checks.py | 177 | def test_skipped_properties_must_add_up(self): | CODE |
| LOW | scripts/probe-tests/test_snapshot_checks.py | 184 | def test_every_entry_reachable_from_the_root(self): | CODE |
| LOW | scripts/probe-tests/test_snapshot_checks.py | 226 | def test_withheld_summary_required(self): | CODE |
| LOW | scripts/probe-tests/test_snapshot_checks.py | 231 | def test_link_parent_is_an_entry(self): | CODE |
| LOW | scripts/probe-tests/test_snapshot_checks.py | 261 | def test_bad_middle_line_is_not_a_cut(self): | CODE |
| LOW | scripts/probe-tests/test_snapshot_checks.py | 290 | def test_every_generated_form_found(self): | CODE |
| LOW | scripts/probe-tests/test_snapshot_checks.py | 299 | def test_known_encodings_found(self): | CODE |
| LOW | scripts/probe-tests/test_snapshot_checks.py | 363 | def test_each_probe_has_its_own_record_types(self): | CODE |
| LOW | scripts/probe-tests/test_snapshot_checks.py | 374 | def test_format_doc_lists_the_same_records(self): | CODE |
| LOW | scripts/probe-tests/test_snapshot_checks.py | 390 | def test_process_name_compared_without_its_pid(self): | CODE |
| LOW | scripts/probe-tests/test_snapshot_checks.py | 447 | def test_skipped_property_not_compared(self): | CODE |
| LOW | scripts/probe-tests/test_snapshot_checks.py | 455 | def test_part_withheld_compares_other_bytes(self): | CODE |
| LOW | scripts/probe-tests/test_snapshot_checks.py | 466 | def test_every_plane_compared(self): | CODE |
| LOW | scripts/probe-tests/test_snapshot_checks.py | 478 | def test_volatile_value_ignored(self): | CODE |
| LOW | scripts/probe-tests/test_snapshot_checks.py | 481 | def test_volatile_gpu_counters_ignored(self): | CODE |
| LOW | scripts/probe-tests/test_snapshot_checks.py | 496 | def test_missing_key_excused_only_when_it_holds_an_identifier(self): | CODE |
| LOW | scripts/probe-tests/test_snapshot_checks.py | 521 | def test_withheld_counted_not_failed(self): | CODE |
| LOW | scripts/probe-tests/test_snapshot_checks.py | 587 | def test_virtual_hid_device_missing(self): | CODE |
| LOW | scripts/probe-tests/test_snapshot_checks.py | 593 | def test_cross_plane_entry_keeps_its_service_link(self): | CODE |
| LOW | scripts/probe-tests/test_snapshot_checks.py | 665 | def test_reader_returns_every_instance_nested_included(self): | CODE |
| LOW | scripts/probe-tests/test_snapshot_checks.py | 685 | def test_reader_finds_connections_nested_below_the_root(self): | CODE |
| LOW | scripts/probe-tests/test_snapshot_checks.py | 694 | def test_vs_ioreg_does_not_trust_the_probe_skip_list(self): | CODE |
| LOW | scripts/probe-tests/test_snapshot_checks.py | 739 | def test_planted_in_raw_bytes_field(self): | CODE |
| LOW | scripts/probe-tests/test_snapshot_checks.py | 745 | def test_near_empty_address_matched_only_whole(self): | CODE |
| LOW | scripts/probe-tests/test_snapshot_checks.py | 760 | def test_identifier_not_read_is_a_problem(self): | CODE |
| LOW | scripts/probe-tests/test_snapshot_checks.py | 800 | def test_privacy_judges_a_capped_file_on_its_content(self): | CODE |
| LOW | scripts/probe-tests/test_snapshot_checks.py | 818 | def test_capped_snapshot_skips_the_live_kept_checks(self): | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/check-duplicate-readers.py | 275 | CODE | |
| LOW | scripts/check-duplicate-readers.py | 311 | CODE | |
| LOW | scripts/check-localisation.py | 641 | CODE | |
| LOW | scripts/check-localisation.py | 714 | CODE | |
| LOW | scripts/check-localisation.py | 762 | CODE | |
| LOW | scripts/check-localisation.py | 1193 | CODE | |
| LOW | scripts/check-localisation.py | 1270 | CODE | |
| LOW | scripts/edid-timings/extract-cta-vic.py | 94 | CODE | |
| LOW | scripts/edid-timings/check-edid-timings.py | 64 | CODE | |
| LOW | scripts/edid-timings/check-edid-timings.py | 82 | CODE | |
| LOW | scripts/probe-tests/snapshot_checks.py | 55 | CODE | |
| LOW | scripts/probe-tests/snapshot_checks.py | 235 | CODE | |
| LOW | scripts/probe-tests/snapshot_checks.py | 282 | CODE | |
| LOW | scripts/probe-tests/snapshot_checks.py | 344 | CODE | |
| LOW | scripts/probe-tests/snapshot_checks.py | 480 | CODE | |
| LOW | scripts/probe-tests/snapshot_checks.py | 584 | CODE | |
| LOW | scripts/probe-tests/snapshot_checks.py | 862 | CODE | |
| LOW | scripts/probe-tests/snapshot_checks.py | 956 | CODE | |
| LOW | scripts/probe-tests/snapshot_checks.py | 973 | CODE | |
| LOW | scripts/probe-tests/snapshot_checks.py | 240 | CODE | |
| LOW | scripts/probe-tests/snapshot_checks.py | 869 | CODE | |
| LOW | scripts/probe-tests/test_snapshot_checks.py | 694 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH⚡ | scripts/probe-tests/test_snapshot_checks.py | 107 | # 693): a complete footer has reason null and step null, whatever the | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | …eTests/ReferenceScenarios/JoeshawDaisyChainTests.swift | 27 | /// not sensitive to that field, so this test is robust to that | COMMENT |
| MEDIUM | Sources/WhatCable/Services/Installer.swift | 223 | // so the parse is robust to that (and to any future change in which | COMMENT |
| MEDIUM | …rces/WhatCableWidget/Cable/CableTimelineProvider.swift | 56 | /// discards the objects. This is simpler and more robust than keeping a | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/bump-formula.sh | 5 | # Usage: | COMMENT |
| LOW | scripts/bump-cask.sh | 4 | # Usage: | COMMENT |
| LOW | scripts/beta-release.sh | 4 | # Usage: | COMMENT |
| LOW | scripts/release.sh | 4 | # Usage: | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/edid-timings/extract-cta-vic.py | 43 | CODE | |
| LOW | scripts/edid-timings/check-edid-timings.py | 25 | CODE | |
| LOW | scripts/edid-timings/extract-dmt.py | 32 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …ces/WhatCableCore/Devices/ChainDeviceAttribution.swift | 197 | // Step 3: the controller's own record must carry a usable path and | COMMENT |
| LOW | …ces/WhatCableCore/Devices/ChainDeviceAttribution.swift | 225 | // Step 5: pick the deepest match. A candidate's path is always a | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …ces/WhatCableCore/Devices/ChainDeviceAttribution.swift | 197 | // Step 3: the controller's own record must carry a usable path and | COMMENT |
| LOW | …ces/WhatCableCore/Devices/ChainDeviceAttribution.swift | 225 | // Step 5: pick the deepest match. A candidate's path is always a | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/build-cable-db.swift | 705 | "Acme Ltd info@example.co.uk", "Acme Ltd"), | STRING |
| LOW⚡ | scripts/probe-tests/test_snapshot_checks.py | 855 | ids = sc.identifier_forms(users=["jdoe", "Jane Doe"]) | CODE |
| LOW⚡ | scripts/probe-tests/test_snapshot_checks.py | 856 | bad = wrap([entry(ROOT, [["Owner", {"t": "str", "v": "Jane Doe's Mac"}]])]) | CODE |
| LOW | scripts/probe-tests/test_snapshot_checks.py | 271 | "homes": ["/Users/jdoe"], "users": ["jdoe", "Jane Doe"]} | CODE |