An open source cross-platform USB stack for embedded system
This report summarizes scanner evidence for hathach/tinyusb, a C project with 7,191 GitHub stars. SynthScan examined 381,009 lines of code across 1683 source files, recording 4674 pattern matches distributed across 20 syntactic categories. The legacy adjusted pattern signal is 11.9 (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? 4512 finding(s).
Are imports declared and package/API names verified? 26 finding(s).
Are wrappers, guards, and repeated structures necessary? 1557 finding(s).
Which changes need focused human review? 4674 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 4674 distinct pattern matches across 20 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 | .pre-commit-config.yaml | 61 | # (~45s: deliberate hang and timeout simulations) and is scoped to the rig harness | COMMENT |
| LOW | .pre-commit-config.yaml | 121 | - id: membrowse-targets | COMMENT |
| LOW | .pre-commit-config.yaml | 141 | # make -C $h all | COMMENT |
| LOW | tools/change_impact.py | 101 | # .github/actions/**, .github/scripts/** - those decide what gets built. The line is | COMMENT |
| LOW | tools/change_impact.py | 141 | # matrix as rule 2c. No rig board runs them. | COMMENT |
| LOW | tools/change_impact.py | 381 | node.targets[0].id in _DEPS_DICTS and isinstance(node.value, ast.Dict)): | COMMENT |
| LOW | tools/change_impact.py | 521 | if m and m.group(1) and m.group(1) != cls: | COMMENT |
| LOW | tools/rtt.py | 561 | # the convoy hil_flash.valid_vid_pid exists to stop | COMMENT |
| LOW | hw/bsp/ansi_escape.h | 41 | COMMENT | |
| LOW | hw/bsp/ansi_escape.h | 61 | /** @} */ | COMMENT |
| LOW | hw/bsp/ansi_escape.h | 81 | #define ANSI_BG_RED CSI_SGR(41) | COMMENT |
| LOW | hw/bsp/board.c | 21 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN | COMMENT |
| LOW | hw/bsp/board_api.h | 41 | COMMENT | |
| LOW | hw/bsp/board_api.h | 61 | #include "task.h" | COMMENT |
| LOW | hw/bsp/stm32wba/stm32wbaxx_hal_conf.h | 41 | // #define HAL_CRYP_MODULE_ENABLED | COMMENT |
| LOW | hw/bsp/stm32wba/stm32wbaxx_hal_conf.h | 61 | // #define HAL_RTC_MODULE_ENABLED | COMMENT |
| LOW | hw/bsp/stm32wba/stm32wbaxx_hal_conf.h | 101 | #endif /* LSI_VALUE */ /*!< Value of the Internal Low Speed oscillator in Hz | COMMENT |
| LOW | hw/bsp/stm32wba/stm32wbaxx_hal_conf.h | 161 | #define USE_HAL_ADC_REGISTER_CALLBACKS 0U /* ADC register callback disabled */ | COMMENT |
| LOW | hw/bsp/stm32wba/stm32wbaxx_hal_conf.h | 201 | COMMENT | |
| LOW | hw/bsp/stm32wba/stm32wbaxx_hal_conf.h | 221 | COMMENT | |
| LOW | hw/bsp/stm32wba/stm32wbaxx_hal_conf.h | 241 | COMMENT | |
| LOW | hw/bsp/stm32wba/stm32wbaxx_hal_conf.h | 261 | COMMENT | |
| LOW | hw/bsp/stm32wba/stm32wbaxx_hal_conf.h | 281 | COMMENT | |
| LOW | hw/bsp/stm32wba/stm32wbaxx_hal_conf.h | 301 | COMMENT | |
| LOW | hw/bsp/stm32wba/stm32wbaxx_hal_conf.h | 321 | COMMENT | |
| LOW | hw/bsp/stm32wba/boards/stm32wba_nucleo/board.h | 41 | #define LED_PIN GPIO_PIN_8 | COMMENT |
| LOW | hw/bsp/stm32wba/boards/stm32wba_nucleo/board.h | 61 | // These pints are only used for USB and must be in analog mode when not used. | COMMENT |
| LOW | hw/bsp/stm32wba/FreeRTOSConfig/FreeRTOSConfig.h | 41 | * | COMMENT |
| LOW | hw/bsp/stm32wba/FreeRTOSConfig/FreeRTOSConfig.h | 61 | #define configUSE_PORT_OPTIMISED_TASK_SELECTION 0 | COMMENT |
| LOW | hw/bsp/stm32wba/FreeRTOSConfig/FreeRTOSConfig.h | 81 | #define configSUPPORT_DYNAMIC_ALLOCATION 0 | COMMENT |
| LOW | hw/bsp/stm32wba/FreeRTOSConfig/FreeRTOSConfig.h | 101 | #define configUSE_TIMERS 1 | COMMENT |
| LOW | hw/bsp/stm32wba/FreeRTOSConfig/FreeRTOSConfig.h | 121 | #define INCLUDE_xEventGroupSetBitFromISR 0 | COMMENT |
| LOW | hw/bsp/msp432e4/FreeRTOSConfig/FreeRTOSConfig.h | 41 | * | COMMENT |
| LOW | hw/bsp/msp432e4/FreeRTOSConfig/FreeRTOSConfig.h | 61 | #define configMINIMAL_STACK_SIZE ( 128 ) | COMMENT |
| LOW | hw/bsp/msp432e4/FreeRTOSConfig/FreeRTOSConfig.h | 81 | #define configUSE_TICK_HOOK 0 | COMMENT |
| LOW | hw/bsp/msp432e4/FreeRTOSConfig/FreeRTOSConfig.h | 101 | COMMENT | |
| LOW | hw/bsp/mm32/boards/mm32f327x_mb39/board.h | 1 | /* metadata: | COMMENT |
| LOW | hw/bsp/mm32/boards/mm32f327x_mb39/board.h | 21 | #define UART_TX_PIN 9 | COMMENT |
| LOW | hw/bsp/mm32/FreeRTOSConfig/FreeRTOSConfig.h | 41 | * | COMMENT |
| LOW | hw/bsp/mm32/FreeRTOSConfig/FreeRTOSConfig.h | 61 | #define configMAX_PRIORITIES ( 5 ) | COMMENT |
| LOW | hw/bsp/mm32/FreeRTOSConfig/FreeRTOSConfig.h | 81 | #define configUSE_IDLE_HOOK 0 | COMMENT |
| LOW | hw/bsp/mm32/FreeRTOSConfig/FreeRTOSConfig.h | 101 | #define configTIMER_TASK_STACK_DEPTH configMINIMAL_STACK_SIZE | COMMENT |
| LOW | hw/bsp/rp2040/family.c | 41 | COMMENT | |
| LOW | hw/bsp/rp2040/family.c | 61 | #endif | COMMENT |
| LOW | hw/bsp/rp2040/family.c | 81 | //--------------------------------------------------------------------+ | COMMENT |
| LOW | hw/bsp/rp2040/family.c | 161 | #if defined(TRACE_ETM) && defined(PICO_RP2350) && PICO_RP2350 == 1 | COMMENT |
| LOW | hw/bsp/rp2040/family.c | 201 | #if (CFG_TUH_ENABLED && CFG_TUH_RPI_PIO_USB) || (CFG_TUD_ENABLED && CFG_TUD_RPI_PIO_USB) | COMMENT |
| LOW | hw/bsp/rp2040/family.c | 241 | stdio_rtt_init(); | COMMENT |
| LOW | hw/bsp/rp2040/boards/raspberry_pi_pico_w/board.h | 41 | //--------------------------------------------------------------------+ | COMMENT |
| LOW | hw/bsp/rp2040/boards/raspberry_pi_pico_w/board.h | 61 | #define MAX3421_MISO_PIN PICO_DEFAULT_SPI_RX_PIN | COMMENT |
| LOW | hw/bsp/rp2040/boards/feather_rp2040_max3421/board.h | 41 | #define PICO_DEFAULT_PIO_USB_VBUSEN_PIN 18 | COMMENT |
| LOW | hw/bsp/rp2040/boards/raspberry_pi_pico/board.h | 41 | //--------------------------------------------------------------------+ | COMMENT |
| LOW | hw/bsp/rp2040/boards/raspberry_pi_pico/board.h | 61 | #define MAX3421_MISO_PIN PICO_DEFAULT_SPI_RX_PIN | COMMENT |
| LOW | …0/boards/adafruit_metro_rp2350/adafruit_metro_rp2350.h | 21 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN | COMMENT |
| LOW | …0/boards/adafruit_metro_rp2350/adafruit_metro_rp2350.h | 41 | #endif | COMMENT |
| LOW | …0/boards/adafruit_metro_rp2350/adafruit_metro_rp2350.h | 61 | #ifndef PICO_DEFAULT_LED_PIN | COMMENT |
| LOW | …0/boards/adafruit_metro_rp2350/adafruit_metro_rp2350.h | 81 | #ifndef PICO_DEFAULT_SPI | COMMENT |
| LOW | …0/boards/adafruit_metro_rp2350/adafruit_metro_rp2350.h | 101 | #endif | COMMENT |
| LOW | hw/bsp/rp2040/boards/adafruit_metro_rp2350/board.h | 41 | //--------------------------------------------------------------------+ | COMMENT |
| LOW | …/rp2040/boards/adafruit_fruit_jam/adafruit_fruit_jam.h | 21 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN | COMMENT |
| 2887 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tools/build.py | 140 | def resolve_example_target_groups(build_targets, examples, board, extra_defines=()): | CODE |
| LOW | tools/change_impact.py | 404 | def get_deps_changed_families(base_text: str, head_text: str, repo_root: str): | CODE |
| LOW | tools/change_impact.py | 959 | def selection_args_by_flasher(sel, rosters): | CODE |
| LOW | tools/code_size.py | 284 | def _shortened_object_sources(build_dir): | CODE |
| LOW⚡ | test/hil/hil_test.py | 541 | def test_dual_host_info_to_device_cdc(board): | CODE |
| LOW⚡ | test/hil/hil_test.py | 835 | def test_host_msc_file_explorer_freertos(board): | CODE |
| LOW⚡ | test/hil/hil_test.py | 846 | def test_device_cdc_dual_ports(board): | CODE |
| LOW | test/hil/hil_test.py | 752 | def test_host_msc_file_explorer(board): | CODE |
| LOW | test/hil/hil_test.py | 914 | def test_device_cdc_msc_freertos(board): | CODE |
| LOW | test/hil/hil_test.py | 944 | def test_device_cdc_msc_throughput(board): | CODE |
| LOW | test/hil/hil_test.py | 1107 | def test_device_hid_boot_interface(board): | CODE |
| LOW | test/hil/hil_test.py | 1122 | def test_device_hid_composite_freertos(id): | CODE |
| LOW | test/hil/hil_test.py | 1127 | def test_device_printer_to_cdc(board): | CODE |
| LOW | test/hil/hil_test.py | 1304 | def test_device_net_lwip_webserver(board): | CODE |
| LOW | test/hil/hil_test.py | 1437 | def test_device_audio_test_freertos(board): | CODE |
| LOW | test/hil/hil_test.py | 1515 | def test_device_hid_generic_inout(board): | CODE |
| LOW | test/hil/hil_test.py | 1958 | def register_usbtest_if_selected(boards: list, report_dir: Path, fresh: bool) -> None: | CODE |
| LOW | test/hil/mtp_raw.py | 337 | def case_oversized_send_object(m): | CODE |
| LOW | test/hil/mtp_raw.py | 379 | def _start_partial_send_object(m): | CODE |
| LOW⚡ | test/hil/mtp_raw.py | 408 | def case_cancel_mid_send_object(m): | CODE |
| LOW⚡ | test/hil/mtp_raw.py | 416 | def case_device_reset_mid_send_object(m): | CODE |
| LOW⚡ | test/hil/mtp_raw.py | 426 | def case_short_send_object_retry(m): | CODE |
| LOW⚡ | test/hil/mtp_raw.py | 433 | def case_object_info_replacement(m): | CODE |
| LOW⚡ | test/hil/mtp_raw.py | 443 | def case_device_reset_undrained_in(m): | CODE |
| LOW⚡ | test/hil/test/test_change_impact.py | 135 | def test_host_change_drops_device(self): | CODE |
| LOW⚡ | test/hil/test/test_change_impact.py | 143 | def test_cdc_device_selects_cdc_examples_only(self): | CODE |
| LOW⚡ | test/hil/test/test_change_impact.py | 153 | def test_msc_host_selects_host_side(self): | CODE |
| LOW⚡ | test/hil/test/test_change_impact.py | 188 | def test_audio_header_reaches_boards_that_skip_audio(self): | CODE |
| LOW⚡ | test/hil/test/test_change_impact.py | 196 | def test_edge_keeps_the_including_files_own_macro(self): | CODE |
| LOW⚡ | test/hil/test/test_change_impact.py | 203 | def test_edge_is_per_header_not_per_class(self): | CODE |
| LOW⚡ | test/hil/test/test_change_impact.py | 214 | def test_unknown_tool_is_full(self): | CODE |
| LOW⚡ | test/hil/test/test_change_impact.py | 218 | def test_docs_only_is_empty_not_full(self): | CODE |
| LOW⚡ | test/hil/test/test_change_impact.py | 223 | def test_bsp_family_selects_family_boards(self): | CODE |
| LOW⚡ | test/hil/test/test_change_impact.py | 230 | def test_bsp_board_narrows_to_board(self): | CODE |
| LOW⚡ | test/hil/test/test_change_impact.py | 235 | def test_example_change_selects_that_example(self): | CODE |
| LOW⚡ | test/hil/test/test_change_impact.py | 244 | def test_board_test_example_is_full(self): | CODE |
| LOW⚡ | test/hil/test/test_change_impact.py | 316 | def test_args_all_board_gets_bare_b(self): | CODE |
| LOW⚡ | test/hil/test/test_change_impact.py | 322 | def test_args_by_flasher_splits_esp_from_the_rest(self): | CODE |
| LOW⚡ | test/hil/test/test_change_impact.py | 329 | def test_args_by_flasher_omits_a_flasher_with_no_selected_board(self): | CODE |
| LOW⚡ | test/hil/test/test_change_impact.py | 335 | def test_args_by_flasher_full_is_empty(self): | CODE |
| LOW⚡ | test/hil/test/test_change_impact.py | 399 | def test_option_selects_via_defines_and_flags(self): | CODE |
| LOW⚡ | test/hil/test/test_change_impact.py | 406 | def test_device_role_port_does_not_pull_host_only_option_board(self): | CODE |
| LOW⚡ | test/hil/test/test_change_impact.py | 412 | def test_gates_parsed_from_family_support(self): | CODE |
| LOW⚡ | test/hil/test/test_change_impact.py | 416 | def test_board_cmake_option_counts(self): | CODE |
| LOW⚡ | test/hil/test/test_change_impact.py | 452 | def test_make_only_family_is_not_a_family(self): | CODE |
| LOW⚡ | test/hil/test/test_change_impact.py | 456 | def test_prefix_port_does_not_inherit_sibling_families(self): | CODE |
| LOW⚡ | test/hil/test/test_change_impact.py | 460 | def test_make_only_port_contributes_nothing(self): | CODE |
| LOW⚡ | test/hil/test/test_change_impact.py | 466 | def test_cmake_families_still_found(self): | CODE |
| LOW⚡ | test/hil/test/test_change_impact.py | 591 | def test_off_rig_port_still_reports_family(self): | CODE |
| LOW⚡ | test/hil/test/test_change_impact.py | 597 | def test_port_families_are_reported(self): | CODE |
| LOW⚡ | test/hil/test/test_change_impact.py | 601 | def test_bsp_family_and_board_report_family(self): | CODE |
| LOW⚡ | test/hil/test/test_change_impact.py | 606 | def test_docs_only_has_no_families(self): | CODE |
| LOW⚡ | test/hil/test/test_change_impact.py | 609 | def test_full_selection_still_reports_families(self): | CODE |
| LOW⚡ | test/hil/test/test_change_impact.py | 664 | def test_vid_pid_flag_precedes_args(self): | CODE |
| LOW⚡ | test/hil/test/test_change_impact.py | 670 | def test_rescue_cfg_command_keeps_vid_pid_before_init(self): | CODE |
| LOW⚡ | test/hil/test/test_change_impact.py | 679 | def test_vid_pid_multiple_pairs(self): | CODE |
| LOW⚡ | test/hil/test/test_change_impact.py | 684 | def test_no_field_no_flag_but_warns(self): | CODE |
| LOW⚡ | test/hil/test/test_change_impact.py | 754 | def test_every_flasher_resolves_to_its_flash(self): | CODE |
| LOW⚡ | test/hil/test/test_change_impact.py | 760 | def test_the_raw_roster_name_is_case_folded(self): | CODE |
| LOW⚡ | test/hil/test/test_change_impact.py | 764 | def test_an_unknown_flasher_raises(self): | CODE |
| 1357 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tools/build.py | 36 | # ----------------------------- | COMMENT |
| MEDIUM | tools/build.py | 38 | # ----------------------------- | COMMENT |
| MEDIUM | tools/build.py | 192 | # ----------------------------- | COMMENT |
| MEDIUM | tools/build.py | 194 | # ----------------------------- | COMMENT |
| MEDIUM⚡ | tools/build.py | 346 | # ----------------------------- | COMMENT |
| MEDIUM⚡ | tools/build.py | 348 | # ----------------------------- | COMMENT |
| MEDIUM | tools/build.py | 402 | # ----------------------------- | COMMENT |
| MEDIUM | tools/build.py | 404 | # ----------------------------- | COMMENT |
| MEDIUM | tools/build.py | 501 | # ----------------------------- | COMMENT |
| MEDIUM | tools/build.py | 503 | # ----------------------------- | COMMENT |
| MEDIUM | tools/change_impact.py | 1206 | # ------------------------------------------------------------- | COMMENT |
| MEDIUM | tools/change_impact.py | 1209 | # ------------------------------------------------------------- | COMMENT |
| MEDIUM | test/unit-test/project.yml | 1 | # ========================================================================= | COMMENT |
| MEDIUM | test/unit-test/project.yml | 6 | # ========================================================================= | COMMENT |
| MEDIUM | test/hil/pymtp.py | 43 | # ---------- | COMMENT |
| MEDIUM | test/hil/pymtp.py | 45 | # ---------- | COMMENT |
| MEDIUM⚡ | test/hil/pymtp.py | 91 | # ---------- | COMMENT |
| MEDIUM⚡ | test/hil/pymtp.py | 93 | # ---------- | COMMENT |
| MEDIUM⚡ | test/hil/pymtp.py | 95 | # ---------- | COMMENT |
| MEDIUM⚡ | test/hil/pymtp.py | 97 | # ---------- | COMMENT |
| MEDIUM⚡ | test/hil/pymtp.py | 399 | # ---------- | COMMENT |
| MEDIUM⚡ | test/hil/pymtp.py | 401 | # ---------- | COMMENT |
| MEDIUM⚡ | test/hil/pymtp.py | 403 | # ---------- | COMMENT |
| MEDIUM⚡ | test/hil/pymtp.py | 405 | # ---------- | COMMENT |
| MEDIUM | test/hil/pymtp.py | 432 | # ---------- | COMMENT |
| MEDIUM | test/hil/pymtp.py | 434 | # ---------- | COMMENT |
| MEDIUM | test/hil/hil_flash.py | 32 | # ------------------------------------------------------------- | COMMENT |
| MEDIUM | test/hil/hil_flash.py | 34 | # ------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | test/hil/hil_test.py | 538 | # ------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | test/hil/hil_test.py | 540 | # ------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | test/hil/hil_test.py | 839 | # ------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | test/hil/hil_test.py | 841 | # ------------------------------------------------------------- | COMMENT |
| MEDIUM | test/hil/hil_test.py | 583 | # ------------------------------------------------------------- | COMMENT |
| MEDIUM | test/hil/hil_test.py | 585 | # ------------------------------------------------------------- | COMMENT |
| MEDIUM | test/hil/hil_test.py | 1693 | # ------------------------------------------------------------- | COMMENT |
| MEDIUM | test/hil/hil_test.py | 1695 | # ------------------------------------------------------------- | COMMENT |
| MEDIUM | test/hil/helper/hil_util.py | 22 | # ------------------------------------------------------------- | COMMENT |
| MEDIUM | test/hil/helper/hil_util.py | 26 | # ------------------------------------------------------------- | COMMENT |
| MEDIUM | .github/workflows/pr_comment.yml | 46 | # --------------------------------------- | COMMENT |
| MEDIUM | .github/workflows/pr_comment.yml | 51 | # --------------------------------------- | COMMENT |
| MEDIUM | .github/workflows/pr_comment.yml | 115 | # --------------------------------------- | COMMENT |
| MEDIUM | .github/workflows/pr_comment.yml | 120 | # --------------------------------------- | COMMENT |
| MEDIUM | .github/workflows/build.yml | 285 | # ------------------------------------------------------------------------------ | COMMENT |
| MEDIUM | .github/workflows/build.yml | 293 | # ------------------------------------------------------------------------------ | COMMENT |
| MEDIUM | .github/workflows/build.yml | 331 | # --------------------------------------- | COMMENT |
| MEDIUM | .github/workflows/build.yml | 333 | # --------------------------------------- | COMMENT |
| MEDIUM | .github/workflows/build.yml | 350 | # --------------------------------------- | COMMENT |
| MEDIUM | .github/workflows/build.yml | 352 | # --------------------------------------- | COMMENT |
| MEDIUM | .github/workflows/build.yml | 374 | # --------------------------------------- | COMMENT |
| MEDIUM | .github/workflows/build.yml | 377 | # --------------------------------------- | COMMENT |
| MEDIUM | .github/workflows/build.yml | 458 | # --------------------------------------- | COMMENT |
| MEDIUM | .github/workflows/build.yml | 461 | # --------------------------------------- | COMMENT |
| MEDIUM | .github/workflows/build.yml | 568 | # --------------------------------------- | COMMENT |
| MEDIUM | .github/workflows/build.yml | 573 | # --------------------------------------- | COMMENT |
| MEDIUM | .github/workflows/build.yml | 655 | # --------------------------------------- | COMMENT |
| MEDIUM | .github/workflows/build.yml | 659 | # --------------------------------------- | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | tools/change_impact.py | 343 | except OSError: | CODE |
| HIGH | tools/rtt.py | 826 | except KeyboardInterrupt: | CODE |
| HIGH | tools/rtt.py | 202 | except subprocess.TimeoutExpired: | CODE |
| HIGH | test/hil/mtp_test.py | 60 | except OSError: | CODE |
| HIGH | test/hil/mtp_test.py | 139 | except subprocess.TimeoutExpired: | CODE |
| HIGH | test/hil/mtp_test.py | 181 | except Exception: | CODE |
| HIGH | test/hil/hil_test.py | 1014 | except OSError: | CODE |
| HIGH | test/hil/hil_test.py | 1064 | except OSError: | CODE |
| HIGH | test/hil/hil_test.py | 522 | except OSError: # read_sysfs swallows its own OSError/ValueError; glob can race | CODE |
| HIGH | test/hil/hil_test.py | 1476 | except OSError: | CODE |
| HIGH | test/hil/usbtest.py | 345 | except (OSError, ValueError): | CODE |
| HIGH | test/hil/usbtest.py | 152 | except OSError: | CODE |
| HIGH | test/hil/usbtest.py | 489 | except OSError: | CODE |
| HIGH | test/hil/usbtest.py | 161 | except OSError: | CODE |
| HIGH | test/hil/usbtest.py | 508 | except subprocess.TimeoutExpired: | CODE |
| HIGH | test/hil/test/test_hil_bounded.py | 102 | except (OSError, ValueError): | CODE |
| HIGH | test/hil/pyocd/run_pyocd.py | 59 | except ImportError: | CODE |
| HIGH | test/hil/helper/hil_lock.py | 61 | except OSError: | CODE |
| HIGH | test/hil/helper/hil_lock.py | 243 | except ProcessLookupError: | CODE |
| HIGH | test/hil/helper/hil_lock.py | 190 | except OSError: | CODE |
| HIGH | test/hil/helper/hil_pool_check.py | 345 | except serial.SerialTimeoutException: | CODE |
| HIGH | test/hil/helper/hil_report.py | 250 | except (OSError, ValueError, TypeError, AttributeError): | CODE |
| HIGH | test/hil/helper/hil_util.py | 383 | except OSError: | CODE |
| HIGH | test/hil/helper/hil_util.py | 221 | except OSError: | CODE |
| HIGH | test/hil/helper/hil_util.py | 242 | except (OSError, ValueError): | CODE |
| HIGH | test/hil/helper/hil_util.py | 394 | except OSError: | CODE |
| HIGH | test/hil/helper/hil_util.py | 258 | except OSError: | CODE |
| HIGH | test/hil/helper/hil_util.py | 516 | except OSError: | CODE |
| HIGH | test/hil/helper/hil_util.py | 558 | except OSError: | CODE |
| HIGH | .claude/test/test_usbtest_run_case.py | 487 | except ProcessLookupError: | CODE |
| HIGH | .claude/skills/usbtest/scripts/run_case.py | 104 | except OSError: | CODE |
| HIGH | .claude/skills/usbtest/scripts/wedge_drill.py | 92 | except ProcessLookupError: | CODE |
| HIGH | examples/device/usbtmc/visaQuery.py | 144 | except pyvisa.VisaIOError: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tools/membrowse_cli.py | 46 | CODE | |
| LOW | tools/build.py | 77 | CODE | |
| LOW | tools/build.py | 97 | CODE | |
| LOW | tools/build.py | 223 | CODE | |
| LOW | tools/iar_gen.py | 8 | CODE | |
| LOW | tools/change_impact.py | 244 | CODE | |
| LOW | tools/change_impact.py | 404 | CODE | |
| LOW | tools/change_impact.py | 944 | CODE | |
| LOW | tools/change_impact.py | 959 | CODE | |
| LOW | tools/change_impact.py | 1443 | CODE | |
| LOW | tools/get_deps.py | 408 | CODE | |
| LOW | tools/build_utils.py | 157 | CODE | |
| LOW | tools/family_json.py | 155 | CODE | |
| LOW | tools/family_json.py | 306 | CODE | |
| LOW | tools/family_json.py | 356 | CODE | |
| LOW | tools/rtt.py | 178 | CODE | |
| LOW | tools/rtt.py | 667 | CODE | |
| LOW | tools/rtt.py | 275 | CODE | |
| LOW | tools/rtt.py | 315 | CODE | |
| LOW | tools/rtt.py | 422 | CODE | |
| LOW | tools/code_size.py | 201 | CODE | |
| LOW | tools/code_size.py | 219 | CODE | |
| LOW | tools/code_size.py | 258 | CODE | |
| LOW | tools/code_size.py | 284 | CODE | |
| LOW | tools/code_size.py | 928 | CODE | |
| LOW | tools/code_size.py | 973 | CODE | |
| LOW | tools/code_size.py | 1218 | CODE | |
| LOW | tools/code_size.py | 1370 | CODE | |
| LOW | tools/code_size.py | 1419 | CODE | |
| LOW | tools/code_size.py | 1707 | CODE | |
| LOW | tools/code_size.py | 1858 | CODE | |
| LOW | tools/code_size.py | 2072 | CODE | |
| LOW | hw/mcu/sony/cxd56/tools/flash_writer.py | 143 | CODE | |
| LOW | hw/mcu/sony/cxd56/tools/flash_writer.py | 237 | CODE | |
| LOW | hw/mcu/sony/cxd56/tools/xmodem.py | 211 | CODE | |
| LOW | hw/mcu/sony/cxd56/tools/xmodem.py | 370 | CODE | |
| LOW | test/hil/teardown_stress.py | 75 | CODE | |
| LOW | test/hil/pymtp.py | 465 | CODE | |
| LOW | test/hil/pymtp.py | 824 | CODE | |
| LOW | test/hil/pymtp.py | 1163 | CODE | |
| LOW | test/hil/mtp_test.py | 144 | CODE | |
| LOW | test/hil/hil_flash.py | 411 | CODE | |
| LOW | test/hil/hil_test.py | 586 | CODE | |
| LOW | test/hil/hil_test.py | 638 | CODE | |
| LOW | test/hil/hil_test.py | 664 | CODE | |
| LOW | test/hil/hil_test.py | 752 | CODE | |
| LOW | test/hil/hil_test.py | 1635 | CODE | |
| LOW | test/hil/hil_test.py | 1721 | CODE | |
| LOW | test/hil/hil_test.py | 1973 | CODE | |
| LOW | test/hil/usbtest.py | 129 | CODE | |
| LOW | test/hil/usbtest.py | 360 | CODE | |
| LOW | test/hil/usbtest.py | 457 | CODE | |
| LOW | test/hil/usbtest.py | 554 | CODE | |
| LOW | test/hil/usbtest.py | 667 | CODE | |
| LOW | test/hil/test/test_change_impact.py | 956 | CODE | |
| LOW | test/hil/test/test_change_impact.py | 1167 | CODE | |
| LOW | test/hil/test/test_change_impact.py | 1493 | CODE | |
| LOW | test/hil/test/test_change_impact.py | 1778 | CODE | |
| LOW | test/hil/test/test_change_impact.py | 2449 | CODE | |
| LOW | test/hil/test/test_change_impact.py | 3062 | CODE | |
| 30 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | .pre-commit-config.yaml | 61 | # (~45s: deliberate hang and timeout simulations) and is scoped to the rig harness | COMMENT |
| MEDIUM | tools/change_impact.py | 118 | # test/hil/test/ holds the harness's own unit tests, not the harness: nothing on | COMMENT |
| MEDIUM | tools/change_impact.py | 121 | # The harness itself stays under _FULL_RE's test/hil/ prefix. | COMMENT |
| MEDIUM | tools/change_impact.py | 151 | # tools/rtt.py is part of the harness, not a standalone tool: hil_util imports it | COMMENT |
| MEDIUM | tools/rtt.py | 129 | # whole-call deadline for write() — same env knob as the harness's serial twin | COMMENT |
| MEDIUM | tools/rtt.py | 317 | # stream exactly like an orderly EOF. Raising here raced the harness's | COMMENT |
| MEDIUM | test/hil/mtp_test.py | 6 | # something the harness can abandon: hil_test.test_device_mtp runs it under | COMMENT |
| MEDIUM | test/hil/mtp_test.py | 8 | # pymtp: nothing here may pull in the harness. | COMMENT |
| MEDIUM | test/hil/hil_test.py | 310 | # RTT route is validated manually on native probes but has no harness backend | COMMENT |
| MEDIUM | test/hil/hil_test.py | 354 | # drain-stopped meaning as the serial timeout -- a test failure, not a harness | COMMENT |
| MEDIUM | test/hil/hil_test.py | 357 | # harness bug must not be reported as this board misbehaving. | COMMENT |
| MEDIUM | test/hil/hil_test.py | 1284 | # the only thing the harness can walk away from. | COMMENT |
| MEDIUM | test/hil/usbtest.py | 485 | # writable, so sudo is the exception, and the harness must never sudo-kill a pid | COMMENT |
| MEDIUM | test/hil/mtp_raw.py | 6 | # pyusb still import this module); nothing here may pull in the harness. | COMMENT |
| MEDIUM⚡ | test/hil/test/test_code_size.py | 2656 | for changed in (False, True): # e.g. a HIL-harness-only PR selects no pinned leg | CODE |
| MEDIUM⚡ | test/hil/test/test_hil_rtt.py | 25 | # unstaged rig tree kills every harness import | COMMENT |
| MEDIUM | test/hil/helper/hil_util.py | 3 | # Bottom layer of the HIL harness: the bounded command runner plus the shared helpers and | COMMENT |
| MEDIUM⚡ | test/hil/helper/hil_util.py | 448 | # stdlib-only, harness-critical — see its module docstring). Loaded by file path so | COMMENT |
| MEDIUM⚡ | test/hil/helper/hil_util.py | 450 | # harness keeps addressing hil_util.JlinkRtt. | COMMENT |
| MEDIUM⚡ | test/hil/helper/hil_util.py | 456 | # as a harness bug, when the actual problem is an incompletely staged tree | COMMENT |
| MEDIUM | test/hil/helper/hil_util.py | 526 | # root child does not. Abandon it; the harness never | COMMENT |
| LOW | test/hil/helper/hil_util.py | 579 | # just use id: mostly for cp210x/ftdi flasher | COMMENT |
| MEDIUM | .claude/skills/hil/scripts/hil_remote.py | 47 | # the harness's import closure and requires each file here, so keep this a plain literal. | COMMENT |
| MEDIUM | .claude/skills/hil/scripts/hil_remote.py | 480 | # the harness and roster staged beside the firmware are HEAD's only on a clean tree | STRING |
| MEDIUM | .claude/skills/hil/scripts/hil_remote.py | 536 | # the harness and roster went from the live checkout, which may have moved since the receipt check | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tools/code_size.py | 1444 | print(f'Error: CI base unavailable: {e} (--base-source local builds it)') | CODE |
| MEDIUM | tools/code_size.py | 1467 | print(f'Error creating worktree: {ret.stderr}') | CODE |
| MEDIUM | tools/code_size.py | 1637 | print(f'Error removing worktree {worktree_dir}: {ret.stderr.strip()}') | CODE |
| LOW | tools/code_size.py | 1689 | except Exception: | CODE |
| LOW | hw/mcu/sony/cxd56/tools/flash_writer.py | 223 | except Exception as e: | CODE |
| LOW | hw/mcu/sony/cxd56/tools/flash_writer.py | 308 | except Exception as e: | CODE |
| LOW | test/hil/mtp_test.py | 173 | except Exception as e: | CODE |
| LOW | test/hil/mtp_test.py | 181 | except Exception: | CODE |
| MEDIUM | test/hil/mtp_test.py | 57 | def _read(): | CODE |
| LOW | test/hil/hil_test.py | 1789 | except Exception as e: | CODE |
| LOW | test/hil/hil_test.py | 1825 | except Exception as e: | CODE |
| LOW | test/hil/hil_test.py | 2264 | except Exception as werr: # noqa: BLE001 - it mkdir()s and open()s the very report dir | CODE |
| LOW | test/hil/hil_test.py | 2277 | except Exception as rerr: # noqa: BLE001 - the caller's raise must still happen | CODE |
| LOW | test/hil/hil_test.py | 2285 | except Exception as re2: # noqa: BLE001 | CODE |
| LOW | test/hil/hil_test.py | 2499 | except Exception as e: | CODE |
| LOW | test/hil/hil_test.py | 2521 | except Exception as e: | CODE |
| LOW | test/hil/usbtest.py | 570 | except Exception as e: # malformed/short json, import failure, unknown flasher | CODE |
| LOW | test/hil/usbtest.py | 598 | except Exception as e: | CODE |
| LOW | test/hil/usbtest.py | 652 | except Exception as e: # the reap check below is the verdict either way | CODE |
| MEDIUM | test/hil/usbtest.py | 418 | def set_pattern(value): | CODE |
| LOW | test/hil/mtp_raw.py | 481 | except Exception: | CODE |
| LOW | test/hil/mtp_raw.py | 500 | except Exception as e: | CODE |
| MEDIUM | test/hil/mtp_raw.py | 286 | def expect_stall(fn): | CODE |
| MEDIUM | test/hil/test/test_hil_bounded.py | 65 | def wrapper(): | CODE |
| LOW⚡ | test/hil/test/test_hil_bounded.py | 768 | except Exception as e: # noqa: BLE001 - the test inspects it | CODE |
| LOW⚡ | test/hil/test/test_hil_bounded.py | 1386 | except Exception as e: # noqa: BLE001 - the verdict raises; tests assert the latch | CODE |
| LOW | test/hil/helper/hil_pool_check.py | 292 | except Exception as e: | CODE |
| LOW | test/hil/helper/hil_pool_check.py | 324 | except Exception as e: | CODE |
| LOW | test/hil/helper/hil_pool_check.py | 542 | except Exception as e: | CODE |
| LOW | test/hil/helper/hil_report.py | 380 | except Exception as e: # noqa: BLE001 | CODE |
| LOW | test/hil/helper/hil_report.py | 392 | except Exception as e2: # noqa: BLE001 | CODE |
| MEDIUM⚡ | .claude/test/test_usbtest_wedge_drill.py | 500 | ret, took = self.fake_openocd('print("Error: no device found", flush=True)\nsys.exit(1)\n', 10) | CODE |
| LOW | .claude/skills/usbtest/scripts/run_case.py | 225 | except Exception as e: # a raising flasher is a failed flash, not a crash holding the lock | CODE |
| LOW | .claude/skills/usbtest/scripts/run_case.py | 346 | except Exception as e: # any failure after the lock still ends with a verdict line | CODE |
| MEDIUM | .claude/skills/usbtest/scripts/run_case.py | 222 | def flash(board, fw): | CODE |
| LOW | .claude/skills/usbtest/scripts/wedge_drill.py | 279 | except Exception as e: | CODE |
| LOW | .claude/skills/usbtest/scripts/wedge_drill.py | 490 | except Exception as e: | CODE |
| LOW | docs/superpowers/plans/2026-08-21-hil-report-module.md | 482 | except Exception as e: # noqa: BLE001 | CODE |
| LOW | docs/superpowers/plans/2026-09-08-codex-delegation.md | 207 | except Exception as e: # any failure prints nothing to stdout | CODE |
| LOW | .github/scripts/ci_set_matrix.py | 145 | except Exception as e: | CODE |
| LOW | .github/scripts/ci_set_matrix.py | 295 | except Exception as e: # fail-open: an unusable selection must never turn into a red job | CODE |
| LOW | .github/scripts/hil_ci_set_matrix.py | 48 | except Exception as e: # fail-open: an unusable selection must never red the job | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | tools/family_json.py | 462 | """Drop rows of boards or families that are gone, set NULL_BOARDS' rows to null, | STRING |
| HIGH⚡ | test/hil/test/test_ci_metrics.py | 136 | "needs.set-matrix.outputs.membrowse_identical || needs.set-matrix.outputs.membrowse_all }}", job) | CODE |
| HIGH⚡ | test/hil/test/test_membrowse_cli.py | 47 | r'main.c.obj -o device\cdc_msc\cdc_msc.elf lib/libboard.a && C:\Windows\system32\cmd.exe /C ' | CODE |
| HIGH⚡ | test/hil/test/test_membrowse_cli.py | 48 | r'"cd /D D:\a\out && C:\gcc\bin\arm-none-eabi-objcopy.exe -Obinary D:/a/out/cdc_msc.elf ' | CODE |
| HIGH | test/hil/test/test_family_json.py | 373 | 'a Make-only board with a cmake row is set to null, not skipped') | STRING |
| HIGH⚡ | .claude/test/test_coverage_audit.py | 60 | ' | lib/libboard.a\n || cmake_object_order_depends_target_x\n' | STRING |
| HIGH⚡ | .claude/test/test_hil_remote.py | 386 | fake(self.bin / 'ssh', FAKE_SSH.replace("['sh', '-c', cmd]", "['sh', '-c', cmd.replace('cat >/dev/null', 'cat >/ | STRING |
| HIGH | .claude/skills/hil/scripts/hil_remote.py | 244 | f'[ "$(cat {shlex.quote(remote_dir + "/.hil-remote-run")} 2>/dev/null)" = {shlex.quote(token)} ]') | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | examples/device/audio_test/src/plot_audio_samples.py | 0 | pick a windows input device index from query_devices() output. | STRING |
| HIGH | …s/device/audio_4_channel_mic/src/plot_audio_samples.py | 0 | pick a windows input device index from query_devices() output. | STRING |
| HIGH | …s/device/audio_test_freertos/src/plot_audio_samples.py | 0 | pick a windows input device index from query_devices() output. | STRING |
| HIGH | …device/audio_test_multi_rate/src/plot_audio_samples.py | 0 | pick a windows input device index from query_devices() output. | STRING |
| HIGH | …audio_4_channel_mic_freertos/src/plot_audio_samples.py | 0 | pick a windows input device index from query_devices() output. | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | src/portable/synopsys/dwc2/dwc2_nrf.h | 50 | // Step 1: Power up core only (PHY not yet) | COMMENT |
| LOW⚡ | src/portable/synopsys/dwc2/dwc2_nrf.h | 53 | // Step 2: Override ID=Device (bit 31), and temporarily override VBUSVALID | COMMENT |
| LOW⚡ | src/portable/synopsys/dwc2/dwc2_nrf.h | 57 | // Step 3: Release PHY power-on reset by enabling PHY | COMMENT |
| LOW⚡ | src/portable/synopsys/dwc2/dwc2_nrf.h | 60 | // Step 4: Wait 45us for PHY clock to start | COMMENT |
| LOW⚡ | src/portable/synopsys/dwc2/dwc2_nrf.h | 63 | // Step 5: Release DWC2 reset | COMMENT |
| LOW⚡ | src/portable/synopsys/dwc2/dwc2_nrf.h | 66 | // Step 6: Wait for clock to start to avoid hang on too early register read | COMMENT |
| LOW⚡ | src/portable/synopsys/dwc2/dwc2_nrf.h | 69 | // Step 7: Clear VBUSVALID override (keep ID=Device override) | COMMENT |
| LOW | src/class/cdc/cdc_host.h | 83 | // NOTE: This function does not make any USB transfer request to device. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tools/file2carray.py | 3 | CODE | |
| LOW | tools/file2carray.py | 6 | CODE | |
| LOW | tools/file2carray.py | 7 | CODE | |
| LOW | tools/file2carray.py | 8 | CODE | |
| LOW | tools/file2carray.py | 9 | CODE | |
| LOW | tools/file2carray.py | 10 | CODE | |
| LOW | hw/mcu/sony/cxd56/tools/flash_writer.py | 36 | CODE | |
| LOW | hw/mcu/sony/cxd56/tools/flash_writer.py | 37 | CODE | |
| LOW | hw/mcu/sony/cxd56/tools/flash_writer.py | 38 | CODE | |
| LOW | hw/mcu/sony/cxd56/tools/flash_writer.py | 42 | CODE | |
| LOW | hw/mcu/sony/cxd56/tools/xmodem.py | 576 | CODE | |
| LOW | test/hil/hil_flash.py | 10 | CODE | |
| LOW | test/hil/test/test_hil_tty_raw.py | 16 | CODE | |
| LOW | test/hil/helper/hil_util.py | 9 | CODE | |
| LOW | .claude/test/test_release.py | 6 | CODE | |
| LOW | examples/device/audio_test/src/plot_audio_samples.py | 6 | CODE | |
| LOW | …device/audio_test_multi_rate/src/plot_audio_samples.py | 6 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | src/portable/synopsys/dwc2/dwc2_nrf.h | 50 | // Step 1: Power up core only (PHY not yet) | COMMENT |
| LOW⚡ | src/portable/synopsys/dwc2/dwc2_nrf.h | 53 | // Step 2: Override ID=Device (bit 31), and temporarily override VBUSVALID | COMMENT |
| LOW⚡ | src/portable/synopsys/dwc2/dwc2_nrf.h | 57 | // Step 3: Release PHY power-on reset by enabling PHY | COMMENT |
| LOW⚡ | src/portable/synopsys/dwc2/dwc2_nrf.h | 60 | // Step 4: Wait 45us for PHY clock to start | COMMENT |
| LOW⚡ | src/portable/synopsys/dwc2/dwc2_nrf.h | 63 | // Step 5: Release DWC2 reset | COMMENT |
| LOW⚡ | src/portable/synopsys/dwc2/dwc2_nrf.h | 66 | // Step 6: Wait for clock to start to avoid hang on too early register read | COMMENT |
| LOW⚡ | src/portable/synopsys/dwc2/dwc2_nrf.h | 69 | // Step 7: Clear VBUSVALID override (keep ID=Device override) | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL⚡ | .claude/test/test_build.py | 754 | self.assertIn('hw/mcu/nordic/nrfx', [d for d, e in build.tools_build.build_utils.get_deps.deps_optional.items() | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | examples/device/uac2_speaker_fb/src/audio_debug.py | 40 | # This function is called periodically from FuncAnimation | COMMENT |
| MEDIUM | src/portable/synopsys/dwc2/dwc2_info.py | 172 | # Create an empty list to hold the dictionaries | COMMENT |
| MEDIUM | src/portable/synopsys/dwc2/dwc2_info.py | 202 | # Create a Pandas DataFrame from the list of dictionaries | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | tools/build.py | 350 | # Check if board is skipped. Make semantics: family.mk decides, not the | COMMENT |
| LOW | tools/get_deps.py | 379 | # Check if commit is already fetched | STRING |
| LOW | test/hil/pymtp.py | 1185 | # Check if this ID exists, if not, add it | COMMENT |
| LOW | test/hil/pymtp.py | 1228 | ## Check if this folder is in the dict | COMMENT |
| LOW | .github/workflows/build.yml | 16 | # Check if the code changes and we need to run ci build | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | docs/superpowers/plans/2026-07-09-smoke-results.md | 1 | # Smoke Test Results — multi-agent dev/test harness | COMMENT |
| MEDIUM | docs/superpowers/plans/2026-08-18-claude-doc-audit.md | 48 | ### Task 1: Ledger schema and the anti-hallucination validator | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | tools/build.py | 432 | Get list of boards for a family. Args: family: Family name one_random: If True, return only one ran | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | test/hil/hil_flash.py | 159 | CODE | |
| LOW | test/hil/hil_flash.py | 315 | CODE | |
| LOW | test/hil/hil_flash.py | 326 | CODE | |
| LOW | test/hil/test/test_code_size.py | 3089 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | src/portable/st/stm32_fsdev/hcd_stm32_fsdev.c | 438 | // TODO: Handle error | COMMENT |
| LOW | src/osal/osal_rtx4.h | 104 | // TODO: implement | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | .claude/skills/hil/scripts/hil_remote.py | 136 | def helper(name): | STRING |