Record and Replay Framework
This report summarizes scanner evidence for rr-debugger/rr, a C++ project with 10,701 GitHub stars. SynthScan examined 120,896 lines of code across 1171 source files, recording 498 pattern matches distributed across 12 syntactic categories. The legacy adjusted pattern signal is 4.4 (Low pattern signal); it is not an authorship estimate.
Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.
Use each vector to guide manual verification of the underlying findings.
Can maintainers explain intent, assumptions, and trade-offs? 264 finding(s).
Are imports declared and package/API names verified? 202 finding(s).
Are wrappers, guards, and repeated structures necessary? 49 finding(s).
Which changes need focused human review? 498 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 498 distinct pattern matches across 12 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 | CMakeLists.txt | 121 | set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${FLAGS_COMMON} -Wstrict-prototypes -std=gnu11") | COMMENT |
| LOW | scripts/rr-collect-symbols.py | 21 | # structure (e.g. as Ubuntu and Fedora create under /usr/lib/debug), searches | COMMENT |
| LOW | third-party/blake2/blake2-impl.h | 21 | #if !defined(__cplusplus) && (!defined(__STDC_VERSION__) || __STDC_VERSION__ < 199901L) | COMMENT |
| LOW | third-party/blake2/sse/blake2b-load-sse2.h | 21 | #define LOAD_MSG_0_4(b0, b1) b0 = _mm_set_epi64x(m11, m9); b1 = _mm_set_epi64x(m15, m13) | COMMENT |
| LOW | third-party/blake2/sse/blake2b-load-sse2.h | 41 | #define LOAD_MSG_5_4(b0, b1) b0 = _mm_set_epi64x(m5, m13); b1 = _mm_set_epi64x(m9, m14) | COMMENT |
| LOW | third-party/blake2/sse/blake2b-load-sse2.h | 61 | #define LOAD_MSG_10_4(b0, b1) b0 = _mm_set_epi64x(m11, m9); b1 = _mm_set_epi64x(m15, m13) | COMMENT |
| LOW | third-party/blake2/sse/blake2b.c | 21 | #include "../blake2-impl.h" | COMMENT |
| LOW | third-party/blake2/sse/blake2-config.h | 21 | #endif | COMMENT |
| LOW | third-party/blake2/sse/blake2-config.h | 41 | #ifndef HAVE_AVX | COMMENT |
| LOW | third-party/blake2/sse/blake2-config.h | 61 | #endif | COMMENT |
| LOW | third-party/brotli/include/brotli/port.h | 21 | #define BROTLI_GNUC_VERSION \ | COMMENT |
| LOW | third-party/brotli/include/brotli/port.h | 41 | BROTLI_MAKE_VERSION((_MSC_FULL_VER / 1000000), \ | COMMENT |
| LOW | third-party/brotli/include/brotli/port.h | 61 | COMMENT | |
| LOW | third-party/brotli/include/brotli/port.h | 81 | #define BROTLI_PGI_VERSION \ | COMMENT |
| LOW | third-party/brotli/include/brotli/port.h | 121 | #endif | COMMENT |
| LOW | third-party/brotli/include/brotli/port.h | 141 | COMMENT | |
| LOW | third-party/brotli/include/brotli/port.h | 161 | #if defined(__TI_COMPILER_VERSION__) | COMMENT |
| LOW | third-party/brotli/include/brotli/port.h | 181 | #else | COMMENT |
| LOW | third-party/brotli/include/brotli/port.h | 201 | #else | COMMENT |
| LOW | third-party/brotli/include/brotli/port.h | 221 | #if defined(__has_feature) | COMMENT |
| LOW | third-party/brotli/include/brotli/port.h | 261 | !defined(__STDC_NO_VLA__) && !defined(__cplusplus) && \ | COMMENT |
| LOW | third-party/brotli/include/brotli/port.h | 281 | #define BROTLI_DEC_API __declspec(dllimport) | COMMENT |
| LOW | third-party/brotli/include/brotli/port.h | 301 | #else | COMMENT |
| LOW | third-party/brotli/enc/hash_longest_match_quickly_inc.h | 261 | #undef BUCKET_SWEEP_MASK | COMMENT |
| LOW | third-party/brotli/enc/encode.c | 21 | #include "backward_references_hq.h" | COMMENT |
| LOW | third-party/brotli/enc/encoder_dict.c | 1 | /* Copyright 2017 Google Inc. All Rights Reserved. | COMMENT |
| LOW | third-party/brotli/enc/cluster.c | 41 | #define FN(X) X ## Literal | COMMENT |
| LOW | third-party/brotli/enc/backward_references.c | 61 | #include "backward_references_inc.h" | COMMENT |
| LOW | third-party/brotli/enc/backward_references.c | 81 | #include "backward_references_inc.h" | COMMENT |
| LOW | third-party/brotli/enc/backward_references.c | 101 | #include "backward_references_inc.h" | COMMENT |
| LOW | third-party/brotli/enc/backward_references.c | 121 | #define PREFIX() D | COMMENT |
| LOW | third-party/brotli/enc/backward_references.c | 141 | /* NOLINTNEXTLINE(build/include) */ | COMMENT |
| LOW | third-party/brotli/enc/histogram.h | 21 | COMMENT | |
| LOW | third-party/brotli/enc/memory.h | 21 | COMMENT | |
| LOW | third-party/brotli/enc/bit_cost.c | 21 | COMMENT | |
| LOW | third-party/brotli/enc/hash.h | 241 | COMMENT | |
| LOW | third-party/brotli/enc/hash.h | 261 | COMMENT | |
| LOW | third-party/brotli/enc/hash.h | 281 | #define HASHER() H4 | COMMENT |
| LOW | third-party/brotli/enc/hash.h | 301 | COMMENT | |
| LOW | third-party/brotli/enc/hash.h | 321 | #define HASHER() H42 | COMMENT |
| LOW | third-party/brotli/enc/hash.h | 341 | COMMENT | |
| LOW | third-party/brotli/enc/hash.h | 361 | #undef HASHER | COMMENT |
| LOW | third-party/brotli/enc/hash.h | 381 | #define HASHER_B HROLLING | COMMENT |
| LOW | third-party/brotli/common/version.h | 41 | #endif | COMMENT |
| LOW | third-party/brotli/common/constants.h | 21 | #define BROTLI_CONTEXT_MAP_MAX_RLE 16 | COMMENT |
| LOW | third-party/brotli/common/platform.h | 21 | * BROTLI_ENABLE_DUMP overrides default "dump" behaviour | COMMENT |
| LOW | third-party/brotli/common/platform.h | 101 | (BROTLI_SUNPRO_VERSION_CHECK(5, 14, 0) && defined(__cplusplus)) | COMMENT |
| LOW | third-party/brotli/common/platform.h | 121 | COMMENT | |
| LOW | third-party/brotli/common/platform.h | 141 | BROTLI_INTEL_VERSION_CHECK(16, 0, 0) || \ | COMMENT |
| LOW | third-party/brotli/common/platform.h | 161 | COMMENT | |
| LOW | third-party/brotli/common/platform.h | 181 | defined(__aarch64__) || defined(__ARM64_ARCH_8__) | COMMENT |
| LOW | third-party/brotli/common/platform.h | 201 | #define BROTLI_TARGET_X64 | COMMENT |
| LOW | third-party/brotli/common/platform.h | 221 | #define BROTLI_TARGET_64_BITS 0 | COMMENT |
| LOW | third-party/brotli/common/platform.h | 241 | #define BROTLI_LITTLE_ENDIAN 1 | COMMENT |
| LOW | third-party/brotli/common/platform.h | 261 | #endif | COMMENT |
| LOW | third-party/brotli/common/platform.h | 401 | #define BROTLI_HAS_UBFX (!!0) | COMMENT |
| LOW | third-party/brotli/common/platform.h | 441 | __asm__("rbit %0, %1\n" : "=r"(output) : "r"(input)); | COMMENT |
| LOW | third-party/brotli/common/platform.h | 461 | BROTLI_MIN_MAX(double) BROTLI_MIN_MAX(float) BROTLI_MIN_MAX(int) | COMMENT |
| LOW | third-party/brotli/dec/decode.c | 1 | /* Copyright 2013 Google Inc. All Rights Reserved. | COMMENT |
| LOW | third-party/brotli/dec/decode.c | 21 | #include "prefix.h" | COMMENT |
| 176 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/zen_workaround.py | 8 | CODE | |
| LOW | scripts/zen_workaround.py | 10 | CODE | |
| LOW | scripts/rr-gdb-script-host.py | 7 | CODE | |
| LOW | scripts/rr-gdb-script-host.py | 8 | CODE | |
| LOW | src/assembly_templates.py | 2 | CODE | |
| LOW | src/test/rseq_cpu_id_reset_longrunning.py | 1 | CODE | |
| LOW | src/test/rseq_cpu_id_reset_longrunning.py | 2 | CODE | |
| LOW | src/test/signal_checkpoint.py | 1 | CODE | |
| LOW | src/test/hbreak.py | 1 | CODE | |
| LOW | src/test/hbreak.py | 2 | CODE | |
| LOW | src/test/parent_no_stop_child_crash.py | 1 | CODE | |
| LOW | src/test/reverse_finish.py | 1 | CODE | |
| LOW | src/test/checkpoint_dying_threads.py | 1 | CODE | |
| LOW | src/test/ptrace_remote_unmap.py | 1 | CODE | |
| LOW | src/test/sanity.py | 1 | CODE | |
| LOW | src/test/mmap_fd_reuse_checkpoint.py | 1 | CODE | |
| LOW | src/test/mprotect_step.py | 1 | CODE | |
| LOW | src/test/watchpoint_syscall.py | 1 | CODE | |
| LOW | src/test/restart_abnormal_exit.py | 1 | CODE | |
| LOW | src/test/watchpoint_unaligned2.py | 1 | CODE | |
| LOW | src/test/info_recording.py | 1 | CODE | |
| LOW | src/test/reverse_step_threads_break.py | 1 | CODE | |
| LOW | src/test/alternate_thread_diversion.py | 1 | CODE | |
| LOW | src/test/madvise_dontfork.py | 1 | CODE | |
| LOW | src/test/dead_thread_target.py | 1 | CODE | |
| LOW | src/test/reverse_step_threads2.py | 1 | CODE | |
| LOW | src/test/invalid_interpreter.py | 1 | CODE | |
| LOW | src/test/subprocess_exit_ends_session.py | 3 | CODE | |
| LOW | src/test/restart_invalid_checkpoint.py | 1 | CODE | |
| LOW | src/test/read_bad_mem.py | 1 | CODE | |
| LOW | src/test/term_rr.py | 1 | CODE | |
| LOW | src/test/reverse_step_threads.py | 1 | CODE | |
| LOW | src/test/call_exit.py | 2 | CODE | |
| LOW | src/test/breakpoint_conditions.py | 1 | CODE | |
| LOW | src/test/reverse_step_long.py | 1 | CODE | |
| LOW | src/test/gdb_bogus_breakpoint.py | 1 | CODE | |
| LOW | src/test/conditional_breakpoint_calls.py | 1 | CODE | |
| LOW | src/test/conditional_breakpoint_calls.py | 2 | CODE | |
| LOW | src/test/mmap_shared_prot.py | 1 | CODE | |
| LOW | src/test/comm.py | 1 | CODE | |
| LOW | src/test/comm.py | 2 | CODE | |
| LOW | src/test/seekticks.py | 1 | CODE | |
| LOW | src/test/unicode.py | 1 | CODE | |
| LOW | src/test/breakpoint_overlap.py | 4 | CODE | |
| LOW | src/test/vfork_break_parent.py | 1 | CODE | |
| LOW | src/test/exec_stop.py | 1 | CODE | |
| LOW | src/test/reverse_continue_breakpoint.py | 1 | CODE | |
| LOW | src/test/reverse_continue_start.py | 1 | CODE | |
| LOW | src/test/reverse_continue_start.py | 2 | CODE | |
| LOW | src/test/util.py | 1 | CODE | |
| LOW | src/test/simple_winch.py | 1 | CODE | |
| LOW | src/test/shared_persistent_file.py | 1 | CODE | |
| LOW | src/test/shared_persistent_file.py | 2 | CODE | |
| LOW | src/test/break_int3.py | 1 | CODE | |
| LOW | src/test/reverse_step_signal.py | 1 | CODE | |
| LOW | src/test/reverse_step_signal.py | 2 | CODE | |
| LOW | src/test/interrupt.py | 1 | CODE | |
| LOW | src/test/siginfo.py | 1 | CODE | |
| LOW | src/test/siginfo.py | 2 | CODE | |
| LOW | src/test/goto_event.py | 2 | CODE | |
| 139 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | src/test/util.py | 43 | except Exception as e: | CODE |
| LOW⚡ | src/test/util.py | 234 | except Exception as e: | CODE |
| LOW⚡ | src/test/util.py | 244 | except Exception as e: | CODE |
| LOW⚡ | src/test/util.py | 250 | except Exception as e: | CODE |
| LOW | src/test/util.py | 274 | except Exception as e: | CODE |
| MEDIUM | src/test/util.py | 40 | def interrupt_debugger(): | CODE |
| MEDIUM | src/test/util.py | 241 | def expect(prog, what): | CODE |
| MEDIUM | src/test/util.py | 247 | def send(prog, what): | CODE |
| LOW | src/test/x86/util.py | 43 | except Exception as e: | CODE |
| LOW⚡ | src/test/x86/util.py | 234 | except Exception as e: | CODE |
| LOW⚡ | src/test/x86/util.py | 244 | except Exception as e: | CODE |
| LOW⚡ | src/test/x86/util.py | 250 | except Exception as e: | CODE |
| LOW | src/test/x86/util.py | 274 | except Exception as e: | CODE |
| MEDIUM | src/test/x86/util.py | 40 | def interrupt_debugger(): | CODE |
| MEDIUM | src/test/x86/util.py | 241 | def expect(prog, what): | CODE |
| MEDIUM | src/test/x86/util.py | 247 | def send(prog, what): | CODE |
| LOW | src/test/arm/util.py | 43 | except Exception as e: | CODE |
| LOW⚡ | src/test/arm/util.py | 234 | except Exception as e: | CODE |
| LOW⚡ | src/test/arm/util.py | 244 | except Exception as e: | CODE |
| LOW⚡ | src/test/arm/util.py | 250 | except Exception as e: | CODE |
| LOW | src/test/arm/util.py | 274 | except Exception as e: | CODE |
| MEDIUM | src/test/arm/util.py | 40 | def interrupt_debugger(): | CODE |
| MEDIUM | src/test/arm/util.py | 241 | def expect(prog, what): | CODE |
| MEDIUM | src/test/arm/util.py | 247 | def send(prog, what): | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH⚡ | src/generate_syscalls.py | 99 | return syscallno >= 0 && syscallno == X86Arch::${syscall}; | CODE |
| HIGH⚡ | src/generate_syscalls.py | 101 | return syscallno >= 0 && syscallno == X64Arch::${syscall}; | CODE |
| HIGH⚡ | src/generate_syscalls.py | 103 | return syscallno >= 0 && syscallno == ARM64Arch::${syscall}; | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/zen_workaround.py | 133 | # effectively will reset the bit we just set if it wasn't already set at boot time. | COMMENT |
| MEDIUM⚡ | src/syscalls.py | 1489 | # The robust futex implementation needs to maintain per-thread lists | COMMENT |
| MEDIUM⚡ | src/syscalls.py | 1490 | # of robust futexes which are unlocked when the thread exits. These | COMMENT |
| MEDIUM⚡ | src/syscalls.py | 1494 | # set_robust_list sets the head of the list of robust futexes owned | COMMENT |
| MEDIUM | src/test/futex_restart_race.c | 7 | // Essentially the key ingredients that need to happen are: | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/checkpoint-visualizer.html | 18 | function countCheckpointsAtOrAfter(start) { | CODE |
| LOW | scripts/checkpoint-visualizer.html | 28 | function removeLastCheckpointInRange(x1, x2) { | CODE |
| LOW | scripts/rr-collect-symbols.py | 75 | def find_altref_for_trace_file(trace_file, altref): | CODE |
| LOW | src/generate_syscalls.py | 31 | def write_syscall_enum_for_tests(f, arch): | CODE |
| LOW | src/generate_syscalls.py | 65 | def write_syscall_record_cases(f): | CODE |
| LOW | src/generate_syscalls.py | 130 | def write_syscall_helper_functions(f): | STRING |
| LOW | src/generate_syscalls.py | 140 | def write_check_syscall_numbers(f): | STRING |
| LOW | src/assembly_templates.py | 248 | def generate_substitute_chunk(s, chunk, byte_array, offset): | CODE |
| LOW | src/assembly_templates.py | 265 | def generate_substitute_method(byte_array, template): | CODE |
| LOW | src/assembly_templates.py | 280 | def generate_field_end_methods(byte_array, template): | CODE |
| LOW | src/test/parent_no_stop_child_crash.py | 3 | def observe_normal_parent_exit(): | CODE |
| LOW | src/test/subprocess_exit_ends_session.py | 8 | def observe_child_crash_and_exit(): | CODE |
| LOW | src/test/util.py | 97 | def watchpoint_at_address_fail(address, size): | CODE |
| LOW | src/test/parent_no_break_child_bkpt.py | 3 | def observe_normal_parent_exit(): | CODE |
| LOW | src/test/x86/util.py | 97 | def watchpoint_at_address_fail(address, size): | CODE |
| LOW | src/test/arm/util.py | 97 | def watchpoint_at_address_fail(address, size): | CODE |
| LOW | src/preload/tweak_librrpage.py | 39 | def seek_nth_section_sh_offset(f, shtable, e_shentsize, n, offset): | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | scripts/rr-collect-symbols.py | 102 | except: | CODE |
| HIGH | scripts/rr-collect-symbols.py | 111 | except: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | CMakeLists.txt | 991 | ##-------------------------------------------------- | COMMENT |
| MEDIUM | CMakeLists.txt | 2237 | ##-------------------------------------------------- | COMMENT |
| MEDIUM | src/test/util.sh | 223 | ##-------------------------------------------------- | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | .buildkite/Manifest.toml | 1 | # This file is machine-generated - editing it directly is not advised | COMMENT |
| MEDIUM | src/test/util.sh | 2 | # This file is included by foo.run test-driver files. It provides | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/rr-collect-symbols.py | 115 | CODE | |
| LOW | scripts/rr-collect-symbols.py | 170 | CODE | |
| LOW | release-process/prepare-release.py | 94 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | src/test/util.py | 3 | __all__ = [ 'expect_rr', 'expect_list', 'expect_debugger', | CODE |
| LOW | src/test/x86/util.py | 3 | __all__ = [ 'expect_rr', 'expect_list', 'expect_debugger', | CODE |
| LOW | src/test/arm/util.py | 3 | __all__ = [ 'expect_rr', 'expect_list', 'expect_debugger', | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | src/test/util.sh | 169 | # Set options to find rr and resource files in the expected places. | COMMENT |