Agent OS: Stop prompting. Start specifying.
This report presents the forensic synthetic code analysis of Q00/ouroboros, a Python project with 4,889 GitHub stars. SynthScan v2.0 examined 559,746 lines of code across 1339 source files, recording 16511 pattern matches distributed across 22 syntactic categories. The overall adjusted score of 34.6 places this repository in the Strong AI signal band.
The scanner applied 160+ deterministic lexical heuristics, multi-line block detectors, abstract syntax tree depth profilers, and a cross-file Jaccard similarity matrix to construct a statistically normalised synthetic code estimate. All matches are individually weighted by severity coefficient and contextual multiplier before summation, and the resulting headline score is temporally discounted to account for the repository's development history relative to the commercial emergence of large language model coding tooling (November 2022 onward).
Longitudinal tracking requires multiple scan runs. Once this repository is re-scanned after new commits land, this chart will visualise how the synthetic code signal evolves over time — enabling you to detect whether AI authorship is growing, stabilising, or being actively corrected by human engineers.
Classifies detected patterns by their diagnostic confidence and structural impact. CRITICAL patterns (coefficient 10) represent definitive synthetic signatures — hallucinated imports, explicit LLM attribution metadata — virtually never produced by human authors. HIGH (5) indicates strong structural tells such as cross-file repetition or cross-linguistic idioms. MEDIUM (2) covers recognisable conversational padding and AI-specific vocabulary. LOW (1) captures subtle indicators like tautological comments and generic boilerplate that require density to carry independent signal.
This horizontal bar chart decomposes the repository's raw synthetic code score by top-level directory, allowing you to pinpoint precisely which modules or components carry the highest AI authorship density. Directories with disproportionately high scores relative to their size warrant targeted manual review: concentrated AI signatures often trace back to mass-generated configuration layers, auto-ported test suites, LLM-scaffolded boilerplate classes, or entire subsystems authored under heavy copilot assistance. Use this view to prioritise your human code-review effort.
The scanner identified 16511 distinct pattern matches across 22 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a statistically significant AI authorship indicator. 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 diagnostic confidence level (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — comment-context matches receive a ×1.5 weight because LLMs systematically over-annotate. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier as dense clusters constitute far stronger evidence of synthetic authorship than isolated hits.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/conftest.py | 26 | def block_runner_real_llm_adapter(monkeypatch): | CODE |
| LOW | tests/conftest.py | 48 | def _blocked_create_llm_adapter(*_args, **_kwargs): | CODE |
| LOW | tests/unit/test_detached_auto_docs.py | 18 | def test_cli_docs_describe_detached_auto_as_tracked_non_terminal_background_work() -> None: | CODE |
| LOW | tests/unit/test_detached_auto_docs.py | 46 | def test_mcp_docs_describe_detached_auto_as_tracked_non_terminal_background_work() -> None: | CODE |
| LOW | tests/unit/test_detached_auto_docs.py | 75 | def test_docs_verify_running_state_includes_stable_wait_and_retrieve_guidance() -> None: | CODE |
| LOW | tests/unit/test_detached_auto_docs.py | 108 | def test_cli_docs_verify_completed_state_has_stable_result_retrieval_semantics() -> None: | CODE |
| LOW | tests/unit/test_detached_auto_docs.py | 122 | def test_cli_docs_api_check_verifies_completed_detached_auto_result_output( | CODE |
| LOW | tests/unit/test_detached_auto_docs.py | 140 | async def _persist_completed_auto_job() -> None: | CODE |
| LOW | tests/unit/test_detached_auto_docs.py | 214 | def test_mcp_docs_verify_completed_state_has_stable_result_retrieval_semantics() -> None: | CODE |
| LOW | tests/unit/test_detached_auto_docs.py | 236 | def test_mcp_docs_api_check_verifies_completed_detached_auto_result_response( | CODE |
| LOW | tests/unit/test_detached_auto_docs.py | 250 | async def _persist_completed_auto_job_and_fetch_result(): | CODE |
| LOW | tests/unit/test_detached_auto_docs.py | 363 | def test_completed_detached_auto_result_retrieval_leaves_inspectable_event_trace( | CODE |
| LOW | tests/unit/test_detached_auto_docs.py | 371 | async def _run_completed_job_and_verify_trace() -> None: | CODE |
| LOW | tests/unit/test_detached_auto_docs.py | 429 | def test_docs_verify_failed_state_has_stable_status_semantics_and_next_steps() -> None: | CODE |
| LOW | tests/unit/test_detached_auto_docs.py | 474 | def test_mcp_docs_api_check_verifies_failed_detached_auto_result_response( | CODE |
| LOW | tests/unit/test_detached_auto_docs.py | 489 | async def _persist_failed_auto_job_and_fetch_result(): | CODE |
| LOW | tests/unit/test_detached_auto_docs.py | 591 | def test_docs_verify_cancelled_state_has_stable_status_semantics_and_next_steps() -> None: | CODE |
| LOW | tests/unit/test_detached_auto_docs.py | 639 | def test_mcp_docs_api_check_verifies_cancelled_detached_auto_result_response( | CODE |
| LOW | tests/unit/test_detached_auto_docs.py | 654 | async def _persist_cancelled_auto_job_and_fetch_result(): | CODE |
| LOW | tests/unit/test_detached_auto_docs.py | 757 | def test_docs_verify_expired_state_has_stable_status_semantics_and_next_steps() -> None: | CODE |
| LOW | tests/unit/test_detached_auto_docs.py | 785 | def test_docs_api_check_verifies_expired_detached_work_observable_contract( | CODE |
| LOW | tests/unit/test_detached_auto_docs.py | 799 | async def _persist_expired_auto_job_and_fetch_result(): | CODE |
| LOW | tests/unit/test_detached_auto_docs.py | 871 | def test_docs_verify_invalid_detached_work_has_stable_status_semantics_and_next_steps() -> None: | CODE |
| LOW | tests/unit/test_detached_auto_docs.py | 915 | def test_docs_api_check_verifies_invalid_detached_work_observable_contract( | CODE |
| LOW | tests/unit/test_tooling_configuration.py | 31 | def test_pre_commit_config_exists(): | CODE |
| LOW⚡ | tests/unit/test_kiro_adapters.py | 73 | def test_resolves_kiro_aliases(self) -> None: | CODE |
| LOW⚡ | tests/unit/test_kiro_adapters.py | 77 | def test_falls_back_to_kiro_via_ouroboros_runtime( | CODE |
| LOW⚡ | tests/unit/test_kiro_adapters.py | 84 | def test_ouroboros_runtime_does_not_affect_explicit_backend( | CODE |
| LOW⚡ | tests/unit/test_kiro_adapters.py | 92 | def _isolated_llm_permission_config(monkeypatch: pytest.MonkeyPatch) -> None: | CODE |
| LOW⚡ | tests/unit/test_kiro_adapters.py | 116 | def test_kiro_returns_default(self, _isolated_llm_permission_config: None) -> None: | CODE |
| LOW⚡ | tests/unit/test_kiro_adapters.py | 119 | def test_kiro_respects_llm_permission_mode_env(self, monkeypatch: pytest.MonkeyPatch) -> None: | CODE |
| LOW⚡ | tests/unit/test_kiro_adapters.py | 124 | def test_kiro_interview_respects_llm_permission_mode_env( | CODE |
| LOW⚡ | tests/unit/test_kiro_adapters.py | 133 | def test_kiro_interview_returns_config_default_without_override( | CODE |
| LOW⚡ | tests/unit/test_kiro_adapters.py | 145 | def test_creates_kiro_adapter(self) -> None: | CODE |
| LOW⚡ | tests/unit/test_kiro_adapters.py | 149 | def test_passes_cwd_to_kiro_adapter(self) -> None: | CODE |
| LOW⚡ | tests/unit/test_kiro_adapters.py | 154 | def test_passes_timeout_to_kiro_adapter(self) -> None: | CODE |
| LOW⚡ | tests/unit/test_kiro_adapters.py | 159 | def test_passes_max_retries_to_kiro_adapter(self) -> None: | CODE |
| LOW⚡ | tests/unit/test_kiro_adapters.py | 164 | def test_passes_tool_envelope_to_kiro_adapter( | CODE |
| LOW⚡ | tests/unit/test_kiro_adapters.py | 184 | def test_uses_configured_cli_path(self, monkeypatch: pytest.MonkeyPatch) -> None: | CODE |
| LOW⚡ | tests/unit/test_kiro_adapters.py | 291 | def test_empty_allowed_tools_forces_text_only_prompt(self) -> None: | CODE |
| LOW⚡ | tests/unit/test_kiro_adapters.py | 301 | def test_allowed_tools_lists_permitted_tools(self) -> None: | CODE |
| LOW⚡ | tests/unit/test_kiro_adapters.py | 311 | def test_allowed_tools_none_omits_tool_constraints(self) -> None: | CODE |
| LOW⚡ | tests/unit/test_kiro_adapters.py | 319 | def test_empty_allowed_tools_sets_empty_trust_tools_flag(self) -> None: | CODE |
| LOW⚡ | tests/unit/test_kiro_adapters.py | 328 | def test_allowed_tools_maps_to_kiro_trust_tools_flag(self) -> None: | CODE |
| LOW⚡ | tests/unit/test_kiro_adapters.py | 337 | def test_allowed_tools_filters_mcp_names_from_kiro_trust_tools_flag(self) -> None: | CODE |
| LOW⚡ | tests/unit/test_kiro_adapters.py | 362 | def test_allowed_tools_none_omits_trust_tools_flag(self) -> None: | CODE |
| LOW⚡ | tests/unit/test_kiro_adapters.py | 371 | def test_default_permission_mode_sets_empty_trust_tools_flag(self) -> None: | CODE |
| LOW⚡ | tests/unit/test_kiro_adapters.py | 380 | def test_accept_edits_permission_mode_sets_trust_all_tools_flag(self) -> None: | CODE |
| LOW⚡ | tests/unit/test_kiro_adapters.py | 388 | def test_bypass_permission_takes_precedence_over_allowed_tools(self) -> None: | CODE |
| LOW⚡ | tests/unit/test_kiro_adapters.py | 565 | def test_resolves_kiro_aliases(self) -> None: | CODE |
| LOW⚡ | tests/unit/test_kiro_adapters.py | 571 | def test_falls_back_via_ouroboros_runtime(self, monkeypatch: pytest.MonkeyPatch) -> None: | CODE |
| LOW⚡ | tests/unit/test_kiro_adapters.py | 580 | def test_creates_kiro_runtime(self) -> None: | CODE |
| LOW⚡ | tests/unit/test_kiro_adapters.py | 589 | def test_uses_configured_cli_path(self, monkeypatch: pytest.MonkeyPatch) -> None: | CODE |
| LOW⚡ | tests/unit/test_kiro_adapters.py | 610 | def test_declares_translated_system_prompt_and_permission_mode(self) -> None: | CODE |
| LOW⚡ | tests/unit/test_kiro_adapters.py | 759 | def test_get_llm_backend_uses_runtime_fallback(self, monkeypatch: pytest.MonkeyPatch) -> None: | CODE |
| LOW⚡ | tests/unit/test_kiro_adapters.py | 766 | def test_get_llm_backend_uses_kiro_cli_runtime_alias( | CODE |
| LOW⚡ | tests/unit/test_kiro_adapters.py | 775 | def test_llm_backend_env_takes_priority_over_runtime( | CODE |
| LOW⚡ | tests/unit/test_kiro_adapters.py | 784 | def test_no_runtime_env_uses_default(self, monkeypatch: pytest.MonkeyPatch) -> None: | CODE |
| LOW⚡ | tests/unit/test_kiro_adapters.py | 793 | def test_get_agent_runtime_uses_runtime_fallback(self, monkeypatch: pytest.MonkeyPatch) -> None: | CODE |
| LOW⚡ | tests/unit/test_kiro_adapters.py | 800 | def test_kiro_model_defaults_to_sentinel(self) -> None: | CODE |
| 11719 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | crates/ouroboros-tui/src/state.rs | 8 | // ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/ouroboros-tui/src/state.rs | 10 | // ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/ouroboros-tui/src/state.rs | 127 | // ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/ouroboros-tui/src/state.rs | 129 | // ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/ouroboros-tui/src/state.rs | 273 | // ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/ouroboros-tui/src/state.rs | 275 | // ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/ouroboros-tui/src/state.rs | 660 | // ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/ouroboros-tui/src/state.rs | 662 | // ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/ouroboros-tui/src/views/execution.rs | 251 | // ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/ouroboros-tui/src/views/execution.rs | 253 | // ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/ouroboros-tui/src/views/lineage.rs | 17 | // ── Left panel: Lineage list ────────────────────────────────────── | COMMENT |
| MEDIUM | crates/ouroboros-tui/src/views/lineage.rs | 61 | // ── Right panel: Detail ─────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/ouroboros-tui/src/views/lineage.rs | 165 | // ── Top: Lineage Info + Generation List ─────────────────────────── | COMMENT |
| MEDIUM | crates/ouroboros-tui/src/views/lineage.rs | 218 | // ── Middle: Generation List (selectable) ────────────────────────── | COMMENT |
| MEDIUM | crates/ouroboros-tui/src/views/lineage.rs | 240 | // ── Bottom: Selected Generation Detail ──────────────────────────── | COMMENT |
| MEDIUM | crates/ouroboros-tui/src/views/lineage.rs | 292 | // ── Double Diamond: Phase Progress ───────────────────────────── | COMMENT |
| MEDIUM | crates/ouroboros-tui/src/views/lineage.rs | 295 | // ── Header: Status + Score ─────────────────────────────────── | COMMENT |
| MEDIUM | crates/ouroboros-tui/src/views/lineage.rs | 316 | // ── Evaluation: AC Results + Drift ──────────────────────────── | COMMENT |
| MEDIUM⚡ | crates/ouroboros-tui/src/views/lineage.rs | 364 | // ── Failure Reason ──────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | crates/ouroboros-tui/src/views/lineage.rs | 373 | // ── Summary ─────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | crates/ouroboros-tui/src/views/lineage.rs | 382 | // ── Ontology ────────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/ouroboros-tui/src/views/lineage.rs | 406 | // ── Ontology Delta ──────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/ouroboros-tui/src/views/lineage.rs | 432 | // ── Wonder Questions ────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/ouroboros-tui/src/views/lineage.rs | 445 | // ── Execution Output ────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/ouroboros-tui/src/views/lineage.rs | 459 | // ── Timestamp ───────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/ouroboros-tui/src/views/lineage.rs | 511 | /// ◇━━━━◆━━━━◇ ◇━━━━━━━━━◇ | COMMENT |
| MEDIUM | crates/ouroboros-tui/src/views/lineage.rs | 539 | // Second diamond: Execute ◇━━━━━━━◇ Evaluate | COMMENT |
| MEDIUM⚡ | tests/unit/test_kiro_adapters.py | 67 | # =========================================================================== | COMMENT |
| MEDIUM⚡ | tests/unit/test_kiro_adapters.py | 69 | # =========================================================================== | COMMENT |
| MEDIUM⚡ | tests/unit/test_kiro_adapters.py | 139 | # =========================================================================== | COMMENT |
| MEDIUM⚡ | tests/unit/test_kiro_adapters.py | 141 | # =========================================================================== | COMMENT |
| MEDIUM⚡ | tests/unit/test_kiro_adapters.py | 191 | # =========================================================================== | COMMENT |
| MEDIUM⚡ | tests/unit/test_kiro_adapters.py | 193 | # =========================================================================== | COMMENT |
| MEDIUM⚡ | tests/unit/test_kiro_adapters.py | 559 | # =========================================================================== | COMMENT |
| MEDIUM⚡ | tests/unit/test_kiro_adapters.py | 561 | # =========================================================================== | COMMENT |
| MEDIUM⚡ | tests/unit/test_kiro_adapters.py | 602 | # =========================================================================== | COMMENT |
| MEDIUM⚡ | tests/unit/test_kiro_adapters.py | 604 | # =========================================================================== | COMMENT |
| MEDIUM⚡ | tests/unit/test_kiro_adapters.py | 753 | # =========================================================================== | COMMENT |
| MEDIUM⚡ | tests/unit/test_kiro_adapters.py | 755 | # =========================================================================== | COMMENT |
| MEDIUM⚡ | tests/unit/test_kiro_adapters.py | 806 | # =========================================================================== | COMMENT |
| MEDIUM⚡ | tests/unit/test_kiro_adapters.py | 808 | # =========================================================================== | COMMENT |
| MEDIUM | tests/unit/test_kiro_adapters.py | 24 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit/test_kiro_adapters.py | 26 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit/test_kiro_adapters.py | 1163 | # =========================================================================== | COMMENT |
| MEDIUM | tests/unit/test_kiro_adapters.py | 1165 | # =========================================================================== | COMMENT |
| MEDIUM | tests/unit/test_ralph_parser.py | 29 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit/test_ralph_parser.py | 31 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit/test_ralph_parser.py | 91 | # --------------------------------------------------------------------------- | STRING |
| MEDIUM | tests/unit/test_ralph_parser.py | 93 | # --------------------------------------------------------------------------- | STRING |
| MEDIUM | tests/unit/test_ralph_parser.py | 193 | # --------------------------------------------------------------------------- | STRING |
| MEDIUM | tests/unit/test_ralph_parser.py | 195 | # --------------------------------------------------------------------------- | STRING |
| MEDIUM⚡ | tests/unit/pm/test_renderer.py | 91 | # ────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/unit/pm/test_renderer.py | 93 | # ────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/unit/pm/test_renderer.py | 151 | # ────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/unit/pm/test_renderer.py | 153 | # ────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/unit/pm/test_renderer.py | 268 | # ────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/unit/pm/test_renderer.py | 270 | # ────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/unit/pm/test_renderer.py | 310 | # ────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/unit/pm/test_renderer.py | 312 | # ────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/unit/pm/test_renderer.py | 25 | # ────────────────────────────────────────────────────────────────── | COMMENT |
| 1283 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/_envelope_wiring.py | 12 | CODE | |
| LOW | tests/unit/test_kiro_adapters.py | 11 | CODE | |
| LOW | tests/unit/test_ralph_loop_budget.py | 12 | CODE | |
| LOW | tests/unit/test_dashboard.py | 3 | CODE | |
| LOW | tests/unit/test_ralph_rewind.py | 3 | CODE | |
| LOW | tests/unit/test_ralph_parser.py | 3 | CODE | |
| LOW | tests/unit/test_convergence.py | 3 | CODE | |
| LOW | tests/unit/test_ralph_shell.py | 3 | CODE | |
| LOW | tests/unit/test_artifact_collector.py | 3 | CODE | |
| LOW | tests/unit/test_ralph_loop_timeout.py | 11 | CODE | |
| LOW | tests/unit/test_evolve_rewind.py | 3 | CODE | |
| LOW | tests/unit/test_regression.py | 3 | CODE | |
| LOW | tests/unit/test_verification.py | 3 | CODE | |
| LOW | tests/unit/test_ralph_loop_progress.py | 8 | CODE | |
| LOW | tests/unit/pm/test_renderer.py | 8 | CODE | |
| LOW | tests/unit/core/test_hitl_contract.py | 1 | CODE | |
| LOW | tests/unit/core/test_retry.py | 3 | CODE | |
| LOW | tests/unit/core/test_ttl_cache.py | 3 | CODE | |
| LOW | tests/unit/core/test_conductor.py | 3 | CODE | |
| LOW | tests/unit/core/test_file_lock.py | 3 | CODE | |
| LOW | tests/unit/core/test_execution_preferences.py | 1 | CODE | |
| LOW | tests/unit/core/test_hitl_state.py | 1 | CODE | |
| LOW | tests/unit/core/test_hitl_resume.py | 1 | CODE | |
| LOW | tests/unit/core/test_runtime_transition.py | 3 | CODE | |
| LOW | tests/unit/core/test_seed_project_path_callers.py | 8 | CODE | |
| LOW | tests/unit/core/test_session_signal.py | 3 | CODE | |
| LOW | tests/unit/core/test_project_paths.py | 3 | CODE | |
| LOW | tests/unit/core/test_git_workflow.py | 3 | CODE | |
| LOW | tests/unit/core/test_session_signal_projection.py | 3 | CODE | |
| LOW | tests/unit/core/test_worktree.py | 3 | CODE | |
| LOW | tests/unit/copilot/test_model_discovery.py | 3 | CODE | |
| LOW | tests/unit/copilot/test_cli_policy.py | 3 | CODE | |
| LOW | tests/unit/copilot/test_permissions.py | 3 | CODE | |
| LOW | tests/unit/config/test_loader_env.py | 3 | CODE | |
| LOW | tests/unit/auto/test_inverted_interview_intent_guard.py | 1 | CODE | |
| LOW | tests/unit/auto/test_seed_repairer_bounded.py | 10 | CODE | |
| LOW | tests/unit/auto/conftest.py | 20 | CODE | |
| LOW | tests/unit/auto/test_safe_default_lateral_escalation.py | 33 | CODE | |
| LOW | …/unit/auto/test_pipeline_interview_deadline_closure.py | 29 | CODE | |
| LOW | tests/unit/auto/test_pipeline_ralph_handoff.py | 9 | CODE | |
| LOW | tests/unit/auto/test_auto_policies.py | 1 | CODE | |
| LOW | tests/unit/auto/test_interview_stagnation_lateral.py | 19 | CODE | |
| LOW | tests/unit/auto/test_pipeline_runtime_probe_envelope.py | 13 | CODE | |
| LOW | tests/unit/auto/test_runtime_semantics.py | 10 | CODE | |
| LOW | tests/unit/auto/test_answer_source_log.py | 3 | CODE | |
| LOW | …ts/unit/auto/test_pipeline_interview_observer_drain.py | 25 | CODE | |
| LOW | tests/unit/auto/test_answerer_via_domain_profile.py | 13 | CODE | |
| LOW | tests/unit/auto/test_821_acceptance_matrix.py | 3 | CODE | |
| LOW | tests/unit/auto/test_state_provenance.py | 3 | CODE | |
| LOW | tests/unit/auto/test_safe_defaults_domain_profile.py | 8 | CODE | |
| LOW | tests/unit/auto/test_answer_refiner_adapter.py | 9 | CODE | |
| LOW | tests/unit/auto/test_task_classes.py | 14 | CODE | |
| LOW | tests/unit/auto/test_pipeline_oscillation_lateral.py | 16 | CODE | |
| LOW | tests/unit/auto/test_task_class_application.py | 3 | CODE | |
| LOW | tests/unit/auto/test_ledger_seed_brownfield.py | 3 | CODE | |
| LOW | tests/unit/auto/test_domain_inference.py | 18 | CODE | |
| LOW | tests/unit/auto/test_pipeline_domain_profile.py | 3 | CODE | |
| LOW | tests/unit/auto/test_pipeline_evaluate.py | 10 | CODE | |
| LOW | tests/unit/auto/test_auto_worktree.py | 1 | CODE | |
| LOW | tests/unit/auto/test_auto_fill.py | 8 | CODE | |
| 1518 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | project-context.md | 294 | except Exception: | CODE |
| LOW | tools/sync_github_project.py | 219 | except Exception as e: | STRING |
| MEDIUM | tools/sync_github_project.py | 237 | print("Error: issue_number must be an integer") | CODE |
| MEDIUM | tools/sync_github_project.py | 241 | print("Error: GITHUB_TOKEN environment variable not set") | CODE |
| LOW | tests/conftest.py | 96 | except Exception: | CODE |
| LOW | tests/unit/mcp/tools/test_run_evaluate_chaining.py | 77 | except Exception as exc: # noqa: BLE001 - diagnostics must not mask failures | CODE |
| LOW | tests/unit/mcp/tools/test_run_evaluate_chaining.py | 88 | except Exception as exc: # noqa: BLE001 | CODE |
| LOW | tests/unit/mcp/tools/test_run_evaluate_chaining.py | 93 | except Exception as exc: # noqa: BLE001 | CODE |
| LOW | tests/unit/mcp/tools/test_run_evaluate_chaining.py | 131 | except Exception as exc: # diagnostics must never mask the real failure | CODE |
| MEDIUM | …sts/unit/mcp/tools/test_auto_interview_construction.py | 2238 | def _run() -> None: | CODE |
| LOW | …sts/unit/mcp/tools/test_auto_interview_construction.py | 1482 | except Exception as exc: # noqa: BLE001 - spy captures the surfaced contract failure. | CODE |
| LOW | …sts/unit/mcp/tools/test_auto_interview_construction.py | 1633 | except Exception as exc: # noqa: BLE001 - spy captures the surfaced contract failure. | CODE |
| LOW | …sts/unit/mcp/tools/test_auto_interview_construction.py | 1790 | except Exception as exc: # noqa: BLE001 - spy captures the surfaced contract failure. | CODE |
| LOW | …sts/unit/mcp/tools/test_auto_interview_construction.py | 1942 | except Exception as exc: # noqa: BLE001 - spy captures the surfaced contract failure. | CODE |
| LOW | …sts/unit/mcp/tools/test_auto_interview_construction.py | 2106 | except Exception as exc: # noqa: BLE001 - spy captures the surfaced contract failure. | CODE |
| LOW | …sts/unit/mcp/tools/test_auto_interview_construction.py | 2241 | except Exception: | CODE |
| LOW | …sts/unit/mcp/tools/test_auto_interview_construction.py | 2325 | except Exception: | CODE |
| LOW⚡ | tests/unit/events/test_base.py | 22 | except Exception: | CODE |
| LOW⚡ | tests/unit/router/test_not_handled_resolution.py | 20 | except Exception as exc: # pragma: no cover - failure path should be explicit. | CODE |
| LOW | tests/canonical/test_canonical.py | 338 | except Exception as exc: # noqa: BLE001 | CODE |
| LOW | tests/canonical/conftest.py | 321 | except Exception as exc: # pragma: no cover - imports always succeed in CI | CODE |
| MEDIUM | docs/api/mcp.md | 932 | print(f"Error: {result.error}") # Never raises, returns error | CODE |
| LOW | scripts/version-check.py | 31 | except Exception: | CODE |
| LOW | scripts/version-check.py | 38 | except Exception: | CODE |
| LOW | scripts/version-check.py | 50 | except Exception: | CODE |
| LOW | scripts/version-check.py | 67 | except Exception: | CODE |
| LOW | scripts/version-check.py | 111 | except Exception: | CODE |
| LOW⚡ | scripts/version-check.py | 126 | except Exception: | CODE |
| LOW⚡ | scripts/version-check.py | 136 | except Exception: | CODE |
| LOW⚡ | scripts/version-check.py | 139 | except Exception: | CODE |
| LOW⚡ | scripts/version-check.py | 143 | except Exception: | CODE |
| LOW | scripts/version-check.py | 185 | except Exception: | CODE |
| LOW | scripts/ralph.py | 314 | except Exception as exc: | CODE |
| LOW | scripts/session-start.py | 33 | except Exception as e: | CODE |
| MEDIUM | scripts/session-start.py | 24 | def main() -> None: | CODE |
| LOW | scripts/manual-synapse-state-smoke.py | 326 | except Exception as exc: # noqa: BLE001 - manual harness reports exact failure. | CODE |
| MEDIUM | scripts/manual-synapse-state-smoke.py | 323 | def main() -> int: | CODE |
| LOW | scripts/install.sh | 314 | except Exception: | CODE |
| LOW | scripts/manual-synapse-smoke.py | 301 | except Exception as exc: # noqa: BLE001 - manual harness reports exact backend failure. | CODE |
| LOW | scripts/ralph-rewind.py | 183 | except Exception as exc: | CODE |
| LOW | scripts/keyword-detector.py | 165 | except Exception: | CODE |
| LOW | scripts/keyword-detector.py | 216 | except Exception: | CODE |
| LOW | scripts/keyword-detector.py | 282 | except Exception: | CODE |
| LOW | scripts/drift-monitor.py | 60 | except Exception: | CODE |
| LOW | .claude-plugin/skills/seed/SKILL.md | 420 | except Exception: | CODE |
| LOW | .claude-plugin/skills/setup/SKILL.md | 104 | except Exception: | CODE |
| LOW | .claude-plugin/skills/welcome/SKILL.md | 37 | except Exception: | CODE |
| LOW | .claude-plugin/skills/welcome/SKILL.md | 49 | except Exception: | CODE |
| LOW | .claude-plugin/skills/welcome/SKILL.md | 95 | except Exception: | CODE |
| LOW | .claude-plugin/skills/welcome/SKILL.md | 273 | except Exception: | CODE |
| LOW | .claude-plugin/skills/welcome/SKILL.md | 300 | except Exception: | CODE |
| LOW | skills/seed/SKILL.md | 434 | except Exception: | CODE |
| LOW | skills/setup/SKILL.md | 104 | except Exception: | CODE |
| LOW | skills/welcome/SKILL.md | 37 | except Exception: | CODE |
| LOW | skills/welcome/SKILL.md | 49 | except Exception: | CODE |
| LOW | skills/welcome/SKILL.md | 95 | except Exception: | CODE |
| LOW | skills/welcome/SKILL.md | 274 | except Exception: | CODE |
| LOW | skills/welcome/SKILL.md | 301 | except Exception: | CODE |
| LOW | src/ouroboros/__init__.py | 23 | except Exception: | CODE |
| LOW | src/ouroboros/core/context.py | 166 | except Exception as e: | CODE |
| 448 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/unit/plugin/test_manifest_schema_0_4.py | 424 | def _set_permission_required(payload: dict, scope: str, required: bool) -> None: | CODE |
| LOW | …/unit/orchestrator/workflow_ir_conformance_fixtures.py | 127 | __all__ = [ | CODE |
| LOW | tests/integration/mcp/conftest.py | 537 | def set_data(self, key: str, value: str) -> None: | CODE |
| LOW | tests/conformance/workflow_ir/fixtures.py | 510 | __all__ = [ | CODE |
| LOW | src/ouroboros/copilot_permissions.py | 101 | __all__ = [ | CODE |
| LOW | src/ouroboros/runtime_instruction_artifacts.py | 204 | __all__ = [ | CODE |
| LOW | src/ouroboros/__init__.py | 26 | __all__ = ["__version__", "main"] | CODE |
| LOW | src/ouroboros/sandbox.py | 34 | __all__ = ["SandboxClass"] | CODE |
| LOW | src/ouroboros/claude_permissions.py | 55 | __all__ = [ | CODE |
| LOW | src/ouroboros/codex_permissions.py | 122 | __all__ = [ | CODE |
| LOW | src/ouroboros/pm/renderer.py | 42 | __all__ = [ | CODE |
| LOW | src/ouroboros/pm/__init__.py | 16 | __all__ = [ | CODE |
| LOW | src/ouroboros/core/session_signal.py | 419 | __all__ = [ | CODE |
| LOW | src/ouroboros/core/hitl_resume.py | 241 | __all__ = [ | CODE |
| LOW | src/ouroboros/core/ontology_questions.py | 455 | __all__ = [ | CODE |
| LOW | src/ouroboros/core/session_signal_projection.py | 218 | __all__ = [ | CODE |
| LOW | src/ouroboros/core/seed_contract.py | 86 | __all__ = [ | CODE |
| LOW | src/ouroboros/core/runtime_transition.py | 476 | __all__ = [ | CODE |
| LOW | src/ouroboros/core/retry.py | 82 | __all__ = ["BASE_TRANSIENT_PATTERNS", "is_transient_error", "retry_async"] | CODE |
| LOW | src/ouroboros/core/hitl_state.py | 420 | __all__ = [ | CODE |
| LOW | src/ouroboros/core/execution_preferences.py | 127 | __all__ = [ | CODE |
| LOW | src/ouroboros/core/conductor.py | 302 | __all__ = [ | CODE |
| LOW | src/ouroboros/core/seed_contract_prompt.py | 174 | __all__ = [ | CODE |
| LOW | src/ouroboros/core/ontology_aspect.py | 443 | __all__ = [ | CODE |
| LOW | src/ouroboros/core/ac_tree.py | 216 | def update_node(self, node: ACNode) -> None: | CODE |
| LOW | src/ouroboros/copilot/cli_policy.py | 211 | __all__ = [ | CODE |
| LOW | src/ouroboros/copilot/runtime_profile.py | 45 | __all__ = ["RUNTIME_PROFILE_TO_COPILOT_AGENT", "resolve_copilot_agent"] | CODE |
| LOW | src/ouroboros/config/__init__.py | 107 | __all__ = [ | CODE |
| LOW | src/ouroboros/config/loader.py | 352 | def _set_secure_permissions(file_path: Path) -> None: | CODE |
| LOW | src/ouroboros/auto/domain_profile.py | 26 | __all__ = [ | CODE |
| LOW | src/ouroboros/auto/handoff_contract.py | 98 | __all__ = [ | CODE |
| LOW | src/ouroboros/auto/listeners.py | 328 | __all__ = [ | CODE |
| LOW | src/ouroboros/auto/__init__.py | 33 | __all__ = [ | CODE |
| LOW⚡ | src/ouroboros/auto/runtime_routing.py | 112 | __all__ = [ | CODE |
| LOW | src/ouroboros/auto/task_classes.py | 53 | __all__ = [ | CODE |
| LOW | src/ouroboros/auto/resume_render.py | 87 | __all__ = ["render_resume_lines"] | CODE |
| LOW | src/ouroboros/auto/domain_inference.py | 147 | __all__ = [ | CODE |
| LOW | src/ouroboros/auto/provenance.py | 72 | __all__ = ["PROVENANCE_ENV_VAR", "resolve_provenance"] | CODE |
| LOW | src/ouroboros/auto/blocker_attribution.py | 62 | __all__ = ["authoring_backend_label", "record_authoring_backend"] | CODE |
| LOW | src/ouroboros/auto/lateral_routing.py | 220 | __all__ = [ | CODE |
| LOW | src/ouroboros/auto/recovery_plan.py | 195 | __all__ = [ | CODE |
| LOW | src/ouroboros/auto/task_class_application.py | 26 | __all__ = [ | CODE |
| LOW | src/ouroboros/auto/profiles/research.py | 16 | __all__ = ["RESEARCH_PROFILE"] | CODE |
| LOW | src/ouroboros/auto/profiles/__init__.py | 10 | __all__ = ["CODING_PROFILE", "RESEARCH_PROFILE", "register_default_profiles"] | CODE |
| LOW | src/ouroboros/tui/events.py | 1128 | __all__ = [ | CODE |
| LOW | src/ouroboros/tui/__init__.py | 21 | __all__ = ["OuroborosTUI"] | CODE |
| LOW⚡ | src/ouroboros/tui/app.py | 470 | def _update_state_from_event(self, event: BaseEvent) -> None: | CODE |
| LOW⚡ | src/ouroboros/tui/app.py | 1086 | def set_pause_callback(self, callback: Any) -> None: | CODE |
| LOW⚡ | src/ouroboros/tui/app.py | 1089 | def set_resume_callback(self, callback: Any) -> None: | CODE |
| LOW⚡ | src/ouroboros/tui/app.py | 1092 | def update_ac_tree(self, tree_data: dict[str, Any]) -> None: | CODE |
| LOW | src/ouroboros/tui/app.py | 551 | def set_execution(self, execution_id: str, session_id: str = "") -> None: | CODE |
| LOW | src/ouroboros/tui/app.py | 1178 | __all__ = ["OuroborosTUI"] | CODE |
| LOW | src/ouroboros/tui/screens/execution.py | 334 | def update_phase_output(self, phase: str, output: str) -> None: | CODE |
| LOW | src/ouroboros/tui/screens/execution.py | 369 | def update_state(self, state: TUIState) -> None: | CODE |
| LOW | src/ouroboros/tui/screens/execution.py | 488 | __all__ = ["EventTimelineItem", "ExecutionScreen", "PhaseOutputPanel"] | CODE |
| LOW | src/ouroboros/tui/screens/__init__.py | 18 | __all__ = [ | CODE |
| LOW | src/ouroboros/tui/screens/lineage_selector.py | 168 | __all__ = ["LineageSelectorScreen"] | CODE |
| LOW | src/ouroboros/tui/screens/dashboard_v3.py | 384 | def update_tool_history(self, history: list[dict[str, Any]]) -> None: | CODE |
| LOW | src/ouroboros/tui/screens/dashboard_v3.py | 1016 | __all__ = [ | CODE |
| LOW⚡ | src/ouroboros/tui/screens/dashboard_v3.py | 546 | def update_tree(self, tree_data: dict[str, Any]) -> None: | STRING |
| 284 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | tests/integration/mcp/conftest.py | 177 | Call a tool. Args: name: Tool name. arguments: Tool arguments. Returns: | STRING |
| HIGH | tests/integration/mcp/conftest.py | 240 | Read a resource. Args: uri: Resource URI. Returns: Mock resource content. | STRING |
| HIGH | tests/integration/mcp/conftest.py | 297 | Get a filled prompt. Args: name: Prompt name. arguments: Prompt arguments. Ret | STRING |
| HIGH | src/ouroboros/core/lineage.py | 481 | Return lineage truncated to the given generation. The truncated lineage has ACTIVE status, ready for continued | STRING |
| HIGH | src/ouroboros/config/loader.py | 379 | Create default configuration files. Creates config.yaml and credentials.yaml with default templates in the spec | STRING |
| HIGH | src/ouroboros/config/loader.py | 449 | Load configuration from YAML file. Loads and validates configuration from the specified path or the default ~/. | STRING |
| HIGH | src/ouroboros/config/loader.py | 514 | Load credentials from YAML file. Loads and validates credentials from the specified path or the default ~/.ouro | STRING |
| HIGH | src/ouroboros/auto/ledger_seed.py | 232 | Synthesize a degraded but executable Seed from an incomplete ledger. The primary use case is the interview-deadline | STRING |
| HIGH | src/ouroboros/providers/gemini_event_normalizer.py | 131 | Normalize a single raw output line from the Gemini CLI. The function attempts JSON parsing first (when the stri | STRING |
| HIGH | src/ouroboros/providers/gemini_event_normalizer.py | 184 | Parse and normalise a JSON event line. Args: stripped: The stripped version of the line. | STRING |
| HIGH | src/ouroboros/providers/litellm_adapter.py | 311 | Make the raw completion call. Args: messages: The conversation messages. config: The co | STRING |
| HIGH | src/ouroboros/providers/opencode_adapter.py | 203 | Normalize a model name for the OpenCode CLI. Strips whitespace and rejects the sentinel ``"default"`` value. | STRING |
| HIGH | src/ouroboros/providers/codex_cli_stream.py | 170 | Yield decoded lines from a runtime subprocess stdout/stderr stream. This is the orchestrator-runtime superset of :f | STRING |
| HIGH | src/ouroboros/providers/gemini_cli_adapter.py | 634 | Resolve the path to the ``gemini`` binary. Priority: 1. Explicit *cli_path* constructor argument | STRING |
| HIGH | src/ouroboros/runtime/child_env.py | 47 | Build an isolated environment for a nested backend CLI subprocess. Args: base_env: Environment to derive fr | STRING |
| HIGH | src/ouroboros/plugin/digest.py | 89 | Compute the canonical tree hash for the subtree at `root`. Args: root: Path to the directory whose contents | STRING |
| HIGH | src/ouroboros/plugin/manifest.py | 1105 | Load and validate a plugin manifest from `path`. Args: path: Filesystem path to an `ouroboros.plugin.json` | STRING |
| HIGH | src/ouroboros/plugin/ledger_adapter.py | 111 | Extract the original audit event from a wrapped envelope. Args: envelope: A dict produced by `wrap_plugin_e | STRING |
| HIGH | src/ouroboros/plugin/userlevel_registry.py | 88 | Register a program from its loaded manifest. Args: manifest: The validated `PluginManifest` (from ` | STRING |
| HIGH | src/ouroboros/plugin/agents/registry.py | 450 | Compose a new agent from existing one with overrides. Args: name: Name for the composed agent. | STRING |
| HIGH | src/ouroboros/plugin/agents/pool.py | 420 | Wait for and retrieve task result. Args: task_id: Task identifier. timeout: Maximum sec | STRING |
| HIGH | src/ouroboros/plugin/skills/registry.py | 406 | Load a skill from its SKILL.md file. Args: skill_md_path: Path to the SKILL.md file. Retur | STRING |
| HIGH | src/ouroboros/agents/loader.py | 57 | Load the full markdown content for an agent. Args: agent_name: File stem, e.g. ``"socratic-interviewer"``. | STRING |
| HIGH | src/ouroboros/mcp/tools/subagent.py | 647 | Build a SubagentPayload with validation. Args: tool_name: MCP tool name that triggered dispatch (e.g. "ouro | STRING |
| HIGH | src/ouroboros/mcp/tools/subagent.py | 1888 | Wrap a list of SubagentPayloads into a single MCPToolResult for parallel dispatch. The bridge plugin recognizes the | STRING |
| HIGH | src/ouroboros/mcp/tools/subagent.py | 1940 | Build N subagent payloads — one per lateral-thinking persona. Each payload targets a different persona so main LLM | STRING |
| HIGH | src/ouroboros/mcp/tools/subagent.py | 2476 | Build one SubagentPayload per fan-out request spec. This is the generic, request-shaped builder that lets any inter | STRING |
| HIGH | src/ouroboros/mcp/tools/background.py | 101 | Run the shared allocate -> guard -> agent-process -> start_job pipeline. Args: job_manager: The per-server | STRING |
| HIGH | src/ouroboros/mcp/server/adapter.py | 1158 | Create an Ouroboros MCP server with all tools and dependencies wired. This is a composition root that creates all s | STRING |
| HIGH | src/ouroboros/mcp/client/adapter.py | 720 | Create and connect an MCP client as an async context manager. Convenience function that creates an MCPClientAdapter | STRING |
| HIGH | src/ouroboros/cli/jsonc.py | 42 | Convert JSONC text to strict JSON by removing comments and trailing commas. Unlike a simple regex sweep, this parse | STRING |
| HIGH | src/ouroboros/cli/jsonc.py | 79 | Parse JSONC text into a Python object. Convenience wrapper that strips comments/trailing commas then delegates | STRING |
| HIGH | src/ouroboros/cli/commands/run.py | 145 | Load seed configuration from YAML file. Args: seed_file: Path to the seed YAML file. Returns: | STRING |
| HIGH | src/ouroboros/harness/deliver_gate.py | 184 | Load and normalize EventStore evidence for one AC deliver-gate check. ``execution_id`` is required so the deliver-g | STRING |
| HIGH | src/ouroboros/resilience/stagnation.py | 647 | Create appropriate event for a stagnation detection. Factory function that creates the correct event type based on | STRING |
| HIGH | src/ouroboros/persistence/checkpoint.py | 108 | Reconstruct checkpoint from dict. Args: data: Dict with checkpoint data. Returns: | STRING |
| HIGH | src/ouroboros/persistence/checkpoint.py | 184 | Sanitize seed_id to prevent path traversal attacks. Strips null bytes, removes path separators, Windows-reserve | STRING |
| HIGH | src/ouroboros/persistence/checkpoint.py | 411 | Get file path for checkpoint at specific rollback level. The seed_id is sanitized to prevent path traversal, an | STRING |
| HIGH | src/ouroboros/persistence/brownfield.py | 53 | Create a BrownfieldRepo from a dict. Accepts the same dict shape as the old ``BrownfieldEntry.from_dict()``. | STRING |
| HIGH | src/ouroboros/persistence/brownfield.py | 233 | Register a brownfield repository. If a repo with the same path already exists, it is updated (upsert). | STRING |
| HIGH | src/ouroboros/persistence/brownfield.py | 309 | Bulk-insert scanned repositories (is_default=False, desc=''). Each dict must have ``path`` and ``name`` keys. | STRING |
| HIGH | src/ouroboros/persistence/brownfield.py | 365 | List registered brownfield repositories with optional pagination. Args: offset: Number of rows to s | STRING |
| HIGH | src/ouroboros/persistence/brownfield.py | 485 | Set a repository as the sole default brownfield context. Clears the default flag on **all** other repos and set | STRING |
| HIGH | src/ouroboros/persistence/brownfield.py | 614 | Update the description of a registered repository. Args: path: Absolute filesystem path of the repo | STRING |
| HIGH | src/ouroboros/persistence/brownfield.py | 653 | Remove a brownfield repository registration. Args: path: Absolute filesystem path of the repo to re | STRING |
| HIGH | src/ouroboros/persistence/event_store.py | 528 | Replay all events for a specific aggregate. The operation uses a transaction for read consistency. Arg | STRING |
| HIGH | src/ouroboros/persistence/event_store.py | 580 | Get events for an aggregate after a given row ID. Incremental fetch that only returns new events since the last | STRING |
| HIGH | src/ouroboros/persistence/event_store.py | 680 | Get recent events, optionally filtered by type. Args: event_type: Optional event type to filter by. | STRING |
| HIGH | src/ouroboros/persistence/event_store.py | 932 | Query events with optional filters. Args: aggregate_id: Optional aggregate ID to filter by (e.g., s | STRING |
| HIGH | src/ouroboros/persistence/event_store.py | 1509 | Replay all events for a lineage aggregate. Convenience method for evolutionary loop lineage reconstruction. | STRING |
| HIGH | src/ouroboros/evaluation/checklist.py | 128 | Aggregate per-AC EvaluationResult objects into a checklist. Args: ac_texts: The acceptance criteria, in the | STRING |
| HIGH | src/ouroboros/bigbang/ambiguity.py | 687 | Parse LLM response into ScoreBreakdown. Args: response: Raw LLM response text. is_brown | STRING |
| HIGH | src/ouroboros/bigbang/interview.py | 325 | Deterministically select the best question candidate. Selection rule (no LLM judge): 1. Prefer the candidate t | STRING |
| HIGH | src/ouroboros/bigbang/question_classifier.py | 294 | Parse LLM classification response. Args: response: Raw LLM response text. original_ques | STRING |
| HIGH | src/ouroboros/bigbang/seed_generator.py | 695 | Parse LLM response into requirements dictionary. Args: response: Raw LLM response text. Re | STRING |
| HIGH | src/ouroboros/bigbang/pm_interview.py | 1207 | Parse LLM response into PMSeed. Args: response: Raw LLM response text. interview_id: So | STRING |
| HIGH | src/ouroboros/orchestrator/adapter.py | 1462 | Execute a task and yield progress messages. This is an async generator that streams messages as Claude works. | STRING |
| HIGH | src/ouroboros/orchestrator/opencode_runtime.py | 472 | Assemble the CLI argument list for ``opencode run``. The prompt is **not** included in argv — it is piped via s | STRING |
| HIGH | src/ouroboros/orchestrator/opencode_runtime.py | 555 | Yield decoded lines from a subprocess stdout stream. Reads raw bytes in *chunk_size* increments, decodes UTF-8 | STRING |
| HIGH | src/ouroboros/orchestrator/opencode_runtime.py | 911 | Dispatch an exact-prefix intercept to a local MCP handler. Looks up the handler by ``intercept.mcp_tool``, invo | STRING |
| 6 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH⚡ | tests/unit/evaluation/test_detector.py | 138 | adapter = _FakeAdapter(response=json.dumps({"test": "npm test && rm -rf /"})) | CODE |
| HIGH⚡ | tests/unit/evaluation/test_languages.py | 172 | self._write_toml(tmp_path, 'test = "npm test && rm -rf /"\n') | CODE |
| HIGH⚡ | tests/unit/orchestrator/test_parallel_executor.py | 1271 | data={"tool_input": {"command": "/bin/zsh -lc 'pwd && rg --files'"}}, | CODE |
| HIGH⚡ | tests/unit/orchestrator/test_parallel_executor.py | 1306 | "tool_input": {"command": "/bin/bash -lc 'cd /workspace && python scripts/generate.py'"} | CODE |
| HIGH⚡ | tests/unit/orchestrator/test_parallel_executor.py | 1324 | "command": "/bin/zsh -lc 'python setup.py && python scripts/generate.py'" | CODE |
| HIGH⚡ | tests/unit/orchestrator/test_parallel_executor.py | 2446 | "command": "/bin/bash -lc 'cd /workspace && pytest tests/test_foo.py | grep PASSED'" | CODE |
| HIGH⚡ | tests/unit/orchestrator/test_parallel_executor.py | 2463 | "/bin/bash -lc 'set -o pipefail && cd /workspace && " | CODE |
| HIGH⚡ | tests/unit/orchestrator/test_parallel_executor.py | 2481 | "command": "/bin/bash -lc 'cd /workspace && pytest tests/test_foo.py | cat'" | CODE |
| HIGH⚡ | tests/unit/orchestrator/test_parallel_executor.py | 2520 | "pytest tests/test_foo.py 2>&1 | cat && set -o pipefail'" | CODE |
| HIGH | tests/unit/orchestrator/test_parallel_executor.py | 2425 | "/bin/bash -lc 'cd /workspace && python -m ruff check " | CODE |
| HIGH⚡ | tests/unit/router/test_dispatch.py | 1202 | "expected string, finite number, boolean, null, list, or mapping" | CODE |
| HIGH⚡ | tests/unit/router/test_dispatch.py | 1210 | "expected string, finite number, boolean, null, list, or mapping" | CODE |
| HIGH⚡ | tests/unit/router/test_dispatch.py | 1218 | "expected string, finite number, boolean, null, list, or mapping" | CODE |
| HIGH⚡ | tests/unit/router/test_dispatch.py | 1226 | "expected string, finite number, boolean, null, list, or mapping" | CODE |
| HIGH | tests/unit/router/test_dispatch.py | 1287 | "expected string, finite number, boolean, null, list, or mapping" | CODE |
| HIGH | tests/unit/router/test_router_resolution_pipeline.py | 528 | "expected string, finite number, boolean, null, list, or mapping" | STRING |
| HIGH | tests/unit/router/test_typed_frontmatter_fields.py | 150 | "expected string, finite number, boolean, null, list, or mapping" | CODE |
| HIGH | tests/unit/router/test_dispatch_result_shapes.py | 330 | "expected string, finite number, boolean, null, list, or mapping" | CODE |
| HIGH⚡ | tests/unit/router/test_invalid_dispatch_input_types.py | 40 | "expected string, finite number, boolean, null, list, or mapping" | STRING |
| HIGH⚡ | tests/unit/router/test_invalid_dispatch_input_types.py | 48 | "expected string, finite number, boolean, null, list, or mapping" | STRING |
| HIGH⚡ | tests/unit/router/test_invalid_dispatch_input_types.py | 56 | "expected string, finite number, boolean, null, list, or mapping" | STRING |
| HIGH | src/ouroboros/providers/claude_code_adapter.py | 399 | # Primitive schemas (string, number, boolean, null) | COMMENT |
| HIGH | src/ouroboros/cli/commands/setup.py | 1868 | const TIMEOUT_MS = Number(process.env.OUROBOROS_PI_BRIDGE_TIMEOUT_MS || 6 * 60 * 60 * 1000); | CODE |
| HIGH | src/ouroboros/cli/commands/setup.py | 1880 | if (out && err) return `${{out}}\\n\\n${{err}}`; | CODE |
| HIGH | src/ouroboros/cli/commands/setup.py | 1881 | return out || err || "(no output)"; | CODE |
| HIGH | src/ouroboros/cli/commands/mcp.py | 302 | f"[[ -f ~/.zshrc ]] && source ~/.zshrc 2>/dev/null; {dump_cmd}", | CODE |
| HIGH | src/ouroboros/cli/commands/mcp.py | 309 | f"[[ -f ~/.bashrc ]] && source ~/.bashrc 2>/dev/null; {dump_cmd}", | CODE |
| HIGH | src/ouroboros/dashboard_web/page.py | 98 | if (n == null) return ""; | CODE |
| HIGH⚡ | src/ouroboros/dashboard_web/page.py | 114 | document.getElementById("m-frugality").textContent = fr && fr.status | CODE |
| HIGH⚡ | src/ouroboros/dashboard_web/page.py | 121 | if (retro && retro.retry_associated_attempts) | CODE |
| HIGH⚡ | src/ouroboros/dashboard_web/page.py | 122 | retroParts.push(`retry-associated ${fmtTokens(retro.retry_associated_tokens) || "0 tok"}`); | CODE |
| HIGH⚡ | src/ouroboros/dashboard_web/page.py | 123 | if (retro && retro.unaccepted_attempts) | CODE |
| HIGH⚡ | src/ouroboros/dashboard_web/page.py | 124 | retroParts.push(`unaccepted ${fmtTokens(retro.unaccepted_tokens) || "0 tok"}`); | CODE |
| HIGH⚡ | src/ouroboros/dashboard_web/page.py | 126 | retroParts.push(`coverage ${retro.measured_attempts} measured / ${retro.unknown_attempts} unknown / ${retro.invalid_ | CODE |
| HIGH | src/ouroboros/dashboard_web/page.py | 153 | const ac = (c.ac_index!=null) ? `<span class="ac">AC ${esc(c.ac_index)}</span>` : ""; | CODE |
| HIGH | src/ouroboros/dashboard_web/page.py | 192 | return null; | CODE |
| HIGH | src/ouroboros/orchestrator/frugality_proof.py | 144 | # rather than counted (which would make the aggregate reduction undefined). | COMMENT |
| HIGH | src/ouroboros/orchestrator/evidence/shell_parsing.py | 115 | runtime-recorded shell wrapper such as ``cd /work && python scripts/gen.py``. | STRING |
| HIGH⚡ | src/ouroboros/orchestrator/evidence/claims.py | 192 | ``/bin/zsh -lc 'cd /workspace && python -m unittest "test_hello.py"'`` | STRING |
| HIGH | src/ouroboros/router/dispatch.py | 72 | _MCP_FRONTMATTER_VALUE_TYPES = "string, finite number, boolean, null, list, or mapping" | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | tests/unit/pm/test_renderer.py | 0 | create a pmseed with sensible defaults for testing. | STRING |
| HIGH | tests/unit/bigbang/test_pm_document_generator.py | 0 | create a pmseed with sensible defaults for testing. | STRING |
| HIGH | tests/unit/bigbang/test_pm_document_writer.py | 0 | create a pmseed with sensible defaults for testing. | STRING |
| HIGH | tests/unit/mcp/tools/test_ac_tree_hud_footer.py | 0 | provide an initialized in-memory event store and dispose it after each test. | STRING |
| HIGH | tests/unit/mcp/tools/test_ac_tree_hud_max_nodes.py | 0 | provide an initialized in-memory event store and dispose it after each test. | STRING |
| HIGH | tests/unit/mcp/tools/test_definitions.py | 0 | provide an initialized in-memory event store and dispose it after each test. | STRING |
| HIGH | tests/unit/mcp/tools/test_ac_tree_hud_handler.py | 0 | provide an initialized in-memory event store and dispose it after each test. | STRING |
| HIGH | …s/unit/mcp/tools/test_ac_tree_hud_handler_completed.py | 0 | provide an initialized in-memory event store for hud handler tests. | STRING |
| HIGH | …/mcp/tools/test_ac_tree_hud_handler_invalid_session.py | 0 | provide an initialized in-memory event store for hud handler tests. | STRING |
| HIGH | …t/mcp/tools/test_ac_tree_hud_handler_cursor_changed.py | 0 | provide an initialized in-memory event store for hud handler tests. | STRING |
| HIGH | …nit/mcp/tools/test_ac_tree_hud_handler_no_execution.py | 0 | provide an initialized in-memory event store for hud handler tests. | STRING |
| HIGH | …sts/unit/mcp/tools/test_ac_tree_hud_handler_waiting.py | 0 | provide an initialized in-memory event store for hud handler tests. | STRING |
| HIGH | tests/unit/bigbang/test_pm_interview.py | 0 | create a pminterviewengine with mocked dependencies. | STRING |
| HIGH | tests/unit/bigbang/test_pm_interview_brownfield_db.py | 0 | create a pminterviewengine with mocked dependencies. | STRING |
| HIGH | tests/unit/bigbang/test_decide_later_items.py | 0 | create a pminterviewengine with mocked dependencies. | STRING |
| HIGH | tests/unit/bigbang/test_classifier_context.py | 0 | create a pminterviewengine with mocked dependencies. | STRING |
| HIGH | tests/unit/orchestrator/test_codex_cli_runtime.py | 0 | removed local parser helpers should not remain referenced by the runtime. | STRING |
| HIGH | tests/unit/orchestrator/test_opencode_runtime.py | 0 | removed local parser helpers should not remain referenced by the runtime. | STRING |
| HIGH | tests/unit/orchestrator/test_hermes_runtime.py | 0 | removed local parser helpers should not remain referenced by the runtime. | STRING |
| HIGH | src/ouroboros/tui/screens/execution.py | 0 | initialize debug screen. args: state: initial tui state. name: screen name. id: screen id. classes: css classes. | STRING |
| HIGH | src/ouroboros/tui/screens/logs.py | 0 | initialize debug screen. args: state: initial tui state. name: screen name. id: screen id. classes: css classes. | STRING |
| HIGH | src/ouroboros/tui/screens/debug.py | 0 | initialize debug screen. args: state: initial tui state. name: screen name. id: screen id. classes: css classes. | STRING |
| HIGH | src/ouroboros/tui/screens/execution.py | 0 | update the entire state. args: state: new tui state. | STRING |
| HIGH | src/ouroboros/tui/screens/logs.py | 0 | update the entire state. args: state: new tui state. | STRING |
| HIGH | src/ouroboros/tui/screens/debug.py | 0 | update the entire state. args: state: new tui state. | STRING |
| HIGH | src/ouroboros/providers/pi_llm_adapter.py | 0 | validate extracted json against the requested response_format. | STRING |
| HIGH | src/ouroboros/providers/gjc_llm_adapter.py | 0 | validate extracted json against the requested response_format. | STRING |
| HIGH | src/ouroboros/providers/goose_cli_adapter.py | 0 | validate extracted json against the requested response_format. | STRING |
| HIGH | src/ouroboros/providers/ourocode_llm_adapter.py | 0 | validate extracted json against the requested response_format. | STRING |
| HIGH | src/ouroboros/providers/codex_cli_adapter.py | 0 | resolve an explicit cli path from config helpers when available. | STRING |
| HIGH | src/ouroboros/orchestrator/grok_cli_runtime.py | 0 | resolve an explicit cli path from config helpers when available. | STRING |
| HIGH | src/ouroboros/orchestrator/codex_cli_runtime.py | 0 | resolve an explicit cli path from config helpers when available. | STRING |
| HIGH | src/ouroboros/verification/extractor.py | 0 | resolve implicit default model while preserving explicit caller pins. | STRING |
| HIGH | src/ouroboros/evaluation/semantic.py | 0 | resolve implicit default model while preserving explicit caller pins. | STRING |
| HIGH | src/ouroboros/bigbang/ambiguity.py | 0 | resolve implicit default model while preserving explicit caller pins. | STRING |
| HIGH | src/ouroboros/bigbang/question_classifier.py | 0 | resolve implicit default model while preserving explicit caller pins. | STRING |
| HIGH | src/ouroboros/bigbang/pm_document.py | 0 | resolve implicit default model while preserving explicit caller pins. | STRING |
| HIGH | src/ouroboros/bigbang/explore.py | 0 | resolve implicit default model while preserving explicit caller pins. | STRING |
| HIGH | src/ouroboros/bigbang/pm_interview.py | 0 | resolve implicit default model while preserving explicit caller pins. | STRING |
| HIGH | src/ouroboros/orchestrator/hermes_runtime.py | 0 | identify final recoverable intercept failures that should fall through. | STRING |
| HIGH | src/ouroboros/orchestrator/skill_intercept.py | 0 | identify final recoverable intercept failures that should fall through. | STRING |
| HIGH | src/ouroboros/orchestrator/codex_cli_runtime.py | 0 | identify final recoverable intercept failures that should fall through. | STRING |
| HIGH | src/ouroboros/orchestrator/hermes_runtime.py | 0 | preserve runtime-owned warnings for matched skills with bad metadata. | STRING |
| HIGH | src/ouroboros/orchestrator/opencode_runtime.py | 0 | preserve runtime-owned warnings for matched skills with bad metadata. | STRING |
| HIGH | src/ouroboros/orchestrator/codex_cli_runtime.py | 0 | preserve runtime-owned warnings for matched skills with bad metadata. | STRING |
| HIGH | src/ouroboros/orchestrator/hermes_runtime.py | 0 | attach interview session metadata to the runtime handle. | STRING |
| HIGH | src/ouroboros/orchestrator/command_dispatcher.py | 0 | attach interview session metadata to the runtime handle. | STRING |
| HIGH | src/ouroboros/orchestrator/codex_cli_runtime.py | 0 | attach interview session metadata to the runtime handle. | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tests/unit/mcp/tools/test_definitions.py | 263 | # Verify-by-default: fresh runs enforce fat-harness unless the seed | COMMENT |
| MEDIUM | tests/unit/cli/test_harness.py | 423 | # The bot reproduced: ``harness show <abs-path> --traces-root <root>`` served | COMMENT |
| MEDIUM⚡ | tests/unit/config_tui/test_launcher.py | 21 | ("1", True, True), # harness env wins even on a TTY | CODE |
| MEDIUM⚡ | tests/unit/orchestrator/test_model_routing.py | 672 | # Cross-harness redispatch swaps in a codex adapter mid-run; a router built | COMMENT |
| MEDIUM | tests/unit/orchestrator/test_frugality_producers.py | 940 | # No structured facts array → the common non-fat-harness case → skip silently. | COMMENT |
| MEDIUM⚡ | tests/unit/orchestrator/test_profile_strategy.py | 139 | # Bot finding on #891 r7: the harness has no structured BLOCKED | COMMENT |
| MEDIUM | tests/unit/orchestrator/test_parallel_executor.py | 8526 | # Isolate the stall→failure conversion: cross-harness redispatch is a | COMMENT |
| MEDIUM | tests/unit/orchestrator/test_parallel_executor.py | 8631 | # same-runtime budget is only 'exhausted' (so alt-harness may run) on | COMMENT |
| MEDIUM | tests/unit/orchestrator/test_parallel_executor.py | 8713 | # counter cap — yet the alternate harness was still consulted exactly once. | COMMENT |
| MEDIUM | …chestrator/test_parallel_executor_verify_by_default.py | 236 | # loop early-stops before the counter cap and reaches the alt-harness hook. | COMMENT |
| MEDIUM | tests/unit/orchestrator/test_antigravity_cli_runtime.py | 26 | # --- Minimal fake subprocess harness (mirrors test_codex_cli_runtime) ------- | COMMENT |
| MEDIUM⚡ | tests/unit/orchestrator/test_phase_wrappers.py | 86 | # merging with the harness instructions below. Every non-empty | COMMENT |
| MEDIUM | tests/unit/orchestrator/test_grok_cli_runtime.py | 21 | # --- Minimal fake subprocess harness (mirrors test_codex_cli_runtime) ------- | COMMENT |
| MEDIUM | …sts/unit/orchestrator/test_baseline_metrics_capture.py | 1 | """Tests for the recorded #961 fat-harness baseline capture artifact.""" | STRING |
| MEDIUM | tests/unit/orchestrator/test_shadow_replay.py | 448 | # -- Layer 2: the harness itself --------------------------------------------- | COMMENT |
| MEDIUM | tests/unit/orchestrator/test_shadow_replay.py | 1162 | # prompts are an explicit limitation of this experiment harness. | COMMENT |
| MEDIUM | tests/unit/orchestrator/test_shadow_replay.py | 1305 | # Flag off → the harness is never entered: no factory build, no event. | COMMENT |
| MEDIUM | tests/canonical/test_canonical.py | 428 | # exists in source). The harness must not be subject to the same defect. | COMMENT |
| MEDIUM | tests/canonical/cli-todo/expected.yaml | 22 | # Live product-reality smoke contract (#1452). The live harness executes | COMMENT |
| MEDIUM | tests/conformance/workflow_ir/__init__.py | 1 | # Workflow IR conformance harness — Wave 1 N-2 (parent #956, umbrella #1131). | COMMENT |
| MEDIUM | …nformance/workflow_ir/test_plugin_firewall_contract.py | 165 | This is the load-bearing #1131 contract: when the harness projects | STRING |
| MEDIUM | …nformance/workflow_ir/test_plugin_firewall_contract.py | 181 | # The firewall outcome the harness MUST consume. | COMMENT |
| MEDIUM | scripts/manual-synapse-state-smoke.py | 326 | except Exception as exc: # noqa: BLE001 - manual harness reports exact failure. | CODE |
| MEDIUM | scripts/manual-synapse-smoke.py | 301 | except Exception as exc: # noqa: BLE001 - manual harness reports exact backend failure. | CODE |
| MEDIUM | src/ouroboros/orchestrator_stage.py | 4 | agreed in #476 assigns a different harness per pipeline stage: | STRING |
| MEDIUM | src/ouroboros/auto/domain_inference.py | 53 | # both more robust and easier to reason about: | COMMENT |
| MEDIUM | src/ouroboros/auto/pipeline.py | 471 | # the pipeline does not invoke probes — the L0 manual harness owns | COMMENT |
| MEDIUM | src/ouroboros/mcp/tools/authoring_handlers.py | 2375 | # dependency-injection / test-harness path into a hard failure. | COMMENT |
| MEDIUM | src/ouroboros/cli/commands/auto.py | 856 | # before printing so the status surface stays robust against | COMMENT |
| MEDIUM | src/ouroboros/config_tui/app.py | 133 | # the robust blank check across widget interactions. | COMMENT |
| MEDIUM | src/ouroboros/orchestrator/runner.py | 3789 | # Build prompts with strategy. The fat-harness default path must use | COMMENT |
| MEDIUM | src/ouroboros/orchestrator/runner.py | 3824 | # Check for fat-harness / parallel execution mode. Fat-harness | COMMENT |
| MEDIUM | src/ouroboros/orchestrator/runner.py | 744 | # Opt-in shadow-replay baseline harness (frugality-proof AC5). Read ONCE | STRING |
| MEDIUM⚡ | src/ouroboros/orchestrator/workflow_ir.py | 287 | # evidence-bearing artifacts in the fat-harness loop. | COMMENT |
| MEDIUM⚡ | src/ouroboros/orchestrator/workflow_ir.py | 297 | # input_schema_ref so the harness can validate the payload shape | COMMENT |
| MEDIUM | src/ouroboros/orchestrator/model_routing.py | 518 | # Cross-harness redispatch swaps adapters mid-run; a model id only runs on the | COMMENT |
| MEDIUM | src/ouroboros/orchestrator/baseline_metrics_capture.py | 1 | """Recorded fixture baseline for the #961 fat-harness metrics gate. | STRING |
| MEDIUM | src/ouroboros/orchestrator/baseline_metrics_capture.py | 195 | "# #961 fat-harness baseline metrics capture", | CODE |
| MEDIUM⚡ | src/ouroboros/orchestrator/failure_taxonomy.py | 63 | # Cross-harness recovery (PR-X): re-dispatch the SAME AC on a *different* | COMMENT |
| MEDIUM⚡ | src/ouroboros/orchestrator/failure_taxonomy.py | 65 | # REDISPATCH (re-split, same runtime), this is the meta-harness move no | COMMENT |
| MEDIUM⚡ | src/ouroboros/orchestrator/failure_taxonomy.py | 66 | # single-vendor harness can make — it swaps the vendor, not the tier or the | COMMENT |
| MEDIUM | src/ouroboros/orchestrator/baseline_metrics.py | 158 | """Build a deterministic report for the #961 fat-harness gates. | STRING |
| MEDIUM⚡ | src/ouroboros/orchestrator/parallel_executor.py | 58 | # Import the harness submodules directly, NOT the ``ouroboros.harness`` package | COMMENT |
| MEDIUM⚡ | src/ouroboros/orchestrator/parallel_executor.py | 59 | # aggregate: ``harness.__init__`` pulls in ``deliver_routing`` which imports from | COMMENT |
| MEDIUM⚡ | src/ouroboros/orchestrator/parallel_executor.py | 61 | # partially-initialized ``harness`` during ``orchestrator`` package import. The | COMMENT |
| MEDIUM⚡ | src/ouroboros/orchestrator/parallel_executor.py | 949 | # Cross-harness recovery (PR-X X1): when a terminally failing AC is | COMMENT |
| MEDIUM⚡ | src/ouroboros/orchestrator/parallel_executor.py | 959 | # AC identities that have already consumed their one alt-harness redispatch. | COMMENT |
| MEDIUM | src/ouroboros/orchestrator/parallel_executor.py | 919 | # Opt-in shadow-replay baseline harness (frugality-proof AC5). Default OFF: | COMMENT |
| MEDIUM | src/ouroboros/orchestrator/parallel_executor.py | 2517 | # Stable re-run bundle for a possible cross-harness redispatch (PR-X X1): | COMMENT |
| MEDIUM | src/ouroboros/orchestrator/parallel_executor.py | 2568 | # one cross-harness redispatch. Earlier attempts fall through | COMMENT |
| MEDIUM | src/ouroboros/orchestrator/parallel_executor.py | 2620 | # sentinel), so only try a cross-harness redispatch once that | COMMENT |
| MEDIUM | src/ouroboros/orchestrator/parallel_executor.py | 2716 | # not trigger a second harness hop. | COMMENT |
| MEDIUM | src/ouroboros/orchestrator/parallel_executor.py | 2841 | # backend, so passing it to the alt-harness executor is safe. | COMMENT |
| MEDIUM | src/ouroboros/orchestrator/parallel_executor.py | 3913 | # accepted AND emitted a structured evidence claim (the fat-harness | COMMENT |
| MEDIUM | src/ouroboros/orchestrator/parallel_executor.py | 3915 | # non-fat-harness leaf has no structured claim surface and is skipped. | COMMENT |
| MEDIUM | src/ouroboros/orchestrator/parallel_executor.py | 3928 | # harness re-executes it at the parent tier/effort in an ISOLATED | COMMENT |
| MEDIUM | src/ouroboros/orchestrator/parallel_executor.py | 4212 | # leaf, typed record, and harness verifier have all passed; exact | COMMENT |
| MEDIUM | src/ouroboros/orchestrator/parallel_executor.py | 4663 | # cross-harness redispatch until the V3 loop below is spent. | COMMENT |
| MEDIUM | src/ouroboros/orchestrator/parallel_executor.py | 4738 | # has reached the configured cap. Only then may cross-harness | COMMENT |
| MEDIUM | src/ouroboros/orchestrator/parallel_executor.py | 4861 | # its recovery budget is effectively spent — the alt-harness | COMMENT |
| 8 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/conftest.py | 59 | CODE | |
| LOW | tests/unit/auto/test_user_preference_and_floor.py | 949 | CODE | |
| LOW | tests/unit/tui/test_session_selector_replay.py | 43 | CODE | |
| LOW | tests/unit/mcp/test_job_manager.py | 1100 | CODE | |
| LOW | tests/unit/mcp/tools/test_start_auto.py | 628 | CODE | |
| LOW | tests/unit/mcp/tools/test_start_auto.py | 713 | CODE | |
| LOW | …sts/unit/mcp/tools/test_auto_interview_construction.py | 800 | CODE | |
| LOW | tests/unit/orchestrator/test_capabilities.py | 1010 | CODE | |
| LOW | tests/e2e/test_cli_commands.py | 165 | CODE | |
| LOW | scripts/version-check.py | 91 | CODE | |
| LOW | src/ouroboros/core/session_signal_projection.py | 114 | CODE | |
| LOW | src/ouroboros/core/security.py | 195 | CODE | |
| LOW | src/ouroboros/core/hitl_state.py | 82 | CODE | |
| LOW | src/ouroboros/core/seed.py | 483 | CODE | |
| LOW | src/ouroboros/core/json_utils.py | 57 | CODE | |
| LOW | src/ouroboros/auto/domain_profile.py | 279 | CODE | |
| LOW | src/ouroboros/auto/ledger.py | 409 | CODE | |
| LOW | src/ouroboros/auto/safe_defaults.py | 173 | CODE | |
| LOW | src/ouroboros/auto/seed_repairer.py | 107 | CODE | |
| LOW | src/ouroboros/auto/answerer.py | 143 | CODE | |
| LOW | src/ouroboros/auto/pipeline.py | 716 | CODE | |
| LOW | src/ouroboros/auto/pipeline.py | 868 | CODE | |
| LOW | src/ouroboros/auto/pipeline.py | 1296 | CODE | |
| LOW | src/ouroboros/auto/pipeline.py | 2758 | CODE | |
| LOW | src/ouroboros/auto/adapters.py | 998 | CODE | |
| LOW | src/ouroboros/tui/events.py | 796 | CODE | |
| LOW | src/ouroboros/tui/app.py | 417 | CODE | |
| LOW | src/ouroboros/tui/app.py | 470 | CODE | |
| LOW | src/ouroboros/tui/screens/execution.py | 284 | CODE | |
| LOW | src/ouroboros/tui/screens/dashboard_v3.py | 287 | CODE | |
| LOW | src/ouroboros/tui/screens/logs.py | 298 | CODE | |
| LOW | src/ouroboros/tui/screens/debug.py | 86 | CODE | |
| LOW | src/ouroboros/tui/screens/session_selector.py | 75 | CODE | |
| LOW | src/ouroboros/tui/components/event_log.py | 318 | CODE | |
| LOW | src/ouroboros/tui/components/progress.py | 251 | CODE | |
| LOW | src/ouroboros/tui/components/progress.py | 354 | CODE | |
| LOW | src/ouroboros/providers/gemini_event_normalizer.py | 219 | CODE | |
| LOW | src/ouroboros/providers/copilot_cli_adapter.py | 300 | CODE | |
| LOW | src/ouroboros/providers/copilot_cli_adapter.py | 431 | CODE | |
| LOW | src/ouroboros/providers/pi_llm_adapter.py | 260 | CODE | |
| LOW | src/ouroboros/providers/pi_llm_adapter.py | 332 | CODE | |
| LOW | src/ouroboros/providers/gjc_llm_adapter.py | 227 | CODE | |
| LOW | src/ouroboros/providers/gjc_llm_adapter.py | 245 | CODE | |
| LOW | src/ouroboros/providers/gjc_llm_adapter.py | 292 | CODE | |
| LOW | src/ouroboros/providers/gjc_llm_adapter.py | 359 | CODE | |
| LOW | src/ouroboros/providers/goose_cli_adapter.py | 253 | CODE | |
| LOW | src/ouroboros/providers/codex_cli_stream.py | 258 | CODE | |
| LOW | src/ouroboros/providers/codex_cli_adapter.py | 259 | CODE | |
| LOW | src/ouroboros/providers/codex_cli_adapter.py | 456 | CODE | |
| LOW | src/ouroboros/providers/codex_cli_adapter.py | 670 | CODE | |
| LOW | src/ouroboros/providers/gemini_cli_adapter.py | 311 | CODE | |
| LOW | src/ouroboros/providers/kiro_adapter.py | 239 | CODE | |
| LOW | src/ouroboros/providers/kiro_adapter.py | 274 | CODE | |
| LOW | src/ouroboros/providers/claude_code_adapter.py | 340 | CODE | |
| LOW | src/ouroboros/providers/claude_code_adapter.py | 522 | CODE | |
| LOW | src/ouroboros/providers/claude_code_adapter.py | 664 | CODE | |
| LOW | src/ouroboros/providers/claude_code_adapter.py | 1295 | CODE | |
| LOW | src/ouroboros/providers/claude_code_adapter.py | 1329 | CODE | |
| LOW | src/ouroboros/codex/artifacts.py | 417 | CODE | |
| LOW | src/ouroboros/plugin/firewall.py | 193 | CODE | |
| 186 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/unit/auto/test_domain_inference.py | 241 | reason="unmatched", | COMMENT |
| LOW | tests/unit/auto/test_domain_inference.py | 361 | # matcher: a goal like "Build a Python client library for the Foo API" | COMMENT |
| LOW | tests/unit/auto/test_domain_inference.py | 441 | ledger = _bare_ledger(goal) | COMMENT |
| LOW | tests/unit/auto/test_interview_pipeline.py | 4481 | max_rounds=3, | COMMENT |
| LOW | tests/unit/auto/test_interview_pipeline.py | 4601 | state.transition(AutoPhase.INTERVIEW, "resuming interview after backend.answer failure") | COMMENT |
| LOW | tests/unit/auto/test_adapters_ralph_poller.py | 81 | result = await poller(job_id="job_ralph_existing") | COMMENT |
| LOW | tests/unit/auto/test_pipeline_lateral.py | 401 | def non_goals(self) -> list[str]: | COMMENT |
| LOW | tests/unit/auto/test_pipeline_lateral.py | 1621 | # --------------------------------------------------------------------------- | COMMENT |
| LOW | tests/unit/plugin/test_firewall.py | 1361 | from ouroboros.plugin.digest import canonical_tree_hash | COMMENT |
| LOW | …sts/unit/mcp/tools/test_auto_interview_construction.py | 2501 | COMMENT | |
| LOW | tests/unit/cli/test_harness.py | 421 | # run_id path-traversal boundary (security regression, #1582 bot finding) # | COMMENT |
| LOW | tests/unit/orchestrator/test_context_governor.py | 241 | ) | COMMENT |
| LOW | tests/unit/orchestrator/test_phase_wrappers.py | 61 | COMMENT | |
| LOW | tests/canonical/cli-todo/expected.yaml | 1 | # L0 canonical acceptance scenario — cli-todo | COMMENT |
| LOW | tests/integration/auto/test_dispatch_to_seed_e2e.py | 481 | # This is intentionally a post-dispatch unit-style test: it constructs | COMMENT |
| LOW | tests/conformance/workflow_ir/__init__.py | 1 | # Workflow IR conformance harness — Wave 1 N-2 (parent #956, umbrella #1131). | COMMENT |
| LOW | docs/examples/mcp-config.yaml | 1 | # Example MCP Client Configuration for Ouroboros | COMMENT |
| LOW | docs/examples/mcp-config.yaml | 41 | # - name: "memory" | COMMENT |
| LOW | docs/examples/mcp-config.yaml | 61 | # transport: "sse" | COMMENT |
| LOW | docs/examples/mcp-config.yaml | 81 | # Example: tool_prefix: "mcp_" makes "read" become "mcp_read" | COMMENT |
| LOW | examples/coordinator_test_seed.yaml | 1 | # Coordinator Agent Test Seed | COMMENT |
| LOW | examples/parallel_subac_test_seed.yaml | 1 | # Parallel Sub-AC Test Seed | COMMENT |
| LOW | scripts/check-auto-boundary.py | 101 | COMMENT | |
| LOW | scripts/check-auto-boundary.py | 121 | # PascalCase-composition forms. | COMMENT |
| LOW | scripts/check-auto-boundary.py | 141 | # missed. The case-sensitive uppercase first letter is what | COMMENT |
| LOW | scripts/check-auto-boundary.py | 161 | # ``linearTransform``, or ``LinearOperator`` stay benign even | COMMENT |
| LOW | scripts/check-auto-boundary.py | 241 | # Root-level escape: if SCAN_DIR itself is a symlink whose | COMMENT |
| LOW | scripts/ralph.py | 21 | import re | COMMENT |
| LOW | scripts/check-auto-perf-budget.py | 41 | # bodies wrap multi-line guidance blocks. Bot review on commit dc191d02 | COMMENT |
| LOW | scripts/check-auto-perf-budget.py | 121 | body = _strip_html_comments(body) | COMMENT |
| LOW | scripts/install.sh | 1 | #!/bin/bash | COMMENT |
| LOW | scripts/install.sh | 601 | # Refresh already-installed artifacts for every detected runtime, even those | COMMENT |
| LOW | scripts/ralph.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | .github/dependabot.yml | 1 | # Dependabot configuration. | COMMENT |
| LOW | src/ouroboros/copilot_permissions.py | 41 | COMMENT | |
| LOW | src/ouroboros/config/_model_defaults.py | 41 | DEFAULT_HAIKU_MODEL = "claude-haiku-4-5" | COMMENT |
| LOW | src/ouroboros/config/_model_defaults.py | 61 | DEFAULT_OPUS_MODEL: ("claude-opus-4-6",), | COMMENT |
| LOW | src/ouroboros/config/_model_defaults.py | 81 | # bit that could distinguish those cases. Explicit ids that were never shipped | COMMENT |
| LOW | src/ouroboros/config/loader.py | 141 | candidate = value.strip() | COMMENT |
| LOW | src/ouroboros/config/loader.py | 181 | "OUROBOROS_PI_CLI_PATH", | COMMENT |
| LOW | src/ouroboros/config/loader.py | 201 | # untrusted .env entry survives and a spawned Copilot loads attacker | COMMENT |
| LOW | src/ouroboros/config/loader.py | 221 | "CODEX_HOME", | COMMENT |
| LOW | src/ouroboros/config/loader.py | 241 | # SSRF guard toggle. `mcp/types.py` blocks loopback/private/link-local | COMMENT |
| LOW | src/ouroboros/config/loader.py | 261 | # is therefore an approval-gate-bypass sink — same class as the | COMMENT |
| LOW | src/ouroboros/auto/grading.py | 381 | "high", | COMMENT |
| LOW | src/ouroboros/auto/interview_driver.py | 41 | build_safe_default_synthesis, | COMMENT |
| LOW | src/ouroboros/auto/interview_driver.py | 61 | # set to 1 via persisted/env policy). A bounded inline await still | COMMENT |
| LOW | src/ouroboros/auto/interview_driver.py | 81 | # RFC #1256 §I4 — durability is a COMPOSITION-ROOT responsibility. | COMMENT |
| LOW | src/ouroboros/auto/interview_driver.py | 101 | # background ``asyncio.Task`` and returns immediately; ``run()`` | COMMENT |
| LOW | src/ouroboros/auto/interview_driver.py | 121 | # timeout that downgrades pathologically slow observers to a typed | COMMENT |
| LOW | src/ouroboros/auto/interview_driver.py | 161 | # Mirrors the runtime ``watchdog_wall_clock_exceeded`` / interview | COMMENT |
| LOW | src/ouroboros/auto/interview_driver.py | 301 | backend: InterviewBackend | COMMENT |
| LOW | src/ouroboros/auto/interview_driver.py | 321 | # constraint/success-criteria clarity) is replaced with a concrete, | COMMENT |
| LOW | src/ouroboros/auto/interview_driver.py | 601 | status=result.status, | COMMENT |
| LOW | src/ouroboros/auto/interview_driver.py | 701 | self._save(state) | COMMENT |
| LOW | src/ouroboros/auto/interview_driver.py | 1221 | "blocked", | COMMENT |
| LOW | src/ouroboros/auto/safe_defaults.py | 121 | # section that ends a multi-line non-goals body. Matches things like | COMMENT |
| LOW | src/ouroboros/auto/safe_defaults.py | 141 | # gate over-blocked benign ``ooo auto`` runs — e.g. a CSV→JSON tool was | COMMENT |
| LOW | src/ouroboros/auto/trace_export.py | 101 | "persistence_probe", | COMMENT |
| LOW | src/ouroboros/auto/seed_repairer.py | 81 | @dataclass(slots=True) | COMMENT |
| 131 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | tests/unit/cli/test_init_pm_seed_detection.py | 531 | # Step 1: Detect | COMMENT |
| LOW⚡ | tests/unit/cli/test_init_pm_seed_detection.py | 536 | # Step 2: Select (single seed → confirm) | COMMENT |
| LOW⚡ | tests/unit/cli/test_init_pm_seed_detection.py | 541 | # Step 3: Load as context | COMMENT |
| LOW⚡ | tests/unit/bigbang/test_brownfield.py | 1334 | # Step 2: Simulate user selecting repo #2 | COMMENT |
| LOW⚡ | tests/unit/bigbang/test_brownfield.py | 1343 | # Step 3: Set default (toggle: /b is not default, so it gets added) | COMMENT |
| LOW | tests/unit/bigbang/test_brownfield.py | 1316 | # Step 1: Scan returns repos | COMMENT |
| LOW | docs/getting-started.md | 248 | ### Step 1: Interview | COMMENT |
| LOW | docs/getting-started.md | 282 | ### Step 2: Execute | COMMENT |
| LOW | docs/getting-started.md | 292 | ### Step 3: Monitor | COMMENT |
| LOW | docs/getting-started.md | 307 | ### Step 4: Review | COMMENT |
| LOW | docs/contributing/findings-registry.md | 12 | # NOTE: The following successor files are planned but not yet created. | COMMENT |
| LOW | .claude-plugin/skills/pm/SKILL.md | 12 | ### Step 1: Load MCP Tool | COMMENT |
| LOW | .claude-plugin/skills/pm/SKILL.md | 49 | ### Step 2: Start Interview | COMMENT |
| LOW | .claude-plugin/skills/pm/SKILL.md | 58 | ### Step 3: Loop | COMMENT |
| LOW | .claude-plugin/skills/pm/SKILL.md | 117 | ### Step 4: Copy to Clipboard | COMMENT |
| LOW | .claude-plugin/skills/pm/SKILL.md | 125 | ### Step 5: Show Result & Next Step | COMMENT |
| LOW | .claude-plugin/skills/setup/SKILL.md | 44 | ### Step 0: Welcome & Motivation (The Hook) | COMMENT |
| LOW | .claude-plugin/skills/setup/SKILL.md | 117 | ### Step 1: Environment Detection | COMMENT |
| LOW | .claude-plugin/skills/setup/SKILL.md | 215 | ### Step 2: MCP Server Registration | COMMENT |
| LOW | .claude-plugin/skills/setup/SKILL.md | 258 | ### Step 3: CLAUDE.md Integration (Optional) | COMMENT |
| LOW | .claude-plugin/skills/setup/SKILL.md | 345 | ### Step 4: Quick Verification | COMMENT |
| LOW | .claude-plugin/skills/setup/SKILL.md | 372 | ### Step 5: Success Summary | COMMENT |
| LOW | .claude-plugin/skills/setup/SKILL.md | 533 | ### Step 6: First Project Nudge | COMMENT |
| LOW | .claude-plugin/skills/qa/SKILL.md | 41 | ### Step 0: Determine execution mode | COMMENT |
| LOW | .claude-plugin/skills/welcome/SKILL.md | 116 | ### Step 1: Welcome Banner | COMMENT |
| LOW | .claude-plugin/skills/welcome/SKILL.md | 136 | ### Step 2: Persona Detection | COMMENT |
| LOW | .claude-plugin/skills/welcome/SKILL.md | 167 | ### Step 3: MCP Check | COMMENT |
| LOW | .claude-plugin/skills/welcome/SKILL.md | 192 | ### Step 4: Quick Reference | COMMENT |
| LOW | .claude-plugin/skills/welcome/SKILL.md | 211 | ### Step 5: First Action | COMMENT |
| LOW | .claude-plugin/skills/welcome/SKILL.md | 236 | ### Step 6: GitHub Star (Last Step) | COMMENT |
| LOW | .claude-plugin/skills/publish/SKILL.md | 23 | ### Step 1: Prerequisite Check | COMMENT |
| LOW | .claude-plugin/skills/publish/SKILL.md | 50 | ### Step 2: Locate the Seed | COMMENT |
| LOW | .claude-plugin/skills/publish/SKILL.md | 72 | ### Step 3: Parse the Seed | COMMENT |
| LOW | .claude-plugin/skills/publish/SKILL.md | 106 | ### Step 4: Detect Repository | COMMENT |
| LOW | .claude-plugin/skills/publish/SKILL.md | 153 | ### Step 5: Duplicate Check | COMMENT |
| LOW | .claude-plugin/skills/publish/SKILL.md | 180 | ### Step 6: Plan Issue Structure | COMMENT |
| LOW | .claude-plugin/skills/publish/SKILL.md | 206 | ### Step 7: Create GitHub Issues | COMMENT |
| LOW | .claude-plugin/skills/publish/SKILL.md | 326 | ### Step 8: Summary | COMMENT |
| LOW | .claude-plugin/skills/interview/SKILL.md | 51 | ### Step 0: Version Check (runs before interview) | COMMENT |
| LOW | skills/pm/SKILL.md | 12 | ### Step 1: Load MCP Tool | COMMENT |
| LOW | skills/pm/SKILL.md | 49 | ### Step 2: Start Interview | COMMENT |
| LOW | skills/pm/SKILL.md | 58 | ### Step 3: Loop | COMMENT |
| LOW | skills/pm/SKILL.md | 124 | ### Step 4: Copy to Clipboard | COMMENT |
| LOW | skills/pm/SKILL.md | 132 | ### Step 5: Show Result & Next Step | COMMENT |
| LOW | skills/setup/SKILL.md | 44 | ### Step 0: Welcome & Motivation (The Hook) | COMMENT |
| LOW | skills/setup/SKILL.md | 117 | ### Step 1: Environment Detection | COMMENT |
| LOW | skills/setup/SKILL.md | 215 | ### Step 2: MCP Server Registration | COMMENT |
| LOW | skills/setup/SKILL.md | 258 | ### Step 3: CLAUDE.md Integration (Optional) | COMMENT |
| LOW | skills/setup/SKILL.md | 345 | ### Step 4: Quick Verification | COMMENT |
| LOW | skills/setup/SKILL.md | 372 | ### Step 5: Success Summary | COMMENT |
| LOW | skills/setup/SKILL.md | 533 | ### Step 6: First Project Nudge | COMMENT |
| LOW | skills/qa/SKILL.md | 41 | ### Step 0: Determine execution mode | COMMENT |
| LOW | skills/welcome/SKILL.md | 116 | ### Step 1: Welcome Banner | COMMENT |
| LOW | skills/welcome/SKILL.md | 136 | ### Step 2: Persona Detection | COMMENT |
| LOW | skills/welcome/SKILL.md | 167 | ### Step 3: MCP Check | COMMENT |
| LOW | skills/welcome/SKILL.md | 192 | ### Step 4: Quick Reference | COMMENT |
| LOW | skills/welcome/SKILL.md | 212 | ### Step 5: First Action | COMMENT |
| LOW | skills/welcome/SKILL.md | 237 | ### Step 6: GitHub Star (Last Step) | COMMENT |
| LOW | skills/publish/SKILL.md | 23 | ### Step 1: Prerequisite Check | COMMENT |
| LOW | skills/publish/SKILL.md | 50 | ### Step 2: Locate the Seed | COMMENT |
| 19 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tests/unit/core/test_context.py | 112 | # Create a context with lots of data to exceed token limit (MAX_TOKENS = 100000) | COMMENT |
| MEDIUM | tests/unit/tui/test_screens.py | 109 | # Create a mock message-like object | COMMENT |
| MEDIUM⚡ | tests/unit/plugin/agents/test_registry.py | 456 | # Create a test agent file | COMMENT |
| MEDIUM | tests/unit/plugin/agents/test_registry.py | 496 | # Create an analysis agent | COMMENT |
| MEDIUM | tests/unit/plugin/agents/test_registry.py | 524 | # Create an empty file | COMMENT |
| MEDIUM⚡ | tests/unit/agents/test_loader.py | 327 | # Create a custom agent directory with a modified agent file | COMMENT |
| MEDIUM | tests/unit/mcp/tools/test_definitions.py | 2955 | # Create a running session via the repository | COMMENT |
| MEDIUM | tests/unit/cli/test_setup.py | 124 | "# This file is only for the Codex MCP/env registration block.", | CODE |
| MEDIUM | tests/unit/cli/test_setup.py | 165 | "# This file is only for the Codex MCP/env registration block.", | CODE |
| MEDIUM | tests/unit/cli/test_run_qa.py | 970 | # Create the existing file the reference points at — this is the | COMMENT |
| MEDIUM⚡ | tests/unit/persistence/test_brownfield_store.py | 90 | # Create a second store from the same engine | COMMENT |
| MEDIUM | tests/unit/persistence/test_event_store.py | 1710 | # Create the on-disk schema with a writable store first so the read-only | COMMENT |
| MEDIUM⚡ | tests/unit/bigbang/test_brownfield.py | 114 | # Create a real git repo with a GitHub origin | COMMENT |
| MEDIUM⚡ | tests/unit/bigbang/test_brownfield.py | 199 | # Create a repo with a remote whose name is not "origin". | COMMENT |
| MEDIUM⚡ | tests/unit/bigbang/test_brownfield.py | 510 | # Create a GitHub repo | COMMENT |
| MEDIUM⚡ | tests/unit/bigbang/test_brownfield.py | 992 | # Create a repo inside the skip directory | COMMENT |
| MEDIUM | tests/unit/bigbang/test_brownfield.py | 310 | # Create a repo inside node_modules (should be skipped) | COMMENT |
| MEDIUM | tests/unit/bigbang/test_brownfield.py | 323 | # Create a repo inside a hidden directory | COMMENT |
| MEDIUM⚡ | tests/unit/orchestrator/test_level_context.py | 655 | # Create a file outside the workspace | COMMENT |
| MEDIUM | tests/unit/orchestrator/test_level_context.py | 693 | # Create a file outside the workspace | COMMENT |
| MEDIUM⚡ | tests/integration/plugin/test_orchestration.py | 37 | # Create an async iterator that yields mock messages | COMMENT |
| MEDIUM | tests/e2e/test_session_persistence.py | 110 | # Create a sequence with enough messages to trigger progress events | COMMENT |
| MEDIUM | tests/e2e/test_full_workflow.py | 387 | # Create a long sequence of messages | COMMENT |
| MEDIUM | examples/task_manager/cli.py | 15 | # Create the Typer app | COMMENT |
| MEDIUM | src/ouroboros/providers/litellm_adapter.py | 407 | # Create the retry-decorated function with instance's max_retries | COMMENT |
| MEDIUM | src/ouroboros/cli/main.py | 77 | # Create the main Typer app | COMMENT |
| MEDIUM | src/ouroboros/cli/commands/setup.py | 274 | # This file is only for the Codex MCP/env registration block. | COMMENT |
| MEDIUM | src/ouroboros/cli/commands/setup.py | 289 | "# This file is only for the Codex MCP/env registration block.", | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | llms.txt | 82 | plugin/ # Plugin system (skills, agents, orchestration) | CODE |
| MEDIUM | CONTRIBUTING.md | 415 | orchestrator/ # Runtime abstraction and orchestration | CODE |
| MEDIUM⚡ | tests/unit/backends/test_capabilities.py | 143 | # Codex additionally exposes host-driven subagent orchestration guidance so | COMMENT |
| MEDIUM | tests/unit/orchestrator/test_subagent_orchestration.py | 37 | # absent from the name-map → NONE. Its EXTERNAL orchestration is | COMMENT |
| MEDIUM | docs/architecture.md | 380 | +-- orchestrator/ # Runtime abstraction and orchestration | CODE |
| MEDIUM | docs/agentos/release-readiness.md | 284 | | AgentOS smoke: long-running runtime and recovery | Start/status/result behavior, recovery/cancel/retry truthfulness, a | CODE |
| MEDIUM | docs/agentos/release-readiness.md | 970 | | #924 | Closed/folded | Done/folded | No direct release impact; covered by the canonical multi-agent deliberation RFC. | CODE |
| MEDIUM | docs/agentos/release-readiness.md | 975 | | #934 | Closed/folded | Done/folded | No direct release impact; plugin readiness is assessed through #939 tests and doc | CODE |
| MEDIUM | docs/agentos/issue-sequencing-graph.md | 204 | | #1258 | B | Regression guardrails landed in #1259; the broader perf policy remains needs-design/needs-approval. | Trea | CODE |
| MEDIUM | docs/rfc/frugality-control-loop.md | 1 | # RFC — Token frugality as one control loop (attribution + advisory guardrails) | COMMENT |
| MEDIUM | docs/rfc/active-conductor.md | 1 | # RFC — Active conductor: judgment on the event-driven main session | COMMENT |
| MEDIUM | docs/rfc/active-conductor.md | 12 | #1599 made background-job observation event-driven: one read-only child owns the | COMMENT |
| MEDIUM | docs/guides/agent-process-lifecycle.md | 3 | Issue #518 tracks the move from ad-hoc agent/session orchestration toward a | CODE |
| MEDIUM | src/ouroboros/auto/pipeline.py | 392 | # #1509: final-status surfaces must distinguish orchestration state | COMMENT |
| MEDIUM | src/ouroboros/providers/claude_code_adapter.py | 814 | # *agentic CLI subprocess* and then turns every agent surface | COMMENT |
| MEDIUM | src/ouroboros/backends/capabilities.py | 514 | # it drives the agentic orchestrator runtime but does not back | COMMENT |
| MEDIUM | src/ouroboros/backends/capabilities.py | 529 | # --output-format streaming-json`` drives the agentic orchestrator | COMMENT |
| MEDIUM | src/ouroboros/backends/capabilities.py | 548 | # agentic orchestrator runtime or interview driving. SDK-free and | COMMENT |
| MEDIUM | src/ouroboros/mcp/tools/definitions.py | 638 | # needs dependency injection should call ``get_ouroboros_tools(...)`` instead; | COMMENT |
| MEDIUM | src/ouroboros/mcp/tools/authoring_handlers.py | 2321 | # agentic explorer, and matches ``PMInterviewHandler._get_engine`` | COMMENT |
| MEDIUM | src/ouroboros/mcp/server/adapter.py | 1826 | # Create tool registry for dependency injection | COMMENT |
| MEDIUM | src/ouroboros/cli/commands/mcp.py | 558 | # Create server with all tools pre-registered via dependency injection. | COMMENT |
| MEDIUM | src/ouroboros/evaluation/detector.py | 769 | # lookup would let an LLM hallucination become a phantom Stage 1 failure | COMMENT |
| MEDIUM⚡ | src/ouroboros/bigbang/ambiguity.py | 143 | # Maximum token limit (None = no limit, rely on model's context window) | COMMENT |
| MEDIUM | src/ouroboros/bigbang/brownfield.py | 339 | # ── High-level orchestration ─────────────────────────────────────── | COMMENT |
| MEDIUM | src/ouroboros/orchestrator/adapter.py | 842 | # Canonical backend → sub-agent-orchestration mapping. Single source of truth so | COMMENT |
| MEDIUM | src/ouroboros/orchestrator/codex_cli_runtime.py | 273 | # exposes only ``codex`` / ``codex-reply`` — its native multi-agent | COMMENT |
| MEDIUM | src/ouroboros/orchestrator/codex_cli_runtime.py | 275 | # reuse/continue a Codex thread but cannot orchestrate Codex children; | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/unit/test_graceful_shutdown.py | 469 | # Set evaluator to track if it gets called (it shouldn't) | COMMENT |
| LOW⚡ | tests/integration/plugin/test_orchestration.py | 44 | # Set return_value to the async generator function | COMMENT |
| LOW | src/ouroboros/core/security.py | 122 | # Check if it's a prefixed key | COMMENT |
| LOW | src/ouroboros/core/security.py | 173 | # Check if field name indicates sensitivity | COMMENT |
| LOW | src/ouroboros/core/security.py | 177 | # Check if value looks sensitive | COMMENT |
| LOW | src/ouroboros/core/errors.py | 260 | # Check if field name suggests sensitive data | COMMENT |
| LOW | src/ouroboros/core/errors.py | 266 | # Check if value looks like a secret (starts with common prefixes) | COMMENT |
| LOW | src/ouroboros/config/loader.py | 358 | # Set permissions to owner read/write only (0o600) | COMMENT |
| LOW | src/ouroboros/config/loader.py | 405 | # Check if files exist | COMMENT |
| LOW | src/ouroboros/tui/components/progress.py | 502 | # Check if milestone already exists | COMMENT |
| LOW | src/ouroboros/providers/claude_code_adapter.py | 581 | # Check if error is retryable | COMMENT |
| LOW | src/ouroboros/plugin/agents/pool.py | 432 | # Check if result already available | COMMENT |
| LOW | src/ouroboros/plugin/agents/pool.py | 453 | # Return result | COMMENT |
| LOW | src/ouroboros/plugin/skills/executor.py | 348 | # Check if there's an 'instructions' section | COMMENT |
| LOW | src/ouroboros/mcp/tools/job_handlers.py | 617 | # Check if already in a terminal state | COMMENT |
| LOW | src/ouroboros/mcp/tools/qa.py | 260 | # Check if this bullet is a dimension (e.g. "accuracy: 0.9") | COMMENT |
| LOW | src/ouroboros/mcp/server/security.py | 415 | # Check if user has required permissions | COMMENT |
| LOW | src/ouroboros/mcp/server/security.py | 425 | # Check if user has an allowed role (if roles are specified) | COMMENT |
| LOW | src/ouroboros/cli/commands/pm.py | 548 | # Check if this question was classified as skippable — | COMMENT |
| LOW | src/ouroboros/cli/commands/setup.py | 1350 | # Set runtime to Hermes. Do not rewrite llm.backend until Hermes also | COMMENT |
| LOW | src/ouroboros/cli/commands/setup.py | 2451 | # Check if ouroboros is importable via python | COMMENT |
| LOW | src/ouroboros/observability/logging.py | 212 | # Check if field name indicates sensitivity | COMMENT |
| LOW | src/ouroboros/observability/logging.py | 217 | # Check if value looks sensitive | COMMENT |
| LOW | src/ouroboros/resilience/stagnation.py | 378 | # Check if all deltas are below epsilon | COMMENT |
| LOW | src/ouroboros/resilience/stagnation.py | 426 | # Check if all improvements are below threshold | COMMENT |
| LOW | src/ouroboros/evolution/loop.py | 744 | # Check if lineage is already terminated | COMMENT |
| LOW | src/ouroboros/persistence/checkpoint.py | 549 | # Check if error is due to no checkpoint (normal for first run) | COMMENT |
| LOW | src/ouroboros/persistence/brownfield.py | 256 | # Check if repo already exists | COMMENT |
| LOW | src/ouroboros/persistence/brownfield.py | 333 | # Check if already exists — preserve metadata | COMMENT |
| LOW | src/ouroboros/evaluation/pipeline.py | 176 | # Check if Stage 2 failed on compliance — but allow override | COMMENT |
| LOW | src/ouroboros/orchestrator/runner.py | 4787 | # Check if session can be resumed | COMMENT |
| LOW | src/ouroboros/orchestrator/parallel_executor.py | 3601 | # Check if stall was detected (CancelScope ate the Cancelled) | COMMENT |
| LOW | src/ouroboros/orchestrator/mcp_config.py | 169 | # Check if world-readable | COMMENT |
| LOW | src/ouroboros/orchestrator/mcp_config.py | 175 | # Check if group-readable (less severe) | COMMENT |
| LOW | src/ouroboros/orchestrator/leaf_dispatcher.py | 310 | # Check if stall was detected (CancelScope ate the Cancelled) | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/unit/orchestrator/test_effort_routed_event.py | 61 | async def execute_task( | CODE |
| LOW | tests/unit/orchestrator/test_effort_routed_event.py | 96 | async def execute_task( | CODE |
| LOW | …it/orchestrator/test_synapse_after_turn_integration.py | 50 | async def execute_task(self, **kwargs: Any): | CODE |
| LOW | …it/orchestrator/test_synapse_after_turn_integration.py | 91 | async def execute_task(self, **kwargs: Any): | CODE |
| LOW | …it/orchestrator/test_synapse_after_turn_integration.py | 122 | async def execute_task(self, **kwargs: Any): | CODE |
| LOW | tests/unit/orchestrator/test_frugality_producers.py | 151 | async def execute_task( | CODE |
| LOW | tests/unit/orchestrator/test_frugality_producers.py | 190 | async def execute_task( | CODE |
| LOW | tests/unit/orchestrator/test_parallel_executor.py | 1205 | async def execute_task( | CODE |
| LOW | tests/unit/orchestrator/test_parallel_executor.py | 2692 | async def execute_task( | CODE |
| LOW | tests/unit/orchestrator/test_parallel_executor.py | 2816 | async def execute_task( | CODE |
| LOW | tests/unit/orchestrator/test_parallel_executor.py | 2905 | async def execute_task( | CODE |
| LOW | tests/unit/orchestrator/test_parallel_executor.py | 3182 | async def execute_task( | CODE |
| LOW | tests/unit/orchestrator/test_parallel_executor.py | 3336 | async def execute_task( | CODE |
| LOW | tests/unit/orchestrator/test_parallel_executor.py | 3476 | async def execute_task( | CODE |
| LOW | tests/unit/orchestrator/test_parallel_executor.py | 3551 | async def execute_task( | CODE |
| LOW | tests/unit/orchestrator/test_parallel_executor.py | 3655 | async def execute_task( | CODE |
| LOW | tests/unit/orchestrator/test_parallel_executor.py | 7644 | async def execute_task( | CODE |
| LOW | tests/unit/orchestrator/test_parallel_executor.py | 7731 | async def execute_task( | CODE |
| LOW | tests/unit/orchestrator/test_parallel_executor.py | 7860 | async def execute_task( | CODE |
| LOW | tests/unit/orchestrator/test_parallel_executor.py | 7965 | async def execute_task( | CODE |
| LOW | tests/unit/orchestrator/test_parallel_executor.py | 8031 | async def execute_task( | CODE |
| LOW | tests/unit/orchestrator/test_parallel_executor.py | 8744 | async def execute_task( | CODE |
| LOW | tests/unit/orchestrator/test_parallel_executor.py | 8852 | async def execute_task( | CODE |
| LOW | tests/unit/orchestrator/test_parallel_executor.py | 8980 | async def execute_task( | CODE |
| LOW | tests/unit/orchestrator/test_parallel_executor.py | 9092 | async def execute_task( | CODE |
| LOW | tests/unit/orchestrator/test_parallel_executor.py | 9248 | async def execute_task( | CODE |
| LOW | tests/unit/orchestrator/test_parallel_executor.py | 9364 | async def execute_task( | CODE |
| LOW | tests/unit/orchestrator/test_parallel_executor.py | 9482 | async def execute_task( | CODE |
| LOW | tests/unit/orchestrator/test_parallel_executor.py | 9628 | async def execute_task( | CODE |
| LOW | tests/unit/orchestrator/test_parallel_executor.py | 9718 | async def execute_task( | CODE |
| LOW | tests/unit/orchestrator/test_parallel_executor.py | 9851 | async def execute_task( | CODE |
| LOW | tests/unit/orchestrator/test_parallel_executor.py | 9997 | async def execute_task( | CODE |
| LOW | tests/unit/orchestrator/test_parallel_executor.py | 10104 | async def execute_task( | CODE |
| LOW | tests/unit/orchestrator/test_parallel_executor.py | 10811 | async def execute_task(self, **kwargs: Any): | CODE |
| LOW | tests/unit/orchestrator/test_parallel_executor.py | 10907 | async def execute_task(self, **kwargs: Any): | CODE |
| LOW | tests/unit/orchestrator/test_parallel_executor.py | 11011 | async def execute_task(self, **kwargs: Any): | CODE |
| LOW | tests/unit/orchestrator/test_parallel_executor.py | 11089 | async def execute_task( | CODE |
| LOW | tests/unit/orchestrator/test_parallel_executor.py | 11206 | async def execute_task( | CODE |
| LOW | tests/unit/orchestrator/test_parallel_executor.py | 11247 | async def execute_task( | CODE |
| LOW | tests/unit/orchestrator/test_parallel_executor.py | 11300 | async def execute_task( | CODE |
| LOW | tests/unit/orchestrator/test_model_routing_wiring.py | 105 | async def execute_task( | CODE |
| LOW | tests/unit/orchestrator/test_model_routing_wiring.py | 140 | async def execute_task( | CODE |
| LOW | tests/unit/orchestrator/test_coordinator.py | 223 | async def execute_task( | CODE |
| LOW | …orchestrator/test_parallel_executor_atomic_judgment.py | 18 | async def execute_task( | CODE |
| LOW | …orchestrator/test_parallel_executor_atomic_judgment.py | 111 | async def execute_task( | CODE |
| LOW | …orchestrator/test_parallel_executor_atomic_judgment.py | 209 | async def execute_task( | CODE |
| LOW | …it/orchestrator/test_parallel_executor_retry_resume.py | 38 | async def execute_task( | CODE |
| LOW | tests/unit/orchestrator/test_shadow_replay.py | 201 | async def execute_task( | CODE |
| LOW | tests/unit/orchestrator/test_shadow_replay.py | 1254 | async def execute_task( | CODE |
| LOW | tests/e2e/conftest.py | 342 | async def execute_task( | CODE |
| LOW | scripts/manual-synapse-state-smoke.py | 57 | async def execute_task(self, **kwargs: Any): | CODE |
| LOW | src/ouroboros/orchestrator/gjc_runtime.py | 384 | async def execute_task( | CODE |
| LOW | src/ouroboros/orchestrator/hermes_runtime.py | 392 | async def execute_task( | CODE |
| LOW | src/ouroboros/orchestrator/worker_runtime.py | 207 | async def execute_task( | CODE |
| LOW | src/ouroboros/orchestrator/adapter.py | 1024 | def execute_task( | CODE |
| LOW | src/ouroboros/orchestrator/adapter.py | 1452 | async def execute_task( | CODE |
| LOW | src/ouroboros/orchestrator/opencode_runtime.py | 1090 | async def execute_task( | CODE |
| LOW | src/ouroboros/orchestrator/pi_runtime.py | 396 | async def execute_task( | CODE |
| LOW | src/ouroboros/orchestrator/codex_cli_runtime.py | 2022 | async def execute_task( | CODE |
| LOW | src/ouroboros/orchestrator/kiro_adapter.py | 289 | async def execute_task( | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/unit/harness/test_deliver_gate.py | 66 | CODE | |
| LOW | tests/unit/bigbang/test_seed_generator.py | 56 | CODE | |
| LOW | src/ouroboros/auto/adapters.py | 422 | CODE | |
| LOW | src/ouroboros/tui/events.py | 343 | CODE | |
| LOW | src/ouroboros/tui/events.py | 396 | CODE | |
| LOW | src/ouroboros/providers/copilot_cli_adapter.py | 149 | CODE | |
| LOW | src/ouroboros/providers/pi_llm_adapter.py | 38 | CODE | |
| LOW | src/ouroboros/providers/gjc_llm_adapter.py | 52 | CODE | |
| LOW | src/ouroboros/providers/opencode_adapter.py | 113 | CODE | |
| LOW | src/ouroboros/providers/goose_cli_adapter.py | 61 | CODE | |
| LOW | src/ouroboros/providers/factory.py | 342 | CODE | |
| LOW | src/ouroboros/providers/codex_cli_adapter.py | 121 | CODE | |
| LOW | src/ouroboros/providers/gemini_cli_adapter.py | 110 | CODE | |
| LOW | src/ouroboros/providers/kiro_adapter.py | 69 | CODE | |
| LOW | src/ouroboros/providers/claude_code_adapter.py | 133 | CODE | |
| LOW | src/ouroboros/providers/hermes_cli_adapter.py | 49 | CODE | |
| LOW | src/ouroboros/mcp/tools/subagent.py | 1643 | CODE | |
| LOW | src/ouroboros/mcp/tools/subagent.py | 2054 | CODE | |
| LOW | src/ouroboros/mcp/tools/subagent.py | 2160 | CODE | |
| LOW | src/ouroboros/mcp/tools/background.py | 81 | CODE | |
| LOW | src/ouroboros/mcp/server/adapter.py | 1141 | CODE | |
| LOW | src/ouroboros/cli/commands/run.py | 547 | CODE | |
| LOW | src/ouroboros/cli/commands/run.py | 786 | CODE | |
| LOW | src/ouroboros/cli/commands/auto.py | 133 | CODE | |
| LOW | src/ouroboros/cli/commands/auto.py | 380 | CODE | |
| LOW | src/ouroboros/evolution/loop.py | 234 | CODE | |
| LOW | src/ouroboros/events/control.py | 60 | CODE | |
| LOW | src/ouroboros/events/io.py | 275 | CODE | |
| LOW | src/ouroboros/events/io.py | 337 | CODE | |
| LOW | src/ouroboros/events/io.py | 396 | CODE | |
| LOW | src/ouroboros/events/io.py | 457 | CODE | |
| LOW | src/ouroboros/orchestrator/gjc_runtime.py | 76 | CODE | |
| LOW | src/ouroboros/orchestrator/hermes_runtime.py | 180 | CODE | |
| LOW | src/ouroboros/orchestrator/runner.py | 584 | CODE | |
| LOW | src/ouroboros/orchestrator/copilot_cli_runtime.py | 119 | CODE | |
| LOW | src/ouroboros/orchestrator/grok_cli_runtime.py | 99 | CODE | |
| LOW | src/ouroboros/orchestrator/events.py | 435 | CODE | |
| LOW | src/ouroboros/orchestrator/goose_runtime.py | 71 | CODE | |
| LOW | src/ouroboros/orchestrator/opencode_runtime.py | 192 | CODE | |
| LOW | src/ouroboros/orchestrator/pi_runtime.py | 73 | CODE | |
| LOW | src/ouroboros/orchestrator/runtime_factory.py | 252 | CODE | |
| LOW | src/ouroboros/orchestrator/parallel_executor.py | 834 | CODE | |
| LOW | src/ouroboros/orchestrator/parallel_executor.py | 2270 | CODE | |
| LOW | src/ouroboros/orchestrator/parallel_executor.py | 3284 | CODE | |
| LOW | src/ouroboros/orchestrator/codex_cli_runtime.py | 166 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | tests/unit/cli/test_init_pm_seed_detection.py | 531 | # Step 1: Detect | COMMENT |
| LOW⚡ | tests/unit/cli/test_init_pm_seed_detection.py | 536 | # Step 2: Select (single seed → confirm) | COMMENT |
| LOW⚡ | tests/unit/cli/test_init_pm_seed_detection.py | 541 | # Step 3: Load as context | COMMENT |
| LOW⚡ | tests/unit/bigbang/test_brownfield.py | 1334 | # Step 2: Simulate user selecting repo #2 | COMMENT |
| LOW⚡ | tests/unit/bigbang/test_brownfield.py | 1343 | # Step 3: Set default (toggle: /b is not default, so it gets added) | COMMENT |
| LOW | tests/unit/bigbang/test_brownfield.py | 1316 | # Step 1: Scan returns repos | COMMENT |
| LOW⚡ | src/ouroboros/mcp/tools/pm_handler.py | 944 | # Step 2: select_repos (AC 4) | COMMENT |
| LOW⚡ | src/ouroboros/cli/commands/plugin.py | 268 | # Step 1: stage copy. Pass symlinks=True so symlinks are copied as | COMMENT |
| LOW⚡ | src/ouroboros/cli/commands/plugin.py | 285 | # Step 2: move existing dest aside. | COMMENT |
| LOW⚡ | src/ouroboros/cli/commands/plugin.py | 289 | # Step 3: promote staging into place. | COMMENT |
| LOW⚡ | src/ouroboros/cli/commands/plugin.py | 302 | # Step 4: cleanup backup. Failure here is non-fatal — the new install | COMMENT |
| LOW | src/ouroboros/cli/commands/init.py | 530 | # Step 1: Calculate ambiguity score | COMMENT |
| LOW | src/ouroboros/cli/commands/init.py | 569 | # Step 2: Generate Seed | COMMENT |
| LOW | src/ouroboros/cli/commands/init.py | 591 | # Step 3: Save Seed | COMMENT |
| LOW | src/ouroboros/evolution/loop.py | 715 | # Step 1: Replay events to reconstruct state | COMMENT |
| LOW | src/ouroboros/evolution/loop.py | 857 | # Step 2: Run one generation wrapped in AgentProcess for pause/cancel/replay | COMMENT |
| LOW | src/ouroboros/evolution/loop.py | 1052 | # Step 3: Emit generation completed event (with seed_json). | COMMENT |
| LOW | src/ouroboros/evolution/loop.py | 1098 | # Step 4: Check convergence. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | src/ouroboros/core/seed.py | 117 | summary: Auto-generated codebase summary from exploration. | STRING |
| HIGH | src/ouroboros/core/seed.py | 122 | summary: str = Field(default="", description="Auto-generated codebase summary") | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | tests/unit/auto/test_safe_defaults_prompt_non_goals.py | 35 | return SeedDraftLedger.from_goal("placeholder") | CODE |
| LOW⚡ | tests/unit/observability/test_logging.py | 633 | log.info("user.action", name="John Doe", email="john@example.com") | CODE |
| LOW⚡ | tests/unit/observability/test_logging.py | 637 | assert data["name"] == "John Doe" | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tests/unit/orchestrator/test_runner_cancellation.py | 755 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | docs/examples/mcp-config.yaml | 5 | # Usage: | COMMENT |