Core Entities
The Symphony service operates on the following domain entities:Issue
Normalized issue record used by orchestration, prompt rendering, and observability output.Stable tracker-internal ID
Human-readable ticket key (example:
ABC-123)Issue title
Issue description text
Lower numbers are higher priority in dispatch sorting
Current tracker state name
Tracker-provided branch metadata if available
URL to the issue in the tracker
Normalized to lowercase
List of blocker references, each containing:
id(string | null)identifier(string | null)state(string | null)
Issue creation timestamp
Last update timestamp
Workflow Definition
ParsedWORKFLOW.md payload.
YAML front matter root object
Markdown body after front matter, trimmed
Service Config (Typed View)
Typed runtime values derived fromWorkflowDefinition.config plus environment resolution.
Workspace
Filesystem workspace assigned to one issue identifier.Workspace path (current runtime typically uses absolute paths, but relative roots are possible if configured without path separators)
Sanitized issue identifier
Used to gate
after_create hook executionRun Attempt
One execution attempt for one issue.Issue tracker-internal ID
Human-readable issue identifier
null for first run, >=1 for retries/continuationAbsolute path to workspace directory
Run start timestamp
Current run status
Optional error message
Live Session (Agent Session Metadata)
State tracked while a coding-agent subprocess is running.Format:
<thread_id>-<turn_id>Coding agent thread identifier
Current turn identifier
Process ID of the running Codex app-server
Most recent event type from Codex
Timestamp of last Codex event
Summarized payload of last message
Input tokens consumed
Output tokens generated
Total tokens (input + output)
Last reported input token count
Last reported output token count
Last reported total token count
Number of coding-agent turns started within the current worker lifetime
Retry Entry
Scheduled retry state for an issue.Issue tracker-internal ID
Best-effort human ID for status surfaces/logs
1-based retry attempt number
Monotonic clock timestamp for retry execution
Runtime-specific timer reference
Error message from previous attempt
Orchestrator Runtime State
Single authoritative in-memory state owned by the orchestrator.Current effective poll interval
Current effective global concurrency limit
Map of
issue_id -> running entrySet of issue IDs reserved/running/retrying
Map of
issue_id -> RetryEntrySet of issue IDs (bookkeeping only, not dispatch gating)
Aggregate tokens + runtime seconds
Latest rate-limit snapshot from agent events
Stable Identifiers and Normalization Rules
Issue ID
Use for tracker lookups and internal map keys
Issue Identifier
Use for human-readable logs and workspace naming
Workspace Key
Derive from
issue.identifier by replacing any character not in [A-Za-z0-9._-] with _. Use the sanitized value for the workspace directory name.Normalized Issue State
Compare states after
trim + lowercaseSession ID
Compose from coding-agent
thread_id and turn_id as <thread_id>-<turn_id>All identifier normalization rules must be applied consistently across the system to ensure workspace path determinism and correct state lookups.