# `orchestrator.plugin.server`
<!-- generated by `orchestrator understand`; the PKG is source of truth, edits here are advisory -->

[← Episteme](../README.md) · [Architecture](../architecture.md)

**Source:** [`src/orchestrator/plugin/server.py`](../../src/orchestrator/plugin/server.py)

1 types · 37 functions · python

## Changing this safely

**Tested by** (2): `tests.plugin.test_manifests`, `tests.plugin.test_server`

**Most depended-upon here** — a change to these reaches the most code (call graph, ≤4 hops):

- [`_open_repo`](../../src/orchestrator/plugin/server.py#L183) — reaches **13** symbols
- [`_repos_note`](../../src/orchestrator/plugin/server.py#L203) — reaches **11** symbols
- [`_with_repos_note`](../../src/orchestrator/plugin/server.py#L241) — reaches **10** symbols
- [`_repo_store`](../../src/orchestrator/plugin/server.py#L195) — reaches **7** symbols
- [`_in_repo_store`](../../src/orchestrator/plugin/server.py#L262) — reaches **5** symbols
- [`_merged_store`](../../src/orchestrator/plugin/server.py#L275) — reaches **4** symbols
- [`_standing`](../../src/orchestrator/plugin/server.py#L287) — reaches **4** symbols
- [`_import_server_class`](../../src/orchestrator/plugin/server.py#L943) — reaches **3** symbols

_3 of the symbols other code depends on here have no test path the graph can see — worth a second look before changing them. Absence of a path is not proof of absence of a test: calls through an attribute chain (`obj.method()`) are skipped rather than guessed at, so indirect coverage is invisible._

## Types

### `HttpServer`

[`src/orchestrator/plugin/server.py:974`](../../src/orchestrator/plugin/server.py#L974)

- **Called by** (1): [`build_http_server`](../../src/orchestrator/plugin/server.py#L989)
- **Fields**: `server`, `transport`
- **Documented in**: `CHANGELOG.md`

## Functions

### `_blast_markdown`

[`src/orchestrator/plugin/server.py:834`](../../src/orchestrator/plugin/server.py#L834)

- **Called by** (1): [`run`](../../src/orchestrator/plugin/server.py#L386)

### `_cross_repo_reach`

[`src/orchestrator/plugin/server.py:315`](../../src/orchestrator/plugin/server.py#L315)

- **Called by** (1): [`run`](../../src/orchestrator/plugin/server.py#L386)
- **Calls** (1): [`unscope_id`](../../src/orchestrator/pkg/scoping.py#L97)

### `_import_server_class`

[`src/orchestrator/plugin/server.py:943`](../../src/orchestrator/plugin/server.py#L943)

- **Called by** (2): [`build_http_server`](../../src/orchestrator/plugin/server.py#L989), [`build_server`](../../src/orchestrator/plugin/server.py#L964)

### `_in_repo`

[`src/orchestrator/plugin/server.py:251`](../../src/orchestrator/plugin/server.py#L251)

- **Called by** (3): [`docs_for`](../../src/orchestrator/plugin/server.py#L774), [`map_repo`](../../src/orchestrator/plugin/server.py#L342), [`sdlc_approve`](../../src/orchestrator/plugin/server.py#L718)
- **Calls** (2): [`_open_repo`](../../src/orchestrator/plugin/server.py#L183), [`_with_repos_note`](../../src/orchestrator/plugin/server.py#L241)

### `_in_repo_store`

[`src/orchestrator/plugin/server.py:262`](../../src/orchestrator/plugin/server.py#L262)

- **Called by** (5): [`blast_radius`](../../src/orchestrator/plugin/server.py#L373), [`explain_symbol`](../../src/orchestrator/plugin/server.py#L417), [`investigate`](../../src/orchestrator/plugin/server.py#L443), [`localize`](../../src/orchestrator/plugin/server.py#L556), [`regression_gaps`](../../src/orchestrator/plugin/server.py#L591)
- **Calls** (2): [`_repo_store`](../../src/orchestrator/plugin/server.py#L195), [`_with_repos_note`](../../src/orchestrator/plugin/server.py#L241)

### `_in_repos_store`

[`src/orchestrator/plugin/server.py:301`](../../src/orchestrator/plugin/server.py#L301)

- **Called by** (2): [`blast_radius`](../../src/orchestrator/plugin/server.py#L373), [`investigate`](../../src/orchestrator/plugin/server.py#L443)
- **Calls** (2): [`_merged_store`](../../src/orchestrator/plugin/server.py#L275), [`_standing`](../../src/orchestrator/plugin/server.py#L287)

### `_joins_proposal`

[`src/orchestrator/plugin/server.py:513`](../../src/orchestrator/plugin/server.py#L513)

- **Called by** (1): [`pkg_joins`](../../src/orchestrator/plugin/server.py#L487)
- **Calls** (2): [`propose`](../../src/orchestrator/pkg/joins_propose.py#L73), [`unresolved_by_repo`](../../src/orchestrator/pkg/joins_propose.py#L237)

### `_joins_report`

[`src/orchestrator/plugin/server.py:534`](../../src/orchestrator/plugin/server.py#L534)

- **Called by** (1): [`pkg_joins`](../../src/orchestrator/plugin/server.py#L487)

### `_merged_store`

[`src/orchestrator/plugin/server.py:275`](../../src/orchestrator/plugin/server.py#L275)

- **Called by** (2): [`_in_repos_store`](../../src/orchestrator/plugin/server.py#L301), [`pkg_joins`](../../src/orchestrator/plugin/server.py#L487)
- **Calls** (3): [`load_or_extract_repos`](../../src/orchestrator/pkg/persistence.py#L366), [`load_repo_config`](../../src/orchestrator/pkg/repos.py#L191), `orchestrator.pkg.FactStore`

### `_open_repo`

[`src/orchestrator/plugin/server.py:183`](../../src/orchestrator/plugin/server.py#L183)

- **Called by** (3): [`_in_repo`](../../src/orchestrator/plugin/server.py#L251), [`_repo_store`](../../src/orchestrator/plugin/server.py#L195), [`sdlc_plan`](../../src/orchestrator/plugin/server.py#L668)
- **Calls** (3): [`Settings`](../../src/orchestrator/registry/api/config.py#L12), [`materialize_repo_source`](../../src/orchestrator/registry/api/workspace.py#L216), [`resolve_repo_source`](../../src/orchestrator/registry/api/workspace.py#L166)
- **Documented in**: `docs/specs/comprehension-skill-spec.md#phases`

### `_register_tools`

[`src/orchestrator/plugin/server.py:958`](../../src/orchestrator/plugin/server.py#L958)

- **Called by** (2): [`build_http_server`](../../src/orchestrator/plugin/server.py#L989), [`build_server`](../../src/orchestrator/plugin/server.py#L964)
- **Documented in**: `docs/specs/comprehension-skill-spec.md#what-already-exists-reuse-dont-rebuild`

### `_repo_store`

[`src/orchestrator/plugin/server.py:195`](../../src/orchestrator/plugin/server.py#L195)

- **Called by** (2): [`_in_repo_store`](../../src/orchestrator/plugin/server.py#L262), [`root_cause`](../../src/orchestrator/plugin/server.py#L629)
- **Calls** (3): [`_open_repo`](../../src/orchestrator/plugin/server.py#L183), `orchestrator.pkg.FactStore`, `orchestrator.pkg.load_or_extract`
- **Documented in**: `docs/specs/comprehension-skill-spec.md#phases`

### `_repos_note`

[`src/orchestrator/plugin/server.py:203`](../../src/orchestrator/plugin/server.py#L203)

- **Called by** (1): [`_with_repos_note`](../../src/orchestrator/plugin/server.py#L241)
- **Calls** (2): [`find_repo_config`](../../src/orchestrator/pkg/repos.py#L209), [`load_repo_config`](../../src/orchestrator/pkg/repos.py#L191)

### `_standing`

[`src/orchestrator/plugin/server.py:287`](../../src/orchestrator/plugin/server.py#L287)

- **Called by** (2): [`_in_repos_store`](../../src/orchestrator/plugin/server.py#L301), [`pkg_joins`](../../src/orchestrator/plugin/server.py#L487)

### `_with_repos_note`

[`src/orchestrator/plugin/server.py:241`](../../src/orchestrator/plugin/server.py#L241)

- **Called by** (2): [`_in_repo`](../../src/orchestrator/plugin/server.py#L251), [`_in_repo_store`](../../src/orchestrator/plugin/server.py#L262)
- **Calls** (1): [`_repos_note`](../../src/orchestrator/plugin/server.py#L203)

### `blast_radius`

[`src/orchestrator/plugin/server.py:373`](../../src/orchestrator/plugin/server.py#L373)

- **Called by** (0 production · 11 test): [`test_a_config_too_broken_to_read_still_speaks_up`](../../tests/plugin/test_server.py#L776), [`test_a_project_with_one_repo_hears_nothing`](../../tests/plugin/test_server.py#L768), [`test_a_single_repo_answer_says_the_project_declares_more`](../../tests/plugin/test_server.py#L744), [`test_a_tool_takes_one_repo_or_many_but_never_both`](../../tests/plugin/test_server.py#L677), [`test_an_unreadable_repo_reports_the_error_and_nothing_else`](../../tests/plugin/test_server.py#L809), [`test_bad_repo_path_returns_error_not_exception`](../../tests/plugin/test_server.py#L192), [`test_blast_radius_not_found`](../../tests/plugin/test_server.py#L99), [`test_blast_radius_reports_callers_and_touches`](../../tests/plugin/test_server.py#L89), [`test_blast_radius_reports_dependents_in_another_repo`](../../tests/plugin/test_server.py#L639), [`test_multi_repo_answers_carry_their_standing`](../../tests/plugin/test_server.py#L651), [`test_the_merged_answer_does_not_nudge_toward_itself`](../../tests/plugin/test_server.py#L787)
- **Calls** (2): [`_in_repo_store`](../../src/orchestrator/plugin/server.py#L262), [`_in_repos_store`](../../src/orchestrator/plugin/server.py#L301)

### `build_http_server`

[`src/orchestrator/plugin/server.py:989`](../../src/orchestrator/plugin/server.py#L989)

- **Called by** (1 production · 3 test): [`main`](../../src/orchestrator/plugin/__main__.py#L52), [`test_http_server_loopback_unauthenticated_is_allowed`](../../tests/plugin/test_server.py#L386), [`test_http_server_refuses_public_bind_without_auth`](../../tests/plugin/test_server.py#L376), [`test_http_server_wires_static_auth`](../../tests/plugin/test_server.py#L396)
- **Calls** (4): [`HttpServer`](../../src/orchestrator/plugin/server.py#L974), [`_import_server_class`](../../src/orchestrator/plugin/server.py#L943), [`_register_tools`](../../src/orchestrator/plugin/server.py#L958), [`build_auth_from_env`](../../src/orchestrator/plugin/auth.py#L122)
- **Documented in**: `CHANGELOG.md`, `docs/specs/comprehension-skill-spec.md#what-already-exists-reuse-dont-rebuild`

### `build_server`

[`src/orchestrator/plugin/server.py:964`](../../src/orchestrator/plugin/server.py#L964)

- **Called by** (1): [`main`](../../src/orchestrator/plugin/__main__.py#L52)
- **Calls** (2): [`_import_server_class`](../../src/orchestrator/plugin/server.py#L943), [`_register_tools`](../../src/orchestrator/plugin/server.py#L958)
- **Documented in**: `docs/specs/comprehension-skill-spec.md#design-decisions`, `docs/specs/comprehension-skill-spec.md#the-agent-skill-skillmd`, `docs/specs/comprehension-skill-spec.md#what-already-exists-reuse-dont-rebuild`

### `docs_for`

[`src/orchestrator/plugin/server.py:774`](../../src/orchestrator/plugin/server.py#L774)

- **Called by** (0 production · 2 test): [`test_docs_for_no_docs_reports_zero`](../../tests/plugin/test_server.py#L123), [`test_docs_for_summary_and_symbol`](../../tests/plugin/test_server.py#L110)
- **Calls** (1): [`_in_repo`](../../src/orchestrator/plugin/server.py#L251)

### `doctor`

[`src/orchestrator/plugin/server.py:56`](../../src/orchestrator/plugin/server.py#L56)

- **Called by** (0 production · 1 test): [`test_doctor_returns_readiness_structure`](../../tests/plugin/test_server.py#L43)
- **Calls** (1): [`run_env_checks`](../../src/orchestrator/doctor.py#L125)

### `explain_symbol`

[`src/orchestrator/plugin/server.py:417`](../../src/orchestrator/plugin/server.py#L417)

- **Called by** (0 production · 2 test): [`test_explain_symbol_lists_callers`](../../tests/plugin/test_server.py#L104), [`test_the_nudge_reaches_every_comprehension_tool_that_takes_one_repo`](../../tests/plugin/test_server.py#L759)
- **Calls** (1): [`_in_repo_store`](../../src/orchestrator/plugin/server.py#L262)
- **Documented in**: `CHANGELOG.md`, `CLAUDE_GUIDE.md#6-the-tools-spine-exposes`, `CLAUDE_GUIDE.md#sdlc-plan`, `CODEX_GUIDE.md#6-the-tools-spine-exposes`, `CODEX_GUIDE.md#sdlc-plan`, `USER_GUIDE.md#step-10-call-it-from-claude-codex-or-your-ide-mcp-server`

### `ingest_preview`

[`src/orchestrator/plugin/server.py:67`](../../src/orchestrator/plugin/server.py#L67)

- **Called by** (0 production · 1 test): [`test_ingest_preview_summarizes_a_dry_run`](../../tests/plugin/test_server.py#L219)
- **Calls** (2): [`build_service_for`](../../src/orchestrator/intake/factory.py#L272), [`parse_source_uri`](../../src/orchestrator/intake/service.py#L40)
- **Documented in**: `CLAUDE_GUIDE.md#6-the-tools-spine-exposes`, `CLAUDE_GUIDE.md#ingest-preview`, `CODEX_GUIDE.md#6-the-tools-spine-exposes`, `CODEX_GUIDE.md#ingest-preview`, `USER_GUIDE.md#step-10-call-it-from-claude-codex-or-your-ide-mcp-server`, `docs/specs/codex-plugin-keyless-roadmap.md#phases`

### `investigate`

[`src/orchestrator/plugin/server.py:443`](../../src/orchestrator/plugin/server.py#L443)

- **Called by** (0 production · 5 test): [`test_a_tool_takes_one_repo_or_many_but_never_both`](../../tests/plugin/test_server.py#L677), [`test_investigate_across_repos_reports_cross_repo_landing`](../../tests/plugin/test_server.py#L667), [`test_investigate_lands_on_real_symbols`](../../tests/plugin/test_server.py#L127), [`test_investigate_requires_a_ticket`](../../tests/plugin/test_server.py#L134), [`test_the_nudge_reaches_every_comprehension_tool_that_takes_one_repo`](../../tests/plugin/test_server.py#L759)
- **Calls** (2): [`_in_repo_store`](../../src/orchestrator/plugin/server.py#L262), [`_in_repos_store`](../../src/orchestrator/plugin/server.py#L301)

### `localize`

[`src/orchestrator/plugin/server.py:556`](../../src/orchestrator/plugin/server.py#L556)

- **Called by** (0 production · 2 test): [`test_localize_requires_a_trace`](../../tests/plugin/test_server.py#L152), [`test_localize_resolves_the_fault_frame`](../../tests/plugin/test_server.py#L138)
- **Calls** (1): [`_in_repo_store`](../../src/orchestrator/plugin/server.py#L262)

### `map_repo`

[`src/orchestrator/plugin/server.py:342`](../../src/orchestrator/plugin/server.py#L342)

- **Called by** (0 production · 6 test): [`test_a_project_with_one_repo_hears_nothing`](../../tests/plugin/test_server.py#L768), [`test_bad_repo_path_returns_error_not_exception`](../../tests/plugin/test_server.py#L192), [`test_disallowed_git_url_is_rejected`](../../tests/plugin/test_server.py#L198), [`test_map_repo_rejects_unknown_lens`](../../tests/plugin/test_server.py#L85), [`test_map_repo_structured_and_markdown`](../../tests/plugin/test_server.py#L77), [`test_the_nudge_reaches_every_comprehension_tool_that_takes_one_repo`](../../tests/plugin/test_server.py#L759)
- **Calls** (1): [`_in_repo`](../../src/orchestrator/plugin/server.py#L251)
- **Documented in**: `CHANGELOG.md`, `CLAUDE_GUIDE.md#6-the-tools-spine-exposes`, `CLAUDE_GUIDE.md#9-safe-vs-live-the-write-gate`, `CLAUDE_GUIDE.md#asking-across-several-repositories`, `CLAUDE_GUIDE.md#using-the-understand-codebase-skill`, `CODEX_GUIDE.md#6-the-tools-spine-exposes`

### `pkg_grounding`

[`src/orchestrator/plugin/server.py:148`](../../src/orchestrator/plugin/server.py#L148)

- **Called by** (0 production · 2 test): [`test_pkg_grounding_empty_for_unrelated_repo`](../../tests/plugin/test_server.py#L57), [`test_pkg_grounding_surfaces_existing_symbols`](../../tests/plugin/test_server.py#L50)
- **Calls** (1): [`from_repo`](../../src/orchestrator/sdlc/grounding.py#L48)
- **Documented in**: `CLAUDE_GUIDE.md#6-the-tools-spine-exposes`, `CLAUDE_GUIDE.md#8-walkthrough-brownfield`, `CLAUDE_GUIDE.md#env-the-bare-minimum`, `CLAUDE_GUIDE.md#pkg-grounding`, `CODEX_GUIDE.md#6-the-tools-spine-exposes`, `CODEX_GUIDE.md#8-walkthrough-brownfield`

### `pkg_joins`

[`src/orchestrator/plugin/server.py:487`](../../src/orchestrator/plugin/server.py#L487)

- **Called by** (0 production · 4 test): [`test_pkg_joins_check_reports_what_the_declared_joins_placed`](../../tests/plugin/test_server.py#L684), [`test_pkg_joins_check_says_nothing_is_declared_rather_than_zero_unplaced`](../../tests/plugin/test_server.py#L695), [`test_pkg_joins_propose_derives_the_topology_from_evidence`](../../tests/plugin/test_server.py#L705), [`test_pkg_joins_rejects_an_unknown_mode_and_a_missing_config`](../../tests/plugin/test_server.py#L717)
- **Calls** (4): [`_joins_proposal`](../../src/orchestrator/plugin/server.py#L513), [`_joins_report`](../../src/orchestrator/plugin/server.py#L534), [`_merged_store`](../../src/orchestrator/plugin/server.py#L275), [`_standing`](../../src/orchestrator/plugin/server.py#L287)

### `read_memory_bank`

[`src/orchestrator/plugin/server.py:161`](../../src/orchestrator/plugin/server.py#L161)

- **Calls** (1): [`read_memory_bank`](../../src/orchestrator/knowledge/access.py#L43)

### `regression_gaps`

[`src/orchestrator/plugin/server.py:591`](../../src/orchestrator/plugin/server.py#L591)

- **Called by** (0 production · 3 test): [`test_regression_gaps_flags_untested_caller`](../../tests/plugin/test_server.py#L156), [`test_regression_gaps_needs_symbol_or_trace`](../../tests/plugin/test_server.py#L163), [`test_the_nudge_reaches_every_comprehension_tool_that_takes_one_repo`](../../tests/plugin/test_server.py#L759)
- **Calls** (1): [`_in_repo_store`](../../src/orchestrator/plugin/server.py#L262)
- **Documented in**: `CHANGELOG.md`, `CLAUDE_GUIDE.md#6-the-tools-spine-exposes`, `CLAUDE_GUIDE.md#using-the-understand-codebase-skill`, `CODEX_GUIDE.md#6-the-tools-spine-exposes`, `USER_GUIDE.md#step-10-call-it-from-claude-codex-or-your-ide-mcp-server`, `codex-marketplace/README.md#what-it-exposes`

### `root_cause`

[`src/orchestrator/plugin/server.py:629`](../../src/orchestrator/plugin/server.py#L629)

- **Called by** (0 production · 3 test): [`test_root_cause_deterministic_by_default`](../../tests/plugin/test_server.py#L167), [`test_root_cause_llm_without_model_errors`](../../tests/plugin/test_server.py#L185), [`test_root_cause_requires_a_bug`](../../tests/plugin/test_server.py#L181)
- **Calls** (6): [`_repo_store`](../../src/orchestrator/plugin/server.py#L195), [`build_rca`](../../src/orchestrator/sdlc/rca.py#L207), [`load_local_env`](../../src/orchestrator/core/env.py#L20), `orchestrator.core.llm.LiteLLMClient`, [`render_rca_md`](../../src/orchestrator/sdlc/rca.py#L255), [`resolve_codegen_model`](../../src/orchestrator/sdlc/codegen.py#L44)
- **Documented in**: `CHANGELOG.md`, `CLAUDE_GUIDE.md#6-the-tools-spine-exposes`, `CLAUDE_GUIDE.md#9-safe-vs-live-the-write-gate`, `CODEX_GUIDE.md#6-the-tools-spine-exposes`, `CODEX_GUIDE.md#9-safe-vs-live-the-write-gate`, `USER_GUIDE.md#step-10-call-it-from-claude-codex-or-your-ide-mcp-server`

### `sdlc_approve`

[`src/orchestrator/plugin/server.py:718`](../../src/orchestrator/plugin/server.py#L718)

- **Called by** (0 production · 5 test): [`test_a_rejection_says_who_and_why`](../../tests/plugin/test_server.py#L552), [`test_an_approval_is_about_one_repo_and_is_not_nudged`](../../tests/plugin/test_server.py#L797), [`test_an_approval_nobody_is_named_for_is_refused`](../../tests/plugin/test_server.py#L572), [`test_approving_a_plan_that_does_not_exist_is_refused`](../../tests/plugin/test_server.py#L564), [`test_approving_binds_the_decision_to_the_document`](../../tests/plugin/test_server.py#L539)
- **Calls** (1): [`_in_repo`](../../src/orchestrator/plugin/server.py#L251)

### `sdlc_decide_gate`

[`src/orchestrator/plugin/server.py:892`](../../src/orchestrator/plugin/server.py#L892)

- **Called by** (0 production · 1 test): [`test_sdlc_decide_gate_delegates`](../../tests/plugin/test_server.py#L344)
- **Calls** (1): [`decide_gate`](../../src/orchestrator/sdlc/run_control.py#L130)
- **Documented in**: `CLAUDE_GUIDE.md#the-autonomous-run-sdlc-start-run-friends`, `CODEX_GUIDE.md#the-autonomous-run-sdlc-start-run-friends`, `docs/specs/codex-plugin-keyless-roadmap.md#tools-needing-no-credentials-at-all-17-of-19`

### `sdlc_feature`

[`src/orchestrator/plugin/server.py:88`](../../src/orchestrator/plugin/server.py#L88)

- **Called by** (0 production · 4 test): [`test_sdlc_feature_live_requires_confirm`](../../tests/plugin/test_server.py#L244), [`test_sdlc_feature_maps_run_error`](../../tests/plugin/test_server.py#L309), [`test_sdlc_feature_passes_greenfield_brownfield_params`](../../tests/plugin/test_server.py#L273), [`test_sdlc_feature_safe_maps_result`](../../tests/plugin/test_server.py#L250)
- **Calls** (1): [`run_feature`](../../src/orchestrator/sdlc/feature_runner.py#L623)

### `sdlc_plan`

[`src/orchestrator/plugin/server.py:668`](../../src/orchestrator/plugin/server.py#L668)

- **Called by** (0 production · 10 test): [`test_a_bad_repo_path_is_reported_not_raised`](../../tests/plugin/test_server.py#L509), [`test_a_rejection_says_who_and_why`](../../tests/plugin/test_server.py#L552), [`test_a_spec_with_nothing_to_satisfy_is_refused`](../../tests/plugin/test_server.py#L490), [`test_an_approval_nobody_is_named_for_is_refused`](../../tests/plugin/test_server.py#L572), [`test_an_invented_field_is_refused_with_the_valid_ones`](../../tests/plugin/test_server.py#L479), [`test_approving_binds_the_decision_to_the_document`](../../tests/plugin/test_server.py#L539), [`test_persist_can_be_turned_off`](../../tests/plugin/test_server.py#L498), [`test_sdlc_plan_needs_no_model_and_no_credentials`](../../tests/plugin/test_server.py#L465), [`test_sdlc_plan_returns_the_document_and_where_it_was_written`](../../tests/plugin/test_server.py#L455), [`test_the_plugin_and_the_cli_render_the_same_document`](../../tests/plugin/test_server.py#L517)
- **Calls** (2): [`_open_repo`](../../src/orchestrator/plugin/server.py#L183), [`validate_spec`](../../src/orchestrator/sdlc/spec_file.py#L60)

### `sdlc_run_result`

[`src/orchestrator/plugin/server.py:909`](../../src/orchestrator/plugin/server.py#L909)

- **Called by** (0 production · 1 test): [`test_sdlc_run_status_and_result_delegate`](../../tests/plugin/test_server.py#L357)
- **Calls** (1): [`run_result`](../../src/orchestrator/sdlc/run_control.py#L181)
- **Documented in**: `CLAUDE_GUIDE.md#the-autonomous-run-sdlc-start-run-friends`, `CODEX_GUIDE.md#the-autonomous-run-sdlc-start-run-friends`, `docs/specs/codex-plugin-keyless-roadmap.md#tools-needing-no-credentials-at-all-17-of-19`, `docs/specs/sdlc-tracking-blueprint.md#10-surfacing-where-the-numbers-show-up`

### `sdlc_run_status`

[`src/orchestrator/plugin/server.py:885`](../../src/orchestrator/plugin/server.py#L885)

- **Called by** (0 production · 1 test): [`test_sdlc_run_status_and_result_delegate`](../../tests/plugin/test_server.py#L357)
- **Calls** (1): [`run_status`](../../src/orchestrator/sdlc/run_control.py#L102)
- **Documented in**: `CLAUDE_GUIDE.md#the-autonomous-run-sdlc-start-run-friends`, `CODEX_GUIDE.md#the-autonomous-run-sdlc-start-run-friends`, `docs/specs/codex-plugin-keyless-roadmap.md#tools-needing-no-credentials-at-all-17-of-19`

### `sdlc_start_run`

[`src/orchestrator/plugin/server.py:859`](../../src/orchestrator/plugin/server.py#L859)

- **Called by** (0 production · 2 test): [`test_sdlc_start_run_create_jira_requires_confirm`](../../tests/plugin/test_server.py#L323), [`test_sdlc_start_run_delegates_to_run_control`](../../tests/plugin/test_server.py#L330)
- **Calls** (1): [`start_run`](../../src/orchestrator/sdlc/run_control.py#L49)
- **Documented in**: `CLAUDE_GUIDE.md#6-the-tools-spine-exposes`, `CLAUDE_GUIDE.md#9-safe-vs-live-the-write-gate`, `CLAUDE_GUIDE.md#the-autonomous-run-sdlc-start-run-friends`, `CODEX_GUIDE.md#6-the-tools-spine-exposes`, `CODEX_GUIDE.md#9-safe-vs-live-the-write-gate`, `CODEX_GUIDE.md#the-autonomous-run-sdlc-start-run-friends`

## Imports

`__future__.annotations`, `collections.abc.Callable`, `collections.abc.Iterator`, `contextlib.contextmanager`, `dataclasses.dataclass`, `datetime`, `mcp.server.MCPServer`, [`orchestrator.core.env`](../../src/orchestrator/core/env.py#L1), [`orchestrator.core.llm`](../../src/orchestrator/core/llm/__init__.py#L1), [`orchestrator.doctor`](../../src/orchestrator/doctor.py#L1), [`orchestrator.intake.factory`](orchestrator.intake.factory.md), [`orchestrator.intake.service`](../../src/orchestrator/intake/service.py#L1), [`orchestrator.intake.specs`](../../src/orchestrator/intake/specs.py#L1), [`orchestrator.knowledge.access`](../../src/orchestrator/knowledge/access.py#L1), [`orchestrator.knowledge.current_state`](orchestrator.knowledge.current_state.md), [`orchestrator.pkg`](../../src/orchestrator/pkg/__init__.py#L1), [`orchestrator.pkg.joins_propose`](../../src/orchestrator/pkg/joins_propose.py#L1), [`orchestrator.pkg.persistence`](orchestrator.pkg.persistence.md), [`orchestrator.pkg.repos`](../../src/orchestrator/pkg/repos.py#L1), [`orchestrator.pkg.scoping`](../../src/orchestrator/pkg/scoping.py#L1), [`orchestrator.plugin.auth`](../../src/orchestrator/plugin/auth.py#L1), [`orchestrator.registry.api.config`](../../src/orchestrator/registry/api/config.py#L1), [`orchestrator.registry.api.workspace`](orchestrator.registry.api.workspace.md), [`orchestrator.sdlc.builddoc`](orchestrator.sdlc.builddoc.md), [`orchestrator.sdlc.codegen`](orchestrator.sdlc.codegen.md), [`orchestrator.sdlc.coverage`](../../src/orchestrator/sdlc/coverage.py#L1), [`orchestrator.sdlc.feature_runner`](orchestrator.sdlc.feature_runner.md), [`orchestrator.sdlc.grounding`](../../src/orchestrator/sdlc/grounding.py#L1), [`orchestrator.sdlc.investigate`](../../src/orchestrator/sdlc/investigate.py#L1), [`orchestrator.sdlc.localize`](../../src/orchestrator/sdlc/localize.py#L1), [`orchestrator.sdlc.rca`](../../src/orchestrator/sdlc/rca.py#L1), [`orchestrator.sdlc.run_control`](../../src/orchestrator/sdlc/run_control.py#L1), [`orchestrator.sdlc.spec_file`](../../src/orchestrator/sdlc/spec_file.py#L1), `typing.Any`

## Imported by

[`orchestrator.plugin`](../../src/orchestrator/plugin/__init__.py#L1), [`orchestrator.plugin.__main__`](../../src/orchestrator/plugin/__main__.py#L1), [`tests.plugin.test_manifests`](../../tests/plugin/test_manifests.py#L1), [`tests.plugin.test_server`](../../tests/plugin/test_server.py#L1)
