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

- start every module with `from __future__ import annotations`
- import first-party code with absolute paths under `orchestrator.` (not relative imports), kept sorted
- give every module a one-line-plus triple-quoted docstring
- fully type-annotate every function and method, including `-> None`
- keep lines within 110 characters
- write tests as module-level `def test_*` functions (not test classes)


**Lint/format configs:** `pyproject [tool.ruff]`

**Top-level package:** `orchestrator`


**Naming**
- **Functions** are `snake_case` (100% of 2892).
- **Types** are `PascalCase` (100% of 648).
- **1179 of 2892 functions** are underscore-private — the public surface is the rest.

**Tests**

- **326 test modules**, named `test_*.py` (93%).
- They live in `tests/sdlc/` (53), `tests/pkg/` (42), `tests/registry/` (33), `tests/intake/` (25).

**Errors**

- **58 exception types** of its own, rooted at `LLMError`, `TaskOrchestrationError`, `GatewayError`, `ObjectStoreError`. Failure is signalled by raising these, not by return codes.
