repowise Product Solutions
developers
Give Claude Code, Cursor, and any MCP client a queryable model of your repo.
teams
One shared index, one credit pool, one org install. The whole team on the same brain.
team leads
Flag the risky PRs, the hotspots, and the hidden coupling, on every pull request.
engineering leaders
See how much of your code AI wrote, whether it is healthy, and who owns it.
security
CVE triage that knows whether you actually call the vulnerable code.
enterprise
Self-hosted, air-gapped, and commercially licensed for the whole org.
Book a demo → Pricing Explore Blog Docs Loading pull request analysis repowise Codebase intelligence for AI agents. Open source under AGPL-3.0, hosted SaaS for teams. Every published number ships with its sample size and its conditions.
fix: recover CI and runtime contracts · 2233admin/opencli-Razormind #110 · Repowise
Change-risk score
9.4 out of 10 Elevated
Repository health
4.5 to 4.8 base against this head
This change sits in the top third of this repository's own risk distribution, the band worth reviewing closely. It is riskier than 82% of this repository's own commits.
The largest health movement is in page.tsx , down 3.7. 4 contracts changed , called by 26 symbols in files this PR does not touch.
Files changed 10 in this diff
Contracts changed 4 removed or signature
Outside callers 26 not in this diff
Findings added 35 1 resolved Get this on your own pull requests This page came from an index of 2233admin/opencli-Razormind. No model calls, no configuration, and it refreshes on every push. Install the bot and every pull request gets one of these.
Deterministic analysis, zero model calls · 2233admin/opencli-Razormind overview · Analysed Wed, 02 Sep 2026 12:55:08 GMT tests/unit/test_browser_space_service.py::test_distinct_spaces_can_execute_concurrently
tests/unit/test_browser_space_service.py::test_idempotency_calls_executor_once
tests/unit/test_browser_space_service.py::test_latest_task_is_scoped_to_requested_space
tests/unit/test_browser_space_service.py::test_result_and_events_are_bounded_and_ordered
tests/unit/test_browser_space_service.py::test_runtime_timeout_finishes_task_as_failed
tests/unit/test_browser_space_service.py::test_same_space_tasks_are_serialized
execute_delivery signature changed backend/workflow/delivery_execution.py:392
10 callers outside this PR, 9 inside it.
backend/api/v1/delivery_execution_routes.py::execute tests/integration/test_delivery_execution_api.py::test_execution_and_read_survive_recreated_database_sessions tests/integration/test_delivery_execution_api.py::test_executor_sends_to_durable_receiver_and_replays_one_verified_receipt tests/integration/test_delivery_execution_api.py::test_recreated_sessions_recover_stale_reservation_and_block_ambiguous_send tests/integration/test_delivery_execution_api.py::test_sqlite_raw_evidence_mutations_are_rejected_after_durable_execution tests/integration/test_delivery_execution_api.py::test_two_sessions_cancel_after_send_start_records_one_unknown_attempt tests/integration/test_delivery_execution_api.py::test_two_sessions_cancel_before_send_start_prevents_post_and_result tests/integration/test_delivery_execution_api.py::test_two_sessions_concurrent_execute_posts_once_and_replays_final tests/integration/test_delivery_execution_identifier_race.py::test_empty_execution_table_claim_race_preserves_one_result_and_stable_replay tests/integration/test_delivery_execution_identifier_race.py::test_executor_roundtrip_preserves_raw_operation_and_claim_identifiers
create_space signature changed backend/services/browser_space_service.py:232
2 callers outside this PR.
backend/api/v1/browser_spaces.py::create_browser_space tests/unit/test_browser_space_service.py::_space
execute_task signature changed backend/services/browser_space_service.py:560
2 callers outside this PR, 2 inside it.
tests/unit/test_browser_space_service.py::test_cross_process_cancellation_waits_for_runtime_cleanup tests/unit/test_browser_space_service.py::test_runtime_timeout_finishes_task_as_failed
high primitive obsession
backend/api/v1/studio_workflows.py:475
_start_published_version_run takes 13 parameters
high primitive obsession
backend/services/browser_space_service.py:416
submit_task takes 10 parameters
high primitive obsession
backend/services/browser_space_service.py:232
create_space takes 9 parameters
medium nested complexity
backend/services/browser_space_service.py:416
submit_task nests 4 levels deep
medium complex method
frontend/app/(app)/control/odp-state/page.tsx:72
OdpStatePage has cyclomatic complexity 14
medium complex method
backend/api/v1/chat.py:594
_chat_with_client has cyclomatic complexity 14
medium complex method
backend/api/v1/chat.py:259
_create_durable_run has cyclomatic complexity 14
medium complex method
backend/workflow/delivery_execution.py:287
_claim has cyclomatic complexity 10
medium large method
backend/services/browser_space_service.py:560
execute_task is 91 lines long
medium large method
backend/services/browser_space_service.py:416
submit_task is 105 lines long
medium primitive obsession
backend/api/v1/studio_workflows.py:913
get_project_workflow_evidence_projection takes 8 parameters
medium primitive obsession
backend/api/v1/studio_workflows.py:819
list_project_workflow_run_events takes 7 parameters
medium primitive obsession
backend/api/v1/studio_workflows.py:604
start_published_workflow_run_from_question_bank takes 8 parameters
medium primitive obsession
backend/api/v1/studio_workflows.py:560
start_published_workflow_run takes 7 parameters
medium primitive obsession
backend/services/browser_space_service.py:560
execute_task takes 7 parameters
low large method
frontend/app/(app)/control/odp-state/page.tsx:72
OdpStatePage is 63 lines long
low dry violation
backend/api/v1/studio_workflows.py:844
14% of file duplicated; worst clone shares 27 lines with backend/api/v1/studio_workflows.py
low dry violation
backend/migrations/versions/bc3d4e5f6a7b_schedule_bound_automations.py:28
11% of file duplicated; worst clone shares 8 lines with backend/migrations/versions/bc3d4e5f6a7b_schedule_bound_automations.py
low bumpy road
backend/services/browser_space_service.py:560
execute_task has 3 nested blocks at the same level (bumpy road)
low bumpy road
backend/services/browser_space_service.py:416
submit_task has 3 nested blocks at the same level (bumpy road)
low large method
frontend/components/flow/workflow-editor-session.tsx:95
useCallback callback is 61 lines long
low error handling
backend/channels/doubao_research_channel.py:372
broad `except Exception` catches unrelated errors and can hide bugs
low error handling
backend/api/v1/chat.py:858
broad `except Exception` catches unrelated errors and can hide bugs
low error handling
backend/api/v1/chat.py:876
broad `except Exception` catches unrelated errors and can hide bugs
low bumpy road
backend/workflow/delivery_execution.py:392
execute_delivery has 3 nested blocks at the same level (bumpy road)
low large method
backend/api/v1/studio_workflows.py:604
start_published_workflow_run_from_question_bank is 65 lines long
low large method
backend/api/v1/studio_workflows.py:475
_start_published_version_run is 60 lines long
low large method
backend/services/browser_space_service.py:232
create_space is 62 lines long
low primitive obsession
backend/api/v1/studio_workflows.py:885
get_project_workflow_evidence_batch takes 6 parameters
low primitive obsession
backend/api/v1/studio_workflows.py:795
get_project_workflow_run_projection takes 5 parameters
low primitive obsession
backend/api/v1/studio_workflows.py:361
_get_project_workflow_run takes 5 parameters
tests/integration/test_auth_api.py
tests/integration/test_presets_api.py
tests/integration/test_record_graph_api.py
tests/integration/test_delivery_authorization_api.py
tests/integration/test_evidence_batch_materialization_api.py
tests/integration/test_dashboard_api.py
tests/integration/test_image_studio_api.py
tests/integration/test_notifications_api.py
tests/integration/test_dataflow_triggering_api.py
tests/integration/test_tasks_api.py
tests/skills/test_execute_loop_live.py
tests/unit/security/test_identity.py
tests/unit/test_workflow_rss_source_executor.py
tests/unit/api/test_automation_starters.py
tests/integration/test_provider_models_api.py
tests/integration/test_auth_ws.py
tests/unit/api/test_nodes_upsert.py
tests/unit/test_migration_heads.py
tests/integration/test_delivery_execution_api.py
tests/integration/test_delivery_execution_identifier_race.py
tests/integration/test_delivery_execution_migration_guards.py
tests/unit/test_browser_space_service.py
tests/integration/test_dataflow_operator_pipeline_api.py
tests/integration/test_generic_webhook_live.py
tests/integration/test_studio_bootstrap_api.py
tests/integration/test_studio_lifecycle_api.py 7 changed files have no test importing them.
Blast radius on the repo map Every file in the repository, grouped into its own directories and sized by lines. The ones this PR changes are lit, and everything that imports them is marked.
Blast radius Health Churn
Base Head
backend chrome compat docs frontend iii odp-rs openspec tests api browser_act_packs channels schemas services workflow app components lib integration unit v1 ecommerce lead-generati… social-listening intelli… (app) flow provide… records ui flow workflow channels control pipeline
changed, health fell changed, health rose changed, health held imports a changed file untouched changed by this PR
Drawing 1,673 of 1,834 files at a readable size, grouped by directory and sized by lines of code. 10 changed here reach 50 more by import. 161 are too small to see at this width, which is what the frame below is for.
Inside backend agent_runtimes api browser_act_packs channels control image_st… llm migratio… models pipeline plan_ir plugins schemas security services skills workflow v1 ecommerce lead-gene… social-listening video-platforms versions intelligence code… brow… open… ski… agen… se… job… __in… query… pip… exe… val… capa… iii… ope… workf… age… browser… image_studi… op… plug… re… workben… di… lo… pr… capabi… compil… data_o… datafl… delive… deliv… demand… dify_i… ev… ev… ev… ex… fl… hd… ht… ii… iii_coll… intelligence… kats_… nat… nat… nat… nat… nod… ope… opencli_hda_tracer.py res… res… res… rss_… runt… runt… sit… swa… to… wo… bro… br… brow… chat… dashbo… de… iii_co… image_… nodes… ope… studi… workfl… wor… h5… l9… report… simul… am… SK… SKI… pa…
696 files, 6 changed by this PR and 39 that import one. This PR changes 8 files in total, spread across more than one top-level directory. Click any directory above to frame it instead.
Changed agent_runtime_dispatch.py agent_server.py __init__.py studio_workflows.py doubao_research_channel.py browser_space_service.py page.tsx global-agent-dock.tsx