DORA (Dataflow-Oriented Robotic Architecture) is middleware designed to streamline and simplify the creation of AI-based robotic applications. It offers low latency, composable, and distributed dataflow capabilities. Applications are modeled as directed graphs, also referred to as pipelines.
This report summarizes scanner evidence for dora-rs/dora, a Rust project with 4,000 GitHub stars. SynthScan examined 291,326 lines of code across 1139 source files, recording 1683 pattern matches distributed across 17 syntactic categories. The legacy adjusted pattern signal is 7.3 (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? 1457 finding(s).
Are imports declared and package/API names verified? 36 finding(s).
Are wrappers, guards, and repeated structures necessary? 298 finding(s).
Which changes need focused human review? 1683 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 1683 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 |
|---|---|---|---|---|
| LOW | _typos.toml | 41 | # Scoped allow: GitHub user name "YOR-robot" appears in the downstream-user | COMMENT |
| LOW | Cargo.toml | 141 | dora-ros2-bridge-python = { path = "libraries/extensions/ros2-bridge/python" } | COMMENT |
| LOW | Cargo.toml | 341 | [profile.release] | COMMENT |
| LOW | Cargo.toml | 361 | # This cannot be upgraded away: mio 0.6.23 (2019) is the last 0.6.x, and | COMMENT |
| LOW | docker-compose.ros2dev.yml | 1 | # ROS2-bridge dev environment for macOS — issue #1170, Phase 0. | COMMENT |
| LOW | docker-compose.ros2dev.yml | 21 | environment: | COMMENT |
| LOW | docker/slim/smoke.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | apis/c++/node/src/lib.rs | 61 | /// of downstream inputs that will stop receiving data. | COMMENT |
| LOW | apis/c++/node/src/lib.rs | 101 | /// Terminal outcome of a pattern-aware wait | COMMENT |
| LOW | apis/c++/node/src/lib.rs | 121 | /// The event stream ended (dataflow stopping) before the reply | COMMENT |
| LOW | apis/c++/node/src/lib.rs | 201 | COMMENT | |
| LOW | apis/c++/node/src/lib.rs | 221 | /// arrive after this point. | COMMENT |
| LOW | apis/c++/node/src/lib.rs | 241 | fn event_as_node_restarted(event: Box<DoraEvent>) -> Result<String>; | COMMENT |
| LOW | apis/c++/node/src/lib.rs | 341 | /// Block until the response carrying `request_id` arrives from | COMMENT |
| LOW | apis/c++/node/src/lib.rs | 501 | /// / timed out — which is why this does not go through | COMMENT |
| LOW | apis/c++/node/src/lib.rs | 1161 | /// The node, shared between the main thread's [`OutputSender`] and every | COMMENT |
| LOW | apis/c++/node/src/lib.rs | 1181 | /// `SharedNode` is `Send + Sync` (`DoraNode: Send`), so C++ can move one | COMMENT |
| LOW | apis/c++/operator/src/lib.rs | 61 | ) -> DoraOnInputResult; | COMMENT |
| LOW | apis/python/cli/src/lib.rs | 1 | use eyre::Context; | COMMENT |
| LOW | apis/python/cli/src/lib.rs | 61 | run.execute() | COMMENT |
| LOW | apis/python/node/src/lib.rs | 41 | // a previous panic poisoned the LazyLock. | COMMENT |
| LOW | apis/python/node/src/lib.rs | 81 | } | COMMENT |
| LOW | apis/python/node/src/lib.rs | 221 | /// ``` | COMMENT |
| LOW | apis/python/node/src/lib.rs | 261 | /// | COMMENT |
| LOW | apis/python/node/src/lib.rs | 321 | /// It will return an Error if the timeout is reached. | COMMENT |
| LOW | apis/python/node/src/lib.rs | 361 | /// match event["type"]: | COMMENT |
| LOW | apis/python/node/src/lib.rs | 381 | /// match event["id"]: | COMMENT |
| LOW | apis/python/node/src/lib.rs | 421 | Ok(()) | COMMENT |
| LOW | apis/python/node/src/lib.rs | 441 | /// ``Float32Array``, etc. directly via this path) is a follow-up — the | COMMENT |
| LOW | apis/python/node/src/lib.rs | 461 | /// mv = sample.as_memoryview() | COMMENT |
| LOW | apis/python/node/src/lib.rs | 481 | let data_id = parse_output_id(&output_id)?; | COMMENT |
| LOW | apis/python/node/src/lib.rs | 601 | /// Shorthand for ``node.log("error", message)``. | COMMENT |
| LOW | apis/python/node/src/lib.rs | 621 | /// Log an info message. | COMMENT |
| LOW | apis/python/node/src/lib.rs | 641 | } | COMMENT |
| LOW | apis/python/node/src/lib.rs | 681 | /// | COMMENT |
| LOW | apis/python/node/src/lib.rs | 741 | self.with_pool(|pool| pool.read_tensor_pool(tensor_pool_id, py)) | COMMENT |
| LOW | apis/python/node/src/lib.rs | 761 | /// | COMMENT |
| LOW | apis/python/node/src/lib.rs | 801 | ) -> eyre::Result<Option<Py<PyBytes>>> { | COMMENT |
| LOW | apis/python/node/src/lib.rs | 821 | /// poll this wherever the extension next runs. | COMMENT |
| LOW | apis/python/node/src/lib.rs | 841 | /// | COMMENT |
| LOW | apis/python/node/src/lib.rs | 881 | let py_datetime = | COMMENT |
| LOW | apis/python/node/src/lib.rs | 981 | COMMENT | |
| LOW | apis/python/node/src/lib.rs | 1261 | } | COMMENT |
| LOW | apis/python/node/src/lib.rs | 1341 | // `classify_write_path`, `check_capacity_gpu_pool`) is tested in | COMMENT |
| LOW | apis/python/node/src/sample_handler.rs | 1 | //! Zero-copy send via Python's buffer protocol. | COMMENT |
| LOW | apis/python/node/src/sample_handler.rs | 21 | //! any `memoryview` derived from it) keep the underlying allocation alive even | COMMENT |
| LOW | apis/python/node/src/sample_handler.rs | 61 | COMMENT | |
| LOW | apis/python/node/src/sample_handler.rs | 101 | // --------------------------------------------------------------------------- | COMMENT |
| LOW | apis/python/node/src/sample_handler.rs | 121 | /// mv = memoryview(buf) # writable memoryview | COMMENT |
| LOW | apis/python/node/src/sample_handler.rs | 141 | // by default, but it is safe to share across threads in our specific usage: | COMMENT |
| LOW | apis/python/node/src/sample_handler.rs | 161 | #[cfg(Py_3_11)] | COMMENT |
| LOW | apis/python/node/src/sample_handler.rs | 241 | COMMENT | |
| LOW | apis/python/node/src/sample_handler.rs | 261 | COMMENT | |
| LOW | apis/python/node/src/sample_handler.rs | 281 | /// memoryview(buf)[:] = my_bytes # or: numpy / struct / ... | COMMENT |
| LOW | apis/python/node/src/sample_handler.rs | 361 | // --------------------------------------------------------------------------- | COMMENT |
| LOW | apis/python/node/src/sample_handler.rs | 421 | .map_err(|e| eyre::eyre!("failed to send sample: {e}"))?; | COMMENT |
| LOW | apis/python/node/src/sample_handler.rs | 481 | len, | COMMENT |
| LOW | apis/python/node/src/sample_handler.rs | 501 | /// sample = node.send_output_raw("out", 1024) | COMMENT |
| LOW | apis/python/node/src/sample_handler.rs | 521 | /// | COMMENT |
| LOW | apis/python/node/src/sample_handler.rs | 541 | /// Exit the context manager. | COMMENT |
| 1149 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM⚡ | guide/translate.py | 147 | # ============================================= | COMMENT |
| MEDIUM⚡ | guide/translate.py | 149 | # ============================================= | COMMENT |
| MEDIUM⚡ | guide/translate.py | 638 | # ============================================= | COMMENT |
| MEDIUM⚡ | guide/translate.py | 640 | # ============================================= | COMMENT |
| MEDIUM⚡ | guide/translate.py | 648 | # ============================================= | COMMENT |
| MEDIUM⚡ | guide/translate.py | 650 | # ============================================= | COMMENT |
| MEDIUM⚡ | guide/translate.py | 657 | # ============================================= | COMMENT |
| MEDIUM⚡ | guide/translate.py | 659 | # ============================================= | COMMENT |
| MEDIUM⚡ | guide/translate.py | 695 | # ============================================= | COMMENT |
| MEDIUM⚡ | guide/translate.py | 697 | # ============================================= | COMMENT |
| MEDIUM⚡ | guide/translate.py | 707 | # ============================================= | COMMENT |
| MEDIUM⚡ | guide/translate.py | 709 | # ============================================= | COMMENT |
| MEDIUM⚡ | guide/translate.py | 718 | # ============================================= | COMMENT |
| MEDIUM⚡ | guide/translate.py | 720 | # ============================================= | COMMENT |
| MEDIUM | guide/translate.py | 177 | # ============================================= | COMMENT |
| MEDIUM | guide/translate.py | 179 | # ============================================= | COMMENT |
| MEDIUM | guide/translate.py | 236 | # ============================================= | COMMENT |
| MEDIUM | guide/translate.py | 238 | # ============================================= | COMMENT |
| MEDIUM | guide/translate.py | 260 | # ============================================= | COMMENT |
| MEDIUM | guide/translate.py | 262 | # ============================================= | COMMENT |
| MEDIUM | guide/translate.py | 328 | # ============================================= | COMMENT |
| MEDIUM | guide/translate.py | 330 | # ============================================= | COMMENT |
| MEDIUM | guide/translate.py | 363 | # ============================================= | COMMENT |
| MEDIUM | guide/translate.py | 365 | # ============================================= | COMMENT |
| MEDIUM | guide/translate.py | 384 | # ============================================= | COMMENT |
| MEDIUM | guide/translate.py | 386 | # ============================================= | COMMENT |
| MEDIUM | guide/translate.py | 426 | # ============================================= | COMMENT |
| MEDIUM | guide/translate.py | 428 | # ============================================= | COMMENT |
| MEDIUM | guide/translate.py | 462 | # ============================================= | COMMENT |
| MEDIUM | guide/translate.py | 464 | # ============================================= | COMMENT |
| MEDIUM | guide/translate.py | 548 | # ============================================= | COMMENT |
| MEDIUM | guide/translate.py | 550 | # ============================================= | COMMENT |
| MEDIUM | guide/translate.py | 571 | # ============================================= | COMMENT |
| MEDIUM | guide/translate.py | 573 | # ============================================= | COMMENT |
| MEDIUM | guide/translate.py | 593 | # ============================================= | COMMENT |
| MEDIUM | guide/translate.py | 595 | # ============================================= | COMMENT |
| MEDIUM | guide/translate.py | 607 | # ============================================= | COMMENT |
| MEDIUM | guide/translate.py | 609 | # ============================================= | COMMENT |
| MEDIUM | guide/translate.py | 622 | # ============================================= | COMMENT |
| MEDIUM | guide/translate.py | 624 | # ============================================= | COMMENT |
| MEDIUM | guide/translate.py | 675 | # ============================================= | COMMENT |
| MEDIUM | guide/translate.py | 677 | # ============================================= | COMMENT |
| MEDIUM | libraries/core/src/descriptor/classify.rs | 19 | // ── Public interface ────────────────────────────────────────────── | COMMENT |
| MEDIUM | libraries/core/src/descriptor/classify.rs | 44 | // ── Internal ─────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | libraries/core/src/descriptor/classify.rs | 103 | // ── Whitelist check helpers ─────────────────────────────────────── | COMMENT |
| MEDIUM | libraries/core/src/descriptor/classify.rs | 289 | // ── Per-kind whitelists and checks ──────────────────────────────── | COMMENT |
| MEDIUM | …extensions/tensor-pool/python/dora_tensor_pool/cuda.py | 22 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | …extensions/tensor-pool/python/dora_tensor_pool/cuda.py | 24 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | …extensions/tensor-pool/python/dora_tensor_pool/cuda.py | 148 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | …extensions/tensor-pool/python/dora_tensor_pool/cuda.py | 150 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | …ons/tensor-pool/python/dora_tensor_pool/tensor_info.py | 64 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | …ons/tensor-pool/python/dora_tensor_pool/tensor_info.py | 66 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | docs/plan-agentic-qa-strategy.md | 1205 | # ============================================================ | COMMENT |
| MEDIUM | docs/plan-agentic-qa-strategy.md | 1207 | # ============================================================ | COMMENT |
| MEDIUM | docs/plan-agentic-qa-strategy.md | 1302 | # ============================================================ | COMMENT |
| MEDIUM | docs/plan-agentic-qa-strategy.md | 1304 | # ============================================================ | COMMENT |
| MEDIUM | examples/python-yolo-detection/dataflow_multi.yml | 2 | # ── Camera 0 ────────────────────────────────────── | COMMENT |
| MEDIUM | examples/python-yolo-detection/dataflow_multi.yml | 29 | # ── Camera 1 ────────────────────────────────────── | COMMENT |
| MEDIUM | examples/ros2-bridge/yaml-bridge/dataflow.yml | 2 | # ============================================= | COMMENT |
| MEDIUM | examples/ros2-bridge/yaml-bridge/dataflow.yml | 4 | # ============================================= | COMMENT |
| 103 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | apis/python/node/generate_stubs.py | 478 | def concatenated_path_to_type( | CODE |
| LOW | apis/python/node/tests/test_public_surface.py | 136 | def test_frozen_names_are_all_present(): | CODE |
| LOW | apis/python/node/tests/test_public_surface.py | 145 | def test_no_unclassified_names_appear(): | CODE |
| LOW | apis/python/node/tests/test_public_surface.py | 160 | def test_frozen_class_members_are_all_present(): | CODE |
| LOW | apis/python/node/tests/test_public_surface.py | 171 | def test_no_unclassified_class_members_appear(): | CODE |
| LOW⚡ | apis/python/node/tests/test_public_surface.py | 193 | def test_enum_base_class_is_not_exported(): | CODE |
| LOW⚡ | apis/python/node/tests/test_public_surface.py | 201 | def test_every_frozen_name_is_documented_as_a_class_or_callable(): | CODE |
| LOW⚡ | apis/python/node/tests/test_public_surface.py | 211 | def test_mock_node_covers_the_frozen_node_surface(): | CODE |
| LOW | apis/python/node/tests/test_dora_compat.py | 8 | def test_from_dora_import_node(): | CODE |
| LOW | apis/python/node/tests/test_dora_compat.py | 15 | def test_from_dora_import_dora_status(): | CODE |
| LOW⚡ | apis/python/node/tests/test_dora_compat.py | 27 | def test_dora_status_is_dora_status(): | CODE |
| LOW⚡ | apis/python/node/tests/test_dora_compat.py | 35 | def test_from_dora_import_node_and_status(): | CODE |
| LOW⚡ | apis/python/node/tests/test_dora_compat.py | 43 | def test_dora_node_same_as_dora_node(): | CODE |
| LOW | apis/python/node/tests/test_dora_compat.py | 66 | def test_dora_build_and_run_importable(): | CODE |
| LOW⚡ | apis/python/node/tests/test_builder.py | 34 | def test_node_with_input_string_source(): | CODE |
| LOW⚡ | apis/python/node/tests/test_builder.py | 42 | def test_node_with_input_output_object(): | CODE |
| LOW⚡ | apis/python/node/tests/test_builder.py | 51 | def test_node_with_queue_options(): | CODE |
| LOW | apis/python/node/tests/test_builder.py | 64 | def test_invalid_queue_policy(): | CODE |
| LOW | apis/python/node/tests/test_builder.py | 109 | def test_duplicate_output_not_added_twice(): | CODE |
| LOW⚡ | apis/python/node/tests/test_mock_node.py | 24 | def test_mock_node_captures_outputs(): | CODE |
| LOW⚡ | apis/python/node/tests/test_mock_node.py | 34 | def test_mock_node_multiple_outputs(): | CODE |
| LOW⚡ | apis/python/node/tests/test_mock_node.py | 42 | def test_mock_node_empty_inputs(): | CODE |
| LOW⚡ | apis/python/node/tests/test_mock_node.py | 49 | def test_mock_node_next_method(): | CODE |
| LOW⚡ | apis/python/node/tests/test_mock_node.py | 125 | def test_mock_node_stop_event_has_all_inputs_closed_id(): | CODE |
| LOW⚡ | apis/python/node/tests/test_mock_node.py | 133 | def test_mock_node_no_double_stop_when_raw_stop_supplied(): | CODE |
| LOW⚡ | apis/python/node/tests/test_mock_node.py | 139 | def test_mock_node_accepts_raw_events(): | CODE |
| LOW⚡ | apis/python/node/tests/test_mock_node.py | 154 | def test_mock_node_raw_event_dict_is_copied(): | CODE |
| LOW⚡ | apis/python/node/tests/test_mock_node.py | 162 | def test_mock_node_drain_returns_remaining_events(): | CODE |
| LOW⚡ | apis/python/node/tests/test_mock_node.py | 171 | def test_mock_node_try_recv_returns_next_or_none(): | CODE |
| LOW⚡ | apis/python/node/tests/test_mock_node.py | 179 | def test_mock_node_logs_captured_structured(): | CODE |
| LOW⚡ | apis/python/node/tests/test_mock_node.py | 219 | def test_mock_node_config_getters_defaults(): | CODE |
| LOW⚡ | apis/python/node/tests/test_mock_node.py | 228 | def test_mock_node_timestamp_is_utc(): | CODE |
| LOW⚡ | apis/python/node/tests/test_mock_node.py | 233 | def test_mock_node_service_request_delivers_queued_response(): | CODE |
| LOW | apis/python/node/tests/test_mock_node.py | 12 | def test_mock_node_iterates_inputs_then_stop(): | CODE |
| LOW | apis/python/node/tests/test_mock_node.py | 68 | def test_mock_node_metadata_not_shared(): | CODE |
| LOW | apis/python/node/tests/test_mock_node.py | 79 | def test_mock_node_recv_async(): | CODE |
| LOW | apis/python/node/tests/test_mock_node.py | 92 | def test_mock_node_recv_async_loop(): | CODE |
| LOW | apis/python/node/tests/test_mock_node.py | 108 | def test_mock_node_send_output_in_async_context(): | CODE |
| LOW | apis/python/node/tests/test_mock_node.py | 203 | def test_mock_node_config_getters(): | CODE |
| LOW | apis/python/node/tests/test_mock_node.py | 245 | def test_mock_node_service_request_records_request(): | CODE |
| LOW | apis/python/node/tests/test_mock_node.py | 256 | def test_mock_node_service_response_records_response(): | CODE |
| LOW | apis/python/node/tests/test_mock_node.py | 269 | def test_mock_node_runtime_only_methods_raise_not_implemented(): | CODE |
| LOW⚡ | …/extensions/ros2-bridge/python/tests/test_transport.py | 5 | def test_context_defaults_to_dds(): | CODE |
| LOW⚡ | …/extensions/ros2-bridge/python/tests/test_transport.py | 10 | def test_existing_positional_context_construction_remains_valid(): | CODE |
| LOW⚡ | …/extensions/ros2-bridge/python/tests/test_transport.py | 14 | def test_zenoh_transport_requires_known_profile(): | CODE |
| LOW⚡ | …/extensions/ros2-bridge/python/tests/test_transport.py | 19 | def test_context_transport_is_read_only(): | CODE |
| LOW | …/superpowers/plans/2026-07-19-rmw-zenoh-full-parity.md | 685 | def test_context_defaults_to_dds(): | CODE |
| LOW | …/superpowers/plans/2026-07-19-rmw-zenoh-full-parity.md | 689 | def test_zenoh_transport_requires_known_profile(): | CODE |
| LOW | …plate/python/__node-name__/tests/test___node_name__.py | 18 | def test_node_logic_with_mock(): | CODE |
| LOW | examples/python-zero-copy-send/test_contract.py | 33 | def case_happy_path_context_manager(node): | CODE |
| LOW | examples/python-zero-copy-send/test_contract.py | 51 | def case_send_while_view_open_errors(node): | CODE |
| LOW | examples/python-zero-copy-send/test_contract.py | 69 | def case_view_after_send_raises_buffer_error(node): | CODE |
| LOW⚡ | examples/python-zero-copy-send/test_contract.py | 100 | def case_as_buffer_is_idempotent(node): | CODE |
| LOW⚡ | examples/python-zero-copy-send/test_contract.py | 110 | def case_as_memoryview_returns_fresh_view(node): | CODE |
| LOW | examples/python-zero-copy-send/test_contract.py | 139 | def case_send_refused_when_numpy_view_outlives_context(node): | CODE |
| LOW | examples/python-zero-copy-send/test_contract.py | 181 | def case_access_after_send_raises_runtime_error(node): | CODE |
| LOW | examples/python-zero-copy-send/test_contract.py | 193 | def case_buffer_outlives_dropped_handler_safely(node): | CODE |
| LOW | examples/python-zero-copy-send/test_contract.py | 219 | def case_exit_with_exception_does_not_send(node): | CODE |
| LOW | examples/mavlink2-bridge-sitl-mission/mission_rover.py | 135 | def _wait_for_first_heartbeat(self, timeout: float) -> None: | CODE |
| LOW | examples/mavlink2-bridge-sitl-mission/mission_long.py | 376 | def _wait_for_first_heartbeat(self, timeout: float) -> None: | CODE |
| 48 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | Cargo.toml | 155 | # ROS2 harness runs (`scripts/ros2dev.sh`). Distro selection became an explicit | COMMENT |
| MEDIUM⚡ | guide/translate.py | 144 | """Build comprehensive translation dictionary.""" | STRING |
| MEDIUM | apis/rust/node/src/orphan_guard.rs | 141 | // lifetime, and it is robust where the daemon's spawn-time | COMMENT |
| MEDIUM | apis/rust/node/src/node/arrow_utils.rs | 291 | /// receive path robust while preserving zero-copy for the common SHM case. | COMMENT |
| MEDIUM | tests/fault_tolerance/delayed_crash_node/Cargo.toml | 13 | # harness can count how many times the daemon re-spawned it. Paired with | COMMENT |
| MEDIUM | binaries/runtime-api/Cargo.toml | 13 | # harness, and the `OperatorRunner` backend trait. Per-language backends | COMMENT |
| MEDIUM | binaries/runtime-api/src/channel.rs | 157 | // only put us one over, but stay robust to any surplus. | COMMENT |
| MEDIUM | binaries/cli/src/command/up.rs | 737 | /// `sys.argv[0]` is the robust source on **both** platforms: pip's launcher | COMMENT |
| MEDIUM | examples/mavlink2-bridge/telemetry_printer.py | 16 | # The networked smoke harness has a 30 s budget and only signals STOP | COMMENT |
| MEDIUM | examples/mavlink2-bridge/telemetry_printer.py | 18 | # dataflow into Failed state before the harness times out. | COMMENT |
| MEDIUM | examples/rust-dynamic-add-remove/dataflow.yml | 7 | # torn down) so the lifecycle harness has time to exercise add / | COMMENT |
| MEDIUM | examples/rust-dynamic-add-remove/dataflow.yml | 41 | # lifecycle harness would lose visibility on the dataflow as soon | COMMENT |
| MEDIUM | examples/cxx-dynamic-add-remove/dataflow.yml | 18 | # before the harness can complete the lifecycle. | COMMENT |
| MEDIUM | scripts/ros2dev.sh | 2 | # ROS2-bridge dev harness for macOS — issue #1170, Phase 0. | COMMENT |
| MEDIUM | scripts/smoke-all.sh | 562 | # example-smoke harness starts them. | COMMENT |
| MEDIUM | scripts/qa/kani.sh | 6 | # Unlike tests, a passing proof covers *every* input in the harness's | COMMENT |
| MEDIUM | scripts/qa/kani.sh | 43 | # `#[kani::proof]` harness anywhere in the workspace is enough — a stale | COMMENT |
| MEDIUM | .github/workflows/nightly.yml | 129 | # reliable here (unlike the example-smoke harness), so no tee/fail dance. | COMMENT |
| MEDIUM | .github/workflows/nightly.yml | 1206 | # every input in the harness state space, not just sampled values. | COMMENT |
| MEDIUM | .github/workflows/nightly.yml | 1209 | # it a refactor could break a harness unnoticed until the next manual | COMMENT |
| MEDIUM | .github/workflows/ci.yml | 651 | # so it ran nowhere before; this job already builds that harness. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | apis/python/node/dora/__init__.py | 36 | except ImportError: | CODE |
| HIGH | apis/python/node/tests/test_dora_compat.py | 61 | except ImportError: | CODE |
| HIGH | libraries/extensions/tensor-pool/examples/receiver.py | 120 | except Exception: | CODE |
| HIGH | examples/python-zero-copy-send/test_contract.py | 77 | except BufferError: | CODE |
| HIGH | examples/python-zero-copy-send/test_contract.py | 187 | except RuntimeError: | CODE |
| HIGH | examples/python-zero-copy-send/test_contract.py | 210 | except BufferError: | CODE |
| HIGH | examples/ros2-bridge/python/parameter/parameter_node.py | 50 | except RuntimeError: | CODE |
| HIGH | examples/ros2-bridge/python/parameter/parameter_node.py | 60 | except RuntimeError: | CODE |
| HIGH | examples/ros2-bridge/python/parameter/parameter_node.py | 71 | except RuntimeError: | CODE |
| HIGH | examples/ros2-comparison/ros2_receiver.py | 135 | except KeyboardInterrupt: | CODE |
| HIGH | examples/mavlink2-bridge-sitl-mission/mission_rover.py | 166 | except Exception: | CODE |
| HIGH | examples/mavlink2-bridge-sitl-mission/mission_long.py | 253 | except Exception: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | guide/src/hub/publishing.md | 104 | dora hub init # scaffold dora-node.yml (if you haven't) | CODE |
| MEDIUM | tests/example-smoke.rs | 2281 | // `docs/agentic-qa-policy.md` and the capability matrix in | COMMENT |
| MEDIUM | docs/plan-dora-1.0-consolidation.md | 598 | ### D-5: agentic engineering disclosure in the release | COMMENT |
| MEDIUM | docs/cli.md | 1230 | dora hub init [PATH] # scaffold a dora-node.yml manifest | CODE |
| MEDIUM | docs/plan-agentic-qa-strategy.md | 923 | ## 10. Long-term: agentic-engineering-maintained repo | COMMENT |
| MEDIUM | docs/plan-agentic-qa-strategy.md | 995 | ### 10.5 Measuring agentic quality over time | COMMENT |
| MEDIUM | docs/plan-agentic-qa-strategy.md | 1052 | **Four of six findings (#3, #4, #5, #6) would have been missed by every gate that existed in dora prior to this POC.** T | CODE |
| MEDIUM | docs/plan-agentic-qa-strategy.md | 1155 | ### 11.4 Long-term agentic quality | COMMENT |
| MEDIUM | docs/octos-dora-integration-report.md | 11 | [Octos](https://github.com/octos-org/octos) (Open Cognitive Tasks Orchestration System) is a Rust-native agentic OS that | CODE |
| MEDIUM | docs/plan-node-hub.md | 678 | dora hub init [--manifest-only] # scaffold dora-node.yml | CODE |
| MEDIUM | .cargo/mutants.toml | 3 | # See docs/plan-agentic-qa-strategy.md for the mutation testing strategy. | COMMENT |
| MEDIUM | binaries/cli/src/template/mod.rs | 188 | // The internal scaffold node names must keep passing, or `dora new | COMMENT |
| MEDIUM | binaries/cli/src/template/mod.rs | 214 | // `dora new <bad-name>` scaffold a broken project instead of erroring | COMMENT |
| MEDIUM | binaries/cli/src/command/hub/init.rs | 1 | //! `dora hub init` — scaffold a `dora-node.yml` next to the node's native | COMMENT |
| MEDIUM | binaries/cli/src/command/hub/init.rs | 28 | /// Render a scaffold and guarantee it satisfies the manifest validator. | COMMENT |
| MEDIUM | binaries/cli/src/command/hub/init.rs | 135 | /// Where the defaults came from, mentioned in the scaffold comments. | COMMENT |
| MEDIUM | binaries/cli/src/command/hub/init.rs | 312 | // scaffold at `parse()` before the validate-fixpoint can recover. | COMMENT |
| MEDIUM | binaries/cli/src/command/hub/init.rs | 407 | // chars in its description; the scaffold must stay parseable rather | COMMENT |
| MEDIUM | scripts/qa/all.sh | 4 | # Runs the QA gates from docs/plan-agentic-qa-strategy.md. | COMMENT |
| MEDIUM | scripts/qa/all.sh | 344 | # Tier 2 locally. See docs/plan-agentic-qa-strategy.md §6. | COMMENT |
| MEDIUM | scripts/qa/ci-nightly-jobs.sh | 509 | # Shared scaffolding: bring up a loopback SSH cluster | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | …emplate/python/__node-name__/__node_name__/__init__.py | 5 | # Define the path to the README file relative to the package directory | COMMENT |
| MEDIUM | examples/python-dataflow-builder/simple_example.py | 11 | # Define the nodes | COMMENT |
| MEDIUM⚡ | examples/ros2-bridge/python/turtle/random_turtle.py | 9 | # Create a ROS2 Context | COMMENT |
| MEDIUM⚡ | examples/ros2-bridge/python/turtle/random_turtle.py | 17 | # Define a ROS2 QOS | COMMENT |
| MEDIUM⚡ | examples/ros2-bridge/python/turtle/random_turtle.py | 20 | # Create a publisher to cmd_vel topic | COMMENT |
| MEDIUM⚡ | examples/ros2-bridge/python/turtle/random_turtle.py | 26 | # Create a listener to pose topic | COMMENT |
| MEDIUM⚡ | examples/ros2-bridge/python/turtle/random_turtle.py | 30 | # Create a dora node | COMMENT |
| MEDIUM | …s2-bridge/python/service-server/service_server_node.py | 12 | # Create a ROS2 context + node and advertise the service. | COMMENT |
| MEDIUM | …s2-bridge/python/service-client/service_client_node.py | 12 | # Create a ROS2 context + node. | COMMENT |
| MEDIUM | …s2-bridge/python/service-client/service_client_node.py | 23 | # Create the service client for /add_two_ints. This waits (bounded) for the | COMMENT |
| MEDIUM | examples/python-dataflow/sender.py | 25 | # Create a simple Apache Arrow array with the message number. | COMMENT |
| MEDIUM | examples/python-dataflow/transformer.py | 18 | # Create a struct array with multiple fields | COMMENT |
| MEDIUM | examples/cuda-benchmark/sender.py | 23 | # Create a random number generator | COMMENT |
| MEDIUM | examples/cuda-benchmark/demo_sender.py | 24 | # Create a random number generator | COMMENT |
| MEDIUM | examples/cuda-benchmark/demo_sender.py | 58 | # Create a random number generator | COMMENT |
| MEDIUM | .github/workflows/docker-image.yml | 15 | # This file is in the filter so edits to it are exercised by the very | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | CLAUDE.md | 113 | ### Step 1: Run /review | COMMENT |
| LOW⚡ | CLAUDE.md | 117 | ### Step 2: Run /simplify | COMMENT |
| LOW⚡ | CLAUDE.md | 121 | ### Step 3: Local CI (fmt + clippy + tests) | COMMENT |
| LOW | docs/plan-event-loop-separation.md | 48 | ## Step 1: Zenoh Publish Channel (highest impact) | COMMENT |
| LOW | docs/plan-event-loop-separation.md | 97 | ## Step 2: Fire-and-Forget Metrics (removes 50ms spikes) | COMMENT |
| LOW | docs/plan-event-loop-separation.md | 125 | ## Step 3: Background Heartbeat (optional, minor) | COMMENT |
| LOW | binaries/coordinator/src/tests.rs | 4724 | // Step 1: build a synthesized DataflowDaemonResult as the watchdog | COMMENT |
| LOW | binaries/coordinator/src/tests.rs | 4751 | // Step 2: late `result` from a daemon that DID end up running | COMMENT |
| LOW | binaries/coordinator/src/tests.rs | 4768 | // Step 3: apply the merge logic from the Vacant arm. | COMMENT |
| LOW | binaries/daemon/src/tests.rs | 2931 | // Step 1: Simulate timeout — insert into broken_inputs then break | COMMENT |
| LOW | binaries/daemon/src/tests.rs | 2950 | // Step 2: Upstream sends data again — recovery | COMMENT |
| LOW | examples/dynamic-agent-tools/README.md | 35 | ### Step 1: Start with echo tool only | COMMENT |
| LOW | examples/dynamic-agent-tools/README.md | 46 | ### Step 2: Add calculator tool | COMMENT |
| LOW | examples/dynamic-agent-tools/README.md | 61 | ### Step 3: Remove calculator tool | COMMENT |
| LOW | examples/dynamic-agent-tools/README.md | 69 | ### Step 4: Clean up | COMMENT |
| LOW⚡ | examples/dynamic-add-remove/README.md | 29 | ### Step 1: Start the base dataflow | COMMENT |
| LOW⚡ | examples/dynamic-add-remove/README.md | 39 | ### Step 2: Add a filter node | COMMENT |
| LOW⚡ | examples/dynamic-add-remove/README.md | 47 | ### Step 3: Wire the filter into the pipeline | COMMENT |
| LOW | examples/dynamic-add-remove/README.md | 61 | ### Step 4: Remove the filter | COMMENT |
| LOW | examples/dynamic-add-remove/README.md | 70 | ### Step 5: Clean up | COMMENT |
| LOW⚡ | examples/dynamic-add-remove/dataflow.yml | 7 | # Step 1: Start the base dataflow | COMMENT |
| LOW⚡ | examples/dynamic-add-remove/dataflow.yml | 11 | # Step 2: Add a filter node dynamically | COMMENT |
| LOW⚡ | examples/dynamic-add-remove/dataflow.yml | 14 | # Step 3: Wire the filter into the pipeline | COMMENT |
| LOW⚡ | examples/dynamic-add-remove/dataflow.yml | 18 | # Step 4: Remove the filter | COMMENT |
| LOW⚡ | examples/dynamic-add-remove/dataflow.yml | 21 | # Step 5: Stop | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | apis/python/node/dora/__init__.py | 15 | CODE | |
| LOW | apis/python/node/dora/__init__.py | 16 | CODE | |
| LOW | apis/python/node/dora/__init__.py | 16 | CODE | |
| LOW | apis/python/node/dora/__init__.py | 16 | CODE | |
| LOW | apis/python/node/dora/__init__.py | 16 | CODE | |
| LOW | apis/python/node/dora/__init__.py | 16 | CODE | |
| LOW | apis/python/node/dora/__init__.py | 16 | CODE | |
| LOW | apis/python/node/dora/__init__.py | 16 | CODE | |
| LOW | apis/python/node/dora/__init__.py | 16 | CODE | |
| LOW | apis/python/node/dora/__init__.py | 16 | CODE | |
| LOW | apis/python/node/dora/__init__.py | 16 | CODE | |
| LOW | apis/python/node/dora/__init__.py | 16 | CODE | |
| LOW | apis/python/node/dora/__init__.py | 16 | CODE | |
| LOW | apis/python/node/dora/__init__.py | 35 | CODE | |
| LOW | apis/python/node/dora/builder.py | 1 | CODE | |
| LOW | apis/python/node/dora/testing.py | 19 | CODE | |
| LOW | apis/python/node/dora/testing.py | 26 | CODE | |
| LOW | …nsions/tensor-pool/python/dora_tensor_pool/__init__.py | 12 | CODE | |
| LOW | …nsions/tensor-pool/python/dora_tensor_pool/__init__.py | 12 | CODE | |
| LOW | …nsions/tensor-pool/python/dora_tensor_pool/__init__.py | 12 | CODE | |
| LOW | …nsions/tensor-pool/python/dora_tensor_pool/__init__.py | 12 | CODE | |
| LOW | …nsions/tensor-pool/python/dora_tensor_pool/__init__.py | 18 | CODE | |
| LOW | …nsions/tensor-pool/python/dora_tensor_pool/__init__.py | 18 | CODE | |
| LOW | examples/dynamic-agent-tools/agent.py | 9 | CODE | |
| LOW | examples/streaming-example/generator.py | 12 | CODE | |
| LOW | examples/python-logging/processor.py | 13 | CODE | |
| LOW | examples/python-dataflow-builder/test_builder_api.py | 27 | CODE | |
| LOW | examples/ros2-comparison/ros2_receiver.py | 9 | CODE | |
| LOW | examples/ros2-comparison/ros2_receiver.py | 11 | CODE | |
| LOW | examples/mavlink2-bridge-sitl-mission/mission_rover.py | 37 | CODE | |
| LOW | examples/mavlink2-bridge-sitl-mission/mission_long.py | 33 | CODE | |
| LOW | examples/mavlink2-bridge-sitl-mission/mission.py | 20 | CODE | |
| LOW | examples/python-parquet-recorder/recorder.py | 12 | CODE | |
| LOW | scripts/qa/breaking_changes.py | 21 | CODE | |
| LOW | scripts/release/verify-release.py | 28 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | docs/plan-dora-1.0-consolidation.md | 1201 | ### 19.6 AI-generated code QA rules (issue #207) | COMMENT |
| HIGH | docs/plan-agentic-qa-strategy.md | 10 | ## 1. Why AI-generated code needs different verification | COMMENT |
| HIGH | docs/qa-poc-report-2026-04-09.md | 35 | ### 2.2 What AI-generated code fails at | COMMENT |
| HIGH | binaries/daemon/src/dora_events.rs | 613 | // dataflow shut down exactly as requested | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | guide/translate.py | 12 | CODE | |
| LOW | guide/translate.py | 65 | CODE | |
| LOW | guide/translate.py | 111 | CODE | |
| LOW | apis/python/node/generate_stubs.py | 71 | CODE | |
| LOW | apis/python/node/generate_stubs.py | 104 | CODE | |
| LOW | apis/python/node/generate_stubs.py | 264 | CODE | |
| LOW | …rc/template/python/__node-name__/__node_name__/main.py | 7 | CODE | |
| LOW | examples/dynamic-agent-tools/calc_tool.py | 13 | CODE | |
| LOW | examples/dynamic-agent-tools/agent.py | 23 | CODE | |
| LOW | examples/dynamic-agent-tools/echo_tool.py | 10 | CODE | |
| LOW | examples/streaming-example/sink.py | 12 | CODE | |
| LOW | examples/streaming-example/generator.py | 29 | CODE | |
| LOW | examples/python-logging/monitor.py | 14 | CODE | |
| LOW | examples/python-yolo-detection/plot.py | 19 | CODE | |
| LOW | examples/python-yolo-detection/webcam.py | 20 | CODE | |
| LOW | examples/mavlink2-bridge-sitl-mission/mission_rover.py | 148 | CODE | |
| LOW | examples/mavlink2-bridge-sitl-mission/mission_long.py | 439 | CODE | |
| LOW | examples/dynamic-add-remove/sender.py | 9 | CODE | |
| LOW | examples/python-dataflow/receiver.py | 8 | CODE | |
| LOW | examples/typed-dataflow/processor.py | 9 | CODE | |
| LOW | examples/python-parquet-recorder/camera.py | 18 | CODE | |
| LOW | examples/python-operator-dataflow/plot.py | 27 | CODE | |
| LOW | examples/python-operator-dataflow/webcam.py | 49 | CODE | |
| LOW | …s/python-operator-dataflow/sentence_transformers_op.py | 19 | CODE | |
| LOW | examples/python-operator-dataflow/llm_op.py | 192 | CODE | |
| LOW | scripts/qa/breaking_changes.py | 200 | CODE | |
| LOW | scripts/qa/breaking_changes.py | 626 | CODE | |
| LOW | scripts/qa/breaking_changes.py | 668 | CODE | |
| LOW | scripts/qa/breaking_changes.py | 782 | CODE | |
| LOW | scripts/qa/breaking_changes.py | 851 | CODE | |
| LOW | scripts/qa/breaking_changes.py | 1267 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | binaries/coordinator/src/tests.rs | 4724 | // Step 1: build a synthesized DataflowDaemonResult as the watchdog | COMMENT |
| LOW | binaries/coordinator/src/tests.rs | 4751 | // Step 2: late `result` from a daemon that DID end up running | COMMENT |
| LOW | binaries/coordinator/src/tests.rs | 4768 | // Step 3: apply the merge logic from the Vacant arm. | COMMENT |
| LOW | binaries/daemon/src/tests.rs | 2931 | // Step 1: Simulate timeout — insert into broken_inputs then break | COMMENT |
| LOW | binaries/daemon/src/tests.rs | 2950 | // Step 2: Upstream sends data again — recovery | COMMENT |
| LOW⚡ | examples/dynamic-add-remove/dataflow.yml | 7 | # Step 1: Start the base dataflow | COMMENT |
| LOW⚡ | examples/dynamic-add-remove/dataflow.yml | 11 | # Step 2: Add a filter node dynamically | COMMENT |
| LOW⚡ | examples/dynamic-add-remove/dataflow.yml | 14 | # Step 3: Wire the filter into the pipeline | COMMENT |
| LOW⚡ | examples/dynamic-add-remove/dataflow.yml | 18 | # Step 4: Remove the filter | COMMENT |
| LOW⚡ | examples/dynamic-add-remove/dataflow.yml | 21 | # Step 5: Stop | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | examples/benchmark/compare.sh | 9 | # Usage: | COMMENT |
| LOW | …les/ros2-bridge/yaml-bridge-action-server/dataflow.yml | 13 | # Usage: | COMMENT |
| LOW | examples/ros2-bridge/yaml-bridge-action/dataflow.yml | 17 | # Usage: | COMMENT |
| LOW | …es/ros2-bridge/yaml-bridge-service/dataflow-client.yml | 13 | # Usage: | COMMENT |
| LOW | …es/ros2-bridge/yaml-bridge-service/dataflow-server.yml | 13 | # Usage: | COMMENT |
| LOW | examples/ros2-comparison/run_comparison.sh | 10 | # Usage: | COMMENT |
| LOW | scripts/cargo-target-dir.sh | 16 | # Usage: | COMMENT |
| LOW | scripts/smoke-all.sh | 16 | # Usage: | COMMENT |
| LOW | scripts/qa/breaking-changes.sh | 24 | # Usage: | COMMENT |
| LOW | scripts/qa/adversarial.sh | 15 | # Usage: | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | libraries/extensions/tensor-pool/examples/receiver.py | 120 | except Exception: | CODE |
| LOW⚡ | examples/python-zero-copy-send/test_contract.py | 91 | except Exception as exc: | CODE |
| LOW | examples/python-zero-copy-send/test_contract.py | 285 | except Exception: | CODE |
| LOW | examples/mavlink2-bridge-sitl-mission/mission_rover.py | 49 | except Exception: # pragma: no cover | CODE |
| LOW | examples/mavlink2-bridge-sitl-mission/mission_rover.py | 166 | except Exception: | CODE |
| LOW | examples/mavlink2-bridge-sitl-mission/mission_long.py | 46 | except Exception: # pragma: no cover | CODE |
| LOW | examples/mavlink2-bridge-sitl-mission/mission_long.py | 253 | except Exception: | CODE |
| LOW | …mavlink2-bridge-sitl-mission/scripts/forward_to_qgc.py | 49 | except Exception as e: | CODE |
| LOW | examples/python-drain/receive_data.py | 14 | except Exception as e: | CODE |
| MEDIUM | examples/python-drain/receive_data.py | 15 | print("Error receiving event:", e) | CODE |
| LOW | scripts/smoke-all.sh | 552 | except Exception: | CODE |
| LOW | scripts/qa/breaking_changes.py | 1246 | except Exception as error: # noqa: BLE001 - see below | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | apis/python/node/dora/testing.py | 28 | __all__ = ["MockNode"] | CODE |
| LOW | …nsions/tensor-pool/python/dora_tensor_pool/__init__.py | 20 | __all__ = [ | CODE |
| LOW | scripts/release/verify-release.py | 174 | def set_poll_deadline(timeout: float) -> None: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | guide/translate.py | 117 | # Check if text contains newlines | COMMENT |
| LOW | examples/python-operator-dataflow/llm_op.py | 133 | if lines: # Check if there are any lines to remove | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | libraries/extensions/ros2-bridge/msg-gen/src/lib.rs | 787 | let bytes = OsString::from("placeholder"); | CODE |