Elixir agent orchestration service that polls Linear, creates per-issue workspaces, and runs Codex in app-server mode.
- Elixir:
1.19.x(OTP 28) viamise. - Install deps:
mix setup. - Main quality gate:
make all(format check, lint, coverage, dialyzer).
- Runtime config is loaded from
WORKFLOW.mdfront matter viaSymphonyElixir.WorkflowandSymphonyElixir.Config. - Keep the implementation aligned with
SPEC.mdwhere practical.- The implementation may be a superset of the spec.
- The implementation must not conflict with the spec.
- If implementation changes meaningfully alter the intended behavior, update the spec in the same change where practical so the spec stays current.
- Prefer adding config access through
SymphonyElixir.Configinstead of ad-hoc env reads. - Workspace safety is critical:
- Never run Codex turn cwd in source repo.
- Workspaces must stay under configured workspace root.
- Orchestrator behavior is stateful and concurrency-sensitive; preserve retry, reconciliation, and cleanup semantics.
- Follow
docs/logging.mdfor logging conventions and required issue/session context fields.
Run targeted tests while iterating, then run full gates before handoff.
make all- Public functions (
def) inlib/must have an adjacent@spec. defpspecs are optional.@implcallback implementations are exempt from local@specrequirement.- Keep changes narrowly scoped; avoid unrelated refactors.
- Follow existing module/style patterns in
lib/symphony_elixir/*.
Validation command:
mix specs.check- PR body must follow
.github/pull_request_template.mdexactly. - Validate PR body locally when needed:
mix pr_body.check --file /path/to/pr_body.mdIf behavior/config changes, update docs in the same PR:
README.mdfor project overview and run instructions.WORKFLOW.mdfor workflow/config contract changes.